aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/API/python_api
diff options
context:
space:
mode:
authorEbuka Ezike <yerimyah1@gmail.com>2025-04-11 13:45:19 +0100
committerGitHub <noreply@github.com>2025-04-11 13:45:19 +0100
commitdda53bef35c5ab49967e8755e69ce893ecb525c4 (patch)
tree2f9dd2e66744f2beb1a1e95b35c4b0207aabafe9 /lldb/test/API/python_api
parent01658b16661dcff8bc24da7d86cee8df6f0bb4bd (diff)
downloadllvm-dda53bef35c5ab49967e8755e69ce893ecb525c4.zip
llvm-dda53bef35c5ab49967e8755e69ce893ecb525c4.tar.gz
llvm-dda53bef35c5ab49967e8755e69ce893ecb525c4.tar.bz2
[lldb] Fix SBTarget::ReadInstruction with flavor (#134626)
When you call the `SBTarget::ReadInstructions` with flavor from lldb crashes. This is because the wrong order of the `DisassemblyBytes` constructor this fixes that --------- Signed-off-by: Ebuka Ezike <yerimyah1@gmail.com>
Diffstat (limited to 'lldb/test/API/python_api')
-rw-r--r--lldb/test/API/python_api/target/read-instructions-flavor/Makefile3
-rw-r--r--lldb/test/API/python_api/target/read-instructions-flavor/TestTargetReadInstructionsFlavor.py39
-rw-r--r--lldb/test/API/python_api/target/read-instructions-flavor/main.c21
3 files changed, 63 insertions, 0 deletions
diff --git a/lldb/test/API/python_api/target/read-instructions-flavor/Makefile b/lldb/test/API/python_api/target/read-instructions-flavor/Makefile
new file mode 100644
index 0000000..1049594
--- /dev/null
+++ b/lldb/test/API/python_api/target/read-instructions-flavor/Makefile
@@ -0,0 +1,3 @@
+C_SOURCES := main.c
+
+include Makefile.rules
diff --git a/lldb/test/API/python_api/target/read-instructions-flavor/TestTargetReadInstructionsFlavor.py b/lldb/test/API/python_api/target/read-instructions-flavor/TestTargetReadInstructionsFlavor.py
new file mode 100644
index 0000000..40edc57d
--- /dev/null
+++ b/lldb/test/API/python_api/target/read-instructions-flavor/TestTargetReadInstructionsFlavor.py
@@ -0,0 +1,39 @@
+"""
+Test SBTarget Read Instruction.
+"""
+
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+
+
+class TargetReadInstructionsFlavor(TestBase):
+ @skipIf(archs=no_match(["x86_64", "x86", "i386"]), oslist=["windows"])
+ def test_read_instructions_with_flavor(self):
+ self.build()
+ executable = self.getBuildArtifact("a.out")
+
+ # create a target
+ target = self.dbg.CreateTarget(executable)
+ self.assertTrue(target.IsValid(), "target is not valid")
+
+ functions = target.FindFunctions("test_add")
+ self.assertEqual(len(functions), 1)
+ test_add = functions[0]
+
+ test_add_symbols = test_add.GetSymbol()
+ self.assertTrue(
+ test_add_symbols.IsValid(), "test_add function symbols is not valid"
+ )
+
+ expected_instructions = (("mov", "eax, edi"), ("add", "eax, esi"), ("ret", ""))
+ test_add_insts = test_add_symbols.GetInstructions(target, "intel")
+ # clang adds an extra nop instruction but gcc does not. It makes more sense
+ # to check if it is at least 3
+ self.assertLessEqual(len(expected_instructions), len(test_add_insts))
+
+ # compares only the expected instructions
+ for expected_instr, instr in zip(expected_instructions, test_add_insts):
+ self.assertTrue(instr.IsValid(), "instruction is not valid")
+ expected_mnemonic, expected_op_str = expected_instr
+ self.assertEqual(instr.GetMnemonic(target), expected_mnemonic)
+ self.assertEqual(instr.GetOperands(target), expected_op_str)
diff --git a/lldb/test/API/python_api/target/read-instructions-flavor/main.c b/lldb/test/API/python_api/target/read-instructions-flavor/main.c
new file mode 100644
index 0000000..6022d63
--- /dev/null
+++ b/lldb/test/API/python_api/target/read-instructions-flavor/main.c
@@ -0,0 +1,21 @@
+
+// This simple program is to test the lldb Python API SBTarget ReadInstruction
+// function.
+//
+// When the target is create we get all the instructions using the intel
+// flavor and see if it is correct.
+
+int test_add(int a, int b);
+
+__asm__("test_add:\n"
+ " movl %edi, %eax\n"
+ " addl %esi, %eax\n"
+ " ret \n");
+
+int main(int argc, char **argv) {
+ int a = 10;
+ int b = 20;
+ int result = test_add(a, b);
+
+ return 0;
+} \ No newline at end of file