0001
0002
0003
0004
0005
0006
0007
0008 from __future__ import print_function
0009
0010 import errno, os
0011
0012 FUTEX_WAIT = 0
0013 FUTEX_WAKE = 1
0014 FUTEX_PRIVATE_FLAG = 128
0015 FUTEX_CLOCK_REALTIME = 256
0016 FUTEX_CMD_MASK = ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
0017
0018 NSECS_PER_SEC = 1000000000
0019
0020 def avg(total, n):
0021 return total / n
0022
0023 def nsecs(secs, nsecs):
0024 return secs * NSECS_PER_SEC + nsecs
0025
0026 def nsecs_secs(nsecs):
0027 return nsecs / NSECS_PER_SEC
0028
0029 def nsecs_nsecs(nsecs):
0030 return nsecs % NSECS_PER_SEC
0031
0032 def nsecs_str(nsecs):
0033 str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)),
0034 return str
0035
0036 def add_stats(dict, key, value):
0037 if key not in dict:
0038 dict[key] = (value, value, value, 1)
0039 else:
0040 min, max, avg, count = dict[key]
0041 if value < min:
0042 min = value
0043 if value > max:
0044 max = value
0045 avg = (avg + value) / 2
0046 dict[key] = (min, max, avg, count + 1)
0047
0048 def clear_term():
0049 print("\x1b[H\x1b[2J")
0050
0051 audit_package_warned = False
0052
0053 try:
0054 import audit
0055 machine_to_id = {
0056 'x86_64': audit.MACH_86_64,
0057 'alpha' : audit.MACH_ALPHA,
0058 'ia64' : audit.MACH_IA64,
0059 'ppc' : audit.MACH_PPC,
0060 'ppc64' : audit.MACH_PPC64,
0061 'ppc64le' : audit.MACH_PPC64LE,
0062 's390' : audit.MACH_S390,
0063 's390x' : audit.MACH_S390X,
0064 'i386' : audit.MACH_X86,
0065 'i586' : audit.MACH_X86,
0066 'i686' : audit.MACH_X86,
0067 }
0068 try:
0069 machine_to_id['armeb'] = audit.MACH_ARMEB
0070 except:
0071 pass
0072 machine_id = machine_to_id[os.uname()[4]]
0073 except:
0074 if not audit_package_warned:
0075 audit_package_warned = True
0076 print("Install the audit-libs-python package to get syscall names.\n"
0077 "For example:\n # apt-get install python-audit (Ubuntu)"
0078 "\n # yum install audit-libs-python (Fedora)"
0079 "\n etc.\n")
0080
0081 def syscall_name(id):
0082 try:
0083 return audit.audit_syscall_to_name(id, machine_id)
0084 except:
0085 return str(id)
0086
0087 def strerror(nr):
0088 try:
0089 return errno.errorcode[abs(nr)]
0090 except:
0091 return "Unknown %d errno" % nr