PR 77642 points out that since the change to generate runtime types from Go libgo is passing the wrong type to __splitstack_find: it is passing uintptr* to a function that expects size_t*. This breaks on s390. This patch, based on one from Andreas Krebbel in the PR, fixes the problem. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 240146) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -b34c93bf00ec4f2ad043ec89ff96989e0d1b26aa +80720773ac1a3433b7de59ffa5c04744123247c3 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: libgo/runtime/proc.c =================================================================== --- libgo/runtime/proc.c (revision 240053) +++ libgo/runtime/proc.c (working copy) @@ -2052,9 +2052,13 @@ doentersyscall() // Leave SP around for GC and traceback. #ifdef USING_SPLIT_STACK - g->gcstack = __splitstack_find(nil, nil, &g->gcstacksize, - &g->gcnextsegment, &g->gcnextsp, - &g->gcinitialsp); + { + size_t gcstacksize; + g->gcstack = __splitstack_find(nil, nil, &gcstacksize, + &g->gcnextsegment, &g->gcnextsp, + &g->gcinitialsp); + g->gcstacksize = (uintptr)gcstacksize; + } #else { void *v; @@ -2099,9 +2103,13 @@ runtime_entersyscallblock(void) // Leave SP around for GC and traceback. #ifdef USING_SPLIT_STACK - g->gcstack = __splitstack_find(nil, nil, &g->gcstacksize, - &g->gcnextsegment, &g->gcnextsp, - &g->gcinitialsp); + { + size_t gcstacksize; + g->gcstack = __splitstack_find(nil, nil, &gcstacksize, + &g->gcnextsegment, &g->gcnextsp, + &g->gcinitialsp); + g->gcstacksize = (uintptr)gcstacksize; + } #else g->gcnextsp = (byte *) &p; #endif