Commit 5931db0d authored by Peter Korsgaard's avatar Peter Korsgaard
Browse files

gdb: fix kconfig dependency handling with !BR_TOOLCHAIN_BUILDROOT



Newer versions of GDB need pthread debugging support if threads are
enabled, which is always the case for glibc but is a configure option
for uClibc.

We have solved this for internal toolchains by selecting the
BR2_PTHREAD_DEBUG option from the GDB selection if needed, but as this
option isn't available when ctng/external toolchains are used, mconf
prints ugly warnings and the build may fail if an external uClibc
toolchain without pthread debugging support is used.

Fix it by introducing 2 more hidden config options:
 - BR2_TOOLCHAIN_HAS_THREADS_DEBUG
 - BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED

The first tells us if the toolchain HAS pthreads debugging support,
and is checked by check_uclibc_feature in helper.mk for external uClibc
based toolchains.

The second tells us if the toolchain is ABLE TO provide pthreads debugging
support if threads are enabled, either because it's an internal toolchain
where we can force enable it or an external glibc/eglibc toolchain or
uClibc with the option enabled.

Crosstool-ng forcibly enables this support, so those will always work.
The preconfigured uClibc-based toolchains we have also all enable it.

Finally, show a comment if this isn't the case so the (external toolchain)
user knows why. This is placed outside the choice option, as menuconfig
has a bug where it doesn't show choice selections which only contain
comments.

Signed-off-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
parent 468f1cac
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ choice
config BR2_TOOLCHAIN_BUILDROOT
	bool "Buildroot toolchain"
	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED

config BR2_TOOLCHAIN_EXTERNAL
	bool "External toolchain"
@@ -22,6 +23,7 @@ config BR2_TOOLCHAIN_EXTERNAL
config BR2_TOOLCHAIN_CTNG
	bool "Crosstool-NG toolchain"
	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
	help
	  Say 'y' if you want to generate the toolchain with crosstool-NG
	  ( http://ymorin.is-a-geek.org/projects/crosstool )
+12 −4
Original line number Diff line number Diff line
@@ -52,25 +52,33 @@ choice
		bool "gdb 7.0.1"
		depends on !BR2_bfin
		depends on BR2_DEPRECATED
		select BR2_PTHREAD_DEBUG if !BR2_PTHREADS_NONE
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

	config BR2_GDB_VERSION_7_1
		bool "gdb 7.1"
		depends on !BR2_bfin
		select BR2_PTHREAD_DEBUG if !BR2_PTHREADS_NONE
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

	config BR2_GDB_VERSION_7_2
		bool "gdb 7.2.x"
		depends on !BR2_bfin
		select BR2_PTHREAD_DEBUG if !BR2_PTHREADS_NONE
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

	config BR2_GDB_VERSION_7_3
		bool "gdb 7.3.x"
		depends on !BR2_bfin
		select BR2_PTHREAD_DEBUG if !BR2_PTHREADS_NONE
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

endchoice

comment "gdb 7.x support needs pthread debug support in toolchain"
	depends on BR2_PACKAGE_GDB || BR2_PACKAGE_GDB_SERVER || BR2_PACKAGE_GDB_HOST
	depends on !BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED

config BR2_GDB_VERSION
	string
	default "6.6a"     if BR2_GDB_VERSION_6_6
+2 −1
Original line number Diff line number Diff line
@@ -195,7 +195,8 @@ check_uclibc = \
	$(call check_uclibc_feature,__UCLIBC_HAS_RPC__,BR2_INET_RPC,$${UCLIBC_CONFIG_FILE},RPC support) ;\
	$(call check_uclibc_feature,__UCLIBC_HAS_LOCALE__,BR2_ENABLE_LOCALE,$${UCLIBC_CONFIG_FILE},Locale support) ;\
	$(call check_uclibc_feature,__UCLIBC_HAS_WCHAR__,BR2_USE_WCHAR,$${UCLIBC_CONFIG_FILE},Wide char support) ;\
	$(call check_uclibc_feature,__UCLIBC_HAS_THREADS__,BR2_TOOLCHAIN_HAS_THREADS,$${UCLIBC_CONFIG_FILE},Thread support)
	$(call check_uclibc_feature,__UCLIBC_HAS_THREADS__,BR2_TOOLCHAIN_HAS_THREADS,$${UCLIBC_CONFIG_FILE},Thread support) ;\
	$(call check_uclibc_feature,__PTHREADS_DEBUG_SUPPORT__,BR2_TOOLCHAIN_HAS_THREADS_DEBUG,$${UCLIBC_CONFIG_FILE},Thread debugging support)

#
# Check that the Buildroot configuration of the ABI matches the
+8 −0
Original line number Diff line number Diff line
@@ -26,6 +26,14 @@ config BR2_INSTALL_LIBSTDCPP
config BR2_TOOLCHAIN_HAS_THREADS
	bool

config BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
	bool

config BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
	default y if !BR2_TOOLCHAIN_HAS_THREADS
	bool

config BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
	bool

+14 −0
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201103
	select BR2_INET_RPC
	select BR2_USE_WCHAR
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the SuperH architecture,
@@ -191,6 +192,7 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH2A_201009
	select BR2_INET_RPC
	select BR2_USE_WCHAR
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_INSTALL_LIBSTDCPP
	help
	  Sourcery CodeBench toolchain for the SuperH architecture,
@@ -224,6 +226,7 @@ config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2010RC1
	select BR2_INET_RPC
	select BR2_USE_WCHAR
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	help
	  Toolchain for the Blackfin architecture, from
	  http://blackfin.uclinux.org.
@@ -285,6 +288,7 @@ config BR2_TOOLCHAIN_EXTERNAL_GLIBC
	select BR2_USE_WCHAR
	select BR2_ENABLE_LOCALE
	select BR2_TOOLCHAIN_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS

config BR2_TOOLCHAIN_EXTERNAL_UCLIBC
@@ -361,6 +365,16 @@ config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
	  support. If you don't know, leave the default value,
	  Buildroot will tell you if it's correct or not.

config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG
	bool "Toolchain has threads debugging support?"
	depends on BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	default y
	help
	  Select this option if your external toolchain has thread
	  debugging support. If you don't know, leave the default
	  value, Buildroot will tell you if it's correct or not.

endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC

config BR2_TOOLCHAIN_EXTERNAL_CXX