summaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/Object/TapiUniversal.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2020-01-22 20:31:01 +0000
committerDimitry Andric <dim@FreeBSD.org>2020-01-22 20:31:01 +0000
commit8bcb0991864975618c09697b1aca10683346d9f0 (patch)
tree0afab28faa50e5f27698f8dd6c1921fff8d25e39 /contrib/llvm-project/llvm/lib/Object/TapiUniversal.cpp
parentb14637d118e110006a149a79b649c5695e7f419a (diff)
parent1d5ae1026e831016fc29fd927877c86af904481f (diff)
Notes
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Object/TapiUniversal.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/Object/TapiUniversal.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/Object/TapiUniversal.cpp b/contrib/llvm-project/llvm/lib/Object/TapiUniversal.cpp
new file mode 100644
index 000000000000..b3273e345a61
--- /dev/null
+++ b/contrib/llvm-project/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);
+}