[llvm] [llvm-nm] Introduce synthetic flag (PR #138232)

James Henderson via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 15 23:50:06 PDT 2025


================
@@ -1783,6 +1785,55 @@ getDynamicSyms(SymbolicFile &Obj) {
   return E->getDynamicSymbolIterators();
 }
 
+// Returns false if there is error found or true otherwise.
+static bool getPltSyms(SymbolicFile &Obj, std::vector<NMSymbol> &SymbolList) {
+  const auto *ELFObj = dyn_cast<ELFObjectFileBase>(&Obj);
+  if (!ELFObj)
+    return true;
+
+  std::string Err;
+  Triple TT;
+  TT.setArch(ELFObj->getArch());
+  TT.setOS(ELFObj->getOS());
+  const Target *TheTarget = TargetRegistry::lookupTarget(TT, Err);
+  if (!TheTarget) {
+    error("unable to find target for " + Obj.getFileName() + ": " + Err);
+    return false;
+  }
+
+  std::unique_ptr<const MCSubtargetInfo> STI;
+  STI.reset(TheTarget->createMCSubtargetInfo(
+      TT.getTriple(), ELFObj->tryGetCPUName().value_or("").str(), ""));
+  if (!STI) {
+    error("unable to create subtarget info for " + Obj.getFileName());
+    return false;
+  }
+
+  for (auto Plt : ELFObj->getPltEntries(*STI)) {
+    if (Plt.Symbol) {
+      SymbolRef Symbol(*Plt.Symbol, ELFObj);
+      if (Expected<StringRef> NameOrErr = Symbol.getName()) {
+        if (!NameOrErr->empty()) {
+          NMSymbol S = {};
+          S.Address = Plt.Address;
+          S.Name = NameOrErr->str() + "@plt";
+          S.TypeChar = 'T';
+          S.SectionName = Plt.Section;
+          SymbolList.push_back(S);
+        }
+      } else {
+        consumeError(NameOrErr.takeError());
----------------
jh7370 wrote:

Is there a reason why this isn't a warning?

https://github.com/llvm/llvm-project/pull/138232


More information about the llvm-commits mailing list