mirror of https://gitlab.com/qemu-project/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
"""Test GDB syscall catchpoints.
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
"""
|
|
from test_gdbstub import main, report
|
|
|
|
|
|
def check_state(expected):
|
|
"""Check the catch_syscalls_state value"""
|
|
actual = gdb.parse_and_eval("catch_syscalls_state").string()
|
|
report(actual == expected, "{} == {}".format(actual, expected))
|
|
|
|
|
|
def run_test():
|
|
"""Run through the tests one by one"""
|
|
gdb.Breakpoint("main")
|
|
gdb.execute("continue")
|
|
|
|
# Check that GDB stops for pipe2/read calls/returns, but not for write.
|
|
gdb.execute("delete")
|
|
try:
|
|
gdb.execute("catch syscall pipe2 read")
|
|
except gdb.error as exc:
|
|
exc_str = str(exc)
|
|
if "not supported on this architecture" in exc_str:
|
|
print("SKIP: {}".format(exc_str))
|
|
return
|
|
raise
|
|
for _ in range(2):
|
|
gdb.execute("continue")
|
|
check_state("pipe2")
|
|
for _ in range(2):
|
|
gdb.execute("continue")
|
|
check_state("read")
|
|
|
|
# Check that deletion works.
|
|
gdb.execute("delete")
|
|
gdb.Breakpoint("end_of_main")
|
|
gdb.execute("continue")
|
|
check_state("end")
|
|
|
|
# Check that catch-all works (libc should at least call exit).
|
|
gdb.execute("delete")
|
|
gdb.execute("catch syscall")
|
|
gdb.execute("continue")
|
|
gdb.execute("delete")
|
|
gdb.execute("continue")
|
|
|
|
exitcode = int(gdb.parse_and_eval("$_exitcode"))
|
|
report(exitcode == 0, "{} == 0".format(exitcode))
|
|
|
|
|
|
main(run_test)
|