| """Test that GDB can access PROT_NONE pages. |
| |
| This runs as a sourced script (via -x, via run-test.py). |
| |
| SPDX-License-Identifier: GPL-2.0-or-later |
| """ |
| import ctypes |
| from test_gdbstub import gdb_exit, main, report |
| |
| |
| def probe_proc_self_mem(): |
| buf = ctypes.create_string_buffer(b'aaa') |
| try: |
| with open("/proc/self/mem", "rb") as fp: |
| fp.seek(ctypes.addressof(buf)) |
| return fp.read(3) == b'aaa' |
| except OSError: |
| return False |
| |
| |
| def run_test(): |
| """Run through the tests one by one""" |
| if not probe_proc_self_mem(): |
| print("SKIP: /proc/self/mem is not usable") |
| gdb_exit(0) |
| gdb.Breakpoint("break_here") |
| gdb.execute("continue") |
| val = gdb.parse_and_eval("*(char[2] *)q").string() |
| report(val == "42", "{} == 42".format(val)) |
| gdb.execute("set *(char[3] *)q = \"24\"") |
| gdb.execute("continue") |
| exitcode = int(gdb.parse_and_eval("$_exitcode")) |
| report(exitcode == 0, "{} == 0".format(exitcode)) |
| |
| |
| main(run_test) |