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.
64 lines
2.4 KiB
64 lines
2.4 KiB
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 */
|
|
|