summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/ObjectFile.cpp
diff options
context:
space:
mode:
authorVlad Tsyrklevich <vlad@tsyrklevich.net>2017-09-19 02:22:48 +0000
committerVlad Tsyrklevich <vlad@tsyrklevich.net>2017-09-19 02:22:48 +0000
commitde62046d68083a9a39ab29194adb6258a7ac76a9 (patch)
tree6a630da690f61f56d52287c94920b5b363f6e4d7 /llvm/lib/Object/ObjectFile.cpp
parentb7fdaf2cd403e99f3079efafc1793e3e7868a245 (diff)
downloadbcm5719-llvm-de62046d68083a9a39ab29194adb6258a7ac76a9.tar.gz
bcm5719-llvm-de62046d68083a9a39ab29194adb6258a7ac76a9.zip
Allow public Triple deduction from ObjectFiles.
Move logic that allows for Triple deduction from an ObjectFile object out of llvm-objdump.cpp into a public factory, found in the ObjectFile class. This should allow other tools in the future to use this logic without reimplementation. Patch by Mitch Phillips Differential Revision: https://reviews.llvm.org/D37719 llvm-svn: 313605
Diffstat (limited to 'llvm/lib/Object/ObjectFile.cpp')
-rw-r--r--llvm/lib/Object/ObjectFile.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Object/ObjectFile.cpp b/llvm/lib/Object/ObjectFile.cpp
index 8377dd0d73f..67818409986 100644
--- a/llvm/lib/Object/ObjectFile.cpp
+++ b/llvm/lib/Object/ObjectFile.cpp
@@ -79,6 +79,31 @@ section_iterator ObjectFile::getRelocatedSection(DataRefImpl Sec) const {
return section_iterator(SectionRef(Sec, this));
}
+Triple ObjectFile::makeTriple() const {
+ Triple TheTriple;
+ auto Arch = 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)
+ 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 (isMachO())
+ TheTriple.setObjectFormat(Triple::MachO);
+
+ if (isCOFF()) {
+ const auto COFFObj = dyn_cast<COFFObjectFile>(this);
+ if (COFFObj->getArch() == Triple::thumb)
+ TheTriple.setTriple("thumbv7-windows");
+ }
+
+ return TheTriple;
+}
+
Expected<std::unique_ptr<ObjectFile>>
ObjectFile::createObjectFile(MemoryBufferRef Object, file_magic Type) {
StringRef Data = Object.getBuffer();
OpenPOWER on IntegriCloud