Files
buildroot/package/gdb/Config.in
Thomas Petazzoni d98e15a363 package/gdb: really fix build with GCC 15.x by using external readline
The copy of readline bundled with gdb versions earlier than 16.x does
not build with GCC 15.x, despite our
0010-readline-tcap.h-Update-definitions-for-C23.patch. In GDB 16.x,
readline has been updated to 8.2, which fixes the issue, but
backporting this to older GDB versions results in a ~450 KB.

So let's take the approach we should have probably taken from the
ground up: use an external readline, instead of the bundled one. This
is exactly what this patch does. Instead of having gdb depend on
ncurses and host-gdb depend on host-ncurses, we make it depend on
readline/host-readline (which in turn already has a dependency on
ncurses). In fact, gdb does not need ncurses itself, it really needs
only readline.

Since the GDB TUI itself needs ncurses, we move the ncurses
select/dependency down to the GDB TUI option. This was pointed out by
Romain Naour.

Fixes:

  https://autobuild.buildroot.net/results/3b0ce5cfac81e150816027fc1259600ee02f0f1f/ (host gdb 14.x)
  https://autobuild.buildroot.net/results/e64e3cd7aa5e7315464e380982f7febaff5df908/ (host gdb 15.x)
  https://autobuild.buildroot.net/results/2f2616a4ac7d9cbc06ba7775eb57bdd2a0419cb5/ (host arc gdb)
  https://gitlab.com/buildroot.org/buildroot/-/jobs/11176774348 (TestGdbArc)
  https://gitlab.com/buildroot.org/buildroot/-/jobs/11176774349 (TestGdbFullTarget)
  https://gitlab.com/buildroot.org/buildroot/-/jobs/11176774355 (TestGdbserverOnly)

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
[Julien: as pointed out by Romain Naour:
 - also select and add readline dependency when
   BR2_PACKAGE_GDB_SERVER=y
 - add links to gitlab CI failures in commit log
]
Signed-off-by: Julien Olivain <ju.o@free.fr>
2025-09-06 22:37:18 +02:00

95 lines
3.0 KiB
Plaintext

config BR2_PACKAGE_GDB_ARCH_SUPPORTS
bool
default y
depends on !((BR2_arm || BR2_armeb) && BR2_BINFMT_FLAT)
depends on !BR2_microblaze
comment "gdb needs a glibc or uclibc toolchain"
depends on BR2_or1k
depends on BR2_TOOLCHAIN_USES_MUSL
comment "gdb/gdbserver needs a toolchain w/ threads, threads debug"
depends on BR2_PACKAGE_GDB_ARCH_SUPPORTS
depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_HAS_THREADS_DEBUG
comment "gdb/gdbserver >= 8.x needs a toolchain w/ C++, gcc >= 4.8"
depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
config BR2_PACKAGE_GDB
bool "gdb"
depends on BR2_TOOLCHAIN_HAS_THREADS && BR2_TOOLCHAIN_HAS_THREADS_DEBUG
depends on BR2_PACKAGE_GDB_ARCH_SUPPORTS
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
depends on BR2_INSTALL_LIBSTDCPP
# The or1k musl port is incomplete, elf_gregset_t definition is missing:
# https://git.musl-libc.org/cgit/musl/tree/arch/or1k/bits/user.h?h=v1.2.3
depends on !BR2_or1k || !BR2_TOOLCHAIN_USES_MUSL
# When the external toolchain gdbserver is copied to the
# target, we don't allow building a separate gdbserver. The
# one from the external toolchain should be used.
select BR2_PACKAGE_GDB_SERVER if \
(!BR2_PACKAGE_GDB_DEBUGGER && !BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY)
help
GDB, the GNU Project debugger, allows you to see what is
going on `inside' another program while it executes -- or
what another program was doing at the moment it crashed.
This option allows to build gdbserver and/or the gdb
debugger for the target.
For embedded development, the most common solution is to
build only 'gdbserver' for the target, and use a cross-gdb
on the host. See BR2_PACKAGE_HOST_GDB in the Toolchain menu
to enable one. Notice that external toolchains often provide
their own pre-built cross-gdb and gdbserver binaries.
http://www.gnu.org/software/gdb/
if BR2_PACKAGE_GDB
config BR2_PACKAGE_GDB_SERVER
bool "gdbserver"
depends on !BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY
select BR2_PACKAGE_READLINE
help
Build the gdbserver stub to run on the target.
A full gdb is needed to debug the program.
config BR2_PACKAGE_GDB_DEBUGGER
bool "full debugger"
depends on BR2_USE_WCHAR
depends on !BR2_sh
select BR2_PACKAGE_GMP
select BR2_PACKAGE_MPFR
select BR2_PACKAGE_READLINE
select BR2_PACKAGE_ZLIB
comment "full gdb on target needs a toolchain w/ wchar"
depends on !BR2_sh
depends on !BR2_USE_WCHAR
if BR2_PACKAGE_GDB_DEBUGGER
config BR2_PACKAGE_GDB_TUI
bool "TUI support"
select BR2_PACKAGE_NCURSES
help
This option enables terminal user interface (TUI) for gdb
"The GDB Text User Interface (TUI) is a terminal interface
which uses the curses library to show the source file, the
assembly output, the program registers and GDB commands in
separate text windows."
https://sourceware.org/gdb/current/onlinedocs/gdb/TUI.html
config BR2_PACKAGE_GDB_PYTHON
bool "Python support"
depends on BR2_PACKAGE_PYTHON3
help
This option enables Python support in the target gdb.
endif
endif