From: "Alex Bennée" <alex.bennee@linaro.org>
To: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: "Richard Henderson" <richard.henderson@linaro.org>,
"Peter Maydell" <peter.maydell@linaro.org>,
"David Hildenbrand" <david@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
qemu-devel@nongnu.org, qemu-arm@nongnu.org,
qemu-s390x@nongnu.org
Subject: Re: [PATCH v3 3/3] tests/tcg: Add the PROT_NONE gdbstub test
Date: Mon, 22 Jan 2024 15:54:32 +0000 [thread overview]
Message-ID: <871qa9nz2f.fsf@draig.linaro.org> (raw)
In-Reply-To: <20240116003551.75168-4-iii@linux.ibm.com> (Ilya Leoshkevich's message of "Tue, 16 Jan 2024 01:31:42 +0100")
Ilya Leoshkevich <iii@linux.ibm.com> writes:
> Make sure that qemu gdbstub, like gdbserver, allows reading from and
> writing to PROT_NONE pages.
>
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
> tests/tcg/multiarch/Makefile.target | 9 +++++-
> tests/tcg/multiarch/gdbstub/prot-none.py | 22 +++++++++++++
> tests/tcg/multiarch/prot-none.c | 40 ++++++++++++++++++++++++
> 3 files changed, 70 insertions(+), 1 deletion(-)
> create mode 100644 tests/tcg/multiarch/gdbstub/prot-none.py
> create mode 100644 tests/tcg/multiarch/prot-none.c
>
> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
> index d31ba8d6ae4..315a2e13588 100644
> --- a/tests/tcg/multiarch/Makefile.target
> +++ b/tests/tcg/multiarch/Makefile.target
> @@ -101,13 +101,20 @@ run-gdbstub-registers: sha512
> --bin $< --test $(MULTIARCH_SRC)/gdbstub/registers.py, \
> checking register enumeration)
>
> +run-gdbstub-prot-none: prot-none
> + $(call run-test, $@, env PROT_NONE_PY=1 $(GDB_SCRIPT) \
> + --gdb $(GDB) \
> + --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
> + --bin $< --test $(MULTIARCH_SRC)/gdbstub/prot-none.py, \
> + accessing PROT_NONE memory)
> +
> else
> run-gdbstub-%:
> $(call skip-test, "gdbstub test $*", "need working gdb with $(patsubst -%,,$(TARGET_NAME)) support")
> endif
> EXTRA_RUNS += run-gdbstub-sha1 run-gdbstub-qxfer-auxv-read \
> run-gdbstub-proc-mappings run-gdbstub-thread-breakpoint \
> - run-gdbstub-registers
> + run-gdbstub-registers run-gdbstub-prot-none
>
> # ARM Compatible Semi Hosting Tests
> #
> diff --git a/tests/tcg/multiarch/gdbstub/prot-none.py b/tests/tcg/multiarch/gdbstub/prot-none.py
> new file mode 100644
> index 00000000000..f1f1dd82cbe
> --- /dev/null
> +++ b/tests/tcg/multiarch/gdbstub/prot-none.py
> @@ -0,0 +1,22 @@
> +"""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
> +"""
> +from test_gdbstub import main, report
> +
> +
> +def run_test():
> + """Run through the tests one by one"""
> + gdb.Breakpoint("break_here")
> + gdb.execute("continue")
> + val = gdb.parse_and_eval("*(char[2] *)q").string()
Better traceback:
Breakpoint 1, break_here (q=0x400000802fff) at /home/alex/lsrc/qemu.git/tests/tcg/multiarch/prot-none.c:14
14 }
GDB Exception:
Traceback (most recent call last):
File "/home/alex/lsrc/qemu.git/tests/guest-debug/test_gdbstub.py", line 42, in main
test()
File "./tests/tcg/multiarch/gdbstub/prot-none.py", line 14, in run_test
val = gdb.parse_and_eval("*(char[2] *)q").string()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
gdb.MemoryError: Cannot access memory at address 0x400000802fff
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
> + 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)
> diff --git a/tests/tcg/multiarch/prot-none.c b/tests/tcg/multiarch/prot-none.c
> new file mode 100644
> index 00000000000..dc56aadb3c5
> --- /dev/null
> +++ b/tests/tcg/multiarch/prot-none.c
> @@ -0,0 +1,40 @@
> +/*
> + * Test that GDB can access PROT_NONE pages.
> + *
> + * SPDX-License-Identifier: GPL-2.0-or-later
> + */
> +#include <assert.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <sys/mman.h>
> +#include <unistd.h>
> +
> +void break_here(void *q)
> +{
> +}
> +
> +int main(void)
> +{
> + long pagesize = sysconf(_SC_PAGESIZE);
> + void *p, *q;
> + int err;
> +
> + p = mmap(NULL, pagesize * 2, PROT_READ | PROT_WRITE,
> + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
> + assert(p != MAP_FAILED);
> + q = p + pagesize - 1;
> + strcpy(q, "42");
> +
> + err = mprotect(p, pagesize * 2, PROT_NONE);
> + assert(err == 0);
> +
> + break_here(q);
> +
> + err = mprotect(p, pagesize * 2, PROT_READ);
> + assert(err == 0);
> + if (getenv("PROT_NONE_PY")) {
> + assert(strcmp(q, "24") == 0);
> + }
> +
> + return EXIT_SUCCESS;
> +}
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
next prev parent reply other threads:[~2024-01-22 15:54 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-16 0:31 [PATCH v3 0/3] linux-user: Allow gdbstub to ignore page protection Ilya Leoshkevich
2024-01-16 0:31 ` [PATCH v3 1/3] " Ilya Leoshkevich
2024-01-16 0:31 ` [PATCH v3 2/3] tests/tcg: Factor out gdbstub test functions Ilya Leoshkevich
2024-01-22 16:00 ` Alex Bennée
2024-01-22 21:08 ` Ilya Leoshkevich
2024-01-16 0:31 ` [PATCH v3 3/3] tests/tcg: Add the PROT_NONE gdbstub test Ilya Leoshkevich
2024-01-22 15:43 ` Alex Bennée
2024-01-22 15:54 ` Alex Bennée [this message]
2024-01-22 21:31 ` Ilya Leoshkevich
2024-01-22 23:19 ` Alex Bennée
2024-01-25 2:39 ` Ilya Leoshkevich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871qa9nz2f.fsf@draig.linaro.org \
--to=alex.bennee@linaro.org \
--cc=david@redhat.com \
--cc=iii@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.