.gdbinit: load QEMU sub-commands when gdb starts
diff mbox

Message ID 20170515134753.28412-1-stefanha@redhat.com
State New
Headers show

Commit Message

Stefan Hajnoczi May 15, 2017, 1:47 p.m. UTC
The scripts/qemu-gdb.py file is not easily discoverable.  Add a .gdbinit
file so GDB either loads qemu-gdb.py automatically or prints a message
informing the user how to enable them (some systems disable ./.gdbinit
loading for security reasons).

Suggested-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 .gdbinit | 8 ++++++++
 1 file changed, 8 insertions(+)
 create mode 100644 .gdbinit

Comments

Philippe Mathieu-Daudé May 15, 2017, 1:49 p.m. UTC | #1
On 05/15/2017 10:47 AM, Stefan Hajnoczi wrote:
> The scripts/qemu-gdb.py file is not easily discoverable.  Add a .gdbinit
> file so GDB either loads qemu-gdb.py automatically or prints a message
> informing the user how to enable them (some systems disable ./.gdbinit
> loading for security reasons).
>
> Suggested-by: Eric Blake <eblake@redhat.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  .gdbinit | 8 ++++++++
>  1 file changed, 8 insertions(+)
>  create mode 100644 .gdbinit
>
> diff --git a/.gdbinit b/.gdbinit
> new file mode 100644
> index 0000000..9d322fc
> --- /dev/null
> +++ b/.gdbinit
> @@ -0,0 +1,8 @@
> +# GDB may have ./.gdbinit loading disabled by default.  In that case you can
> +# follow the instructions it prints.  They boil down to adding the following to
> +# your home directory's ~/.gdbinit file:
> +#
> +#   add-auto-load-safe-path /path/to/qemu/.gdbinit
> +
> +# Load QEMU-specific sub-commands and settings
> +source scripts/qemu-gdb.py
>
Alex Bennée May 15, 2017, 2:17 p.m. UTC | #2
Stefan Hajnoczi <stefanha@redhat.com> writes:

> The scripts/qemu-gdb.py file is not easily discoverable.  Add a .gdbinit
> file so GDB either loads qemu-gdb.py automatically or prints a message
> informing the user how to enable them (some systems disable ./.gdbinit
> loading for security reasons).
>
> Suggested-by: Eric Blake <eblake@redhat.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  .gdbinit | 8 ++++++++
>  1 file changed, 8 insertions(+)
>  create mode 100644 .gdbinit
>
> diff --git a/.gdbinit b/.gdbinit
> new file mode 100644
> index 0000000..9d322fc
> --- /dev/null
> +++ b/.gdbinit
> @@ -0,0 +1,8 @@
> +# GDB may have ./.gdbinit loading disabled by default.  In that case you can
> +# follow the instructions it prints.  They boil down to adding the following to
> +# your home directory's ~/.gdbinit file:
> +#
> +#   add-auto-load-safe-path /path/to/qemu/.gdbinit
> +
> +# Load QEMU-specific sub-commands and settings
> +source scripts/qemu-gdb.py

While this works well enough you might as well just comment the helper
script itself. Would this script take precedence over a users
~/.gdbinit? How would it work for out-of-tree builds?

GDB does have a mechanism for autoloading extensions by way of adding
ELF sections:

  https://sourceware.org/gdb/current/onlinedocs/gdb/dotdebug_005fgdb_005fscripts-section.html#dotdebug_005fgdb_005fscripts-section

--
Alex Bennée
Stefan Hajnoczi May 16, 2017, 10:45 a.m. UTC | #3
On Mon, May 15, 2017 at 03:17:28PM +0100, Alex Bennée wrote:
> 
> Stefan Hajnoczi <stefanha@redhat.com> writes:
> 
> > The scripts/qemu-gdb.py file is not easily discoverable.  Add a .gdbinit
> > file so GDB either loads qemu-gdb.py automatically or prints a message
> > informing the user how to enable them (some systems disable ./.gdbinit
> > loading for security reasons).
> >
> > Suggested-by: Eric Blake <eblake@redhat.com>
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > ---
> >  .gdbinit | 8 ++++++++
> >  1 file changed, 8 insertions(+)
> >  create mode 100644 .gdbinit
> >
> > diff --git a/.gdbinit b/.gdbinit
> > new file mode 100644
> > index 0000000..9d322fc
> > --- /dev/null
> > +++ b/.gdbinit
> > @@ -0,0 +1,8 @@
> > +# GDB may have ./.gdbinit loading disabled by default.  In that case you can
> > +# follow the instructions it prints.  They boil down to adding the following to
> > +# your home directory's ~/.gdbinit file:
> > +#
> > +#   add-auto-load-safe-path /path/to/qemu/.gdbinit
> > +
> > +# Load QEMU-specific sub-commands and settings
> > +source scripts/qemu-gdb.py
> 
> While this works well enough you might as well just comment the helper
> script itself.

People don't know scripts/qemu-gdb.py exists so adding a comment there
doesn't help.

