[Lldb-commits] [PATCH] D71487: [LLDB] Fix address computation for inline function

Johannes Altmanninger via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Mon Dec 16 13:58:19 PST 2019


johannes added a comment.

Thanks for the very useful feedback! Now I can finally see why this is happening.

Below is the relevant excerpt of the input DWARF:
one of the DW_AT_low_pc attributes is NULL, which does not happen when I link with GNU ld.

  clang lldb/test/Shell/Expr/Inputs/function-address-{main,lib}.cpp -g -fuse-ld=lld -o - |
  llvm-dwarfdump -debug-info /dev/stdin
  
  0x00000203:   DW_TAG_subprogram
                  DW_AT_low_pc	(0x0000000000201940)
                  DW_AT_high_pc	(0x000000000020194f)
                  DW_AT_frame_base	(DW_OP_reg6 RBP)
                  DW_AT_object_pointer	(0x0000021a)
                  DW_AT_specification	(0x00000069 "_ZNK14llvm_namespace10TinyVector4fourEv")
  
  0x0000021a:     DW_TAG_formal_parameter
                    DW_AT_location	(DW_OP_fbreg -8)
                    DW_AT_name	("this")
                    DW_AT_type	(0x0000027a "const TinyVector*")
                    DW_AT_artificial	(true)
  
  0x00000226:     NULL
  
  0x0000053a:   DW_TAG_subprogram
                  DW_AT_low_pc	(0x0000000000000000)
                  DW_AT_high_pc	(0x000000000000000f)
                  DW_AT_frame_base	(DW_OP_reg6 RBP)
                  DW_AT_object_pointer	(0x00000551)
                  DW_AT_specification	(0x00000309 "_ZNK14llvm_namespace10TinyVector4fourEv")
  
  0x00000551:     DW_TAG_formal_parameter
                    DW_AT_location	(DW_OP_fbreg -8)
                    DW_AT_name	("this")
                    DW_AT_type	(0x00000563 "const TinyVector*")
                    DW_AT_artificial	(true)
  
  0x0000055d:     NULL

I think I found how GDB handles this case:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/dwarf2read.c;h=ecfae68427716333ab060ef1c44b3a25df9d7ac0;hb=HEAD#l14756

Now I have a rough implementation of the same idea.
I can probably come up with a unit test in `SymbolFileDWARFTests` that
checks that the function address is correct after parsing above DWARF.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D71487





More information about the lldb-commits mailing list