* mips.h (ELF_ST_SET_MIPS_PIC): Clear any STO_MIPS16 setting.
authorMaciej W. Rozycki <macro@linux-mips.org>
Thu, 6 Jun 2013 22:09:07 +0000 (22:09 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Thu, 6 Jun 2013 22:09:07 +0000 (22:09 +0000)
include/elf/ChangeLog
include/elf/mips.h

index 9be3cff..dcbe686 100644 (file)
@@ -1,3 +1,7 @@
+2013-06-06  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * mips.h (ELF_ST_SET_MIPS_PIC): Clear any STO_MIPS16 setting.
+
 2013-05-30  Paul Brook  <paul@codesourcery.com>
 
        * mips.h (R_MIPS_EH): New.
index b5f7e1a..44d815e 100644 (file)
@@ -811,7 +811,10 @@ extern void bfd_mips_elf32_swap_reginfo_out
    although MIPS16 symbols are never considered to be MIPS_PIC.  */
 #define STO_MIPS_PIC           0x20
 #define ELF_ST_IS_MIPS_PIC(other) (((other) & STO_MIPS_FLAGS) == STO_MIPS_PIC)
-#define ELF_ST_SET_MIPS_PIC(other) (((other) & ~STO_MIPS_FLAGS) | STO_MIPS_PIC)
+#define ELF_ST_SET_MIPS_PIC(other)                                     \
+  ((ELF_ST_IS_MIPS16 (other)                                           \
+    ? ((other) & ~(STO_MIPS16 | STO_MIPS_FLAGS))                       \
+    : ((other) & ~STO_MIPS_FLAGS)) | STO_MIPS_PIC)
 
 /* This value is used for a mips16 .text symbol.  */
 #define STO_MIPS16             0xf0