summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2014-03-13 07:02:35 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2014-03-13 07:02:35 +0000
commitb0f12dfab6b938351d373ca26c3ee56fd91fad8b (patch)
tree929f3a4ee6c178130c117b222e996c292e04dc46
parentec7eedc5db065b407cfb9945e2970a791a25705f (diff)
downloadllvm-b0f12dfab6b938351d373ca26c3ee56fd91fad8b.tar.gz
llvm-b0f12dfab6b938351d373ca26c3ee56fd91fad8b.tar.bz2
llvm-b0f12dfab6b938351d373ca26c3ee56fd91fad8b.tar.xz
Support: add support to identify WinCOFF/ARM objects
Add the Windows COFF ARM object file magic. This enables the LLVM tools to interact with COFF object files for Windows on ARM. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203761 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Object/COFFObjectFile.cpp4
-rw-r--r--lib/Support/Path.cpp1
-rwxr-xr-xtest/tools/llvm-readobj/Inputs/trivial.obj.coff-armbin0 -> 367 bytes
-rw-r--r--test/tools/llvm-readobj/file-headers.test17
4 files changed, 22 insertions, 0 deletions
diff --git a/lib/Object/COFFObjectFile.cpp b/lib/Object/COFFObjectFile.cpp
index 6ef2fbfed5..461dbac116 100644
--- a/lib/Object/COFFObjectFile.cpp
+++ b/lib/Object/COFFObjectFile.cpp
@@ -663,6 +663,8 @@ StringRef COFFObjectFile::getFileFormatName() const {
return "COFF-i386";
case COFF::IMAGE_FILE_MACHINE_AMD64:
return "COFF-x86-64";
+ case COFF::IMAGE_FILE_MACHINE_ARMNT:
+ return "COFF-ARM";
default:
return "COFF-<unknown arch>";
}
@@ -674,6 +676,8 @@ unsigned COFFObjectFile::getArch() const {
return Triple::x86;
case COFF::IMAGE_FILE_MACHINE_AMD64:
return Triple::x86_64;
+ case COFF::IMAGE_FILE_MACHINE_ARMNT:
+ return Triple::thumb;
default:
return Triple::UnknownArch;
}
diff --git a/lib/Support/Path.cpp b/lib/Support/Path.cpp
index 6fdad22158..895e81f494 100644
--- a/lib/Support/Path.cpp
+++ b/lib/Support/Path.cpp
@@ -1016,6 +1016,7 @@ error_code has_magic(const Twine &path, const Twine &magic, bool &result) {
case 0x66: // MPS R4000 Windows
case 0x50: // mc68K
case 0x4c: // 80386 Windows
+ case 0xc4: // ARMNT Windows
if (Magic[1] == 0x01)
return file_magic::coff_object;
diff --git a/test/tools/llvm-readobj/Inputs/trivial.obj.coff-arm b/test/tools/llvm-readobj/Inputs/trivial.obj.coff-arm
new file mode 100755
index 0000000000..e3b5df4c77
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/trivial.obj.coff-arm
Binary files differ
diff --git a/test/tools/llvm-readobj/file-headers.test b/test/tools/llvm-readobj/file-headers.test
index b2b454772d..845bad8793 100644
--- a/test/tools/llvm-readobj/file-headers.test
+++ b/test/tools/llvm-readobj/file-headers.test
@@ -1,3 +1,5 @@
+RUN: llvm-readobj -h %p/Inputs/trivial.obj.coff-arm \
+RUN: | FileCheck %s -check-prefix COFF-ARM
RUN: llvm-readobj -h %p/Inputs/trivial.obj.coff-i386 \
RUN: | FileCheck %s -check-prefix COFF32
RUN: llvm-readobj -h %p/Inputs/trivial.obj.coff-x86-64 \
@@ -13,6 +15,21 @@ RUN: | FileCheck %s -check-prefix COFF-UNKNOWN
RUN: llvm-readobj -h %p/Inputs/magic.coff-importlib \
RUN: | FileCheck %s -check-prefix COFF-IMPORTLIB
+COFF-ARM: File: {{(.*[/\\])?}}trivial.obj.coff-arm
+COFF-ARM-NEXT: Format: COFF-ARM
+COFF-ARM-NEXT: Arch: thumb
+COFF-ARM-NEXT: AddressSize: 32bit
+COFF-ARM-NEXT: ImageFileHeader {
+COFF-ARM-NEXT: Machine: IMAGE_FILE_MACHINE_ARMNT (0x1C4)
+COFF-ARM-NEXT: SectionCount: 2
+COFF-ARM-NEXT: TimeDateStamp: 2014-03-13 02:48:34 (0x53211C82)
+COFF-ARM-NEXT: PointerToSymbolTable: 0xFF
+COFF-ARM-NEXT: SymbolCount: 6
+COFF-ARM-NEXT: OptionalHeaderSize: 0
+COFF-ARM-NEXT: Characteristics [ (0x0)
+COFF-ARM-NEXT: ]
+COFF-ARM-NEXT: }
+
COFF32: File: {{(.*[/\\])?}}trivial.obj.coff-i386
COFF32-NEXT: Format: COFF-i386
COFF32-NEXT: Arch: i386