[PATCH] D23655: [ELF] - Fix for PR28976 - Corrupted section contents when using linker scripts
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 19 08:54:36 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL279264: [ELF] - Fix for PR28976 - Corrupted section contents when using linker scripts (authored by grimar).
Changed prior to commit:
https://reviews.llvm.org/D23655?vs=68515&id=68699#toc
Repository:
rL LLVM
https://reviews.llvm.org/D23655
Files:
lld/trunk/ELF/InputSection.cpp
lld/trunk/ELF/OutputSections.cpp
lld/trunk/ELF/Relocations.cpp
lld/trunk/test/ELF/linkerscript/Inputs/linkerscript-merge-sections-reloc.s
lld/trunk/test/ELF/linkerscript/linkerscript-merge-sections-reloc.s
Index: lld/trunk/test/ELF/linkerscript/linkerscript-merge-sections-reloc.s
===================================================================
--- lld/trunk/test/ELF/linkerscript/linkerscript-merge-sections-reloc.s
+++ lld/trunk/test/ELF/linkerscript/linkerscript-merge-sections-reloc.s
@@ -0,0 +1,16 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/linkerscript-merge-sections-reloc.s -o %t1.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t2.o
+# RUN: echo "SECTIONS {}" > %t.script
+# RUN: ld.lld -o %t --script %t.script %t1.o %t2.o
+# RUN: llvm-objdump -s %t | FileCheck %s
+
+## Check that sections content is not corrupted.
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 44332211 00000000 44332211 00000000
+# CHECK-NEXT: f0ffffff ffffffff
+
+.globl _start
+_foo:
+ .quad 0x11223344
+ .quad _start - .
Index: lld/trunk/test/ELF/linkerscript/Inputs/linkerscript-merge-sections-reloc.s
===================================================================
--- lld/trunk/test/ELF/linkerscript/Inputs/linkerscript-merge-sections-reloc.s
+++ lld/trunk/test/ELF/linkerscript/Inputs/linkerscript-merge-sections-reloc.s
@@ -0,0 +1,3 @@
+.globl _start
+_start:
+ .quad 0x11223344
Index: lld/trunk/ELF/InputSection.cpp
===================================================================
--- lld/trunk/ELF/InputSection.cpp
+++ lld/trunk/ELF/InputSection.cpp
@@ -351,7 +351,7 @@
const unsigned Bits = sizeof(uintX_t) * 8;
for (const Relocation<ELFT> &Rel : Relocations) {
- uintX_t Offset = Rel.Offset;
+ uintX_t Offset = getOffset(Rel.Offset);
uint8_t *BufLoc = Buf + Offset;
uint32_t Type = Rel.Type;
uintX_t A = Rel.Addend;
Index: lld/trunk/ELF/Relocations.cpp
===================================================================
--- lld/trunk/ELF/Relocations.cpp
+++ lld/trunk/ELF/Relocations.cpp
@@ -566,7 +566,7 @@
continue;
Offset = PieceI->OutputOff + RI.r_offset - PieceI->InputOff;
} else {
- Offset = C.getOffset(RI.r_offset);
+ Offset = RI.r_offset;
}
// This relocation does not require got entry, but it is relative to got and
Index: lld/trunk/ELF/OutputSections.cpp
===================================================================
--- lld/trunk/ELF/OutputSections.cpp
+++ lld/trunk/ELF/OutputSections.cpp
@@ -1274,7 +1274,7 @@
typename ELFT::uint DynamicReloc<ELFT>::getOffset() const {
if (OutputSec)
return OutputSec->getVA() + OffsetInSec;
- return InputSec->OutSec->getVA() + OffsetInSec;
+ return InputSec->OutSec->getVA() + InputSec->getOffset(OffsetInSec);
}
template <class ELFT>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23655.68699.patch
Type: text/x-patch
Size: 2657 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160819/7e8767cd/attachment.bin>
More information about the llvm-commits
mailing list