summaryrefslogtreecommitdiff
path: root/lldb/test
diff options
context:
space:
mode:
authorIlya Kuklin <ikuklin@accesssoftek.com>2023-05-02 11:02:30 -0700
committerAnton Korobeynikov <anton@korobeynikov.info>2023-05-02 11:02:44 -0700
commit8be139fc1251b99316d65403bde9c2326b12da20 (patch)
tree98a13a4b4060fa5769ba0bba49cd703b1a9bf836 /lldb/test
parent7e7bd9833b1084b9724f48f0f05609a7b975b516 (diff)
downloadllvm-8be139fc1251b99316d65403bde9c2326b12da20.tar.gz
[lldb] Add settings for expression evaluation memory allocations.
Expression evaluation allocates memory for storing intermediate data during evaluation. For it to work properly it has to be allocated within target's available address space, for example within first 0xFFFF bytes for the 16-bit MSP430. The memory for such targets can be very tightly packed, but not all targets support GetMemoryRegionInfo API to pick an unused region, like MSP430 with MSPDebug GDB server. These settings allow the programmer to manually pick precisely where and how much memory to allocate for expression evaluation in order not to overlap with existing data in process memory. Reviewed By: bulbazord Differential Revision: https://reviews.llvm.org/D149262
Diffstat (limited to 'lldb/test')
-rw-r--r--lldb/test/API/commands/expression/memory-allocation/Makefile3
-rw-r--r--lldb/test/API/commands/expression/memory-allocation/TestMemoryAllocSettings.py35
-rw-r--r--lldb/test/API/commands/expression/memory-allocation/main.cpp3
3 files changed, 41 insertions, 0 deletions
diff --git a/lldb/test/API/commands/expression/memory-allocation/Makefile b/lldb/test/API/commands/expression/memory-allocation/Makefile
new file mode 100644
index 000000000000..99998b20bcb0
--- /dev/null
+++ b/lldb/test/API/commands/expression/memory-allocation/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/lldb/test/API/commands/expression/memory-allocation/TestMemoryAllocSettings.py b/lldb/test/API/commands/expression/memory-allocation/TestMemoryAllocSettings.py
new file mode 100644
index 000000000000..3dc8dc16495c
--- /dev/null
+++ b/lldb/test/API/commands/expression/memory-allocation/TestMemoryAllocSettings.py
@@ -0,0 +1,35 @@
+"""
+Test changing setting for expression memory allocation.
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class TestMemoryAllocSettings(TestBase):
+
+ def test(self):
+ """Test changing settings for expression memory allocation."""
+ self.build()
+ target = self.createTestTarget()
+
+ self.log_file = self.getBuildArtifact("log-expr.txt")
+
+ self.runCmd("settings set target.expr-alloc-address 0xdead0000")
+ self.runCmd("settings set target.expr-alloc-size 10000")
+ self.runCmd("settings set target.expr-alloc-align 0x1000")
+
+ self.runCmd("log enable lldb expr -f " + self.log_file)
+ self.runCmd("expression -- int foo; &foo")
+
+ self.assertTrue(os.path.isfile(self.log_file))
+ with open(self.log_file, 'r') as f:
+ log = f.read()
+
+ alloc0 = re.search('^.*IRMemoryMap::Malloc.+?0xdead0000.*$', log, re.MULTILINE)
+ # Malloc adds additional bytes to allocation size, hence 10007
+ alloc1 = re.search('^.*IRMemoryMap::Malloc\s*?\(10007.+?0xdead1000.*$', log, re.MULTILINE)
+ self.assertTrue(alloc0, "Couldn't find an allocation at a given address.")
+ self.assertTrue(alloc1, "Couldn't find an allocation of a given size at a given address.")
+
diff --git a/lldb/test/API/commands/expression/memory-allocation/main.cpp b/lldb/test/API/commands/expression/memory-allocation/main.cpp
new file mode 100644
index 000000000000..4cce7f667ff7
--- /dev/null
+++ b/lldb/test/API/commands/expression/memory-allocation/main.cpp
@@ -0,0 +1,3 @@
+int main() {
+ return 0;
+}