https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70548

Henrique Andrade <hcma at unscrambl dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hcma at unscrambl dot com

--- Comment #1 from Henrique Andrade <hcma at unscrambl dot com> ---
I also have a reproducible example where this happens, using GNU gdb (GDB) Red
Hat Enterprise Linux 7.6.1-80.el7.

In my case it happens when a process starts a child process with gdb being
exec'ed as follows:

gdb -n -ex thread apply all bt full -batch -pid <pid>

When inspecting gdb's stack trace I see:

(gdb) where
#0  0x00007ff8e6135a73 in __pread_nocancel () at
../sysdeps/unix/syscall-template.S:81
#1  0x00000000004cdb0f in linux_xfer_partial ()
#2  0x00000000004cea9e in linux_nat_xfer_partial ()
#3  0x00000000005fc1dc in memory_xfer_partial_1 ()
#4  0x00000000005fc78d in target_xfer_partial ()
#5  0x00000000005fbdc9 in target_read ()
#6  0x00000000005fbe50 in target_read_memory ()
#7  0x00000000005973b2 in partial_memory_read ()
#8  0x000000000059a1a9 in read_string ()
#9  0x000000000059b64f in val_print_string ()
#10 0x00000000005308d6 in apply_val_pretty_printer ()
#11 0x00000000005981f5 in val_print ()
#12 0x00000000005982c7 in common_val_print ()
#13 0x0000000000530ab5 in apply_val_pretty_printer ()
#14 0x00000000005981f5 in val_print ()
#15 0x00000000005982c7 in common_val_print ()
#16 0x000000000059feda in print_variable_and_value ()
#17 0x00000000005cc7c3 in do_print_variable_and_value ()
#18 0x00000000005ce444 in iterate_over_block_local_vars ()
#19 0x00000000005ce58c in print_frame_local_vars ()
#20 0x00000000005ce7c0 in backtrace_command_1 ()
#21 0x00000000005cec25 in backtrace_command ()
#22 0x0000000000695b0a in execute_command ()
#23 0x00000000005d398c in thread_apply_all_command ()

And strace shows it spinning as such:

ptrace(PTRACE_PEEKTEXT, 6820, 0x7f5a86d1f348, [0]) = 0
open("/proc/6820/mem", O_RDONLY)        = 20
pread(20,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
33738576, 140026785690448) = 16596144
close(20)                               = 0
ptrace(PTRACE_PEEKTEXT, 6820, 0x7f5a86d1f350, [0]) = 0
open("/proc/6820/mem", O_RDONLY)        = 20
pread(20,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
33738568, 140026785690456) = 16596136
close(20)                               = 0
ptrace(PTRACE_PEEKTEXT, 6820, 0x7f5a86d1f358, [0]) = 0
open("/proc/6820/mem", O_RDONLY)        = 20
pread(20,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
33738560, 140026785690464) = 16596128
close(20)
... (ad infinitum)

If I replace the invocation line to:

gdb -n -ex "disable pretty-printer" -ex "thread apply all bt fullä -batch -pid
<pid>

The problem goes away and the gdb subprocess prints out the stack trace and
terminates as expected.

Reply via email to