diff options
Diffstat (limited to 'scripts/tracetool')
-rw-r--r-- | scripts/tracetool/backend/log.py | 19 | ||||
-rw-r--r-- | scripts/tracetool/format/log_stap.py | 8 |
2 files changed, 20 insertions, 7 deletions
diff --git a/scripts/tracetool/backend/log.py b/scripts/tracetool/backend/log.py index bc43dbb4f4..17ba1cd90e 100644 --- a/scripts/tracetool/backend/log.py +++ b/scripts/tracetool/backend/log.py @@ -20,6 +20,7 @@ PUBLIC = True def generate_h_begin(events, group): out('#include "qemu/log-for-trace.h"', + '#include "qemu/error-report.h"', '') @@ -35,14 +36,20 @@ def generate_h(event, group): cond = "trace_event_get_state(%s)" % ("TRACE_" + event.name.upper()) out(' if (%(cond)s && qemu_loglevel_mask(LOG_TRACE)) {', - ' struct timeval _now;', - ' gettimeofday(&_now, NULL);', + ' if (message_with_timestamp) {', + ' struct timeval _now;', + ' gettimeofday(&_now, NULL);', '#line %(event_lineno)d "%(event_filename)s"', - ' qemu_log("%%d@%%zu.%%06zu:%(name)s " %(fmt)s "\\n",', - ' qemu_get_thread_id(),', - ' (size_t)_now.tv_sec, (size_t)_now.tv_usec', - ' %(argnames)s);', + ' qemu_log("%%d@%%zu.%%06zu:%(name)s " %(fmt)s "\\n",', + ' qemu_get_thread_id(),', + ' (size_t)_now.tv_sec, (size_t)_now.tv_usec', + ' %(argnames)s);', '#line %(out_next_lineno)d "%(out_filename)s"', + ' } else {', + '#line %(event_lineno)d "%(event_filename)s"', + ' qemu_log("%(name)s " %(fmt)s "\\n"%(argnames)s);', + '#line %(out_next_lineno)d "%(out_filename)s"', + ' }', ' }', cond=cond, event_lineno=event.lineno, diff --git a/scripts/tracetool/format/log_stap.py b/scripts/tracetool/format/log_stap.py index b486beb672..0b6549d534 100644 --- a/scripts/tracetool/format/log_stap.py +++ b/scripts/tracetool/format/log_stap.py @@ -54,6 +54,7 @@ def c_fmt_to_stap(fmt): else: if state == STATE_MACRO: bits.append(c_macro_to_format(macro)) + macro = "" state = STATE_LITERAL elif fmt[i] == ' ' or fmt[i] == '\t': if state == STATE_MACRO: @@ -77,7 +78,12 @@ def c_fmt_to_stap(fmt): elif state == STATE_LITERAL: bits.append(literal) - fmt = re.sub("%(\d*)z(x|u|d)", "%\\1\\2", "".join(bits)) + # All variables in systemtap are 64-bit in size + # The "%l" integer size qualifier is thus redundant + # and "%ll" is not valid at all. Similarly the size_t + # based "%z" size qualifier is not valid. We just + # strip all size qualifiers for sanity. + fmt = re.sub("%(\d*)(l+|z)(x|u|d)", "%\\1\\3", "".join(bits)) return fmt def generate(events, backend, group): |