[llvm] d86f903 - [JITLink][COFF][x86_64] Implement remaining IMAGE_REL_AMD64_REL32_*.
Sunho Kim via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 30 17:03:41 PDT 2022
Author: Sunho Kim
Date: 2022-07-31T09:03:28+09:00
New Revision: d86f903b1dee805bece02769ddb7d7f9ae166c0a
URL: https://github.com/llvm/llvm-project/commit/d86f903b1dee805bece02769ddb7d7f9ae166c0a
DIFF: https://github.com/llvm/llvm-project/commit/d86f903b1dee805bece02769ddb7d7f9ae166c0a.diff
LOG: [JITLink][COFF][x86_64] Implement remaining IMAGE_REL_AMD64_REL32_*.
Implements remaining IMAGE_REL_AMD64_REL32_*. We only need IMAGE_REL_AMD64_REL32_4 for now but doing all remaining ones for completeness. (clang only uses IMAGE_REL_AMD64_REL32_1 and IMAGE_REL_AMD64_REL32)
Reviewed By: lhames
Differential Revision: https://reviews.llvm.org/D130452
Added:
llvm/test/ExecutionEngine/JITLink/X86/COFF_rel32_4_reloc.test
Modified:
llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp
Removed:
################################################################################
diff --git a/llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp
index 7dd63bb2aa62..1cb756d8024f 100644
--- a/llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp
@@ -115,6 +115,30 @@ class COFFLinkGraphBuilder_x86_64 : public COFFLinkGraphBuilder {
Addend -= 1;
break;
}
+ case COFF::RelocationTypeAMD64::IMAGE_REL_AMD64_REL32_2: {
+ Kind = EdgeKind_coff_x86_64::PCRel32;
+ Addend = *reinterpret_cast<const support::little32_t *>(FixupPtr);
+ Addend -= 2;
+ break;
+ }
+ case COFF::RelocationTypeAMD64::IMAGE_REL_AMD64_REL32_3: {
+ Kind = EdgeKind_coff_x86_64::PCRel32;
+ Addend = *reinterpret_cast<const support::little32_t *>(FixupPtr);
+ Addend -= 3;
+ break;
+ }
+ case COFF::RelocationTypeAMD64::IMAGE_REL_AMD64_REL32_4: {
+ Kind = EdgeKind_coff_x86_64::PCRel32;
+ Addend = *reinterpret_cast<const support::little32_t *>(FixupPtr);
+ Addend -= 4;
+ break;
+ }
+ case COFF::RelocationTypeAMD64::IMAGE_REL_AMD64_REL32_5: {
+ Kind = EdgeKind_coff_x86_64::PCRel32;
+ Addend = *reinterpret_cast<const support::little32_t *>(FixupPtr);
+ Addend -= 5;
+ break;
+ }
case COFF::RelocationTypeAMD64::IMAGE_REL_AMD64_ADDR64: {
Kind = EdgeKind_coff_x86_64::Pointer64;
Addend = *reinterpret_cast<const support::little64_t *>(FixupPtr);
diff --git a/llvm/test/ExecutionEngine/JITLink/X86/COFF_rel32_4_reloc.test b/llvm/test/ExecutionEngine/JITLink/X86/COFF_rel32_4_reloc.test
new file mode 100644
index 000000000000..376b72669b8c
--- /dev/null
+++ b/llvm/test/ExecutionEngine/JITLink/X86/COFF_rel32_4_reloc.test
@@ -0,0 +1,88 @@
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-jitlink -noexec -check %s %t
+#
+# Check IMAGE_REL_AMD64_REL32_4 relocation correctly calculates the
+# delta between target and next_pc despite the existance of 4 bytes immediate field.
+#
+# jitlink-check: decode_operand(main, 3) = func - next_pc(main)
+--- !COFF
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+# The disassembly of main block data is:
+# 0: f7 05 00 00 00 00 00 00 00 00 testl $0, (%rip)
+# 0000000000000002: IMAGE_REL_AMD64_REL32_4 func
+# a: e8 00 00 00 00 callq 0xf <main+0xf>
+# 000000000000000b: IMAGE_REL_AMD64_REL32 func
+# f: c3 retq
+ SectionData: F7050000000000000000E800000000C3C3
+ Relocations:
+ - VirtualAddress: 2
+ SymbolName: func
+ Type: IMAGE_REL_AMD64_REL32_4
+ - VirtualAddress: 11
+ SymbolName: func
+ Type: IMAGE_REL_AMD64_REL32
+ - Name: .data
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: ''
+ - Name: .bss
+ Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: ''
+ SizeOfRawData: 0
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 17
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 1443257137
+ Number: 1
+ - Name: .data
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 2
+ - Name: .bss
+ Value: 0
+ SectionNumber: 3
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 3
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: func
+ Value: 16
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+
More information about the llvm-commits
mailing list