labath accepted this revision. labath added inline comments.
================ Comment at: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:503-505 + if (section_list) { + InitializeFirstCodeAddress(*section_list); + } ---------------- clayborg wrote: > remove braces or even fold the declaration into the if condition. ================ Comment at: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h:520 std::vector<uint32_t> m_lldb_cu_to_dwarf_unit; + lldb::addr_t m_first_code_address = LLDB_INVALID_ADDRESS; }; ---------------- aadsm wrote: > labath wrote: > > clayborg wrote: > > > A lengthy comment would be great here. Maybe something like: > > > > > > ``` > > > /// Many linkers will concatenate all available DWARF, even if parts of > > > that DWARF > > > /// should have been dead stripped. Some linkers will place tombstone > > > values in for > > > /// addresses that should have been dead stripped, with a value like -1 > > > or -2. But many > > > /// linkers will apply a relocation and attempt to set the value to zero. > > > This is problematic > > > /// in that we can end up with many addresses that are zero or close to > > > zero due to there > > > /// being an addend on the relocation whose base is at zero. Here we > > > attempt to avoid > > > /// addresses that are zero or close to zero by finding the first valid > > > code address by looking > > > /// at the sections and finding the first one that has read + execute > > > permissions. This allows > > > /// us to do a quick and cheap comparison against this address when > > > parsing line tables and > > > /// parsing functions where the DWARF should have been dead stripped. > > > ``` > > To me, "should have been stripped" implies that the linkers are doing > > something wrong, as if they were required to parse and rewrite the dwarf in > > the input files. However, there is nothing in the DWARF or ELF specs that > > would support that, and the linkers are simply doing what the specs say, > > and what linkers have been doing since the dawn of time -- concatenate > > things. > > > > It would be better to just state the facts here, instead of passing > > judgement (or make an appearance of doing that). > @clayborg can you clarify this comment like @labath suggests? How about this: ``` DWARF does not provide a good way for traditional (concatenating) linkers to invalidate debug info describing dead-stripped code. These linkers will keep the debug info but resolve any addresses referring to such code as zero (BFD), a small positive integer (zero + relocation addend -- GOLD), or -1/-2 (LLD). Try to filter out this debug info by comparing it to the lowest code address in the module. ``` ================ Comment at: lldb/test/Shell/SymbolFile/DWARF/line-entries-invalid-addresses.yaml:3 +# RUN: %lldb %t -b -o "image lookup -f main.cpp -l 2 -v" | FileCheck %s +# CHECK: LineEntry: {{.*}}main.cpp:2:{{.*}} + ---------------- aadsm wrote: > labath wrote: > > I think you also need to check for the "1 matches found", otherwise this > > will succeed even without the patch. > This should be fine, this is what you get without the patch: > > ``` > (lldb) image lookup -f main.cpp -l 2 -v > 1 match found in main.cpp:2 in /Users/aadsm/Projects/test-bad.obj: > Address: () > Summary: > ``` True, but adding the check still wouldn't hurt, as one can imagine a bug that would cause the second main.cpp:2 entry (at address 0xf) to make its way here -- and that's what we're trying to avoid. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D87172/new/ https://reviews.llvm.org/D87172 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits