diff options
| author | Ebuka Ezike <yerimyah1@gmail.com> | 2025-04-11 13:45:19 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-11 13:45:19 +0100 |
| commit | dda53bef35c5ab49967e8755e69ce893ecb525c4 (patch) | |
| tree | 2f9dd2e66744f2beb1a1e95b35c4b0207aabafe9 /lldb/test/API/python_api | |
| parent | 01658b16661dcff8bc24da7d86cee8df6f0bb4bd (diff) | |
| download | llvm-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')
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 |
