diff options
author | Josh Stone <jistone@redhat.com> | 2010-03-25 19:32:46 -0700 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2010-03-25 19:32:46 -0700 |
commit | 9ea68eb97aaf04104b18d5650a6321a4c7d3ad8d (patch) | |
tree | 7a29a0e238a91095297c7b4d75110dc940b07630 | |
parent | 649260f387b644f8cfafe5e992d6c8890c906dd5 (diff) | |
download | systemtap-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.cxx | 7 | ||||
-rw-r--r-- | staptree.h | 3 | ||||
-rw-r--r-- | tapsets.cxx | 58 |
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; } @@ -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; } |