+2011-03-22 Mark Wielaard <mjw@redhat.com>
+
+ * dwarf.h: Add DW_TAG_GNU_call_site,
+ DW_TAG_GNU_call_site_parameter,
+ 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,
+ and DW_OP_GNU_entry_value.
+
2011-03-10 Petr Machata <pmachata@redhat.com>
* libdw/dwarf_tag.c (__libdw_findabbrev): Reject requests for
DW_TAG_GNU_template_template_param = 0x4106,
DW_TAG_GNU_template_parameter_pack = 0x4107,
DW_TAG_GNU_formal_parameter_pack = 0x4108,
+ DW_TAG_GNU_call_site = 0x4109,
+ DW_TAG_GNU_call_site_parameter = 0x410a,
DW_TAG_hi_user = 0xffff
};
DW_AT_GNU_shared_locks_required = 0x210e,
DW_AT_GNU_odr_signature = 0x210f,
DW_AT_GNU_template_name = 0x2110,
+ DW_AT_GNU_call_site_value = 0x2111,
+ DW_AT_GNU_call_site_data_value = 0x2112,
+ DW_AT_GNU_call_site_target = 0x2113,
+ DW_AT_GNU_call_site_target_clobbered = 0x2114,
+ DW_AT_GNU_tail_call = 0x2115,
+ DW_AT_GNU_all_tail_call_sites = 0x2116,
+ DW_AT_GNU_all_call_sites = 0x2117,
+ DW_AT_GNU_all_source_call_sites = 0x2118,
DW_AT_hi_user = 0x3fff
};
DW_OP_GNU_uninit = 0xf0,
DW_OP_GNU_encoded_addr = 0xf1,
DW_OP_GNU_implicit_pointer = 0xf2,
+ DW_OP_GNU_entry_value = 0xf3,
DW_OP_lo_user = 0xe0, /* Implementation-defined range start. */
DW_OP_hi_user = 0xff /* Implementation-defined range end. */
+2011-03-22 Mark Wielaard <mjw@redhat.com>
+
+ * readelf.c (dwarf_tag_string): Support DW_TAG_GNU_call_site
+ and DW_TAG_GNU_call_site_parameter.
+ (dwarf_attr_string): Support 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,
+ and DW_AT_GNU_all_source_call_sites.
+ (print_ops): Handle DW_OP_GNU_entry_value.
+ (attr_callback): 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.
+
2011-03-10 Mark Wielaard <mjw@redhat.com>
* elflint.c (check_symtab): Use ebl_check_st_other_bits.
result = "GNU_formal_parameter_pack";
break;
+ case DW_TAG_GNU_call_site:
+ result = "DW_TAG_GNU_call_site";
+ break;
+
+ case DW_TAG_GNU_call_site_parameter:
+ result = "DW_TAG_GNU_call_site_parameter";
+ break;
+
default:
if (tag < DW_TAG_lo_user)
snprintf (buf, sizeof buf, gettext ("unknown tag %hx"), tag);
result = "GNU_template_name";
break;
+ case DW_AT_GNU_call_site_value:
+ result = "GNU_call_site_value";
+ break;
+
+ case DW_AT_GNU_call_site_data_value:
+ result = "GNU_call_site_data_value";
+ break;
+
+ case DW_AT_GNU_call_site_target:
+ result = "GNU_call_site_target";
+ break;
+
+ case DW_AT_GNU_call_site_target_clobbered:
+ result = "GNU_call_site_target_clobbered";
+ break;
+
+ case DW_AT_GNU_tail_call:
+ result = "GNU_tail_call";
+ break;
+
+ case DW_AT_GNU_all_tail_call_sites:
+ result = "GNU_all_tail_call_sites";
+ break;
+
+ case DW_AT_GNU_all_call_sites:
+ result = "GNU_all_call_sites";
+ break;
+
+ case DW_AT_GNU_all_source_call_sites:
+ result = "GNU_all_source_call_sites";
+ break;
+
default:
if (attrnum < DW_AT_lo_user)
snprintf (buf, sizeof buf, gettext ("unknown attribute %hx"),
[DW_OP_implicit_value] = "implicit_value",
[DW_OP_stack_value] = "stack_value",
[DW_OP_GNU_implicit_pointer] = "GNU_implicit_pointer",
+ [DW_OP_GNU_entry_value] = "GNU_entry_value",
};
if (len == 0)
offset += 1 + (data - start);
break;
+ case DW_OP_GNU_entry_value:
+ /* Size plus expression block. */
+ start = data;
+ NEED (1);
+ get_uleb128 (uleb, data); /* XXX check overrun */
+ printf ("%*s[%4" PRIuMAX "] %s:\n",
+ indent, "", (uintmax_t) offset, known[op]);
+ NEED (uleb);
+ print_ops (dwflmod, dbg, indent + 6, indent + 6, vers,
+ addrsize, offset_size, uleb, data);
+ data += uleb;
+ CONSUME (data - start);
+ offset += 1 + (data - start);
+ break;
+
default:
/* No Operand. */
if (op < sizeof known / sizeof known[0] && known[op] != NULL)
case DW_AT_frame_base:
case DW_AT_return_addr:
case DW_AT_static_link:
+ 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:
notice_listptr (section_loc, &known_loclistptr,
cbargs->addrsize, cbargs->offset_size, num);
if (!cbargs->silent)
case DW_AT_count:
case DW_AT_lower_bound:
case DW_AT_upper_bound:
+ 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:
+ putchar ('\n');
print_ops (cbargs->dwflmod, cbargs->dbg,
12 + level * 2, 12 + level * 2,
cbargs->version, cbargs->addrsize, cbargs->offset_size,