From 72a5a1d6de43503579cb77daacdf17a77a315c03 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sun, 4 Jun 2017 22:27:02 -0700 Subject: Add GDB 8.0 ... ... which now requires C++. Signed-off-by: Alexey Neyman diff --git a/config/debug/gdb.in b/config/debug/gdb.in index c8652ca..b1d101b 100644 --- a/config/debug/gdb.in +++ b/config/debug/gdb.in @@ -12,7 +12,7 @@ config GDB_CUSTOM bool prompt "Custom gdb" depends on EXPERIMENTAL - select GDB_7_12_or_later + select GDB_8_0_or_later help The choosen gdb version shall be not downloaded. Instead use a custom location to get the source. @@ -67,6 +67,11 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW +config GDB_V_8_0 + bool + prompt "8.0" + select GDB_8_0_or_later + config GDB_V_7_12_1 bool prompt "7.12.1" @@ -249,6 +254,10 @@ endchoice endif # ! GDB_CUSTOM +config GDB_8_0_or_later + bool + select GDB_7_12_or_later + config GDB_7_12_or_later bool select GDB_7_2_or_later @@ -272,12 +281,19 @@ config GDB_HAS_PYTHON config GDB_INSTALL_GDBINIT bool +# GDB 8.0 now requires C++ for build. GDB 7.12 offered a configure +# switch to fall back to C. +config GDB_TARGET_DISABLE_CXX_BUILD + def_bool y + depends on GDB_7_12_or_later && !GDB_8_0_or_later + if ! GDB_CUSTOM config GDB_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW + default "8.0" if GDB_V_8_0 default "7.12.1" if GDB_V_7_12_1 default "7.11.1" if GDB_V_7_11_1 default "7.10.1" if GDB_V_7_10_1 diff --git a/config/debug/gdb.in.native b/config/debug/gdb.in.native index faee8c3..f199d59 100644 --- a/config/debug/gdb.in.native +++ b/config/debug/gdb.in.native @@ -5,6 +5,7 @@ config GDB_NATIVE prompt "Native gdb" depends on ! BARE_METAL depends on ! LIBC_bionic + depends on CC_LANG_CXX || !GDB_8_0_or_later select EXPAT_TARGET select NCURSES_TARGET help diff --git a/patches/gdb/8.0/100-musl_fix.patch b/patches/gdb/8.0/100-musl_fix.patch new file mode 100644 index 0000000..c0c1e0a --- /dev/null +++ b/patches/gdb/8.0/100-musl_fix.patch @@ -0,0 +1,28 @@ +--- 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" +@@ -73,6 +74,10 @@ + #define SPUFS_MAGIC 0x23c9b64e + #endif + ++#ifndef __SIGRTMIN ++#define __SIGRTMIN SIGRTMIN ++#endif ++ + /* This comment documents high-level logic of this file. + + Waiting for events in sync mode +--- /dev/null ++++ b/gdb/stopcode.h +@@ -0,0 +1,4 @@ ++#ifndef W_STOPCODE ++#define W_STOPCODE(sig) ((sig) << 8 | 0x7f) ++#endif ++ diff --git a/patches/gdb/8.0/101-uclibc-no-gettimeofday-clobber.patch b/patches/gdb/8.0/101-uclibc-no-gettimeofday-clobber.patch new file mode 100644 index 0000000..cd7a4c6 --- /dev/null +++ b/patches/gdb/8.0/101-uclibc-no-gettimeofday-clobber.patch @@ -0,0 +1,30 @@ +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 + +diff -urpN gdb-7.12.orig/gdb/gnulib/configure gdb-7.12/gdb/gnulib/configure +--- gdb-7.12.orig/gdb/gnulib/configure 2017-01-13 13:42:11.773027566 -0800 ++++ gdb-7.12/gdb/gnulib/configure 2017-01-13 13:44:32.518082618 -0800 +@@ -13522,6 +13522,7 @@ else + case "$host_os" in + # Guess all is fine on glibc systems. + *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; ++ *-uclibc*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; + esac +diff -urpN gdb-7.12.orig/gdb/gnulib/import/m4/gettimeofday.m4 gdb-7.12/gdb/gnulib/import/m4/gettimeofday.m4 +--- gdb-7.12.orig/gdb/gnulib/import/m4/gettimeofday.m4 2017-01-13 13:42:11.777027595 -0800 ++++ gdb-7.12/gdb/gnulib/import/m4/gettimeofday.m4 2017-01-13 13:43:55.781797640 -0800 +@@ -111,6 +111,7 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], + case "$host_os" in + # Guess all is fine on glibc systems. + *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; ++ *-uclibc*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; + esac diff --git a/patches/gdb/8.0/111-xtensa-make-sure-ar_base-is-initialized.patch b/patches/gdb/8.0/111-xtensa-make-sure-ar_base-is-initialized.patch new file mode 100644 index 0000000..982bd7f --- /dev/null +++ b/patches/gdb/8.0/111-xtensa-make-sure-ar_base-is-initialized.patch @@ -0,0 +1,35 @@ +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(+) + +diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c +index 55e7d98..41f5ec1 100644 +--- a/gdb/xtensa-tdep.c ++++ b/gdb/xtensa-tdep.c +@@ -3175,6 +3175,9 @@ xtensa_derive_tdep (struct gdbarch_tdep *tdep) + tdep->num_regs = n; + } + ++ if (tdep->ar_base == -1) ++ tdep->ar_base = tdep->a0_base; ++ + /* Number of pseudo registers. */ + tdep->num_pseudo_regs = n - tdep->num_regs; + +-- +1.8.1.4 + diff --git a/patches/gdb/8.0/112-WIP-end-of-prologue-detection-hack.patch b/patches/gdb/8.0/112-WIP-end-of-prologue-detection-hack.patch new file mode 100644 index 0000000..506a57c --- /dev/null +++ b/patches/gdb/8.0/112-WIP-end-of-prologue-detection-hack.patch @@ -0,0 +1,31 @@ +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(-) + +diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c +index 41f5ec1..6a7dba7 100644 +--- a/gdb/xtensa-tdep.c ++++ b/gdb/xtensa-tdep.c +@@ -2410,7 +2410,7 @@ call0_analyze_prologue (struct gdbarch *gdbarch, + /* 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 assumtion for the end of the prologue. */ +-- +1.8.1.4 + diff --git a/patches/gdb/8.0/200-allow-android.patch b/patches/gdb/8.0/200-allow-android.patch new file mode 100644 index 0000000..7954477 --- /dev/null +++ b/patches/gdb/8.0/200-allow-android.patch @@ -0,0 +1,42 @@ +diff -urpN gdb-7.12.1.orig/gdb/gdbserver/configure gdb-7.12.1/gdb/gdbserver/configure +--- gdb-7.12.1.orig/gdb/gdbserver/configure 2017-05-14 17:02:46.742711695 -0700 ++++ gdb-7.12.1/gdb/gdbserver/configure 2017-05-14 17:03:22.147058607 -0700 +@@ -6671,17 +6671,6 @@ fi + + + 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 + +diff -urpN gdb-7.12.1.orig/gdb/gdbserver/configure.ac gdb-7.12.1/gdb/gdbserver/configure.ac +--- gdb-7.12.1.orig/gdb/gdbserver/configure.ac 2017-05-14 17:02:46.742711695 -0700 ++++ gdb-7.12.1/gdb/gdbserver/configure.ac 2017-05-14 17:03:53.219361720 -0700 +@@ -179,17 +179,6 @@ AC_CHECK_TYPES(socklen_t, [], [], + ]) + + 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/scripts/build/debug/300-gdb.sh b/scripts/build/debug/300-gdb.sh index 68510e1..98ef5e5 100644 --- a/scripts/build/debug/300-gdb.sh +++ b/scripts/build/debug/300-gdb.sh @@ -190,6 +190,7 @@ do_debug_gdb_build() { CT_EndStep fi + # TBD combine GDB native and gdbserver backends, build either or both in a single pass. if [ "${CT_GDB_NATIVE}" = "y" ]; then local -a native_extra_config @@ -198,7 +199,9 @@ do_debug_gdb_build() { native_extra_config=("${extra_config[@]}") # We may not have C++ language configured for target - native_extra_config+=("--disable-build-with-cxx") + if [ "${GDB_TARGET_DISABLE_CXX_BUILD}" = "y" ]; then + native_extra_config+=("--disable-build-with-cxx") + fi # GDB on Mingw depends on PDcurses, not ncurses if [ "${CT_MINGW32}" != "y" ]; then @@ -317,7 +320,9 @@ do_debug_gdb_build() { gdbserver_extra_config=("${extra_config[@]}") # We may not have C++ language configured for target - gdbserver_extra_config+=("--disable-build-with-cxx") + if [ "${GDB_TARGET_DISABLE_CXX_BUILD}" = "y" ]; then + gdbserver_extra_config+=("--disable-build-with-cxx") + fi if [ "${CT_GDB_GDBSERVER_HAS_IPA_LIB}" = "y" ]; then if [ "${CT_GDB_GDBSERVER_BUILD_IPA_LIB}" = "y" ]; then -- cgit v0.10.2-6-g49f6