diff options
author | Jason W Kim <jason.w.kim.2009@gmail.com> | 2010-10-19 17:39:10 +0000 |
---|---|---|
committer | Jason W Kim <jason.w.kim.2009@gmail.com> | 2010-10-19 17:39:10 +0000 |
commit | f7d5278fb32b84b6218a222346202ab3af17057c (patch) | |
tree | 3644abbf2801a786ca63af47be0bd5bcbb5aa609 /test/Scripts/common_dump.py | |
parent | 081c34b725980f995be9080eaec24cd3dfaaf065 (diff) |
Fixing r116753 r116756 r116777
The failures in r116753 r116756 were caused by a python issue -
Python likes to append 'L' suffix to stringified numbers if the number
is larger than a machine int. Unfortunately, this causes a divergence of
behavior between 32 and 64 bit python versions.
I re-crafted elf-dump/common_dump to take care of these issues by:
1. always printing 0x (makes for easy sed/regex)
2. always print fixed length (exactly 2 + numBits/4 digits long)
by mod ((2^numBits) - 1)
3. left-padded with '0'
There is a residual common routine that is also used by
macho-dump (dataToHex) , so I left the 'section_data' test values alone.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116823 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Scripts/common_dump.py')
-rw-r--r-- | test/Scripts/common_dump.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/test/Scripts/common_dump.py b/test/Scripts/common_dump.py index 444b389dd0..3d69c3fb27 100644 --- a/test/Scripts/common_dump.py +++ b/test/Scripts/common_dump.py @@ -11,3 +11,36 @@ def dataToHex(d): hex_byte += ' ' bytes.append(hex_byte) return ''.join(bytes).strip() + +def dataToHexUnified(d): + """ Convert the raw data in 'd' to an hex string with a space every 4 bytes. + Each 4byte number is prefixed with 0x for easy sed/rx + Fixme: convert all MC tests to use this routine instead of the above + """ + bytes = [] + for i,c in enumerate(d): + byte = ord(c) + hex_byte = hex(byte)[2:] + if byte <= 0xf: + hex_byte = '0' + hex_byte + if i % 4 == 0: + hex_byte = '0x' + hex_byte + if i % 4 == 3: + hex_byte += ' ' + bytes.append(hex_byte) + return ''.join(bytes).strip() + + +def HexDump(val, numBits=32): + """ + 1. do not print 'L' + 2. Handle negatives and large numbers by mod (2^numBits) + 3. print fixed length, prepend with zeros. + Length is exactly 2+(numBits/4) + 4. Do print 0x Why? + so that they can be easily distinguished using sed/rx + """ + val = val & (( 1 << numBits) - 1) + newFmt = "0x%0" + "%d" % (numBits / 4) + "x" + return newFmt % val + |