aadsm added inline comments.

================
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;
 };
----------------
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?


================
Comment at: 
lldb/unittests/SymbolFile/DWARF/Inputs/test-invalid-addresses.yaml:203-254
+      - sectname:        __apple_names
+        segname:         __DWARF
+        addr:            0x000000010000223C
+        size:            116
+        offset:          0x0000223C
+        align:           0
+        reloff:          0x00000000
----------------
labath wrote:
> I guess these (and debug_pub(types/names), and possible debug_aranges) are 
> not really needed for this test.
I changed the line table by hand but forgot to add comments there.


================
Comment at: lldb/unittests/SymbolFile/DWARF/SymbolFileDWARFTests.cpp:349-369
+
+TEST_F(SymbolFileDWARFTests, EnsureLineEntriesExistInAfterFirstCodeSection) {
+  auto ExpectedFile = TestFile::fromYamlFile("test-invalid-addresses.yaml");
+  ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded());
+
+  lldb::ModuleSP module_sp =
+      std::make_shared<Module>(ExpectedFile->moduleSpec());
----------------
labath wrote:
> I think this would be better as a shell test (if for nothing else, then 
> because other line table tests are written that way). `image lookup` is 
> pretty much a direct equivalent to `ResolveSymbolContext`, but its output is 
> more readable, and its easier to fiddle with these kinds of tests.
I think what you describe is an end to end test but here I explicitly want to 
test the SymbolFileDWARF code because that's what I changed, it's more like a 
unit test.
I would prefer to stay away from an end to end test for this particular change 
because 1) knowing that `image lookup` calls `ResolveSymbolContext` is an 
implementation detail 2) The output of `image lookup` could change over time, 
3) Other bugs unrelated to this could be introduced that will make `image 
lookup` show a different content as well and fail the test.


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

Reply via email to