summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2011-03-23 13:31:06 +0100
committerMark Wielaard <mjw@redhat.com>2011-03-23 13:31:06 +0100
commit49c206bdc316e3722012751d66300015e45a1a20 (patch)
treed4dc4db6c775fed3343e60fbe63d04daa105b3de
parent4e606b469ec251f625d2e3f4572e3d2a8ecaa51e (diff)
Add support for low-level dwarflint checks for call_site and entry_value.upstream/mjw/call_site
-rw-r--r--dwarflint/dwarf_gnu.cc11
-rw-r--r--src/dwarf-opcodes.h5
2 files changed, 15 insertions, 1 deletions
diff --git a/dwarflint/dwarf_gnu.cc b/dwarflint/dwarf_gnu.cc
index 6335abb4..b70a6d2d 100644
--- a/dwarflint/dwarf_gnu.cc
+++ b/dwarflint/dwarf_gnu.cc
@@ -69,6 +69,17 @@ namespace
add (const_attribute (DW_AT_GNU_odr_signature));
add (string_attribute (DW_AT_GNU_template_name)); // xxx ???
+
+ // GNU extensions for representation of call sites
+ // http://www.dwarfstd.org/ShowIssue.php?issue=100909.2
+ add (attribute (DW_AT_GNU_call_site_value, cl_exprloc));
+ add (attribute (DW_AT_GNU_call_site_data_value, cl_exprloc));
+ add (attribute (DW_AT_GNU_call_site_target, cl_exprloc));
+ add (attribute (DW_AT_GNU_call_site_target_clobbered, cl_exprloc));
+ add (flag_attribute (DW_AT_GNU_tail_call));
+ add (flag_attribute (DW_AT_GNU_all_tail_call_sites));
+ add (flag_attribute (DW_AT_GNU_all_call_sites));
+ add (flag_attribute (DW_AT_GNU_all_source_call_sites));
}
};
diff --git a/src/dwarf-opcodes.h b/src/dwarf-opcodes.h
index f80deff3..3631bef3 100644
--- a/src/dwarf-opcodes.h
+++ b/src/dwarf-opcodes.h
@@ -206,4 +206,7 @@
DW_OP_0 (DW_OP_stack_value) \
DW_OP_1 (DW_OP_implicit_value, DW_FORM_block) \
/* GNU extensions */ \
- DW_OP_2 (DW_OP_GNU_implicit_pointer, DW_FORM_ref_addr, DW_FORM_sdata)
+ DW_OP_2 (DW_OP_GNU_implicit_pointer, DW_FORM_ref_addr, DW_FORM_sdata) \
+ /* GNU variant for tracking of values passed as arguments to functions. */ \
+ /* http://www.dwarfstd.org/ShowIssue.php?issue=100909.1 */ \
+ DW_OP_1 (DW_OP_GNU_entry_value, DW_FORM_block)