From 9bcda31c2557fc9056552831f071995491d4d282 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Thu, 27 Jan 2022 11:20:01 +0100 Subject: gdb: update 11.1 -> 11.2 Simplyfy .inc structure: merge gdb.inc into gdb_11.2.bb, rename gdb-${PV}.inc to gdb.inc. This will allow easier automatic updates. Drop upstreamed patch. (From OE-Core rev: ee8ec22c75f5eacae7a6b1cafe0df6e21acde479) Signed-off-by: Alexander Kanavin Signed-off-by: Richard Purdie --- meta/recipes-devtools/gdb/gdb-11.1.inc | 19 -- .../gdb/gdb-cross-canadian_11.1.bb | 3 - .../gdb/gdb-cross-canadian_11.2.bb | 3 + meta/recipes-devtools/gdb/gdb-cross_11.1.bb | 2 - meta/recipes-devtools/gdb/gdb-cross_11.2.bb | 2 + meta/recipes-devtools/gdb/gdb.inc | 27 +- ...-gdbserver-register-set-selection-dynamic.patch | 317 --------------------- meta/recipes-devtools/gdb/gdb_11.1.bb | 28 -- meta/recipes-devtools/gdb/gdb_11.2.bb | 39 +++ 9 files changed, 61 insertions(+), 379 deletions(-) delete mode 100644 meta/recipes-devtools/gdb/gdb-11.1.inc delete mode 100644 meta/recipes-devtools/gdb/gdb-cross-canadian_11.1.bb create mode 100644 meta/recipes-devtools/gdb/gdb-cross-canadian_11.2.bb delete mode 100644 meta/recipes-devtools/gdb/gdb-cross_11.1.bb create mode 100644 meta/recipes-devtools/gdb/gdb-cross_11.2.bb delete mode 100644 meta/recipes-devtools/gdb/gdb/0011-AArch64-Make-gdbserver-register-set-selection-dynamic.patch delete mode 100644 meta/recipes-devtools/gdb/gdb_11.1.bb create mode 100644 meta/recipes-devtools/gdb/gdb_11.2.bb (limited to 'meta/recipes-devtools/gdb') diff --git a/meta/recipes-devtools/gdb/gdb-11.1.inc b/meta/recipes-devtools/gdb/gdb-11.1.inc deleted file mode 100644 index 5364a880e3..0000000000 --- a/meta/recipes-devtools/gdb/gdb-11.1.inc +++ /dev/null @@ -1,19 +0,0 @@ -LICENSE = "GPLv2 & GPLv3 & LGPLv2 & LGPLv3" -LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ - file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \ - file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \ - file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674" - -SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.xz \ - file://0001-make-man-install-relative-to-DESTDIR.patch \ - file://0002-mips-linux-nat-Define-_ABIO32-if-not-defined.patch \ - file://0003-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch \ - file://0005-Dont-disable-libreadline.a-when-using-disable-static.patch \ - file://0006-use-asm-sgidefs.h.patch \ - file://0007-Change-order-of-CFLAGS.patch \ - file://0008-resolve-restrict-keyword-conflict.patch \ - file://0009-Fix-invalid-sigprocmask-call.patch \ - file://0010-gdbserver-ctrl-c-handling.patch \ - file://0011-AArch64-Make-gdbserver-register-set-selection-dynamic.patch \ - " -SRC_URI[sha256sum] = "cccfcc407b20d343fb320d4a9a2110776dd3165118ffd41f4b1b162340333f94" diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian_11.1.bb b/meta/recipes-devtools/gdb/gdb-cross-canadian_11.1.bb deleted file mode 100644 index 301035940c..0000000000 --- a/meta/recipes-devtools/gdb/gdb-cross-canadian_11.1.bb +++ /dev/null @@ -1,3 +0,0 @@ -require gdb-common.inc -require gdb-cross-canadian.inc -require gdb-${PV}.inc diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian_11.2.bb b/meta/recipes-devtools/gdb/gdb-cross-canadian_11.2.bb new file mode 100644 index 0000000000..4ab2b7156d --- /dev/null +++ b/meta/recipes-devtools/gdb/gdb-cross-canadian_11.2.bb @@ -0,0 +1,3 @@ +require gdb-common.inc +require gdb-cross-canadian.inc +require gdb.inc diff --git a/meta/recipes-devtools/gdb/gdb-cross_11.1.bb b/meta/recipes-devtools/gdb/gdb-cross_11.1.bb deleted file mode 100644 index 50cf159fdb..0000000000 --- a/meta/recipes-devtools/gdb/gdb-cross_11.1.bb +++ /dev/null @@ -1,2 +0,0 @@ -require gdb-cross.inc -require gdb-${PV}.inc diff --git a/meta/recipes-devtools/gdb/gdb-cross_11.2.bb b/meta/recipes-devtools/gdb/gdb-cross_11.2.bb new file mode 100644 index 0000000000..3b654a2f0d --- /dev/null +++ b/meta/recipes-devtools/gdb/gdb-cross_11.2.bb @@ -0,0 +1,2 @@ +require gdb-cross.inc +require gdb.inc diff --git a/meta/recipes-devtools/gdb/gdb.inc b/meta/recipes-devtools/gdb/gdb.inc index 2c95ed3ca0..cf801b192b 100644 --- a/meta/recipes-devtools/gdb/gdb.inc +++ b/meta/recipes-devtools/gdb/gdb.inc @@ -1,11 +1,18 @@ -require gdb-common.inc - -inherit gettext pkgconfig - -#LDFLAGS:append = " -s" -#export CFLAGS:append=" -L${STAGING_LIBDIR}" - -# cross-canadian must not see this -PACKAGES =+ "gdbserver" -FILES:gdbserver = "${bindir}/gdbserver" +LICENSE = "GPLv2 & GPLv3 & LGPLv2 & LGPLv3" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ + file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \ + file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \ + file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674" +SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.xz \ + file://0001-make-man-install-relative-to-DESTDIR.patch \ + file://0002-mips-linux-nat-Define-_ABIO32-if-not-defined.patch \ + file://0003-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch \ + file://0005-Dont-disable-libreadline.a-when-using-disable-static.patch \ + file://0006-use-asm-sgidefs.h.patch \ + file://0007-Change-order-of-CFLAGS.patch \ + file://0008-resolve-restrict-keyword-conflict.patch \ + file://0009-Fix-invalid-sigprocmask-call.patch \ + file://0010-gdbserver-ctrl-c-handling.patch \ + " +SRC_URI[sha256sum] = "1497c36a71881b8671a9a84a0ee40faab788ca30d7ba19d8463c3cc787152e32" diff --git a/meta/recipes-devtools/gdb/gdb/0011-AArch64-Make-gdbserver-register-set-selection-dynamic.patch b/meta/recipes-devtools/gdb/gdb/0011-AArch64-Make-gdbserver-register-set-selection-dynamic.patch deleted file mode 100644 index 6fc1859391..0000000000 --- a/meta/recipes-devtools/gdb/gdb/0011-AArch64-Make-gdbserver-register-set-selection-dynamic.patch +++ /dev/null @@ -1,317 +0,0 @@ -From eb79b2318066cafb75ffdce310e3bbd44f7c79e3 Mon Sep 17 00:00:00 2001 -From: Luis Machado -Date: Fri, 29 Oct 2021 14:54:36 -0300 -Subject: [PATCH] [AArch64] Make gdbserver register set selection dynamic - -The current register set selection mechanism for AArch64 is static, based -on a pre-populated array of register sets. - -This means that we might potentially probe register sets that are not -available. This is OK if the kernel errors out during ptrace, but probing the -tag_ctl register, for example, does not result in a ptrace error if the kernel -supports the tagged address ABI but not MTE (PR 28355). - -Making the register set selection dynamic, based on feature checks, solves -this and simplifies the code a bit. It allows us to list all of the register -sets only once, and pick and choose based on HWCAP/HWCAP2 or other properties. - -gdb/ChangeLog: - -2021-11-03 Luis Machado - - PR gdb/28355 - - * arch/aarch64.h (struct aarch64_features): New struct. - -gdbserver/ChangeLog: - -2021-11-03 Luis Machado - - PR gdb/28355 - - * linux-aarch64-low.cc (is_sve_tdesc): Remove. - (aarch64_target::low_arch_setup): Rework to adjust the register sets. - (aarch64_regsets): Update to list all register sets. - (aarch64_regsets_info, regs_info_aarch64): Replace NULL with nullptr. - (aarch64_sve_regsets, aarch64_sve_regsets_info) - (regs_info_aarch64_sve): Remove. - (aarch64_adjust_register_sets): New. - (aarch64_target::get_regs_info): Remove references to removed structs. - (initialize_low_arch): Likewise. - -[ChangeLog entry stripped so that patch applies cleanly] -Upstream-Status: Accepted ---- - -diff --git a/gdb/arch/aarch64.h b/gdb/arch/aarch64.h -index 0eb702c5b5e..95edb664b55 100644 ---- a/gdb/arch/aarch64.h -+++ b/gdb/arch/aarch64.h -@@ -22,6 +22,15 @@ - - #include "gdbsupport/tdesc.h" - -+/* Holds information on what architectural features are available. This is -+ used to select register sets. */ -+struct aarch64_features -+{ -+ bool sve = false; -+ bool pauth = false; -+ bool mte = false; -+}; -+ - /* Create the aarch64 target description. A non zero VQ value indicates both - the presence of SVE and the Vector Quotient - the number of 128bit chunks in - an SVE Z register. HAS_PAUTH_P indicates the presence of the PAUTH -diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc -index daccfef746e..9a8cb4169a7 100644 ---- a/gdbserver/linux-aarch64-low.cc -+++ b/gdbserver/linux-aarch64-low.cc -@@ -196,16 +196,6 @@ is_64bit_tdesc (void) - return register_size (regcache->tdesc, 0) == 8; - } - --/* Return true if the regcache contains the number of SVE registers. */ -- --static bool --is_sve_tdesc (void) --{ -- struct regcache *regcache = get_thread_regcache (current_thread, 0); -- -- return tdesc_contains_feature (regcache->tdesc, "org.gnu.gdb.aarch64.sve"); --} -- - static void - aarch64_fill_gregset (struct regcache *regcache, void *buf) - { -@@ -680,40 +670,6 @@ aarch64_target::low_new_fork (process_info *parent, - *child->priv->arch_private = *parent->priv->arch_private; - } - --/* Matches HWCAP_PACA in kernel header arch/arm64/include/uapi/asm/hwcap.h. */ --#define AARCH64_HWCAP_PACA (1 << 30) -- --/* Implementation of linux target ops method "low_arch_setup". */ -- --void --aarch64_target::low_arch_setup () --{ -- unsigned int machine; -- int is_elf64; -- int tid; -- -- tid = lwpid_of (current_thread); -- -- is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); -- -- if (is_elf64) -- { -- uint64_t vq = aarch64_sve_get_vq (tid); -- unsigned long hwcap = linux_get_hwcap (8); -- unsigned long hwcap2 = linux_get_hwcap2 (8); -- bool pauth_p = hwcap & AARCH64_HWCAP_PACA; -- /* MTE is AArch64-only. */ -- bool mte_p = hwcap2 & HWCAP2_MTE; -- -- current_process ()->tdesc -- = aarch64_linux_read_description (vq, pauth_p, mte_p); -- } -- else -- current_process ()->tdesc = aarch32_linux_read_description (); -- -- aarch64_linux_get_debug_reg_capacity (lwpid_of (current_thread)); --} -- - /* Wrapper for aarch64_sve_regs_copy_to_reg_buf. */ - - static void -@@ -730,21 +686,36 @@ aarch64_sve_regs_copy_from_regcache (struct regcache *regcache, void *buf) - return aarch64_sve_regs_copy_from_reg_buf (regcache, buf); - } - -+/* Array containing all the possible register sets for AArch64/Linux. During -+ architecture setup, these will be checked against the HWCAP/HWCAP2 bits for -+ validity and enabled/disabled accordingly. -+ -+ Their sizes are set to 0 here, but they will be adjusted later depending -+ on whether each register set is available or not. */ - static struct regset_info aarch64_regsets[] = - { -+ /* GPR registers. */ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, -- sizeof (struct user_pt_regs), GENERAL_REGS, -+ 0, GENERAL_REGS, - aarch64_fill_gregset, aarch64_store_gregset }, -+ /* Floating Point (FPU) registers. */ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_FPREGSET, -- sizeof (struct user_fpsimd_state), FP_REGS, -+ 0, FP_REGS, - aarch64_fill_fpregset, aarch64_store_fpregset - }, -+ /* Scalable Vector Extension (SVE) registers. */ -+ { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_SVE, -+ 0, EXTENDED_REGS, -+ aarch64_sve_regs_copy_from_regcache, aarch64_sve_regs_copy_to_regcache -+ }, -+ /* PAC registers. */ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_PAC_MASK, -- AARCH64_PAUTH_REGS_SIZE, OPTIONAL_REGS, -- NULL, aarch64_store_pauthregset }, -+ 0, OPTIONAL_REGS, -+ nullptr, aarch64_store_pauthregset }, -+ /* Tagged address control / MTE registers. */ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_TAGGED_ADDR_CTRL, -- AARCH64_LINUX_SIZEOF_MTE, OPTIONAL_REGS, aarch64_fill_mteregset, -- aarch64_store_mteregset }, -+ 0, OPTIONAL_REGS, -+ aarch64_fill_mteregset, aarch64_store_mteregset }, - NULL_REGSET - }; - -@@ -752,47 +723,95 @@ static struct regsets_info aarch64_regsets_info = - { - aarch64_regsets, /* regsets */ - 0, /* num_regsets */ -- NULL, /* disabled_regsets */ -+ nullptr, /* disabled_regsets */ - }; - - static struct regs_info regs_info_aarch64 = - { -- NULL, /* regset_bitmap */ -- NULL, /* usrregs */ -+ nullptr, /* regset_bitmap */ -+ nullptr, /* usrregs */ - &aarch64_regsets_info, - }; - --static struct regset_info aarch64_sve_regsets[] = -+/* Given FEATURES, adjust the available register sets by setting their -+ sizes. A size of 0 means the register set is disabled and won't be -+ used. */ -+ -+static void -+aarch64_adjust_register_sets (const struct aarch64_features &features) - { -- { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, -- sizeof (struct user_pt_regs), GENERAL_REGS, -- aarch64_fill_gregset, aarch64_store_gregset }, -- { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_SVE, -- SVE_PT_SIZE (AARCH64_MAX_SVE_VQ, SVE_PT_REGS_SVE), EXTENDED_REGS, -- aarch64_sve_regs_copy_from_regcache, aarch64_sve_regs_copy_to_regcache -- }, -- { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_PAC_MASK, -- AARCH64_PAUTH_REGS_SIZE, OPTIONAL_REGS, -- NULL, aarch64_store_pauthregset }, -- { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_TAGGED_ADDR_CTRL, -- AARCH64_LINUX_SIZEOF_MTE, OPTIONAL_REGS, aarch64_fill_mteregset, -- aarch64_store_mteregset }, -- NULL_REGSET --}; -+ struct regset_info *regset; - --static struct regsets_info aarch64_sve_regsets_info = -- { -- aarch64_sve_regsets, /* regsets. */ -- 0, /* num_regsets. */ -- NULL, /* disabled_regsets. */ -- }; -+ for (regset = aarch64_regsets; regset->size >= 0; regset++) -+ { -+ switch (regset->nt_type) -+ { -+ case NT_PRSTATUS: -+ /* General purpose registers are always present. */ -+ regset->size = sizeof (struct user_pt_regs); -+ break; -+ case NT_FPREGSET: -+ /* This is unavailable when SVE is present. */ -+ if (!features.sve) -+ regset->size = sizeof (struct user_fpsimd_state); -+ break; -+ case NT_ARM_SVE: -+ if (features.sve) -+ regset->size = SVE_PT_SIZE (AARCH64_MAX_SVE_VQ, SVE_PT_REGS_SVE); -+ break; -+ case NT_ARM_PAC_MASK: -+ if (features.pauth) -+ regset->size = AARCH64_PAUTH_REGS_SIZE; -+ break; -+ case NT_ARM_TAGGED_ADDR_CTRL: -+ if (features.mte) -+ regset->size = AARCH64_LINUX_SIZEOF_MTE; -+ break; -+ default: -+ gdb_assert_not_reached ("Unknown register set found."); -+ } -+ } -+} - --static struct regs_info regs_info_aarch64_sve = -- { -- NULL, /* regset_bitmap. */ -- NULL, /* usrregs. */ -- &aarch64_sve_regsets_info, -- }; -+/* Matches HWCAP_PACA in kernel header arch/arm64/include/uapi/asm/hwcap.h. */ -+#define AARCH64_HWCAP_PACA (1 << 30) -+ -+/* Implementation of linux target ops method "low_arch_setup". */ -+ -+void -+aarch64_target::low_arch_setup () -+{ -+ unsigned int machine; -+ int is_elf64; -+ int tid; -+ -+ tid = lwpid_of (current_thread); -+ -+ is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); -+ -+ if (is_elf64) -+ { -+ struct aarch64_features features; -+ -+ uint64_t vq = aarch64_sve_get_vq (tid); -+ features.sve = (vq > 0); -+ /* A-profile PAC is 64-bit only. */ -+ features.pauth = linux_get_hwcap (8) & AARCH64_HWCAP_PACA; -+ /* A-profile MTE is 64-bit only. */ -+ features.mte = linux_get_hwcap2 (8) & HWCAP2_MTE; -+ -+ current_process ()->tdesc -+ = aarch64_linux_read_description (vq, features.pauth, features.mte); -+ -+ /* Adjust the register sets we should use for this particular set of -+ features. */ -+ aarch64_adjust_register_sets (features); -+ } -+ else -+ current_process ()->tdesc = aarch32_linux_read_description (); -+ -+ aarch64_linux_get_debug_reg_capacity (lwpid_of (current_thread)); -+} - - /* Implementation of linux target ops method "get_regs_info". */ - -@@ -802,9 +821,7 @@ aarch64_target::get_regs_info () - if (!is_64bit_tdesc ()) - return ®s_info_aarch32; - -- if (is_sve_tdesc ()) -- return ®s_info_aarch64_sve; -- -+ /* AArch64 64-bit registers. */ - return ®s_info_aarch64; - } - -@@ -3294,5 +3311,4 @@ initialize_low_arch (void) - initialize_low_arch_aarch32 (); - - initialize_regsets_info (&aarch64_regsets_info); -- initialize_regsets_info (&aarch64_sve_regsets_info); - } --- -2.27.0 - diff --git a/meta/recipes-devtools/gdb/gdb_11.1.bb b/meta/recipes-devtools/gdb/gdb_11.1.bb deleted file mode 100644 index e73e3a2c5c..0000000000 --- a/meta/recipes-devtools/gdb/gdb_11.1.bb +++ /dev/null @@ -1,28 +0,0 @@ -require gdb.inc -require gdb-${PV}.inc - -inherit python3-dir - -EXTRA_OEMAKE:append:libc-musl = "\ - gt_cv_func_gnugettext1_libc=yes \ - gt_cv_func_gnugettext2_libc=yes \ - gl_cv_func_working_strerror=yes \ - gl_cv_func_strerror_0_works=yes \ - gl_cv_func_gettimeofday_clobber=no \ - " - -do_configure:prepend() { - if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then - cat > ${WORKDIR}/python << EOF -#!/bin/sh -case "\$2" in - --includes) echo "-I${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI}/" ;; - --ldflags) echo "-Wl,-rpath-link,${STAGING_LIBDIR}/.. -Wl,-rpath,${libdir}/.. -lpthread -ldl -lutil -lm -lpython${PYTHON_BASEVERSION}${PYTHON_ABI}" ;; - --exec-prefix) echo "${exec_prefix}" ;; - *) exit 1 ;; -esac -exit 0 -EOF - chmod +x ${WORKDIR}/python - fi -} diff --git a/meta/recipes-devtools/gdb/gdb_11.2.bb b/meta/recipes-devtools/gdb/gdb_11.2.bb new file mode 100644 index 0000000000..9c6db4ca2c --- /dev/null +++ b/meta/recipes-devtools/gdb/gdb_11.2.bb @@ -0,0 +1,39 @@ +require gdb-common.inc + +inherit gettext pkgconfig + +#LDFLAGS:append = " -s" +#export CFLAGS:append=" -L${STAGING_LIBDIR}" + +# cross-canadian must not see this +PACKAGES =+ "gdbserver" +FILES:gdbserver = "${bindir}/gdbserver" + +require gdb.inc + +inherit python3-dir + +EXTRA_OEMAKE:append:libc-musl = "\ + gt_cv_func_gnugettext1_libc=yes \ + gt_cv_func_gnugettext2_libc=yes \ + gl_cv_func_working_strerror=yes \ + gl_cv_func_strerror_0_works=yes \ + gl_cv_func_gettimeofday_clobber=no \ + " + +do_configure:prepend() { + if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then + cat > ${WORKDIR}/python << EOF +#!/bin/sh +case "\$2" in + --includes) echo "-I${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI}/" ;; + --ldflags) echo "-Wl,-rpath-link,${STAGING_LIBDIR}/.. -Wl,-rpath,${libdir}/.. -lpthread -ldl -lutil -lm -lpython${PYTHON_BASEVERSION}${PYTHON_ABI}" ;; + --exec-prefix) echo "${exec_prefix}" ;; + *) exit 1 ;; +esac +exit 0 +EOF + chmod +x ${WORKDIR}/python + fi +} + -- cgit v1.2.3-54-g00ecf