Tidy S_FORCE_RELOC
authorAlan Modra <amodra@gmail.com>
Thu, 27 Apr 2017 02:50:10 +0000 (12:20 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 27 Apr 2017 02:50:10 +0000 (12:20 +0930)
Separate out symbol flag reasons from section reasons to force a
reloc.  Yes, this adds another section test to the local symbol case
too.

* symbols.c (S_FORCE_RELOC): Separate section and symbol tests.

gas/ChangeLog
gas/symbols.c

index 6156e1e..d88f003 100644 (file)
@@ -1,3 +1,7 @@
+2017-04-27  Alan Modra  <amodra@gmail.com>
+
+       * symbols.c (S_FORCE_RELOC): Separate section and symbol tests.
+
 2017-04-26  Maciej W. Rozycki  <macro@imgtec.com>
 
        * config/tc-mips.c (RELAX_ENCODE): Add `PIC' flag.
index d4f09fc..7146c7d 100644 (file)
@@ -2091,16 +2091,20 @@ S_IS_DEFINED (symbolS *s)
 int
 S_FORCE_RELOC (symbolS *s, int strict)
 {
+  segT sec;
   if (LOCAL_SYMBOL_CHECK (s))
-    return ((struct local_symbol *) s)->lsy_section == undefined_section;
-
-  return ((strict
+    sec = ((struct local_symbol *) s)->lsy_section;
+  else
+    {
+      if ((strict
           && ((s->bsym->flags & BSF_WEAK) != 0
               || (EXTERN_FORCE_RELOC
                   && (s->bsym->flags & BSF_GLOBAL) != 0)))
-         || (s->bsym->flags & BSF_GNU_INDIRECT_FUNCTION) != 0
-         || s->bsym->section == undefined_section
-         || bfd_is_com_section (s->bsym->section));
+         || (s->bsym->flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
+       return TRUE;
+      sec = s->bsym->section;
+    }
+  return bfd_is_und_section (sec) || bfd_is_com_section (sec);
 }
 
 int