[llvm] [GSYM] Parse symbols from .dynsym as well, consider ST_Unknown symbols (PR #147332)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 6 14:09:38 PDT 2025
================
@@ -77,44 +77,71 @@ llvm::Error ObjectFileTransformer::convert(const object::ObjectFile &Obj,
// Read build ID.
Gsym.setUUID(getUUID(Obj));
- // Parse the symbol table.
- size_t NumBefore = Gsym.getNumFunctionInfos();
- for (const object::SymbolRef &Sym : Obj.symbols()) {
- Expected<SymbolRef::Type> SymType = Sym.getType();
- if (!SymType) {
- consumeError(SymType.takeError());
- continue;
- }
- Expected<uint64_t> AddrOrErr = Sym.getValue();
- if (!AddrOrErr)
- // TODO: Test this error.
- return AddrOrErr.takeError();
-
- if (SymType.get() != SymbolRef::Type::ST_Function ||
- !Gsym.IsValidTextAddress(*AddrOrErr))
- continue;
- // Function size for MachO files will be 0
- constexpr bool NoCopy = false;
- const uint64_t size = IsELF ? ELFSymbolRef(Sym).getSize() : 0;
- Expected<StringRef> Name = Sym.getName();
- if (!Name) {
- if (Out.GetOS())
- logAllUnhandledErrors(Name.takeError(), *Out.GetOS(),
- "ObjectFileTransformer: ");
- else
- consumeError(Name.takeError());
- continue;
+ const auto ParseSymbols =
+ [&Out, &Gsym, IsMachO,
+ IsELF](object::ObjectFile::symbol_iterator_range Symbols,
+ std::string_view SymbolsOrigin) -> llvm::Error {
+ size_t NumBefore = Gsym.getNumFunctionInfos();
+ for (const object::SymbolRef &Sym : Symbols) {
+ Expected<SymbolRef::Type> SymType = Sym.getType();
+ if (!SymType) {
+ consumeError(SymType.takeError());
+ continue;
+ }
+ Expected<uint64_t> AddrOrErr = Sym.getValue();
+ if (!AddrOrErr)
+ // TODO: Test this error.
+ return AddrOrErr.takeError();
+
+ if ((SymType.get() != SymbolRef::Type::ST_Function &&
+ // We allow unknown (yet with valid text address) symbols,
+ // since these are common with handwritten assembly in the wild.
+ SymType.get() != SymbolRef::Type::ST_Function) ||
----------------
itrofimow wrote:
Yes, sure did, thank you.
https://github.com/llvm/llvm-project/pull/147332
More information about the llvm-commits
mailing list