diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-07-08 01:47:28 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-07-08 01:47:28 +0000 |
| commit | 4e1536c15533552c8da8a2c937367d016d3315c1 (patch) | |
| tree | 44b1cf781670136d02ef0d95d46e60514629ac40 | |
| parent | 11863b4ae1d50a484e739b5889a7ac8710c6ef1e (diff) | |
| download | bcm5719-llvm-4e1536c15533552c8da8a2c937367d016d3315c1.tar.gz bcm5719-llvm-4e1536c15533552c8da8a2c937367d016d3315c1.zip | |
COFF: Fix AMD64_SECTION relocation.
llvm-svn: 241658
| -rw-r--r-- | lld/COFF/Chunks.cpp | 2 | ||||
| -rw-r--r-- | lld/test/COFF/reloc-x64.test | 79 |
2 files changed, 80 insertions, 1 deletions
diff --git a/lld/COFF/Chunks.cpp b/lld/COFF/Chunks.cpp index 0004d1006c9..03a1922385a 100644 --- a/lld/COFF/Chunks.cpp +++ b/lld/COFF/Chunks.cpp @@ -60,7 +60,7 @@ void SectionChunk::applyRelX64(uint8_t *Off, uint16_t Type, uint64_t S, case IMAGE_REL_AMD64_REL32_3: add32(Off, S - P - 7); break; case IMAGE_REL_AMD64_REL32_4: add32(Off, S - P - 8); break; case IMAGE_REL_AMD64_REL32_5: add32(Off, S - P - 9); break; - case IMAGE_REL_AMD64_SECTION: add16(Off, Out->getSectionIndex()); break; + case IMAGE_REL_AMD64_SECTION: add16(Off, Out->getSectionIndex() + 1); break; case IMAGE_REL_AMD64_SECREL: add32(Off, S - Out->getRVA()); break; default: llvm::report_fatal_error("Unsupported relocation type"); diff --git a/lld/test/COFF/reloc-x64.test b/lld/test/COFF/reloc-x64.test new file mode 100644 index 00000000000..624241bc5de --- /dev/null +++ b/lld/test/COFF/reloc-x64.test @@ -0,0 +1,79 @@ +# RUN: yaml2obj < %s > %t.obj +# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj +# RUN: llvm-objdump -d %t.exe | FileCheck %s + +# CHECK: .text: +# CHECK: 1000: a1 00 10 00 40 00 00 00 00 +# CHECK: 1009: a1 00 10 00 40 01 00 00 00 +# CHECK: 1012: a1 00 10 00 00 00 00 00 00 +# CHECK: 101b: a1 e0 ff ff ff 00 00 00 00 +# CHECK: 1024: a1 d6 ff ff ff 00 00 00 00 +# CHECK: 102d: a1 cc ff ff ff 00 00 00 00 +# CHECK: 1036: a1 c2 ff ff ff 00 00 00 00 +# CHECK: 103f: a1 b8 ff ff ff 00 00 00 00 +# CHECK: 1048: a1 ae ff ff ff 00 00 00 00 +# CHECK: 1051: a1 01 00 00 00 00 00 00 00 + +--- +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [] +sections: + - Name: .text + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 4096 + SectionData: A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000 + Relocations: + - VirtualAddress: 1 + SymbolName: main + Type: IMAGE_REL_AMD64_ADDR32 + - VirtualAddress: 10 + SymbolName: main + Type: IMAGE_REL_AMD64_ADDR64 + - VirtualAddress: 19 + SymbolName: main + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 28 + SymbolName: main + Type: IMAGE_REL_AMD64_REL32 + - VirtualAddress: 37 + SymbolName: main + Type: IMAGE_REL_AMD64_REL32_1 + - VirtualAddress: 46 + SymbolName: main + Type: IMAGE_REL_AMD64_REL32_2 + - VirtualAddress: 55 + SymbolName: main + Type: IMAGE_REL_AMD64_REL32_3 + - VirtualAddress: 64 + SymbolName: main + Type: IMAGE_REL_AMD64_REL32_4 + - VirtualAddress: 73 + SymbolName: main + Type: IMAGE_REL_AMD64_REL32_5 + - VirtualAddress: 82 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 91 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL +symbols: + - Name: .text + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 6 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: main + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_EXTERNAL +... |

