summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-07-08 01:47:28 +0000
committerRui Ueyama <ruiu@google.com>2015-07-08 01:47:28 +0000
commit4e1536c15533552c8da8a2c937367d016d3315c1 (patch)
tree44b1cf781670136d02ef0d95d46e60514629ac40
parent11863b4ae1d50a484e739b5889a7ac8710c6ef1e (diff)
downloadbcm5719-llvm-4e1536c15533552c8da8a2c937367d016d3315c1.tar.gz
bcm5719-llvm-4e1536c15533552c8da8a2c937367d016d3315c1.zip
COFF: Fix AMD64_SECTION relocation.
llvm-svn: 241658
-rw-r--r--lld/COFF/Chunks.cpp2
-rw-r--r--lld/test/COFF/reloc-x64.test79
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
+...
OpenPOWER on IntegriCloud