[kvm-unit-tests GIT PULL 11/16] s390x: Print more information on program exceptions

Janosch Frank
2021-03-08T14:39:48Z

Currently we only get a single line of output if a test runs in a
unexpected program exception. Let's also print the general registers
to give some more context.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Acked-by: Pierre Morel <pmorel@linux.ibm.com>
---
lib/s390x/interrupt.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)

diff --git a/lib/s390x/interrupt.c b/lib/s390x/interrupt.c
index 46ae0bd7..d9832bc0 100644
--- a/lib/s390x/interrupt.c
+++ b/lib/s390x/interrupt.c
@@ -121,11 +121,40 @@ static void fixup_pgm_int(struct stack_frame_int *stack)
/* suppressed/terminated/completed point already at the next address */
}

+static void print_int_regs(struct stack_frame_int *stack)
+{
+ printf("\n");
+ printf("GPRS:\n");
+ printf("%016lx %016lx %016lx %016lx\n",
+ stack->grs1[0], stack->grs1[1], stack->grs0[0], stack->grs0[1]);
+ printf("%016lx %016lx %016lx %016lx\n",
+ stack->grs0[2], stack->grs0[3], stack->grs0[4], stack->grs0[5]);
+ printf("%016lx %016lx %016lx %016lx\n",
+ stack->grs0[6], stack->grs0[7], stack->grs0[8], stack->grs0[9]);
+ printf("%016lx %016lx %016lx %016lx\n",
+ stack->grs0[10], stack->grs0[11], stack->grs0[12], stack->grs0[13]);
+ printf("\n");
+}
+
+static void print_pgm_info(struct stack_frame_int *stack)
+
+{
+ printf("\n");
+ printf("Unexpected program interrupt: %d on cpu %d at %#lx, ilen %d\n",
+ lc->pgm_int_code, stap(), lc->pgm_old_psw.addr,
+ lc->pgm_int_id);
+ print_int_regs(stack);
+ dump_stack();
+ report_summary();
+ abort();
+}
+
void handle_pgm_int(struct stack_frame_int *stack)
{
if (!pgm_int_expected) {
/* Force sclp_busy to false, otherwise we will loop forever */
sclp_handle_ext();
+ print_pgm_info(stack);
report_abort("Unexpected program interrupt: %d on cpu %d at %#lx, ilen %d\n",
lc->pgm_int_code, stap(), lc->pgm_old_psw.addr,
lc->pgm_int_id);
--
2.29.2