aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjakub <jakub@94c539fb-cf18-0410-b60f-edeeb537fa16>2011-04-01 10:29:23 +0000
committerjakub <jakub@94c539fb-cf18-0410-b60f-edeeb537fa16>2011-04-01 10:29:23 +0000
commit785123199ff0848a16fe3192a655012a30f9d1b4 (patch)
tree99417f0d0b07a06c21cd99547bcd7bc65f2a5d0e
parenta8adbc196dcd9d1404833ba1a5d94d3e30355217 (diff)
downloadprelink-cross-785123199ff0848a16fe3192a655012a30f9d1b4.tar.gz
prelink-cross-785123199ff0848a16fe3192a655012a30f9d1b4.tar.bz2
prelink-cross-785123199ff0848a16fe3192a655012a30f9d1b4.zip
* 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. git-svn-id: http://sourceware.org/svn/prelink@188 94c539fb-cf18-0410-b60f-edeeb537fa16
-rw-r--r--trunk/ChangeLog19
-rw-r--r--trunk/src/dwarf2.c24
-rw-r--r--trunk/src/dwarf2.h26
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