> Would this script take precedence over a users ~/.gdbinit?

All gdbinit files are loaded.  The order in which they are loaded is:

1. System-wide
2. Home directory
3. Current directory

https://sourceware.org/gdb/onlinedocs/gdb/Startup.html#Startup

> How would it work for out-of-tree builds?

./.gdbinit assumes your current working directory is the root of the
QEMU source tree.  If gdb is launched outside this directory then
nothing will happen (e.g. from arm-softmmu/ or from an out-of-tree
build).

I'm not sure if there is a simple way of making ./.gdbinit work from
out-of-tree build directories.

> GDB does have a mechanism for autoloading extensions by way of adding
> ELF sections:
> 
>   https://sourceware.org/gdb/current/onlinedocs/gdb/dotdebug_005fgdb_005fscripts-section.html#dotdebug_005fgdb_005fscripts-section

Hmm...this still requires the user to configure auto-load safe paths and
it hardcodes a path into the QEMU binary (execute in-place vs make
install generally wouldn't work with the same binary).
Daniel P. Berrangé May 16, 2017, 11:04 a.m. UTC | #4
On Tue, May 16, 2017 at 11:45:56AM +0100, Stefan Hajnoczi wrote:
> On Mon, May 15, 2017 at 03:17:28PM +0100, Alex Bennée wrote:
> 
> > How would it work for out-of-tree builds?
> 
> ./.gdbinit assumes your current working directory is the root of the
> QEMU source tree.  If gdb is launched outside this directory then
> nothing will happen (e.g. from arm-softmmu/ or from an out-of-tree
> build).
> 
> I'm not sure if there is a simple way of making ./.gdbinit work from
> out-of-tree build directories.

Just add a Makefile rule, as a pre-requisite of qemu system arch
build, that symlinks $srcdir/.gdbinit into $builddir, or something
like that.


Regards,
Daniel
Markus Armbruster May 16, 2017, 11:05 a.m. UTC | #5
Stefan Hajnoczi <stefanha@redhat.com> writes:

> On Mon, May 15, 2017 at 03:17:28PM +0100, Alex Bennée wrote:
>> 
>> Stefan Hajnoczi <stefanha@redhat.com> writes:
>> 
>> > The scripts/qemu-gdb.py file is not easily discoverable.  Add a .gdbinit
>> > file so GDB either loads qemu-gdb.py automatically or prints a message
>> > informing the user how to enable them (some systems disable ./.gdbinit
>> > loading for security reasons).
>> >
>> > Suggested-by: Eric Blake <eblake@redhat.com>
>> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
>> > ---
>> >  .gdbinit | 8 ++++++++
>> >  1 file changed, 8 insertions(+)
>> >  create mode 100644 .gdbinit
>> >
>> > diff --git a/.gdbinit b/.gdbinit
>> > new file mode 100644
>> > index 0000000..9d322fc
>> > --- /dev/null
>> > +++ b/.gdbinit
>> > @@ -0,0 +1,8 @@
>> > +# GDB may have ./.gdbinit loading disabled by default.  In that case you can
>> > +# follow the instructions it prints.  They boil down to adding the following to
>> > +# your home directory's ~/.gdbinit file:
>> > +#
>> > +#   add-auto-load-safe-path /path/to/qemu/.gdbinit
>> > +
>> > +# Load QEMU-specific sub-commands and settings
>> > +source scripts/qemu-gdb.py
>> 
>> While this works well enough you might as well just comment the helper
>> script itself.
>
> People don't know scripts/qemu-gdb.py exists so adding a comment there
> doesn't help.
>
>> Would this script take precedence over a users ~/.gdbinit?
>
> All gdbinit files are loaded.  The order in which they are loaded is:
>
> 1. System-wide
> 2. Home directory
> 3. Current directory
>
> https://sourceware.org/gdb/onlinedocs/gdb/Startup.html#Startup
>
>> How would it work for out-of-tree builds?
>
> ./.gdbinit assumes your current working directory is the root of the
> QEMU source tree.  If gdb is launched outside this directory then
> nothing will happen (e.g. from arm-softmmu/ or from an out-of-tree
> build).
>
> I'm not sure if there is a simple way of making ./.gdbinit work from
> out-of-tree build directories.

Worth a try: ln -s $(SRC_PATH)/.gdbinit

If it works, we could have make create the link automatically.

[...]

Patch
diff mbox

diff --git a/.gdbinit b/.gdbinit
new file mode 100644
index 0000000..9d322fc
--- /dev/null
+++ b/.gdbinit
@@ -0,0 +1,8 @@ 
+# GDB may have ./.gdbinit loading disabled by default.  In that case you can
+# follow the instructions it prints.  They boil down to adding the following to
+# your home directory's ~/.gdbinit file:
+#
+#   add-auto-load-safe-path /path/to/qemu/.gdbinit
+
+# Load QEMU-specific sub-commands and settings
+source scripts/qemu-gdb.py