From 0c096dcf14df1ed6ce869015ca623d8fabf1f0ef Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 13 Nov 2018 01:55:15 +0000 Subject: [PATCH] Fix mips build with GCC 9. This patch fixes the build for MIPS (o32) with GCC 9 by stopping MIPS __longjmp from using strong_alias, instead defining the alias manually, so that the intended effect of not copying the nomips16 attribute is achieved, as explained in the included comment. Tested with build-many-glibcs.py compilers build for mips64-linux-gnu (which includes glibc builds for all three ABIs). * sysdeps/mips/__longjmp.c (__longjmp): Define alias manually with alias attribute, not with strong_alias. --- ChangeLog | 3 +++ sysdeps/mips/__longjmp.c | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index c7ddb7f33cf..01d9c7226e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2018-11-13 Joseph Myers + * sysdeps/mips/__longjmp.c (__longjmp): Define alias manually with + alias attribute, not with strong_alias. + * include/libc-symbols.h [SHARED && !NO_HIDDEN && !__ASSEMBLER__] (__hidden_ver2): New macro. Use old definition of __hidden_ver1 with additional parameter thread. diff --git a/sysdeps/mips/__longjmp.c b/sysdeps/mips/__longjmp.c index 56bb73f1bc0..7c95bc40308 100644 --- a/sysdeps/mips/__longjmp.c +++ b/sysdeps/mips/__longjmp.c @@ -81,4 +81,9 @@ ____longjmp (__jmp_buf env_arg, int val_arg) for (;;); } -strong_alias (____longjmp, __longjmp); +/* Not using strong_alias because the nomips16 attribute cannot be + copied from ____longjmp to __longjmp, because of the + architecture-independent declaration of __longjmp without the + attribute and compiler errors for such attributes not being the + same on all declarations. */ +extern __typeof (____longjmp) __longjmp __attribute__ ((alias ("____longjmp"))); -- 2.47.2