clayborg added a comment.

In D106837#3207676 <https://reviews.llvm.org/D106837#3207676>, @rZhBoYao wrote:

> Hi all, I found this patch causing PR52702 <https://llvm.org/PR52702> in that 
> the parent of this commit 
> <https://github.com/llvm/llvm-project/commit/ec1a4917> and LLDB 12 worked 
> fine.
> When disassembling a hello world C program on Linux, LLDB used to show
>  `callq  0x401030                  ; symbol stub for: puts` 
> instead of
> `callq  0x401030                  ; symbol stub for: 
> ___lldb_unnamed_symbol36`.
> Examining the symbol table by running `lldb -b -o 'image dump symtab' a.out` 
> used to show:
>
>   [   18]     20   X Undefined       0x0000000000000000                    
> 0x0000000000000000 0x00000012 puts@GLIBC_2.2.5
>                            ........
>   [   33]     35   X Code            0x0000000000401000                    
> 0x000000000000001b 0x00000212 _init
>   [   34]     36  S  Trampoline      0x0000000000401030                    
> 0x0000000000000010 0x00000000 puts
>   [   35]     37  SX Code            0x0000000000401020                    
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol1$$a.out
>
> and now (ToT and LLDB 13) it's:
>
>   [   18]     20   X Undefined       0x0000000000000000                    
> 0x0000000000000000 0x00000012 puts@GLIBC_2.2.5
>                            ........
>   [   33]     35   X Code            0x0000000000401000                    
> 0x000000000000001b 0x00000212 _init
>   [   34]     36  S  Trampoline      0x0000000000401030                    
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol36
>   [   35]     37  SX Code            0x0000000000401020                    
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol37
>
> `image dump symtab libc.so.6` gives similar result.
> Before ec1a4917 <https://github.com/llvm/llvm-project/commit/ec1a4917> :
>
>   [ 2366]   2367  S  Trampoline      0x0000000000025010 0x00007ffff7df2010 
> 0x0000000000000010 0x00000000 realloc
>   [ 2367]   2368  S  Trampoline      0x0000000000025020 0x00007ffff7df2020 
> 0x0000000000000010 0x00000000 __tls_get_addr
>   [ 2368]   2369  S  Trampoline      0x0000000000025030 0x00007ffff7df2030 
> 0x0000000000000010 0x00000000 memalign
>   [ 2369]   2370  S  Trampoline      0x0000000000025040 0x00007ffff7df2040 
> 0x0000000000000010 0x00000000 _dl_exception_create
>   [ 2370]   2371  S  Trampoline      0x0000000000025050 0x00007ffff7df2050 
> 0x0000000000000010 0x00000000 __tunable_get_val
>   [ 2371]   2372  S  Trampoline      0x0000000000025060 0x00007ffff7df2060 
> 0x0000000000000010 0x00000000 _dl_find_dso_for_object
>   [ 2372]   2373  S  Trampoline      0x0000000000025070 0x00007ffff7df2070 
> 0x0000000000000010 0x00000000 calloc
>   [ 2373]   2373  SX Code            0x0000000000025000 0x00007ffff7df2000 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol1$$libc.so.6
>   [ 2374]   2373  SX Code            0x0000000000025300 0x00007ffff7df2300 
> 0x0000000000000040 0x00000000 ___lldb_unnamed_symbol2$$libc.so.6
>   [ 2375]   2373  SX Code            0x0000000000025340 0x00007ffff7df2340 
> 0x00000000000002f0 0x00000000 ___lldb_unnamed_symbol3$$libc.so.6
>   [ 2376]   2373  SX Code            0x0000000000025630 0x00007ffff7df2630 
> 0x000000000000000c 0x00000000 ___lldb_unnamed_symbol4$$libc.so.6
>
> After:
>
>   [ 2366]   2367  S  Trampoline      0x0000000000025010 0x00007ffff7df2010 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol2367
>   [ 2367]   2368  S  Trampoline      0x0000000000025020 0x00007ffff7df2020 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol2368
>   [ 2368]   2369  S  Trampoline      0x0000000000025030 0x00007ffff7df2030 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol2369
>   [ 2369]   2370  S  Trampoline      0x0000000000025040 0x00007ffff7df2040 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol2370
>   [ 2370]   2371  S  Trampoline      0x0000000000025050 0x00007ffff7df2050 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol2371
>   [ 2371]   2372  S  Trampoline      0x0000000000025060 0x00007ffff7df2060 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol2372
>   [ 2372]   2373  S  Trampoline      0x0000000000025070 0x00007ffff7df2070 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol2373
>   [ 2373]   2374  SX Code            0x0000000000025000 0x00007ffff7df2000 
> 0x0000000000000010 0x00000000 ___lldb_unnamed_symbol2374
>   [ 2374]   2375  SX Code            0x0000000000025300 0x00007ffff7df2300 
> 0x0000000000000040 0x00000000 ___lldb_unnamed_symbol2375
>   [ 2375]   2376  SX Code            0x0000000000025340 0x00007ffff7df2340 
> 0x00000000000002f0 0x00000000 ___lldb_unnamed_symbol2376
>   [ 2376]   2377  SX Code            0x0000000000025630 0x00007ffff7df2630 
> 0x000000000000000c 0x00000000 ___lldb_unnamed_symbol2377
>
> Is this intended for the performance boost? It seems to me that "`S  
> Trampoline`" symbols should be handled differently.

It is a huge performance boost for Darwin binaries that are stripped because we 
end up with many symbols with no names due to the fact that mach-o binaries 
have a LC_FUNCTION_STARTS load command that details the start of all functions 
even that won't have symbols in the symbol tables.

> FWIW, I also found that this doesn't affect macOS tho as `puts` is not even a 
> synthetic symbol:
>
>   Index   UserID DSX Type            File Address/Value Load Address       
> Size               Flags      Name
>   ------- ------ --- --------------- ------------------ ------------------ 
> ------------------ ---------- ----------------------------------
>   [    0]      0     Data            0x0000000100008008                    
> 0x0000000000000008 0x000e0000 _dyld_private
>   [    1]      1   X Data            0x0000000100000000                    
> 0x0000000000003f70 0x000f0010 _mh_execute_header
>   [    2]      2   X Code            0x0000000100003f70                    
> 0x0000000000000014 0x000f0000 main
>   [    3]      3     Trampoline      0x0000000100003f84                    
> 0x0000000000000006 0x00010100 puts
>   [    4]      4   X Undefined       0x0000000000000000                    
> 0x0000000000000000 0x00010100 dyld_stub_binder
>
>   callq  0x100003f84               ; symbol stub for: puts

Looks like you found the underlying issue in https://reviews.llvm.org/D116217. 
Thanks for finding this issue!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D106837/new/

https://reviews.llvm.org/D106837

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to