diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-09-02 21:17:18 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-12-08 17:34:50 +0000 |
commit | 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e (patch) | |
tree | 62f873df87c7c675557a179e0c4c83fe9f3087bc /contrib/llvm-project/llvm/lib/Object/BuildID.cpp | |
parent | cf037972ea8863e2bab7461d77345367d2c1e054 (diff) | |
parent | 7fa27ce4a07f19b07799a767fc29416f3b625afb (diff) |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Object/BuildID.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Object/BuildID.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/contrib/llvm-project/llvm/lib/Object/BuildID.cpp b/contrib/llvm-project/llvm/lib/Object/BuildID.cpp index 795c22e769aa..ef21458060ab 100644 --- a/contrib/llvm-project/llvm/lib/Object/BuildID.cpp +++ b/contrib/llvm-project/llvm/lib/Object/BuildID.cpp @@ -18,13 +18,12 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" -namespace llvm { -namespace object { +using namespace llvm; +using namespace llvm::object; namespace { -template <typename ELFT> -std::optional<BuildIDRef> getBuildID(const ELFFile<ELFT> &Obj) { +template <typename ELFT> BuildIDRef getBuildID(const ELFFile<ELFT> &Obj) { auto PhdrsOrErr = Obj.program_headers(); if (!PhdrsOrErr) { consumeError(PhdrsOrErr.takeError()); @@ -37,7 +36,7 @@ std::optional<BuildIDRef> getBuildID(const ELFFile<ELFT> &Obj) { for (auto N : Obj.notes(P, Err)) if (N.getType() == ELF::NT_GNU_BUILD_ID && N.getName() == ELF::ELF_NOTE_GNU) - return N.getDesc(); + return N.getDesc(P.p_align); consumeError(std::move(Err)); } return {}; @@ -45,15 +44,24 @@ std::optional<BuildIDRef> getBuildID(const ELFFile<ELFT> &Obj) { } // namespace -std::optional<BuildIDRef> getBuildID(const ObjectFile *Obj) { +BuildID llvm::object::parseBuildID(StringRef Str) { + std::string Bytes; + if (!tryGetFromHex(Str, Bytes)) + return {}; + ArrayRef<uint8_t> BuildID(reinterpret_cast<const uint8_t *>(Bytes.data()), + Bytes.size()); + return SmallVector<uint8_t>(BuildID.begin(), BuildID.end()); +} + +BuildIDRef llvm::object::getBuildID(const ObjectFile *Obj) { if (auto *O = dyn_cast<ELFObjectFile<ELF32LE>>(Obj)) - return getBuildID(O->getELFFile()); + return ::getBuildID(O->getELFFile()); if (auto *O = dyn_cast<ELFObjectFile<ELF32BE>>(Obj)) - return getBuildID(O->getELFFile()); + return ::getBuildID(O->getELFFile()); if (auto *O = dyn_cast<ELFObjectFile<ELF64LE>>(Obj)) - return getBuildID(O->getELFFile()); + return ::getBuildID(O->getELFFile()); if (auto *O = dyn_cast<ELFObjectFile<ELF64BE>>(Obj)) - return getBuildID(O->getELFFile()); + return ::getBuildID(O->getELFFile()); return std::nullopt; } @@ -88,6 +96,3 @@ std::optional<std::string> BuildIDFetcher::fetch(BuildIDRef BuildID) const { } return std::nullopt; } - -} // namespace object -} // namespace llvm |