diff options
author | Cyndy Ishida <cyndy_ishida@apple.com> | 2019-08-21 23:30:53 +0000 |
---|---|---|
committer | Cyndy Ishida <cyndy_ishida@apple.com> | 2019-08-21 23:30:53 +0000 |
commit | c20d1f90b53ae53aee3cac86a84e79d596b5711e (patch) | |
tree | 53c7b8516c3d5526dda2864b82de33216c4bea42 /llvm/lib/Object/TapiUniversal.cpp | |
parent | 78e6507b0af7d14dd2cdd6347608055cd452796b (diff) | |
download | bcm5719-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.cpp | 54 |
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); +} |