aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/objdump
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-05-21 04:36:41 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-05-21 04:36:41 +0000
commit6f290d8f9e9d7faac295cb51fc96884a18f4ded4 (patch)
tree46e7d426abc0c9f06ac472ac6f7f9e661b5d78cb /scripts/objdump
parenta55960edd4dcd7535526de8d2277642522aa0209 (diff)
downloadklee-6f290d8f9e9d7faac295cb51fc96884a18f4ded4.tar.gz
Initial KLEE checkin.
- Lots more tweaks, documentation, and web page content is needed, but this should compile & work on OS X & Linux. git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@72205 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'scripts/objdump')
-rwxr-xr-xscripts/objdump41
1 files changed, 41 insertions, 0 deletions
diff --git a/scripts/objdump b/scripts/objdump
new file mode 100755
index 00000000..45fe6384
--- /dev/null
+++ b/scripts/objdump
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+
+"""
+An objdump wrapper for use with klee & kcachegrind.
+
+This allows klee to output instruction level statistic information which
+kcachegrind can then display by intercepting kcachegrind's calls to objdump
+and returning the LLVM instructions in a format that it can parse.
+"""
+
+import os, sys
+
+kActualObjdump = os.path.join(os.path.dirname(__file__),'objdump.actual')
+if not os.path.exists(kActualObjdump):
+ for path in ['/usr/bin','/usr/local/bin']:
+ p = os.path.join(path,'objdump')
+ if os.path.exists(p):
+ kActualObjdump = p
+
+def fakeObjdumpOutput(file, start, end):
+ print 'Using fake objdump output:\n\n'
+
+ lines = open(file).readlines()
+ for i in range(max(0,start-1),min(end-1,len(lines))):
+ print '%x: _ %s'%(i+1,lines[i])
+
+def main(args):
+ # exact pattern match kcachegrind's calling sequence
+ if (len(args)>=6 and
+ args[1]=='-C' and
+ args[2]=='-d' and
+ args[3].startswith('--start-address=') and
+ args[4].startswith('--stop-address=') and
+ args[5].endswith('.ll')):
+ fakeObjdumpOutput(args[5], eval(args[3].split('=',1)[1]), eval(args[4].split('=',1)[1]))
+ else:
+ os.execv(kActualObjdump, args)
+ raise RuntimeError
+
+if __name__=='__main__':
+ main(sys.argv)