gdb/
* dwarf2loc.c (dwarf2_evaluate_loc_desc): Catch NOT_AVAILABLE_ERROR when evaluating the location expression.
This commit is contained in:
parent
8dccd430c9
commit
79e1a869ac
2 changed files with 22 additions and 1 deletions
|
@ -1076,6 +1076,7 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
|
|||
struct dwarf_expr_context *ctx;
|
||||
struct cleanup *old_chain;
|
||||
struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
|
||||
volatile struct gdb_exception ex;
|
||||
|
||||
if (byte_offset < 0)
|
||||
invalid_synthetic_pointer ();
|
||||
|
@ -1106,7 +1107,22 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
|
|||
ctx->get_tls_address = dwarf_expr_tls_address;
|
||||
ctx->dwarf_call = dwarf_expr_dwarf_call;
|
||||
|
||||
dwarf_expr_eval (ctx, data, size);
|
||||
TRY_CATCH (ex, RETURN_MASK_ERROR)
|
||||
{
|
||||
dwarf_expr_eval (ctx, data, size);
|
||||
}
|
||||
if (ex.reason < 0)
|
||||
{
|
||||
if (ex.error == NOT_AVAILABLE_ERROR)
|
||||
{
|
||||
retval = allocate_value (type);
|
||||
mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type));
|
||||
return retval;
|
||||
}
|
||||
else
|
||||
throw_exception (ex);
|
||||
}
|
||||
|
||||
if (ctx->num_pieces > 0)
|
||||
{
|
||||
struct piece_closure *c;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2011-03-18 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* dwarf2loc.c (dwarf2_evaluate_loc_desc): Catch
|
||||
NOT_AVAILABLE_ERROR when evaluating the location expression.
|
||||
|
||||
2011-03-18 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* dwarf2loc.c (read_pieced_value): Handle get_frame_register_bytes
|
||||
|
|
Loading…
Reference in a new issue