Skip to content
Snippets Groups Projects
Commit 43d98035 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "linux-ramdump-parser-v2: Use a more generic function for rtb parsing"

parents beac9e25 b9327ffa
No related branches found
No related tags found
No related merge requests found
......@@ -51,44 +51,44 @@ class RTB(RamParser):
symname = 'Unknown function'
return symname
def print_none(self, rtbout, rtb_ptr, logtype, data_offset, caller_offset):
def print_none(self, rtbout, rtb_ptr, logtype):
rtbout.write('{0} No data\n'.format(logtype).encode('ascii', 'ignore'))
def print_readlwritel(self, rtbout, rtb_ptr, logtype, data_offset, caller_offset):
data = self.ramdump.read_u64(rtb_ptr + data_offset)
caller = self.ramdump.read_u64(rtb_ptr + caller_offset)
def print_readlwritel(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller)
line = self.get_caller(caller)
rtbout.write('{0} from address {1:x} called from addr {2:x} {3} {4}\n'.format(
logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_logbuf(self, rtbout, rtb_ptr, logtype, data_offset, caller_offset):
data = self.ramdump.read_u64(rtb_ptr + data_offset)
caller = self.ramdump.read_u64(rtb_ptr + caller_offset)
def print_logbuf(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller)
line = self.get_caller(caller)
rtbout.write('{0} log end {1:x} called from addr {2:x} {3} {4}\n'.format(
logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_hotplug(self, rtbout, rtb_ptr, logtype, data_offset, caller_offset):
data = self.ramdump.read_u64(rtb_ptr + data_offset)
caller = self.ramdump.read_u64(rtb_ptr + caller_offset)
def print_hotplug(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller)
line = self.get_caller(caller)
rtbout.write('{0} cpu data {1:x} called from addr {2:x} {3} {4}\n'.format(
logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_ctxid(self, rtbout, rtb_ptr, logtype, data_offset, caller_offset):
data = self.ramdump.read_u64(rtb_ptr + data_offset)
caller = self.ramdump.read_u64(rtb_ptr + caller_offset)
def print_ctxid(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
func = self.get_fun_name(caller)
line = self.get_caller(caller)
rtbout.write('{0} context id {1:x} called from addr {2:x} {3} {4}\n'.format(
logtype, data, caller, func, line).encode('ascii', 'ignore'))
def print_timestamp(self, rtbout, rtb_ptr, logtype, data_offset, caller_offset):
data = self.ramdump.read_u64(rtb_ptr + data_offset)
caller = self.ramdump.read_u64(rtb_ptr + caller_offset)
def print_timestamp(self, rtbout, rtb_ptr, logtype):
data = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'data')
caller = self.ramdump.read_structure_field(rtb_ptr, 'struct msm_rtb_layout', 'caller')
rtbout.write('{0} Timestamp: {1:x}{2:x}\n'.format(
logtype, data, caller).encode('ascii', 'ignore'))
......@@ -107,12 +107,6 @@ class RTB(RamParser):
rtb_entry_offset = self.ramdump.field_offset(
'struct msm_rtb_state', 'rtb')
idx_offset = self.ramdump.field_offset('struct msm_rtb_layout', 'idx')
caller_offset = self.ramdump.field_offset(
'struct msm_rtb_layout', 'caller')
log_type_offset = self.ramdump.field_offset(
'struct msm_rtb_layout', 'log_type')
data_offset = self.ramdump.field_offset(
'struct msm_rtb_layout', 'data')
rtb_entry_size = self.ramdump.sizeof('struct msm_rtb_layout')
step_size = self.ramdump.read_u32(rtb + step_size_offset)
total_entries = self.ramdump.read_int(rtb + nentries_offset)
......@@ -152,10 +146,6 @@ class RTB(RamParser):
'struct msm_rtb_layout', 'log_type')
rtb_idx_offset = self.ramdump.field_offset(
'struct msm_rtb_layout', 'idx')
rtb_data_offset = self.ramdump.field_offset(
'struct msm_rtb_layout', 'data')
rtb_caller_offset = self.ramdump.field_offset(
'struct msm_rtb_layout', 'caller')
while True:
ptr = rtb_read_ptr + next_entry * rtb_entry_size
stamp = self.ramdump.read_int(ptr + rtb_idx_offset)
......@@ -175,8 +165,7 @@ class RTB(RamParser):
rtb_data_offset, rtb_caller_offset)
else:
func = print_table[name_str]
getattr(RTB, func)(self, rtb_out, ptr, name_str,
rtb_data_offset, rtb_caller_offset)
getattr(RTB, func)(self, rtb_out, ptr, name_str)
if next_entry == last:
stop = 1
next_entry = (next_entry + step_size) & mask
......
......@@ -1090,6 +1090,15 @@ class RamDump():
else:
return s[0]
# reads a 4 or 8 byte field from a structure
def read_structure_field(self, address, struct_name, field):
size = self.sizeof("(({0} *)0)->{1}".format(struct_name, field))
if size == 4:
return self.read_u32(address + self.field_offset(struct_name, field))
if size == 8:
return self.read_u64(address + self.field_offset(struct_name, field))
return None
def read_cstring(self, address, max_length, virtual=True, cpu=None, trace=False):
addr = address
if virtual:
......
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