Fix mips build with GCC 9.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 13 Nov 2018 01:55:15 +0000 (01:55 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 13 Nov 2018 01:55:15 +0000 (01:55 +0000)
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
sysdeps/mips/__longjmp.c

index c7ddb7f..01d9c72 100644 (file)
--- 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.
index 56bb73f..7c95bc4 100644 (file)
@@ -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")));