public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Keith Seitz <keiths@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/gdb] gdb-17.2-rebase-f44: Constify target_desc and enable LTO
Date: Sun, 28 Jun 2026 00:00:47 GMT [thread overview]
Message-ID: <178260484722.1.2102734749381507295.rpms-gdb-73953d59d491@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/gdb
Branch : gdb-17.2-rebase-f44
Commit : 73953d59d49162387717caa4b51a1667bce8023f
Author : Keith Seitz <keiths@redhat.com>
Date : 2022-11-03T06:40:16-07:00
Stats : +1165/-5 in 5 file(s)
URL : https://src.fedoraproject.org/rpms/gdb/c/73953d59d49162387717caa4b51a1667bce8023f?branch=gdb-17.2-rebase-f44
Log:
Constify target_desc and enable LTO
This patch backports the upstream commit to constify
target_desc. This eliminates the problems preventing us
from enabling LTO.
---
diff --git a/_gdb.spec.Patch.include b/_gdb.spec.Patch.include
index a32e678..46a964b 100644
--- a/_gdb.spec.Patch.include
+++ b/_gdb.spec.Patch.include
@@ -313,3 +313,7 @@ Patch074: gdb-backport-readline_support.patch
# (Tom de Vries)
Patch075: gdb-backport-fix-break-main-file-remove-fail.patch
+# Constify target_desc to fix PPC ODR violations.
+# (Keith Seitz, build/22395)
+Patch076: gdb-sw22395-constify-target_desc.patch
+
diff --git a/_gdb.spec.patch.include b/_gdb.spec.patch.include
index f5bd893..9fec500 100644
--- a/_gdb.spec.patch.include
+++ b/_gdb.spec.patch.include
@@ -73,3 +73,4 @@
%patch073 -p1
%patch074 -p1
%patch075 -p1
+%patch076 -p1
diff --git a/_patch_order b/_patch_order
index cb69eba..a475607 100644
--- a/_patch_order
+++ b/_patch_order
@@ -73,3 +73,4 @@ gdb-rhbz1398387-tab-crash-test.patch
gdb-rhbz1553104-s390x-arch12-test.patch
gdb-backport-readline_support.patch
gdb-backport-fix-break-main-file-remove-fail.patch
+gdb-sw22395-constify-target_desc.patch
diff --git a/gdb-sw22395-constify-target_desc.patch b/gdb-sw22395-constify-target_desc.patch
new file mode 100644
index 0000000..9a3c128
--- /dev/null
+++ b/gdb-sw22395-constify-target_desc.patch
@@ -0,0 +1,1153 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Keith Seitz <keiths@redhat.com>
+Date: Fri, 2 Sep 2022 12:43:03 -0700
+Subject: gdb-sw22395-constify-target_desc.patch
+
+;; Constify target_desc to fix PPC ODR violations.
+;; (Keith Seitz, build/22395)
+
+cleanup: Add missing feature/ XML files to Makefile
+
+ This patch adds some missing .xml files to features/Makefile so that when the
+ directory's C files are regenerated, all files are appropriately remade.
+
+ This has demonstrated that there have been several "misses" in regenerating
+ files in this directory. Namely, arm-secext.c and sparc{32,64}-solaris.c. For
+ the former case, there was what essentially amounts to a typo regarding the
+ create feature function's name. In the later case, this file has missed at least
+ one important update in July, 2020, when allocate_target_description was
+ changed to return a unique pointer.
+
+ Those corrections are included.
+
+Constify target_desc declarations
+
+ This patch changes various global target_desc declarations to const, thereby
+ correcting a prominent source of ODR violations in PowerPC-related target code.
+ The majority of files/changes are mechanical const-ifications accomplished by
+ regenerating the C files in features/.
+
+ This also required manually updating mips-linux-tdep.h, s390-linux-tdep.h,
+ nios2-tdep.h, s390-tdep.h, arch/ppc-linux-tdesc.h, arch/ppc-linux-common.c,
+ and rs6000-tdep.c.
+
+ Patch tested against the sourceware trybot, and fully regression tested against
+ our (Red Hat's) internal test infrastructure on Rawhide aarch64, s390x, x86_64,
+ and powerpcle.
+
+ With this patch, I can finally enable LTO in our GDB package builds. [Tested
+ with a rawhide scratch build containing this patch.]
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+diff --git a/gdb/arch/ppc-linux-common.c b/gdb/arch/ppc-linux-common.c
+--- a/gdb/arch/ppc-linux-common.c
++++ b/gdb/arch/ppc-linux-common.c
+@@ -46,7 +46,7 @@ ppc_linux_has_isa205 (CORE_ADDR hwcap)
+ const struct target_desc *
+ ppc_linux_match_description (struct ppc_linux_features features)
+ {
+- struct target_desc *tdesc = NULL;
++ const struct target_desc *tdesc = NULL;
+
+ if (features.wordsize == 8)
+ {
+diff --git a/gdb/arch/ppc-linux-tdesc.h b/gdb/arch/ppc-linux-tdesc.h
+--- a/gdb/arch/ppc-linux-tdesc.h
++++ b/gdb/arch/ppc-linux-tdesc.h
+@@ -22,25 +22,25 @@
+
+ struct target_desc;
+
+-extern struct target_desc *tdesc_powerpc_32l;
+-extern struct target_desc *tdesc_powerpc_altivec32l;
+-extern struct target_desc *tdesc_powerpc_vsx32l;
+-extern struct target_desc *tdesc_powerpc_isa205_32l;
+-extern struct target_desc *tdesc_powerpc_isa205_altivec32l;
+-extern struct target_desc *tdesc_powerpc_isa205_vsx32l;
+-extern struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx32l;
+-extern struct target_desc *tdesc_powerpc_isa207_vsx32l;
+-extern struct target_desc *tdesc_powerpc_isa207_htm_vsx32l;
+-extern struct target_desc *tdesc_powerpc_e500l;
+-
+-extern struct target_desc *tdesc_powerpc_64l;
+-extern struct target_desc *tdesc_powerpc_altivec64l;
+-extern struct target_desc *tdesc_powerpc_vsx64l;
+-extern struct target_desc *tdesc_powerpc_isa205_64l;
+-extern struct target_desc *tdesc_powerpc_isa205_altivec64l;
+-extern struct target_desc *tdesc_powerpc_isa205_vsx64l;
+-extern struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx64l;
+-extern struct target_desc *tdesc_powerpc_isa207_vsx64l;
+-extern struct target_desc *tdesc_powerpc_isa207_htm_vsx64l;
++extern const struct target_desc *tdesc_powerpc_32l;
++extern const struct target_desc *tdesc_powerpc_altivec32l;
++extern const struct target_desc *tdesc_powerpc_vsx32l;
++extern const struct target_desc *tdesc_powerpc_isa205_32l;
++extern const struct target_desc *tdesc_powerpc_isa205_altivec32l;
++extern const struct target_desc *tdesc_powerpc_isa205_vsx32l;
++extern const struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx32l;
++extern const struct target_desc *tdesc_powerpc_isa207_vsx32l;
++extern const struct target_desc *tdesc_powerpc_isa207_htm_vsx32l;
++extern const struct target_desc *tdesc_powerpc_e500l;
++
++extern const struct target_desc *tdesc_powerpc_64l;
++extern const struct target_desc *tdesc_powerpc_altivec64l;
++extern const struct target_desc *tdesc_powerpc_vsx64l;
++extern const struct target_desc *tdesc_powerpc_isa205_64l;
++extern const struct target_desc *tdesc_powerpc_isa205_altivec64l;
++extern const struct target_desc *tdesc_powerpc_isa205_vsx64l;
++extern const struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx64l;
++extern const struct target_desc *tdesc_powerpc_isa207_vsx64l;
++extern const struct target_desc *tdesc_powerpc_isa207_htm_vsx64l;
+
+ #endif /* ARCH_PPC_LINUX_TDESC_H */
+diff --git a/gdb/features/Makefile b/gdb/features/Makefile
+--- a/gdb/features/Makefile
++++ b/gdb/features/Makefile
+@@ -74,6 +74,7 @@ mips-dsp-expedite = r29,pc
+ mips64-expedite = r29,pc
+ mips64-dsp-expedite = r29,pc
+ nios2-linux-expedite = sp,pc
++or1k-expedite = r1,npc
+ powerpc-expedite = r1,pc
+ s390-linux32-expedite = r14,r15,pswa
+ s390-linux32v1-expedite = r14,r15,pswa
+@@ -108,6 +109,7 @@ XMLTOC = \
+ nds32.xml \
+ nios2.xml \
+ or1k.xml \
++ or1k-linux.xml \
+ rs6000/powerpc-32.xml \
+ rs6000/powerpc-32l.xml \
+ rs6000/powerpc-403.xml \
+@@ -164,6 +166,8 @@ XMLTOC = \
+ s390x-vx-linux64.xml \
+ s390-gs-linux64.xml \
+ s390x-gs-linux64.xml \
++ sparc/sparc32-solaris.xml \
++ sparc/sparc64-solaris.xml \
+ z80.xml
+
+ TDESC_CFILES = $(patsubst %.xml,%.c,$(XMLTOC))
+diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c
+--- a/gdb/features/microblaze-with-stack-protect.c
++++ b/gdb/features/microblaze-with-stack-protect.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_microblaze_with_stack_protect;
++const struct target_desc *tdesc_microblaze_with_stack_protect;
+ static void
+ initialize_tdesc_microblaze_with_stack_protect (void)
+ {
+diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c
+--- a/gdb/features/microblaze.c
++++ b/gdb/features/microblaze.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_microblaze;
++const struct target_desc *tdesc_microblaze;
+ static void
+ initialize_tdesc_microblaze (void)
+ {
+diff --git a/gdb/features/mips-dsp-linux.c b/gdb/features/mips-dsp-linux.c
+--- a/gdb/features/mips-dsp-linux.c
++++ b/gdb/features/mips-dsp-linux.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_mips_dsp_linux;
++const struct target_desc *tdesc_mips_dsp_linux;
+ static void
+ initialize_tdesc_mips_dsp_linux (void)
+ {
+diff --git a/gdb/features/mips-linux.c b/gdb/features/mips-linux.c
+--- a/gdb/features/mips-linux.c
++++ b/gdb/features/mips-linux.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_mips_linux;
++const struct target_desc *tdesc_mips_linux;
+ static void
+ initialize_tdesc_mips_linux (void)
+ {
+diff --git a/gdb/features/mips64-dsp-linux.c b/gdb/features/mips64-dsp-linux.c
+--- a/gdb/features/mips64-dsp-linux.c
++++ b/gdb/features/mips64-dsp-linux.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_mips64_dsp_linux;
++const struct target_desc *tdesc_mips64_dsp_linux;
+ static void
+ initialize_tdesc_mips64_dsp_linux (void)
+ {
+diff --git a/gdb/features/mips64-linux.c b/gdb/features/mips64-linux.c
+--- a/gdb/features/mips64-linux.c
++++ b/gdb/features/mips64-linux.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_mips64_linux;
++const struct target_desc *tdesc_mips64_linux;
+ static void
+ initialize_tdesc_mips64_linux (void)
+ {
+diff --git a/gdb/features/nds32.c b/gdb/features/nds32.c
+--- a/gdb/features/nds32.c
++++ b/gdb/features/nds32.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_nds32;
++const struct target_desc *tdesc_nds32;
+ static void
+ initialize_tdesc_nds32 (void)
+ {
+diff --git a/gdb/features/nios2.c b/gdb/features/nios2.c
+--- a/gdb/features/nios2.c
++++ b/gdb/features/nios2.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_nios2;
++const struct target_desc *tdesc_nios2;
+ static void
+ initialize_tdesc_nios2 (void)
+ {
+diff --git a/gdb/features/or1k-linux.c b/gdb/features/or1k-linux.c
+--- a/gdb/features/or1k-linux.c
++++ b/gdb/features/or1k-linux.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_or1k_linux;
++const struct target_desc *tdesc_or1k_linux;
+ static void
+ initialize_tdesc_or1k_linux (void)
+ {
+diff --git a/gdb/features/or1k.c b/gdb/features/or1k.c
+--- a/gdb/features/or1k.c
++++ b/gdb/features/or1k.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_or1k;
++const struct target_desc *tdesc_or1k;
+ static void
+ initialize_tdesc_or1k (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-32.c b/gdb/features/rs6000/powerpc-32.c
+--- a/gdb/features/rs6000/powerpc-32.c
++++ b/gdb/features/rs6000/powerpc-32.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_32;
++const struct target_desc *tdesc_powerpc_32;
+ static void
+ initialize_tdesc_powerpc_32 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-32l.c b/gdb/features/rs6000/powerpc-32l.c
+--- a/gdb/features/rs6000/powerpc-32l.c
++++ b/gdb/features/rs6000/powerpc-32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_32l;
++const struct target_desc *tdesc_powerpc_32l;
+ static void
+ initialize_tdesc_powerpc_32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-403.c b/gdb/features/rs6000/powerpc-403.c
+--- a/gdb/features/rs6000/powerpc-403.c
++++ b/gdb/features/rs6000/powerpc-403.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_403;
++const struct target_desc *tdesc_powerpc_403;
+ static void
+ initialize_tdesc_powerpc_403 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-403gc.c b/gdb/features/rs6000/powerpc-403gc.c
+--- a/gdb/features/rs6000/powerpc-403gc.c
++++ b/gdb/features/rs6000/powerpc-403gc.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_403gc;
++const struct target_desc *tdesc_powerpc_403gc;
+ static void
+ initialize_tdesc_powerpc_403gc (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-405.c b/gdb/features/rs6000/powerpc-405.c
+--- a/gdb/features/rs6000/powerpc-405.c
++++ b/gdb/features/rs6000/powerpc-405.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_405;
++const struct target_desc *tdesc_powerpc_405;
+ static void
+ initialize_tdesc_powerpc_405 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-505.c b/gdb/features/rs6000/powerpc-505.c
+--- a/gdb/features/rs6000/powerpc-505.c
++++ b/gdb/features/rs6000/powerpc-505.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_505;
++const struct target_desc *tdesc_powerpc_505;
+ static void
+ initialize_tdesc_powerpc_505 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-601.c b/gdb/features/rs6000/powerpc-601.c
+--- a/gdb/features/rs6000/powerpc-601.c
++++ b/gdb/features/rs6000/powerpc-601.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_601;
++const struct target_desc *tdesc_powerpc_601;
+ static void
+ initialize_tdesc_powerpc_601 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-602.c b/gdb/features/rs6000/powerpc-602.c
+--- a/gdb/features/rs6000/powerpc-602.c
++++ b/gdb/features/rs6000/powerpc-602.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_602;
++const struct target_desc *tdesc_powerpc_602;
+ static void
+ initialize_tdesc_powerpc_602 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-603.c b/gdb/features/rs6000/powerpc-603.c
+--- a/gdb/features/rs6000/powerpc-603.c
++++ b/gdb/features/rs6000/powerpc-603.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_603;
++const struct target_desc *tdesc_powerpc_603;
+ static void
+ initialize_tdesc_powerpc_603 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-604.c b/gdb/features/rs6000/powerpc-604.c
+--- a/gdb/features/rs6000/powerpc-604.c
++++ b/gdb/features/rs6000/powerpc-604.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_604;
++const struct target_desc *tdesc_powerpc_604;
+ static void
+ initialize_tdesc_powerpc_604 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-64.c b/gdb/features/rs6000/powerpc-64.c
+--- a/gdb/features/rs6000/powerpc-64.c
++++ b/gdb/features/rs6000/powerpc-64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_64;
++const struct target_desc *tdesc_powerpc_64;
+ static void
+ initialize_tdesc_powerpc_64 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-64l.c b/gdb/features/rs6000/powerpc-64l.c
+--- a/gdb/features/rs6000/powerpc-64l.c
++++ b/gdb/features/rs6000/powerpc-64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_64l;
++const struct target_desc *tdesc_powerpc_64l;
+ static void
+ initialize_tdesc_powerpc_64l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-7400.c b/gdb/features/rs6000/powerpc-7400.c
+--- a/gdb/features/rs6000/powerpc-7400.c
++++ b/gdb/features/rs6000/powerpc-7400.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_7400;
++const struct target_desc *tdesc_powerpc_7400;
+ static void
+ initialize_tdesc_powerpc_7400 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-750.c b/gdb/features/rs6000/powerpc-750.c
+--- a/gdb/features/rs6000/powerpc-750.c
++++ b/gdb/features/rs6000/powerpc-750.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_750;
++const struct target_desc *tdesc_powerpc_750;
+ static void
+ initialize_tdesc_powerpc_750 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-860.c b/gdb/features/rs6000/powerpc-860.c
+--- a/gdb/features/rs6000/powerpc-860.c
++++ b/gdb/features/rs6000/powerpc-860.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_860;
++const struct target_desc *tdesc_powerpc_860;
+ static void
+ initialize_tdesc_powerpc_860 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-altivec32.c b/gdb/features/rs6000/powerpc-altivec32.c
+--- a/gdb/features/rs6000/powerpc-altivec32.c
++++ b/gdb/features/rs6000/powerpc-altivec32.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_altivec32;
++const struct target_desc *tdesc_powerpc_altivec32;
+ static void
+ initialize_tdesc_powerpc_altivec32 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-altivec32l.c b/gdb/features/rs6000/powerpc-altivec32l.c
+--- a/gdb/features/rs6000/powerpc-altivec32l.c
++++ b/gdb/features/rs6000/powerpc-altivec32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_altivec32l;
++const struct target_desc *tdesc_powerpc_altivec32l;
+ static void
+ initialize_tdesc_powerpc_altivec32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-altivec64.c b/gdb/features/rs6000/powerpc-altivec64.c
+--- a/gdb/features/rs6000/powerpc-altivec64.c
++++ b/gdb/features/rs6000/powerpc-altivec64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_altivec64;
++const struct target_desc *tdesc_powerpc_altivec64;
+ static void
+ initialize_tdesc_powerpc_altivec64 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-altivec64l.c b/gdb/features/rs6000/powerpc-altivec64l.c
+--- a/gdb/features/rs6000/powerpc-altivec64l.c
++++ b/gdb/features/rs6000/powerpc-altivec64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_altivec64l;
++const struct target_desc *tdesc_powerpc_altivec64l;
+ static void
+ initialize_tdesc_powerpc_altivec64l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-e500.c b/gdb/features/rs6000/powerpc-e500.c
+--- a/gdb/features/rs6000/powerpc-e500.c
++++ b/gdb/features/rs6000/powerpc-e500.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_e500;
++const struct target_desc *tdesc_powerpc_e500;
+ static void
+ initialize_tdesc_powerpc_e500 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-e500l.c b/gdb/features/rs6000/powerpc-e500l.c
+--- a/gdb/features/rs6000/powerpc-e500l.c
++++ b/gdb/features/rs6000/powerpc-e500l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_e500l;
++const struct target_desc *tdesc_powerpc_e500l;
+ static void
+ initialize_tdesc_powerpc_e500l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa205-32l.c b/gdb/features/rs6000/powerpc-isa205-32l.c
+--- a/gdb/features/rs6000/powerpc-isa205-32l.c
++++ b/gdb/features/rs6000/powerpc-isa205-32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa205_32l;
++const struct target_desc *tdesc_powerpc_isa205_32l;
+ static void
+ initialize_tdesc_powerpc_isa205_32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa205-64l.c b/gdb/features/rs6000/powerpc-isa205-64l.c
+--- a/gdb/features/rs6000/powerpc-isa205-64l.c
++++ b/gdb/features/rs6000/powerpc-isa205-64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa205_64l;
++const struct target_desc *tdesc_powerpc_isa205_64l;
+ static void
+ initialize_tdesc_powerpc_isa205_64l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa205-altivec32l.c b/gdb/features/rs6000/powerpc-isa205-altivec32l.c
+--- a/gdb/features/rs6000/powerpc-isa205-altivec32l.c
++++ b/gdb/features/rs6000/powerpc-isa205-altivec32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa205_altivec32l;
++const struct target_desc *tdesc_powerpc_isa205_altivec32l;
+ static void
+ initialize_tdesc_powerpc_isa205_altivec32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa205-altivec64l.c b/gdb/features/rs6000/powerpc-isa205-altivec64l.c
+--- a/gdb/features/rs6000/powerpc-isa205-altivec64l.c
++++ b/gdb/features/rs6000/powerpc-isa205-altivec64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa205_altivec64l;
++const struct target_desc *tdesc_powerpc_isa205_altivec64l;
+ static void
+ initialize_tdesc_powerpc_isa205_altivec64l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c b/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c
+--- a/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c
++++ b/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx32l;
++const struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx32l;
+ static void
+ initialize_tdesc_powerpc_isa205_ppr_dscr_vsx32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c b/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c
+--- a/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c
++++ b/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx64l;
++const struct target_desc *tdesc_powerpc_isa205_ppr_dscr_vsx64l;
+ static void
+ initialize_tdesc_powerpc_isa205_ppr_dscr_vsx64l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa205-vsx32l.c b/gdb/features/rs6000/powerpc-isa205-vsx32l.c
+--- a/gdb/features/rs6000/powerpc-isa205-vsx32l.c
++++ b/gdb/features/rs6000/powerpc-isa205-vsx32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa205_vsx32l;
++const struct target_desc *tdesc_powerpc_isa205_vsx32l;
+ static void
+ initialize_tdesc_powerpc_isa205_vsx32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa205-vsx64l.c b/gdb/features/rs6000/powerpc-isa205-vsx64l.c
+--- a/gdb/features/rs6000/powerpc-isa205-vsx64l.c
++++ b/gdb/features/rs6000/powerpc-isa205-vsx64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa205_vsx64l;
++const struct target_desc *tdesc_powerpc_isa205_vsx64l;
+ static void
+ initialize_tdesc_powerpc_isa205_vsx64l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c b/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c
+--- a/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c
++++ b/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa207_htm_vsx32l;
++const struct target_desc *tdesc_powerpc_isa207_htm_vsx32l;
+ static void
+ initialize_tdesc_powerpc_isa207_htm_vsx32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c b/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c
+--- a/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c
++++ b/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa207_htm_vsx64l;
++const struct target_desc *tdesc_powerpc_isa207_htm_vsx64l;
+ static void
+ initialize_tdesc_powerpc_isa207_htm_vsx64l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa207-vsx32l.c b/gdb/features/rs6000/powerpc-isa207-vsx32l.c
+--- a/gdb/features/rs6000/powerpc-isa207-vsx32l.c
++++ b/gdb/features/rs6000/powerpc-isa207-vsx32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa207_vsx32l;
++const struct target_desc *tdesc_powerpc_isa207_vsx32l;
+ static void
+ initialize_tdesc_powerpc_isa207_vsx32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-isa207-vsx64l.c b/gdb/features/rs6000/powerpc-isa207-vsx64l.c
+--- a/gdb/features/rs6000/powerpc-isa207-vsx64l.c
++++ b/gdb/features/rs6000/powerpc-isa207-vsx64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_isa207_vsx64l;
++const struct target_desc *tdesc_powerpc_isa207_vsx64l;
+ static void
+ initialize_tdesc_powerpc_isa207_vsx64l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-vsx32.c b/gdb/features/rs6000/powerpc-vsx32.c
+--- a/gdb/features/rs6000/powerpc-vsx32.c
++++ b/gdb/features/rs6000/powerpc-vsx32.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_vsx32;
++const struct target_desc *tdesc_powerpc_vsx32;
+ static void
+ initialize_tdesc_powerpc_vsx32 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-vsx32l.c b/gdb/features/rs6000/powerpc-vsx32l.c
+--- a/gdb/features/rs6000/powerpc-vsx32l.c
++++ b/gdb/features/rs6000/powerpc-vsx32l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_vsx32l;
++const struct target_desc *tdesc_powerpc_vsx32l;
+ static void
+ initialize_tdesc_powerpc_vsx32l (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-vsx64.c b/gdb/features/rs6000/powerpc-vsx64.c
+--- a/gdb/features/rs6000/powerpc-vsx64.c
++++ b/gdb/features/rs6000/powerpc-vsx64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_vsx64;
++const struct target_desc *tdesc_powerpc_vsx64;
+ static void
+ initialize_tdesc_powerpc_vsx64 (void)
+ {
+diff --git a/gdb/features/rs6000/powerpc-vsx64l.c b/gdb/features/rs6000/powerpc-vsx64l.c
+--- a/gdb/features/rs6000/powerpc-vsx64l.c
++++ b/gdb/features/rs6000/powerpc-vsx64l.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_powerpc_vsx64l;
++const struct target_desc *tdesc_powerpc_vsx64l;
+ static void
+ initialize_tdesc_powerpc_vsx64l (void)
+ {
+diff --git a/gdb/features/rs6000/rs6000.c b/gdb/features/rs6000/rs6000.c
+--- a/gdb/features/rs6000/rs6000.c
++++ b/gdb/features/rs6000/rs6000.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_rs6000;
++const struct target_desc *tdesc_rs6000;
+ static void
+ initialize_tdesc_rs6000 (void)
+ {
+diff --git a/gdb/features/rx.c b/gdb/features/rx.c
+--- a/gdb/features/rx.c
++++ b/gdb/features/rx.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_rx;
++const struct target_desc *tdesc_rx;
+ static void
+ initialize_tdesc_rx (void)
+ {
+diff --git a/gdb/features/s390-gs-linux64.c b/gdb/features/s390-gs-linux64.c
+--- a/gdb/features/s390-gs-linux64.c
++++ b/gdb/features/s390-gs-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_gs_linux64;
++const struct target_desc *tdesc_s390_gs_linux64;
+ static void
+ initialize_tdesc_s390_gs_linux64 (void)
+ {
+diff --git a/gdb/features/s390-linux32.c b/gdb/features/s390-linux32.c
+--- a/gdb/features/s390-linux32.c
++++ b/gdb/features/s390-linux32.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_linux32;
++const struct target_desc *tdesc_s390_linux32;
+ static void
+ initialize_tdesc_s390_linux32 (void)
+ {
+diff --git a/gdb/features/s390-linux32v1.c b/gdb/features/s390-linux32v1.c
+--- a/gdb/features/s390-linux32v1.c
++++ b/gdb/features/s390-linux32v1.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_linux32v1;
++const struct target_desc *tdesc_s390_linux32v1;
+ static void
+ initialize_tdesc_s390_linux32v1 (void)
+ {
+diff --git a/gdb/features/s390-linux32v2.c b/gdb/features/s390-linux32v2.c
+--- a/gdb/features/s390-linux32v2.c
++++ b/gdb/features/s390-linux32v2.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_linux32v2;
++const struct target_desc *tdesc_s390_linux32v2;
+ static void
+ initialize_tdesc_s390_linux32v2 (void)
+ {
+diff --git a/gdb/features/s390-linux64.c b/gdb/features/s390-linux64.c
+--- a/gdb/features/s390-linux64.c
++++ b/gdb/features/s390-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_linux64;
++const struct target_desc *tdesc_s390_linux64;
+ static void
+ initialize_tdesc_s390_linux64 (void)
+ {
+diff --git a/gdb/features/s390-linux64v1.c b/gdb/features/s390-linux64v1.c
+--- a/gdb/features/s390-linux64v1.c
++++ b/gdb/features/s390-linux64v1.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_linux64v1;
++const struct target_desc *tdesc_s390_linux64v1;
+ static void
+ initialize_tdesc_s390_linux64v1 (void)
+ {
+diff --git a/gdb/features/s390-linux64v2.c b/gdb/features/s390-linux64v2.c
+--- a/gdb/features/s390-linux64v2.c
++++ b/gdb/features/s390-linux64v2.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_linux64v2;
++const struct target_desc *tdesc_s390_linux64v2;
+ static void
+ initialize_tdesc_s390_linux64v2 (void)
+ {
+diff --git a/gdb/features/s390-te-linux64.c b/gdb/features/s390-te-linux64.c
+--- a/gdb/features/s390-te-linux64.c
++++ b/gdb/features/s390-te-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_te_linux64;
++const struct target_desc *tdesc_s390_te_linux64;
+ static void
+ initialize_tdesc_s390_te_linux64 (void)
+ {
+diff --git a/gdb/features/s390-tevx-linux64.c b/gdb/features/s390-tevx-linux64.c
+--- a/gdb/features/s390-tevx-linux64.c
++++ b/gdb/features/s390-tevx-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_tevx_linux64;
++const struct target_desc *tdesc_s390_tevx_linux64;
+ static void
+ initialize_tdesc_s390_tevx_linux64 (void)
+ {
+diff --git a/gdb/features/s390-vx-linux64.c b/gdb/features/s390-vx-linux64.c
+--- a/gdb/features/s390-vx-linux64.c
++++ b/gdb/features/s390-vx-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390_vx_linux64;
++const struct target_desc *tdesc_s390_vx_linux64;
+ static void
+ initialize_tdesc_s390_vx_linux64 (void)
+ {
+diff --git a/gdb/features/s390x-gs-linux64.c b/gdb/features/s390x-gs-linux64.c
+--- a/gdb/features/s390x-gs-linux64.c
++++ b/gdb/features/s390x-gs-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390x_gs_linux64;
++const struct target_desc *tdesc_s390x_gs_linux64;
+ static void
+ initialize_tdesc_s390x_gs_linux64 (void)
+ {
+diff --git a/gdb/features/s390x-linux64.c b/gdb/features/s390x-linux64.c
+--- a/gdb/features/s390x-linux64.c
++++ b/gdb/features/s390x-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390x_linux64;
++const struct target_desc *tdesc_s390x_linux64;
+ static void
+ initialize_tdesc_s390x_linux64 (void)
+ {
+diff --git a/gdb/features/s390x-linux64v1.c b/gdb/features/s390x-linux64v1.c
+--- a/gdb/features/s390x-linux64v1.c
++++ b/gdb/features/s390x-linux64v1.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390x_linux64v1;
++const struct target_desc *tdesc_s390x_linux64v1;
+ static void
+ initialize_tdesc_s390x_linux64v1 (void)
+ {
+diff --git a/gdb/features/s390x-linux64v2.c b/gdb/features/s390x-linux64v2.c
+--- a/gdb/features/s390x-linux64v2.c
++++ b/gdb/features/s390x-linux64v2.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390x_linux64v2;
++const struct target_desc *tdesc_s390x_linux64v2;
+ static void
+ initialize_tdesc_s390x_linux64v2 (void)
+ {
+diff --git a/gdb/features/s390x-te-linux64.c b/gdb/features/s390x-te-linux64.c
+--- a/gdb/features/s390x-te-linux64.c
++++ b/gdb/features/s390x-te-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390x_te_linux64;
++const struct target_desc *tdesc_s390x_te_linux64;
+ static void
+ initialize_tdesc_s390x_te_linux64 (void)
+ {
+diff --git a/gdb/features/s390x-tevx-linux64.c b/gdb/features/s390x-tevx-linux64.c
+--- a/gdb/features/s390x-tevx-linux64.c
++++ b/gdb/features/s390x-tevx-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390x_tevx_linux64;
++const struct target_desc *tdesc_s390x_tevx_linux64;
+ static void
+ initialize_tdesc_s390x_tevx_linux64 (void)
+ {
+diff --git a/gdb/features/s390x-vx-linux64.c b/gdb/features/s390x-vx-linux64.c
+--- a/gdb/features/s390x-vx-linux64.c
++++ b/gdb/features/s390x-vx-linux64.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_s390x_vx_linux64;
++const struct target_desc *tdesc_s390x_vx_linux64;
+ static void
+ initialize_tdesc_s390x_vx_linux64 (void)
+ {
+diff --git a/gdb/features/sparc/sparc32-solaris.c b/gdb/features/sparc/sparc32-solaris.c
+--- a/gdb/features/sparc/sparc32-solaris.c
++++ b/gdb/features/sparc/sparc32-solaris.c
+@@ -5,18 +5,18 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_sparc32_solaris;
++const struct target_desc *tdesc_sparc32_solaris;
+ static void
+ initialize_tdesc_sparc32_solaris (void)
+ {
+- struct target_desc *result = allocate_target_description ();
+- struct tdesc_feature *feature;
++ target_desc_up result = allocate_target_description ();
++ set_tdesc_architecture (result.get (), bfd_scan_arch ("sparc"));
+
+- set_tdesc_architecture (result, bfd_scan_arch ("sparc"));
++ set_tdesc_osabi (result.get (), osabi_from_tdesc_string ("Solaris"));
+
+- set_tdesc_osabi (result, osabi_from_tdesc_string ("Solaris"));
++ struct tdesc_feature *feature;
+
+- feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.cpu");
++ feature = tdesc_create_feature (result.get (), "org.gnu.gdb.sparc.cpu");
+ tdesc_create_reg (feature, "g0", 0, 1, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "g1", 1, 1, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "g2", 2, 1, NULL, 32, "uint32");
+@@ -50,7 +50,7 @@ initialize_tdesc_sparc32_solaris (void)
+ tdesc_create_reg (feature, "fp", 30, 1, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "i7", 31, 1, NULL, 32, "uint32");
+
+- feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.cp0");
++ feature = tdesc_create_feature (result.get (), "org.gnu.gdb.sparc.cp0");
+ tdesc_create_reg (feature, "y", 64, 1, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "psr", 65, 1, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "wim", 66, 1, NULL, 32, "uint32");
+@@ -60,7 +60,7 @@ initialize_tdesc_sparc32_solaris (void)
+ tdesc_create_reg (feature, "fsr", 70, 1, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "csr", 71, 1, NULL, 32, "uint32");
+
+- feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.fpu");
++ feature = tdesc_create_feature (result.get (), "org.gnu.gdb.sparc.fpu");
+ tdesc_create_reg (feature, "f0", 32, 1, NULL, 32, "ieee_single");
+ tdesc_create_reg (feature, "f1", 33, 1, NULL, 32, "ieee_single");
+ tdesc_create_reg (feature, "f2", 34, 1, NULL, 32, "ieee_single");
+@@ -94,5 +94,5 @@ initialize_tdesc_sparc32_solaris (void)
+ tdesc_create_reg (feature, "f30", 62, 1, NULL, 32, "ieee_single");
+ tdesc_create_reg (feature, "f31", 63, 1, NULL, 32, "ieee_single");
+
+- tdesc_sparc_solaris = result;
++ tdesc_sparc32_solaris = result.release ();
+ }
+diff --git a/gdb/features/sparc/sparc64-solaris.c b/gdb/features/sparc/sparc64-solaris.c
+--- a/gdb/features/sparc/sparc64-solaris.c
++++ b/gdb/features/sparc/sparc64-solaris.c
+@@ -5,18 +5,18 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_sparc64_solaris;
++const struct target_desc *tdesc_sparc64_solaris;
+ static void
+ initialize_tdesc_sparc64_solaris (void)
+ {
+- struct target_desc *result = allocate_target_description ();
+- struct tdesc_feature *feature;
++ target_desc_up result = allocate_target_description ();
++ set_tdesc_architecture (result.get (), bfd_scan_arch ("sparc:v9"));
+
+- set_tdesc_architecture (result, bfd_scan_arch ("sparc"));
++ set_tdesc_osabi (result.get (), osabi_from_tdesc_string ("Solaris"));
+
+- set_tdesc_osabi (result, osabi_from_tdesc_string ("Solaris"));
++ struct tdesc_feature *feature;
+
+- feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.cpu");
++ feature = tdesc_create_feature (result.get (), "org.gnu.gdb.sparc.cpu");
+ tdesc_create_reg (feature, "g0", 0, 1, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "g1", 1, 1, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "g2", 2, 1, NULL, 64, "uint64");
+@@ -47,18 +47,18 @@ initialize_tdesc_sparc64_solaris (void)
+ tdesc_create_reg (feature, "i3", 27, 1, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "i4", 28, 1, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "i5", 29, 1, NULL, 64, "uint64");
+- tdesc_create_reg (feature, "fp", 30, 1, NULL, 32, "uint64");
++ tdesc_create_reg (feature, "fp", 30, 1, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "i7", 31, 1, NULL, 64, "uint64");
+
+- feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.cp0");
++ feature = tdesc_create_feature (result.get (), "org.gnu.gdb.sparc.cp0");
+ tdesc_create_reg (feature, "pc", 80, 1, NULL, 64, "code_ptr");
+ tdesc_create_reg (feature, "npc", 81, 1, NULL, 64, "code_ptr");
+ tdesc_create_reg (feature, "state", 82, 1, NULL, 64, "uint64");
+- tdesc_create_reg (feature, "fsr", 83, 1, NULL, 32, "ieee_single");
+- tdesc_create_reg (feature, "fprs", 84, 1, NULL, 32, "ieee_single");
++ tdesc_create_reg (feature, "fsr", 83, 1, NULL, 64, "uint64");
++ tdesc_create_reg (feature, "fprs", 84, 1, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "y", 85, 1, NULL, 64, "uint64");
+
+- feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.fpu");
++ feature = tdesc_create_feature (result.get (), "org.gnu.gdb.sparc.fpu");
+ tdesc_create_reg (feature, "f0", 32, 1, NULL, 32, "ieee_single");
+ tdesc_create_reg (feature, "f1", 33, 1, NULL, 32, "ieee_single");
+ tdesc_create_reg (feature, "f2", 34, 1, NULL, 32, "ieee_single");
+@@ -108,5 +108,5 @@ initialize_tdesc_sparc64_solaris (void)
+ tdesc_create_reg (feature, "f60", 78, 1, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "f62", 79, 1, NULL, 64, "ieee_double");
+
+- tdesc_sparc64_solaris = result;
++ tdesc_sparc64_solaris = result.release ();
+ }
+diff --git a/gdb/features/z80.c b/gdb/features/z80.c
+--- a/gdb/features/z80.c
++++ b/gdb/features/z80.c
+@@ -5,7 +5,7 @@
+ #include "osabi.h"
+ #include "target-descriptions.h"
+
+-struct target_desc *tdesc_z80;
++const struct target_desc *tdesc_z80;
+ static void
+ initialize_tdesc_z80 (void)
+ {
+diff --git a/gdb/mips-linux-tdep.h b/gdb/mips-linux-tdep.h
+--- a/gdb/mips-linux-tdep.h
++++ b/gdb/mips-linux-tdep.h
+@@ -108,9 +108,9 @@ enum {
+ int mips_linux_restart_reg_p (struct gdbarch *gdbarch);
+
+ /* Target descriptions. */
+-extern struct target_desc *tdesc_mips_linux;
+-extern struct target_desc *tdesc_mips64_linux;
+-extern struct target_desc *tdesc_mips_dsp_linux;
+-extern struct target_desc *tdesc_mips64_dsp_linux;
++extern const struct target_desc *tdesc_mips_linux;
++extern const struct target_desc *tdesc_mips64_linux;
++extern const struct target_desc *tdesc_mips_dsp_linux;
++extern const struct target_desc *tdesc_mips64_dsp_linux;
+
+ #endif /* MIPS_LINUX_TDEP_H */
+diff --git a/gdb/nios2-tdep.h b/gdb/nios2-tdep.h
+--- a/gdb/nios2-tdep.h
++++ b/gdb/nios2-tdep.h
+@@ -84,7 +84,7 @@ struct nios2_gdbarch_tdep : gdbarch_tdep
+ int jb_pc = 0;
+ };
+
+-extern struct target_desc *tdesc_nios2_linux;
+-extern struct target_desc *tdesc_nios2;
++extern const struct target_desc *tdesc_nios2_linux;
++extern const struct target_desc *tdesc_nios2;
+
+ #endif /* NIOS2_TDEP_H */
+diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
+--- a/gdb/rs6000-tdep.c
++++ b/gdb/rs6000-tdep.c
+@@ -3466,7 +3466,7 @@ struct ppc_variant
+ unsigned long mach;
+
+ /* Target description for this variant. */
+- struct target_desc **tdesc;
++ const struct target_desc **tdesc;
+ };
+
+ static struct ppc_variant variants[] =
+diff --git a/gdb/s390-linux-tdep.h b/gdb/s390-linux-tdep.h
+--- a/gdb/s390-linux-tdep.h
++++ b/gdb/s390-linux-tdep.h
+@@ -48,20 +48,20 @@ extern const struct regset s390_gs_regset;
+ extern const struct regset s390_gsbc_regset;
+
+ /* GNU/Linux target descriptions. */
+-extern struct target_desc *tdesc_s390_linux32v1;
+-extern struct target_desc *tdesc_s390_linux32v2;
+-extern struct target_desc *tdesc_s390_linux64;
+-extern struct target_desc *tdesc_s390_linux64v1;
+-extern struct target_desc *tdesc_s390_linux64v2;
+-extern struct target_desc *tdesc_s390_te_linux64;
+-extern struct target_desc *tdesc_s390_vx_linux64;
+-extern struct target_desc *tdesc_s390_tevx_linux64;
+-extern struct target_desc *tdesc_s390_gs_linux64;
+-extern struct target_desc *tdesc_s390x_linux64v1;
+-extern struct target_desc *tdesc_s390x_linux64v2;
+-extern struct target_desc *tdesc_s390x_te_linux64;
+-extern struct target_desc *tdesc_s390x_vx_linux64;
+-extern struct target_desc *tdesc_s390x_tevx_linux64;
+-extern struct target_desc *tdesc_s390x_gs_linux64;
++extern const struct target_desc *tdesc_s390_linux32v1;
++extern const struct target_desc *tdesc_s390_linux32v2;
++extern const struct target_desc *tdesc_s390_linux64;
++extern const struct target_desc *tdesc_s390_linux64v1;
++extern const struct target_desc *tdesc_s390_linux64v2;
++extern const struct target_desc *tdesc_s390_te_linux64;
++extern const struct target_desc *tdesc_s390_vx_linux64;
++extern const struct target_desc *tdesc_s390_tevx_linux64;
++extern const struct target_desc *tdesc_s390_gs_linux64;
++extern const struct target_desc *tdesc_s390x_linux64v1;
++extern const struct target_desc *tdesc_s390x_linux64v2;
++extern const struct target_desc *tdesc_s390x_te_linux64;
++extern const struct target_desc *tdesc_s390x_vx_linux64;
++extern const struct target_desc *tdesc_s390x_tevx_linux64;
++extern const struct target_desc *tdesc_s390x_gs_linux64;
+
+ #endif /* S390_LINUX_TDEP_H */
+diff --git a/gdb/s390-tdep.h b/gdb/s390-tdep.h
+--- a/gdb/s390-tdep.h
++++ b/gdb/s390-tdep.h
+@@ -317,7 +317,7 @@ extern struct value *s390_trad_frame_prev_register
+ (struct frame_info *this_frame, struct trad_frame_saved_reg saved_regs[],
+ int regnum);
+
+-extern struct target_desc *tdesc_s390_linux32;
+-extern struct target_desc *tdesc_s390x_linux64;
++extern const struct target_desc *tdesc_s390_linux32;
++extern const struct target_desc *tdesc_s390x_linux64;
+
+ #endif /* S390_TDEP_H */
+diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
+--- a/gdb/target-descriptions.c
++++ b/gdb/target-descriptions.c
+@@ -1367,7 +1367,7 @@ class print_c_tdesc : public tdesc_element_visitor
+ printf_filtered ("#include \"target-descriptions.h\"\n");
+ printf_filtered ("\n");
+
+- printf_filtered ("struct target_desc *tdesc_%s;\n", m_function);
++ printf_filtered ("const struct target_desc *tdesc_%s;\n", m_function);
+ printf_filtered ("static void\n");
+ printf_filtered ("initialize_tdesc_%s (void)\n", m_function);
+ printf_filtered ("{\n");
diff --git a/gdb.spec b/gdb.spec
index 093d672..50a583d 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -11,9 +11,6 @@
# Turn off the brp-python-bytecompile automagic
%global _python_bytecompile_extra 0
-# Disable LTO until upstream fixes GDB's ODR woes.
-%define _lto_cflags %{nil}
-
# Only build on x86 for RHEL6 SCL, defining missing parallel make macros.
%if 0%{?scl:1} && 0%{?el6:1}
ExclusiveArch: %{ix86} x86_64
@@ -51,7 +48,7 @@ Version: 12.1
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 8%{?dist}
+Release: 9%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and LGPLv3+ and BSD and Public Domain and GFDL
# Do not provide URL for snapshots as the file lasts there only for 2 days.
@@ -1189,6 +1186,10 @@ fi
%endif
%changelog
+* Thu Nov 3 2022 Keith Seitz <keiths@redhat.com> - 12.1-9
+- Add patch to fix ODR violations on powerpc and
+ enable LTO builds. (Keith Seitz, sw build/23395)
+
* Tue Oct 18 2022 Bruno Larsen - 12.1-8
- Backport fix to gdb.base/break-main-file-remove-fail.exp
(Tom de Vries)
@@ -1206,7 +1207,7 @@ fi
* Fri Oct 7 2022 Alexandra Hájková - 12.1-6
- Update gdb-6.6-buildid-locate.patch to fix RHBZ 2122947.
-* Thu Jul 28 2022 Amit Shah <amitshah@fedoraproject.org> - 12.1-5
+* Thu Jul 28 2022 Amit Shah <amitshah@fedoraproject.org>
- Use the dist_name macro to identify the distribution
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org>
reply other threads:[~2026-06-28 0:00 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178260484722.1.2102734749381507295.rpms-gdb-73953d59d491@fedoraproject.org \
--to=keiths@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox