Re: [PATCH v3] Make only user-specified executable and symbol filenames sticky

Philippe Waroquiers
2015-06-08T19:42:14Z

On Mon, 2015-06-08 at 10:01 +0100, Gary Benson wrote:

> This updated patch has been created against the latest gdb/master
> (80fb91378c91a8239817a5ab2b1c3e346109db25). Could you please try
> your tests again?
First test with 'native' attach/detach/attach/detach/attach is
working ok.
However, the behaviour of the 3rd attach differs: a question
is asked, that is answered automatically as yes (for EOF).
So that is strange.
GNU gdb (GDB) 7.9.50.20150608-cvs
...
Type "apropos word" to search for commands related to "word".
(gdb) atta 13286
Attaching to process 13286
Reading symbols from /bin/sleep...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007f3c5bb06f20 in nanosleep () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) detach
Detaching from program: /bin/sleep, process 13286
(gdb) atta 13320
Attaching to program: /bin/sleep, process 13320
Reading symbols from /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers...done.
Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...(no debugging symbols found)...done.
[New LWP 13323]
[New LWP 13322]
[New LWP 13321]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007f5f538e1da3 in select () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) detach
Detaching from program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13320
(gdb) atta 13286
Attaching to program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13286
Load new symbol table from "/bin/sleep"? (y or n) EOF [assumed Y]
Reading symbols from /bin/sleep...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007f3c5bb06f20 in nanosleep () from /lib/x86_64-linux-gnu/libc.so.6
(gdb)

2nd test is with Valgrind gdbsrv. Also working ok. However, here
we have a question (no EOF answer) asking to change or not the symbol file.
GNU gdb (GDB) 7.9.50.20150608-cvs
...
Type "apropos word" to search for commands related to "word".
(gdb) tar rem | lvgdb
Remote debugging using | lvgdb
relaying data between gdb and process 13394
warning: remote target does not support file transfer, attempting to access files from local filesystem.
Reading symbols from /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00000000040012d0 in ?? () from /lib64/ld-linux-x86-64.so.2
(gdb) detach
Detaching from program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, Remote target
Ending remote debugging.
(gdb) tar rem | lvgdb --pid=13413
Remote debugging using | lvgdb --pid=13413
relaying data between gdb and process 13413
Load new symbol table from "/home/philippe/valgrind/trunk_untouched/memcheck/tests/trivialleak"? (y or n) y
Reading symbols from /home/philippe/valgrind/trunk_untouched/memcheck/tests/trivialleak...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00000000040012d0 in ?? () from /lib64/ld-linux-x86-64.so.2
(gdb) detach
Detaching from program: /home/philippe/valgrind/trunk_untouched/memcheck/tests/trivialleak, Remote target
Ending remote debugging.
(gdb) tar rem | lvgdb --pid=13394
Remote debugging using | lvgdb --pid=13394
relaying data between gdb and process 13394
Load new symbol table from "/home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers"? (y or n) y
Reading symbols from /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers...done.
Reading symbols from /home/philippe/valgrind/trunk_untouched/./.in_place/vgpreload_core-amd64-linux.so...done.
Reading symbols from /home/philippe/valgrind/trunk_untouched/./.in_place/vgpreload_memcheck-amd64-linux.so...done.
Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x0000000005145da3 in select () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) tar rem | lvgdb --pid=13427
A program is being debugged already. Kill it? (y or n) n
Program not killed.
(gdb) detach
Detaching from program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, Remote target
Ending remote debugging.
(gdb) tar rem | lvgdb --pid=13427
Remote debugging using | lvgdb --pid=13427
relaying data between gdb and process 13427
Load new symbol table from "/home/philippe/valgrind/trunk_untouched/memcheck/tests/trivialleak"? (y or n) y
Reading symbols from /home/philippe/valgrind/trunk_untouched/memcheck/tests/trivialleak...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00000000040012d0 in ?? () from /lib64/ld-linux-x86-64.so.2
(gdb)

3rd test with GDB gdbserver: there is still the problem of invalid
target.
GNU gdb (GDB) 7.9.50.20150608-cvs
...
Type "apropos word" to search for commands related to "word".
(gdb) tar rem :1234
Remote debugging using :1234
Reading symbols from target:/home/philippe/valgrind/trunk_untouched/memcheck/tests/trivialleak...done.
Reading symbols from target:/lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007ffff7ddb2d0 in ?? () from target:/lib64/ld-linux-x86-64.so.2
(gdb) detach
Detaching from program: target:/home/philippe/valgrind/trunk_untouched/memcheck/tests/trivialleak, process 13447
Ending remote debugging.
(gdb) tar rem :1235
`target:/home/philippe/valgrind/trunk_untouched/memcheck/tests/trivialleak' has disappeared; keeping its symbols.
Remote debugging using :1235
Load new symbol table from "target:/home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers"? (y or n) y
Reading symbols from target:/home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers...Can't read symbols from target:/home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers: Invalid argument
(gdb)

Test 4 is the same as test 1, but with gdb started with a filename as argument.
GDB gives a warning that the exec+sym file does not match the target one.
gdb ./gdbserver_tests/sleepers
...
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./gdbserver_tests/sleepers...done.
(gdb) atta 13474
Attaching to program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13474
Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...(no debugging symbols found)...done.
[New LWP 13477]
[New LWP 13476]
[New LWP 13475]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007fec5b318da3 in select () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) detach
Detaching from program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13474
(gdb) atta 13484
Attaching to program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13484
warning: Process 13484 has executable file /bin/sleep, but executable file is currently set to /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers
warning: Process 13484 has symbol file /bin/sleep, but symbol file is currently set to /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007f1d71fdef20 in ?? ()
(gdb) detach
Detaching from program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13484
(gdb) atta 13474
Attaching to program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13474
Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...(no debugging symbols found)...done.
[New LWP 13477]
[New LWP 13476]
[New LWP 13475]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007fec5b318da3 in select () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) detach
Detaching from program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13474
(gdb) atta 13484
Attaching to program: /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, process 13484
warning: Process 13484 has executable file /bin/sleep, but executable file is currently set to /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers
warning: Process 13484 has symbol file /bin/sleep, but symbol file is currently set to /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007f1d71fdef20 in ?? ()
(gdb) file /bin/sleep
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Load new symbol table from "/bin/sleep"? (y or n) y
Reading symbols from /bin/sleep...(no debugging symbols found)...done.
(gdb) detach
Detaching from program: /bin/sleep, process 13484
(gdb) atta 13474
Attaching to program: /bin/sleep, process 13474
warning: Process 13474 has executable file /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, but executable file is currently set to /bin/sleep
warning: Process 13474 has symbol file /home/philippe/valgrind/trunk_untouched/gdbserver_tests/sleepers, but symbol file is currently set to /bin/sleep
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007fec5b318da3 in ?? ()
(gdb)

So, in summary, this patch version is better but there are still some
strange behaviours.

In terms of behaviour, it is somewhat surprising to sometimes have a question,
sometimes not. IMO, it would be better to always ask a question when the currently loaded
file does not match the target file (native attach or remote target), even when
the file was supplied by the user.

Philippe