diff options
Diffstat (limited to 'gdb/dwarf2/expr.c')
-rw-r--r-- | gdb/dwarf2/expr.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c index 346bf7f..aa2fd9d 100644 --- a/gdb/dwarf2/expr.c +++ b/gdb/dwarf2/expr.c @@ -1759,6 +1759,10 @@ dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr, case DW_OP_reg29: case DW_OP_reg30: case DW_OP_reg31: + /* The value of a register is relative to a frame, so we require a + valid frame. */ + ensure_have_frame (this->m_frame, "DW_OP_reg<n>"); + dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_reg"); result = op - DW_OP_reg0; @@ -1767,6 +1771,10 @@ dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr, break; case DW_OP_regx: + /* The value of a register is relative to a frame, so we require a + valid frame. */ + ensure_have_frame (this->m_frame, "DW_OP_regx"); + op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx"); |