aboutsummaryrefslogtreecommitdiff
path: root/gdb/s390-tdep.c
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-07-29 09:03:20 +0200
committerTom de Vries <tdevries@suse.de>2020-07-29 09:03:20 +0200
commit8ba83e9109a1a02f54f1c4793c8f231bb9256acd (patch)
tree3b9b22b97b8449bc7ab65af3a67494d658aa523f /gdb/s390-tdep.c
parentf5c79e97fecb9333c150bfaa84bfee66c41a93bc (diff)
downloadgdb-8ba83e9109a1a02f54f1c4793c8f231bb9256acd.zip
gdb-8ba83e9109a1a02f54f1c4793c8f231bb9256acd.tar.gz
gdb-8ba83e9109a1a02f54f1c4793c8f231bb9256acd.tar.bz2
[tdep/s390] Fix Wmaybe-uninitialized in s390_displaced_step_fixup
When building gdb with CFLAGS/CXXFLAGS="-O2 -g -Wall", I see: ... src/gdb/s390-tdep.c: In function 'void s390_displaced_step_fixup(gdbarch*, \ displaced_step_closure*, CORE_ADDR, CORE_ADDR, regcache*)': src/gdb/s390-tdep.c:528:30: warning: 'r2' may be used uninitialized in this \ function [-Wmaybe-uninitialized] 528 | if (insn[0] == op_basr && r2 == 0) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ ... The problem is that the compiler is unaware that 'is_rr (insn, op_basr, &r1, &r2) == 1' ensures that 'insn[0] == op_basr': ... if (is_rr (insn, op_basr, &r1, &r2) || is_rx (insn, op_bas, &r1, &d2, &x2, &b2)) { /* Recompute saved return address in R1. */ regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1, amode | (from + insnlen)); /* Update PC iff the instruction doesn't actually branch. */ if (insn[0] == op_basr && r2 == 0) regcache_write_pc (regs, from + insnlen); } ... Fix this by storing the result of the call, and using it instead of 'insn[0] ==op_basr'. Build on x86_64-linux with --enable-targets=s390-suse-linux,s390x-suse-linux. gdb/ChangeLog: 2020-07-29 Tom de Vries <tdevries@suse.de> PR tdep/26280 * s390-tdep.c (s390_displaced_step_fixup): Fix Wmaybe-uninitialized.
Diffstat (limited to 'gdb/s390-tdep.c')
-rw-r--r--gdb/s390-tdep.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index 0ee7a37..65cb237 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -518,14 +518,15 @@ s390_displaced_step_fixup (struct gdbarch *gdbarch,
paddress (gdbarch, pc), insnlen, (int) amode);
/* Handle absolute branch and save instructions. */
- if (is_rr (insn, op_basr, &r1, &r2)
+ int op_basr_p = is_rr (insn, op_basr, &r1, &r2);
+ if (op_basr_p
|| is_rx (insn, op_bas, &r1, &d2, &x2, &b2))
{
/* Recompute saved return address in R1. */
regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
amode | (from + insnlen));
/* Update PC iff the instruction doesn't actually branch. */
- if (insn[0] == op_basr && r2 == 0)
+ if (op_basr_p && r2 == 0)
regcache_write_pc (regs, from + insnlen);
}