PR gas/12532
authorNick Clifton <nickc@redhat.com>
Tue, 12 Apr 2011 11:47:38 +0000 (11:47 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 12 Apr 2011 11:47:38 +0000 (11:47 +0000)
* config/tc-arm.c (relax_branch): Do not relax branches to
preemptable global symbols.

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

index dc2337e..e8c9ebe 100644 (file)
@@ -1,3 +1,9 @@
+2011-04-12  Nick Clifton  <nickc@redhat.com>
+
+       PR gas/12532
+       * config/tc-arm.c (relax_branch): Do not relax branches to
+       preemptable global symbols.
+
 2011-04-11  Julian Brown  <julian@codesourcery.com>
 
        * config/tc-arm.c (parse_psr): Add LHS argument. Improve support
index ae9ba18..736693e 100644 (file)
@@ -19075,6 +19075,12 @@ relax_branch (fragS *fragp, asection *sec, int bits, long stretch)
   if (S_IS_DEFINED (fragp->fr_symbol)
       && ARM_IS_FUNC (fragp->fr_symbol))
       return 4;
+
+  /* PR 12532.  Global symbols with default visibility might
+     be preempted, so do not relax relocations to them.  */
+  if ((ELF_ST_VISIBILITY (S_GET_OTHER (fragp->fr_symbol)) == STV_DEFAULT)
+      && (! S_IS_LOCAL (fragp->fr_symbol)))
+    return 4;
 #endif
 
   val = relaxed_symbol_addr (fragp, stretch);