Message ID | 20210913072942.30109-2-patrickdepinguin@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | [1/2] docs/manual/using-buildroot-debugger: suggest '-ix' iso '-x' when loading gdbinit | expand |
On 13/09/2021 09:29, Thomas De Schampheleire wrote: > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > The gdbinit supplied by Buildroot does two things: > A. specify the sysroot where gdb can find shared libraries > B. mark the sysroot as a 'safe path' for its auto-load feature, to make sure > that pretty printers for libstdc++.so are added automatically (see commit > 6fb3216a80c64c08375429d89497eaeec5622150) > > When debugging a core file, and the gdbinit file is specified via '-x' > rather than '-ix', then the order of these settings matters: If you first > set the sysroot, then gdb will immediately start finding the shared > libraries it needs for the core file, detect libstdc++ and its associated > libstdc++-gdb.py file, then give a big warning about safe paths: > > warning: File ".../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.py" > auto-loading has been declined by your `auto-load safe-path' set > to "$debugdir:$datadir/auto-load". > To enable execution of this file add > add-auto-load-safe-path .../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.py > line to your configuration file "/home/me/.gdbinit". > To completely disable this security protection add > set auto-load safe-path / > line to your configuration file "/home/me/.gdbinit". > For more information about this security protection see the > "Auto-loading safe path" section in the GDB manual. E.g., run from the shell: > info "(gdb)Auto-loading safe path" > > and the pretty printing code is not loaded. This is because the second > line from the gdbinit file was not yet parsed at this point. > > By changing the order (first configuring the safe path, then setting the > sysroot), this issue does not appear and everything is as expected. > > Note that when '-ix' were used instead of '-x' to pass the gdbinit file to > gdb, then the order would not matter, because the entire gdbinit file would > be parsed before considering the core file. > However, even though the Buildroot manual now suggests '-ix', users may not > have noticed this change and continue to use '-x'. Whaa, excellent, not content with fixing a bug once, you fix it twice! Applied to master, thanks. :-) Regards, Arnout > > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > --- > toolchain/helpers.mk | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk > index 1dfb52ac38..ef8e9a5f64 100644 > --- a/toolchain/helpers.mk > +++ b/toolchain/helpers.mk > @@ -481,8 +481,8 @@ check_toolchain_ssp = \ > # > gen_gdbinit_file = \ > mkdir -p $(STAGING_DIR)/usr/share/buildroot/ ; \ > - echo "set sysroot $(STAGING_DIR)" > $(STAGING_DIR)/usr/share/buildroot/gdbinit ; \ > - echo "add-auto-load-safe-path $(STAGING_DIR)" >> $(STAGING_DIR)/usr/share/buildroot/gdbinit > + echo "add-auto-load-safe-path $(STAGING_DIR)" > $(STAGING_DIR)/usr/share/buildroot/gdbinit ; \ > + echo "set sysroot $(STAGING_DIR)" >> $(STAGING_DIR)/usr/share/buildroot/gdbinit > > # Given a path, determine the relative prefix (../) needed to return to the > # root level. Note that the last component is treated as a file component; use a >
Hi Arnout, El mar, 21 sept 2021 a las 22:46, Arnout Vandecappelle (<arnout@mind.be>) escribió: > > > > On 13/09/2021 09:29, Thomas De Schampheleire wrote: > > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > > > > The gdbinit supplied by Buildroot does two things: > > A. specify the sysroot where gdb can find shared libraries > > B. mark the sysroot as a 'safe path' for its auto-load feature, to make sure > > that pretty printers for libstdc++.so are added automatically (see commit > > 6fb3216a80c64c08375429d89497eaeec5622150) > > > > When debugging a core file, and the gdbinit file is specified via '-x' > > rather than '-ix', then the order of these settings matters: If you first > > set the sysroot, then gdb will immediately start finding the shared > > libraries it needs for the core file, detect libstdc++ and its associated > > libstdc++-gdb.py file, then give a big warning about safe paths: > > > > warning: File ".../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.py" > > auto-loading has been declined by your `auto-load safe-path' set > > to "$debugdir:$datadir/auto-load". > > To enable execution of this file add > > add-auto-load-safe-path .../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.py > > line to your configuration file "/home/me/.gdbinit". > > To completely disable this security protection add > > set auto-load safe-path / > > line to your configuration file "/home/me/.gdbinit". > > For more information about this security protection see the > > "Auto-loading safe path" section in the GDB manual. E.g., run from the shell: > > info "(gdb)Auto-loading safe path" > > > > and the pretty printing code is not loaded. This is because the second > > line from the gdbinit file was not yet parsed at this point. > > > > By changing the order (first configuring the safe path, then setting the > > sysroot), this issue does not appear and everything is as expected. > > > > Note that when '-ix' were used instead of '-x' to pass the gdbinit file to > > gdb, then the order would not matter, because the entire gdbinit file would > > be parsed before considering the core file. > > However, even though the Buildroot manual now suggests '-ix', users may not > > have noticed this change and continue to use '-x'. > > Whaa, excellent, not content with fixing a bug once, you fix it twice! Just to clarify: there were two sets of warnings: 1. problems loading shared libraries 2. problems with the auto-load path / pretty printers Switching from -x to -ix solves both problems. But if you stick with '-x', this second patch only fixes the second problem, not the first. Best regards, Thomas
>>>>> "Thomas" == Thomas De Schampheleire <patrickdepinguin@gmail.com> writes: > From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> > The gdbinit supplied by Buildroot does two things: > A. specify the sysroot where gdb can find shared libraries > B. mark the sysroot as a 'safe path' for its auto-load feature, to make sure > that pretty printers for libstdc++.so are added automatically (see commit > 6fb3216a80c64c08375429d89497eaeec5622150) > When debugging a core file, and the gdbinit file is specified via '-x' > rather than '-ix', then the order of these settings matters: If you first > set the sysroot, then gdb will immediately start finding the shared > libraries it needs for the core file, detect libstdc++ and its associated > libstdc++-gdb.py file, then give a big warning about safe paths: > warning: File ".../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.py" > auto-loading has been declined by your `auto-load safe-path' set > to "$debugdir:$datadir/auto-load". > To enable execution of this file add > add-auto-load-safe-path .../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.py > line to your configuration file "/home/me/.gdbinit". > To completely disable this security protection add > set auto-load safe-path / > line to your configuration file "/home/me/.gdbinit". > For more information about this security protection see the > "Auto-loading safe path" section in the GDB manual. E.g., run from the shell: > info "(gdb)Auto-loading safe path" > and the pretty printing code is not loaded. This is because the second > line from the gdbinit file was not yet parsed at this point. > By changing the order (first configuring the safe path, then setting the > sysroot), this issue does not appear and everything is as expected. > Note that when '-ix' were used instead of '-x' to pass the gdbinit file to > gdb, then the order would not matter, because the entire gdbinit file would > be parsed before considering the core file. > However, even though the Buildroot manual now suggests '-ix', users may not > have noticed this change and continue to use '-x'. > Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> Committed to 2021.08.x, thanks.
diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk index 1dfb52ac38..ef8e9a5f64 100644 --- a/toolchain/helpers.mk +++ b/toolchain/helpers.mk @@ -481,8 +481,8 @@ check_toolchain_ssp = \ # gen_gdbinit_file = \ mkdir -p $(STAGING_DIR)/usr/share/buildroot/ ; \ - echo "set sysroot $(STAGING_DIR)" > $(STAGING_DIR)/usr/share/buildroot/gdbinit ; \ - echo "add-auto-load-safe-path $(STAGING_DIR)" >> $(STAGING_DIR)/usr/share/buildroot/gdbinit + echo "add-auto-load-safe-path $(STAGING_DIR)" > $(STAGING_DIR)/usr/share/buildroot/gdbinit ; \ + echo "set sysroot $(STAGING_DIR)" >> $(STAGING_DIR)/usr/share/buildroot/gdbinit # Given a path, determine the relative prefix (../) needed to return to the # root level. Note that the last component is treated as a file component; use a