trace: Forbid event format ending with newline character

Event format ending with newlines confuse the trace reports.
Forbid them.

Add a check to refuse new format added with trailing newline:

  $ make
  [...]
    GEN     hw/misc/trace.h
  Traceback (most recent call last):
    File "scripts/tracetool.py", line 152, in <module>
      main(sys.argv)
    File "scripts/tracetool.py", line 143, in main
      events.extend(tracetool.read_events(fh, arg))
    File "scripts/tracetool/__init__.py", line 367, in read_events
      event = Event.build(line)
    File "scripts/tracetool/__init__.py", line 281, in build
      raise ValueError("Event format can not end with a newline character")
  ValueError: Error at hw/misc/trace-events:121: Event format can not end with a newline character

Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20190916095121.29506-3-philmd@redhat.com
Message-Id: <20190916095121.29506-3-philmd@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Philippe Mathieu-Daudé 2019-09-16 11:51:21 +02:00 committed by Stefan Hajnoczi
parent 794dcb54b3
commit 9f7ad79c16
2 changed files with 5 additions and 0 deletions

View File

@ -112,6 +112,8 @@ Trace events should use types as follows:
Format strings should reflect the types defined in the trace event. Take Format strings should reflect the types defined in the trace event. Take
special care to use PRId64 and PRIu64 for int64_t and uint64_t types, special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
respectively. This ensures portability between 32- and 64-bit platforms. respectively. This ensures portability between 32- and 64-bit platforms.
Format strings must not end with a newline character. It is the responsibility
of backends to adapt line ending for proper logging.
Each event declaration will start with the event name, then its arguments, Each event declaration will start with the event name, then its arguments,
finally a format string for pretty-printing. For example: finally a format string for pretty-printing. For example:

View File

@ -277,6 +277,9 @@ class Event(object):
if fmt.find("%m") != -1 or fmt_trans.find("%m") != -1: if fmt.find("%m") != -1 or fmt_trans.find("%m") != -1:
raise ValueError("Event format '%m' is forbidden, pass the error " raise ValueError("Event format '%m' is forbidden, pass the error "
"as an explicit trace argument") "as an explicit trace argument")
if fmt.endswith(r'\n"'):
raise ValueError("Event format must not end with a newline "
"character")
if len(fmt_trans) > 0: if len(fmt_trans) > 0:
fmt = [fmt_trans, fmt] fmt = [fmt_trans, fmt]