-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[lldb][test] Skip one inline stepping test for arm-ubuntu. #114295
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The test is currently passing everywhere but this 32-bit arm ubuntu bot. I don't have an easy way to debug this, so I'm skipping the test on that platform till we get a chance to figure this out.
|
@llvm/pr-subscribers-lldb Author: None (jimingham) ChangesThe test is currently passing everywhere but this 32-bit arm ubuntu bot. I don't have an easy way to debug this, so I'm skipping the test on that platform till we get a chance to figure this out. Full diff: https://github.com/llvm/llvm-project/pull/114295.diff 1 Files Affected:
diff --git a/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py b/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py
index f52e0f0fd5bcfe..d3d00bca36b920 100644
--- a/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py
+++ b/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py
@@ -14,6 +14,8 @@ class TestInlineStepping(TestBase):
compiler="icc",
bugnumber="# Not really a bug. ICC combines two inlined functions.",
)
+
+ @skipIf(oslist=["ubuntu"], archs=["arm"]) # Fails for 32 bit arm
def test_with_python_api(self):
"""Test stepping over and into inlined functions."""
self.build()
|
You can test this locally with the following command:darker --check --diff -r 5545f76dc94e76ef6800823bdd1e107ad2264717...effa929cd73cde63e31dbedf8c5fadcb767aae37 lldb/test/API/functionalities/inline-stepping/TestInlineStepping.pyView the diff from darker here.--- TestInlineStepping.py 2024-10-30 19:58:22.000000 +0000
+++ TestInlineStepping.py 2024-10-30 20:02:02.390605 +0000
@@ -12,12 +12,11 @@
@skipIf(oslist=["windows"], archs=["aarch64"]) # Flaky on buildbot
@expectedFailureAll(
compiler="icc",
bugnumber="# Not really a bug. ICC combines two inlined functions.",
)
-
- @skipIf(oslist=["linux"], archs=["arm"]) # Fails for 32 bit arm
+ @skipIf(oslist=["linux"], archs=["arm"]) # Fails for 32 bit arm
def test_with_python_api(self):
"""Test stepping over and into inlined functions."""
self.build()
self.inline_stepping()
|
|
I looked into this. Not sure what the stepping logic goes by but I do see there is no line table entry for the function call we expect to stop at after the first stop. I have cut the cpp down to: On Arm 32 bit this produces this code: And the line table is (idk what's important but line numbers are my guess): There's no entry for line 11. Though it does think the prologue ends at line 10 column 18, when I think it should be more like column 5? Before the assignment. Compiling the test with g++ I get: lldb will still step right over line 11 if I give it the g++ binary. gdb is able to step the g++ binary properly, but if I give it the clang compiled binary: Which isn't a great sign. However, on AArch64 where this does work, the code is: And the line table: Still no entry for line 11, but lldb works on AArch64 despite that. Also, it marks prologue end as after the assignment like Arm did. g++'s line table on AArch64: And the binary works fine with lldb. If Which means lldb must be looking at some other property that I don't know about. Otherwise it wouldn't work on AArch64 either. |
|
Thanks for the analysis. The other bit that lldb looks at (which is what I added with the patch this change is the result of) is the DW_AT_call_{file, line} info in the debug_info part of the DWARF for that function. Before we ignored that information when setting breakpoints. What do those look like? |
|
dwarfdump: arm_dwarfdump.txt (this doesn't seem different to what AArch64 produces) In the log file I break on main then step ( I noticed that although you can step into ( If I add a second nop, it will realise it's in the inlined function when it gets to the second nop. |
The test is currently passing everywhere but this 32-bit arm ubuntu bot. I don't have an easy way to debug this, so I'm skipping the test on that platform till we get a chance to figure this out.
The test is currently passing everywhere but this 32-bit arm ubuntu bot. I don't have an easy way to debug this, so I'm skipping the test on that platform till we get a chance to figure this out.
|
Test was fixed by #114628. |
The test is currently passing everywhere but this 32-bit arm ubuntu bot. I don't have an easy way to debug this, so I'm skipping the test on that platform till we get a chance to figure this out. (cherry picked from commit a218f0f)
The test is currently passing everywhere but this 32-bit arm ubuntu bot. I don't have an easy way to debug this, so I'm skipping the test on that platform till we get a chance to figure this out.