From 5463ab4bf6a0ba13e77c0d5d9cb4c2a4656639ca Mon Sep 17 00:00:00 2001 From: Alexey Brodkin Date: Wed, 27 May 2020 13:10:31 +0300 Subject: [PATCH] gdb: Add gdb-10.2 In GDB 10.x gdbserver was promoted to the top-level folder, see https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=919adfe8409211c726c1d05b47ca59890ee648f1 Which means it is no longer a subfolder in "gdb" and so we have to build gdbserver now exactly in the same way as normal native GDB. One interesting detail is gdbserver doesn't need to deal with target description in .xml so it doesn't depend on libexpat on target, thus we need to move libexpat explicit selection from do_gdb_backend() to its callers when building native [full] gdb as well as cross-gdb for the host. Signed-off-by: Alexey Brodkin [cp: support old/new layout, regenerate patches] Signed-off-by: Chris Packham --- config/debug/gdb.in | 6 + packages/gdb/10.2/0000-musl_fix.patch | 33 +++++ .../0001-uclibc-no-gettimeofday-clobber.patch | 35 +++++ ...nsa-make-sure-ar_base-is-initialized.patch | 30 +++++ ...3-WIP-end-of-prologue-detection-hack.patch | 26 ++++ packages/gdb/10.2/0004-allow-android.patch | 45 +++++++ ...-xtensa-Fix-compilation-of-gdbserver.patch | 35 +++++ packages/gdb/10.2/chksum | 8 ++ packages/gdb/10.2/version.desc | 0 packages/gdb/package.desc | 2 +- scripts/build/debug/300-gdb.sh | 121 +++++++++++++----- 11 files changed, 310 insertions(+), 31 deletions(-) create mode 100644 packages/gdb/10.2/0000-musl_fix.patch create mode 100644 packages/gdb/10.2/0001-uclibc-no-gettimeofday-clobber.patch create mode 100644 packages/gdb/10.2/0002-xtensa-make-sure-ar_base-is-initialized.patch create mode 100644 packages/gdb/10.2/0003-WIP-end-of-prologue-detection-hack.patch create mode 100644 packages/gdb/10.2/0004-allow-android.patch create mode 100644 packages/gdb/10.2/0005-xtensa-Fix-compilation-of-gdbserver.patch create mode 100644 packages/gdb/10.2/chksum create mode 100644 packages/gdb/10.2/version.desc diff --git a/config/debug/gdb.in b/config/debug/gdb.in index 7fc539ed..d92cd624 100644 --- a/config/debug/gdb.in +++ b/config/debug/gdb.in @@ -40,3 +40,9 @@ config GDB_HAS_IPA_LIB config GDB_CONST_GET_THREAD_AREA bool default y if GDB_older_than_7_12 + +# As of GDB 10.x gdbserver is now at the toplevel of the distributed +# tarball (instead of a subdirectory of gdb) +config GDB_GDBSERVER_TOPLEVEL + def_bool y + depends on GDB_10_2_or_later diff --git a/packages/gdb/10.2/0000-musl_fix.patch b/packages/gdb/10.2/0000-musl_fix.patch new file mode 100644 index 00000000..eaf58c03 --- /dev/null +++ b/packages/gdb/10.2/0000-musl_fix.patch @@ -0,0 +1,33 @@ +--- + gdb/linux-nat.c | 5 +++++ + gdb/stopcode.h | 4 ++++ + 2 files changed, 9 insertions(+) + +--- a/gdb/linux-nat.c ++++ b/gdb/linux-nat.c +@@ -17,6 +17,7 @@ + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + ++#include "stopcode.h" + #include "defs.h" + #include "inferior.h" + #include "infrun.h" +@@ -70,6 +71,10 @@ + #include "gdbsupport/gdb-sigmask.h" + #include "debug.h" + ++#ifndef __SIGRTMIN ++#define __SIGRTMIN SIGRTMIN ++#endif ++ + /* This comment documents high-level logic of this file. + + Waiting for events in sync mode +--- a/gdb/stopcode.h ++++ b/gdb/stopcode.h +@@ -0,0 +1,4 @@ ++#ifndef W_STOPCODE ++#define W_STOPCODE(sig) ((sig) << 8 | 0x7f) ++#endif ++ diff --git a/packages/gdb/10.2/0001-uclibc-no-gettimeofday-clobber.patch b/packages/gdb/10.2/0001-uclibc-no-gettimeofday-clobber.patch new file mode 100644 index 00000000..11cf2fb6 --- /dev/null +++ b/packages/gdb/10.2/0001-uclibc-no-gettimeofday-clobber.patch @@ -0,0 +1,35 @@ +Improve gnulib in gdb's guess work, gettimeofday() works in uClibcm promise. + +This patch helps building x86_64-unknown-linux-uclibc toolchains, the final +gdb-native step otherwise fails when linking the libinproctrace.so + +Signed-off-by: Joachim Nilsson +Signed-off-by: Alexey Neyman + +--- + gnulib/configure | 2 ++ + gnulib/import/m4/gettimeofday.m4 | 2 ++ + 2 files changed, 4 insertions(+) + +--- a/gnulib/configure ++++ b/gnulib/configure +@@ -20745,6 +20745,8 @@ + case "$host_os" in + # Guess all is fine on glibc systems. + *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; ++ # Guess all is fine on uclibc systems. ++ *-uclibc*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess all is fine on musl systems. + *-musl*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess no on native Windows. +--- a/gnulib/import/m4/gettimeofday.m4 ++++ b/gnulib/import/m4/gettimeofday.m4 +@@ -105,6 +105,8 @@ + case "$host_os" in + # Guess all is fine on glibc systems. + *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; ++ # Guess all is fine on uclibc systems. ++ *-uclibc*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess all is fine on musl systems. + *-musl*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess no on native Windows. diff --git a/packages/gdb/10.2/0002-xtensa-make-sure-ar_base-is-initialized.patch b/packages/gdb/10.2/0002-xtensa-make-sure-ar_base-is-initialized.patch new file mode 100644 index 00000000..c0f364ce --- /dev/null +++ b/packages/gdb/10.2/0002-xtensa-make-sure-ar_base-is-initialized.patch @@ -0,0 +1,30 @@ +From 208ea73d38c9c16cf983b6419f58050dbadcb6a9 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sun, 7 Jun 2015 22:43:49 +0300 +Subject: [PATCH 2/2] xtensa: make sure ar_base is initialized + +ar_base is uninitialized for cores w/o windowed registers as their +regmap doesn't have register 0x0100. +Check that ar_base is initialized and if not initialize it with a0_base. + +gdb/ + * xtensa-tdep.c (xtensa_derive_tdep): Make sure ar_base is + initialized. + +Signed-off-by: Max Filippov +--- + gdb/xtensa-tdep.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/gdb/xtensa-tdep.c ++++ b/gdb/xtensa-tdep.c +@@ -3137,6 +3137,9 @@ + if (tdep->num_regs == 0) + tdep->num_regs = tdep->num_nopriv_regs; + ++ if (tdep->ar_base == -1) ++ tdep->ar_base = tdep->a0_base; ++ + /* Number of pseudo registers. */ + tdep->num_pseudo_regs = n - tdep->num_regs; + diff --git a/packages/gdb/10.2/0003-WIP-end-of-prologue-detection-hack.patch b/packages/gdb/10.2/0003-WIP-end-of-prologue-detection-hack.patch new file mode 100644 index 00000000..9622ae9e --- /dev/null +++ b/packages/gdb/10.2/0003-WIP-end-of-prologue-detection-hack.patch @@ -0,0 +1,26 @@ +From 7f8eacbb468575fb67db7fd1155a3aedaa91911b Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sun, 7 Jun 2015 23:15:39 +0300 +Subject: [PATCH] WIP: *end of prologue* detection hack + +see + http://www.esp8266.com/viewtopic.php?p=18461#p18461 + http://www.esp8266.com/viewtopic.php?p=19026#p19026 + http://www.esp8266.com/viewtopic.php?p=19683#p19683 + +Signed-off-by: Max Filippov +--- + gdb/xtensa-tdep.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/gdb/xtensa-tdep.c ++++ b/gdb/xtensa-tdep.c +@@ -2385,7 +2385,7 @@ + /* Find out, if we have an information about the prologue from DWARF. */ + prologue_sal = find_pc_line (start, 0); + if (prologue_sal.line != 0) /* Found debug info. */ +- body_pc = prologue_sal.end; ++ body_pc = prologue_sal.end + 40; + + /* If we are going to analyze the prologue in general without knowing about + the current PC, make the best assumption for the end of the prologue. */ diff --git a/packages/gdb/10.2/0004-allow-android.patch b/packages/gdb/10.2/0004-allow-android.patch new file mode 100644 index 00000000..68fdc086 --- /dev/null +++ b/packages/gdb/10.2/0004-allow-android.patch @@ -0,0 +1,45 @@ +--- + gdb/gdbserver/configure | 11 ----------- + gdb/gdbserver/configure.ac | 11 ----------- + 2 files changed, 22 deletions(-) + +--- a/gdbserver/configure ++++ b/gdbserver/configure +@@ -10069,17 +10069,6 @@ + + + case "${target}" in +- *-android*) +- # Starting with NDK version 9, actually includes definitions +- # of Elf32_auxv_t and Elf64_auxv_t. But sadly, includes +- # which defines some of the ELF types incorrectly, +- # leading to conflicts with the defintions from . +- # This makes it impossible for us to include both and +- # , which means that, in practice, we do not have +- # access to Elf32_auxv_t and Elf64_auxv_t on this platform. +- # Therefore, do not try to auto-detect availability, as it would +- # get it wrong on this platform. +- ;; + *) + ac_fn_c_check_type "$LINENO" "Elf32_auxv_t" "ac_cv_type_Elf32_auxv_t" "#include + +--- a/gdbserver/configure.ac ++++ b/gdbserver/configure.ac +@@ -155,17 +155,6 @@ + ]) + + case "${target}" in +- *-android*) +- # Starting with NDK version 9, actually includes definitions +- # of Elf32_auxv_t and Elf64_auxv_t. But sadly, includes +- # which defines some of the ELF types incorrectly, +- # leading to conflicts with the defintions from . +- # This makes it impossible for us to include both and +- # , which means that, in practice, we do not have +- # access to Elf32_auxv_t and Elf64_auxv_t on this platform. +- # Therefore, do not try to auto-detect availability, as it would +- # get it wrong on this platform. +- ;; + *) + AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [], + #include diff --git a/packages/gdb/10.2/0005-xtensa-Fix-compilation-of-gdbserver.patch b/packages/gdb/10.2/0005-xtensa-Fix-compilation-of-gdbserver.patch new file mode 100644 index 00000000..9dee7a10 --- /dev/null +++ b/packages/gdb/10.2/0005-xtensa-Fix-compilation-of-gdbserver.patch @@ -0,0 +1,35 @@ +From 6f110500ed04148e3734f5b6a4fc573477c8398a Mon Sep 17 00:00:00 2001 +From: Alexey Brodkin +Date: Tue, 24 Aug 2021 12:29:18 -0700 +Subject: [PATCH] xtensa: Fix compilation of gdbserver + +Otherwise a lot of errors like the following happen: +--------------------------->8--------------------------------- +Error: .../gdb/xtensa-linux-nat.c:66:17: error: 'gdbarch_pc_regnum' was not declared in this scope +Error: .../gdb/xtensa-linux-nat.c:68:17: error: 'gdbarch_ps_regnum' was not declared in this scope +Error: .../gdb/xtensa-linux-nat.c:71:38: error: no matching function for call to 'gdbarch_tdep::gdbarch_tdep(gdbarch*&)' +... +--------------------------->8--------------------------------- + +Initially caught by https://github.com/crosstool-ng/crosstool-ng/pull/1573/checks?check_run_id=3361561567 + +Signed-off-by: Alexey Brodkin +--- + gdb/xtensa-linux-nat.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/gdb/xtensa-linux-nat.c b/gdb/xtensa-linux-nat.c +index b2b3db182bc..03f3ba7b50a 100644 +--- a/gdb/xtensa-linux-nat.c ++++ b/gdb/xtensa-linux-nat.c +@@ -34,6 +34,7 @@ + #include "nat/gdb_ptrace.h" + #include + ++#include "gdbarch.h" + #include "gregset.h" + #include "xtensa-tdep.h" + +-- +2.16.2 + diff --git a/packages/gdb/10.2/chksum b/packages/gdb/10.2/chksum new file mode 100644 index 00000000..635c847f --- /dev/null +++ b/packages/gdb/10.2/chksum @@ -0,0 +1,8 @@ +md5 gdb-10.2.tar.xz c044b7146903ec51c9d2337a29aee93b +sha1 gdb-10.2.tar.xz 1056e2743a825ecce46ec9eec37f0b357831012b +sha256 gdb-10.2.tar.xz aaa1223d534c9b700a8bec952d9748ee1977513f178727e1bee520ee000b4f29 +sha512 gdb-10.2.tar.xz 3653762ac008e065c37cd641653184c9ff7ce51ee2222ade1122bec9d6cc64dffd4fb74888ef11ac1942064a08910e96b7865112ad37f4602eb0a16bed074caa +md5 gdb-10.2.tar.gz 7aeb896762924ae9a2ec59525088bada +sha1 gdb-10.2.tar.gz 6bf5ee7877a4740835745ed97ce525a00bb2232c +sha256 gdb-10.2.tar.gz b33ad58d687487a821ec8d878daab0f716be60d0936f2e3ac5cf08419ce70350 +sha512 gdb-10.2.tar.gz aa89caf47c1c84366020377d47e7c51ddbc48e5b7686f244e38797c8eb88411cf57fcdc37eb669961efb41ceeac4181747f429625fd1acce7712cb9a1fea9c41 diff --git a/packages/gdb/10.2/version.desc b/packages/gdb/10.2/version.desc new file mode 100644 index 00000000..e69de29b diff --git a/packages/gdb/package.desc b/packages/gdb/package.desc index 58479fde..73e49025 100644 --- a/packages/gdb/package.desc +++ b/packages/gdb/package.desc @@ -2,5 +2,5 @@ origin='GNU' repository='git git://sourceware.org/git/binutils-gdb.git' mirrors='$(CT_Mirrors GNU gdb) $(CT_Mirrors sourceware gdb/releases)' relevantpattern='*.*|[a-z.]' -milestones='7.0 7.2 7.12 8.0 8.3' +milestones='7.0 7.2 7.12 8.0 8.3 10.2' archive_formats='.tar.xz .tar.gz' diff --git a/scripts/build/debug/300-gdb.sh b/scripts/build/debug/300-gdb.sh index 75c683d9..2ef0c712 100644 --- a/scripts/build/debug/300-gdb.sh +++ b/scripts/build/debug/300-gdb.sh @@ -50,6 +50,25 @@ do_debug_gdb_build() cross_extra_config+=("--enable-build-warnings=,-Wno-format-nonliteral,-Wno-format-security") fi + # Target libexpat resides in sysroot and does not have + # any dependencies, so just passing '-lexpat' to gcc is enough. + # + # By default gdb configure looks for expat in '$prefix/lib' + # directory. In our case '$prefix/lib' resolves to '/usr/lib' + # where libexpat for build platform lives, which is + # unacceptable for cross-compiling. + # + # To prevent this '--without-libexpat-prefix' flag must be passed. + # Thus configure falls back to '-lexpat', which is exactly what we want. + # + # NOTE: DO NOT USE --with-libexpat-prefix (until GDB configure is smarter)!!! + # It conflicts with a static build: GDB's configure script will find the shared + # version of expat and will attempt to link that, despite the -static flag. + # The link will fail, and configure will abort with "expat missing or unusable" + # message. + extra_config+=("--with-expat") + extra_config+=("--without-libexpat-prefix") + do_gdb_backend \ buildtype=cross \ host="${CT_HOST}" \ @@ -88,7 +107,7 @@ do_debug_gdb_build() CT_EndStep fi - if [ "${CT_GDB_NATIVE}" = "y" -o "${CT_GDB_GDBSERVER}" = "y" ]; then + if [ "${CT_GDB_NATIVE}" = "y" ]; then local -a native_extra_config local subdir @@ -102,17 +121,78 @@ do_debug_gdb_build() native_extra_config+=("--with-curses") fi - # Build a native gdbserver if needed. If building only - # gdbserver, configure in the subdirectory. - # Newer versions enable it automatically for a native target by default. - if [ "${CT_GDB_GDBSERVER}" != "y" ]; then - native_extra_config+=("--disable-gdbserver") + if [ "${CT_GDB_NATIVE_BUILD_IPA_LIB}" = "y" ]; then + native_extra_config+=("--enable-inprocess-agent") else - native_extra_config+=("--enable-gdbserver") - if [ "${CT_GDB_NATIVE}" != "y" ]; then - subdir=gdb/gdbserver/ - fi + native_extra_config+=("--disable-inprocess-agent") fi + + export ac_cv_func_strncmp_works=yes + + # TBD do we need all these? Eg why do we disable TUI if we build curses for target? + native_extra_config+=( + --without-uiout + --disable-tui + --disable-gdbtk + --without-x + --disable-sim + --without-included-gettext + --without-develop + --sysconfdir=/etc + --localstatedir=/var + ) + + # Target libexpat resides in sysroot and does not have + # any dependencies, so just passing '-lexpat' to gcc is enough. + # + # By default gdb configure looks for expat in '$prefix/lib' + # directory. In our case '$prefix/lib' resolves to '/usr/lib' + # where libexpat for build platform lives, which is + # unacceptable for cross-compiling. + # + # To prevent this '--without-libexpat-prefix' flag must be passed. + # Thus configure falls back to '-lexpat', which is exactly what we want. + # + # NOTE: DO NOT USE --with-libexpat-prefix (until GDB configure is smarter)!!! + # It conflicts with a static build: GDB's configure script will find the shared + # version of expat and will attempt to link that, despite the -static flag. + # The link will fail, and configure will abort with "expat missing or unusable" + # message. + extra_config+=("--with-expat") + extra_config+=("--without-libexpat-prefix") + + do_gdb_backend \ + buildtype=native \ + subdir=${subdir} \ + host="${CT_TARGET}" \ + cflags="${CT_ALL_TARGET_CFLAGS}" \ + ldflags="${CT_ALL_TARGET_LDFLAGS}" \ + static="${CT_GDB_NATIVE_STATIC}" \ + static_libstdc="${CT_GDB_NATIVE_STATIC_LIBSTDC}" \ + prefix=/usr \ + destdir="${CT_DEBUGROOT_DIR}" \ + "${native_extra_config[@]}" + + unset ac_cv_func_strncmp_works + + CT_Popd + CT_EndStep # native gdb build + fi + + if [ "${CT_GDB_GDBSERVER}" = "y" ]; then + local -a native_extra_config + local subdir + + if [ "${CT_GDB_GDBSERVER_TOPLEVEL}" != "y" ]; then + subdir=gdb/gdbserver/ + fi + + CT_DoStep INFO "Installing gdb server" + CT_mkdir_pushd "${CT_BUILD_DIR}/build-gdb-server" + + native_extra_config+=("--program-prefix=") + native_extra_config+=("--enable-gdbserver") + if [ "${CT_GDB_NATIVE_BUILD_IPA_LIB}" = "y" ]; then native_extra_config+=("--enable-inprocess-agent") else @@ -149,7 +229,7 @@ do_debug_gdb_build() unset ac_cv_func_strncmp_works CT_Popd - CT_EndStep # native gdb build + CT_EndStep # gdb server build fi } @@ -208,25 +288,6 @@ do_gdb_backend() extra_config+=("--disable-nls") fi - # Target libexpat resides in sysroot and does not have - # any dependencies, so just passing '-lexpat' to gcc is enough. - # - # By default gdb configure looks for expat in '$prefix/lib' - # directory. In our case '$prefix/lib' resolves to '/usr/lib' - # where libexpat for build platform lives, which is - # unacceptable for cross-compiling. - # - # To prevent this '--without-libexpat-prefix' flag must be passed. - # Thus configure falls back to '-lexpat', which is exactly what we want. - # - # NOTE: DO NOT USE --with-libexpat-prefix (until GDB configure is smarter)!!! - # It conflicts with a static build: GDB's configure script will find the shared - # version of expat and will attempt to link that, despite the -static flag. - # The link will fail, and configure will abort with "expat missing or unusable" - # message. - extra_config+=("--with-expat") - extra_config+=("--without-libexpat-prefix") - if [ "${static}" = "y" ]; then cflags+=" -static" ldflags+=" -static"