summaryrefslogtreecommitdiffstats
path: root/safety
diff options
context:
space:
mode:
authorjistone <jistone>2006-03-14 01:00:34 +0000
committerjistone <jistone>2006-03-14 01:00:34 +0000
commit3519ee2a4a1bd00afe919b24628220711cdfc5ab (patch)
tree60c24352ef88b663d7559d9843f9745c9bd5af08 /safety
parent62efd5e271d742d082975a3775b63d65df0dfd4e (diff)
downloadsystemtap-steved-3519ee2a4a1bd00afe919b24628220711cdfc5ab.tar.gz
systemtap-steved-3519ee2a4a1bd00afe919b24628220711cdfc5ab.tar.xz
systemtap-steved-3519ee2a4a1bd00afe919b24628220711cdfc5ab.zip
2006-03-13 Josh Stone <joshua.i.stone@intel.com>
* safety/safety.py: Support IA64 disassembly matching. * safety/data/opcodes-ia64: new opcode rules for IA64. * safety/data/references: Add references used by example scripts when compiled for IA64.
Diffstat (limited to 'safety')
-rw-r--r--safety/data/opcodes-ia6489
-rw-r--r--safety/data/references12
-rwxr-xr-xsafety/safety.py9
3 files changed, 108 insertions, 2 deletions
diff --git a/safety/data/opcodes-ia64 b/safety/data/opcodes-ia64
new file mode 100644
index 00000000..edb1792e
--- /dev/null
+++ b/safety/data/opcodes-ia64
@@ -0,0 +1,89 @@
+add[sl]?
+addp4
+alloc
+and
+andcm
+br(?:\.cond)?(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+br\.cond(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+br\.call(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+br\.ret(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+br\.cloop(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+br\.ctop(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+br\.cexit(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+br\.wtop(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+br\.wexit(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+brl(?:\.cond)?(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+brl\.call(?:\.(?:spnt|sptk|dpnt|dptk))?(?:\.(?:few|many))?(?:\.clr)?
+brp(?:\.(?:sptk|loop|exit|dptk))(?:\.imp)?
+brp\.ret(?:\.(?:sptk|loop|exit|dptk))(?:\.imp)?
+chk\.s(?:\.[im])?
+chk\.a\.(?:clr|nc)
+clrrrb
+cmp\.(?:eq|ne|l[te]u?|g[te]u?)(?:\.(?:unc|or|and|or.andcm|orcm|andcm|and.orcm))?
+cmp4\.(?:eq|ne|l[te]u?|g[te]u?)(?:\.(?:unc|or|and|or.andcm|orcm|andcm|and.orcm))?
+cmpxchg[1248]\.(?:acq|rel)(?:\.nt[1a])?
+cmp8xchg16\.(?:acq|rel)(?:\.nt[1a])?
+cover
+czx[12]\.[lr]
+dep(?:\.z)?
+extr(?:\.u)?
+fetchadd[48]\.(?:acq|rel)(?:\.nt[1a])?
+getf\.(?:s|d|exp|sig)
+hint(?:\.[ibmfx])?
+ld[1248](?:\.(?:s|a|sa|c\.nc|c\.clr|c\.clr\.acq|acq|bias))?(?:\.nt[1a])?
+ld8\.fill(?:\.nt[1a])?
+ld16(?:\.acq)?(?:\.nt[1a])?
+ldf8(?:\.(?:s|a|sa|c\.nc|c\.clr))?(?:\.nt[1a])?
+lfetch(?:.fault)?(?:\.excl)?(?:\.nt[12a])?
+mf
+mix[124]\.[lr]
+mov(?:\.[im])?
+mov(?:\.ret)?(?:\.sptk|\.dptk)?(?:\.imp)?
+movl
+mux[12]
+nop(?:\.[ibmfx])?
+or
+pack2\.[us]ss
+pack4.sss
+padd[124]
+padd[12]\.(?:sss|uus|uuu)
+pavg[12](?:\.raz)
+pavgsub[12]
+pcmp[124]\.(?:eq|gt)
+pmax1\.u
+pmax2
+pmin1\.u
+pmin2
+pmpy2\.[rl]
+pmpyshr2(?:\.u)?
+popcnt
+psad1
+pshl[24]
+pshladd2
+pshr[24](?:\.u)?
+pshradd2
+psub[124]
+psub[12]\.(?:sss|uus|uuu)
+rsm
+setf\.(?:s|d|exp|sig)
+shl
+shladd
+shladdp4
+shr(?:\.u)?
+shrp
+srlz\.[id]
+ssm
+st[1248](?:\.rel)?(?:\.nta)?
+st16(?:\.rel)?(?:\.nta)?
+st8\.spill(?:\.nta)?
+stf8(?:\.nta)?
+sub
+sxt[124]
+tbit\.n?z(?:\.(?:unc|or|and|or.andcm|orcm|andcm|and.orcm))?
+tnat\.n?z(?:\.(?:unc|or|and|or.andcm|orcm|andcm|and.orcm))?
+unpack[124]\.[hl]
+xchg[1248](?:\.nt[1a])?
+xma\.[lh]u?
+xmpy\.[lh]u?
+xor
+zxt[124]
diff --git a/safety/data/references b/safety/data/references
index dc674417..bfea8e86 100644
--- a/safety/data/references
+++ b/safety/data/references
@@ -6,6 +6,7 @@ __const_udelay
copy_from_user
__copy_from_user_ll
copy_to_user
+__copy_user
copy_user_generic
cpu_callout_map
cpu_online_map
@@ -13,8 +14,10 @@ cpu_possible_map
cpu_to_node
create_proc_entry
del_timer_sync
+__divdi3
do_gettimeofday
__down_failed
+__find_next_bit
find_next_bit
finish_wait
free_percpu
@@ -29,8 +32,10 @@ kmalloc_node
kmem_cache_alloc
malloc_sizes
memcmp
+memcpy
memset
__might_sleep
+__moddi3
__mod_timer
mod_timer
msleep
@@ -41,6 +46,7 @@ param_get_string
param_set_copystring
param_set_int
param_set_long
+per_cpu__cpu_info
prepare_to_wait
printk
proc_mkdir
@@ -67,13 +73,19 @@ sprintf
strcmp
strlcat
strlcpy
+strlen
strncmp
strncpy
+__strncpy_from_user
strsep
+__udivdi3
+__umoddi3
unregister_kprobe
unregister_kretprobe
unregister_profile_notifier
unregister_timer_hook
+unw_init_running
+unw_unwind
__up_wakeup
vscnprintf
vsnprintf
diff --git a/safety/safety.py b/safety/safety.py
index f02c30b3..8607ce75 100755
--- a/safety/safety.py
+++ b/safety/safety.py
@@ -173,8 +173,13 @@ class StaticSafety:
skip_ud2a = [0]
ignore_re = compile(r'^$|^\s+\.{3}$|^.*Disassembly of section|^.*file format')
- opc = r'(?:(?:lock )|(?:repn?[ze]? )|(?:rex\w+ ))*(\w+)\b'
- opc_re = compile(r'^[A-Fa-f\d]+ <([^>]+)> %s' % opc)
+ if self.__arch == 'ia64':
+ opc = r'(?:\[[IBFLMX]{3}\]\s+)?(?:\(p\d\d\)\s+)?([\w.]+)\b'
+ elif self.__arch == 'x86_64' or self.__arch == 'i686':
+ opc = r'(?:lock\s+)?|(?:repn?[ze]?\s+)?|(?:rex\w+\s+)?(\w+)\b'
+ else:
+ opc = r'(\w+)\b'
+ opc_re = compile(r'^[A-Fa-f\d]+\s+<([^>]+)>\s+%s' % opc)
def check(line):
m = ignore_re.match(line)
if m: