MIPS/GAS: Cut TLS reloc dead code path in `md_apply_fix'
authorMaciej W. Rozycki <macro@imgtec.com>
Tue, 24 May 2016 13:05:19 +0000 (14:05 +0100)
committerMaciej W. Rozycki <macro@imgtec.com>
Tue, 24 May 2016 13:09:03 +0000 (14:09 +0100)
With code refactoring made in commit b886a2ab0d52 and the addition of
`calculate_reloc' and a separate test for TLS relocs against constants
made there the preexisting fall-through from the TLS reloc switch case
has effectively become a dead execution path.  This is because the call
to `calculate_reloc' present there is only made if `fixP->fx_done' is
true, which can only be the case if `fixP->fx_addsy' is NULL, which in
turn has already triggered the TLS reloc test and made execution break
out of the switch statement.

Remove the fall-through then and reshape code accordingly.

gas/
* config/tc-mips.c (md_apply_fix)
<BFD_RELOC_MIPS16_TLS_TPREL_LO16>: Remove fall-through, adjust
code accordingly.

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

index 3fae33862d23fb8e46f63e8fc14e8a09027eaa2e..8cf0a50c2c7dd59ad02d9e3210708ef742e90a15 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-24  Maciej W. Rozycki  <macro@imgtec.com>
+
+       * config/tc-mips.c (md_apply_fix)
+       <BFD_RELOC_MIPS16_TLS_TPREL_LO16>: Remove fall-through, adjust
+       code accordingly.
+
 2016-05-24  Trevor Saunders  <tbsaunde+binutils@tbsaunde.org>
 
        * config/tc-xtensa.c (struct suffix_reloc_map): Change type of field
index f58955c5232d99129a71b53f674189de4f55315d..82bd8307e4824f60bbafb76f95bc4d933601bcc4 100644 (file)
@@ -14904,14 +14904,12 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
     case BFD_RELOC_MIPS16_TLS_GOTTPREL:
     case BFD_RELOC_MIPS16_TLS_TPREL_HI16:
     case BFD_RELOC_MIPS16_TLS_TPREL_LO16:
-      if (!fixP->fx_addsy)
-       {
-         as_bad_where (fixP->fx_file, fixP->fx_line,
-                       _("TLS relocation against a constant"));
-         break;
-       }
-      S_SET_THREAD_LOCAL (fixP->fx_addsy);
-      /* fall through */
+      if (fixP->fx_addsy)
+       S_SET_THREAD_LOCAL (fixP->fx_addsy);
+      else
+       as_bad_where (fixP->fx_file, fixP->fx_line,
+                     _("TLS relocation against a constant"));
+      break;
 
     case BFD_RELOC_MIPS_JMP:
     case BFD_RELOC_MIPS_SHIFT5: