Read addend from the correct location.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 29 Sep 2016 01:20:40 +0000 (01:20 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 29 Sep 2016 01:20:40 +0000 (01:20 +0000)
llvm-svn: 282663

lld/ELF/MarkLive.cpp
lld/test/ELF/gc-sections-implicit-addend.s [new file with mode: 0644]

index 6f40ddb..724a8bf 100644 (file)
@@ -54,7 +54,7 @@ struct ResolvedReloc {
 template <class ELFT>
 static typename ELFT::uint getAddend(InputSectionBase<ELFT> &Sec,
                                      const typename ELFT::Rel &Rel) {
-  return Target->getImplicitAddend(Sec.Data.begin(),
+  return Target->getImplicitAddend(Sec.Data.begin() + Rel.r_offset,
                                    Rel.getType(Config->Mips64EL));
 }
 
diff --git a/lld/test/ELF/gc-sections-implicit-addend.s b/lld/test/ELF/gc-sections-implicit-addend.s
new file mode 100644 (file)
index 0000000..1270aff
--- /dev/null
@@ -0,0 +1,26 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=i386-unknown-linux %s -o %t.o
+# RUN: ld.lld %t.o -o %t --gc-sections
+# RUN: llvm-readobj -s %t | FileCheck %s
+# RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+
+# CHECK:      Name: .foo
+# CHECK-NEXT: Type: SHT_PROGBITS
+# CHECK-NEXT: Flags [
+# CHECK-NEXT:   SHF_ALLOC
+# CHECK-NEXT:   SHF_MERGE
+# CHECK-NEXT:   SHF_STRINGS
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x100B4
+
+# 0x100B4 == 65716
+# DISASM: leal    65716, %eax
+
+        .section        .foo,"aMS",@progbits,1
+        .byte 0
+
+        .text
+        .global _start
+_start:
+        leal    .foo, %eax