|
|
0c1cd1 |
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
|
|
0c1cd1 |
From: Andreas Arnez <arnez@linux.ibm.com>
|
|
|
0c1cd1 |
Date: Thu, 19 Nov 2020 19:10:58 +0100
|
|
|
0c1cd1 |
Subject: gdb-rhbz1903374-s390x-store-on-condition.patch
|
|
|
0c1cd1 |
|
|
|
0c1cd1 |
;; Backport of "Correct recording of 'store on condition' insns"
|
|
|
0c1cd1 |
;; Andreas Arnaz (RH BZ 1903374)
|
|
|
0c1cd1 |
|
|
|
0c1cd1 |
gdb/s390: Correct recording of "store on condition" insns
|
|
|
0c1cd1 |
|
|
|
0c1cd1 |
The "store on condition" instructions STOC, STOCG, and STOCFH are recorded
|
|
|
0c1cd1 |
as if their instruction formats resembled that of STG. This is wrong,
|
|
|
0c1cd1 |
usually resulting in "failed to record execution log" errors when trying
|
|
|
0c1cd1 |
to record code with any of these instructions.
|
|
|
0c1cd1 |
|
|
|
0c1cd1 |
This patch fixes the recording of these instructions.
|
|
|
0c1cd1 |
|
|
|
0c1cd1 |
gdb/ChangeLog:
|
|
|
0c1cd1 |
|
|
|
0c1cd1 |
PR tdep/26916
|
|
|
0c1cd1 |
* s390-tdep.c (s390_process_record): Fix recording of STOC, STOCG,
|
|
|
0c1cd1 |
and STOCFH.
|
|
|
0c1cd1 |
|
|
|
0c1cd1 |
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
|
|
|
0c1cd1 |
--- a/gdb/s390-tdep.c
|
|
|
0c1cd1 |
+++ b/gdb/s390-tdep.c
|
|
|
0c1cd1 |
@@ -5332,7 +5332,6 @@ ex:
|
|
|
0c1cd1 |
case 0xe325: /* NTSTG - nontransactional store */
|
|
|
0c1cd1 |
case 0xe326: /* CVDY - convert to decimal */
|
|
|
0c1cd1 |
case 0xe32f: /* STRVG - store reversed */
|
|
|
0c1cd1 |
- case 0xebe3: /* STOCG - store on condition */
|
|
|
0c1cd1 |
case 0xed67: /* STDY - store */
|
|
|
0c1cd1 |
oaddr = s390_record_calc_disp (gdbarch, regcache, inib[3], insn[1], ibyte[4]);
|
|
|
0c1cd1 |
if (record_full_arch_list_add_mem (oaddr, 8))
|
|
|
0c1cd1 |
@@ -5361,8 +5360,6 @@ ex:
|
|
|
0c1cd1 |
case 0xe33e: /* STRV - store reversed */
|
|
|
0c1cd1 |
case 0xe350: /* STY - store */
|
|
|
0c1cd1 |
case 0xe3cb: /* STFH - store high */
|
|
|
0c1cd1 |
- case 0xebe1: /* STOCFH - store high on condition */
|
|
|
0c1cd1 |
- case 0xebf3: /* STOC - store on condition */
|
|
|
0c1cd1 |
case 0xed66: /* STEY - store */
|
|
|
0c1cd1 |
oaddr = s390_record_calc_disp (gdbarch, regcache, inib[3], insn[1], ibyte[4]);
|
|
|
0c1cd1 |
if (record_full_arch_list_add_mem (oaddr, 4))
|
|
|
0c1cd1 |
@@ -6075,6 +6072,20 @@ ex:
|
|
|
0c1cd1 |
|
|
|
0c1cd1 |
/* 0xeb9c-0xebbf undefined */
|
|
|
0c1cd1 |
/* 0xebc1-0xebdb undefined */
|
|
|
0c1cd1 |
+
|
|
|
0c1cd1 |
+ case 0xebe1: /* STOCFH - store high on condition */
|
|
|
0c1cd1 |
+ case 0xebf3: /* STOC - store on condition */
|
|
|
0c1cd1 |
+ oaddr = s390_record_calc_disp (gdbarch, regcache, 0, insn[1], ibyte[4]);
|
|
|
0c1cd1 |
+ if (record_full_arch_list_add_mem (oaddr, 4))
|
|
|
0c1cd1 |
+ return -1;
|
|
|
0c1cd1 |
+ break;
|
|
|
0c1cd1 |
+
|
|
|
0c1cd1 |
+ case 0xebe3: /* STOCG - store on condition */
|
|
|
0c1cd1 |
+ oaddr = s390_record_calc_disp (gdbarch, regcache, 0, insn[1], ibyte[4]);
|
|
|
0c1cd1 |
+ if (record_full_arch_list_add_mem (oaddr, 8))
|
|
|
0c1cd1 |
+ return -1;
|
|
|
0c1cd1 |
+ break;
|
|
|
0c1cd1 |
+
|
|
|
0c1cd1 |
/* 0xebe5 undefined */
|
|
|
0c1cd1 |
/* 0xebe9 undefined */
|
|
|
0c1cd1 |
/* 0xebeb-0xebf1 undefined */
|