summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp2
-rw-r--r--lld/test/pecoff/Inputs/armnt-ImageBase.obj.yaml39
-rw-r--r--lld/test/pecoff/Inputs/armnt-ImageBase.s16
-rw-r--r--lld/test/pecoff/armnt-ImageBase.test14
4 files changed, 70 insertions, 1 deletions
diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
index eb05d584270..2d000db6634 100644
--- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
@@ -588,7 +588,7 @@ void AtomChunk::applyRelocationsARM(uint8_t *Buffer,
continue;
bool AssumeTHUMBCode = false;
- if (auto Target = cast_or_null<DefinedAtom>(R->target()))
+ if (auto Target = dyn_cast<DefinedAtom>(R->target()))
AssumeTHUMBCode = Target->permissions() == DefinedAtom::permR_X ||
Target->permissions() == DefinedAtom::permRWX;
diff --git a/lld/test/pecoff/Inputs/armnt-ImageBase.obj.yaml b/lld/test/pecoff/Inputs/armnt-ImageBase.obj.yaml
new file mode 100644
index 00000000000..69cd530253b
--- /dev/null
+++ b/lld/test/pecoff/Inputs/armnt-ImageBase.obj.yaml
@@ -0,0 +1,39 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 7047FEDE00000000
+ Relocations:
+ - VirtualAddress: 4
+ SymbolName: __ImageBase
+ Type: 1
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: mainCRTStartup
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __ImageBase
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/lld/test/pecoff/Inputs/armnt-ImageBase.s b/lld/test/pecoff/Inputs/armnt-ImageBase.s
new file mode 100644
index 00000000000..a17458eddb1
--- /dev/null
+++ b/lld/test/pecoff/Inputs/armnt-ImageBase.s
@@ -0,0 +1,16 @@
+
+ .syntax unified
+ .thumb
+ .text
+
+ .def mainCRTStartup
+ .type 32
+ .scl 2
+ .endef
+ .align 2
+ .thumb_func
+mainCRTStartup:
+ bx lr
+ trap
+ .long __ImageBase
+
diff --git a/lld/test/pecoff/armnt-ImageBase.test b/lld/test/pecoff/armnt-ImageBase.test
new file mode 100644
index 00000000000..b4bf28c5eb8
--- /dev/null
+++ b/lld/test/pecoff/armnt-ImageBase.test
@@ -0,0 +1,14 @@
+# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-ImageBase.obj.yaml
+# RUN: llvm-readobj -r %t.obj | FileCheck %s -check-prefix BEFORE
+# RUN: lld -flavor link /out:%t.exe %t.obj /subsystem:console
+# RUN: llvm-readobj -r %t.exe | FileCheck %s -check-prefix AFTER
+
+BEFORE: Relocations [
+BEFORE: Section {{.*}} .text {
+BEFORE: 0x4 IMAGE_REL_ARM_ADDR32 __ImageBase
+BEFORE: }
+BEFORE: ]
+
+AFTER: Relocations [
+AFTER-NEXT: ]
+
OpenPOWER on IntegriCloud