diff options
| author | Johnny Chen <johnny.chen@apple.com> | 2011-10-28 23:30:28 +0000 |
|---|---|---|
| committer | Johnny Chen <johnny.chen@apple.com> | 2011-10-28 23:30:28 +0000 |
| commit | 8763780961ae37b46690e0ee66447847275a0040 (patch) | |
| tree | 81dbb281eba0cad8bdd969e07896a381f4de734b /lldb/examples/customization | |
| parent | 7c533b244730c5c8c2ff725e1a81a43df6394b62 (diff) | |
| download | bcm5719-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/.lldbinit | 5 | ||||
| -rw-r--r-- | lldb/examples/customization/bin-utils/README | 36 | ||||
| -rw-r--r-- | lldb/examples/customization/bin-utils/binutils.py | 69 |
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) + |

