diff mbox

PR66870 PowerPC64 Enable gold linker with split stack

Message ID 56181AD9.6080501@linux.vnet.ibm.com
State New
Headers show

Commit Message

Lynn A. Boger Oct. 9, 2015, 7:51 p.m. UTC
Here's a new one.

Tried all the variations, verified that split stack is still enabled and 
uses gold linker for 64 bit targets
when using a 64 bit default compiler, and does not give the split stack 
error for 32 bit default
compilers.

On 10/08/2015 03:46 PM, Matthias Klose wrote:
> On 08.10.2015 20:56, Lynn A. Boger wrote:
>> I think my original fix with linux.h doing the #undef on
>> TARGET_CAN_SPLIT_STACK_64BIT is the right fix at least
>> for powerpc-linux-gnu 32 bit only.
>>
>> It works for powerpc-linux-gnu without multilib and doesn't break
>> powerpc64-linux-gnu or powerpc64le-linux-gnu.
>>
>> Can you tell me how you are configuring the multilib build that 
>> defaults to
>> powerpc-linux-gnu and how it
>> fails?  Maybe there is another problem for that combination.
>
> Configured with: -v
>      --with-pkgversion='Ubuntu 20151005-0ubuntu1'
> --with-bugurl='file:///usr/share/doc/gcc-snapshot/README.Bugs'
>      --enable-languages=c,ada,c++,java,go,fortran,objc,obj-c++
>      --prefix=/usr/lib/gcc-snapshot
>      --enable-shared
>      --enable-linker-build-id
>      --disable-nls
>      --with-sysroot=/
>      --enable-clocale=gnu
>      --enable-libstdcxx-debug
>      --enable-libstdcxx-time=yes
>      --with-default-libstdcxx-abi=new
>      --enable-gnu-unique-object
>      --disable-libitm
>      --disable-libquadmath
>      --enable-plugin
>      --with-system-zlib
>      --disable-browser-plugin
>      --enable-java-awt=gtk
>      --enable-gtk-cairo
> --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-snap-powerpc/jre
>      --enable-java-home
> --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-snap-powerpc
> --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-snap-powerpc
>      --with-arch-directory=ppc
>      --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
>      --enable-objc-gc
>      --enable-secureplt
>      --disable-softfloat
>      --with-cpu=default32
>      --disable-softfloat
>      --enable-targets=powerpc-linux,powerpc64-linux
>      --enable-multiarch
>      --disable-werror
>      --with-long-double-128
>      --enable-multilib
>      --enable-checking=yes
>      --build=powerpc-linux-gnu
>      --host=powerpc-linux-gnu
>      --target=powerpc-linux-gnu
>
> fails in gotools with:
> cc1: error: '-fsplit-stack' currently only supported on PowerPC64 
> GNU/Linux with glibc-2.18 or later
> cc1: error: '-fsplit-stack' is not supported by this compiler 
> configuration
>
> this information is from the log below, but it's a parallel build, so 
> a bit useless
> https://launchpadlibrarian.net/220374353/buildlog_ubuntu-wily-powerpc.gcc-snapshot_20151005-0ubuntu1_BUILDING.txt.gz 
>
>
>> As David noted, the use of TARGET_64BIT or TARGET_POWERPC64 won't 
>> work for this
>> #define.
>
> I found that out too =)  Note that ada builds are currently broken on 
> the trunk.
>
> Matthias
>
>

Comments

David Edelsohn Oct. 10, 2015, 2 p.m. UTC | #1
On Fri, Oct 9, 2015 at 3:51 PM, Lynn A. Boger
<laboger@linux.vnet.ibm.com> wrote:
> Here's a new one.
>
> Tried all the variations, verified that split stack is still enabled and
> uses gold linker for 64 bit targets
> when using a 64 bit default compiler, and does not give the split stack
> error for 32 bit default
> compilers.

This is okay if Matthias confirms that it works.

Thanks, David
Matthias Klose Oct. 10, 2015, 9:03 p.m. UTC | #2
On 10.10.2015 16:00, David Edelsohn wrote:
> On Fri, Oct 9, 2015 at 3:51 PM, Lynn A. Boger
> <laboger@linux.vnet.ibm.com> wrote:
>> Here's a new one.
>>
>> Tried all the variations, verified that split stack is still enabled and
>> uses gold linker for 64 bit targets
>> when using a 64 bit default compiler, and does not give the split stack
>> error for 32 bit default
>> compilers.
>
> This is okay if Matthias confirms that it works.

yes, that fixes the build error.

using the preprocessor for this kind of check, you get wrong results for gcc 
-m32 on powerpc64, and for gcc -m64 on powerpc.  The former looks like wrong 
code, while the latter is just missed optimization.  Not sure if it is worth 
fixing this.

I lost track of the x86 status. Is this now enabled there as well?

Matthias
Andreas Schwab Oct. 10, 2015, 9:25 p.m. UTC | #3
"Lynn A. Boger" <laboger@linux.vnet.ibm.com> writes:

> Index: gcc/config/rs6000/sysv4.h
> ===================================================================
> --- gcc/config/rs6000/sysv4.h	(revision 228653)
> +++ gcc/config/rs6000/sysv4.h	(working copy)
> @@ -940,13 +940,15 @@ ncrtn.o%s"
>  #undef TARGET_ASAN_SHADOW_OFFSET
>  #define TARGET_ASAN_SHADOW_OFFSET rs6000_asan_shadow_offset
>  
> -/* On ppc64 and ppc64le, split stack is only support for
> -   64 bit. */
> +/* On ppc64 and ppc64le, split stack is only supported for
> +   64 bit targets with a 64 bit compiler. */
>  #undef TARGET_CAN_SPLIT_STACK_64BIT
> +#if defined (__64BIT__) || defined (__powerpc64__) || defined (__ppc64__)

This doesn't make sense.  A target header cannot use host defines.

Andreas.
diff mbox

Patch

Index: gcc/common/config/rs6000/rs6000-common.c
===================================================================
--- gcc/common/config/rs6000/rs6000-common.c	(revision 228653)
+++ gcc/common/config/rs6000/rs6000-common.c	(working copy)
@@ -303,10 +303,12 @@  rs6000_supports_split_stack (bool report,
 #define TARGET_GLIBC_MINOR 0
 #endif
   /* Note: Can't test DEFAULT_ABI here, it isn't set until later.  */
+#ifdef TARGET_CAN_SPLIT_STACK_64BIT
   if (TARGET_GLIBC_MAJOR * 1000 + TARGET_GLIBC_MINOR >= 2018
       && TARGET_64BIT
       && TARGET_ELF)
     return true;
+#endif
 
   if (report)
     error ("%<-fsplit-stack%> currently only supported on PowerPC64 GNU/Linux with glibc-2.18 or later");
Index: gcc/config/rs6000/sysv4.h
===================================================================
--- gcc/config/rs6000/sysv4.h	(revision 228653)
+++ gcc/config/rs6000/sysv4.h	(working copy)
@@ -940,13 +940,15 @@  ncrtn.o%s"
 #undef TARGET_ASAN_SHADOW_OFFSET
 #define TARGET_ASAN_SHADOW_OFFSET rs6000_asan_shadow_offset
 
-/* On ppc64 and ppc64le, split stack is only support for
-   64 bit. */
+/* On ppc64 and ppc64le, split stack is only supported for
+   64 bit targets with a 64 bit compiler. */
 #undef TARGET_CAN_SPLIT_STACK_64BIT
+#if defined (__64BIT__) || defined (__powerpc64__) || defined (__ppc64__)
 #if TARGET_GLIBC_MAJOR > 2 \
   || (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 18)
 #define TARGET_CAN_SPLIT_STACK_64BIT
 #endif
+#endif
 
 /* This target uses the sysv4.opt file.  */
 #define TARGET_USES_SYSV4_OPT 1