summaryrefslogtreecommitdiffstats
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
commit9b7c0af2926d45c1c4ea178be784e31a853a0ec9 (patch)
treec2cb5aec838a9aaaecaba0747ef74ce1823bcf99
parent68af84566143e72b366e154ec2fe91b97468cd50 (diff)
downloadbcm5719-llvm-9b7c0af2926d45c1c4ea178be784e31a853a0ec9.tar.gz
bcm5719-llvm-9b7c0af2926d45c1c4ea178be784e31a853a0ec9.zip
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. llvm-svn: 203761
-rw-r--r--llvm/lib/Object/COFFObjectFile.cpp4
-rw-r--r--llvm/lib/Support/Path.cpp1
-rwxr-xr-xllvm/test/tools/llvm-readobj/Inputs/trivial.obj.coff-armbin0 -> 367 bytes
-rw-r--r--llvm/test/tools/llvm-readobj/file-headers.test17
4 files changed, 22 insertions, 0 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp
index 6ef2fbfed53..461dbac1168 100644
--- a/llvm/lib/Object/COFFObjectFile.cpp
+++ b/llvm/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/llvm/lib/Support/Path.cpp b/llvm/lib/Support/Path.cpp
index 6fdad22158d..895e81f4946 100644
--- a/llvm/lib/Support/Path.cpp
+++ b/llvm/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/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.coff-arm b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.coff-arm
new file mode 100755
index 00000000000..e3b5df4c778
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.coff-arm
Binary files differ
diff --git a/llvm/test/tools/llvm-readobj/file-headers.test b/llvm/test/tools/llvm-readobj/file-headers.test
index b2b454772d6..845bad87930 100644
--- a/llvm/test/tools/llvm-readobj/file-headers.test
+++ b/llvm/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
OpenPOWER on IntegriCloud