summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorSam Parker <sam.parker@arm.com>2017-01-13 11:04:21 +0000
committerSam Parker <sam.parker@arm.com>2017-01-13 11:04:21 +0000
commit770ceb69ba997d9a58cc258490640960911e7c11 (patch)
tree56912ea2260427dfdb4ede08dc37ee9dbdc56024 /llvm/tools/llvm-objdump/llvm-objdump.cpp
parent438a1ecc2caa8a0e96ba26ea067069d59ae03404 (diff)
downloadbcm5719-llvm-770ceb69ba997d9a58cc258490640960911e7c11.tar.gz
bcm5719-llvm-770ceb69ba997d9a58cc258490640960911e7c11.zip
[ARM] Enable objdump to construct triple for ARM
Now that The ARMAttributeParser has been moved into the library, it has been modified so that it can parse the attributes without printing them and stores them in a map. ELFObjectFile now queries the attributes to fill out the architecture details of a provided triple for 'arm' and 'thumb' targets. llvm-objdump uses this new functionality. Differential Revision: https://reviews.llvm.org/D28281 llvm-svn: 291898
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 8373f0ce3f1..6b8a43ea1bd 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -357,7 +357,16 @@ static const Target *getTarget(const ObjectFile *Obj = nullptr) {
llvm::Triple TheTriple("unknown-unknown-unknown");
if (TripleName.empty()) {
if (Obj) {
- TheTriple.setArch(Triple::ArchType(Obj->getArch()));
+ auto Arch = Obj->getArch();
+ TheTriple.setArch(Triple::ArchType(Arch));
+
+ // For ARM targets, try to use the build attributes to build determine
+ // the build target. Target features are also added, but later during
+ // disassembly.
+ if (Arch == Triple::arm || Arch == Triple::armeb) {
+ Obj->setARMSubArch(TheTriple);
+ }
+
// TheTriple defaults to ELF, and COFF doesn't have an environment:
// the best we can do here is indicate that it is mach-o.
if (Obj->isMachO())
@@ -369,8 +378,16 @@ static const Target *getTarget(const ObjectFile *Obj = nullptr) {
TheTriple.setTriple("thumbv7-windows");
}
}
- } else
+ } else {
TheTriple.setTriple(Triple::normalize(TripleName));
+ // Use the triple, but also try to combine with ARM build attributes.
+ if (Obj) {
+ auto Arch = Obj->getArch();
+ if (Arch == Triple::arm || Arch == Triple::armeb) {
+ Obj->setARMSubArch(TheTriple);
+ }
+ }
+ }
// Get the target specific parser.
std::string Error;
OpenPOWER on IntegriCloud