[Lldb-commits] [lldb] 6c17380 - [lldb] Fix TestDiagnoseDereferenceFunctionReturn on linux (#128512)

via lldb-commits lldb-commits at lists.llvm.org
Tue Feb 25 00:03:07 PST 2025


Author: Pavel Labath
Date: 2025-02-25T09:03:03+01:00
New Revision: 6c17380ea896e9966645958ad3d76441cc25430c

URL: https://github.com/llvm/llvm-project/commit/6c17380ea896e9966645958ad3d76441cc25430c
DIFF: https://github.com/llvm/llvm-project/commit/6c17380ea896e9966645958ad3d76441cc25430c.diff

LOG: [lldb] Fix TestDiagnoseDereferenceFunctionReturn on linux (#128512)

The test was failing because it was looking up the immediate value from
the call instruction as a load address, whereas in fact it was a file
address. This worked on darwin because (with ASLR disabled) the two
addresses are generally the same. On linux, this depends on the build
mode, but with the default (PIE) build type, the two are never the same.
The test also fails on a mac with ASLR enabled.

This path fixes the code to look up the value as a file address.

Added: 
    

Modified: 
    lldb/source/Target/StackFrame.cpp
    lldb/test/API/commands/frame/diagnose/dereference-function-return/TestDiagnoseDereferenceFunctionReturn.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index 4d068638f42b6..f8061ffad1466 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -1670,13 +1670,14 @@ lldb::ValueObjectSP DoGuessValueAt(StackFrame &frame, ConstString reg,
         break;
       case Instruction::Operand::Type::Immediate: {
         SymbolContext sc;
-        Address load_address;
-        if (!frame.CalculateTarget()->ResolveLoadAddress(
-                operands[0].m_immediate, load_address)) {
+        if (!pc.GetModule())
+          break;
+        Address address(operands[0].m_immediate,
+                        pc.GetModule()->GetSectionList());
+        if (!address.IsValid())
           break;
-        }
         frame.CalculateTarget()->GetImages().ResolveSymbolContextForAddress(
-            load_address, eSymbolContextFunction, sc);
+            address, eSymbolContextFunction, sc);
         if (!sc.function) {
           break;
         }

diff  --git a/lldb/test/API/commands/frame/diagnose/dereference-function-return/TestDiagnoseDereferenceFunctionReturn.py b/lldb/test/API/commands/frame/diagnose/dereference-function-return/TestDiagnoseDereferenceFunctionReturn.py
index d0f6ebefa334a..f7b596606134b 100644
--- a/lldb/test/API/commands/frame/diagnose/dereference-function-return/TestDiagnoseDereferenceFunctionReturn.py
+++ b/lldb/test/API/commands/frame/diagnose/dereference-function-return/TestDiagnoseDereferenceFunctionReturn.py
@@ -10,7 +10,7 @@
 
 
 class TestDiagnoseDereferenceFunctionReturn(TestBase):
-    @expectedFailureAll(oslist=no_match(lldbplatformutil.getDarwinOSTriples()))
+    @expectedFailureAll(oslist=["windows"])
     @skipIf(
         archs=no_match(["x86_64"])
     )  # <rdar://problem/33842388> frame diagnose doesn't work for armv7 or arm64
@@ -19,9 +19,6 @@ def test_diagnose_dereference_function_return(self):
         TestBase.setUp(self)
         self.build()
         exe = self.getBuildArtifact("a.out")
-        # FIXME: This default changed in lldbtest.py and this test
-        # seems to rely on having it turned off.
-        self.runCmd("settings set target.disable-aslr true")
         self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
         self.runCmd("run", RUN_SUCCEEDED)
         self.expect("thread list", "Thread should be stopped", substrs=["stopped"])


        


More information about the lldb-commits mailing list