[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