From f0e204d99b1830cec4426ab28089777cb4ddedb8 Mon Sep 17 00:00:00 2001 From: Thomas De Schampheleire Date: Mon, 13 Sep 2021 09:29:42 +0200 Subject: [PATCH] toolchain/helpers.mk: gdbinit: set auto-load-safe-path before sysroot 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 Signed-off-by: Arnout Vandecappelle (Essensium/Mind) --- 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