[PATCH] D66277: [ELF][AArch64] Improve error message for unknown relocations

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 15 02:43:56 PDT 2019


MaskRay updated this revision to Diff 215356.
MaskRay edited the summary of this revision.
MaskRay added a comment.

Clarify.

  error: can't create dynamic relocation ... against symbol:

was in -shared mode


Repository:
  rLLD LLVM Linker

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66277/new/

https://reviews.llvm.org/D66277

Files:
  ELF/Arch/AArch64.cpp
  test/ELF/invalid/invalid-relocation-aarch64.test


Index: test/ELF/invalid/invalid-relocation-aarch64.test
===================================================================
--- /dev/null
+++ test/ELF/invalid/invalid-relocation-aarch64.test
@@ -0,0 +1,31 @@
+# REQUIRES: aarch64
+# RUN: yaml2obj %s -o %t.o
+# RUN: not ld.lld %t.o --defsym=foo=0 -o /dev/null 2>&1 | FileCheck %s
+# CHECK: error: unknown relocation (1024) against symbol foo
+# CHECK: error: unknown relocation (1025) against symbol foo
+
+!ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  OSABI:           ELFOSABI_FREEBSD
+  Type:            ET_REL
+  Machine:         EM_AARCH64
+Sections:
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+  - Name:            .rela.text
+    Type:            SHT_RELA
+    Link:            .symtab
+    Info:            .text
+    Relocations:
+      - Offset:          0x0000000000000000
+        Symbol:          foo
+        Type:            0x400
+      - Offset:          0x0000000000000000
+        Symbol:          foo
+        Type:            0x401
+Symbols:
+  - Name:            foo
+    Binding:         STB_GLOBAL
Index: ELF/Arch/AArch64.cpp
===================================================================
--- ELF/Arch/AArch64.cpp
+++ ELF/Arch/AArch64.cpp
@@ -76,6 +76,26 @@
 RelExpr AArch64::getRelExpr(RelType type, const Symbol &s,
                             const uint8_t *loc) const {
   switch (type) {
+  case R_AARCH64_ABS16:
+  case R_AARCH64_ABS32:
+  case R_AARCH64_ABS64:
+  case R_AARCH64_ADD_ABS_LO12_NC:
+  case R_AARCH64_LDST128_ABS_LO12_NC:
+  case R_AARCH64_LDST16_ABS_LO12_NC:
+  case R_AARCH64_LDST32_ABS_LO12_NC:
+  case R_AARCH64_LDST64_ABS_LO12_NC:
+  case R_AARCH64_LDST8_ABS_LO12_NC:
+  case R_AARCH64_MOVW_SABS_G0:
+  case R_AARCH64_MOVW_SABS_G1:
+  case R_AARCH64_MOVW_SABS_G2:
+  case R_AARCH64_MOVW_UABS_G0:
+  case R_AARCH64_MOVW_UABS_G0_NC:
+  case R_AARCH64_MOVW_UABS_G1:
+  case R_AARCH64_MOVW_UABS_G1_NC:
+  case R_AARCH64_MOVW_UABS_G2:
+  case R_AARCH64_MOVW_UABS_G2_NC:
+  case R_AARCH64_MOVW_UABS_G3:
+    return R_ABS;
   case R_AARCH64_TLSDESC_ADR_PAGE21:
     return R_AARCH64_TLSDESC_PAGE;
   case R_AARCH64_TLSDESC_LD64_LO12:
@@ -126,7 +146,9 @@
   case R_AARCH64_NONE:
     return R_NONE;
   default:
-    return R_ABS;
+    error(getErrorLocation(loc) + "unknown relocation (" + Twine(type) +
+          ") against symbol " + toString(s));
+    return R_NONE;
   }
 }
 
@@ -421,7 +443,7 @@
     or32AArch64Imm(loc, val);
     break;
   default:
-    error(getErrorLocation(loc) + "unrecognized relocation " + toString(type));
+    llvm_unreachable("unknown relocation");
   }
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66277.215356.patch
Type: text/x-patch
Size: 2682 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190815/f4c357fe/attachment.bin>


More information about the llvm-commits mailing list