Skip to content

Commit a4220da

Browse files
author
peace.lee
committed
Fixing dependency trace bug caused by syscall up
1 parent 6cd1775 commit a4220da

1 file changed

Lines changed: 55 additions & 47 deletions

File tree

guider.py

Lines changed: 55 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8422,52 +8422,57 @@ def runRecordStartCmd(self):
84228422
if self.cmdList["sched/sched_process_wait"]:
84238423
SystemManager.writeCmd('sched/sched_process_wait/enable', '1')
84248424

8425+
# enable all irq events #
84258426
if self.cmdList["irq"]:
84268427
SystemManager.writeCmd('irq/enable', '1')
84278428

84288429
# options for dependency tracing #
8429-
# toDo: support sys_recv systemcall for x86, x64 #
8430-
if SystemManager.depEnable and self.cmdList["raw_syscalls/sys_enter"]:
8431-
cmd = "(id == %s || id == %s || id == %s || id == %s || id == %s || id == %s)" % \
8432-
(ConfigManager.sysList.index("sys_write"), \
8433-
ConfigManager.sysList.index("sys_poll"), \
8434-
ConfigManager.sysList.index("sys_epoll_wait"), \
8435-
ConfigManager.sysList.index("sys_select"), \
8436-
ConfigManager.sysList.index("sys_recv"), \
8437-
ConfigManager.sysList.index("sys_futex"))
8438-
8439-
SystemManager.writeCmd('raw_syscalls/sys_enter/filter', cmd)
8440-
SystemManager.writeCmd('raw_syscalls/sys_enter/enable', '1')
8430+
if SystemManager.depEnable is False and SystemManager.futexEnable is False:
8431+
SystemManager.writeCmd('raw_syscalls/sys_enter/filter', '0')
8432+
SystemManager.writeCmd('raw_syscalls/sys_enter/enable', '0')
8433+
elif SystemManager.depEnable:
8434+
# toDo: support sys_recv systemcall for x86, x64 #
8435+
if SystemManager.arch == 'arm':
8436+
ecmd = \
8437+
"(id == %s || id == %s || id == %s || id == %s || id == %s || id == %s)" % \
8438+
(ConfigManager.sysList.index("sys_write"), \
8439+
ConfigManager.sysList.index("sys_poll"), \
8440+
ConfigManager.sysList.index("sys_epoll_wait"), \
8441+
ConfigManager.sysList.index("sys_select"), \
8442+
ConfigManager.sysList.index("sys_recv"), \
8443+
ConfigManager.sysList.index("sys_futex"))
8444+
rcmd = \
8445+
"((id == %s || id == %s || id == %s || id == %s || id == %s || id == %s) && ret > 0)" % \
8446+
(ConfigManager.sysList.index("sys_write"), \
8447+
ConfigManager.sysList.index("sys_poll"), \
8448+
ConfigManager.sysList.index("sys_epoll_wait"), \
8449+
ConfigManager.sysList.index("sys_select"), \
8450+
ConfigManager.sysList.index("sys_recv"), \
8451+
ConfigManager.sysList.index("sys_futex"))
8452+
8453+
if self.cmdList["sched/sched_switch"]:
8454+
SystemManager.writeCmd('sched/sched_switch/enable', '1')
8455+
if self.cmdList["sched/sched_wakeup"]:
8456+
SystemManager.writeCmd('sched/sched_wakeup/enable', '1')
8457+
8458+
SystemManager.writeCmd('raw_syscalls/sys_enter/filter', ecmd)
8459+
SystemManager.writeCmd('raw_syscalls/sys_enter/enable', '1')
8460+
SystemManager.writeCmd('raw_syscalls/sys_exit/filter', rcmd)
8461+
SystemManager.writeCmd('raw_syscalls/sys_exit/enable', '1')
8462+
else:
8463+
SystemManager.printError(\
8464+
"tracing thread dependecy is not supported yet except for ARM")
8465+
sys.exit(0)
84418466
elif SystemManager.futexEnable:
8442-
cmd = "(id == %s)" % (ConfigManager.sysList.index("sys_futex"))
8443-
SystemManager.writeCmd('raw_syscalls/sys_enter/filter', cmd)
8467+
ecmd = "(id == %s)" % (ConfigManager.sysList.index("sys_futex"))
8468+
SystemManager.writeCmd('raw_syscalls/sys_enter/filter', ecmd)
84448469
SystemManager.writeCmd('raw_syscalls/sys_enter/enable', '1')
84458470
self.cmdList["raw_syscalls/sys_enter"] = True
8446-
else:
8447-
SystemManager.writeCmd('raw_syscalls/sys_enter/filter', '0')
8448-
SystemManager.writeCmd('raw_syscalls/sys_enter/enable', '0')
84498471

