diff options
-rw-r--r-- | trunk/ChangeLog | 19 | ||||
-rw-r--r-- | trunk/src/dwarf2.c | 24 | ||||
-rw-r--r-- | trunk/src/dwarf2.h | 26 |
3 files changed, 65 insertions, 4 deletions
diff --git a/trunk/ChangeLog b/trunk/ChangeLog index 2aea24d..a74445a 100644 --- a/trunk/ChangeLog +++ b/trunk/ChangeLog @@ -1,3 +1,22 @@ +2011-04-01 Jakub Jelinek <jakub@redhat.com> + + * src/dwarf2.h (DW_TAG_GNU_template_template_param, + DW_TAG_GNU_template_parameter_pack, DW_TAG_GNU_formal_parameter_pack, + DW_TAG_GNU_call_site, DW_TAG_GNU_call_site_parameter, + DW_AT_GNU_vector, DW_AT_GNU_guarded_by, DW_AT_GNU_pt_guarded_by, + DW_AT_GNU_guarded, DW_AT_GNU_pt_guarded, DW_AT_GNU_locks_excluded, + DW_AT_GNU_exclusive_locks_required, DW_AT_GNU_shared_locks_required, + DW_AT_GNU_odr_signature, DW_AT_GNU_template_name, + DW_AT_GNU_call_site_value, DW_AT_GNU_call_site_data_value, + DW_AT_GNU_call_site_target, DW_AT_GNU_call_site_target_clobbered, + DW_AT_GNU_tail_call, DW_AT_GNU_all_tail_call_sites, + DW_AT_GNU_all_call_sites, DW_AT_GNU_all_source_call_sites, + DW_OP_GNU_entry_value): Define. + * src/dwarf2.c (adjust_location_list): Handle DW_OP_GNU_entry_value. + (adjust_attributes): Handle DW_AT_GNU_call_site_value, + DW_AT_GNU_call_site_data_value, DW_AT_GNU_call_site_target and + DW_AT_GNU_call_site_target_clobbered. + 2010-11-23 Jakub Jelinek <jakub@redhat.com> * src/dwarf2.h (DW_OP_GNU_implicit_pointer): Define. diff --git a/trunk/src/dwarf2.c b/trunk/src/dwarf2.c index 3c35eca..4c8a245 100644 --- a/trunk/src/dwarf2.c +++ b/trunk/src/dwarf2.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2009, 2010 Red Hat, Inc. +/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2009, 2010, 2011 Red Hat, Inc. Written by Jakub Jelinek <jakub@redhat.com>, 2001. This program is free software; you can redistribute it and/or modify @@ -403,8 +403,8 @@ adjust_location_list (DSO *dso, struct cu_data *cu, unsigned char *ptr, break; case DW_OP_implicit_value: { - uint32_t len = read_uleb128 (ptr); - ptr += len; + uint32_t leni = read_uleb128 (ptr); + ptr += leni; } break; case DW_OP_GNU_implicit_pointer: @@ -420,6 +420,20 @@ adjust_location_list (DSO *dso, struct cu_data *cu, unsigned char *ptr, ptr += 4; read_uleb128 (ptr); break; + case DW_OP_GNU_entry_value: + { + uint32_t leni = read_uleb128 (ptr); + if ((end - ptr) < leni) + { + error (0, 0, "%s: DWARF DW_OP_GNU_entry_value with too large" + " length", dso->filename); + return 1; + } + if (adjust_location_list (dso, cu, ptr, leni, start, adjust)) + return 1; + ptr += leni; + } + break; default: error (0, 0, "%s: Unknown DWARF DW_OP_%d", dso->filename, op); return 1; @@ -706,6 +720,10 @@ adjust_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, case DW_AT_associated: case DW_AT_data_location: case DW_AT_byte_stride: + case DW_AT_GNU_call_site_value: + case DW_AT_GNU_call_site_data_value: + case DW_AT_GNU_call_site_target: + case DW_AT_GNU_call_site_target_clobbered: if (adjust_location_list (dso, cu, ptr, len, start, adjust)) return NULL; break; diff --git a/trunk/src/dwarf2.h b/trunk/src/dwarf2.h index 065a0ac..fa92922 100644 --- a/trunk/src/dwarf2.h +++ b/trunk/src/dwarf2.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2002, 2009, 2010 Red Hat, Inc. +/* Copyright (C) 2001, 2002, 2009, 2010, 2011 Red Hat, Inc. Written by Jakub Jelinek <jakub@redhat.com>, 2001. This program is free software; you can redistribute it and/or modify @@ -82,6 +82,11 @@ #define DW_TAG_class_template 0x4103 #define DW_TAG_GNU_BINCL 0x4104 #define DW_TAG_GNU_EINCL 0x4105 +#define DW_TAG_GNU_template_template_param 0x4106 +#define DW_TAG_GNU_template_parameter_pack 0x4107 +#define DW_TAG_GNU_formal_parameter_pack 0x4108 +#define DW_TAG_GNU_call_site 0x4109 +#define DW_TAG_GNU_call_site_parameter 0x410a #define DW_TAG_lo_user 0x4080 #define DW_TAG_hi_user 0xffff @@ -228,6 +233,24 @@ #define DW_AT_src_coords 0x2104 #define DW_AT_body_begin 0x2105 #define DW_AT_body_end 0x2106 +#define DW_AT_GNU_vector 0x2107 +#define DW_AT_GNU_guarded_by 0x2108 +#define DW_AT_GNU_pt_guarded_by 0x2109 +#define DW_AT_GNU_guarded 0x210a +#define DW_AT_GNU_pt_guarded 0x210b +#define DW_AT_GNU_locks_excluded 0x210c +#define DW_AT_GNU_exclusive_locks_required 0x210d +#define DW_AT_GNU_shared_locks_required 0x210e +#define DW_AT_GNU_odr_signature 0x210f +#define DW_AT_GNU_template_name 0x2110 +#define DW_AT_GNU_call_site_value 0x2111 +#define DW_AT_GNU_call_site_data_value 0x2112 +#define DW_AT_GNU_call_site_target 0x2113 +#define DW_AT_GNU_call_site_target_clobbered 0x2114 +#define DW_AT_GNU_tail_call 0x2115 +#define DW_AT_GNU_all_tail_call_sites 0x2116 +#define DW_AT_GNU_all_call_sites 0x2117 +#define DW_AT_GNU_all_source_call_sites 0x2118 #define DW_AT_lo_user 0x2000 #define DW_AT_hi_user 0x3ff0 @@ -389,6 +412,7 @@ #define DW_OP_GNU_uninit 0xf0 #define DW_OP_GNU_encoded_addr 0xf1 #define DW_OP_GNU_implicit_pointer 0xf2 +#define DW_OP_GNU_entry_value 0xf3 #define DW_OP_lo_user 0xe0 #define DW_OP_hi_user 0xff |