[llvm] [dsymutil] Improve missing symbol warning message (PR #75378)

Jonas Devlieghere via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 13 12:42:15 PST 2023


https://github.com/JDevlieghere created https://github.com/llvm/llvm-project/pull/75378

The current warning emitted by dsymutil when it can't find a symbol in an object file is worded rather poorly:

```
could not find object file symbol for symbol _foo
```

It's also lacking information that makes the warning actionable, such as the object file it's looking at. This patch rewords the warning and adds the object file path to the warning:

```
could not find symbol '_foo' in object file 'test.o'
```

>From 1d9cccf18bcb59476b857eba4d43ffdd4399e0ef Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Wed, 13 Dec 2023 12:29:23 -0800
Subject: [PATCH] [dsymutil] Improve missing symbol warning message

The current warning emitted by dsymutil when it can't find a symbol in
an object file is worded rather poorly:

  could not find object file symbol for symbol _foo

It's also lacking information that makes the warning actionable, such as
the object file it's looking at. This patch rewords the warning and adds
the object file path to the warning:

  could not find symbol '_foo' in object file 'test.o'
---
 llvm/test/tools/dsymutil/ARM/extern-alias.test  |   2 +-
 .../dsymutil/ARM/missing-symbol-warning.test    |   3 +++
 .../dsymutil/ARM/static-archive-collision.test  |   4 ++--
 .../dsymutil/Inputs/private/tmp/warning/test.o  | Bin 0 -> 1928 bytes
 .../Inputs/private/tmp/warning/test.out         | Bin 0 -> 17128 bytes
 llvm/test/tools/dsymutil/X86/alias.test         |   2 +-
 llvm/test/tools/dsymutil/X86/thinlto.test       |   4 ++--
 llvm/tools/dsymutil/MachODebugMapParser.cpp     |   3 ++-
 8 files changed, 11 insertions(+), 7 deletions(-)
 create mode 100644 llvm/test/tools/dsymutil/ARM/missing-symbol-warning.test
 create mode 100644 llvm/test/tools/dsymutil/Inputs/private/tmp/warning/test.o
 create mode 100755 llvm/test/tools/dsymutil/Inputs/private/tmp/warning/test.out

diff --git a/llvm/test/tools/dsymutil/ARM/extern-alias.test b/llvm/test/tools/dsymutil/ARM/extern-alias.test
index f8b59584d2b465..58a1c6a738257f 100644
--- a/llvm/test/tools/dsymutil/ARM/extern-alias.test
+++ b/llvm/test/tools/dsymutil/ARM/extern-alias.test
@@ -41,6 +41,6 @@ RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/extern/ext
 RUN: dsymutil --linker llvm -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/private_extern/private_extern.out -o %t.dSYM --verbose | FileCheck %s
 RUN: dsymutil --linker llvm -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/extern/extern.out -o %t.dSYM --verbose | FileCheck %s
 
-CHECK-NOT: could not find object file symbol for symbol _baz
+CHECK-NOT: could not find symbol '_baz'
 CHECK: { sym: _baz, objAddr: 0x0, binAddr: 0x100007F58, size: 0x0 }
 CHECK: { sym: _foo, objAddr: 0x0, binAddr: 0x100007F58, size: 0x20 }
diff --git a/llvm/test/tools/dsymutil/ARM/missing-symbol-warning.test b/llvm/test/tools/dsymutil/ARM/missing-symbol-warning.test
new file mode 100644
index 00000000000000..1de805d3219537
--- /dev/null
+++ b/llvm/test/tools/dsymutil/ARM/missing-symbol-warning.test
@@ -0,0 +1,3 @@
+RUN: dsymutil -oso-prepend-path %p/../Inputs --dump-debug-map %p/../Inputs/private/tmp/warning/test.out 2>&1 | FileCheck %s
+# CHECK: could not find symbol '_foo' in object file '{{.*}}test.o'
+# CHECK: { sym: _main, objAddr: 0x0, binAddr: 0x100003F84, size: 0x1C }
diff --git a/llvm/test/tools/dsymutil/ARM/static-archive-collision.test b/llvm/test/tools/dsymutil/ARM/static-archive-collision.test
index 7182f0917d897f..55fd5e6b621e76 100644
--- a/llvm/test/tools/dsymutil/ARM/static-archive-collision.test
+++ b/llvm/test/tools/dsymutil/ARM/static-archive-collision.test
@@ -22,5 +22,5 @@ $ clang main.o foo.a -o main.out
 
 RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/collision/main.out --dump-debug-map 2>&1 | FileCheck %s
 CHECK: skipping debug map object with duplicate name and timestamp: {{.*}} /private/tmp/collision/foo.a(foo.o)
-CHECK-NOT: could not find object file symbol for symbol _g
-CHECK-NOT: could not find object file symbol for symbol _f
+CHECK-NOT: could not find symbol '_g'
+CHECK-NOT: could not find symbol '_f'
diff --git a/llvm/test/tools/dsymutil/Inputs/private/tmp/warning/test.o b/llvm/test/tools/dsymutil/Inputs/private/tmp/warning/test.o
new file mode 100644
index 0000000000000000000000000000000000000000..53647992d70c9792c4b85f99a823fc63b340cd75
GIT binary patch
literal 1928
zcmb7E%TLr`5T9<hE3i^tCPI9q2Yl<kc%#uJtOgVx0aR{Hx7%Hc-FEGkMG_3?$twph
zp8XHJ$c>8!J!sU#aKw{djESDaM4V~AvTFlDCYhOU=9~F-zRrB#yNz#u_5*N$L?Vp*
zl}8~VBXuB8lf47Av%NY>MDp!@xF&8OCz32X+5^X1d-mkzsmZGCuMV>X;e~uB=`bwS
znzEeJva<zQ$!2Y>Lim}xL*rMrLVTRt%+ty0+X at K4`*^yUw<sovcb_FbVtSt8Nq9(B
z=Rf88cxA_SGlF<O7|t5g8 at tx0luCvsn@UkDV@?q7joU$h3k>grz!p^%sL#W*vNI}$
z1o0v)x|8LLktz^dZHwpDS5nj<-su2d>Ob+E`O>!My}|JEte88y;;B{<>vH5-b51vN
zvOJclJ<&^sCo$(L;?Za)u)plr2F~lvpP`!?r3BBr#-h`-iL}n@>)!z{g)!~O-nT>?
zDr6*rA%7b4sGbsPvZKhikclXUm~z>5#MRzta~R%lHo?kz6jna- at JoWFar7;(^71FH
zg*zs;3B34tLHxcbHXl4Bws5U at pim6AS|eW;JJRjEI2b)2J<&1Rb_w4MUVspDjke+C
z?F3%D7>#1pLKBb&9wK`)U+13r2+)5tke?$Hz3`MP={mDN3P1*Dt&-%XQSzbXy4ST9
zymc-2B8Ok$S_ljD_6YMR!XHsYI8Y76EJzj2F6)*lCHrHESVB5k(492$^lUbU12bqC
zm13O4xsq+oXsQ##O(~xr=<Vt4%jOdKY`>Q4Q at Z=Q29&&#>QlPZeAhstKbh=Fq>`t=
z(aKIth4`4BwH13lp3y3rVU;vHK5P|>ikTb3`I)pVqa2^eTr0<~E9%XOsbqI76)WfN
zLBNbV#Zr7uu}$49KvB_6&`k#vyP%S&fI6+%FfuVTLVwg}eBE90Y;O!_7N0GgMeiyy
z`DyxyYIDgB=58YGCB~o30|bUd)5$>uwSdj18TP)PSb7pwrKbyNv?q|MXH*w;m%TvL
zHF8l4nG082<i7XK)fw?O=sgU>QIs6V{T3TZd4B at YSa;mm`mOQe1is;CBziSehrwNx
siSu%tX^JKL4AYIMMFM1m*Av8g0RKIqt)`lNklnr+*vTZ2On8ZZ0R!jeeE<Le

literal 0
HcmV?d00001

diff --git a/llvm/test/tools/dsymutil/Inputs/private/tmp/warning/test.out b/llvm/test/tools/dsymutil/Inputs/private/tmp/warning/test.out
new file mode 100755
index 0000000000000000000000000000000000000000..bfd5c74f4a1ddc1306841daf286f2d28dcdd1c0b
GIT binary patch
literal 17128
zcmeI4T}V_>5XWcN-7GYX(8 at mGMiN=!jlPfy+O3w7EW><Q`rx#+cWbF#MepV+Vg^N2
zFG&RT79kapJ;Xvq1@;mYQAto#5DGyi_E0a8R5t(nfx8Ap&&|M`IWu$S+_}Hq*SXI|
zKK(2t@(_!cbqebsZ;q43JEAhyO{_|73vLYU2-Vdhnk!auZs<1;_YATsRUZo1=ccXt
zKyHj2-_KzvdV?rs8fnws+kWnS?Q89qDR+**cWbSXk2;-{Wt2)KTjI&6iYH?Y92wu=
zMd!XfP7(Z^`<%FI#(33KZ`~Z)Q0=~Jz=6!x632oy1Prn{E+^{5Z$SZ~DmKd;zsm7Z
zHiI?IKF+0sL}9iCtlL;2lO4 at tYu$z5KS~jw*I4;KLVBvXNk0_dt4CW8McIeUVnrX}
zdFKoIPOKWdaCKPMT2>4#<(S55zZ2i$Ewc9Lg*<h>g>15WTEOpzdyX;RY{7G at Sdp_)
zRq@}!Gu8|Dv%R(1G!m8TD!H%tUb}ie8{FR*AezXw!tuciGKUrU=ge(}-6X;yLO=)z
z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{As_^VfDjM at LO=)z
z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnVP|1Ul<_^VG}H_0%_7
zOn3SV=*~bMebcD3j$>WOVKjNR!zbHf78<kd0k%-gr9%SNI<{cmx{xQQOIRU13ymwi
zJp612*wI**ILgL401L6^we4;0>QOWu5!{kT-#d6Yc7(SoaX=YqV_(WN)Bz(BHJWHr
ztf7G>CnE7AP5s`1X>9u$(X6 at axg2w6%8}Q{`77Cvac3Q+Z3glvt>nd>_n*dod6thn
zz5!rA%|5?%Tpsn9H^*7bv7_Gg5ktMp96su^^V$6aL$Sx6XvbOfQ_LH;Kim)Bt=ITV
z1HY3}Af+r)x|wLyTOv)#cyhl^rqOIx?jyaiDSkL&8aYWThi?}^M&1?n@*9=%7HvRE
zIL7UHJmmG^_d=@?)-aMRJWn5du6eBye>?K$6<8o1`@t!bRQK1+P=1S-v at I__oqBNj
z{>(-GZvT_DyLKJD(Ea|*gPtSTZ-yHlevI|{UiI}I^wx&`qwSgYw&QQ^pWbwG at s+>j
z at 4n4neJPlHc{wxibj`UvU;0a@?5 at bv-01ll%l~jTbGN>F=j$J#%(d;lk&&{lS+~mW
VsoF%><C<abgh!u?ZolJZe*rYB>&O5A

literal 0
HcmV?d00001

diff --git a/llvm/test/tools/dsymutil/X86/alias.test b/llvm/test/tools/dsymutil/X86/alias.test
index 4c1e8168706098..65e9bf22640a8a 100644
--- a/llvm/test/tools/dsymutil/X86/alias.test
+++ b/llvm/test/tools/dsymutil/X86/alias.test
@@ -4,7 +4,7 @@
 # RUN: dsymutil --linker llvm -f -oso-prepend-path=%p/../Inputs/alias \
 # RUN: %p/../Inputs/alias/foobar -o - | llvm-dwarfdump - 2>&1 | FileCheck %s
 
-# CHECK-NOT: could not find object file symbol for symbol
+# CHECK-NOT: could not find symbol
 # CHECK: DW_AT_name ("foo.c")
 # CHECK: DW_AT_name ("bar.c")
 
diff --git a/llvm/test/tools/dsymutil/X86/thinlto.test b/llvm/test/tools/dsymutil/X86/thinlto.test
index 2d2195805f3aab..d76bfb17e7d527 100644
--- a/llvm/test/tools/dsymutil/X86/thinlto.test
+++ b/llvm/test/tools/dsymutil/X86/thinlto.test
@@ -23,5 +23,5 @@ RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/thinlto/fo
 
 RUN: dsymutil --linker llvm -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/thinlto/foobar.dylib -o %t.dSYM 2>&1 | FileCheck %s --allow-empty
 
-CHECK-NOT: could not find object file symbol for symbol __ZZ9function2vE12magic_static
-CHECK-NOT: could not find object file symbol for symbol __ZGVZ9function2vE12magic_static
+CHECK-NOT: could not find symbol '__ZZ9function2vE12magic_static'
+CHECK-NOT: could not find symbol 'symbol __ZGVZ9function2vE12magic_static'
diff --git a/llvm/tools/dsymutil/MachODebugMapParser.cpp b/llvm/tools/dsymutil/MachODebugMapParser.cpp
index 7a32eacee14c1b..524a6795c360e9 100644
--- a/llvm/tools/dsymutil/MachODebugMapParser.cpp
+++ b/llvm/tools/dsymutil/MachODebugMapParser.cpp
@@ -729,7 +729,8 @@ void MachODebugMapParser::handleStabSymbolTableEntry(
   }
 
   if (ObjectSymIt == CurrentObjectAddresses.end()) {
-    Warning("could not find object file symbol for symbol " + Twine(Name));
+    Warning("could not find symbol '" + Twine(Name) + "' in object file '" +
+            CurrentDebugMapObject->getObjectFilename() + "'");
     return;
   }
 



More information about the llvm-commits mailing list