Message ID | 1361916812-29395-1-git-send-email-thomas.petazzoni@free-electrons.com |
---|---|
State | Superseded |
Headers | show |
On 26/02/13 23:13, Thomas Petazzoni wrote: > This commit converts gdb to the package infrastructure, and therefore > moves it from toolchain/gdb to package/gdb. > > The target package is now visible in "Package selection for the > target" => "Debugging, profiling and benchmark". The main option, > "gdb", forcefully selects the "gdbserver" sub-option by > default. Another sub-option, "full debugger" allows to install the > complete gdb on the target. When this option is enabled, then > "gdbserver" is no longer forcefully selected. This ensures that at > least gdbserver or the full debugger gets built/installed, so that the > package is not a no-op. > > The host debugger is still enabled through a configuration option in > "Toolchain". It is now visible regardless of the toolchain type (it > used to be hidden for External Toolchains). The configuration options > relative to the host debugger are now in package/gdb/Config.in.host, > similar to how we have package/binutils/Config.in.host. > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> This looks like a great idea! Just a couple of generic remarks, and then a few specific ones below. The generic remarks are probably for follow-up patches. * It really doesn't make sense to build host-gdb without a gdbserver for the target. So I would auto-select gdbserver from host-gdb. * Does it really make sense to keep options for four different gdb versions? Can't we just remove the user-selectable version completely? * Do gdb-7.2+ actually work for avr32? If yes, why keep the 6.7.1 around? > --- > It would be good to have a few people testing this before committing. Nah, just let the autobuilders do it :-) [snip] > diff --git a/package/gdb/Config.in b/package/gdb/Config.in > new file mode 100644 > index 0000000..958a64a > --- /dev/null > +++ b/package/gdb/Config.in > @@ -0,0 +1,38 @@ > +config BR2_PACKAGE_GDB > + bool "gdb" > + select BR2_PACKAGE_GDB_SERVER if !BR2_PACKAGE_GDB_DEBUGGER > + 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 to enable one. "See BR2_PACKAGE_HOST_GDB in the Toolchain menu to enable one." It could be useful to add a comment that external toolchains often provide gdb/gdbserver. > + > + http://www.gnu.org/software/gdb/ > + > +if BR2_PACKAGE_GDB > + > +config BR2_PACKAGE_GDB_SERVER > + bool "gdbserver" > + help > + Build the gdbserver stub to run on the target. > + A full gdb is needed to debug the progam. > + > +config BR2_PACKAGE_GDB_DEBUGGER > + bool "full debugger" > + select BR2_PACKAGE_NCURSES > + depends on BR2_USE_WCHAR > + depends on BR2_TOOLCHAIN_HAS_THREADS > + depends on !BR2_sh && !BR2_sh64 && !BR2_avr32 && !BR2_microblaze && !BR2_bfin && !BR2_aarch64 > + depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED > + select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE) It feels pretty strange to modify a toolchain option from a package Config.in. Remember, the user may add gdb in a second run and try to do an incremental build... So I would say: move it to a depends like we usually do. > + > +comment "full gdb on target needs WCHAR and threads support in toolchain" > + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS > + > +endif > diff --git a/package/gdb/Config.in.host b/package/gdb/Config.in.host > new file mode 100644 > index 0000000..6ee1d26 > --- /dev/null > +++ b/package/gdb/Config.in.host > @@ -0,0 +1,56 @@ > +config BR2_PACKAGE_HOST_GDB > + bool "Build cross gdb for the host" > + help > + Build a cross gdb that runs on the host machine and debugs > + programs running on the target. It requires 'gdbserver' > + installed on the target, see BR2_PACKAGE_GDB_SERVER to > + enable it. As I said, I would just auto-select BR2_PACKAGE_GDB, which will select BR2_PACKAGE_GDB_SERVER [snip] > diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk > new file mode 100644 > index 0000000..c102cc9 > --- /dev/null > +++ b/package/gdb/gdb.mk > @@ -0,0 +1,100 @@ > +############################################################# > +# > +# gdb > +# > +############################################################# > + > +GDB_VERSION = $(call qstrip,$(BR2_GDB_VERSION)) > + > +# When no version is defined, it means that cross-gdb for the host has > +# not been enabled, and we will only build gdbserver or gdb for the > +# target. In this case, use the latest available version > +# automatically. > +ifeq ($(GDB_VERSION),) > +ifeq ($(BR2_bfin),y) > +GDB_VERSION = 6.6a > +GDB_SITE = $(BR2_GNU_MIRROR)/gdb Just define this once, either before the condition (and override it for avr32), or after the condition (and use ?=). > +else ifeq ($(BR2_avr32),y) > +GDB_VERSION = 6.7.1-avr32-2.1.5 > +GDB_SITE = ftp://www.at91.com/pub/buildroot/ > +else > +GDB_VERSION = 7.5.1 > +GDB_SITE = $(BR2_GNU_MIRROR)/gdb > +endif > +endif > + > +GDB_SOURCE = gdb-$(GDB_VERSION).tar.bz2 > +GDB_LICENSE = GPLv2+ LGPLv2+ GPLv3+ LGPLv3+ > +GDB_LICENSE_FILES = COPYING COPYING.LIB COPYING3 COPYING3.LIB > + > +# We only want gdbserver and not the entire debugger. > +ifeq ($(BR2_PACKAGE_GDB_DEBUGGER),) > +GDB_SUBDIR = gdb/gdbserver > +HOST_GDB_SUBDIR = . > +else > +GDB_DEPENDENCIES = ncurses > +endif > + > +# For the host variant, we really want to build with XML support, > +# which is needed to read XML descriptions of target architectures. > +HOST_GDB_DEPENDENCIES = host-expat Can we rely on host-nurses being present? It is not checked in dependencies.sh AFAIK. Admittedly, it is not a dependency of host-gdb now, but most people have ncurses installed anyway for menuconfig... [snip] > +define GDB_REMOVE_UNNEEDED_FILES > + $(RM) -rf $(TARGET_DIR)/usr/share/gdb > +endef Perhaps a comment why this is needed? Or is it just to keep it consistent with the current behaviour? Regards, Arnout > + > +GDB_POST_INSTALL_TARGET_HOOKS += GDB_REMOVE_UNNEEDED_FILES > + > +# A few notes: > +# * --target, because we're doing a cross build rather than a real > +# host build. > +# * --enable-static because gdb really wants to use libbfd.a > +# * --disable-shared, otherwise the old 6.7 version specific to AVR32 > +# doesn't build because it wants to link a shared libbfd.so against > +# non-PIC liberty.a. > +HOST_GDB_CONF_OPT = \ > + --target=$(GNU_TARGET_NAME) \ > + --enable-static --disable-shared \ > + --without-uiout \ > + --disable-tui \ > + --disable-gdbtk \ > + --without-x \ > + --enable-threads \ > + --disable-werror \ > + --without-included-gettext \ > + --disable-sim > + > +$(eval $(autotools-package)) > +$(eval $(host-autotools-package)) [snip]
On 28/02/13 08:00, Arnout Vandecappelle wrote: > On 26/02/13 23:13, Thomas Petazzoni wrote: >> This commit converts gdb to the package infrastructure, and therefore >> moves it from toolchain/gdb to package/gdb. >> >> The target package is now visible in "Package selection for the >> target" => "Debugging, profiling and benchmark". The main option, >> "gdb", forcefully selects the "gdbserver" sub-option by >> default. Another sub-option, "full debugger" allows to install the >> complete gdb on the target. When this option is enabled, then >> "gdbserver" is no longer forcefully selected. This ensures that at >> least gdbserver or the full debugger gets built/installed, so that the >> package is not a no-op. >> >> The host debugger is still enabled through a configuration option in >> "Toolchain". It is now visible regardless of the toolchain type (it >> used to be hidden for External Toolchains). The configuration options >> relative to the host debugger are now in package/gdb/Config.in.host, >> similar to how we have package/binutils/Config.in.host. >> >> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> > > This looks like a great idea! > > Just a couple of generic remarks, and then a few specific ones below. > The generic remarks are probably for follow-up patches. > > * It really doesn't make sense to build host-gdb without a gdbserver for > the target. So I would auto-select gdbserver from host-gdb. Kgdb (kernel debugging) is one use case where you'd want host-gdb without necessarily gdbserver. > > * Does it really make sense to keep options for four different gdb > versions? Can't we just remove the user-selectable version completely? The option is useful for arches which don't have their gdb port upstream yet, giving them a chance to update their patches. Cheers James
Dear James Hogan, On Thu, 28 Feb 2013 08:39:18 +0000, James Hogan wrote: > > * It really doesn't make sense to build host-gdb without a > > gdbserver for the target. So I would auto-select gdbserver from > > host-gdb. > > Kgdb (kernel debugging) is one use case where you'd want host-gdb > without necessarily gdbserver. Hum, correct. > > * Does it really make sense to keep options for four different gdb > > versions? Can't we just remove the user-selectable version > > completely? > > The option is useful for arches which don't have their gdb port > upstream yet, giving them a chance to update their patches. Not sure to follow here: Arnout mentions the choice list of gdb versions, which only have a limited number of choices already. If you need Buildroot to use some custom gdb version, then you already have to modify Buildroot anyway. Or maybe I'm missing the point you're making? Thanks! Thomas
Dear Arnout Vandecappelle, On Thu, 28 Feb 2013 09:00:45 +0100, Arnout Vandecappelle wrote: > This looks like a great idea! Thanks :-) > Just a couple of generic remarks, and then a few specific ones > below. The generic remarks are probably for follow-up patches. > > * It really doesn't make sense to build host-gdb without a gdbserver > for the target. So I would auto-select gdbserver from host-gdb. See the point made by James Hogan regarding kgdb. I don't have a strong opinion on this one, and we could decide that gdbserver is lightweight enough that even with James use case of kgdb, it still makes sense to have gdbserver on the target when host-gdb is enabled. > * Does it really make sense to keep options for four different gdb > versions? Can't we just remove the user-selectable version completely? I just kept as it was. > * Do gdb-7.2+ actually work for avr32? If yes, why keep the 6.7.1 > around? I also just kept it as it was. If we want to upgrade gdb for avr32, then let's do it as a follow-up. People having access to avr32 hardware should test that. > > --- > > It would be good to have a few people testing this before > > committing. > > Nah, just let the autobuilders do it :-) Autobuilders are nice, but they are not yet capable of starting gdbserver on the target, connect gdb, and verify that it works :) > > + 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 to enable one. > > "See BR2_PACKAGE_HOST_GDB in the Toolchain menu to enable one." > > It could be useful to add a comment that external toolchains often > provide gdb/gdbserver. Indeed. I am not sure what do with external toolchains here. In the past, I was hiding the option to build host-gdb and gdbserver for the target, making the assumption that the external toolchain already have those, and instead there was the option to copy the toolchain's gdbserver to the target. Now, everything is available: host-gdb built by Buildroot, gdbserver built by Buildroot, and gdbserver copied from the external toolchain. Should I keep all this? Also, the "gdbserver build by Buildroot" thing is in Packages -> Debugging, but the "copy gdbserver from toolchain" thing is in Toolchain. But it's not easy to put it in a package, as the code needed to copy gdbserver from the toolchain really relates to all the complex external toolchain logic. > > + http://www.gnu.org/software/gdb/ > > + > > +if BR2_PACKAGE_GDB > > + > > +config BR2_PACKAGE_GDB_SERVER > > + bool "gdbserver" > > + help > > + Build the gdbserver stub to run on the target. > > + A full gdb is needed to debug the progam. > > + > > +config BR2_PACKAGE_GDB_DEBUGGER > > + bool "full debugger" > > + select BR2_PACKAGE_NCURSES > > + depends on BR2_USE_WCHAR > > + depends on BR2_TOOLCHAIN_HAS_THREADS > > + depends on !BR2_sh && !BR2_sh64 && !BR2_avr32 > > && !BR2_microblaze && !BR2_bfin && !BR2_aarch64 > > + depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED > > + select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT > > && !BR2_PTHREADS_NONE) > > It feels pretty strange to modify a toolchain option from a package > Config.in. Remember, the user may add gdb in a second run and try to > do an incremental build... So I would say: move it to a depends like > we usually do. Ok. > > +comment "full gdb on target needs WCHAR and threads support in > > toolchain" > > + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS > > + > > +endif > > diff --git a/package/gdb/Config.in.host b/package/gdb/Config.in.host > > new file mode 100644 > > index 0000000..6ee1d26 > > --- /dev/null > > +++ b/package/gdb/Config.in.host > > @@ -0,0 +1,56 @@ > > +config BR2_PACKAGE_HOST_GDB > > + bool "Build cross gdb for the host" > > + help > > + Build a cross gdb that runs on the host machine and > > debugs > > + programs running on the target. It requires 'gdbserver' > > + installed on the target, see BR2_PACKAGE_GDB_SERVER to > > + enable it. > > As I said, I would just auto-select BR2_PACKAGE_GDB, which will > select BR2_PACKAGE_GDB_SERVER Hum, why not select BR2_PACKAGE_GDB and BR2_PACKAGE_GDB_SERVER? If you select BR2_PACKAGE_GDB only, it still the user the possibility to build only the target debugger, and not gdbserver. > > +# When no version is defined, it means that cross-gdb for the host > > has +# not been enabled, and we will only build gdbserver or gdb > > for the +# target. In this case, use the latest available version > > +# automatically. > > +ifeq ($(GDB_VERSION),) > > +ifeq ($(BR2_bfin),y) > > +GDB_VERSION = 6.6a > > +GDB_SITE = $(BR2_GNU_MIRROR)/gdb > > Just define this once, either before the condition (and override it > for avr32), or after the condition (and use ?=). Ok. > > > +else ifeq ($(BR2_avr32),y) > > +GDB_VERSION = 6.7.1-avr32-2.1.5 > > +GDB_SITE = ftp://www.at91.com/pub/buildroot/ > > +else > > +GDB_VERSION = 7.5.1 > > +GDB_SITE = $(BR2_GNU_MIRROR)/gdb > > +endif > > +endif > > + > > +GDB_SOURCE = gdb-$(GDB_VERSION).tar.bz2 > > +GDB_LICENSE = GPLv2+ LGPLv2+ GPLv3+ LGPLv3+ > > +GDB_LICENSE_FILES = COPYING COPYING.LIB COPYING3 COPYING3.LIB > > + > > +# We only want gdbserver and not the entire debugger. > > +ifeq ($(BR2_PACKAGE_GDB_DEBUGGER),) > > +GDB_SUBDIR = gdb/gdbserver > > +HOST_GDB_SUBDIR = . > > +else > > +GDB_DEPENDENCIES = ncurses > > +endif > > + > > +# For the host variant, we really want to build with XML support, > > +# which is needed to read XML descriptions of target architectures. > > +HOST_GDB_DEPENDENCIES = host-expat > > Can we rely on host-nurses being present? It is not checked in > dependencies.sh AFAIK. Admittedly, it is not a dependency of host-gdb > now, but most people have ncurses installed anyway for menuconfig... host-ncurses wasn't a dependency, and our host-ncurses package is only here to build a version of "tic" that works properly. Some systems had a "tic" version causing problems when building a more recent ncurses for the target. I think that other than for this "tic" program, we should really on the pre-installed ncurses library, which should already be present since the user uses menuconfig. However, it's true we don't check it in dependencies.sh, and the user could very well be using xconfig or gconfig, neither of which require ncurses. I'd say that's a separate matter really. > [snip] > > +define GDB_REMOVE_UNNEEDED_FILES > > + $(RM) -rf $(TARGET_DIR)/usr/share/gdb > > +endef > > Perhaps a comment why this is needed? Or is it just to keep it > consistent with the current behaviour? The old gdb installation logic was to manually copy the gdb binary to the $(TARGET_DIR). In my patch, I've chosen to use 'make install' instead, which requires removing a bunch of generally useless stuff (Python scripts and XML descriptions of targets, which as per my understanding, are needed only when you do remote debugging). Thanks for the review! Best regards, Thomas
Hi Thomas, On 28/02/13 08:47, Thomas Petazzoni wrote: > On Thu, 28 Feb 2013 08:39:18 +0000, James Hogan wrote: > >>> * It really doesn't make sense to build host-gdb without a >>> gdbserver for the target. So I would auto-select gdbserver from >>> host-gdb. >> >> Kgdb (kernel debugging) is one use case where you'd want host-gdb >> without necessarily gdbserver. > > Hum, correct. > >>> * Does it really make sense to keep options for four different gdb >>> versions? Can't we just remove the user-selectable version >>> completely? >> >> The option is useful for arches which don't have their gdb port >> upstream yet, giving them a chance to update their patches. > > Not sure to follow here: Arnout mentions the choice list of gdb > versions, which only have a limited number of choices already. If you > need Buildroot to use some custom gdb version, then you already have to > modify Buildroot anyway. Or maybe I'm missing the point you're making? Yes, but the modification is as simple as adding a patch file in the right place. Cheers James
Dear James Hogan, On Thu, 28 Feb 2013 12:11:35 +0000, James Hogan wrote: > > Not sure to follow here: Arnout mentions the choice list of gdb > > versions, which only have a limited number of choices already. If you > > need Buildroot to use some custom gdb version, then you already have to > > modify Buildroot anyway. Or maybe I'm missing the point you're making? > > Yes, but the modification is as simple as adding a patch file in the > right place. It's still the case here: just add your patch in package/gdb/<version>/, and that's it. No? Thomas
Hi Thomas, On 28/02/13 12:20, Thomas Petazzoni wrote: > On Thu, 28 Feb 2013 12:11:35 +0000, James Hogan wrote: > >>> Not sure to follow here: Arnout mentions the choice list of gdb >>> versions, which only have a limited number of choices already. If you >>> need Buildroot to use some custom gdb version, then you already have to >>> modify Buildroot anyway. Or maybe I'm missing the point you're making? >> >> Yes, but the modification is as simple as adding a patch file in the >> right place. > > It's still the case here: just add your patch in > package/gdb/<version>/, and that's it. I may have misunderstood what Arnout meant then. I thought he was referring to removing the choice of GDB version ("Can't we just remove the user-selectable version completely?"). Anyway, no big deal. Cheers James
>> Just a couple of generic remarks, and then a few specific ones >> below. The generic remarks are probably for follow-up patches. >> >> * It really doesn't make sense to build host-gdb without a gdbserver >> for the target. So I would auto-select gdbserver from host-gdb. > > See the point made by James Hogan regarding kgdb. I don't have a strong > opinion on this one, and we could decide that gdbserver is lightweight > enough that even with James use case of kgdb, it still makes sense to > have gdbserver on the target when host-gdb is enabled. Running a remote kgdb is something you would need the most on a system with little memory, so indeed the non-gdbserver use case is important. So, keep it as you have it. >> * Does it really make sense to keep options for four different gdb >> versions? Can't we just remove the user-selectable version completely? > > I just kept as it was. As I said: for a follow-up patch. James Hogan makes another good point that custom patches against a specific gdb version are easier to maintain if the version is selectable. However, when the generic package infrastructure is used, changing the version number directly in gdb.mk is also easy. I think the use case of custom patches against gdb is sufficiently rare that Kconfig configuration is not needed. >> * Do gdb-7.2+ actually work for avr32? If yes, why keep the 6.7.1 >> around? > > I also just kept it as it was. If we want to upgrade gdb for avr32, > then let's do it as a follow-up. People having access to avr32 hardware > should test that. Actually, I mean: there is an avr32-specific gdb version, but the 7.x gdb versions are also enabled for avr32. It just looks strange. >>> --- >>> It would be good to have a few people testing this before >>> committing. >> >> Nah, just let the autobuilders do it :-) > > Autobuilders are nice, but they are not yet capable of starting > gdbserver on the target, connect gdb, and verify that it works :) True, but the change you make here is not going to affect gdb runtime. The likelihood that there is serious build breakage is much higher than that of a runtime regression, I think. Also if there is a runtime regression, the chance that it will be found is much higher if it's been committed than if the patch is just lingering on the list. >>> + 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 to enable one. >> >> "See BR2_PACKAGE_HOST_GDB in the Toolchain menu to enable one." >> >> It could be useful to add a comment that external toolchains often >> provide gdb/gdbserver. > > Indeed. I am not sure what do with external toolchains here. In the > past, I was hiding the option to build host-gdb and gdbserver for > the target, making the assumption that the external toolchain already > have those, and instead there was the option to copy the toolchain's > gdbserver to the target. Now, everything is available: host-gdb built > by Buildroot, gdbserver built by Buildroot, and gdbserver copied from > the external toolchain. Should I keep all this? You could make the gdbserver copied from the external toolchain mutually exclusive with the gdb package, but I'm not convinced that that is needed. > Also, the "gdbserver build by Buildroot" thing is in Packages -> > Debugging, but the "copy gdbserver from toolchain" thing is in > Toolchain. But it's not easy to put it in a package, as the code needed > to copy gdbserver from the toolchain really relates to all the complex > external toolchain logic. Well, the location of the config menu is independent from where it is used in the .mk files, of course. Wild idea: In Toolchain menu, under all the rest: [ ] Cross gdb for the host GDB debugger version (gdb 7.5.x) --> [ ] gdbserver on the target [ ] Copy external toolchain gdbserver to the target [ ] full gdb on the target Hm, this looks very much like the current situation :-) Admittedly, gdb's Config.in would look pretty non-standard (e.g. a blind BR2_PACKAGE_GDB symbol that is selected by BR2_PACKAGE_GDB_GDBSERVER and BR2_PACKAGE_GDB_DEBUGGER), but it is a fairly special case. [snip] >> Can we rely on host-nurses being present? It is not checked in >> dependencies.sh AFAIK. Admittedly, it is not a dependency of host-gdb >> now, but most people have ncurses installed anyway for menuconfig... > > host-ncurses wasn't a dependency, and our host-ncurses package is only > here to build a version of "tic" that works properly. Some systems had > a "tic" version causing problems when building a more recent ncurses > for the target. I think that other than for this "tic" program, we > should really on the pre-installed ncurses library, which should > already be present since the user uses menuconfig. I guess even better would be a build-if-missing approach like for tar and python (when the patch gets merged). > > However, it's true we don't check it in dependencies.sh, and the user > could very well be using xconfig or gconfig, neither of which require > ncurses. > > I'd say that's a separate matter really. Agreed. This patch is just an opportunity to review gdb in general. > >> [snip] >>> +define GDB_REMOVE_UNNEEDED_FILES >>> + $(RM) -rf $(TARGET_DIR)/usr/share/gdb >>> +endef >> >> Perhaps a comment why this is needed? Or is it just to keep it >> consistent with the current behaviour? > > The old gdb installation logic was to manually copy the gdb binary to > the $(TARGET_DIR). In my patch, I've chosen to use 'make install' > instead, which requires removing a bunch of generally useless stuff > (Python scripts and XML descriptions of targets, which as per my > understanding, are needed only when you do remote debugging). Fair enough. I feel something like this is worthwhile to explain in a comment. Regards, Arnout
diff --git a/Config.in.legacy b/Config.in.legacy index d90132c..00654b5 100644 --- a/Config.in.legacy +++ b/Config.in.legacy @@ -40,6 +40,17 @@ comment "As long as these options stay selected, the build " comment "will fail. " endif +# +# Legacy options since 2013.02 +# +config BR2_PACKAGE_GDB_HOST + bool "gdb for the host option has been renamed" + select BR2_PACKAGE_HOST_GDB + select BR2_LEGACY + help + Due to the conversion of gdb to the package infrastructure, + the BR2_PACKAGE_GDB_HOST option has been renamed + BR2_PACKAGE_HOST_GDB. # # Legacy options since 2012.11 diff --git a/package/Config.in b/package/Config.in index 2fad94d..3266c37 100644 --- a/package/Config.in +++ b/package/Config.in @@ -22,6 +22,7 @@ source "package/cache-calibrator/Config.in" source "package/dhrystone/Config.in" source "package/dstat/Config.in" source "package/dmalloc/Config.in" +source "package/gdb/Config.in" source "package/kexec/Config.in" source "package/latencytop/Config.in" source "package/lmbench/Config.in" diff --git a/toolchain/gdb/6.6a/100-uclibc-conf.patch b/package/gdb/6.6a/100-uclibc-conf.patch similarity index 100% rename from toolchain/gdb/6.6a/100-uclibc-conf.patch rename to package/gdb/6.6a/100-uclibc-conf.patch diff --git a/toolchain/gdb/6.6a/600-fix-compile-flag-mismatch.patch b/package/gdb/6.6a/600-fix-compile-flag-mismatch.patch similarity index 100% rename from toolchain/gdb/6.6a/600-fix-compile-flag-mismatch.patch rename to package/gdb/6.6a/600-fix-compile-flag-mismatch.patch diff --git a/toolchain/gdb/6.6a/gdb-6.6-bfin-gdbserver.patch b/package/gdb/6.6a/gdb-6.6-bfin-gdbserver.patch similarity index 100% rename from toolchain/gdb/6.6a/gdb-6.6-bfin-gdbserver.patch rename to package/gdb/6.6a/gdb-6.6-bfin-gdbserver.patch diff --git a/toolchain/gdb/7.4.1/00_all_ptrace_setsiginfo.patch b/package/gdb/7.4.1/00_all_ptrace_setsiginfo.patch similarity index 100% rename from toolchain/gdb/7.4.1/00_all_ptrace_setsiginfo.patch rename to package/gdb/7.4.1/00_all_ptrace_setsiginfo.patch diff --git a/toolchain/gdb/7.4.1/05_all_readline-headers.patch b/package/gdb/7.4.1/05_all_readline-headers.patch similarity index 100% rename from toolchain/gdb/7.4.1/05_all_readline-headers.patch rename to package/gdb/7.4.1/05_all_readline-headers.patch diff --git a/toolchain/gdb/7.4.1/xtensa-asm-ptrace-h.patch b/package/gdb/7.4.1/xtensa-asm-ptrace-h.patch similarity index 100% rename from toolchain/gdb/7.4.1/xtensa-asm-ptrace-h.patch rename to package/gdb/7.4.1/xtensa-asm-ptrace-h.patch diff --git a/toolchain/gdb/7.4.1/xtensa-gdb-regsize.patch b/package/gdb/7.4.1/xtensa-gdb-regsize.patch similarity index 100% rename from toolchain/gdb/7.4.1/xtensa-gdb-regsize.patch rename to package/gdb/7.4.1/xtensa-gdb-regsize.patch diff --git a/package/gdb/Config.in b/package/gdb/Config.in new file mode 100644 index 0000000..958a64a --- /dev/null +++ b/package/gdb/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_GDB + bool "gdb" + select BR2_PACKAGE_GDB_SERVER if !BR2_PACKAGE_GDB_DEBUGGER + 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 to enable one. + + http://www.gnu.org/software/gdb/ + +if BR2_PACKAGE_GDB + +config BR2_PACKAGE_GDB_SERVER + bool "gdbserver" + help + Build the gdbserver stub to run on the target. + A full gdb is needed to debug the progam. + +config BR2_PACKAGE_GDB_DEBUGGER + bool "full debugger" + select BR2_PACKAGE_NCURSES + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_sh && !BR2_sh64 && !BR2_avr32 && !BR2_microblaze && !BR2_bfin && !BR2_aarch64 + depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED + select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE) + +comment "full gdb on target needs WCHAR and threads support in toolchain" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +endif diff --git a/package/gdb/Config.in.host b/package/gdb/Config.in.host new file mode 100644 index 0000000..6ee1d26 --- /dev/null +++ b/package/gdb/Config.in.host @@ -0,0 +1,56 @@ +config BR2_PACKAGE_HOST_GDB + bool "Build cross gdb for the host" + help + Build a cross gdb that runs on the host machine and debugs + programs running on the target. It requires 'gdbserver' + installed on the target, see BR2_PACKAGE_GDB_SERVER to + enable it. + +if BR2_PACKAGE_HOST_GDB + +choice + prompt "GDB debugger Version" + default BR2_GDB_VERSION_6_6 if BR2_bfin + default BR2_GDB_VERSION_6_7_1_AVR32_2_1_5 if BR2_avr32 + default BR2_GDB_VERSION_7_5 + help + Select the version of gdb you wish to use. + + config BR2_GDB_VERSION_6_6 + bool "gdb 6.6" + depends on BR2_bfin + + config BR2_GDB_VERSION_6_7_1_AVR32_2_1_5 + depends on BR2_avr32 + bool "gdb 6.7.1-avr32-2.1.5" + + config BR2_GDB_VERSION_7_2 + bool "gdb 7.2.x" + depends on !BR2_bfin + depends on BR2_DEPRECATED + + config BR2_GDB_VERSION_7_3 + bool "gdb 7.3.x" + depends on !BR2_bfin + depends on BR2_DEPRECATED + + config BR2_GDB_VERSION_7_4 + bool "gdb 7.4.x" + depends on !BR2_bfin + + config BR2_GDB_VERSION_7_5 + bool "gdb 7.5.x" + depends on !BR2_bfin + +endchoice + +config BR2_GDB_VERSION + string + default "6.6a" if BR2_GDB_VERSION_6_6 + default "6.7.1-avr32-2.1.5" if BR2_GDB_VERSION_6_7_1_AVR32_2_1_5 + default "7.2a" if BR2_GDB_VERSION_7_2 + default "7.3.1" if BR2_GDB_VERSION_7_3 + default "7.4.1" if BR2_GDB_VERSION_7_4 + default "7.5.1" if BR2_GDB_VERSION_7_5 + +endif diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk new file mode 100644 index 0000000..c102cc9 --- /dev/null +++ b/package/gdb/gdb.mk @@ -0,0 +1,100 @@ +############################################################# +# +# gdb +# +############################################################# + +GDB_VERSION = $(call qstrip,$(BR2_GDB_VERSION)) + +# When no version is defined, it means that cross-gdb for the host has +# not been enabled, and we will only build gdbserver or gdb for the +# target. In this case, use the latest available version +# automatically. +ifeq ($(GDB_VERSION),) +ifeq ($(BR2_bfin),y) +GDB_VERSION = 6.6a +GDB_SITE = $(BR2_GNU_MIRROR)/gdb +else ifeq ($(BR2_avr32),y) +GDB_VERSION = 6.7.1-avr32-2.1.5 +GDB_SITE = ftp://www.at91.com/pub/buildroot/ +else +GDB_VERSION = 7.5.1 +GDB_SITE = $(BR2_GNU_MIRROR)/gdb +endif +endif + +GDB_SOURCE = gdb-$(GDB_VERSION).tar.bz2 +GDB_LICENSE = GPLv2+ LGPLv2+ GPLv3+ LGPLv3+ +GDB_LICENSE_FILES = COPYING COPYING.LIB COPYING3 COPYING3.LIB + +# We only want gdbserver and not the entire debugger. +ifeq ($(BR2_PACKAGE_GDB_DEBUGGER),) +GDB_SUBDIR = gdb/gdbserver +HOST_GDB_SUBDIR = . +else +GDB_DEPENDENCIES = ncurses +endif + +# For the host variant, we really want to build with XML support, +# which is needed to read XML descriptions of target architectures. +HOST_GDB_DEPENDENCIES = host-expat + +# Apply the Xtensa specific patches +XTENSA_CORE_NAME = $(call qstrip, $(BR2_XTENSA_CORE_NAME)) +ifneq ($(XTENSA_CORE_NAME),) +define GDB_XTENSA_PRE_PATCH + tar xf $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(XTENSA_CORE_NAME).tar \ + -C $(@D) --strip-components=1 gdb +endef +HOST_GDB_PRE_PATCH_HOOKS += GDB_XTENSA_PRE_PATCH +endif + +GDB_CONF_ENV = \ + ac_cv_type_uintptr_t=yes \ + gt_cv_func_gettext_libintl=yes \ + ac_cv_func_dcgettext=yes \ + gdb_cv_func_sigsetjmp=yes \ + bash_cv_func_strcoll_broken=no \ + bash_cv_must_reinstall_sighandlers=no \ + bash_cv_func_sigsetjmp=present \ + bash_cv_have_mbstate_t=yes \ + gdb_cv_func_sigsetjmp=yes + +GDB_CONF_OPT = \ + --without-uiout \ + --disable-tui \ + --disable-gdbtk \ + --without-x \ + --disable-sim \ + $(if $(BR2_PACKAGE_GDB_SERVER),--enable-gdbserver) \ + --with-curses \ + --without-included-gettext \ + --disable-werror + +define GDB_REMOVE_UNNEEDED_FILES + $(RM) -rf $(TARGET_DIR)/usr/share/gdb +endef + +GDB_POST_INSTALL_TARGET_HOOKS += GDB_REMOVE_UNNEEDED_FILES + +# A few notes: +# * --target, because we're doing a cross build rather than a real +# host build. +# * --enable-static because gdb really wants to use libbfd.a +# * --disable-shared, otherwise the old 6.7 version specific to AVR32 +# doesn't build because it wants to link a shared libbfd.so against +# non-PIC liberty.a. +HOST_GDB_CONF_OPT = \ + --target=$(GNU_TARGET_NAME) \ + --enable-static --disable-shared \ + --without-uiout \ + --disable-tui \ + --disable-gdbtk \ + --without-x \ + --enable-threads \ + --disable-werror \ + --without-included-gettext \ + --disable-sim + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/toolchain/gdb/Config.in b/toolchain/gdb/Config.in deleted file mode 100644 index 69f7915..0000000 --- a/toolchain/gdb/Config.in +++ /dev/null @@ -1,99 +0,0 @@ -comment "Gdb Options" - -config BR2_PACKAGE_GDB - bool "Build gdb debugger for the Target" - select BR2_PACKAGE_NCURSES - depends on BR2_USE_WCHAR - depends on BR2_TOOLCHAIN_HAS_THREADS - depends on !BR2_sh && !BR2_sh64 && !BR2_avr32 && !BR2_microblaze && !BR2_bfin && !BR2_aarch64 - # The newest versions of gdb require thread debugging in the - # toolchain. The only cases for which this is not needed is if - # we use gdb 6.8 (marked deprecated) - depends on \ - BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED || \ - BR2_DEPRECATED || \ - BR2_bfin - help - Build the full gdb debugger to run on the target. - -comment "Gdb for the target needs WCHAR and threads support in toolchain" - depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS - -config BR2_PACKAGE_GDB_SERVER - bool "Build gdb server for the Target" - depends on !BR2_TOOLCHAIN_EXTERNAL - help - Build the gdbserver stub to run on the target. - A full gdb is needed to debug the progam. - -config BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY - bool "Copy gdb server to the Target" - depends on BR2_TOOLCHAIN_EXTERNAL - help - Copy the gdbserver provided by the external toolchain to the - target. - -config BR2_PACKAGE_GDB_HOST - bool "Build gdb for the Host" - # cross-gdb is supposed to be part of the external - # toolchain. And the build currently fails. - depends on !BR2_TOOLCHAIN_EXTERNAL - help - Build gdb to run on the host to debug programs run on the target. - -choice - prompt "GDB debugger Version" - default BR2_GDB_VERSION_6_6 if BR2_bfin - default BR2_GDB_VERSION_6_7_1_AVR32_2_1_5 if BR2_avr32 - default BR2_GDB_VERSION_7_5 - depends on BR2_PACKAGE_GDB || BR2_PACKAGE_GDB_SERVER || BR2_PACKAGE_GDB_HOST - help - Select the version of gdb you wish to use. - - config BR2_GDB_VERSION_6_6 - bool "gdb 6.6" - depends on BR2_bfin - - config BR2_GDB_VERSION_6_7_1_AVR32_2_1_5 - depends on BR2_avr32 - bool "gdb 6.7.1-avr32-2.1.5" - - config BR2_GDB_VERSION_7_2 - bool "gdb 7.2.x" - depends on !BR2_bfin - depends on BR2_DEPRECATED - 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 - depends on BR2_DEPRECATED - 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_4 - bool "gdb 7.4.x" - depends on !BR2_bfin - 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_5 - bool "gdb 7.5.x" - depends on !BR2_bfin - depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED - select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE) - -endchoice - -comment "gdb support needs pthread debug support in toolchain" - depends on !BR2_DEPRECATED && !BR2_bfin && !BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED - -config BR2_GDB_VERSION - string - default "6.6a" if BR2_GDB_VERSION_6_6 - default "6.7.1-avr32-2.1.5" if BR2_GDB_VERSION_6_7_1_AVR32_2_1_5 - default "7.2a" if BR2_GDB_VERSION_7_2 - default "7.3.1" if BR2_GDB_VERSION_7_3 - default "7.4.1" if BR2_GDB_VERSION_7_4 - default "7.5.1" if BR2_GDB_VERSION_7_5 diff --git a/toolchain/gdb/gdb.mk b/toolchain/gdb/gdb.mk deleted file mode 100644 index a932b1f..0000000 --- a/toolchain/gdb/gdb.mk +++ /dev/null @@ -1,234 +0,0 @@ -###################################################################### -# -# gdb -# -###################################################################### -GDB_VERSION:=$(call qstrip,$(BR2_GDB_VERSION)) - -GDB_SOURCE:=gdb-$(GDB_VERSION).tar.bz2 -GDB_CAT:=$(BZCAT) - -ifeq ($(findstring avr32,$(GDB_VERSION)),avr32) - GDB_SITE:=ftp://www.at91.com/pub/buildroot/ - GDB_PATCH_DIR:=toolchain/gdb/$(GDB_VERSION) -else - GDB_SITE:=$(BR2_GNU_MIRROR)/gdb - GDB_PATCH_DIR:=toolchain/gdb/$(GDB_VERSION) -endif - -GDB_DIR:=$(TOOLCHAIN_DIR)/gdb-$(GDB_VERSION) - -$(DL_DIR)/$(GDB_SOURCE): - $(call DOWNLOAD,$(GDB_SITE)/$(GDB_SOURCE)) - -gdb-unpacked: $(GDB_DIR)/.unpacked -$(GDB_DIR)/.unpacked: $(DL_DIR)/$(GDB_SOURCE) - mkdir -p $(GDB_DIR) - $(GDB_CAT) $(DL_DIR)/$(GDB_SOURCE) | tar -C $(GDB_DIR) $(TAR_STRIP_COMPONENTS)=1 $(TAR_OPTIONS) - -ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),) - tar xf $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(call qstrip, \ - $(BR2_XTENSA_CORE_NAME)).tar -C $(@D) --strip-components=1 gdb -endif -ifneq ($(wildcard $(GDB_PATCH_DIR)),) - support/scripts/apply-patches.sh $(GDB_DIR) $(GDB_PATCH_DIR) \*.patch -endif - $(call CONFIG_UPDATE,$(@D)) - touch $@ - -gdb-patched: $(GDB_DIR)/.unpacked - -gdb-source: $(DL_DIR)/$(GDB_SOURCE) -gdb-dirclean: - rm -rf $(GDB_DIR) - -###################################################################### -# -# gdb target -# -###################################################################### - -GDB_TARGET_DIR:=$(BUILD_DIR)/gdb-$(GDB_VERSION)-target - -GDB_TARGET_CONFIGURE_VARS:= \ - ac_cv_type_uintptr_t=yes \ - gt_cv_func_gettext_libintl=yes \ - ac_cv_func_dcgettext=yes \ - gdb_cv_func_sigsetjmp=yes \ - bash_cv_func_strcoll_broken=no \ - bash_cv_must_reinstall_sighandlers=no \ - bash_cv_func_sigsetjmp=present \ - bash_cv_have_mbstate_t=yes - -$(GDB_TARGET_DIR)/.configured: $(GDB_DIR)/.unpacked - mkdir -p $(GDB_TARGET_DIR) - (cd $(GDB_TARGET_DIR); \ - gdb_cv_func_sigsetjmp=yes \ - $(TARGET_CONFIGURE_OPTS) \ - CFLAGS_FOR_TARGET="$(TARGET_CFLAGS) $(TARGET_LDFLAGS) -Wno-error" \ - CFLAGS="$(TARGET_CFLAGS) $(TARGET_LDFLAGS) -Wno-error" \ - $(GDB_TARGET_CONFIGURE_VARS) \ - $(GDB_DIR)/configure $(QUIET) \ - --cache-file=/dev/null \ - --build=$(GNU_HOST_NAME) \ - --host=$(GNU_TARGET_NAME) \ - --target=$(GNU_TARGET_NAME) \ - --prefix=/usr \ - $(DISABLE_NLS) \ - --without-uiout $(DISABLE_GDBMI) \ - --disable-tui --disable-gdbtk --without-x \ - --disable-sim --enable-gdbserver \ - --without-included-gettext \ - --disable-werror \ - $(QUIET) \ - ) -ifeq ($(BR2_ENABLE_LOCALE),y) - -$(SED) "s,^INTL *=.*,INTL = -lintl,g;" $(GDB_DIR)/gdb/Makefile -endif - touch $@ - -$(GDB_TARGET_DIR)/gdb/gdb: $(GDB_TARGET_DIR)/.configured - # force ELF support since it fails due to BFD linking problems - gdb_cv_var_elf=yes \ - $(TARGET_MAKE_ENV) \ - $(MAKE) CC="$(TARGET_CC)" MT_CFLAGS="$(TARGET_CFLAGS)" \ - -C $(GDB_TARGET_DIR) - -$(TARGET_DIR)/usr/bin/gdb: $(GDB_TARGET_DIR)/gdb/gdb - install -c -D $(GDB_TARGET_DIR)/gdb/gdb $(TARGET_DIR)/usr/bin/gdb - -gdb_target: ncurses $(TARGET_DIR)/usr/bin/gdb - -gdb_target-source: $(DL_DIR)/$(GDB_SOURCE) - -gdb_target-clean: - -$(MAKE) -C $(GDB_DIR) clean - -gdb_target-dirclean: - rm -rf $(GDB_DIR) - -###################################################################### -# -# gdbserver -# -###################################################################### - -GDB_SERVER_DIR:=$(BUILD_DIR)/gdbserver-$(GDB_VERSION) - -$(GDB_SERVER_DIR)/.configured: $(GDB_DIR)/.unpacked - mkdir -p $(GDB_SERVER_DIR) - (cd $(GDB_SERVER_DIR); \ - $(TARGET_CONFIGURE_OPTS) \ - gdb_cv_func_sigsetjmp=yes \ - bash_cv_have_mbstate_t=yes \ - $(GDB_DIR)/gdb/gdbserver/configure $(QUIET) \ - --cache-file=/dev/null \ - --build=$(GNU_HOST_NAME) \ - --host=$(GNU_TARGET_NAME) \ - --target=$(GNU_TARGET_NAME) \ - --prefix=/usr \ - --exec-prefix=/usr \ - --bindir=/usr/bin \ - --sbindir=/usr/sbin \ - --libexecdir=/usr/lib \ - --sysconfdir=/etc \ - --datadir=/usr/share \ - --localstatedir=/var \ - --mandir=/usr/man \ - --infodir=/usr/info \ - --includedir=$(STAGING_DIR)/usr/include \ - $(DISABLE_NLS) \ - --without-uiout $(DISABLE_GDBMI) \ - --disable-tui --disable-gdbtk --without-x \ - --without-included-gettext \ - ) - touch $@ - -$(GDB_SERVER_DIR)/gdbserver: $(GDB_SERVER_DIR)/.configured - $(TARGET_MAKE_ENV) \ - $(MAKE) CC="$(TARGET_CC)" MT_CFLAGS="$(TARGET_CFLAGS)" \ - -C $(GDB_SERVER_DIR) - -$(TARGET_DIR)/usr/bin/gdbserver: $(GDB_SERVER_DIR)/gdbserver -ifeq ($(BR2_CROSS_TOOLCHAIN_TARGET_UTILS),y) - mkdir -p $(STAGING_DIR)/usr/$(GNU_TARGET_NAME)/target_utils - install -c $(GDB_SERVER_DIR)/gdbserver \ - $(STAGING_DIR)/usr/$(GNU_TARGET_NAME)/target_utils/gdbserver -endif - install -c -D $(GDB_SERVER_DIR)/gdbserver $(TARGET_DIR)/usr/bin/gdbserver - -gdbserver: $(TARGET_DIR)/usr/bin/gdbserver - -gdbserver-source: $(DL_DIR)/$(GDB_SOURCE) - -gdbserver-clean: - -$(MAKE) -C $(GDB_SERVER_DIR) clean - -gdbserver-dirclean: - rm -rf $(GDB_SERVER_DIR) - -###################################################################### -# -# gdb on host -# -###################################################################### - -GDB_HOST_DIR:=$(TOOLCHAIN_DIR)/gdbhost-$(GDB_VERSION) - -$(GDB_HOST_DIR)/.configured: $(GDB_DIR)/.unpacked - mkdir -p $(GDB_HOST_DIR) - (cd $(GDB_HOST_DIR); \ - gdb_cv_func_sigsetjmp=yes \ - bash_cv_have_mbstate_t=yes \ - $(HOST_CONFIGURE_OPTS) \ - $(GDB_DIR)/configure $(QUIET) \ - --cache-file=/dev/null \ - --prefix=$(STAGING_DIR) \ - --build=$(GNU_HOST_NAME) \ - --host=$(GNU_HOST_NAME) \ - --target=$(GNU_TARGET_NAME) \ - $(DISABLE_NLS) \ - --without-uiout $(DISABLE_GDBMI) \ - --disable-tui --disable-gdbtk --without-x \ - --without-included-gettext \ - --enable-threads \ - --disable-werror \ - ) - touch $@ - -$(GDB_HOST_DIR)/gdb/gdb: $(GDB_HOST_DIR)/.configured - # force ELF support since it fails due to BFD linking problems - $(HOST_MAKE_ENV) \ - gdb_cv_var_elf=yes \ - $(MAKE) -C $(GDB_HOST_DIR) - strip $(GDB_HOST_DIR)/gdb/gdb - -$(TARGET_CROSS)gdb: $(GDB_HOST_DIR)/gdb/gdb - install -c $(GDB_HOST_DIR)/gdb/gdb $(TARGET_CROSS)gdb - ln -snf $(@F) $(HOST_DIR)/usr/bin/$(ARCH)-linux-gdb - -gdbhost: host-expat $(TARGET_CROSS)gdb - -gdbhost-source: $(DL_DIR)/$(GDB_SOURCE) - -gdbhost-clean: - -$(MAKE) -C $(GDB_HOST_DIR) clean - -gdbhost-dirclean: - rm -rf $(GDB_HOST_DIR) - -############################################################# -# -# Toplevel Makefile options -# -############################################################# -ifeq ($(BR2_PACKAGE_GDB),y) -TARGETS+=gdb_target -endif - -ifeq ($(BR2_PACKAGE_GDB_SERVER),y) -TARGETS+=gdbserver -endif - -ifeq ($(BR2_PACKAGE_GDB_HOST),y) -TARGETS+=gdbhost -endif diff --git a/toolchain/toolchain-buildroot.mk b/toolchain/toolchain-buildroot.mk index adab0f7..5493177 100644 --- a/toolchain/toolchain-buildroot.mk +++ b/toolchain/toolchain-buildroot.mk @@ -2,6 +2,5 @@ include toolchain/elf2flt/elf2flt.mk include toolchain/gcc/gcc-uclibc-4.x.mk -include toolchain/gdb/gdb.mk include toolchain/kernel-headers/kernel-headers.mk include toolchain/uClibc/uclibc.mk diff --git a/toolchain/toolchain-common.in b/toolchain/toolchain-common.in index f6905ae..8e69432 100644 --- a/toolchain/toolchain-common.in +++ b/toolchain/toolchain-common.in @@ -3,7 +3,7 @@ # we want gdb config in the middle of both source and external # toolchains, but mconf won't let us source the same file twice, # so put it here instead -source "toolchain/gdb/Config.in" +source "package/gdb/Config.in.host" config BR2_LARGEFILE bool diff --git a/toolchain/toolchain-crosstool-ng.mk b/toolchain/toolchain-crosstool-ng.mk index d677256..d1e7552 100644 --- a/toolchain/toolchain-crosstool-ng.mk +++ b/toolchain/toolchain-crosstool-ng.mk @@ -4,6 +4,5 @@ include toolchain/helpers.mk include toolchain/elf2flt/elf2flt.mk include toolchain/gcc/gcc-uclibc-4.x.mk -include toolchain/gdb/gdb.mk include toolchain/toolchain-crosstool-ng/crosstool-ng.mk include toolchain/uClibc/uclibc.mk diff --git a/toolchain/toolchain-external.mk b/toolchain/toolchain-external.mk index 4292d85..9999aa2 100644 --- a/toolchain/toolchain-external.mk +++ b/toolchain/toolchain-external.mk @@ -3,7 +3,6 @@ include toolchain/helpers.mk include toolchain/elf2flt/elf2flt.mk include toolchain/gcc/gcc-uclibc-4.x.mk -include toolchain/gdb/gdb.mk include toolchain/kernel-headers/kernel-headers.mk include toolchain/toolchain-external/ext-tool.mk include toolchain/uClibc/uclibc.mk diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in index 5b26aa9..f28c999 100644 --- a/toolchain/toolchain-external/Config.in +++ b/toolchain/toolchain-external/Config.in @@ -887,5 +887,12 @@ config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM +config BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY + bool "Copy gdb server to the Target" + depends on BR2_TOOLCHAIN_EXTERNAL + help + Copy the gdbserver provided by the external toolchain to the + target. + endif # BR2_TOOLCHAIN_EXTERNAL
This commit converts gdb to the package infrastructure, and therefore moves it from toolchain/gdb to package/gdb. The target package is now visible in "Package selection for the target" => "Debugging, profiling and benchmark". The main option, "gdb", forcefully selects the "gdbserver" sub-option by default. Another sub-option, "full debugger" allows to install the complete gdb on the target. When this option is enabled, then "gdbserver" is no longer forcefully selected. This ensures that at least gdbserver or the full debugger gets built/installed, so that the package is not a no-op. The host debugger is still enabled through a configuration option in "Toolchain". It is now visible regardless of the toolchain type (it used to be hidden for External Toolchains). The configuration options relative to the host debugger are now in package/gdb/Config.in.host, similar to how we have package/binutils/Config.in.host. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> --- It would be good to have a few people testing this before committing. --- Config.in.legacy | 11 + package/Config.in | 1 + .../gdb/6.6a/100-uclibc-conf.patch | 0 .../gdb/6.6a/600-fix-compile-flag-mismatch.patch | 0 .../gdb/6.6a/gdb-6.6-bfin-gdbserver.patch | 0 .../gdb/7.4.1/00_all_ptrace_setsiginfo.patch | 0 .../gdb/7.4.1/05_all_readline-headers.patch | 0 .../gdb/7.4.1/xtensa-asm-ptrace-h.patch | 0 .../gdb/7.4.1/xtensa-gdb-regsize.patch | 0 package/gdb/Config.in | 38 ++++ package/gdb/Config.in.host | 56 +++++ package/gdb/gdb.mk | 100 +++++++++ toolchain/gdb/Config.in | 99 --------- toolchain/gdb/gdb.mk | 234 -------------------- toolchain/toolchain-buildroot.mk | 1 - toolchain/toolchain-common.in | 2 +- toolchain/toolchain-crosstool-ng.mk | 1 - toolchain/toolchain-external.mk | 1 - toolchain/toolchain-external/Config.in | 7 + 19 files changed, 214 insertions(+), 337 deletions(-) rename {toolchain => package}/gdb/6.6a/100-uclibc-conf.patch (100%) rename {toolchain => package}/gdb/6.6a/600-fix-compile-flag-mismatch.patch (100%) rename {toolchain => package}/gdb/6.6a/gdb-6.6-bfin-gdbserver.patch (100%) rename {toolchain => package}/gdb/7.4.1/00_all_ptrace_setsiginfo.patch (100%) rename {toolchain => package}/gdb/7.4.1/05_all_readline-headers.patch (100%) rename {toolchain => package}/gdb/7.4.1/xtensa-asm-ptrace-h.patch (100%) rename {toolchain => package}/gdb/7.4.1/xtensa-gdb-regsize.patch (100%) create mode 100644 package/gdb/Config.in create mode 100644 package/gdb/Config.in.host create mode 100644 package/gdb/gdb.mk delete mode 100644 toolchain/gdb/Config.in delete mode 100644 toolchain/gdb/gdb.mk