summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2010-03-25 19:32:46 -0700
committerJosh Stone <jistone@redhat.com>2010-03-25 19:32:46 -0700
commit9ea68eb97aaf04104b18d5650a6321a4c7d3ad8d (patch)
tree7a29a0e238a91095297c7b4d75110dc940b07630
parent649260f387b644f8cfafe5e992d6c8890c906dd5 (diff)
downloadsystemtap-steved-9ea68eb97aaf04104b18d5650a6321a4c7d3ad8d.tar.gz
systemtap-steved-9ea68eb97aaf04104b18d5650a6321a4c7d3ad8d.tar.xz
systemtap-steved-9ea68eb97aaf04104b18d5650a6321a4c7d3ad8d.zip
Print probepoint addresses in hex
* staptree.h (literal_number): Add a bool "print_hex". * staptree.cxx (literal_number::print): Switch to hex if needed. * tapsets.cxx (dwarf_derived_probe::dwarf_derived_probe): Write the statement number component with a hex literal_number. (sdt_query::convert_location): Ditto (kprobe_derived_probe::kprobe_derived_probe): Ditto. (hwbkpt_derived_probe::hwbkpt_derived_probe): Ditto for data addr.
-rw-r--r--staptree.cxx7
-rw-r--r--staptree.h3
-rw-r--r--tapsets.cxx58
3 files changed, 38 insertions, 30 deletions
diff --git a/staptree.cxx b/staptree.cxx
index cca79981..643f61b3 100644
--- a/staptree.cxx
+++ b/staptree.cxx
@@ -169,9 +169,10 @@ functiondecl::functiondecl ():
}
-literal_number::literal_number (int64_t v)
+literal_number::literal_number (int64_t v, bool hex)
{
value = v;
+ print_hex = hex;
type = pe_long;
}
@@ -255,7 +256,11 @@ void literal_string::print (ostream& o) const
void literal_number::print (ostream& o) const
{
+ if (print_hex)
+ o << hex << showbase;
o << value;
+ if (print_hex)
+ o << dec << noshowbase;
}
diff --git a/staptree.h b/staptree.h
index 284b4ea1..895c6667 100644
--- a/staptree.h
+++ b/staptree.h
@@ -92,7 +92,8 @@ struct literal_string: public literal
struct literal_number: public literal
{
int64_t value;
- literal_number (int64_t v);
+ bool print_hex;
+ literal_number (int64_t v, bool hex=false);
void print (std::ostream& o) const;
void visit (visitor* u);
};
diff --git a/tapsets.cxx b/tapsets.cxx
index 886c2de5..2e2a3f0f 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -3114,7 +3114,7 @@ dwarf_derived_probe::dwarf_derived_probe(const string& funcname,
retro_addr = q.statement_num_val;
comps.push_back (new probe_point::component
(fn_or_stmt,
- new literal_number(retro_addr))); // XXX: should be hex if possible
+ new literal_number(retro_addr, true)));
if (q.has_absolute)
comps.push_back (new probe_point::component (TOK_ABSOLUTE));
@@ -4205,7 +4205,8 @@ sdt_query::convert_location ()
<< hex << probe_arg << dec << endl;
// process("executable").statement(probe_arg)
derived_loc->components[i] =
- new probe_point::component(TOK_STATEMENT, new literal_number(probe_arg));
+ new probe_point::component(TOK_STATEMENT,
+ new literal_number(probe_arg, true));
break;
case kprobe_type:
@@ -5080,7 +5081,8 @@ kprobe_derived_probe::kprobe_derived_probe (probe *base,
if (has_statement)
{
- comps.push_back (new probe_point::component(TOK_STATEMENT, new literal_number(addr)));
+ comps.push_back (new probe_point::component(TOK_STATEMENT,
+ new literal_number(addr, true)));
comps.push_back (new probe_point::component(TOK_ABSOLUTE));
}
else
@@ -5531,14 +5533,14 @@ public:
};
hwbkpt_derived_probe::hwbkpt_derived_probe (probe *base,
- probe_point *location,
- uint64_t addr,
- string symname,
- unsigned int len,
- bool has_only_read_access,
- bool has_only_write_access,
- bool has_rw_access
- ):
+ probe_point *location,
+ uint64_t addr,
+ string symname,
+ unsigned int len,
+ bool has_only_read_access,
+ bool has_only_write_access,
+ bool has_rw_access
+ ):
derived_probe (base, location),
hwbkpt_addr (addr),
symbol_name (symname),
@@ -5550,30 +5552,30 @@ hwbkpt_derived_probe::hwbkpt_derived_probe (probe *base,
comps.push_back (new probe_point::component(TOK_KERNEL));
if (hwbkpt_addr)
- comps.push_back (new probe_point::component (TOK_HWBKPT, new literal_number(hwbkpt_addr)));
- else
- if (symbol_name.size())
- comps.push_back (new probe_point::component (TOK_HWBKPT, new literal_string(symbol_name)));
+ comps.push_back (new probe_point::component (TOK_HWBKPT,
+ new literal_number(hwbkpt_addr, true)));
+ else if (symbol_name.size())
+ comps.push_back (new probe_point::component (TOK_HWBKPT, new literal_string(symbol_name)));
comps.push_back (new probe_point::component (TOK_LENGTH, new literal_number(hwbkpt_len)));
if (has_only_read_access)
- this->hwbkpt_access = HWBKPT_READ ;
+ this->hwbkpt_access = HWBKPT_READ ;
//TODO add code for comps.push_back for read, since this flag is not for x86
else
- {
- if (has_only_write_access)
- {
- this->hwbkpt_access = HWBKPT_WRITE ;
- comps.push_back (new probe_point::component(TOK_HWBKPT_WRITE));
- }
- else
- {
- this->hwbkpt_access = HWBKPT_RW ;
- comps.push_back (new probe_point::component(TOK_HWBKPT_RW));
- }
- }
+ {
+ if (has_only_write_access)
+ {
+ this->hwbkpt_access = HWBKPT_WRITE ;
+ comps.push_back (new probe_point::component(TOK_HWBKPT_WRITE));
+ }
+ else
+ {
+ this->hwbkpt_access = HWBKPT_RW ;
+ comps.push_back (new probe_point::component(TOK_HWBKPT_RW));
+ }
+ }
this->sole_location()->components = comps;
}