|
From: <sv...@va...> - 2016-10-01 13:47:01
|
Author: philippe
Date: Sat Oct 1 14:46:53 2016
New Revision: 15999
Log:
Replace --wait-for-gdb=yes memory loop by a call to VG_(poll) (5000 milliseconds)
Depending on the cpu speed, this loop was way too fast or too slow.
=> replace by a syscall that will always give the same waiting time.
A few notes:
A VG_(poll) is available on all supported OS
B no signals are supposed to interrupt the syscall, as at that place, nothing works yet.
C gdb can attach to a process blocked in a syscall.
If ever B or C would not be true on some setups, then we could instead do a loop
of e.g. 50 * VG_(poll) (100 milli-seconds)
Modified:
trunk/coregrind/m_main.c
Modified: trunk/coregrind/m_main.c
==============================================================================
--- trunk/coregrind/m_main.c (original)
+++ trunk/coregrind/m_main.c Sat Oct 1 14:46:53 2016
@@ -2166,36 +2166,10 @@
/* Hook to delay things long enough so we can get the pid and
attach GDB in another shell. */
if (VG_(clo_wait_for_gdb)) {
- ULong iters, q;
- VG_(debugLog)(1, "main", "Wait for GDB\n");
- VG_(printf)("pid=%d, entering delay loop\n", VG_(getpid)());
-
-# if defined(VGP_x86_linux)
- iters = 10;
-# elif defined(VGP_amd64_linux) || defined(VGP_ppc64be_linux) \
- || defined(VGP_ppc64le_linux) || defined(VGP_tilegx_linux)
- iters = 10;
-# elif defined(VGP_ppc32_linux)
- iters = 5;
-# elif defined(VGP_arm_linux)
- iters = 5;
-# elif defined(VGP_arm64_linux)
- iters = 5;
-# elif defined(VGP_s390x_linux)
- iters = 10;
-# elif defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
- iters = 10;
-# elif defined(VGO_darwin)
- iters = 3;
-# elif defined(VGO_solaris)
- iters = 10;
-# else
-# error "Unknown plat"
-# endif
-
- iters *= 1000ULL * 1000 * 1000;
- for (q = 0; q < iters; q++)
- __asm__ __volatile__("" ::: "memory","cc");
+ const int ms = 5000; // milliseconds
+ VG_(debugLog)(1, "main", "Wait for GDB during %d ms\n", ms);
+ VG_(printf)("pid=%d, entering delay %d ms loop\n", VG_(getpid)(), ms);
+ VG_(poll)(NULL, 0, ms);
}
//--------------------------------------------------------------
|