diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 386e27e835a..dd680964d0b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-09-24 Richard Henderson + + * dwarf2.h (DW_OP_GNU_encoded_addr): New. + * unwind-dw2.c (execute_stack_op): Handle it. + 2008-09-24 David Edelsohn Revert: diff --git a/gcc/dwarf2.h b/gcc/dwarf2.h index 89bc08a98e9..a20d4697004 100644 --- a/gcc/dwarf2.h +++ b/gcc/dwarf2.h @@ -543,6 +543,7 @@ enum dwarf_location_atom DW_OP_GNU_push_tls_address = 0xe0, /* The following is for marking variables that are uninitialized. */ DW_OP_GNU_uninit = 0xf0, + DW_OP_GNU_encoded_addr = 0xf1, /* HP extensions. */ DW_OP_HP_unknown = 0xe0, /* Ouch, the same as GNU_push_tls_address. */ DW_OP_HP_is_value = 0xe1, diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index 1bea1b30700..f55f57707de 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -494,6 +494,14 @@ execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end, op_ptr += sizeof (void *); break; + case DW_OP_GNU_encoded_addr: + { + _Unwind_Ptr presult; + op_ptr = read_encoded_value (context, *op_ptr, op_ptr+1, &presult); + result = presult; + } + break; + case DW_OP_const1u: result = read_1u (op_ptr); op_ptr += 1;