[Lldb-commits] [lldb] 8e76093 - [lldb][AArch64] Fix tagged watch test on Graviton 3

David Spickett via lldb-commits lldb-commits at lists.llvm.org
Tue Jul 4 03:16:12 PDT 2023


Author: David Spickett
Date: 2023-07-04T11:16:07+01:00
New Revision: 8e76093ae8fe1184006ca14d7ffb01df982f0f43

URL: https://github.com/llvm/llvm-project/commit/8e76093ae8fe1184006ca14d7ffb01df982f0f43
DIFF: https://github.com/llvm/llvm-project/commit/8e76093ae8fe1184006ca14d7ffb01df982f0f43.diff

LOG: [lldb][AArch64] Fix tagged watch test on Graviton 3

During __do_global_dtors_aux glibc sets a flag that is right
next to the global variable. This is done using a store byte.

On QEMU the watchpoints are handled with a finer granularity
than real hardware, so this wasn't a problem. On Graviton 3
(and Mountain Jade, though this test won't run there) watchpoints
look at larger chunks of memory.

This means that the final continue actually stops in  __do_global_dtors_aux
instead of exiting.

We could fix this by padding the global to be away from the flag,
but that is fiddly and it is easier just to remove the watchpoint
before the final continue. We have already verified it worked by that
point.

Reviewed By: omjavaid

Differential Revision: https://reviews.llvm.org/D154201

Added: 
    

Modified: 
    lldb/test/API/commands/watchpoints/watch_tagged_addr/TestWatchTaggedAddress.py

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/commands/watchpoints/watch_tagged_addr/TestWatchTaggedAddress.py b/lldb/test/API/commands/watchpoints/watch_tagged_addr/TestWatchTaggedAddress.py
index a2b6af5d770e6e..6369a3034b810a 100644
--- a/lldb/test/API/commands/watchpoints/watch_tagged_addr/TestWatchTaggedAddress.py
+++ b/lldb/test/API/commands/watchpoints/watch_tagged_addr/TestWatchTaggedAddress.py
@@ -129,12 +129,15 @@ def verify_watch_hits(self):
             substrs=["stop reason = watchpoint"],
         )
 
+        # Use the '-v' option to do verbose listing of the watchpoint.
+        # The hit count should now be 2.
+        self.expect("watchpoint list -v", substrs=["hit_count = 2"])
+
+        # On some hardware, during __do_global_dtors_aux a flag is set near
+        # the global which can trigger the watchpoint. So we must remove it.
+        self.runCmd("watchpoint delete 1")
         self.runCmd("process continue")
 
         # There should be no more watchpoint hit and the process status should
         # be 'exited'.
         self.expect("process status", substrs=["exited"])
-
-        # Use the '-v' option to do verbose listing of the watchpoint.
-        # The hit count should now be 2.
-        self.expect("watchpoint list -v", substrs=["hit_count = 2"])


        


More information about the lldb-commits mailing list