aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>2018-03-22 10:22:45 -0300
committerPedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>2018-03-22 10:22:45 -0300
commit7a8f494c7b171f6cbad20a14ef03a5d7acaa6ccb (patch)
tree8bb4a731df7e6aba72f61057616af0df0e2246e9
parentdd6d677f0b06341dce90d259785c9d513d2e3935 (diff)
downloadgdb-7a8f494c7b171f6cbad20a14ef03a5d7acaa6ccb.zip
gdb-7a8f494c7b171f6cbad20a14ef03a5d7acaa6ccb.tar.gz
gdb-7a8f494c7b171f6cbad20a14ef03a5d7acaa6ccb.tar.bz2
ppc: Fix stwux and stdux masks in skip_prologue
This patch merges the masks for matching the stwux and stdux instructions in rs6000-tdep.c:skip_prologue into a single mask that only matches these two instructions. Commit 72dd273062 fixed the warning described in PR tdep/18295, this patch addresses the comment in the same PR indicating that the mask was too permissive. gdb/Changelog: PR tdep/18295 * rs6000-tdep.c (skip_prologue): Match both stwux and stdux a single mask.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/rs6000-tdep.c11
2 files changed, 8 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index cf996bc..ef11361 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2018-03-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>
+ PR tdep/18295
+ * rs6000-tdep.c (skip_prologue): Match both stwux and stdux
+ a single mask.
+
+2018-03-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>
+
* rs6000-tdep.c (store_insn_p): New function.
(skip_prologue): New variable alloca_reg_offset. Set lr_reg
and cr_reg to their unshifted values. Use store_insn_p to
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index d61fe58..37cbcb6 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -1889,8 +1889,8 @@ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
offset = fdata->offset;
continue;
}
- else if ((op & 0xfc1f016e) == 0x7c01016e)
- { /* stwux rX,r1,rY */
+ else if ((op & 0xfc1f07fa) == 0x7c01016a)
+ { /* stwux rX,r1,rY || stdux rX,r1,rY */
/* No way to figure out what r1 is going to be. */
fdata->frameless = 0;
offset = fdata->offset;
@@ -1903,13 +1903,6 @@ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
offset = fdata->offset;
continue;
}
- else if ((op & 0xfc1f016a) == 0x7c01016a)
- { /* stdux rX,r1,rY */
- /* No way to figure out what r1 is going to be. */
- fdata->frameless = 0;
- offset = fdata->offset;
- continue;
- }
else if ((op & 0xffff0000) == 0x38210000)
{ /* addi r1,r1,SIMM */
fdata->frameless = 0;