|
View:
New views
20 Messages
—
Rating Filter:
Alert me
|
| < Prev | 1 - 2 | Next > |
|
|
[PATCH 0/10] oprofile fixes and updatesThis patch series contains fixes and updates I still have in my
oprofile userland patch queue. I posted some of them already some months ago. There are mostly reworks of opcontrol, some changes to make binary package creation and testing easier and some xml stuff. I find all of them useful, the patches are necessary for my regression. I think they are useful for others too. -Robert ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 01/10] opcontrol: fix vecho outputThere are unreachable vecho commands in the code that are never
executed since the options are parsed later. I added --verbose to check_options_early(). Additional I removed the check that allows the use of the --verbose option only for the --start or --start-daemon. Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 4 ++++ utils/opcontrol | 28 ++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5c77afb..ce81dc7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2009-08-11 Robert Richter <robert.richter@...> + + * utils/opcontrol: fix vecho output + 2009-07-31 Maynard Johnson <maynardj@...> * configure.in: bump version in AM_INIT_AUTOMAKE to 0.9.6cvs diff --git a/utils/opcontrol b/utils/opcontrol index 41c8f0e..fbea34d 100644 --- a/utils/opcontrol +++ b/utils/opcontrol @@ -291,7 +291,6 @@ do_init() NOTE_SIZE=0 VMLINUX= XENIMAGE="none" - VERBOSE="" SEPARATE_LIB=0 SEPARATE_KERNEL=0 SEPARATE_THREAD=0 @@ -839,20 +838,16 @@ do_options() DO_SETUP=yes ;; - -V|--verbose) - if test -z "$val"; then - VERBOSE="all" - else - VERBOSE=$val - fi - ;; - -l|--list-events) EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` EXCLUSIVE_ARGV="$arg" exec $OPHELP ;; + # ignore early option + -V|--verbose) + ;; + *) echo "Unknown option \"$arg\". See opcontrol --help" >&2 exit 1 @@ -874,13 +869,6 @@ do_options() exit 1 fi - if test -n "$VERBOSE"; then - if test "$START" != "yes" -a "$START_DAEMON" != "yes"; then - echo "Option --verbose may only be used with --start or --start-daemon" >&2 - exit 1 - fi - fi - if test "$DO_SETUP" = "yes"; then SETUP="$DO_SETUP" fi @@ -1756,6 +1744,7 @@ check_options_early() { OPHELP="$OPDIR/ophelp" + VERBOSE="" for i in $@; do # added to handle arg=val parameters @@ -1772,6 +1761,13 @@ check_options_early() $OPHELP --version | cut -d' ' -f2- exit 0 ;; + -V|--verbose) + if test -z "$val"; then + VERBOSE="all" + else + VERBOSE=$val + fi + ;; --session-dir) error_if_empty $arg $val SESSION_DIR="$val" -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 02/10] opcontrol: fix parameter dumpThe parameter dump was located in do_init(). Values were printed as
read from the setup file. Parameters that have been updated with a setup option were wrong. This patch fixes this. Now, parameters are also dumped if there are no options specified for --setup. Thus, parameters stored in the setup file can be dumped using 'opcontrol --setup --verbose'. Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 4 ++++ utils/opcontrol | 10 ++++++++++ 2 files changed, 14 insertions(+), 0 deletions(-) diff --git a/ChangeLog b/ChangeLog index ce81dc7..10c54cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix parameter dump + +2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix vecho output 2009-07-31 Maynard Johnson <maynardj@...> diff --git a/utils/opcontrol b/utils/opcontrol index fbea34d..fc92ac7 100644 --- a/utils/opcontrol +++ b/utils/opcontrol @@ -404,6 +404,8 @@ do_save_setup() if test "$XEN_RANGE"; then echo "XEN_RANGE=$XEN_RANGE" >> $SETUP_FILE fi + + dump_parameters; } @@ -865,6 +867,10 @@ do_options() fi if test "$SETUP" = "yes" -a "$DO_SETUP" != "yes"; then + if test -n "$VERBOSE"; then + dump_parameters + exit 0 + fi echo "No options specified for --setup." >&2 exit 1 fi @@ -879,7 +885,10 @@ do_options() exit 1 fi fi +} +dump_parameters() +{ vecho "Parameters used:" vecho "SESSION_DIR $SESSION_DIR" vecho "LOCK_FILE $LOCK_FILE" @@ -1424,6 +1433,7 @@ do_start_daemon() fi fi + dump_parameters do_setup check_valid_args get_image_range "linux" -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 03/10] opcontrol: fix help messageOutput was broken due to unquoted double quotes.
Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 4 ++++ utils/opcontrol | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 10c54cb..0da5c8d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix help message + +2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix parameter dump 2009-08-11 Robert Richter <robert.richter@...> diff --git a/utils/opcontrol b/utils/opcontrol index fc92ac7..f1da6dc 100644 --- a/utils/opcontrol +++ b/utils/opcontrol @@ -106,7 +106,8 @@ is_tool_available() # print help message do_help() { - echo "opcontrol: usage: + cat >&2 <<EOF +opcontrol: usage: -l/--list-events list event types and unit masks -?/--help this message -v/--version show version @@ -162,7 +163,7 @@ do_help() --xen Xen image (for Xen only) --active-domains=<list> List of domains in profiling session (for Xen only) (list contains domain ids separated by commas) -" >&2 +EOF } -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 04/10] opcontrol: fix deinit, kill daemon only if runningWhen using option --deinit the functions do_stop() and do_kill_daemon()
are only called, if the daemon is running. This prevents the irritating message 'Daemon not running' for an init/deinit sequence. Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 4 ++++ utils/opcontrol | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0da5c8d..e0adc98 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix deinit, kill daemon only if running + +2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix help message 2009-08-11 Robert Richter <robert.richter@...> diff --git a/utils/opcontrol b/utils/opcontrol index f1da6dc..5a4e948 100644 --- a/utils/opcontrol +++ b/utils/opcontrol @@ -729,8 +729,10 @@ do_options() --deinit) DUMP=yes - STOP=yes - KILL_DAEMON=yes + test ! -f "$LOCK_FILE" || { + STOP=yes + KILL_DAEMON=yes + } DEINIT=yes EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` EXCLUSIVE_ARGV="$arg" -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 05/10] opcontrol: fix, stop only if enabledNow, the functions do_stop() is only called, if the daemon is
enabled. This prevents the irritating message 'Stopping profiling.' if the profiler is not running. Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 4 ++++ utils/opcontrol | 3 ++- 2 files changed, 6 insertions(+), 1 deletions(-) diff --git a/ChangeLog b/ChangeLog index e0adc98..5c32677 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix, stop only if enabled + +2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix deinit, kill daemon only if running 2009-08-11 Robert Richter <robert.richter@...> diff --git a/utils/opcontrol b/utils/opcontrol index 5a4e948..6d1bfc0 100644 --- a/utils/opcontrol +++ b/utils/opcontrol @@ -943,7 +943,8 @@ do_stop() return fi - if test $KERNEL_SUPPORT = "yes"; then + if test $KERNEL_SUPPORT = "yes" \ + && test 0 != $(cat /dev/oprofile/enable); then echo "Stopping profiling." echo 0 >/dev/oprofile/enable fi -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 06/10] opreport: fix buffer overflows in xml generatorWhen running opreport for heavy loads I got some data that was
producing large xml tags causing a buffer overflow. Looking at the code this behaviour was clear. The function interface is broken by design: -static void xml_do_arch_specific_event_help(struct op_event const * event, - char * buffer) +static void xml_do_arch_specific_event_help(struct op_event const *event, + char *buffer, size_t size) It requires a buffer to write to, but does not provide the size of this buffer. Thus it is not possible to avoid buffer overflows since the size of xml tags may vary and depends on the input data. This patch fixes this. Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 7 ++ libop/op_xml_events.c | 65 ++++++++------- libop/op_xml_out.c | 197 +++++++++++++++++++++++++++------------------- libop/op_xml_out.h | 10 +- libutil++/xml_output.cpp | 18 ++--- 5 files changed, 169 insertions(+), 128 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5c32677..ac4736d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2009-08-11 Robert Richter <robert.richter@...> + * libop/op_xml_events.c: + * libop/op_xml_out.c: + * libop/op_xml_out.h: + * libutil++/xml_output.cpp: fix buffer overflows in xml generator + +2009-08-11 Robert Richter <robert.richter@...> + * utils/opcontrol: fix, stop only if enabled 2009-08-11 Robert Richter <robert.richter@...> diff --git a/libop/op_xml_events.c b/libop/op_xml_events.c index 5b9ac7d..63f21d2 100644 --- a/libop/op_xml_events.c +++ b/libop/op_xml_events.c @@ -17,37 +17,37 @@ static op_cpu cpu_type; #define MAX_BUFFER 4096 +static char buffer[MAX_BUFFER]; + void open_xml_events(char const * title, char const * doc, op_cpu the_cpu_type) { char const * schema_version = "1.0"; - char buffer[MAX_BUFFER]; buffer[0] = '\0'; cpu_type = the_cpu_type; - open_xml_element(HELP_EVENTS, 0, buffer); - open_xml_element(HELP_HEADER, 1, buffer); - init_xml_str_attr(HELP_TITLE, title, buffer); - init_xml_str_attr(SCHEMA_VERSION, schema_version, buffer); - init_xml_str_attr(HELP_DOC, doc, buffer); - close_xml_element(NONE, 0, buffer); + open_xml_element(HELP_EVENTS, 0, buffer, MAX_BUFFER); + open_xml_element(HELP_HEADER, 1, buffer, MAX_BUFFER); + init_xml_str_attr(HELP_TITLE, title, buffer, MAX_BUFFER); + init_xml_str_attr(SCHEMA_VERSION, schema_version, buffer, MAX_BUFFER); + init_xml_str_attr(HELP_DOC, doc, buffer, MAX_BUFFER); + close_xml_element(NONE, 0, buffer, MAX_BUFFER); printf("%s", buffer); } void close_xml_events(void) { - char buffer[MAX_BUFFER]; - buffer[0] = '\0'; - close_xml_element(HELP_EVENTS, 0, buffer); + close_xml_element(HELP_EVENTS, 0, buffer, MAX_BUFFER); printf("%s", buffer); } -static void xml_do_arch_specific_event_help(struct op_event const * event, - char * buffer) +static void xml_do_arch_specific_event_help(struct op_event const *event, + char *buffer, size_t size) { switch (cpu_type) { case CPU_PPC64_CELL: - init_xml_int_attr(HELP_EVENT_GROUP, event->val / 100, buffer); + init_xml_int_attr(HELP_EVENT_GROUP, event->val / 100, buffer, + size); break; default: break; @@ -60,34 +60,39 @@ void xml_help_for_event(struct op_event const * event) uint i; int nr_counters; int has_nested = strcmp(event->unit->name, "zero"); - char buffer[MAX_BUFFER]; buffer[0] = '\0'; - open_xml_element(HELP_EVENT, 1, buffer); - init_xml_str_attr(HELP_EVENT_NAME, event->name, buffer); - xml_do_arch_specific_event_help(event, buffer); - init_xml_str_attr(HELP_EVENT_DESC, event->desc, buffer); + open_xml_element(HELP_EVENT, 1, buffer, MAX_BUFFER); + init_xml_str_attr(HELP_EVENT_NAME, event->name, buffer, MAX_BUFFER); + xml_do_arch_specific_event_help(event, buffer, MAX_BUFFER); + init_xml_str_attr(HELP_EVENT_DESC, event->desc, buffer, MAX_BUFFER); nr_counters = op_get_nr_counters(cpu_type); - init_xml_int_attr(HELP_COUNTER_MASK, event->counter_mask, buffer); - init_xml_int_attr(HELP_MIN_COUNT, event->min_count, buffer); + init_xml_int_attr(HELP_COUNTER_MASK, event->counter_mask, buffer, + MAX_BUFFER); + init_xml_int_attr(HELP_MIN_COUNT, event->min_count, + buffer, MAX_BUFFER); if (has_nested) { - close_xml_element(NONE, 1, buffer); - open_xml_element(HELP_UNIT_MASKS, 1, buffer); - init_xml_int_attr(HELP_DEFAULT_MASK, event->unit->default_mask, buffer); - close_xml_element(NONE, 1, buffer); + close_xml_element(NONE, 1, buffer, MAX_BUFFER); + open_xml_element(HELP_UNIT_MASKS, 1, buffer, MAX_BUFFER); + init_xml_int_attr(HELP_DEFAULT_MASK, event->unit->default_mask, + buffer, MAX_BUFFER); + close_xml_element(NONE, 1, buffer, MAX_BUFFER); for (i = 0; i < event->unit->num; i++) { - open_xml_element(HELP_UNIT_MASK, 1, buffer); + open_xml_element(HELP_UNIT_MASK, 1, buffer, MAX_BUFFER); init_xml_int_attr(HELP_UNIT_MASK_VALUE, - event->unit->um[i].value, buffer); + event->unit->um[i].value, + buffer, MAX_BUFFER); init_xml_str_attr(HELP_UNIT_MASK_DESC, - event->unit->um[i].desc, buffer); - close_xml_element(NONE, 0, buffer); + event->unit->um[i].desc, + buffer, MAX_BUFFER); + close_xml_element(NONE, 0, buffer, MAX_BUFFER); } - close_xml_element(HELP_UNIT_MASKS, 0, buffer); + close_xml_element(HELP_UNIT_MASKS, 0, buffer, MAX_BUFFER); } - close_xml_element(has_nested ? HELP_EVENT : NONE, has_nested, buffer); + close_xml_element(has_nested ? HELP_EVENT : NONE, has_nested, + buffer, MAX_BUFFER); printf("%s", buffer); } diff --git a/libop/op_xml_out.c b/libop/op_xml_out.c index d779c45..7cf0abb 100644 --- a/libop/op_xml_out.c +++ b/libop/op_xml_out.c @@ -91,143 +91,176 @@ char const * xml_tag_name(tag_t tag) } -void open_xml_element(tag_t tag, int with_attrs, char * buffer) +void open_xml_element(tag_t tag, int with_attrs, char *buffer, size_t max) { - char const * tag_name = xml_tag_name(tag); - unsigned int const max_len = strlen(tag_name) + 3; - char tmp_buf[MAX_BUF_LEN]; + char *buf; + int size, ret; - if (max_len >= sizeof(tmp_buf)) - fprintf(stderr,"Warning: open_xml_element: buffer overflow %d\n", max_len); + buffer[max - 1] = '\0'; + size = strlen(buffer); + buf = &buffer[size]; + size = max - 1 - size; - if (snprintf(tmp_buf, sizeof(tmp_buf), "<%s%s", tag_name, - (with_attrs ? " " : ">\n")) < 0) { + ret = snprintf(buf, size, "<%s%s", xml_tag_name(tag), + (with_attrs ? " " : ">\n")); + + if (ret < 0 || ret >= size) { fprintf(stderr,"open_xml_element: snprintf failed\n"); exit(EXIT_FAILURE); } - strncat(buffer, tmp_buf, sizeof(tmp_buf)); } -void close_xml_element(tag_t tag, int has_nested, char * buffer) +void close_xml_element(tag_t tag, int has_nested, char *buffer, size_t max) { - char const * tag_name = xml_tag_name(tag); - unsigned int const max_len = strlen(tag_name) + 3; - char tmp_buf[MAX_BUF_LEN]; + char *buf; + int size, ret; - if (max_len >= sizeof(tmp_buf)) - fprintf(stderr,"Warning: close_xml_element: buffer overflow %d\n", max_len); + buffer[max - 1] = '\0'; + size = strlen(buffer); + buf = &buffer[size]; + size = max - 1 - size; - if (tag == NONE) { - if (snprintf(tmp_buf, sizeof(tmp_buf), "%s\n", (has_nested ? ">" : "/>")) < 0) { - fprintf(stderr, "close_xml_element: snprintf failed\n"); - exit(EXIT_FAILURE); - } - } else { - if (snprintf(tmp_buf, sizeof(tmp_buf), "</%s>\n", tag_name) < 0) { - fprintf(stderr, "close_xml_element: snprintf failed\n"); - exit(EXIT_FAILURE); - } + if (tag == NONE) + ret = snprintf(buf, size, "%s\n", (has_nested ? ">" : "/>")); + else + ret = snprintf(buf, size, "</%s>\n", xml_tag_name(tag)); + + if (ret < 0 || ret >= size) { + fprintf(stderr, "close_xml_element: snprintf failed\n"); + exit(EXIT_FAILURE); } - strncat(buffer, tmp_buf, sizeof(tmp_buf)); } -void init_xml_int_attr(tag_t attr, int value, char * buffer) +void init_xml_int_attr(tag_t attr, int value, char *buffer, size_t max) { - char const * attr_name = xml_tag_name(attr); - char tmp_buf[MAX_BUF_LEN]; - unsigned int const max_len = strlen(attr_name) + 50; + char *buf; + int size, ret; - if (max_len >= sizeof(tmp_buf)) { - fprintf(stderr, - "Warning: init_xml_int_attr: buffer overflow %d\n", max_len); - } + buffer[max - 1] = '\0'; + size = strlen(buffer); + buf = &buffer[size]; + size = max - 1 - size; + ret = snprintf(buf, size, " %s=\"%d\"", xml_tag_name(attr), value); - if (snprintf(tmp_buf, sizeof(tmp_buf), " %s=\"%d\"", attr_name, value) < 0) { + if (ret < 0 || ret >= size) { fprintf(stderr,"init_xml_int_attr: snprintf failed\n"); exit(EXIT_FAILURE); } - strncat(buffer, tmp_buf, sizeof(tmp_buf)); } -void init_xml_dbl_attr(tag_t attr, double value, char * buffer) +void init_xml_dbl_attr(tag_t attr, double value, char *buffer, size_t max) { - char const * attr_name = xml_tag_name(attr); - unsigned int const max_len = strlen(attr_name) + 50; - char tmp_buf[MAX_BUF_LEN]; + char *buf; + int size, ret; + + buffer[max - 1] = '\0'; + size = strlen(buffer); + buf = &buffer[size]; + size = max - 1 - size; - if (max_len >= sizeof(tmp_buf)) - fprintf(stderr, "Warning: init_xml_dbl_attr: buffer overflow %d\n", max_len); + ret = snprintf(buf, size, " %s=\"%.2f\"", xml_tag_name(attr), value); - if (snprintf(tmp_buf, sizeof(tmp_buf), " %s=\"%.2f\"", attr_name, value) < 0) { + if (ret < 0 || ret >= size) { fprintf(stderr, "init_xml_dbl_attr: snprintf failed\n"); exit(EXIT_FAILURE); } - strncat(buffer, tmp_buf, sizeof(tmp_buf)); } -static char * xml_quote(char const * str, char * quote_buf) +static void xml_quote(char const *str, char *buffer, size_t max) { - int i; - int pos = 0; - int len = strlen(str); + char *buf; + char *quote; + char *pos = (char*)str; + size_t size; + int ret; - - quote_buf[pos++] = '"'; + buffer[max - 1] = '\0'; + size = strlen(buffer); + buf = &buffer[size]; + size = max - 1 - size; - for (i = 0; i < len; i++) { - if (pos >= MAX_BUF_LEN - 10) { - fprintf(stderr,"quote_str: buffer overflow %d\n", pos); - exit(EXIT_FAILURE); - } + if (size < strlen(pos) + 2) + goto Error; - switch(str[i]) { + *buf = '"'; + buf++; + size--; + + while (*pos) { + switch(*pos) { case '&': - strncpy(quote_buf + pos, "&", 5); - pos += 5; + quote = "&"; break; case '<': - strncpy(quote_buf + pos, "<", 4); - pos += 4; + quote = "<"; break; case '>': - strncpy(quote_buf + pos, ">", 4); - pos += 4; + quote = ">"; break; case '"': - strncpy(quote_buf + pos, """, 6); - pos += 6; + quote = """; break; default: - quote_buf[pos++] = str[i]; - break; + *buf = *pos; + pos++; + buf++; + size--; + continue; } + + pos++; + ret = snprintf(buf, size, "%s", quote); + if (ret < 0 || ret >= (int)size) + goto Error; + buf += ret; + size -= ret; + if (size < strlen(pos)) + goto Error; } - quote_buf[pos++] = '"'; - quote_buf[pos++] = '\0'; - return quote_buf; + if (!size) + goto Error; + + *buf = '"'; + buf++; + *buf = '\0'; + + return; + +Error: + fprintf(stderr,"quote_str: buffer overflow\n"); + exit(EXIT_FAILURE); } -void init_xml_str_attr(tag_t attr, char const * str, char * buffer) +void init_xml_str_attr(tag_t attr, char const *str, char *buffer, size_t max) { - char tmp_buf[MAX_BUF_LEN]; - char quote_buf[MAX_BUF_LEN]; - char const * attr_name = xml_tag_name(attr); - char const * quote_str = xml_quote(str, quote_buf); - const unsigned int max_len = strlen(attr_name) + strlen(quote_str) + 10; + char *buf; + int size, ret; - if (max_len >= sizeof(tmp_buf)) - fprintf(stderr, "Warning: init_xml_str_attr: buffer overflow %d\n", max_len); + buffer[max - 1] = '\0'; + size = strlen(buffer); + buf = &buffer[size]; + size = max - 1 - size; - if (snprintf(tmp_buf, sizeof(tmp_buf), " %s=""%s""", attr_name, quote_str) < 0) { - fprintf(stderr,"init_xml_str_attr: snprintf failed\n"); - exit(EXIT_FAILURE); - } - strncat(buffer, tmp_buf, sizeof(tmp_buf)); + ret = snprintf(buf, size, " %s=", xml_tag_name(attr)); + if (ret < 0 || ret >= size) + goto Error; + + buf += ret; + size -= ret; + + if (!size) + goto Error; + + xml_quote(str, buf, size); + return; +Error: + fprintf(stderr,"init_xml_str_attr: snprintf failed\n"); + exit(EXIT_FAILURE); } diff --git a/libop/op_xml_out.h b/libop/op_xml_out.h index 52e8d8f..ae0fea5 100644 --- a/libop/op_xml_out.h +++ b/libop/op_xml_out.h @@ -59,11 +59,11 @@ typedef enum { } tag_t; char const * xml_tag_name(tag_t tag); -void open_xml_element(tag_t tag, int with_attrs, char * result); -void close_xml_element(tag_t tag, int has_nested, char * result); -void init_xml_int_attr(tag_t attr, int value, char * result); -void init_xml_dbl_attr(tag_t attr, double value, char * result); -void init_xml_str_attr(tag_t attr, char const * str, char * result); +void open_xml_element(tag_t tag, int with_attrs, char *buffer, size_t size); +void close_xml_element(tag_t tag, int has_nested, char *buffer, size_t size); +void init_xml_int_attr(tag_t attr, int value, char *buffer, size_t size); +void init_xml_dbl_attr(tag_t attr, double value, char *buffer, size_t size); +void init_xml_str_attr(tag_t attr, char const *str, char *buffer, size_t size); #ifdef __cplusplus } diff --git a/libutil++/xml_output.cpp b/libutil++/xml_output.cpp index 0f0b189..4ac9a1b 100644 --- a/libutil++/xml_output.cpp +++ b/libutil++/xml_output.cpp @@ -16,7 +16,8 @@ using namespace std; -#define MAX_XML_BUF 1024 +#define MAX_XML_BUF 4096 +static char buf[MAX_XML_BUF]; string tag_name(tag_t tag) { @@ -29,10 +30,9 @@ string tag_name(tag_t tag) string open_element(tag_t tag, bool with_attrs) { ostringstream out; - char buf[MAX_XML_BUF]; buf[0] = '\0'; - open_xml_element(tag, with_attrs, buf); + open_xml_element(tag, with_attrs, buf, MAX_XML_BUF); out << buf; return out.str(); } @@ -41,10 +41,9 @@ string open_element(tag_t tag, bool with_attrs) string close_element(tag_t tag, bool has_nested) { ostringstream out; - char buf[MAX_XML_BUF]; buf[0] = '\0'; - close_xml_element(tag, has_nested, buf); + close_xml_element(tag, has_nested, buf, MAX_XML_BUF); out << buf; return out.str(); } @@ -53,10 +52,9 @@ string close_element(tag_t tag, bool has_nested) string init_attr(tag_t attr, size_t value) { ostringstream out; - char buf[MAX_XML_BUF]; buf[0] = '\0'; - init_xml_int_attr(attr, value, buf); + init_xml_int_attr(attr, value, buf, MAX_XML_BUF); out << buf; return out.str(); } @@ -65,10 +63,9 @@ string init_attr(tag_t attr, size_t value) string init_attr(tag_t attr, double value) { ostringstream out; - char buf[MAX_XML_BUF]; buf[0] = '\0'; - init_xml_dbl_attr(attr, value, buf); + init_xml_dbl_attr(attr, value, buf, MAX_XML_BUF); out << buf; return out.str(); } @@ -77,10 +74,9 @@ string init_attr(tag_t attr, double value) string init_attr(tag_t attr, string const & str) { ostringstream out; - char buf[MAX_XML_BUF]; buf[0] = '\0'; - init_xml_str_attr(attr, str.c_str(), buf); + init_xml_str_attr(attr, str.c_str(), buf, MAX_XML_BUF); out << buf; return out.str(); } -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 07/10] autogen.sh: create copies with libtoolize instead of symlinksFor package creation and its usage on a different filesystem it
becomes necessary to create copies with libtoolize instead of symlinks. This patch adds an option for this to libtoolize. Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 4 ++++ autogen.sh | 2 +- 2 files changed, 5 insertions(+), 1 deletions(-) diff --git a/ChangeLog b/ChangeLog index ac4736d..5456ac1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-08-11 Robert Richter <robert.richter@...> + * autogen.sh: create copies with libtoolize instead of symlinks + +2009-08-11 Robert Richter <robert.richter@...> + * libop/op_xml_events.c: * libop/op_xml_out.c: * libop/op_xml_out.h: diff --git a/autogen.sh b/autogen.sh index 02e92ca..708afa3 100755 --- a/autogen.sh +++ b/autogen.sh @@ -35,7 +35,7 @@ if test -n "$1"; then exit 1 fi -libtoolize --automake +libtoolize --automake -c run "$ACLOCAL -I m4" run $AUTOHEADER run "$AUTOMAKE --foreign --add-missing --copy" -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 08/10] oprofile build: adding config option to disable oprofile user checkFor testing and building binary packages on a build server it is
annoying to always get a warnig the user oprofile does not exists on this system. There are two checks, during configuration and while running make. This patch adds an option what allows building packages without all this checks: ./confiure --disable-account-check ... Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 5 +++++ agents/Makefile.am | 10 ++++++++-- configure.in | 12 ++++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5456ac1..6fe6e5e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2009-08-11 Robert Richter <robert.richter@...> + * agents/Makefile.am: + * configure.in: adding config option to disable oprofile user check + +2009-08-11 Robert Richter <robert.richter@...> + * autogen.sh: create copies with libtoolize instead of symlinks 2009-08-11 Robert Richter <robert.richter@...> diff --git a/agents/Makefile.am b/agents/Makefile.am index 10325a1..c049fa7 100644 --- a/agents/Makefile.am +++ b/agents/Makefile.am @@ -9,7 +9,13 @@ if BUILD_JVMPI_AGENT SUBDIRS += jvmpi endif -install-exec-hook: +INSTALL_EXEC_HOOK = + +if CHECK_ACCOUNT +INSTALL_EXEC_HOOK += __install-exec-hook +endif + +__install-exec-hook: @getent passwd oprofile >/dev/null || ( \ echo "****************************************************************" ; \ echo "* WARNING:" ; \ @@ -27,4 +33,4 @@ install-exec-hook: echo "* The special user 'oprofile' must have the default group set to 'oprofile'." ; \ echo "****************************************************************") ; - +install-exec-hook: $(INSTALL_EXEC_HOOK) diff --git a/configure.in b/configure.in index 5de0db0..82b5061 100644 --- a/configure.in +++ b/configure.in @@ -196,6 +196,12 @@ if test "$enable_optimization" = "no"; then CXXFLAGS=`echo $CXXFLAGS | sed 's/-O2//g'` fi +AC_ARG_ENABLE(account-check, + [ --disable-account-check disable account check (default is enabled)], + enable_account_check=$enableval, enable_account_check=yes) + +AM_CONDITIONAL(CHECK_ACCOUNT, test "x$enable_account_check" = "xyes") + AC_SUBST(OP_CFLAGS) AC_SUBST(OP_CXXFLAGS) @@ -272,8 +278,10 @@ if test -z "$QT_LIB"; then echo "Warning: a working Qt not found; no GUI will be built" fi -if test "`getent passwd oprofile 2>/dev/null`" == "" || \ - test "`getent group oprofile 2>/dev/null`" == ""; then +if ! test "x$enable_account_check" = "xyes"; then + : +elif test "`getent passwd oprofile 2>/dev/null`" == "" || \ + test "`getent group oprofile 2>/dev/null`" == ""; then if test `id -u` != "0"; then echo "Warning: The user account 'oprofile:oprofile' does not exist on the system." echo " To profile JITed code, this special user account must exist." -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 09/10] opcontrol: adding --defaults optionI figured out that there is no way to reset setup parameters. The only
way was removing the setup file in /root/.oprofile/daemonrc. So I added the defaults option that removes the file. If there is no setup file the default values will be set. The option can be combined with other setup options such as: opcontrol --defaults --no-vmlinux --buffer-size=640000 This resets all values to default except buffer size and vmlinux. Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 6 ++++++ doc/opcontrol.1.in | 5 +++++ doc/oprofile.xml | 7 +++++++ utils/opcontrol | 13 +++++++++++++ 4 files changed, 31 insertions(+), 0 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6fe6e5e..984e936 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2009-08-11 Robert Richter <robert.richter@...> + * doc/opcontrol.1.in: + * doc/oprofile.xml: + * utils/opcontrol: adding --defaults option + +2009-08-11 Robert Richter <robert.richter@...> + * agents/Makefile.am: * configure.in: adding config option to disable oprofile user check diff --git a/doc/opcontrol.1.in b/doc/opcontrol.1.in index b9cf61e..8b68746 100644 --- a/doc/opcontrol.1.in +++ b/doc/opcontrol.1.in @@ -41,6 +41,11 @@ in ~root/.oprofile/daemonrc. Optional. Show configuration information. .br .TP +.BI "--defaults" +Reset setup values to defaults. Can be combined with the --setup +option. +.br +.TP .BI "--start-daemon" Start the oprofile daemon without starting profiling. Not available in 2.2/2.4 kernels. diff --git a/doc/oprofile.xml b/doc/oprofile.xml index 35ba48a..1a06bcd 100644 --- a/doc/oprofile.xml +++ b/doc/oprofile.xml @@ -567,6 +567,13 @@ The <command>opcontrol</command> script provides the following actions : </para></listitem> </varlistentry> <varlistentry> + <term><option>--defaults</option></term> + <listitem><para> + Reset setup values to defaults. Can be combined + with the <option>--setup</option> option. + </para></listitem> + </varlistentry> + <varlistentry> <term><option>--status</option></term> <listitem><para> Show configuration information. diff --git a/utils/opcontrol b/utils/opcontrol index 6d1bfc0..0ada540 100644 --- a/utils/opcontrol +++ b/utils/opcontrol @@ -113,6 +113,7 @@ opcontrol: usage: -v/--version show version --init loads the oprofile module and oprofilefs --setup give setup arguments (may be omitted) + --defaults reset setup values to defaults --status show configuration --start-daemon start daemon without starting profiling -s/--start start data collection @@ -241,6 +242,9 @@ do_init_daemon_vars() if test -n "$SESSION_DIR"; then SAVED=$SESSION_DIR fi + if test "$DEFAULTS" = "yes"; then + rm -f "$SETUP_FILE" + fi do_load_setup if test -n "$SAVED"; then SESSION_DIR=$SAVED @@ -665,6 +669,11 @@ do_options() SETUP=yes ;; + --defaults) + # also early option code existing + DO_SETUP=yes + ;; + --start-daemon) if test "$KERNEL_SUPPORT" != "yes"; then echo "$arg unsupported. use \"--start\"" >&2 @@ -1759,6 +1768,7 @@ check_options_early() OPHELP="$OPDIR/ophelp" VERBOSE="" + DEFAULTS=no for i in $@; do # added to handle arg=val parameters @@ -1782,6 +1792,9 @@ check_options_early() VERBOSE=$val fi ;; + --defaults) + DEFAULTS=yes + ;; --session-dir) error_if_empty $arg $val SESSION_DIR="$val" -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
[PATCH 10/10] opreport: add xsl script for denormalized text dumpsThis adds an xsl script allowing the creation of one event per line
dumps with opreport. The dump is usefull to get text formated output of all the data in the sampling buffer. The script is installed in the /usr/share/oprofile/xslt directory. Usage: opreport -X | xsltproc /usr/share/oprofile/xslt/opreport-denormalize.xsl - Signed-off-by: Robert Richter <robert.richter@...> --- ChangeLog | 6 ++ pp/Makefile.am | 23 ++++++++ pp/xslt/opreport-denormalize.xsl | 114 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 143 insertions(+), 0 deletions(-) create mode 100644 pp/xslt/opreport-denormalize.xsl diff --git a/ChangeLog b/ChangeLog index 984e936..e5920c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2009-08-11 Robert Richter <robert.richter@...> + * pp/Makefile.am: + * pp/xslt/opreport-denormalize.xsl: add xsl script for + denormalized text dumps + +2009-08-11 Robert Richter <robert.richter@...> + * doc/opcontrol.1.in: * doc/oprofile.xml: * utils/opcontrol: adding --defaults option diff --git a/pp/Makefile.am b/pp/Makefile.am index 1436473..adb34e9 100644 --- a/pp/Makefile.am +++ b/pp/Makefile.am @@ -43,3 +43,26 @@ oparchive_SOURCES = oparchive.cpp \ oparchive_options.h oparchive_options.cpp \ $(pp_common) oparchive_LDADD = $(common_libs) + +xslt_files = \ + xslt/opreport-denormalize.xsl + +install-data-local: + for i in ${xslt_files} ; do \ + dir=`dirname $$i` ; \ + mkdir -p $(DESTDIR)$(pkgdatadir)/$$dir ; \ + $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(pkgdatadir)/$$i ; \ + done + +uninstall-local: + for i in ${xslt_files} ; do \ + dir=`dirname $$i` ; \ + if test -f $(DESTDIR)$(pkgdatadir)/$$i ; then \ + rm $(DESTDIR)$(pkgdatadir)/$$i ; \ + fi; \ + if test -d $(DESTDIR)$(pkgdatadir)/$$dir ; then \ + rmdir --ignore-fail-on-non-empty $(DESTDIR)$(pkgdatadir)/$$dir ; \ + fi; \ + done + +EXTRA_DIST = $(xslt_files) diff --git a/pp/xslt/opreport-denormalize.xsl b/pp/xslt/opreport-denormalize.xsl new file mode 100644 index 0000000..6cdc176 --- /dev/null +++ b/pp/xslt/opreport-denormalize.xsl @@ -0,0 +1,114 @@ +<xsl:stylesheet version="1.0" +xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + +<xsl:key name="get_class" match="class" use="@name" /> +<xsl:key name="get_event" match="eventsetup" use="@id" /> +<xsl:key name="get_symbol" match="symboldata" use="@id" /> + +<xsl:template match="/"> + +<xsl:text>schemaversion: </xsl:text><xsl:value-of select="profile/@schemaversion"/><xsl:text> </xsl:text> +<xsl:text>cputype : </xsl:text><xsl:value-of select="profile/@cputype"/><xsl:text> </xsl:text> +<xsl:text>processor : </xsl:text><xsl:value-of select="profile/@processor"/><xsl:text> </xsl:text> +<xsl:text>separatedcpus: </xsl:text><xsl:value-of select="profile/@separatedcpus"/><xsl:text> </xsl:text> +<xsl:text>mhz : </xsl:text><xsl:value-of select="profile/@mhz"/><xsl:text> </xsl:text> +<xsl:text>title : </xsl:text><xsl:value-of select="profile/@title"/><xsl:text> </xsl:text> +<xsl:text> </xsl:text> + +<xsl:text>events: </xsl:text> +<xsl:for-each select="profile/setup/eventsetup"> +<xsl:value-of select="@id"/> +<xsl:text>: </xsl:text> +<xsl:apply-templates select="."/> +<xsl:text> </xsl:text> +</xsl:for-each> +<xsl:text> </xsl:text> + +<xsl:for-each select="profile/binary"> + +<xsl:for-each select="count"> +<xsl:apply-templates select="key('get_class', @class)"/> +<xsl:text> </xsl:text> +<xsl:value-of select="../@name"/> +<xsl:text> </xsl:text> +<xsl:text>(mod) </xsl:text> +<xsl:text>(sym) </xsl:text> +<xsl:number value="."/> +<xsl:text> </xsl:text> +</xsl:for-each> + +<xsl:for-each select="symbol"> + +<xsl:for-each select="count"> +<xsl:apply-templates select="key('get_class', @class)"/> +<xsl:text> </xsl:text> +<xsl:value-of select="../../@name"/> +<xsl:text> </xsl:text> +<xsl:text>(mod) </xsl:text> +<xsl:apply-templates select="key('get_symbol', ../@idref)"/> +<xsl:text> </xsl:text> +<xsl:number value="."/> +<xsl:text> </xsl:text> +</xsl:for-each> + +</xsl:for-each> + +<xsl:for-each select="module"> + +<xsl:for-each select="count"> +<xsl:apply-templates select="key('get_class', @class)"/> +<xsl:text> </xsl:text> +<xsl:value-of select="../../@name"/> +<xsl:text> </xsl:text> +<xsl:value-of select="../@name"/> +<xsl:text> </xsl:text> +<xsl:text>(sym) </xsl:text> +<xsl:number value="."/> +<xsl:text> </xsl:text> +</xsl:for-each> + +<xsl:for-each select="symbol"> + +<xsl:for-each select="count"> +<xsl:apply-templates select="key('get_class', @class)"/> +<xsl:text> </xsl:text> +<xsl:value-of select="../../../@name"/> +<xsl:text> </xsl:text> +<xsl:value-of select="../../@name"/> +<xsl:text> </xsl:text> +<xsl:apply-templates select="key('get_symbol', ../@idref)"/> +<xsl:text> </xsl:text> +<xsl:number value="."/> +<xsl:text> </xsl:text> +</xsl:for-each> + +</xsl:for-each> + +</xsl:for-each> + +</xsl:for-each> + +</xsl:template> + +<xsl:template match="class"> +<xsl:apply-templates select="key('get_event', @event)"/> +<xsl:text> </xsl:text> +<xsl:value-of select="@cpu"/> +</xsl:template> + +<xsl:template match="eventsetup"> +<xsl:value-of select="@eventname"/> +<xsl:text> </xsl:text> +<xsl:value-of select="@unitmask"/> +<xsl:text> </xsl:text> +<xsl:value-of select="@setupcount"/> +</xsl:template> + +<xsl:template match="symboldata"> +<xsl:value-of select="@name"/> +<xsl:text>(</xsl:text> +<xsl:value-of select="@startingaddr"/> +<xsl:text>)</xsl:text> +</xsl:template> + +</xsl:stylesheet> -- 1.6.4 ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 10/10] opreport: add xsl script for denormalized text dumpsOn Wed, Aug 12, 2009 at 05:48:35PM +0200, Robert Richter wrote:
> This adds an xsl script allowing the creation of one event per line > dumps with opreport. The dump is usefull to get text formated output > of all the data in the sampling buffer. The script is installed in the > /usr/share/oprofile/xslt directory. Can you give an example? You need to update the opreport man page and the manual regards john ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 10/10] opreport: add xsl script for denormalized text dumpsOn 12.08.09 12:04:09, John Levon wrote:
> On Wed, Aug 12, 2009 at 05:48:35PM +0200, Robert Richter wrote: > > > This adds an xsl script allowing the creation of one event per line > > dumps with opreport. The dump is usefull to get text formated output > > of all the data in the sampling buffer. The script is installed in the > > /usr/share/oprofile/xslt directory. > > Can you give an example? You need to update the opreport man page and > the manual See below for a dump. I will update the man page and manual if the patch otherwise will be excepted. -Robert # opreport -X | xsltproc /usr/share/oprofile/xslt/opreport-denormalize.xsl - WARNING! The OProfile kernel driver reports sample buffer overflows. Such overflows can result in incorrect sample attribution, invalid sample files and other symptoms. See the oprofiled.log for details. You should adjust your sampling frequency to eliminate (or at least minimize) these overflows. warning: /no-vmlinux could not be found. <?xml version="1.0"?> schemaversion: 2.0 cputype : x86-64 processor : family10 separatedcpus: mhz : 2100.00 title : opreport -X events: 0: CPU_CLK_UNHALTED 0 50000 /bin/bash (mod) (sym) 5563 /bin/bash (mod) /bin/bash(00000000) 5563 /bin/gawk-3.1.6 (mod) (sym) 41 /bin/gawk-3.1.6 (mod) /bin/gawk-3.1.6(00000000) 41 /bin/grep (mod) (sym) 12 /bin/grep (mod) /bin/grep(00000000) 12 /sbin/init (mod) (sym) 1 /sbin/init (mod) /sbin/init(00000000) 1 /lib64/ld-2.9.so (mod) (sym) 444 /lib64/ld-2.9.so (mod) /lib64/ld-2.9.so(00000000) 444 /lib64/libc-2.9.so (mod) (sym) 7221 /lib64/libc-2.9.so (mod) /lib64/libc-2.9.so(00000000) 7221 /lib64/libdl-2.9.so (mod) (sym) 2 /lib64/libdl-2.9.so (mod) /lib64/libdl-2.9.so(00000000) 2 /lib64/libm-2.9.so (mod) (sym) 1 /lib64/libm-2.9.so (mod) /lib64/libm-2.9.so(00000000) 1 /lib64/libncurses.so.5.6 (mod) (sym) 5 /lib64/libncurses.so.5.6 (mod) /lib64/libncurses.so.5.6(00000000) 5 /usr/lib64/libpopt.so.0.0.0 (mod) (sym) 4 /usr/lib64/libpopt.so.0.0.0 (mod) /usr/lib64/libpopt.so.0.0.0(00000000) 4 /lib64/librt-2.9.so (mod) (sym) 2 /lib64/librt-2.9.so (mod) /lib64/librt-2.9.so(00000000) 2 /bin/ls (mod) (sym) 3 /bin/ls (mod) /bin/ls(00000000) 3 /no-vmlinux (mod) (sym) 6672 /no-vmlinux (mod) /no-vmlinux(00000000) 6672 /usr/bin/ophelp (mod) (sym) 84 /usr/bin/ophelp (mod) op_get_line(004052d0) 29 /usr/bin/ophelp (mod) skip_nonws(00405700) 19 /usr/bin/ophelp (mod) read_events(00403040) 13 /usr/bin/ophelp (mod) skip_ws(004056d0) 7 /usr/bin/ophelp (mod) next_token(00402f20) 4 /usr/bin/ophelp (mod) try_find_um(00402e80) 4 /usr/bin/ophelp (mod) xcalloc(004058b0) 3 /usr/bin/ophelp (mod) arch_filter_events(004038c0) 1 /usr/bin/ophelp (mod) find_um(00402ef0) 1 /usr/bin/ophelp (mod) read_unit_masks(004029b0) 1 /usr/bin/ophelp (mod) strisprefix(00405760) 1 /usr/bin/ophelp (mod) xmalloc(00405910) 1 [...] > > regards > john > -- Advanced Micro Devices, Inc. Operating System Research Center email: robert.richter@... ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 10/10] opreport: add xsl script for denormalized text dumpsOn 12.08.09 18:11:50, Robert Richter wrote:
> On 12.08.09 12:04:09, John Levon wrote: > > On Wed, Aug 12, 2009 at 05:48:35PM +0200, Robert Richter wrote: > > > > > This adds an xsl script allowing the creation of one event per line > > > dumps with opreport. The dump is usefull to get text formated output > > > of all the data in the sampling buffer. The script is installed in the > > > /usr/share/oprofile/xslt directory. > > > > Can you give an example? You need to update the opreport man page and > > the manual Esp. I found something like this useful: # opreport -X | xsltproc /usr/share/oprofile/xslt/opreport-denormalize.xsl - | grep perl /usr/bin/perl5.8.8 (mod) (sym) 875 /usr/bin/perl5.8.8 (mod) /usr/bin/perl5.8.8(00000000) 875 -Robert -- Advanced Micro Devices, Inc. Operating System Research Center email: robert.richter@... ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 0/10] oprofile fixes and updatesRobert Richter wrote:
> This patch series contains fixes and updates I still have in my > oprofile userland patch queue. I posted some of them already some > months ago. There are mostly reworks of opcontrol, some changes to > make binary package creation and testing easier and some xml stuff. I > find all of them useful, the patches are necessary for my > regression. I think they are useful for others too. Robert, it seems that most (all?) of these patches are independent of one another, correct? If that's the case, in future, please submit such patches individually over time. It's easier for me to handle from a time management perspective. I won't have time to review all of these right away, but I'll chip away at them. Others in the community should also comment on these patches, since it appears many of them will result in behavioral changes to the tool. -Maynard > > -Robert > > > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 0/10] oprofile fixes and updatesOn 13.08.09 11:15:32, Maynard Johnson wrote:
> Robert, it seems that most (all?) of these patches are independent of one > another, correct? If that's the case, in future, please submit such > patches individually over time. It's easier for me to handle from a time > management perspective. Yes, the patches should be independent. Individually patches would have caused conflicts in the ChangeLog file, so I decided to send a patch set. Also, this workflow is easier to me. :) But of course, I will make it easier for you... -Robert -- Advanced Micro Devices, Inc. Operating System Research Center email: robert.richter@... ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 0/10] oprofile fixes and updatesRobert Richter wrote:
> This patch series contains fixes and updates I still have in my > oprofile userland patch queue. I posted some of them already some > months ago. There are mostly reworks of opcontrol, some changes to > make binary package creation and testing easier and some xml stuff. I > find all of them useful, the patches are necessary for my > regression. I think they are useful for others too. Robert, I'll be out for the next week, but hope to start reviewing these patches soon after I return. Sorry for the delay. -Maynard > > -Robert > > > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 01/10] opcontrol: fix vecho outputRobert Richter wrote:
> There are unreachable vecho commands in the code that are never Specifically, which vecho commands are never executed? The only one I can find is in get_image_range when it is called from do_options when KERNEL_RANGE is not set. Personally, I think this invocation of get_image_range is a bug, since the value of KERNEL_RANGE depends on the order of the options you pass in. If you pass --kernel-range before --vmlinux option, then KERNEL_RANGE is set; if you pass these options in the opposite order, then KERNEL_RANGE is not set. In do_start_daemon, we call get_image_range again, which will always do the right thing since all options have been processed by then. So I think the right fix is to remove the calls to get_image_range in do_setup. Another reason why I'm not inclined to accept this patch is that if you pass --verbose during setup, you don't get *all* the verbose info that you would if you pass it with --start-daemon or --start (e.g., options to oprofiled). So users would probably want to still pass --verbose at start time, resulting in a lot of duplicate verbose information. -Maynard > executed since the options are parsed later. I added --verbose to > check_options_early(). Additional I removed the check that allows the > use of the --verbose option only for the --start or --start-daemon. > > Signed-off-by: Robert Richter <robert.richter@...> > --- > ChangeLog | 4 ++++ > utils/opcontrol | 28 ++++++++++++---------------- > 2 files changed, 16 insertions(+), 16 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index 5c77afb..ce81dc7 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,3 +1,7 @@ > +2009-08-11 Robert Richter <robert.richter@...> > + > + * utils/opcontrol: fix vecho output > + > 2009-07-31 Maynard Johnson <maynardj@...> > > * configure.in: bump version in AM_INIT_AUTOMAKE to 0.9.6cvs > diff --git a/utils/opcontrol b/utils/opcontrol > index 41c8f0e..fbea34d 100644 > --- a/utils/opcontrol > +++ b/utils/opcontrol > @@ -291,7 +291,6 @@ do_init() > NOTE_SIZE=0 > VMLINUX= > XENIMAGE="none" > - VERBOSE="" > SEPARATE_LIB=0 > SEPARATE_KERNEL=0 > SEPARATE_THREAD=0 > @@ -839,20 +838,16 @@ do_options() > DO_SETUP=yes > ;; > > - -V|--verbose) > - if test -z "$val"; then > - VERBOSE="all" > - else > - VERBOSE=$val > - fi > - ;; > - > -l|--list-events) > EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` > EXCLUSIVE_ARGV="$arg" > exec $OPHELP > ;; > > + # ignore early option > + -V|--verbose) > + ;; > + > *) > echo "Unknown option \"$arg\". See opcontrol --help" >&2 > exit 1 > @@ -874,13 +869,6 @@ do_options() > exit 1 > fi > > - if test -n "$VERBOSE"; then > - if test "$START" != "yes" -a "$START_DAEMON" != "yes"; then > - echo "Option --verbose may only be used with --start or --start-daemon" >&2 > - exit 1 > - fi > - fi > - > if test "$DO_SETUP" = "yes"; then > SETUP="$DO_SETUP" > fi > @@ -1756,6 +1744,7 @@ check_options_early() > { > > OPHELP="$OPDIR/ophelp" > + VERBOSE="" > > for i in $@; do > # added to handle arg=val parameters > @@ -1772,6 +1761,13 @@ check_options_early() > $OPHELP --version | cut -d' ' -f2- > exit 0 > ;; > + -V|--verbose) > + if test -z "$val"; then > + VERBOSE="all" > + else > + VERBOSE=$val > + fi > + ;; > --session-dir) > error_if_empty $arg $val > SESSION_DIR="$val" ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 02/10] opcontrol: fix parameter dumpRobert Richter wrote:
> The parameter dump was located in do_init(). Values were printed as "dump_parameters" must be something you've added in your local copy. It's not present in CVS. -Maynard > read from the setup file. Parameters that have been updated with a > setup option were wrong. This patch fixes this. > > Now, parameters are also dumped if there are no options specified for > --setup. Thus, parameters stored in the setup file can be dumped using > 'opcontrol --setup --verbose'. > > Signed-off-by: Robert Richter <robert.richter@...> > --- > ChangeLog | 4 ++++ > utils/opcontrol | 10 ++++++++++ > 2 files changed, 14 insertions(+), 0 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index ce81dc7..10c54cb 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,5 +1,9 @@ > 2009-08-11 Robert Richter <robert.richter@...> > > + * utils/opcontrol: fix parameter dump > + > +2009-08-11 Robert Richter <robert.richter@...> > + > * utils/opcontrol: fix vecho output > > 2009-07-31 Maynard Johnson <maynardj@...> > diff --git a/utils/opcontrol b/utils/opcontrol > index fbea34d..fc92ac7 100644 > --- a/utils/opcontrol > +++ b/utils/opcontrol > @@ -404,6 +404,8 @@ do_save_setup() > if test "$XEN_RANGE"; then > echo "XEN_RANGE=$XEN_RANGE" >> $SETUP_FILE > fi > + > + dump_parameters; > } > > > @@ -865,6 +867,10 @@ do_options() > fi > > if test "$SETUP" = "yes" -a "$DO_SETUP" != "yes"; then > + if test -n "$VERBOSE"; then > + dump_parameters > + exit 0 > + fi > echo "No options specified for --setup." >&2 > exit 1 > fi > @@ -879,7 +885,10 @@ do_options() > exit 1 > fi > fi > +} > > +dump_parameters() > +{ > vecho "Parameters used:" > vecho "SESSION_DIR $SESSION_DIR" > vecho "LOCK_FILE $LOCK_FILE" > @@ -1424,6 +1433,7 @@ do_start_daemon() > fi > fi > > + dump_parameters > do_setup > check_valid_args > get_image_range "linux" ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
|
|
Re: [PATCH 03/10] opcontrol: fix help messageRobert Richter wrote:
> Output was broken due to unquoted double quotes. Robert, what shell are you using where the existing do_help does not work? Are you saying the existing code is not posix-compliant? Both ksh and bash work OK on SLES/ppc64 and SLES/Intel Xeon. Your patch appears to work just fine with both bash and ksh, so it's probably OK to accept. I just want to understand why it's needed. I'll readily admit I'm not anything approaching a shell programming expert, so it would be nice if you or someone else on the list can explain why the existing code is not posix-compliant. Thanks. -Maynard > > Signed-off-by: Robert Richter <robert.richter@...> > --- > ChangeLog | 4 ++++ > utils/opcontrol | 5 +++-- > 2 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index 10c54cb..0da5c8d 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,5 +1,9 @@ > 2009-08-11 Robert Richter <robert.richter@...> > > + * utils/opcontrol: fix help message > + > +2009-08-11 Robert Richter <robert.richter@...> > + > * utils/opcontrol: fix parameter dump > > 2009-08-11 Robert Richter <robert.richter@...> > diff --git a/utils/opcontrol b/utils/opcontrol > index fc92ac7..f1da6dc 100644 > --- a/utils/opcontrol > +++ b/utils/opcontrol > @@ -106,7 +106,8 @@ is_tool_available() > # print help message > do_help() > { > - echo "opcontrol: usage: > + cat >&2 <<EOF > +opcontrol: usage: > -l/--list-events list event types and unit masks > -?/--help this message > -v/--version show version > @@ -162,7 +163,7 @@ do_help() > --xen Xen image (for Xen only) > --active-domains=<list> List of domains in profiling session (for Xen only) > (list contains domain ids separated by commas) > -" >&2 > +EOF > } > > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ oprofile-list mailing list oprofile-list@... https://lists.sourceforge.net/lists/listinfo/oprofile-list |
| < Prev | 1 - 2 | Next > |
| Free embeddable forum powered by Nabble | Forum Help |