Re: [PATCH] Remote debugging without a binary (regression)

Pedro Alves
2016-02-17T14:40:59Z

On 02/17/2016 01:53 PM, Gary Benson wrote:
> Pedro Alves wrote:
>> On 02/12/2016 10:31 AM, Gary Benson wrote:
>>> FWIW I tried this (both on the same machine):
>>>
>>> gdbserver :9999 /bin/ls
>>> gdb -q -ex "set sysroot /whatever" -ex "target remote :9999"
>>>
>>> and got this:
>>>
>>> Reading symbols from /bin/ls...(no debugging symbols found)...done.
>>>
>>> which I think is an error: the sysroot is being ignored.
>>
>> I agree. If you tell gdb about a sysroot, then I can't think why
>> you'd want it to try opening an absolute filename on the host,
>> outside the sysroot.
>>
>> (caching and buildid matching aside)
>
> There isn't any caching or buildid matching, the logic in
> exec_file_locate_attach is wrong.

Yes, what I meant was -- a valid reason I'd see gdb trying to open a file
on the host outside the sysroot would be for smarter buildid matching and
local caching of (hunks of) files. But we don't have that.

> It might even be the cause
> of the exception Luis is seeing so with luck we can avoid a
> try-catch in remote_add_inferior. I'm putting together a patch
> now.

Yes, if GDB ends up not trying to open any file, then it'll mask off
the exception Luis is seeing.

However, even if the sysroot points at the location with a
valid copy of the file, if the file is NOT readable, then we'll
still throw and close the connection.

Wait, actually, that's actually a good way to add a test to the testsuite
to cover Luis's use case, even without separate filesystems:

gdbserver:

$ ./gdbserver/gdbserver :9999 ~/gdb/tests/threads&
$ chmod 000 ~/gdb/tests/threads

gdb:

(gdb) tar remote :9999
Remote debugging using :9999
Reading /home/pedro/gdb/tests/threads from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
"target:/home/pedro/gdb/tests/threads": could not open as an executable file: Permission denied.
(gdb) maint print target-stack
The current target stack is:
- None (None)
(gdb)

Above we dropped the connection...

Thanks,
Pedro Alves