Skip to content
Snippets Groups Projects
Commit cb8a25ba authored by Sarangdhar Joshi's avatar Sarangdhar Joshi
Browse files

lrdpv2: Fix format.txt dumping support for 3.18 kernel

ftrace_event_call structure is changed on 3.18 kernel. This
structure is used to dump formats.txt so that ftrace logs can be
parsed. Fix the parser to honor new structure format.

Change-Id: I26354a7048fe6d6180c24b95f840291d02ab2329
parent 161d5cf3
No related branches found
No related tags found
No related merge requests found
...@@ -28,6 +28,7 @@ from cachedumplib import lookup_cache_type ...@@ -28,6 +28,7 @@ from cachedumplib import lookup_cache_type
MEMDUMPV2_MAGIC = 0x42445953 MEMDUMPV2_MAGIC = 0x42445953
MAX_NUM_ENTRIES = 0x130 MAX_NUM_ENTRIES = 0x130
TRACE_EVENT_FL_TRACEPOINT = 0x40
class client(object): class client(object):
MSM_DUMP_DATA_CPU_CTX = 0x00 MSM_DUMP_DATA_CPU_CTX = 0x00
...@@ -181,16 +182,26 @@ class DebugImage_v2(): ...@@ -181,16 +182,26 @@ class DebugImage_v2():
self.formats_out.write("\tfield:{0} {1};\toffset:{2};\tsize:{3};\tsigned:{4};\n".format(type_str, field_name, offset, size, signed)) self.formats_out.write("\tfield:{0} {1};\toffset:{2};\tsize:{3};\tsigned:{4};\n".format(type_str, field_name, offset, size, signed))
def ftrace_events_func(self, ftrace_list, ram_dump): def ftrace_events_func(self, ftrace_list, ram_dump):
name_offset = ram_dump.field_offset('struct ftrace_event_call', 'name')
event_offset = ram_dump.field_offset('struct ftrace_event_call', 'event') event_offset = ram_dump.field_offset('struct ftrace_event_call', 'event')
fmt_offset = ram_dump.field_offset('struct ftrace_event_call', 'print_fmt') fmt_offset = ram_dump.field_offset('struct ftrace_event_call', 'print_fmt')
class_offset = ram_dump.field_offset('struct ftrace_event_call', 'class') class_offset = ram_dump.field_offset('struct ftrace_event_call', 'class')
flags_offset = ram_dump.field_offset('struct ftrace_event_call', 'flags')
flags = ram_dump.read_word(ftrace_list + flags_offset)
if (ram_dump.kernel_version >= (3, 18) and (flags & TRACE_EVENT_FL_TRACEPOINT)):
tp_offset = ram_dump.field_offset('struct ftrace_event_call', 'tp')
tp_name_offset = ram_dump.field_offset('struct tracepoint', 'name')
tp = ram_dump.read_word(ftrace_list + tp_offset)
name = ram_dump.read_word(tp + tp_name_offset)
else:
name_offset = ram_dump.field_offset('struct ftrace_event_call', 'name')
name = ram_dump.read_word(ftrace_list + name_offset)
type_offset = ram_dump.field_offset('struct trace_event', 'type') type_offset = ram_dump.field_offset('struct trace_event', 'type')
fields_offset = ram_dump.field_offset('struct ftrace_event_class', 'fields') fields_offset = ram_dump.field_offset('struct ftrace_event_class', 'fields')
common_field_list = ram_dump.addr_lookup('ftrace_common_fields') common_field_list = ram_dump.addr_lookup('ftrace_common_fields')
field_next_offset = ram_dump.field_offset('struct ftrace_event_field', 'link') field_next_offset = ram_dump.field_offset('struct ftrace_event_field', 'link')
name = ram_dump.read_word(ftrace_list + name_offset)
name_str = ram_dump.read_cstring(name, 512) name_str = ram_dump.read_cstring(name, 512)
event_id = ram_dump.read_word(ftrace_list + event_offset + type_offset) event_id = ram_dump.read_word(ftrace_list + event_offset + type_offset)
fmt = ram_dump.read_word(ftrace_list + fmt_offset) fmt = ram_dump.read_word(ftrace_list + fmt_offset)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment