]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/python/lib/gdb/dap/memory.py
Add type-checking to DAP requests
[thirdparty/binutils-gdb.git] / gdb / python / lib / gdb / dap / memory.py
1 # Copyright 2023 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16 import base64
17 import gdb
18
19 from .server import request, capability
20 from .startup import send_gdb_with_response, in_gdb_thread
21
22
23 @in_gdb_thread
24 def _read_memory(addr, count):
25 buf = gdb.selected_inferior().read_memory(addr, count)
26 return base64.b64encode(buf).decode("ASCII")
27
28
29 @request("readMemory")
30 @capability("supportsReadMemoryRequest")
31 def read_memory(*, memoryReference: str, offset: int = 0, count: int, **extra):
32 addr = int(memoryReference, 0) + offset
33 buf = send_gdb_with_response(lambda: _read_memory(addr, count))
34 return {
35 "address": hex(addr),
36 "data": buf,
37 }
38
39
40 @in_gdb_thread
41 def _write_memory(addr, contents):
42 buf = base64.b64decode(contents)
43 gdb.selected_inferior().write_memory(addr, buf)
44
45
46 @request("writeMemory")
47 @capability("supportsWriteMemoryRequest")
48 def write_memory(*, memoryReference: str, offset: int = 0, data: str, **extra):
49 addr = int(memoryReference, 0) + offset
50 send_gdb_with_response(lambda: _write_memory(addr, data))
51 return {}