Files
clang-p2996/lldb/test/API/commands/expression/memory-allocation/TestMemoryAllocSettings.py
Ilya Kuklin 8be139fc12 [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
2023-05-02 11:02:44 -07:00

36 lines
1.3 KiB
Python

"""
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.")