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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits