On Sat, Jan 22, 2022 at 10:32:21AM +0100, Martin Liška wrote:
> I've just noticed the patch broke a few cross compilers:
>
> s390x-ibm-tpf:
>
> /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/s390/s390-common.cc:
> In function ‘bool s390_supports_split_stack(bool, gcc_options*)’:
> /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/s390/s390-common.cc:126:13:
> error: ‘struct gcc_options’ has no member named ‘x_linux_libc’
> 126 | if (opts->x_linux_libc == LIBC_GLIBC)
> | ^~~~~~~~~~~~
>
> i686-kopensolaris-gnu, i686-symbolics-gnu
>
> /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/i386/i386-common.cc:
> In function ‘bool ix86_supports_split_stack(bool, gcc_options*)’:
> /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/i386/i386-common.cc:1721:13:
> error: ‘struct gcc_options’ has no member named ‘x_linux_libc’
> 1721 | if (opts->x_linux_libc != LIBC_GLIBC)
> | ^~~~~~~~~~~~
> make[1]: *** [Makefile:2418: i386-common.o] Error 1
>
> Can you please take a look? Btw. do you have a bugzilla account?
Actually, I suspect we either need something like following patch,
or need to change gcc/config/{linux,rs6000/linux{,64},alpha/linux}.h
so that next to those OPTION_GLIBC etc. macros it also defines versions
of those macros with opts argument.
Untested and I don't have cycles to test this right now.
2022-01-22 Jakub Jelinek <[email protected]>
* common/config/s390/s390-common.cc (s390_supports_split_stack): Re-add
ATTRIBUTE_UNUSED to opts parameter. If OPTION_GLIBC is defined and
SINGLE_LIBC is defined too, use OPTION_GLIBC as condition, otherwise
if OPTION_GLIBC is defined, use opts->x_linux_libc == LIBC_GLIBC as
condition, otherwise assume if (false).
* common/config/i386/i386-common.cc (ix86_supports_split_stack): If
OPTION_GLIBC is defined and SINGLE_LIBC is defined too, use
!OPTION_GLIBC as condition, otherwise if OPTION_GLIBC is defined,
use opts->x_linux_libc != LIBC_GLIBC as condition, otherwise assume
if (true).
--- gcc/common/config/s390/s390-common.cc.jj 2022-01-21 22:43:22.847719836
+0100
+++ gcc/common/config/s390/s390-common.cc 2022-01-22 13:05:31.205118265
+0100
@@ -121,10 +121,16 @@ s390_handle_option (struct gcc_options *
static bool
s390_supports_split_stack (bool report,
- struct gcc_options *opts)
+ struct gcc_options *opts ATTRIBUTE_UNUSED)
{
+#ifdef OPTION_GLIBC
+#ifdef SINGLE_LIBC
+ if (OPTION_GLIBC)
+#else
if (opts->x_linux_libc == LIBC_GLIBC)
+#endif
return true;
+#endif
if (report)
error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
--- gcc/common/config/i386/i386-common.cc.jj 2022-01-22 12:02:24.572563780
+0100
+++ gcc/common/config/i386/i386-common.cc 2022-01-22 13:07:12.223700957
+0100
@@ -1717,9 +1717,13 @@ static bool
ix86_supports_split_stack (bool report,
struct gcc_options *opts ATTRIBUTE_UNUSED)
{
-#ifdef TARGET_THREAD_SPLIT_STACK_OFFSET
+#if defined(TARGET_THREAD_SPLIT_STACK_OFFSET) && defined(OPTION_GLIBC)
+#ifdef SINGLE_LIBC
+ if (!OPTION_GLIBC)
+#else
if (opts->x_linux_libc != LIBC_GLIBC)
#endif
+#endif
{
if (report)
error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
>
> Cheers,
> Martin
Jakub