diff options
author | Joseph Myers <joseph@codesourcery.com> | 2018-11-13 01:55:15 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2018-11-13 01:55:15 +0000 |
commit | 0c096dcf14df1ed6ce869015ca623d8fabf1f0ef (patch) | |
tree | a9d0c83761187b0a87a4bcb9296ffce3fa1b2316 | |
parent | 9c4b457e1b47369a40afd5e5e220f5d657667c0a (diff) | |
download | glibc-0c096dcf14df1ed6ce869015ca623d8fabf1f0ef.tar glibc-0c096dcf14df1ed6ce869015ca623d8fabf1f0ef.tar.gz glibc-0c096dcf14df1ed6ce869015ca623d8fabf1f0ef.tar.bz2 glibc-0c096dcf14df1ed6ce869015ca623d8fabf1f0ef.zip |
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.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | sysdeps/mips/__longjmp.c | 7 |
2 files changed, 9 insertions, 1 deletions
@@ -1,5 +1,8 @@ 2018-11-13 Joseph Myers <joseph@codesourcery.com> + * 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 56bb73f1bc..7c95bc4030 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"))); |