Regression on gdb.base/break-probes.exp - native-{,extended-}gdbserver (was: Re: [RFC/PATCH] Testsuite: set sysroot when using gdbserver)

Sergio Durigan Junior sergiodj@redhat.com
Fri Apr 12 20:08:00 GMT 2019


On Wednesday, March 27 2019, Alan Hayward wrote:

> When testing using native-gdbserver and native-extended-gdbserver, the sysroot
> is not set.  This results in a warning from GDB and files are sent via the
> remote protocol, which can be slow.
>
> On Ubuntu 18.04 (unlike most distros) the debug versions of the standard
> libraries are included by default in /usr/lib/debug/
>
> Example log of a test on Ubuntu 18.04 AArch64:
>
> Listening on port 2346
> target remote localhost:2346
> Remote debugging using localhost:2346
> Reading /lib/ld-linux-aarch64.so.1 from remote target...
> warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
> Reading /lib/ld-linux-aarch64.so.1 from remote target...
> Reading symbols from target:/lib/ld-linux-aarch64.so.1...
> Reading /lib/ld-2.27.so from remote target...
> Reading /lib/.debug/ld-2.27.so from remote target...
> Reading /usr/lib/debug//lib/ld-2.27.so from remote target...
> Reading /usr/lib/debug/lib//ld-2.27.so from remote target...
> Reading target:/usr/lib/debug/lib//ld-2.27.so from remote target...
> (No debugging symbols found in target:/lib/ld-linux-aarch64.so.1)
> 0x0000ffffbf6d31c0 in ?? () from target:/lib/ld-linux-aarch64.so.1
> (gdb) continue
> Continuing.
> Reading /lib/aarch64-linux-gnu/libc.so.6 from remote target...
> Reading /lib/aarch64-linux-gnu/libc-2.27.so from remote target...
> Reading /lib/aarch64-linux-gnu/.debug/libc-2.27.so from remote target...
> Reading /usr/lib/debug//lib/aarch64-linux-gnu/libc-2.27.so from remote target...
> Reading /usr/lib/debug//lib/aarch64-linux-gnu/libc-2.27.so from remote target...
>
> These file reads are causing a complete native-gdbserver run on the AArch64
> buildbot slave to timeout after 2.5 hours.  This is also causing the builds
> to back up on the slave.
>
> The solution is to ensure the sysroot is set to / immediately after connecting.
>
> This drastically reduces the time of a test. For example, gdb.base/sigall.exp
> drops from 23 seconds to 4 seconds.
> A full native-gdbserver run on the AArch64 slave now takes 8 minutes.
>
> However, I'm not sure if putting the sysroot into gdbserver_start will break
> other remote setups.  In addition, I don't think gdb_test is the correct
> function to call within the library - for the mi tests this causes a timeout
> as it expect to use mi_gdb_test.
>
> gdb/testsuite/ChangeLog:
>
> 2019-03-27  Alan Hayward  <alan.hayward@arm.com>
>
> 	* lib/gdbserver-support.exp (gdbserver_start): Set sysroot.
> ---
>  gdb/testsuite/lib/gdbserver-support.exp | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp
> index dbd885aa22..065946eb8d 100644
> --- a/gdb/testsuite/lib/gdbserver-support.exp
> +++ b/gdb/testsuite/lib/gdbserver-support.exp
> @@ -336,6 +336,9 @@ proc gdbserver_start { options arguments } {
>  	break
>      }
>  
> +    # Set sysroot to ensure files are read locally instead of via the remote protocol
> +    gdb_test "set sysroot /" ""
> +
>      return [list $protocol [$get_remote_address $debughost $portnum]]
>  }

Hi Alan,

I have just noticed that two tests of gdb.base/break-probes.exp are
failing, most likely because of this patch.

These are the failures:

  (gdb) PASS: gdb.base/break-probes.exp: ensure using probes
  show sysroot
  The current system root is "/".
  (gdb) c
  Continuing.
  Stopped due to shared library event:
    Inferior loaded /lib64/libdl.so.2
      /lib64/libm.so.6
      /lib64/libc.so.6
  (gdb) c
  Continuing.
  Stopped due to shared library event (no libraries added or removed)
  (gdb) c
  Continuing.
  Stopped due to shared library event:
    Inferior loaded /build/gdb/testsuite/outputs/gdb.base/break-probes/break-probes-solib.so
  (gdb) c
  Continuing.
  Stopped due to shared library event (no libraries added or removed)
  (gdb) c
  Continuing.
  Stopped due to shared library event:
    Inferior unloaded /build/gdb/testsuite/outputs/gdb.base/break-probes/break-probes-solib.so
  (gdb) c
  Continuing.
  [Inferior 1 (process 20591) exited normally]
  (gdb) FAIL: gdb.base/break-probes.exp: run til our library loads (the program exited)
  call (int) foo(23)
  No symbol "foo" in current context.
  (gdb) FAIL: gdb.base/break-probes.exp: call (int) foo(23)
  Remote debugging from host ::1, port 33292
  Process /build/gdb/testsuite/outputs/gdb.base/break-probes/break-probes created; pid = 20591
  Child exited with status 0
  monitor exit

You can see the BuildBot build here:

  https://gdb-build.sergiodj.net/builders/Fedora-x86_64-native-gdbserver-m64/builds/12335

The logs:

  https://gdb-build.sergiodj.net/results/Fedora-x86_64-native-gdbserver-m64/c9/c92df149c29518f6e1d4a3174b3e29162fcd3ad6/

I'm in the middle of something else now, but let me know if you need
help with the investigation.

Thanks,

-- 
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF  31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/



More information about the Gdb-patches mailing list