You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.4 KiB
65 lines
2.4 KiB
2 weeks ago
|
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||
|
From: Andreas Arnez <arnez@linux.ibm.com>
|
||
|
Date: Thu, 19 Nov 2020 19:10:58 +0100
|
||
|
Subject: gdb-rhbz1903375-s390x-store-on-condition.patch
|
||
|
|
||
|
;; Backport of "Correct recording of 'store on condition' insns"
|
||
|
;; Andreas Arnaz (RH BZ 1903374)
|
||
|
|
||
|
gdb/s390: Correct recording of "store on condition" insns
|
||
|
|
||
|
The "store on condition" instructions STOC, STOCG, and STOCFH are recorded
|
||
|
as if their instruction formats resembled that of STG. This is wrong,
|
||
|
usually resulting in "failed to record execution log" errors when trying
|
||
|
to record code with any of these instructions.
|
||
|
|
||
|
This patch fixes the recording of these instructions.
|
||
|
|
||
|
gdb/ChangeLog:
|
||
|
|
||
|
PR tdep/26916
|
||
|
* s390-tdep.c (s390_process_record): Fix recording of STOC, STOCG,
|
||
|
and STOCFH.
|
||
|
|
||
|
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
|
||
|
--- a/gdb/s390-tdep.c
|
||
|
+++ b/gdb/s390-tdep.c
|
||
|
@@ -5382,7 +5382,6 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
|
||
|
case 0xe325: /* NTSTG - nontransactional store */
|
||
|
case 0xe326: /* CVDY - convert to decimal */
|
||
|
case 0xe32f: /* STRVG - store reversed */
|
||
|
- case 0xebe3: /* STOCG - store on condition */
|
||
|
case 0xed67: /* STDY - store */
|
||
|
oaddr = s390_record_calc_disp (gdbarch, regcache, inib[3], insn[1], ibyte[4]);
|
||
|
if (record_full_arch_list_add_mem (oaddr, 8))
|
||
|
@@ -5411,8 +5410,6 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
|
||
|
case 0xe33e: /* STRV - store reversed */
|
||
|
case 0xe350: /* STY - store */
|
||
|
case 0xe3cb: /* STFH - store high */
|
||
|
- case 0xebe1: /* STOCFH - store high on condition */
|
||
|
- case 0xebf3: /* STOC - store on condition */
|
||
|
case 0xed66: /* STEY - store */
|
||
|
oaddr = s390_record_calc_disp (gdbarch, regcache, inib[3], insn[1], ibyte[4]);
|
||
|
if (record_full_arch_list_add_mem (oaddr, 4))
|
||
|
@@ -6125,6 +6122,20 @@ s390_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
|
||
|
|
||
|
/* 0xeb9c-0xebbf undefined */
|
||
|
/* 0xebc1-0xebdb undefined */
|
||
|
+
|
||
|
+ case 0xebe1: /* STOCFH - store high on condition */
|
||
|
+ case 0xebf3: /* STOC - store on condition */
|
||
|
+ oaddr = s390_record_calc_disp (gdbarch, regcache, 0, insn[1], ibyte[4]);
|
||
|
+ if (record_full_arch_list_add_mem (oaddr, 4))
|
||
|
+ return -1;
|
||
|
+ break;
|
||
|
+
|
||
|
+ case 0xebe3: /* STOCG - store on condition */
|
||
|
+ oaddr = s390_record_calc_disp (gdbarch, regcache, 0, insn[1], ibyte[4]);
|
||
|
+ if (record_full_arch_list_add_mem (oaddr, 8))
|
||
|
+ return -1;
|
||
|
+ break;
|
||
|
+
|
||
|
/* 0xebe5 undefined */
|
||
|
/* 0xebe9 undefined */
|
||
|
/* 0xebeb-0xebf1 undefined */
|