summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz
wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data')
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py58
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py78
2 files changed, 136 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py
new file mode 100644
index 00000000000..8e2bc4ac45d
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py
@@ -0,0 +1,58 @@
+"""
+Use lldb Python API to disassemble raw machine code bytes
+"""
+
+from __future__ import print_function
+
+
+import re
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class DisassembleRawDataTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ @add_test_categories(['pyapi'])
+ @no_debug_info_test
+ @skipIfRemote
+ def test_disassemble_raw_data(self):
+ """Test disassembling raw bytes with the API."""
+ # Create a target from the debugger.
+ arch = self.getArchitecture()
+ if re.match("mips*el", arch):
+ target = self.dbg.CreateTargetWithFileAndTargetTriple("", "mipsel")
+ raw_bytes = bytearray([0x21, 0xf0, 0xa0, 0x03])
+ elif re.match("mips", arch):
+ target = self.dbg.CreateTargetWithFileAndTargetTriple("", "mips")
+ raw_bytes = bytearray([0x03, 0xa0, 0xf0, 0x21])
+ elif re.match("powerpc64le", arch):
+ target = self.dbg.CreateTargetWithFileAndTargetTriple("", "powerpc64le")
+ raw_bytes = bytearray([0x00, 0x00, 0x80, 0x38])
+ else:
+ target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64")
+ raw_bytes = bytearray([0x48, 0x89, 0xe5])
+
+ self.assertTrue(target, VALID_TARGET)
+ insts = target.GetInstructions(lldb.SBAddress(0, target), raw_bytes)
+
+ inst = insts.GetInstructionAtIndex(0)
+
+ if self.TraceOn():
+ print()
+ print("Raw bytes: ", [hex(x) for x in raw_bytes])
+ print("Disassembled%s" % str(inst))
+ if re.match("mips", arch):
+ self.assertTrue(inst.GetMnemonic(target) == "move")
+ self.assertTrue(inst.GetOperands(target) ==
+ '$' + "fp, " + '$' + "sp")
+ elif re.match("powerpc64le", arch):
+ self.assertTrue(inst.GetMnemonic(target) == "li")
+ self.assertTrue(inst.GetOperands(target) == "4, 0")
+ else:
+ self.assertTrue(inst.GetMnemonic(target) == "movq")
+ self.assertTrue(inst.GetOperands(target) ==
+ '%' + "rsp, " + '%' + "rbp")
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
new file mode 100644
index 00000000000..e4d085de7c2
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
@@ -0,0 +1,78 @@
+"""
+Use lldb Python API to disassemble raw machine code bytes
+"""
+
+from __future__ import print_function
+
+from io import StringIO
+import sys
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class Disassemble_VST1_64(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ @add_test_categories(['pyapi'])
+ @no_debug_info_test
+ @skipIfLLVMTargetMissing("ARM")
+ def test_disassemble_invalid_vst_1_64_raw_data(self):
+ """Test disassembling invalid vst1.64 raw bytes with the API."""
+ # Create a target from the debugger.
+ target = self.dbg.CreateTargetWithFileAndTargetTriple("", "thumbv7-apple-macosx")
+ self.assertTrue(target, VALID_TARGET)
+
+ raw_bytes = bytearray([0xf0, 0xb5, 0x03, 0xaf,
+ 0x2d, 0xe9, 0x00, 0x0d,
+ 0xad, 0xf1, 0x40, 0x04,
+ 0x24, 0xf0, 0x0f, 0x04,
+ 0xa5, 0x46])
+
+ assembly = """
+ push {r4, r5, r6, r7, lr}
+ add r7, sp, #0xc
+ push.w {r8, r10, r11}
+ sub.w r4, sp, #0x40
+ bic r4, r4, #0xf
+ mov sp, r4
+ """
+ def split(s):
+ return [x.strip() for x in s.strip().splitlines()]
+
+ insts = target.GetInstructions(lldb.SBAddress(), raw_bytes)
+
+ if self.TraceOn():
+ print()
+ for i in insts:
+ print("Disassembled %s" % str(i))
+
+ if sys.version_info.major >= 3:
+ sio = StringIO()
+ insts.Print(sio)
+ self.assertEqual(split(assembly), split(sio.getvalue()))
+
+ self.assertEqual(insts.GetSize(), len(split(assembly)))
+
+ if sys.version_info.major >= 3:
+ for i,asm in enumerate(split(assembly)):
+ inst = insts.GetInstructionAtIndex(i)
+ sio = StringIO()
+ inst.Print(sio)
+ self.assertEqual(asm, sio.getvalue().strip())
+
+ raw_bytes = bytearray([0x04, 0xf9, 0xed, 0x82])
+
+ insts = target.GetInstructions(lldb.SBAddress(), raw_bytes)
+
+ inst = insts.GetInstructionAtIndex(0)
+
+ if self.TraceOn():
+ print()
+ print("Raw bytes: ", [hex(x) for x in raw_bytes])
+ print("Disassembled%s" % str(inst))
+
+ self.assertTrue(inst.GetMnemonic(target) == "vst1.64")