output-as-markers.py 908 B

1234567891011121314151617181920212223242526
  1. """
  2. output-as-markers.py
  3. Record application output to stdout/stderr as markers.
  4. Arguments are value for A, value for B, and prefix for string in marker data.
  5. """
  6. import sim, syscall_strings
  7. class OutputAsMarkers:
  8. def setup(self, args):
  9. args = dict(enumerate((args or '').split(':')))
  10. self.value_a = int(args.get(0, 0) or 0)
  11. self.value_b = int(args.get(1, 0))
  12. self.prefix = args.get(2, '')
  13. def hook_syscall_enter(self, threadid, coreid, time, syscall_number, args):
  14. syscall_name = syscall_strings.syscall_strings.get(syscall_number, 'unknown')
  15. if syscall_name == 'write':
  16. fd, ptr, size = args[:3]
  17. if fd == 1 or fd == 2:
  18. prefix = {1: 'stdout', 2: 'stderr'}[fd]
  19. data = sim.mem.read(coreid, ptr, size)
  20. sim.stats.marker(threadid, coreid, self.value_a, self.value_b, '%s%s: %s' % (self.prefix, prefix, data))
  21. sim.util.register(OutputAsMarkers())