This revision was automatically updated to reflect the committed changes. Closed by commit rGea95da180900: [lldb] Add an overload to SetModuleLoadAddress that takes an unsigned value (authored by JDevlieghere). Herald added a project: LLDB.
Changed prior to commit: https://reviews.llvm.org/D147482?vs=510635&id=511471#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D147482/new/ https://reviews.llvm.org/D147482 Files: lldb/include/lldb/API/SBTarget.h lldb/source/API/SBTarget.cpp lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py
Index: lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py =================================================================== --- lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py +++ lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py @@ -36,14 +36,14 @@ self.assertEqual(first_sym.GetStartAddress().GetLoadAddress(target), lldb.LLDB_INVALID_ADDRESS) self.assertEqual(second_sym.GetStartAddress().GetLoadAddress(target), lldb.LLDB_INVALID_ADDRESS) - # View the first element of `first` and `second` with # no slide applied, but with load address set. # # In memory, we have something like # 0x1000 - 0x17ff first[] # 0x1800 - 0x1fff second[] - target.SetModuleLoadAddress(module, 0) + error = target.SetModuleLoadAddress(module, 0) + self.assertSuccess(error) self.expect("expression/d ((int*)&first)[0]", substrs=['= 5']) self.expect("expression/d ((int*)&second)[0]", substrs=['= 6']) self.assertEqual(first_sym.GetStartAddress().GetLoadAddress(target), @@ -60,7 +60,8 @@ # but if the original entries are still present in lldb, # the beginning address of second[] will get a load address # of 0x1800, instead of 0x17c0 (0x1800-64) as we need to get. - target.SetModuleLoadAddress(module, first_size - 64) + error = target.SetModuleLoadAddress(module, first_size - 64) + self.assertSuccess(error) self.expect("expression/d ((int*)&first)[0]", substrs=['= 5']) self.expect("expression/d ((int*)&second)[0]", substrs=['= 6']) self.assertNotEqual(first_sym.GetStartAddress().GetLoadAddress(target), @@ -69,7 +70,8 @@ second_sym.GetStartAddress().GetFileAddress()) # Slide it back to the original vmaddr. - target.SetModuleLoadAddress(module, 0) + error = target.SetModuleLoadAddress(module, 0) + self.assertSuccess(error) self.expect("expression/d ((int*)&first)[0]", substrs=['= 5']) self.expect("expression/d ((int*)&second)[0]", substrs=['= 6']) self.assertEqual(first_sym.GetStartAddress().GetLoadAddress(target), @@ -77,3 +79,6 @@ self.assertEqual(second_sym.GetStartAddress().GetLoadAddress(target), second_sym.GetStartAddress().GetFileAddress()) + # Make sure we can use a slide > INT64_MAX. + error = target.SetModuleLoadAddress(module, 0xffffffff12345678) + self.assertSuccess(error) Index: lldb/source/API/SBTarget.cpp =================================================================== --- lldb/source/API/SBTarget.cpp +++ lldb/source/API/SBTarget.cpp @@ -2093,6 +2093,18 @@ int64_t slide_offset) { LLDB_INSTRUMENT_VA(this, module, slide_offset); + if (slide_offset < 0) { + SBError sb_error; + sb_error.SetErrorStringWithFormat("slide must be positive"); + return sb_error; + } + + return SetModuleLoadAddress(module, static_cast<uint64_t>(slide_offset)); +} + +SBError SBTarget::SetModuleLoadAddress(lldb::SBModule module, + uint64_t slide_offset) { + SBError sb_error; TargetSP target_sp(GetSP()); Index: lldb/include/lldb/API/SBTarget.h =================================================================== --- lldb/include/lldb/API/SBTarget.h +++ lldb/include/lldb/API/SBTarget.h @@ -371,6 +371,7 @@ /// failure. lldb::SBError ClearSectionLoadAddress(lldb::SBSection section); +#ifndef SWIG /// Slide all file addresses for all module sections so that \a module /// appears to loaded at these slide addresses. /// @@ -389,8 +390,31 @@ /// \return /// An error to indicate success, fail, and any reason for /// failure. + [[deprecated("Use SetModuleLoadAddress(lldb::SBModule, uint64_t)")]] lldb::SBError SetModuleLoadAddress(lldb::SBModule module, int64_t sections_offset); +#endif + + /// Slide all file addresses for all module sections so that \a module + /// appears to loaded at these slide addresses. + /// + /// When you need all sections within a module to be loaded at a + /// rigid slide from the addresses found in the module object file, + /// this function will allow you to easily and quickly slide all + /// module sections. + /// + /// \param[in] module + /// The module to load. + /// + /// \param[in] sections_offset + /// An offset that will be applied to all section file addresses + /// (the virtual addresses found in the object file itself). + /// + /// \return + /// An error to indicate success, fail, and any reason for + /// failure. + lldb::SBError SetModuleLoadAddress(lldb::SBModule module, + uint64_t sections_offset); /// Clear the section base load addresses for all sections in a module. ///
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits