From: Saleem Abdulrasool Date: Wed, 31 Dec 2014 22:32:21 +0000 (+0000) Subject: ReaderWriter: teach PE/COFF backend about ARM NT X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0ba09e6b843995837862e841e0184d4af19e1b05;p=platform%2Fupstream%2Fllvm.git ReaderWriter: teach PE/COFF backend about ARM NT This teaches lld about the ARM NT object types. Add a trivial test to ensure that it can handle ARM NT object file inputs. It is still unable to perform the necessary relocations for ARM NT, but this allows the linker to at least read the objects. llvm-svn: 225052 --- diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp index e6b0a74..574badc 100644 --- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp @@ -932,6 +932,9 @@ std::error_code FileCOFF::getReferenceArch(Reference::KindArch &result) { case llvm::COFF::IMAGE_FILE_MACHINE_AMD64: result = Reference::KindArch::x86_64; return std::error_code(); + case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT: + result = Reference::KindArch::ARM; + return std::error_code(); case llvm::COFF::IMAGE_FILE_MACHINE_UNKNOWN: result = Reference::KindArch::all; return std::error_code(); diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp index 13f6a2e..06d1c03 100644 --- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp @@ -697,6 +697,9 @@ void AtomChunk::addBaseRelocations(std::vector &relocSites) const { case llvm::COFF::IMAGE_FILE_MACHINE_AMD64: relType = llvm::COFF::IMAGE_REL_AMD64_ADDR64; break; + case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT: + relType = llvm::COFF::IMAGE_REL_ARM_ADDR32; + break; } for (const auto *layout : _atomLayouts) { diff --git a/lld/test/pecoff/Inputs/armnt-obj.s b/lld/test/pecoff/Inputs/armnt-obj.s new file mode 100644 index 0000000..20eeab0 --- /dev/null +++ b/lld/test/pecoff/Inputs/armnt-obj.s @@ -0,0 +1,12 @@ + + .syntax unified + .thumb + .text + + .def main + .scl 2 + .type 32 + .endef +main: + bx lr + diff --git a/lld/test/pecoff/Inputs/armnt-obj.yaml b/lld/test/pecoff/Inputs/armnt-obj.yaml new file mode 100644 index 0000000..7c53c6f --- /dev/null +++ b/lld/test/pecoff/Inputs/armnt-obj.yaml @@ -0,0 +1,29 @@ +--- +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: '7047' +symbols: + - Name: .text + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 2 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 1 + - Name: main + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL +... diff --git a/lld/test/pecoff/armnt.test b/lld/test/pecoff/armnt.test new file mode 100644 index 0000000..1cf6cd8 --- /dev/null +++ b/lld/test/pecoff/armnt.test @@ -0,0 +1,6 @@ +# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-obj.yaml +# RUN: lld -flavor link /out:%t.dll /subsystem:console /entry:main %t.obj +# RUN: llvm-readobj -sections %t.dll | FileCheck %s + +CHECK: Format: COFF-ARM +