Skip to content
Snippets Groups Projects
Commit f21d248c authored by Satyajit Desai's avatar Satyajit Desai
Browse files

lrdp-v2: Handle struct name changes made in 4.4 kernel

    This commit addresses the struct name changes from 3.18 to
    4.4 kernel. We look-up the struct definition via gdb to
    generate the formats.txt file which is used by QTF to generate
    the Ftrace log

Change-Id: Ia76443e16d6c91dd36a8bd04367b10aa0fcc2c89
parent 53e029b4
No related branches found
No related tags found
No related merge requests found
...@@ -80,11 +80,18 @@ qdss_tag_to_field_name = { ...@@ -80,11 +80,18 @@ qdss_tag_to_field_name = {
class DebugImage_v2(): class DebugImage_v2():
def __init__(self): def __init__(self, ramdump):
self.qdss = QDSSDump() self.qdss = QDSSDump()
self.dump_type_lookup_table = [] self.dump_type_lookup_table = []
self.dump_table_id_lookup_table = [] self.dump_table_id_lookup_table = []
self.dump_data_id_lookup_table = [] self.dump_data_id_lookup_table = []
version = re.findall(r'\d+', ramdump.version)
if int(version[0]) > 3:
self.event_call = 'struct trace_event_call'
self.event_class = 'struct trace_event_class'
else:
self.event_call = 'struct ftrace_event_call'
self.event_class = 'struct ftrace_event_class'
def parse_cpu_ctx(self, version, start, end, client_id, ram_dump): def parse_cpu_ctx(self, version, start, end, client_id, ram_dump):
core = client_id - client.MSM_DUMP_DATA_CPU_CTX core = client_id - client.MSM_DUMP_DATA_CPU_CTX
...@@ -202,23 +209,23 @@ class DebugImage_v2(): ...@@ -202,23 +209,23 @@ 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):
event_offset = ram_dump.field_offset('struct ftrace_event_call', 'event') event_offset = ram_dump.field_offset(self.event_call, 'event')
fmt_offset = ram_dump.field_offset('struct ftrace_event_call', 'print_fmt') fmt_offset = ram_dump.field_offset(self.event_call,'print_fmt')
class_offset = ram_dump.field_offset('struct ftrace_event_call', 'class') class_offset = ram_dump.field_offset(self.event_call, 'class')
flags_offset = ram_dump.field_offset('struct ftrace_event_call', 'flags') flags_offset = ram_dump.field_offset(self.event_call, 'flags')
flags = ram_dump.read_word(ftrace_list + flags_offset) flags = ram_dump.read_word(ftrace_list + flags_offset)
if (ram_dump.kernel_version >= (3, 18) and (flags & TRACE_EVENT_FL_TRACEPOINT)): 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_offset = ram_dump.field_offset(self.event_call, 'tp')
tp_name_offset = ram_dump.field_offset('struct tracepoint', 'name') tp_name_offset = ram_dump.field_offset('struct tracepoint', 'name')
tp = ram_dump.read_word(ftrace_list + tp_offset) tp = ram_dump.read_word(ftrace_list + tp_offset)
name = ram_dump.read_word(tp + tp_name_offset) name = ram_dump.read_word(tp + tp_name_offset)
else: else:
name_offset = ram_dump.field_offset('struct ftrace_event_call', 'name') name_offset = ram_dump.field_offset(self.event_call, 'name')
name = ram_dump.read_word(ftrace_list + name_offset) 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(self.event_class, 'fields')
common_field_list = ram_dump.address_of('ftrace_common_fields') common_field_list = ram_dump.address_of('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')
...@@ -248,7 +255,7 @@ class DebugImage_v2(): ...@@ -248,7 +255,7 @@ class DebugImage_v2():
self.formats_out = formats_out self.formats_out = formats_out
ftrace_events_list = ram_dump.address_of('ftrace_events') ftrace_events_list = ram_dump.address_of('ftrace_events')
next_offset = ram_dump.field_offset('struct ftrace_event_call', 'list') next_offset = ram_dump.field_offset(self.event_call, 'list')
list_walker = llist.ListWalker(ram_dump, ftrace_events_list, next_offset) list_walker = llist.ListWalker(ram_dump, ftrace_events_list, next_offset)
list_walker.walk_prev(ftrace_events_list, self.ftrace_events_func, ram_dump) list_walker.walk_prev(ftrace_events_list, self.ftrace_events_func, ram_dump)
......
...@@ -202,7 +202,7 @@ class DebugImage(RamParser): ...@@ -202,7 +202,7 @@ class DebugImage(RamParser):
if self.ramdump.address_of('mem_dump_data'): if self.ramdump.address_of('mem_dump_data'):
self.parse_dump() self.parse_dump()
elif self.ramdump.address_of('memdump'): elif self.ramdump.address_of('memdump'):
regs = DebugImage_v2() regs = DebugImage_v2(self.ramdump)
regs.parse_dump_v2(self.ramdump) regs.parse_dump_v2(self.ramdump)
else: else:
print_out_str( print_out_str(
......
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