docs/manual/using-buildroot-debugger: suggest '-ix' iso '-x' when loading gdbinit
PATCH 1/2 docs/manual/using-buildroot-debugger: suggest '-ix' iso '-x' when loading gdbinit
From: Thomas De Schampheleire <[email protected]>
A gdbinit file passed via '-x' will be read _after_ parsing any object/core file passed on the command-line. In cross-compilation context, this is particularly a problem when loading a core file, because without the 'sysroot' specified in the gdbinit file, it will give a lot of warnings, like:
warning: .dynamic section for "/lib/libstdc++.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/librt.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libm.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libgcc_s.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libc.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/ld-linux.so.2" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libanl.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libdl.so.2" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libpthread.so.0" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/usr/lib/libz.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libnss_files.so.2" is not at the expected address (wrong library or version mismatch?)
warning: Could not load shared library symbols for 17 libraries, e.g. [...] Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"?
In contrast, the '-ix' option will load the specified gdbinit file _before_ parsing object/core files. This will remove said warnings.
See also: https://sourceware.org/bugzilla/show_bug.cgi?id=28330
--- docs/manual/using-buildroot-debugger.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
docs/manual/using-buildroot-debugger.txt +1 -1
@@ -35,7 +35,7 @@ Then, on the host, you should start the cross gdb using the following command line: ---------------------------- -<buildroot>/output/host/bin/<tuple>-gdb -x <buildroot>/output/staging/usr/share/buildroot/gdbinit foo +<buildroot>/output/host/bin/<tuple>-gdb -ix <buildroot>/output/staging/usr/share/buildroot/gdbinit foo ---------------------------- Of course, +foo+ must be available in the current directory, built
Signature · 6 lines
2.32.0 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
PATCH 2/2 toolchain/helpers.mk: gdbinit: set auto-load-safe-path before sysroot
From: Thomas De Schampheleire <[email protected]>
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'.
--- toolchain/helpers.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
toolchain/helpers.mk +2 -2
@@ -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
Signature · 6 lines
2.32.0 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Arnout Vandecappelle
AppliedRe: [Buildroot] [PATCH 2/2] toolchain/helpers.mk: gdbinit: set auto-load-safe-path before sysroot
Quoted 30 lines · Thomas De Schampheleire
From: Thomas De Schampheleire <[email protected]>
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 commit6fb3216a80c64c08375429d89497eaeec5622150)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.pyfile, 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 addadd-auto-load-safe-path .../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.pyline 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.
Quoted 8 lines
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
Quoted 12 lines
Signed-off-by Thomas De Schampheleire <[email protected]>--- toolchain/helpers.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)toolchain/helpers.mk +0
-0
toolchain/helpers.mk check_toolchain_ssp = \ · line 488
Quoted 10 lines
toolchain/helpers.mk +2
-2@@ -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
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 2/2] toolchain/helpers.mk: gdbinit: set auto-load-safe-path before sysroot
Hi Arnout,
Quoted 37 lines · Arnout Vandecappelle
Quoted 33 lines · Thomas De Schampheleire
From: Thomas De Schampheleire <[email protected]>
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 commit6fb3216a80c64c08375429d89497eaeec5622150)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.pyfile, 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 addadd-auto-load-safe-path .../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.pyline 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.
Quoted 7 lines
Quoted 5 lines
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
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 2/2] toolchain/helpers.mk: gdbinit: set auto-load-safe-path before sysroot
In reply to Thomas De SchampheleireQuoted 34 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas De Schampheleire <[email protected]> writes:
From: Thomas De Schampheleire <[email protected]> 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 commit6fb3216a80c64c08375429d89497eaeec5622150)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.pyfile, 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 addadd-auto-load-safe-path .../i686-buildroot-linux-gnu/sysroot/lib/libstdc++.so.6.0.24-gdb.pyline 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.
Quoted 7 lines
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 <[email protected]>
Committed to 2021.08.x, thanks.
Signature · 5 lines
Bye, Peter Korsgaard _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Arnout Vandecappelle
AppliedQuoted 20 lines · Thomas De Schampheleire
From: Thomas De Schampheleire <[email protected]>
A gdbinit file passed via '-x' will be read _after_ parsing any object/core file passed on the command-line. In cross-compilation context, this is particularly a problem when loading a core file, because without the 'sysroot' specified in the gdbinit file, it will give a lot of warnings, like:
warning: .dynamic section for "
/lib/libstdc++.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/librt.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libm.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libgcc_s.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libc.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/ld-linux.so.2" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libanl.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libdl.so.2" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libpthread.so.0" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/usr/lib/libz.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libnss_files.so.2" is not at the expected address (wrong library or version mismatch?)
Quoted 6 lines
warning: Could not load shared library symbols for 17 libraries, e.g. [...] Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"?
In contrast, the '-ix' option will load the specified gdbinit file _before_ parsing object/core files. This will remove said warnings.
I didn't know this!
Applied to master, thanks.
Regards,
Arnout
Quoted 14 lines
See also: https://sourceware.org/bugzilla/show_bug.cgi?id=28330
Signed-off-by Thomas De Schampheleire <[email protected]>--- docs/manual/using-buildroot-debugger.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)docs/manual/using-buildroot-debugger.txt +0
-0
docs/manual/using-buildroot-debugger.txt Then, on the host, you should start the cross gdb using the following · line 41
Quoted 8 lines
docs/manual/using-buildroot-debugger.txt +1
-1@@ -35,7 +35,7 @@ Then, on the host, you should start the cross gdb using the following command line: ---------------------------- -<buildroot>/output/host/bin/<tuple>-gdb -x <buildroot>/output/staging/usr/share/buildroot/gdbinit foo +<buildroot>/output/host/bin/<tuple>-gdb -ix <buildroot>/output/staging/usr/share/buildroot/gdbinit foo ---------------------------- Of course, +foo+ must be available in the current directory, built
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Quoted 25 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas De Schampheleire <[email protected]> writes:
From: Thomas De Schampheleire <[email protected]> A gdbinit file passed via '-x' will be read _after_ parsing any object/core file passed on the command-line. In cross-compilation context, this is particularly a problem when loading a core file, because without the 'sysroot' specified in the gdbinit file, it will give a lot of warnings, like:
warning: .dynamic section for "
/lib/libstdc++.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/librt.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libm.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libgcc_s.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libc.so.6" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/ld-linux.so.2" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libanl.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libdl.so.2" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libpthread.so.0" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/usr/lib/libz.so.1" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/lib/libnss_files.so.2" is not at the expected address (wrong library or version mismatch?)warning: Could not load shared library symbols for 17 libraries, e.g. [...] Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"?
Quoted 6 lines
In contrast, the '-ix' option will load the specified gdbinit file _before_ parsing object/core files. This will remove said warnings.
See also: https://sourceware.org/bugzilla/show_bug.cgi?id=28330
Signed-off-by Thomas De Schampheleire <[email protected]>
Committed to 2021.02.x, 2021.05.x and 2021.08.x, thanks.
Signature · 5 lines
Bye, Peter Korsgaard _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot