From 072440a65aacdb6cd109a8ca6187c2b59ff53bc2 Mon Sep 17 00:00:00 2001 From: Philippe Waroquiers Date: Sat, 1 Oct 2016 13:46:53 +0000 Subject: [PATCH] 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) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15999 --- coregrind/m_main.c | 34 ++++------------------------------ 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/coregrind/m_main.c b/coregrind/m_main.c index 09badd70d3..9f3b8e41a8 100644 --- a/coregrind/m_main.c +++ b/coregrind/m_main.c @@ -2166,36 +2166,10 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp ) /* 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); } //-------------------------------------------------------------- -- 2.47.2