mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-06 18:05:37 +00:00
gdbstub: add test for untimely stop-reply packets
In the previous commit, we modified gdbstub.c to only send stop-reply packets as a response to GDB commands that accept it. Now, let's add a test for this intended behavior. Running this test before the fix from the previous commit fails as QEMU sends a stop-reply packet asynchronously, when GDB was in fact waiting an ACK. Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com> Acked-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Taylor Simpson <tsimpson@quicinc.com> Message-Id: <a30d93b9a8d66e9d9294354cfa2fc3af35f00202.1683214375.git.quic_mathbern@quicinc.com>
This commit is contained in:
parent
758370052f
commit
dae66a3f66
|
@ -26,11 +26,12 @@ def get_args():
|
||||||
parser.add_argument("--qargs", help="Qemu arguments for test")
|
parser.add_argument("--qargs", help="Qemu arguments for test")
|
||||||
parser.add_argument("--binary", help="Binary to debug",
|
parser.add_argument("--binary", help="Binary to debug",
|
||||||
required=True)
|
required=True)
|
||||||
parser.add_argument("--test", help="GDB test script",
|
parser.add_argument("--test", help="GDB test script")
|
||||||
required=True)
|
|
||||||
parser.add_argument("--gdb", help="The gdb binary to use",
|
parser.add_argument("--gdb", help="The gdb binary to use",
|
||||||
default=None)
|
default=None)
|
||||||
|
parser.add_argument("--gdb-args", help="Additional gdb arguments")
|
||||||
parser.add_argument("--output", help="A file to redirect output to")
|
parser.add_argument("--output", help="A file to redirect output to")
|
||||||
|
parser.add_argument("--stderr", help="A file to redirect stderr to")
|
||||||
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
@ -58,6 +59,10 @@ def log(output, msg):
|
||||||
output = open(args.output, "w")
|
output = open(args.output, "w")
|
||||||
else:
|
else:
|
||||||
output = None
|
output = None
|
||||||
|
if args.stderr:
|
||||||
|
stderr = open(args.stderr, "w")
|
||||||
|
else:
|
||||||
|
stderr = None
|
||||||
|
|
||||||
socket_dir = TemporaryDirectory("qemu-gdbstub")
|
socket_dir = TemporaryDirectory("qemu-gdbstub")
|
||||||
socket_name = os.path.join(socket_dir.name, "gdbstub.socket")
|
socket_name = os.path.join(socket_dir.name, "gdbstub.socket")
|
||||||
|
@ -77,6 +82,8 @@ def log(output, msg):
|
||||||
|
|
||||||
# Now launch gdb with our test and collect the result
|
# Now launch gdb with our test and collect the result
|
||||||
gdb_cmd = "%s %s" % (args.gdb, args.binary)
|
gdb_cmd = "%s %s" % (args.gdb, args.binary)
|
||||||
|
if args.gdb_args:
|
||||||
|
gdb_cmd += " %s" % (args.gdb_args)
|
||||||
# run quietly and ignore .gdbinit
|
# run quietly and ignore .gdbinit
|
||||||
gdb_cmd += " -q -n -batch"
|
gdb_cmd += " -q -n -batch"
|
||||||
# disable prompts in case of crash
|
# disable prompts in case of crash
|
||||||
|
@ -84,13 +91,14 @@ def log(output, msg):
|
||||||
# connect to remote
|
# connect to remote
|
||||||
gdb_cmd += " -ex 'target remote %s'" % (socket_name)
|
gdb_cmd += " -ex 'target remote %s'" % (socket_name)
|
||||||
# finally the test script itself
|
# finally the test script itself
|
||||||
|
if args.test:
|
||||||
gdb_cmd += " -x %s" % (args.test)
|
gdb_cmd += " -x %s" % (args.test)
|
||||||
|
|
||||||
|
|
||||||
sleep(1)
|
sleep(1)
|
||||||
log(output, "GDB CMD: %s" % (gdb_cmd))
|
log(output, "GDB CMD: %s" % (gdb_cmd))
|
||||||
|
|
||||||
result = subprocess.call(gdb_cmd, shell=True, stdout=output)
|
result = subprocess.call(gdb_cmd, shell=True, stdout=output, stderr=stderr)
|
||||||
|
|
||||||
# A result of greater than 128 indicates a fatal signal (likely a
|
# A result of greater than 128 indicates a fatal signal (likely a
|
||||||
# crash due to gdb internal failure). That's a problem for GDB and
|
# crash due to gdb internal failure). That's a problem for GDB and
|
||||||
|
|
|
@ -27,6 +27,20 @@ run-gdbstub-memory: memory
|
||||||
"-monitor none -display none -chardev file$(COMMA)path=$<.out$(COMMA)id=output $(QEMU_OPTS)" \
|
"-monitor none -display none -chardev file$(COMMA)path=$<.out$(COMMA)id=output $(QEMU_OPTS)" \
|
||||||
--bin $< --test $(MULTIARCH_SRC)/gdbstub/memory.py, \
|
--bin $< --test $(MULTIARCH_SRC)/gdbstub/memory.py, \
|
||||||
softmmu gdbstub support)
|
softmmu gdbstub support)
|
||||||
|
|
||||||
|
run-gdbstub-untimely-packet: hello
|
||||||
|
$(call run-test, $@, $(GDB_SCRIPT) \
|
||||||
|
--gdb $(HAVE_GDB_BIN) \
|
||||||
|
--gdb-args "-ex 'set debug remote 1'" \
|
||||||
|
--output untimely-packet.gdb.out \
|
||||||
|
--stderr untimely-packet.gdb.err \
|
||||||
|
--qemu $(QEMU) \
|
||||||
|
--bin $< --qargs \
|
||||||
|
"-monitor none -display none -chardev file$(COMMA)path=untimely-packet.out$(COMMA)id=output $(QEMU_OPTS)", \
|
||||||
|
"softmmu gdbstub untimely packets")
|
||||||
|
$(call quiet-command, \
|
||||||
|
(! grep -Fq 'Packet instead of Ack, ignoring it' untimely-packet.gdb.err), \
|
||||||
|
"GREP", "file untimely-packet.gdb.err")
|
||||||
else
|
else
|
||||||
run-gdbstub-%:
|
run-gdbstub-%:
|
||||||
$(call skip-test, "gdbstub test $*", "no guest arch support")
|
$(call skip-test, "gdbstub test $*", "no guest arch support")
|
||||||
|
@ -36,4 +50,4 @@ run-gdbstub-%:
|
||||||
$(call skip-test, "gdbstub test $*", "need working gdb")
|
$(call skip-test, "gdbstub test $*", "need working gdb")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
MULTIARCH_RUNS += run-gdbstub-memory
|
MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-untimely-packet
|
||||||
|
|
Loading…
Reference in a new issue