Reverted on behalf of Ted in r341878. On Mon, Sep 10, 2018 at 11:20 AM Ted Woodward via lldb-commits <lldb-commits@lists.llvm.org> wrote: > > Author: ted > Date: Mon Sep 10 11:19:01 2018 > New Revision: 341849 > > URL: http://llvm.org/viewvc/llvm-project?rev=341849&view=rev > Log: > Fix raw address breakpoints not resolving > > Summary: An address breakpoint of the form "b 0x1000" won't resolve if it's > created while the process isn't running. This patch deletes > Address::SectionWasDeleted, renames Address::SectionWasDeletedPrivate to > SectionWasDeleted (and makes it public), and changes the section check in > Breakpoint::ModulesChanged back to its original form > > Reviewers: jingham, #lldb > > Reviewed By: jingham > > Subscribers: davide, lldb-commits > > Differential Revision: https://reviews.llvm.org/D51816 > > Modified: > lldb/trunk/include/lldb/Core/Address.h > > lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestAddressBreakpoints.py > lldb/trunk/source/Breakpoint/Breakpoint.cpp > lldb/trunk/source/Core/Address.cpp > > Modified: lldb/trunk/include/lldb/Core/Address.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Address.h?rev=341849&r1=341848&r2=341849&view=diff > ============================================================================== > --- lldb/trunk/include/lldb/Core/Address.h (original) > +++ lldb/trunk/include/lldb/Core/Address.h Mon Sep 10 11:19:01 2018 > @@ -525,11 +525,11 @@ public: > bool CalculateSymbolContextLineEntry(LineEntry &line_entry) const; > > //------------------------------------------------------------------ > - // Returns true if the section should be valid, but isn't because the > shared > - // pointer to the section can't be reconstructed from a weak pointer that > - // contains a valid weak reference to a section. Returns false if the > section > - // weak pointer has no reference to a section, or if the section is still > - // valid > + // Returns true if the m_section_wp once had a reference to a valid section > + // shared pointer, but no longer does. This can happen if we have an > address > + // from a module that gets unloaded and deleted. This function should only > be > + // called if GetSection() returns an empty shared pointer and you want to > + // know if this address used to have a valid section. > //------------------------------------------------------------------ > bool SectionWasDeleted() const; > > @@ -539,15 +539,6 @@ protected: > //------------------------------------------------------------------ > lldb::SectionWP m_section_wp; ///< The section for the address, can be > NULL. > lldb::addr_t m_offset; ///< Offset into section if \a m_section_wp is > valid... > - > - //------------------------------------------------------------------ > - // Returns true if the m_section_wp once had a reference to a valid section > - // shared pointer, but no longer does. This can happen if we have an > address > - // from a module that gets unloaded and deleted. This function should only > be > - // called if GetSection() returns an empty shared pointer and you want to > - // know if this address used to have a valid section. > - //------------------------------------------------------------------ > - bool SectionWasDeletedPrivate() const; > }; > > //---------------------------------------------------------------------- > > Modified: > lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestAddressBreakpoints.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestAddressBreakpoints.py?rev=341849&r1=341848&r2=341849&view=diff > ============================================================================== > --- > lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestAddressBreakpoints.py > (original) > +++ > lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/address_breakpoints/TestAddressBreakpoints.py > Mon Sep 10 11:19:01 2018 > @@ -97,3 +97,40 @@ class AddressBreakpointTestCase(TestBase > > # The hit count for the breakpoint should now be 2. > self.assertTrue(breakpoint.GetHitCount() == 2) > + > + > + > + def test_address_breakpoint_set_before_launch(self): > + """Test that an address bp set before the process is launched works > correctly.""" > + self.build() > + > + exe = self.getBuildArtifact("a.out") > + > + # Create a target by the debugger. > + target = self.dbg.CreateTarget(exe) > + self.assertTrue(target, VALID_TARGET) > + > + # get the address of the symbol "main" > + sc_list = target.FindSymbols("main", lldb.eSymbolTypeCode) > + symbol = sc_list.GetContextAtIndex(0).GetSymbol() > + address = symbol.GetStartAddress().GetFileAddress() > + > + # BreakpointCreateBySBAddress will resolve the address, causing this > + # test to always pass, so use runCmd > + self.runCmd("break set -a " + str(address)) > + > + # Disable ASLR. This will allow us to actually test (on platforms > that support this flag) > + # that the breakpoint was able to track the module. > + > + launch_info = lldb.SBLaunchInfo(None) > + flags = launch_info.GetLaunchFlags() > + flags &= ~lldb.eLaunchFlagDisableASLR > + launch_info.SetLaunchFlags(flags) > + > + error = lldb.SBError() > + > + process = target.Launch(launch_info, error) > + self.assertTrue(process, PROCESS_IS_VALID) > + self.expect("process status", STOPPED_DUE_TO_BREAKPOINT, > + substrs=["stop reason = breakpoint 1.1"]) > + > > Modified: lldb/trunk/source/Breakpoint/Breakpoint.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/Breakpoint.cpp?rev=341849&r1=341848&r2=341849&view=diff > ============================================================================== > --- lldb/trunk/source/Breakpoint/Breakpoint.cpp (original) > +++ lldb/trunk/source/Breakpoint/Breakpoint.cpp Mon Sep 10 11:19:01 2018 > @@ -555,7 +555,7 @@ void Breakpoint::ModulesChanged(ModuleLi > // address that we haven't resolved to a section yet. So we'll have > to > // look in all the new modules to resolve this location. Otherwise, > if > // it was set in this module, re-resolve it here. > - if (section_sp && section_sp->GetModule() == module_sp) { > + if (!section_sp || section_sp->GetModule() == module_sp) { > if (!seen) > seen = true; > > > Modified: lldb/trunk/source/Core/Address.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Address.cpp?rev=341849&r1=341848&r2=341849&view=diff > ============================================================================== > --- lldb/trunk/source/Core/Address.cpp (original) > +++ lldb/trunk/source/Core/Address.cpp Mon Sep 10 11:19:01 2018 > @@ -281,7 +281,7 @@ addr_t Address::GetFileAddress() const { > // We have a valid file range, so we can return the file based address by > // adding the file base address to our offset > return sect_file_addr + m_offset; > - } else if (SectionWasDeletedPrivate()) { > + } else if (SectionWasDeleted()) { > // Used to have a valid section but it got deleted so the offset doesn't > // mean anything without the section > return LLDB_INVALID_ADDRESS; > @@ -302,7 +302,7 @@ addr_t Address::GetLoadAddress(Target *t > return sect_load_addr + m_offset; > } > } > - } else if (SectionWasDeletedPrivate()) { > + } else if (SectionWasDeleted()) { > // Used to have a valid section but it got deleted so the offset doesn't > // mean anything without the section > return LLDB_INVALID_ADDRESS; > @@ -761,12 +761,6 @@ bool Address::Dump(Stream *s, ExecutionC > } > > bool Address::SectionWasDeleted() const { > - if (GetSection()) > - return false; > - return SectionWasDeletedPrivate(); > -} > - > -bool Address::SectionWasDeletedPrivate() const { > lldb::SectionWP empty_section_wp; > > // If either call to "std::weak_ptr::owner_before(...) value returns true, > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
Re: [Lldb-commits] [lldb] r341849 - Fix raw address breakpoints not resolving
Davide Italiano via lldb-commits Mon, 10 Sep 2018 16:11:51 -0700
- [Lldb-commits] [lldb] r341849 - Fix raw a... Ted Woodward via lldb-commits
- Re: [Lldb-commits] [lldb] r341849 - ... Davide Italiano via lldb-commits
- Re: [Lldb-commits] [lldb] r341849 - ... Davide Italiano via lldb-commits