From 1d9cccf18bcb59476b857eba4d43ffdd4399e0ef Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere 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 f8b59584d2b46..58a1c6a738257 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 0000000000000..1de805d321953 --- /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 7182f0917d897..55fd5e6b621e7 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`5T98!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 znzEeJvaLim}xL*rMrLVTRt%+ty0+X@K4`*^yUwgrz!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-@JoWFar7;(^71FH zg*zs;3B34tLHxcbHXl4Bws5U@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=Q4Q@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 zHF8l4nG082QIs6V{T3TZd4B@YSa;mm`mOQe1is;CBziSehrwNx siSu%tX^JKL4AYIMMFM1m*Av8g0RKIqt)`lNklnr+*vTZ2On8ZZ0R!jeeE5XWcN-7GYX(8@mGMiN=!jlPfy+O3w7EW>4#<(S55zZ2i$Ewc9Lg*g>15WTEOpzdyX;RY{7G@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@LO=)z z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnVP|1Ul<_^VG}H_0%_7 zOn3SV=*~bMebcD3j$>WOVKjNR!zbHf78QOWu5!{kT-#d6Yc7(SoaX=YqV_(WN)Bz(BHJWHr ztf7G>CnE7AP5s`1X>9u$(X6@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@I__oqBNj z{>(-GZvT_DyLKJD(Ea|*gPtSTZ-yHlevI|{UiI}I^wx&`qwSgYw&QQ^pWbwG@s+>j z@4n4neJPlHc{wxibj`UvU;0a@?5@bv-01ll%l~jTbGN>F=j$J#%(d;lk&&{lS+~mW VsoF%>&O5A literal 0 HcmV?d00001 diff --git a/llvm/test/tools/dsymutil/X86/alias.test b/llvm/test/tools/dsymutil/X86/alias.test index 4c1e816870609..65e9bf22640a8 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 2d2195805f3aa..d76bfb17e7d52 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 7a32eacee14c1..524a6795c360e 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; }