diff options
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp | 2 | ||||
-rw-r--r-- | lld/test/pecoff/Inputs/armnt-ImageBase.obj.yaml | 39 | ||||
-rw-r--r-- | lld/test/pecoff/Inputs/armnt-ImageBase.s | 16 | ||||
-rw-r--r-- | lld/test/pecoff/armnt-ImageBase.test | 14 |
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: ] + |