On 04/09/2023 16.19, Ilya Leoshkevich wrote:
On Mon, 2023-09-04 at 16:00 +0200, Thomas Huth wrote:
With these changes, it is now possible to compile the "risu" binary
for s390x hosts.
Signed-off-by: Thomas Huth <[email protected]>
---
risu_reginfo_s390x.c | 142
+++++++++++++++++++++++++++++++++++++++++++
risu_reginfo_s390x.h | 23 +++++++
risu_s390x.c | 48 +++++++++++++++
test_s390x.S | 32 ++++++++++
4 files changed, 245 insertions(+)
create mode 100644 risu_reginfo_s390x.c
create mode 100644 risu_reginfo_s390x.h
create mode 100644 risu_s390x.c
create mode 100644 test_s390x.S
Looks really interesting! I was doing similar qemu-system-s390x testing
with a bunch of ad-hoc scripts, and there are quite a few unresolved
problems still, especially in the error handling area.
Acked-by: Ilya Leoshkevich <[email protected]>
I have one small question (see below).
[...]
+/* reginfo_is_eq: compare the reginfo structs, returns nonzero if
equal */
+int reginfo_is_eq(struct reginfo *m, struct reginfo *a)
+{
+ int i;
+
+ if (m->psw_mask != a->psw_mask || m->psw_addr != a->psw_addr) {
+ return 0;
+ }
+
+ /* Skip return address register and stack register for
comparison */
Is this because of ASLR? In this case, would it be possible to build a
non-PIE binary and switch to a private stack at the beginning? This
could be useful for the other architectures as well.
Ah, no, it's not due to ASLR ... I just experienced some crashes during
development and saw that other targets like m68k skip the stack pointer
here, too, so I did it the same way on s390x.
(But I finally discovered that the crashes were due to other reasons that I
then fixed)
Looking through the code, it seems like there is already support for an
alternate signal handler stack:
https://git.linaro.org/people/peter.maydell/risu.git/commit/?id=ad82a069e8d6a21842bbb265
... maybe it's working on s390x, too ... I'll give it a try.
Thomas