[lld] r369260 - [ELF][Hexagon] Improve error message for unknown relocations

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 19 07:07:14 PDT 2019


Author: maskray
Date: Mon Aug 19 07:07:14 2019
New Revision: 369260

URL: http://llvm.org/viewvc/llvm-project?rev=369260&view=rev
Log:
[ELF][Hexagon] Improve error message for unknown relocations

Like rLLD354040

Previously, for unknown relocation types, in -no-pie/-pie mode, we got something like:

    foo.o: unrecognized relocation ...

In -shared mode:

    error: can't create dynamic relocation ... against symbol: yyy in readonly segment

Delete the default case from Hexagon::getRelExpr and add the error there. We will get consistent error message like `error: unknown relocation (1024) against symbol foo`

Reviewed By: sidneym

Differential Revision: https://reviews.llvm.org/D66275

Modified:
    lld/trunk/ELF/Arch/Hexagon.cpp

Modified: lld/trunk/ELF/Arch/Hexagon.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/Hexagon.cpp?rev=369260&r1=369259&r2=369260&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/Hexagon.cpp (original)
+++ lld/trunk/ELF/Arch/Hexagon.cpp Mon Aug 19 07:07:14 2019
@@ -87,6 +87,20 @@ static uint32_t applyMask(uint32_t mask,
 RelExpr Hexagon::getRelExpr(RelType type, const Symbol &s,
                             const uint8_t *loc) const {
   switch (type) {
+  case R_HEX_NONE:
+    return R_NONE;
+  case R_HEX_6_X:
+  case R_HEX_8_X:
+  case R_HEX_9_X:
+  case R_HEX_10_X:
+  case R_HEX_11_X:
+  case R_HEX_12_X:
+  case R_HEX_16_X:
+  case R_HEX_32:
+  case R_HEX_32_6_X:
+  case R_HEX_HI16:
+  case R_HEX_LO16:
+    return R_ABS;
   case R_HEX_B9_PCREL:
   case R_HEX_B9_PCREL_X:
   case R_HEX_B13_PCREL:
@@ -111,7 +125,9 @@ RelExpr Hexagon::getRelExpr(RelType type
   case R_HEX_GOT_32_6_X:
     return R_GOTPLT;
   default:
-    return R_ABS;
+    error(getErrorLocation(loc) + "unknown relocation (" + Twine(type) +
+          ") against symbol " + toString(s));
+    return R_NONE;
   }
 }
 
@@ -258,8 +274,7 @@ void Hexagon::relocateOne(uint8_t *loc,
     or32le(loc, applyMask(0x00c03fff, val));
     break;
   default:
-    error(getErrorLocation(loc) + "unrecognized relocation " + toString(type));
-    break;
+    llvm_unreachable("unknown relocation");
   }
 }
 




More information about the llvm-commits mailing list