From 7fa27ce4a07f19b07799a767fc29416f3b625afb Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Wed, 26 Jul 2023 21:03:47 +0200 Subject: Vendor import of llvm-project main llvmorg-17-init-19304-gd0b54bb50e51, the last commit before the upstream release/17.x branch was created. --- llvm/lib/Object/BuildID.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'llvm/lib/Object/BuildID.cpp') diff --git a/llvm/lib/Object/BuildID.cpp b/llvm/lib/Object/BuildID.cpp index 795c22e769aa..ef21458060ab 100644 --- a/llvm/lib/Object/BuildID.cpp +++ b/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 -std::optional getBuildID(const ELFFile &Obj) { +template BuildIDRef getBuildID(const ELFFile &Obj) { auto PhdrsOrErr = Obj.program_headers(); if (!PhdrsOrErr) { consumeError(PhdrsOrErr.takeError()); @@ -37,7 +36,7 @@ std::optional getBuildID(const ELFFile &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 getBuildID(const ELFFile &Obj) { } // namespace -std::optional getBuildID(const ObjectFile *Obj) { +BuildID llvm::object::parseBuildID(StringRef Str) { + std::string Bytes; + if (!tryGetFromHex(Str, Bytes)) + return {}; + ArrayRef BuildID(reinterpret_cast(Bytes.data()), + Bytes.size()); + return SmallVector(BuildID.begin(), BuildID.end()); +} + +BuildIDRef llvm::object::getBuildID(const ObjectFile *Obj) { if (auto *O = dyn_cast>(Obj)) - return getBuildID(O->getELFFile()); + return ::getBuildID(O->getELFFile()); if (auto *O = dyn_cast>(Obj)) - return getBuildID(O->getELFFile()); + return ::getBuildID(O->getELFFile()); if (auto *O = dyn_cast>(Obj)) - return getBuildID(O->getELFFile()); + return ::getBuildID(O->getELFFile()); if (auto *O = dyn_cast>(Obj)) - return getBuildID(O->getELFFile()); + return ::getBuildID(O->getELFFile()); return std::nullopt; } @@ -88,6 +96,3 @@ std::optional BuildIDFetcher::fetch(BuildIDRef BuildID) const { } return std::nullopt; } - -} // namespace object -} // namespace llvm -- cgit v1.2.3