The split stack support only recently went into the gold
linker for Power so the configure needs to detect if the
gold linker version contains that support.  If the build tries
 to use a gold linker without that support the build
will fail on Power.  My understanding was that the gold
linker support had been there for other platforms.  That is why
the configure check is target dependent and only Power cares
about the version number.

I started out with a simpler patch like you have but after trying to build it
on ppc64le, ppc64, and ppc this is what I ended up with and I didn't
want to mess up other platforms so I left those as is.

On 08/19/2015 02:33 PM, Matthias Klose wrote:
On 08/18/2015 10:36 PM, Lynn A. Boger wrote:
As discussed in PR 66870, for ppc64le and ppc64le it is preferred to
  use the gold linker with gccgo or gcc if the split stack option is enabled.
Use of the gold linker with the split stack option results in less storage
allocated for goroutine stacks; if split stack is used without the gold
linker then some testcase failures can occur.

   Since the use of the gold linker has not been well tested
with all gcc compilers on Power, it is only used as the linker if the
split stack option is used.

This adds the capability to the configure for gcc and libgo to determine
if the gold linker is available at build time, either in the path or explicitly
  configured, and its version supports split stack.  If that is the case then
defines are set that cause the gold linker to be used by the compiler when
-fsplit-stack is used.  This applies to ppc64 and ppc64le.  Other platforms
with split stack work as before.

2015-08-18    Lynn Boger <labo...@linux.vnet.ibm.com>

gcc/
         PR target/66870
         config/rs6000/linux64.h: When HAVE_LD_GOLD_SUPPORTS_SPLIT_STACK
         is defined add -fuse-ld=gold if fsplit-stack and not m32
         config/rs6000/sysv4.h:  Define TARGET_CAN_SPLIT_STACK based on
         LIBC version.
         config.in:  Set up HAVE_LD_GOLD_SUPPORTS_SPLIT_STACK.
         configure.ac:  When gold linker is available and its version
         supports split stack on ppc64, ppc64le, define
         HAVE_LD_GOLD_SUPPORTS_SPLIT_STACK.
         configure:  Regenerate.

libgo/
         PR target/66870
         configure.ac:  When gccgo for building libgo uses the gold version
         containing split stack support on ppc64, ppc64le, define
         LINKER_SUPPORTS_SPLIT_STACK.
         configure:  Regenerate.

For platforms other than ppc64 and ppc64le, the configure for gcc
and libgo behave as before.
why keep the old behaviour for other archs that have split stack support? Is it
really necessary to make this dependent on the target? I'm still using an
unreviewed/unpinged patch to enable gold for gccgo (attached).

Matthias



Reply via email to