summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/TapiUniversal.cpp
diff options
context:
space:
mode:
authorCyndy Ishida <cyndy_ishida@apple.com>2019-08-21 23:30:53 +0000
committerCyndy Ishida <cyndy_ishida@apple.com>2019-08-21 23:30:53 +0000
commitc20d1f90b53ae53aee3cac86a84e79d596b5711e (patch)
tree53c7b8516c3d5526dda2864b82de33216c4bea42 /llvm/lib/Object/TapiUniversal.cpp
parent78e6507b0af7d14dd2cdd6347608055cd452796b (diff)
downloadbcm5719-llvm-c20d1f90b53ae53aee3cac86a84e79d596b5711e.tar.gz
bcm5719-llvm-c20d1f90b53ae53aee3cac86a84e79d596b5711e.zip
[Object] Add tapi files to object
Summary: The intention for this is to allow reading and printing symbols out from llvm-nm. Tapi file, and Tapi universal follow a similiar format to their respective MachO Object format. The tests are dependent on llvm-nm processing tbd files which is why its in D66160 Reviewers: ributzka, steven_wu, lhames Reviewed By: ributzka, lhames Subscribers: mgorny, hiraditya, dexonsmith, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66159 llvm-svn: 369600
Diffstat (limited to 'llvm/lib/Object/TapiUniversal.cpp')
-rw-r--r--llvm/lib/Object/TapiUniversal.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/llvm/lib/Object/TapiUniversal.cpp b/llvm/lib/Object/TapiUniversal.cpp
new file mode 100644
index 00000000000..b3273e345a6
--- /dev/null
+++ b/llvm/lib/Object/TapiUniversal.cpp
@@ -0,0 +1,54 @@
+//===- TapiUniversal.cpp --------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the Text-based Dynamic Library Stub format.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Object/TapiUniversal.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Object/Error.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/TextAPI/MachO/TextAPIReader.h"
+
+using namespace llvm;
+using namespace MachO;
+using namespace object;
+
+TapiUniversal::TapiUniversal(MemoryBufferRef Source, Error &Err)
+ : Binary(ID_TapiUniversal, Source) {
+ auto Result = TextAPIReader::get(Source);
+ ErrorAsOutParameter ErrAsOuParam(&Err);
+ if (!Result) {
+ Err = Result.takeError();
+ return;
+ }
+ ParsedFile = std::move(Result.get());
+
+ auto Archs = ParsedFile->getArchitectures();
+ for (auto Arch : Archs)
+ Architectures.emplace_back(Arch);
+}
+
+TapiUniversal::~TapiUniversal() = default;
+
+Expected<std::unique_ptr<TapiFile>>
+TapiUniversal::ObjectForArch::getAsObjectFile() const {
+ return std::unique_ptr<TapiFile>(new TapiFile(Parent->getMemoryBufferRef(),
+ *Parent->ParsedFile.get(),
+ Parent->Architectures[Index]));
+}
+
+Expected<std::unique_ptr<TapiUniversal>>
+TapiUniversal::create(MemoryBufferRef Source) {
+ Error Err = Error::success();
+ std::unique_ptr<TapiUniversal> Ret(new TapiUniversal(Source, Err));
+ if (Err)
+ return std::move(Err);
+ return std::move(Ret);
+}
OpenPOWER on IntegriCloud