8450-
# options for dependency tracing #
8451-
if SystemManager.depEnable and self.cmdList["raw_syscalls/sys_exit"]:
8452-
cmd = "((id == %s || id == %s || id == %s || id == %s || id == %s || id == %s) && ret > 0)" % \
8453-
(ConfigManager.sysList.index("sys_write"), \
8454-
ConfigManager.sysList.index("sys_poll"), \
8455-
ConfigManager.sysList.index("sys_epoll_wait"), \
8456-
ConfigManager.sysList.index("sys_select"), \
8457-
ConfigManager.sysList.index("sys_recv"), \
8458-
ConfigManager.sysList.index("sys_futex"))
8459-
8460-
SystemManager.writeCmd('raw_syscalls/sys_exit/filter', cmd)
8461-
SystemManager.writeCmd('raw_syscalls/sys_exit/enable', '1')
8462-
elif SystemManager.futexEnable:
8463-
cmd = "(id == %s && ret == 0)" % (ConfigManager.sysList.index("sys_futex"))
8464-
SystemManager.writeCmd('raw_syscalls/sys_exit/filter', cmd)
8472+
rcmd = "(id == %s && ret == 0)" % (ConfigManager.sysList.index("sys_futex"))
8473+
SystemManager.writeCmd('raw_syscalls/sys_exit/filter', rcmd)
84658474
SystemManager.writeCmd('raw_syscalls/sys_exit/enable', '1')
84668475
self.cmdList["raw_syscalls/sys_exit"] = True
8467-
else:
8468-
SystemManager.writeCmd('raw_syscalls/sys_exit/filter', '0')
8469-
SystemManager.writeCmd('raw_syscalls/sys_exit/enable', '0')
8470-
84718476

84728477
# options for systemcall tracing #
84738478
if self.cmdList["raw_syscalls"]:
@@ -14507,17 +14512,20 @@ def parse(self, string):
1450714512
if m is not None:
1450814513
ed = m.groupdict()
1450914514

14510-
# set status of thread #
14511-
lastTid = self.lastTidPerCore[ed['core']]
14512-
self.threadData[lastTid]['stop'] = float(ed['time'])
14513-
self.threadData[lastTid]['lastStatus'] = 'S'
14514-
14515-
# set status of core #
14516-
scoreId = '0[%s]' % ed['core']
14517-
self.threadData[scoreId]['offCnt'] += 1
14518-
self.threadData[scoreId]['lastOff'] = float(ed['time'])
14519-
self.threadData[scoreId]['start'] = float(ed['time'])
14520-
self.threadData[scoreId]['lastStatus'] = 'R'
14515+
try:
14516+
# set status of thread #
14517+
lastTid = self.lastTidPerCore[ed['core']]
14518+
self.threadData[lastTid]['stop'] = float(ed['time'])
14519+
self.threadData[lastTid]['lastStatus'] = 'S'
14520+
14521+
# set status of core #
14522+
scoreId = '0[%s]' % ed['core']
14523+
self.threadData[scoreId]['offCnt'] += 1
14524+
self.threadData[scoreId]['lastOff'] = float(ed['time'])
14525+
self.threadData[scoreId]['start'] = float(ed['time'])
14526+
self.threadData[scoreId]['lastStatus'] = 'R'
14527+
except:
14528+
pass
1452114529

1452214530
# save consol log #
1452314531
self.consoleData.append([d['thread'], core, time, etc])

0 commit comments

Comments
 (0)