From 559f110ef15574947e2729232c8f844719a12078 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 8 May 2007 21:28:07 +0000 Subject: oprofile: Improve xml_callgraph patch, refresh patches git-svn-id: https://svn.o-hand.com/repos/poky/trunk@1615 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- .../oprofile/oprofile/oparchive-debug-dir.patch | 6 +- .../oprofile/oprofile/oparchive-list-files.patch | 22 +- .../packages/oprofile/oprofile/oprofile_eabi.patch | 4 +- .../packages/oprofile/oprofile/xml_callgraph.patch | 261 +++++++++------------ meta/packages/oprofile/oprofileui-svn.inc | 2 + 5 files changed, 123 insertions(+), 172 deletions(-) diff --git a/meta/packages/oprofile/oprofile/oparchive-debug-dir.patch b/meta/packages/oprofile/oprofile/oparchive-debug-dir.patch index b87cd6422e..43a4bbd8c7 100644 --- a/meta/packages/oprofile/oprofile/oparchive-debug-dir.patch +++ b/meta/packages/oprofile/oprofile/oparchive-debug-dir.patch @@ -1,8 +1,8 @@ Index: oprofile/pp/oparchive.cpp =================================================================== ---- oprofile.orig/pp/oparchive.cpp 2007-01-17 15:55:12.000000000 +0000 -+++ oprofile/pp/oparchive.cpp 2007-01-17 15:55:39.000000000 +0000 -@@ -97,8 +97,17 @@ +--- oprofile.orig/pp/oparchive.cpp ++++ oprofile/pp/oparchive.cpp +@@ -97,8 +97,17 @@ int oparchive(options::spec const & spec if (find_separate_debug_file(ibfd, dirname, global, debug_filename)) { /* found something copy it over */ diff --git a/meta/packages/oprofile/oprofile/oparchive-list-files.patch b/meta/packages/oprofile/oprofile/oparchive-list-files.patch index fc8a6271b3..93cf3cdb8d 100644 --- a/meta/packages/oprofile/oprofile/oparchive-list-files.patch +++ b/meta/packages/oprofile/oprofile/oparchive-list-files.patch @@ -1,8 +1,8 @@ Index: oprofile/pp/oparchive.cpp =================================================================== ---- oprofile.orig/pp/oparchive.cpp 2007-01-22 12:23:51.000000000 +0000 -+++ oprofile/pp/oparchive.cpp 2007-01-22 12:23:56.000000000 +0000 -@@ -35,6 +35,11 @@ +--- oprofile.orig/pp/oparchive.cpp ++++ oprofile/pp/oparchive.cpp +@@ -35,6 +35,11 @@ namespace { void copy_one_file(image_error err, string const & source, string const & dest) { @@ -16,9 +16,9 @@ Index: oprofile/pp/oparchive.cpp << " cause: " << strerror(errno) << endl; Index: oprofile/pp/oparchive_options.cpp =================================================================== ---- oprofile.orig/pp/oparchive_options.cpp 2007-01-22 12:22:44.000000000 +0000 -+++ oprofile/pp/oparchive_options.cpp 2007-01-22 12:23:03.000000000 +0000 -@@ -36,6 +36,7 @@ +--- oprofile.orig/pp/oparchive_options.cpp ++++ oprofile/pp/oparchive_options.cpp +@@ -36,6 +36,7 @@ namespace options { bool exclude_dependent; merge_option merge_by; string outdirectory; @@ -26,7 +26,7 @@ Index: oprofile/pp/oparchive_options.cpp } -@@ -47,7 +48,9 @@ +@@ -47,7 +48,9 @@ popt::option options_array[] = { popt::option(options::outdirectory, "output-directory", 'o', "output to the given directory", "directory"), popt::option(options::exclude_dependent, "exclude-dependent", 'x', @@ -37,7 +37,7 @@ Index: oprofile/pp/oparchive_options.cpp }; -@@ -60,7 +63,7 @@ +@@ -60,7 +63,7 @@ void check_options() using namespace options; /* output directory is required */ @@ -48,9 +48,9 @@ Index: oprofile/pp/oparchive_options.cpp } Index: oprofile/pp/oparchive_options.h =================================================================== ---- oprofile.orig/pp/oparchive_options.h 2007-01-22 12:23:14.000000000 +0000 -+++ oprofile/pp/oparchive_options.h 2007-01-22 12:23:30.000000000 +0000 -@@ -22,6 +22,7 @@ +--- oprofile.orig/pp/oparchive_options.h ++++ oprofile/pp/oparchive_options.h +@@ -22,6 +22,7 @@ namespace options { extern bool exclude_dependent; extern merge_option merge_by; extern std::string outdirectory; diff --git a/meta/packages/oprofile/oprofile/oprofile_eabi.patch b/meta/packages/oprofile/oprofile/oprofile_eabi.patch index b360cbeaa6..7388deef3e 100644 --- a/meta/packages/oprofile/oprofile/oprofile_eabi.patch +++ b/meta/packages/oprofile/oprofile/oprofile_eabi.patch @@ -4,8 +4,8 @@ Index: oprofile/daemon/opd_cookie.c =================================================================== ---- oprofile.orig/daemon/opd_cookie.c 2005-10-19 00:28:26.000000000 +0100 -+++ oprofile/daemon/opd_cookie.c 2007-01-09 15:12:49.000000000 +0000 +--- oprofile.orig/daemon/opd_cookie.c ++++ oprofile/daemon/opd_cookie.c @@ -68,7 +68,8 @@ static inline int lookup_dcookie(cookie_ return syscall(__NR_lookup_dcookie, (unsigned long)(cookie >> 32), (unsigned long)(cookie & 0xffffffff), buf, size); diff --git a/meta/packages/oprofile/oprofile/xml_callgraph.patch b/meta/packages/oprofile/oprofile/xml_callgraph.patch index 337706f72d..1ffe6f69b2 100644 --- a/meta/packages/oprofile/oprofile/xml_callgraph.patch +++ b/meta/packages/oprofile/oprofile/xml_callgraph.patch @@ -15,9 +15,9 @@ Index: oprofile/libpp/callgraph_container.cpp =================================================================== ---- oprofile.orig/libpp/callgraph_container.cpp 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libpp/callgraph_container.cpp 2007-02-22 18:19:12.000000000 +0000 -@@ -379,17 +379,19 @@ process(count_array_t total, double thre +--- oprofile.orig/libpp/callgraph_container.cpp ++++ oprofile/libpp/callgraph_container.cpp +@@ -379,12 +379,15 @@ process(count_array_t total, double thre process_children(sym, threshold); @@ -35,12 +35,7 @@ Index: oprofile/libpp/callgraph_container.cpp { return cg_syms; } - -- - void callgraph_container::populate(string const & archive_path, - list const & iprofiles, - extra_images const & extra, bool debug_info, double threshold, -@@ -580,12 +582,14 @@ column_flags callgraph_container::output +@@ -580,12 +583,14 @@ column_flags callgraph_container::output column_flags output_hints = cf_none; // FIXME: costly: must we access directly recorder map ? @@ -60,7 +55,7 @@ Index: oprofile/libpp/callgraph_container.cpp return output_hints; } -@@ -597,7 +601,7 @@ count_array_t callgraph_container::sampl +@@ -597,7 +602,7 @@ count_array_t callgraph_container::sampl } @@ -71,8 +66,8 @@ Index: oprofile/libpp/callgraph_container.cpp } Index: oprofile/libpp/callgraph_container.h =================================================================== ---- oprofile.orig/libpp/callgraph_container.h 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libpp/callgraph_container.h 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/libpp/callgraph_container.h ++++ oprofile/libpp/callgraph_container.h @@ -53,7 +53,7 @@ public: count_array_t const & arc_count); @@ -103,8 +98,8 @@ Index: oprofile/libpp/callgraph_container.h /** Index: oprofile/libpp/format_output.cpp =================================================================== ---- oprofile.orig/libpp/format_output.cpp 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libpp/format_output.cpp 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/libpp/format_output.cpp ++++ oprofile/libpp/format_output.cpp @@ -489,7 +489,7 @@ cg_formatter::cg_formatter(callgraph_con } @@ -255,7 +250,7 @@ Index: oprofile/libpp/format_output.cpp // output symbol's summary data for each profile class bool got_samples = false; -@@ -750,27 +768,21 @@ output_symbol(ostream & out, +@@ -752,27 +770,21 @@ output_symbol(ostream & out, string const image = get_image_name(symb->image_name, true); string const qname = image + ":" + name; @@ -287,7 +282,7 @@ Index: oprofile/libpp/format_output.cpp details << detail_str; } -@@ -826,5 +838,176 @@ output_attribute(ostream & out, field_da +@@ -828,5 +840,131 @@ output_attribute(ostream & out, field_da } } @@ -311,7 +306,65 @@ Index: oprofile/libpp/format_output.cpp +} + +void xml_cg_formatter:: -+output_symbol_core(ostream & out, ++output_symbol_core(ostream & out, cg_symbol::children const cg_symb, ++ string const selfname, string const qname, ++ size_t lo, size_t hi, bool is_module, tag_t tag) ++{ ++ ++ cg_symbol::children::const_iterator cit; ++ cg_symbol::children::const_iterator cend = cg_symb.end(); ++ ++ for (cit = cg_symb.begin(); cit != cend; ++cit) { ++ string binary = get_image_name((cit)->app_name, true); ++ string module = get_image_name((cit)->image_name, true); ++ bool got_samples = false, self = false; ++ ostringstream str; ++ size_t indx; ++ ++ for (size_t p = lo; p <= hi; ++p) ++ got_samples |= xml_support->output_summary_data(str, cit->sample.counts, p); ++ ++ if (!got_samples) ++ continue; ++ ++ cverb << vxml << " " << endl; ++ ++ if (is_module) { ++ out << open_element(MODULE, true); ++ out << init_attr(NAME, module) << close_element(NONE, true); ++ } ++ ++ out << open_element(SYMBOL, true); ++ ++ string const symname = symbol_names.name(cit->name); ++ assert(symname.size() > 0); ++ ++ string const symqname = module + ":" + symname; ++ ++ // Find any self references and handle ++ if ((symname == selfname) && (tag == CALLEES)) { ++ self = true; ++ indx = xml_get_symbol_index(qname); ++ } else ++ indx = xml_get_symbol_index(symqname); ++ ++ out << init_attr(ID_REF, indx); ++ ++ if (self) ++ out << init_attr(SELFREF, "true"); ++ ++ out << close_element(NONE, true); ++ out << str.str(); ++ out << close_element(SYMBOL); ++ ++ if (is_module) ++ out << close_element(MODULE); ++ } ++} ++ ++ ++void xml_cg_formatter:: ++output_symbol(ostream & out, + symbol_entry const * symb, size_t lo, size_t hi, bool is_module) +{ + cg_symbol const * cg_symb = dynamic_cast(symb); @@ -345,129 +398,26 @@ Index: oprofile/libpp/format_output.cpp + out << close_element(NONE, true); + + out << open_element(CALLERS); -+ if (cg_symb) { -+ cg_symbol::children::const_iterator cit; -+ cg_symbol::children::const_iterator cend = cg_symb->callers.end(); -+ -+ for (cit = cg_symb->callers.begin(); cit != cend; ++cit) { -+ ostringstream str1; -+ string binary = get_image_name((cit)->app_name, true); -+ string module = get_image_name((cit)->image_name, true); -+ -+ -+ got_samples = false; -+ -+ for (size_t p = lo; p <= hi; ++p) { -+ got_samples |= xml_support->output_summary_data(str1, cit->sample.counts, p); -+ } -+ -+ if (!got_samples) -+ continue; -+ -+ cverb << vxml << " " << endl; -+ -+ if (is_module) { -+ out << open_element(MODULE, true); -+ out << init_attr(NAME, module) << close_element(NONE, true); -+ } -+ -+ out << open_element(SYMBOL, true); -+ -+ string const name1 = symbol_names.name(cit->name); -+ assert(name1.size() > 0); -+ -+ string const qname1 = module + ":" + name1; -+ -+ out << init_attr(ID_REF, xml_get_symbol_index(qname1)); -+ -+ out << close_element(NONE, true); -+ -+ out << str1.str(); -+ -+ out << close_element(SYMBOL); -+ -+ if (is_module) -+ out << close_element(MODULE); -+ } -+ } ++ if (cg_symb) ++ output_symbol_core(out, cg_symb->callers, selfname, qname, lo, hi, is_module, CALLERS); + out << close_element(CALLERS); + + out << open_element(CALLEES); -+ if (cg_symb) { -+ cg_symbol::children::const_iterator cit; -+ cg_symbol::children::const_iterator cend = cg_symb->callees.end(); -+ -+ for (cit = cg_symb->callees.begin(); cit != cend; ++cit) { -+ size_t indx; -+ ostringstream str1; -+ string binary = get_image_name((cit)->app_name, true); -+ string module = get_image_name((cit)->image_name, true); -+ bool self = false; -+ -+ got_samples = false; -+ -+ for (size_t p = lo; p <= hi; ++p) { -+ got_samples |= xml_support->output_summary_data(str1, cit->sample.counts, p); -+ } -+ -+ if (!got_samples) -+ continue; -+ -+ cverb << vxml << " " << endl; -+ -+ if (is_module) { -+ out << open_element(MODULE, true); -+ out << init_attr(NAME, module) << close_element(NONE, true); -+ } -+ -+ out << open_element(SYMBOL, true); -+ -+ string name1 = symbol_names.name(cit->name); -+ assert(name1.size() > 0); -+ string const qname1 = module + ":" + name1; -+ -+ /* Find any self references and handle */ -+ if (name1 == selfname) { -+ self = true; -+ indx = xml_get_symbol_index(qname); -+ } else -+ indx = xml_get_symbol_index(qname1); -+ -+ out << init_attr(ID_REF, indx); -+ -+ if (self) -+ out << init_attr(SELFREF, "true"); -+ -+ out << close_element(NONE, true); -+ -+ out << str1.str(); -+ -+ out << close_element(SYMBOL); ++ if (cg_symb) ++ output_symbol_core(out, cg_symb->callees, selfname, qname, lo, hi, is_module, CALLEES); + -+ if (is_module) -+ out << close_element(MODULE); -+ } -+ } + out << close_element(CALLEES); + + // output summary + out << str.str(); + out << close_element(SYMBOL); -+} -+ -+ -+void xml_cg_formatter:: -+output_symbol(ostream & out, -+ symbol_entry const * symb, size_t lo, size_t hi, bool is_module) -+{ -+ output_symbol_core(out, symb, lo, hi, is_module); +} } // namespace format_output Index: oprofile/libpp/format_output.h =================================================================== ---- oprofile.orig/libpp/format_output.h 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libpp/format_output.h 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/libpp/format_output.h ++++ oprofile/libpp/format_output.h @@ -201,7 +201,7 @@ public: /** output callgraph information according to the previously format @@ -523,7 +473,7 @@ Index: oprofile/libpp/format_output.h // count of DetailData items output so far size_t detail_count; -@@ -270,6 +270,29 @@ private: +@@ -270,6 +270,30 @@ private: format_flags fl, tag_t tag); }; @@ -546,18 +496,19 @@ Index: oprofile/libpp/format_output.h + /// container we work from + callgraph_container const * callgraph; + -+ void output_symbol_core(std::ostream & out, -+ symbol_entry const * symb, size_t lo, size_t hi, -+ bool is_module); ++ void output_symbol_core(std::ostream & out, ++ cg_symbol::children const cg_symb, ++ std::string const selfname, std::string const qname, ++ size_t lo, size_t hi, bool is_module, tag_t tag); +}; } // namespace format_output Index: oprofile/libpp/symbol.h =================================================================== ---- oprofile.orig/libpp/symbol.h 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libpp/symbol.h 2007-02-22 18:19:12.000000000 +0000 -@@ -55,8 +55,11 @@ struct sample_entry { +--- oprofile.orig/libpp/symbol.h ++++ oprofile/libpp/symbol.h +@@ -56,8 +56,11 @@ struct sample_entry { /// associate a symbol with a file location, samples count and vma address @@ -570,7 +521,7 @@ Index: oprofile/libpp/symbol.h /// which image this symbol belongs to image_name_id image_name; /// owning application name: identical to image name if profiling -@@ -92,7 +95,8 @@ typedef std::vector children; -@@ -108,9 +112,12 @@ struct cg_symbol : public symbol_entry { +@@ -109,10 +113,8 @@ struct cg_symbol : public symbol_entry { count_array_t total_callee_count; }; -+/// a collection of sorted callgraph symbols (the objects themselves) -+typedef std::vector cg_collection_objs; - +- -/// a collection of sorted callgraph symbols -typedef std::vector cg_collection; -+ -+/// a collection of sorted callgraph symbols (pointers too, compatible with symbol_collection) -+//typedef std::vector cg_collection; - +- ++/// a collection of sorted callgraph symbol objects ++typedef std::vector cg_collection_objs; /// for storing diff %ages + typedef growable_vector diff_array_t; Index: oprofile/libpp/symbol_sort.cpp =================================================================== ---- oprofile.orig/libpp/symbol_sort.cpp 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libpp/symbol_sort.cpp 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/libpp/symbol_sort.cpp ++++ oprofile/libpp/symbol_sort.cpp @@ -146,23 +146,6 @@ sort(symbol_collection & syms, bool reve @@ -625,8 +574,8 @@ Index: oprofile/libpp/symbol_sort.cpp long_filenames = lf; Index: oprofile/libpp/symbol_sort.h =================================================================== ---- oprofile.orig/libpp/symbol_sort.h 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libpp/symbol_sort.h 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/libpp/symbol_sort.h ++++ oprofile/libpp/symbol_sort.h @@ -44,12 +44,6 @@ struct sort_options { /** * Sort the given container by the given criteria. @@ -642,8 +591,8 @@ Index: oprofile/libpp/symbol_sort.h Index: oprofile/libpp/xml_utils.cpp =================================================================== ---- oprofile.orig/libpp/xml_utils.cpp 2007-02-22 18:19:12.000000000 +0000 -+++ oprofile/libpp/xml_utils.cpp 2007-02-22 18:24:58.000000000 +0000 +--- oprofile.orig/libpp/xml_utils.cpp ++++ oprofile/libpp/xml_utils.cpp @@ -268,13 +268,6 @@ void xml_utils::output_xml_header(string cout << close_element(SETUP) << endl; } @@ -703,8 +652,8 @@ Index: oprofile/libpp/xml_utils.cpp Index: oprofile/libutil++/xml_output.cpp =================================================================== ---- oprofile.orig/libutil++/xml_output.cpp 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libutil++/xml_output.cpp 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/libutil++/xml_output.cpp ++++ oprofile/libutil++/xml_output.cpp @@ -47,8 +47,11 @@ string const xml_tag_map[] = { "binary", "module", @@ -719,8 +668,8 @@ Index: oprofile/libutil++/xml_output.cpp "symboltable", Index: oprofile/libutil++/xml_output.h =================================================================== ---- oprofile.orig/libutil++/xml_output.h 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/libutil++/xml_output.h 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/libutil++/xml_output.h ++++ oprofile/libutil++/xml_output.h @@ -28,7 +28,8 @@ typedef enum { THREAD, THREAD_ID, BINARY, @@ -733,8 +682,8 @@ Index: oprofile/libutil++/xml_output.h SOURCE_FILE, SOURCE_LINE, CODE_LENGTH, Index: oprofile/pp/opreport.cpp =================================================================== ---- oprofile.orig/pp/opreport.cpp 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/pp/opreport.cpp 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/pp/opreport.cpp ++++ oprofile/pp/opreport.cpp @@ -378,7 +378,7 @@ void output_symbols(profile_container co format_output::opreport_formatter * text_out = 0; @@ -801,8 +750,8 @@ Index: oprofile/pp/opreport.cpp Index: oprofile/pp/opreport_options.cpp =================================================================== ---- oprofile.orig/pp/opreport_options.cpp 2007-02-22 18:19:11.000000000 +0000 -+++ oprofile/pp/opreport_options.cpp 2007-02-22 18:19:12.000000000 +0000 +--- oprofile.orig/pp/opreport_options.cpp ++++ oprofile/pp/opreport_options.cpp @@ -177,11 +177,6 @@ void check_options(bool diff) } diff --git a/meta/packages/oprofile/oprofileui-svn.inc b/meta/packages/oprofile/oprofileui-svn.inc index 78b9431cf5..42baaa0858 100644 --- a/meta/packages/oprofile/oprofileui-svn.inc +++ b/meta/packages/oprofile/oprofileui-svn.inc @@ -1,6 +1,8 @@ require oprofileui.inc PV = "0.0+svn${SRCDATE}" +PR = "r1" + S = "${WORKDIR}/trunk" SRC_URI = "svn://svn.o-hand.com/repos/oprofileui;module=trunk;proto=http" -- cgit v1.2.3