diff options
| author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-12-31 22:32:21 +0000 |
|---|---|---|
| committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-12-31 22:32:21 +0000 |
| commit | 0ba09e6b843995837862e841e0184d4af19e1b05 (patch) | |
| tree | fc13200f8189e9879e2a533cdacc2430bf19f9ad | |
| parent | 508d29d5b7aa6df8a700d95c69692fec41506c24 (diff) | |
| download | bcm5719-llvm-0ba09e6b843995837862e841e0184d4af19e1b05.tar.gz bcm5719-llvm-0ba09e6b843995837862e841e0184d4af19e1b05.zip | |
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
| -rw-r--r-- | lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp | 3 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp | 3 | ||||
| -rw-r--r-- | lld/test/pecoff/Inputs/armnt-obj.s | 12 | ||||
| -rw-r--r-- | lld/test/pecoff/Inputs/armnt-obj.yaml | 29 | ||||
| -rw-r--r-- | lld/test/pecoff/armnt.test | 6 |
5 files changed, 53 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp index e6b0a741ee3..574badc6286 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 13f6a2e3a36..06d1c030bf4 100644 --- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp @@ -697,6 +697,9 @@ void AtomChunk::addBaseRelocations(std::vector<uint64_t> &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 00000000000..20eeab0e1dd --- /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 00000000000..7c53c6f0069 --- /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 00000000000..1cf6cd8114a --- /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 + |

