summaryrefslogtreecommitdiffstats
path: root/lldb/examples/customization
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2011-10-28 23:30:28 +0000
committerJohnny Chen <johnny.chen@apple.com>2011-10-28 23:30:28 +0000
commit8763780961ae37b46690e0ee66447847275a0040 (patch)
tree81dbb281eba0cad8bdd969e07896a381f4de734b /lldb/examples/customization
parent7c533b244730c5c8c2ff725e1a81a43df6394b62 (diff)
downloadbcm5719-llvm-8763780961ae37b46690e0ee66447847275a0040.tar.gz
bcm5719-llvm-8763780961ae37b46690e0ee66447847275a0040.zip
Add an example customization directory which uses a binutils.py module to provide
commands to print the binary representaion of an integer. llvm-svn: 143252
Diffstat (limited to 'lldb/examples/customization')
-rw-r--r--lldb/examples/customization/bin-utils/.lldbinit5
-rw-r--r--lldb/examples/customization/bin-utils/README36
-rw-r--r--lldb/examples/customization/bin-utils/binutils.py69
3 files changed, 110 insertions, 0 deletions
diff --git a/lldb/examples/customization/bin-utils/.lldbinit b/lldb/examples/customization/bin-utils/.lldbinit
new file mode 100644
index 00000000000..5a2f6feb94d
--- /dev/null
+++ b/lldb/examples/customization/bin-utils/.lldbinit
@@ -0,0 +1,5 @@
+# So that ~/binutils.py takes precedence.
+script sys.path[:0] = [os.path.expanduser('~')]
+script import binutils
+command script add -f binutils.itob itob
+command script add -f binutils.utob utob
diff --git a/lldb/examples/customization/bin-utils/README b/lldb/examples/customization/bin-utils/README
new file mode 100644
index 00000000000..1352d93b278
--- /dev/null
+++ b/lldb/examples/customization/bin-utils/README
@@ -0,0 +1,36 @@
+Files in this directory:
+
+o .lldbinit:
+
+An example lldb init file that imports the binutils.py module and adds the
+following commands: 'itob' and 'utob'.
+
+o binutils.py:
+
+Python module which provides implementation for the 'itob' and 'utob' commands.
+
+o README:
+
+The file you are reading now.
+
+================================================================================
+The following terminal output shows an interaction with lldb using the .lldbinit
+and the binutils.py files which are located in my HOME directory. The lldb init
+file imports the utils Python module and adds the 'itob' and 'utob' commands.
+
+$ /Volumes/data/lldb/svn/trunk/build/Debug/lldb
+(lldb) help itob
+Convert the integer to print its two's complement representation.
+ args[0] (mandatory) is the integer to be converted
+ args[1] (mandatory) is the bit width of the two's complement representation
+ args[2] (optional) if specified, turns on verbose printing
+Syntax: itob
+(lldb) itob -5 4
+ [1, 0, 1, 1]
+(lldb) itob -5 32 v
+ 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]
+(lldb) utob 0xABCD 32 v
+ 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]
+(lldb)
diff --git a/lldb/examples/customization/bin-utils/binutils.py b/lldb/examples/customization/bin-utils/binutils.py
index 09ef5152c22..313a354ec3a 100644
--- a/lldb/examples/customization/bin-utils/binutils.py
+++ b/lldb/examples/customization/bin-utils/binutils.py
@@ -1,5 +1,7 @@
"Collection of tools for displaying bit representation of numbers."""
+import StringIO
+
def binary(n, width=None):
"""
Return a list of (0|1)'s for the binary representation of n where n >= 0.
@@ -51,3 +53,70 @@ def twos_complement(n, width):
# print twos_complement(-5, 64)
# [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]
+def positions(width):
+ """Helper function returning a list describing the bit positions.
+ Bit positions greater than 99 are truncated to 2 digits, for example,
+ 100 -> 00 and 127 -> 27."""
+ return ['{0:2}'.format(i)[-2:] for i in reversed(range(width))]
+
+
+def utob(debugger, command_line, result, dict):
+ """Convert the unsigned integer to print its binary representation.
+ args[0] (mandatory) is the unsigned integer to be converted
+ args[1] (optional) is the bit width of the binary representation
+ args[2] (optional) if specified, turns on verbose printing"""
+ args = command_line.split()
+ try:
+ n = int(args[0], 0)
+ width = None
+ if len(args) > 1:
+ width = int(args[1], 0)
+ if width < 0:
+ width = 0
+ except:
+ print utob.__doc__
+ return
+
+ if len(args) > 2:
+ verbose = True
+ else:
+ verbose = False
+
+ bits = binary(n, width)
+ if not bits:
+ print "insufficient width value: %d" % width
+ return
+ if verbose and width > 0:
+ pos = positions(width)
+ print ' '+' '.join(pos)
+ print ' %s' % str(bits)
+
+def itob(debugger, command_line, result, dict):
+ """Convert the integer to print its two's complement representation.
+ args[0] (mandatory) is the integer to be converted
+ args[1] (mandatory) is the bit width of the two's complement representation
+ args[2] (optional) if specified, turns on verbose printing"""
+ args = command_line.split()
+ try:
+ n = int(args[0], 0)
+ width = int(args[1], 0)
+ if width < 0:
+ width = 0
+ except:
+ print itob.__doc__
+ return
+
+ if len(args) > 2:
+ verbose = True
+ else:
+ verbose = False
+
+ bits = twos_complement(n, width)
+ if not bits:
+ print "insufficient width value: %d" % width
+ return
+ if verbose and width > 0:
+ pos = positions(width)
+ print ' '+' '.join(pos)
+ print ' %s' % str(bits)
+
OpenPOWER on IntegriCloud