nudge (#8214)
This commit is contained in:
@ -83,21 +83,32 @@ if __name__ == '__main__':
|
|||||||
exits = [] # instruction counts at each call exit
|
exits = [] # instruction counts at each call exit
|
||||||
call_nums = [] # used to match up exits to calls
|
call_nums = [] # used to match up exits to calls
|
||||||
frame = 1
|
frame = 1
|
||||||
|
max_frame = 0
|
||||||
num_calls = 0
|
num_calls = 0
|
||||||
line = file_object.readline()
|
line = file_object.readline()
|
||||||
while line:
|
while line:
|
||||||
|
# print line
|
||||||
key, match = parse_line(rxs_call, line)
|
key, match = parse_line(rxs_call, line)
|
||||||
if key == 'call':
|
if key == 'call':
|
||||||
ixs_count = int(match.group(1))
|
ixs_count = int(match.group(1))
|
||||||
|
calling_pc = int(match.group(2))
|
||||||
|
line = file_object.readline()
|
||||||
|
key, match = parse_line(rxs_called, line)
|
||||||
|
while key != 'pc':
|
||||||
line = file_object.readline()
|
line = file_object.readline()
|
||||||
key, match = parse_line(rxs_called, line)
|
key, match = parse_line(rxs_called, line)
|
||||||
if key == 'pc':
|
|
||||||
called_pc = int(match.group(1))
|
called_pc = int(match.group(1))
|
||||||
|
if calling_pc + 1 == called_pc:
|
||||||
|
calls.append((ixs_count, frame, 'Solana system call'))
|
||||||
|
exits.append(ixs_count)
|
||||||
|
num_calls += 1
|
||||||
|
else:
|
||||||
calls.append((ixs_count, frame, symbols[called_pc]))
|
calls.append((ixs_count, frame, symbols[called_pc]))
|
||||||
call_nums.append(num_calls)
|
call_nums.append(num_calls)
|
||||||
exits.append(0)
|
exits.append(0)
|
||||||
num_calls += 1
|
num_calls += 1
|
||||||
frame += 1
|
frame += 1
|
||||||
|
max_frame = max(frame, max_frame)
|
||||||
else:
|
else:
|
||||||
if key == 'entry':
|
if key == 'entry':
|
||||||
pc = int(match.group(1))
|
pc = int(match.group(1))
|
||||||
@ -111,8 +122,18 @@ if __name__ == '__main__':
|
|||||||
exits[num] = ixs_count
|
exits[num] = ixs_count
|
||||||
frame -= 1
|
frame -= 1
|
||||||
line = file_object.readline()
|
line = file_object.readline()
|
||||||
|
if len(calls) == 0:
|
||||||
|
sys.exit("Error: No valid trace in : " + tracepath)
|
||||||
|
|
||||||
# print the call trace with instruction counts for each call
|
# print the call trace with instruction counts for each call
|
||||||
|
print "Max frame depth: ", max_frame - 1
|
||||||
|
print "Call trace:"
|
||||||
|
print "Ins num (Ins count): Symbol called"
|
||||||
for call, exit in zip(calls, exits):
|
for call, exit in zip(calls, exits):
|
||||||
print("%7d: %s %s" % (exit - call[0], ' | ' * call[1], call[2]))
|
if exit == 0:
|
||||||
|
count = " No return"
|
||||||
|
else:
|
||||||
|
count = "%9d" % (exit - call[0])
|
||||||
|
print("%9d (%s): %s %s" % (call[0], count, ' | ' * call[1], call[2]))
|
||||||
|
if frame != 0:
|
||||||
|
print "Error: Program did not exit gracefully"
|
||||||
|
Reference in New Issue
Block a user