@@ -115,6 +115,21 @@ 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)
{
@@ -122,6 +137,7 @@ static void print_pgm_info(struct stack_frame_int *stack)
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();
@@ -132,6 +148,7 @@ 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);