https://github.com/da-viper updated 
https://github.com/llvm/llvm-project/pull/134626

>From 6c8b0a3dcb33eeb2fe57325a792ff5a70225d18e Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimy...@gmail.com>
Date: Mon, 7 Apr 2025 10:24:02 +0100
Subject: [PATCH 1/3] [lldb] Fix SBTarget::ReadInstruction

The disassemblyBytes parameters are not ordered correctly and crashes when the 
read instruction is called
---
 lldb/source/API/SBTarget.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lldb/source/API/SBTarget.cpp b/lldb/source/API/SBTarget.cpp
index 0fed1bbfed6a7..b42ada42b0931 100644
--- a/lldb/source/API/SBTarget.cpp
+++ b/lldb/source/API/SBTarget.cpp
@@ -2021,9 +2021,9 @@ lldb::SBInstructionList 
SBTarget::ReadInstructions(lldb::SBAddress base_addr,
                                 error, force_live_memory, &load_addr);
       const bool data_from_file = load_addr == LLDB_INVALID_ADDRESS;
       sb_instructions.SetDisassembler(Disassembler::DisassembleBytes(
-          target_sp->GetArchitecture(), nullptr, 
target_sp->GetDisassemblyCPU(),
-          target_sp->GetDisassemblyFeatures(), flavor_string, *addr_ptr,
-          data.GetBytes(), bytes_read, count, data_from_file));
+          target_sp->GetArchitecture(), nullptr, flavor_string,
+          target_sp->GetDisassemblyCPU(), target_sp->GetDisassemblyFeatures(),
+          *addr_ptr, data.GetBytes(), bytes_read, count, data_from_file));
     }
   }
 

>From 4be5e33bf7b986e35808b83758e4a8d85b646a81 Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimy...@gmail.com>
Date: Mon, 7 Apr 2025 14:23:51 +0100
Subject: [PATCH 2/3] [lldb] Add test for SBTarget reading instructions with
 flavor

This commit introduces a new test for verifying the `SBTarget` API's ability to 
read and validate disassembled instructions with a specified flavor ("intel").

Signed-off-by: Ebuka Ezike <yerimy...@gmail.com>
---
 .../target/read-instructions-flavor/Makefile  |  3 ++
 .../TestTargetReadInstructionsFlavor.py       | 40 +++++++++++++++++++
 .../target/read-instructions-flavor/main.c    | 21 ++++++++++
 3 files changed, 64 insertions(+)
 create mode 100644 
lldb/test/API/python_api/target/read-instructions-flavor/Makefile
 create mode 100644 
lldb/test/API/python_api/target/read-instructions-flavor/TestTargetReadInstructionsFlavor.py
 create mode 100644 
lldb/test/API/python_api/target/read-instructions-flavor/main.c

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 0000000000000..10495940055b6
--- /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 0000000000000..e93c8476d8e00
--- /dev/null
+++ 
b/lldb/test/API/python_api/target/read-instructions-flavor/TestTargetReadInstructionsFlavor.py
@@ -0,0 +1,40 @@
+"""
+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 0000000000000..6022d63fb6ed7
--- /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

>From 7417e79323c67ab478a0d41757ebb1679f4cb28c Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimy...@gmail.com>
Date: Mon, 7 Apr 2025 14:39:22 +0100
Subject: [PATCH 3/3] [lldb] fix formatting

Signed-off-by: Ebuka Ezike <yerimy...@gmail.com>
---
 .../read-instructions-flavor/TestTargetReadInstructionsFlavor.py | 1 -
 1 file changed, 1 deletion(-)

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
index e93c8476d8e00..40edc57df21ce 100644
--- 
a/lldb/test/API/python_api/target/read-instructions-flavor/TestTargetReadInstructionsFlavor.py
+++ 
b/lldb/test/API/python_api/target/read-instructions-flavor/TestTargetReadInstructionsFlavor.py
@@ -7,7 +7,6 @@
 
 
 class TargetReadInstructionsFlavor(TestBase):
-
     @skipIf(archs=no_match(["x86_64", "x86", "i386"]), oslist=["windows"])
     def test_read_instructions_with_flavor(self):
         self.build()

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to