diff options
Diffstat (limited to 'gdb/ppc-linux-nat.c')
-rw-r--r-- | gdb/ppc-linux-nat.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c index 4da15f9..72f0283 100644 --- a/gdb/ppc-linux-nat.c +++ b/gdb/ppc-linux-nat.c @@ -54,6 +54,7 @@ #include "arch/ppc-linux-tdesc.h" #include "nat/ppc-linux.h" #include "linux-tdep.h" +#include "expop.h" /* Similarly for the hardware watchpoint support. These requests are used when the PowerPC HWDEBUG ptrace interface is not available. */ @@ -2491,16 +2492,29 @@ ppc_linux_nat_target::check_condition (CORE_ADDR watch_addr, struct value *left_val, *right_val; std::vector<value_ref_ptr> left_chain, right_chain; - if (cond->elts[0].opcode != BINOP_EQUAL) + if (cond->first_opcode () != BINOP_EQUAL) return 0; - fetch_subexp_value (cond, &pc, &left_val, NULL, &left_chain, false); + expr::operation *lhs = nullptr; + expr::operation *rhs = nullptr; + if (cond->op != nullptr) + { + expr::equal_operation *eqop + = dynamic_cast<expr::equal_operation *> (cond->op.get ()); + if (eqop != nullptr) + { + lhs = eqop->get_lhs (); + rhs = eqop->get_rhs (); + } + } + + fetch_subexp_value (cond, &pc, lhs, &left_val, NULL, &left_chain, false); num_accesses_left = num_memory_accesses (left_chain); if (left_val == NULL || num_accesses_left < 0) return 0; - fetch_subexp_value (cond, &pc, &right_val, NULL, &right_chain, false); + fetch_subexp_value (cond, &pc, rhs, &right_val, NULL, &right_chain, false); num_accesses_right = num_memory_accesses (right_chain); if (right_val == NULL || num_accesses_right < 0) |