2001-06-08 H.J. Lu <hjl@gnu.org>
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 9 Jun 2001 03:28:04 +0000 (03:28 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 9 Jun 2001 03:28:04 +0000 (03:28 +0000)
* config/tc-mips.c (md_apply_fix): Don't adjust common
extern/weak symbols for ELF.
(md_estimate_size_before_relax): Treat weak like extern for
ELF.
(mips_fix_adjustable): Don't adjust extern/weak symbols for
ELF.

gas/ChangeLog
gas/config/tc-mips.c

index bc7cb6234874af83aa23c25a6a68108ffc19d15e..5247678e993429135073cd7f084d28f0765ab34f 100644 (file)
@@ -1,3 +1,12 @@
+2001-06-08  H.J. Lu  <hjl@gnu.org>
+
+       * config/tc-mips.c (md_apply_fix): Don't adjust common
+       extern/weak symbols for ELF.
+       (md_estimate_size_before_relax): Treat weak like extern for
+       ELF.
+       (mips_fix_adjustable): Don't adjust extern/weak symbols for
+       ELF.
+
 2001-06-08  Alan Modra  <amodra@bigpond.net.au>
 
        * Makefile.am: 'som' is not wrongly spelled 'some'.
index 25768992318248668f55fc44db66fffaf731bd9f..6ffe65bc9dd90128b622fd5bd6d1f64a81437c3e 100644 (file)
@@ -9538,7 +9538,9 @@ md_apply_fix (fixP, valueP)
   if (fixP->fx_addsy != NULL && OUTPUT_FLAVOR == bfd_target_elf_flavour)
     {
       if (S_GET_OTHER (fixP->fx_addsy) == STO_MIPS16
-         || S_IS_WEAK (fixP->fx_addsy)
+         || ((S_IS_WEAK (fixP->fx_addsy)
+              || S_IS_EXTERN (fixP->fx_addsy))
+             && !S_IS_COMMON (fixP->fx_addsy))
          || (symbol_used_in_reloc_p (fixP->fx_addsy)
              && (((bfd_get_section_flags (stdoutput,
                                           S_GET_SEGMENT (fixP->fx_addsy))
@@ -11024,8 +11026,8 @@ md_estimate_size_before_relax (fragp, segtype)
                && ! bfd_is_com_section (symsec)
                && !linkonce
 #ifdef OBJ_ELF
-               /* A weak symbol is treated as external.  */
-               && ! S_IS_WEAK (sym)
+               /* A global or weak symbol is treated as external.  */
+               && ! (S_IS_EXTERN (sym) || S_IS_WEAK (sym))
 #endif
                );
     }
@@ -11063,6 +11065,11 @@ int
 mips_fix_adjustable (fixp)
      fixS *fixp;
 {
+#ifdef OBJ_ELF
+  /* Prevent all adjustments to global symbols.  */
+  if (S_IS_EXTERN (fixp->fx_addsy) || S_IS_WEAK (fixp->fx_addsy))
+    return 0;
+#endif
   if (fixp->fx_r_type == BFD_RELOC_MIPS16_JMP)
     return 0;
   if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT