teak-llvm/lldb/packages/Python/lldbsuite/test/python_api/disassemble-raw-data/TestDisassembleRawData.py
Pavel Labath d5ee7ab47e Add and fix some tests for PPC64
Summary:
TestExprsChar.py
Char is unsigned char by default in PowerPC.

TestDisassembleBreakpoint.py
Modify disassemble testcase to consider multiple architectures.

TestThreadJump.py
Jumping directly to the return line on PowerPC architecture dos not
means returning the value that is seen on the code. The last test fails,
because it needs the execution of some assembly in the beginning of the
function. Avoiding this test for this architecture.

TestEhFrameUnwind.py
Implement func for ppc64le test case.

TestWatchLocation.py
TestStepOverWatchpoint.py
PowerPC currently supports only one H/W watchpoint.

TestDisassembleRawData.py
Add PowerPC opcode and instruction for disassemble testcase.

Reviewers: labath

Reviewed By: labath

Subscribers: davide, labath, alexandreyy, lldb-commits, luporl, lbianc

Differential Revision: https://reviews.llvm.org/D44472
Patch by Alexandre Yukio Yamashita <alexandre.yamashita@eldorado.org.br>.

llvm-svn: 328488
2018-03-26 12:42:07 +00:00

61 lines
2.2 KiB
Python

"""
Use lldb Python API to disassemble raw machine code bytes
"""
from __future__ import print_function
import os
import time
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")