aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2018-11-13 01:55:15 +0000
committerJoseph Myers <joseph@codesourcery.com>2018-11-13 01:55:15 +0000
commit0c096dcf14df1ed6ce869015ca623d8fabf1f0ef (patch)
treea9d0c83761187b0a87a4bcb9296ffce3fa1b2316
parent9c4b457e1b47369a40afd5e5e220f5d657667c0a (diff)
downloadglibc-0c096dcf14df1ed6ce869015ca623d8fabf1f0ef.zip
glibc-0c096dcf14df1ed6ce869015ca623d8fabf1f0ef.tar.gz
glibc-0c096dcf14df1ed6ce869015ca623d8fabf1f0ef.tar.bz2
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--ChangeLog3
-rw-r--r--sysdeps/mips/__longjmp.c7
2 files changed, 9 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index c7ddb7f..01d9c72 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 56bb73f..7c95bc4 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")));