aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Arnez <arnez@linux.ibm.com>2020-11-19 19:10:58 +0100
committerAndreas Arnez <arnez@linux.ibm.com>2020-11-19 19:10:58 +0100
commitd5ef21c3ecf2d7a97272bf5a5881f4e71289a1af (patch)
tree2c15844b5883b0c893bc232375a51268781958ed
parenta4eba6087d4cec81f8b41477b4da56ff87b88e91 (diff)
downloadbinutils-d5ef21c3ecf2d7a97272bf5a5881f4e71289a1af.zip
binutils-d5ef21c3ecf2d7a97272bf5a5881f4e71289a1af.tar.gz
binutils-d5ef21c3ecf2d7a97272bf5a5881f4e71289a1af.tar.bz2
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.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/s390-tdep.c17
2 files changed, 20 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5b48442..45c9274 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2020-11-19 Andreas Arnez <arnez@linux.ibm.com>
+
+ PR tdep/26916
+ * s390-tdep.c (s390_process_record): Fix recording of STOC, STOCG,
+ and STOCFH.
+
2020-11-19 Simon Marchi <simon.marchi@polymtl.ca>
* f-lang.c (fortran_value_subarray): Use plongest/pulongest.
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index ce01345..247adcd 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -5370,7 +5370,6 @@ ex:
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))
@@ -5399,8 +5398,6 @@ ex:
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))
@@ -6113,6 +6110,20 @@ ex:
/* 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 */