From 6eb1e6a8c1c83d0fb5b06192d1ec218d3a358f23 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Wed, 26 Jul 2017 12:56:54 +0100 Subject: [PATCH] Use visitor pattern for "maint print c-tdesc" Target description can be modeled as a tree, the target description is the root node, features are children nodes, registers and types are grand-children nodes. So command "maint print c-tdesc" in effect traverse/visit each node, and print them in c. This can be implemented by visitor pattern, this is the first reason. Secondly, I want to this command prints c files in a different way for some specific xml files, but still print c files the same way for the rest of xml files. Third, I even want to print xml files from target descriptions, so that GDBserver can use it to reply GDB's query qXfer:features:read:target.xml. gdb: 2017-07-26 Yao Qi * target-descriptions.c (tdesc_element_visitor): New class. (tdesc_element): New class. (tdesc_reg): Inherit from tdesc_element. (tdesc_reg::accept): New function. (tdesc_type): Inherit from tdesc_element. (tdesc_type::accept): New function. (tdesc_feature): Inherit from tdesc_element. (tdesc_feature::accept): New function. (target_desc): Inherit from tdesc_element. (target_desc::target_desc): New. (target_desc::~target_desc): New. (target_desc::accept): New. (allocate_target_description): Use new. (free_target_description): Use delete. (print_c_tdesc): New class. (maint_print_c_tdesc_cmd): Adjust. * features/aarch64.c: Re-generated. * features/arc-arcompact.c: Re-generated. * features/arc-v2.c: Re-generated. * features/arm/arm-with-iwmmxt.c: Re-generated. * features/arm/arm-with-m.c: Re-generated. * features/arm/arm-with-m-fpa-layout.c: Re-generated. * features/arm/arm-with-m-vfp-d16.c: Re-generated. * features/arm/arm-with-neon.c: Re-generated. * features/arm/arm-with-vfpv2.c: Re-generated. * features/arm/arm-with-vfpv3.c: Re-generated. * features/i386/amd64-avx-avx512.c: Re-generated. * features/i386/amd64-avx-avx512-linux.c: Re-generated. * features/i386/amd64-avx.c: Re-generated. * features/i386/amd64-avx-linux.c: Re-generated. * features/i386/amd64-avx-mpx-avx512-pku.c: Re-generated. * features/i386/amd64-avx-mpx-avx512-pku-linux.c: Re-generated. * features/i386/amd64-avx-mpx.c: Re-generated. * features/i386/amd64-avx-mpx-linux.c: Re-generated. * features/i386/amd64.c: Re-generated. * features/i386/amd64-linux.c: Re-generated. * features/i386/amd64-mpx.c: Re-generated. * features/i386/amd64-mpx-linux.c: Re-generated. * features/i386/i386-avx-avx512.c: Re-generated. * features/i386/i386-avx-avx512-linux.c: Re-generated. * features/i386/i386-avx.c: Re-generated. * features/i386/i386-avx-linux.c: Re-generated. * features/i386/i386-avx-mpx-avx512-pku.c: Re-generated. * features/i386/i386-avx-mpx-avx512-pku-linux.c: Re-generated. * features/i386/i386-avx-mpx.c: Re-generated. * features/i386/i386-avx-mpx-linux.c: Re-generated. * features/i386/i386.c: Re-generated. * features/i386/i386-linux.c: Re-generated. * features/i386/i386-mmx.c: Re-generated. * features/i386/i386-mmx-linux.c: Re-generated. * features/i386/i386-mpx.c: Re-generated. * features/i386/i386-mpx-linux.c: Re-generated. * features/i386/x32-avx-avx512.c: Re-generated. * features/i386/x32-avx-avx512-linux.c: Re-generated. * features/i386/x32-avx.c: Re-generated. * features/i386/x32-avx-linux.c: Re-generated. * features/i386/x32.c: Re-generated. * features/i386/x32-linux.c: Re-generated. * features/microblaze.c: Re-generated. * features/microblaze-with-stack-protect.c: Re-generated. * features/mips64-dsp-linux.c: Re-generated. * features/mips64-linux.c: Re-generated. * features/mips-dsp-linux.c: Re-generated. * features/mips-linux.c: Re-generated. * features/nds32.c: Re-generated. * features/nios2.c: Re-generated. * features/nios2-linux.c: Re-generated. * features/rs6000/powerpc-32.c: Re-generated. * features/rs6000/powerpc-32l.c: Re-generated. * features/rs6000/powerpc-403.c: Re-generated. * features/rs6000/powerpc-403gc.c : Re-generated. * features/rs6000/powerpc-405.c: Re-generated. * features/rs6000/powerpc-505.c: Re-generated. * features/rs6000/powerpc-601.c: Re-generated. * features/rs6000/powerpc-602.c: Re-generated. * features/rs6000/powerpc-603.c: Re-generated. * features/rs6000/powerpc-604.c: Re-generated. * features/rs6000/powerpc-64.c: Re-generated. * features/rs6000/powerpc-64l.c: Re-generated. * features/rs6000/powerpc-7400.c: Re-generated. * features/rs6000/powerpc-750.c: Re-generated. * features/rs6000/powerpc-860.c: Re-generated. * features/rs6000/powerpc-altivec32.c: Re-generated. * features/rs6000/powerpc-altivec32l.c: Re-generated. * features/rs6000/powerpc-altivec64.c: Re-generated. * features/rs6000/powerpc-altivec64l.c: Re-generated. * features/rs6000/powerpc-cell32l.c: Re-generated. * features/rs6000/powerpc-cell64l.c: Re-generated. * features/rs6000/powerpc-e500.c: Re-generated. * features/rs6000/powerpc-e500l.c: Re-generated. * features/rs6000/powerpc-isa205-32l.c: Re-generated. * features/rs6000/powerpc-isa205-64l.c: Re-generated. * features/rs6000/powerpc-isa205-altivec32l.c: Re-generated. * features/rs6000/powerpc-isa205-altivec64l.c: Re-generated. * features/rs6000/powerpc-isa205-vsx32l.c: Re-generated. * features/rs6000/powerpc-isa205-vsx64l.c: Re-generated. * features/rs6000/powerpc-vsx32.c: Re-generated. * features/rs6000/powerpc-vsx32l.c: Re-generated. * features/rs6000/powerpc-vsx64.c: Re-generated. * features/rs6000/powerpc-vsx64l.c: Re-generated. * features/rs6000/rs6000.c: Re-generated. * features/s390-linux32.c: Re-generated. * features/s390-linux32v1.c: Re-generated. * features/s390-linux32v2.c: Re-generated. * features/s390-linux64.c: Re-generated. * features/s390-linux64v1.c: Re-generated. * features/s390-linux64v2.c: Re-generated. * features/s390-te-linux64.c: Re-generated. * features/s390-tevx-linux64.c: Re-generated. * features/s390-vx-linux64.c: Re-generated. * features/s390x-linux64.c: Re-generated. * features/s390x-linux64v1.c: Re-generated. * features/s390x-linux64v2.c: Re-generated. * features/s390x-te-linux64.c: Re-generated. * features/s390x-tevx-linux64.c: Re-generated. * features/s390x-vx-linux64.c: Re-generated. * features/sparc/sparc32-solaris.c: Re-generated. * features/sparc/sparc64-solaris.c: Re-generated. * features/tic6x-c62x.c: Re-generated. * features/tic6x-c62x-linux.c: Re-generated. * features/tic6x-c64x.c: Re-generated. * features/tic6x-c64x-linux.c: Re-generated. * features/tic6x-c64xp.c: Re-generated. * features/tic6x-c64xp-linux.c: Re-generated. --- gdb/ChangeLog | 128 ++++ gdb/features/aarch64.c | 8 +- gdb/features/arc-arcompact.c | 8 +- gdb/features/arc-v2.c | 8 +- gdb/features/arm/arm-with-iwmmxt.c | 8 +- gdb/features/arm/arm-with-m-fpa-layout.c | 4 +- gdb/features/arm/arm-with-m-vfp-d16.c | 4 +- gdb/features/arm/arm-with-m.c | 4 +- gdb/features/arm/arm-with-neon.c | 4 +- gdb/features/arm/arm-with-vfpv2.c | 4 +- gdb/features/arm/arm-with-vfpv3.c | 4 +- gdb/features/i386/amd64-avx-avx512-linux.c | 8 +- gdb/features/i386/amd64-avx-avx512.c | 8 +- gdb/features/i386/amd64-avx-linux.c | 8 +- .../i386/amd64-avx-mpx-avx512-pku-linux.c | 8 +- gdb/features/i386/amd64-avx-mpx-avx512-pku.c | 8 +- gdb/features/i386/amd64-avx-mpx-linux.c | 8 +- gdb/features/i386/amd64-avx-mpx.c | 8 +- gdb/features/i386/amd64-avx.c | 8 +- gdb/features/i386/amd64-linux.c | 8 +- gdb/features/i386/amd64-mpx-linux.c | 8 +- gdb/features/i386/amd64-mpx.c | 8 +- gdb/features/i386/amd64.c | 8 +- gdb/features/i386/i386-avx-avx512-linux.c | 8 +- gdb/features/i386/i386-avx-avx512.c | 8 +- gdb/features/i386/i386-avx-linux.c | 8 +- .../i386/i386-avx-mpx-avx512-pku-linux.c | 8 +- gdb/features/i386/i386-avx-mpx-avx512-pku.c | 8 +- gdb/features/i386/i386-avx-mpx-linux.c | 8 +- gdb/features/i386/i386-avx-mpx.c | 8 +- gdb/features/i386/i386-avx.c | 8 +- gdb/features/i386/i386-linux.c | 8 +- gdb/features/i386/i386-mmx-linux.c | 8 +- gdb/features/i386/i386-mmx.c | 8 +- gdb/features/i386/i386-mpx-linux.c | 8 +- gdb/features/i386/i386-mpx.c | 8 +- gdb/features/i386/i386.c | 8 +- gdb/features/i386/x32-avx-avx512-linux.c | 8 +- gdb/features/i386/x32-avx-avx512.c | 8 +- gdb/features/i386/x32-avx-linux.c | 8 +- gdb/features/i386/x32-avx.c | 8 +- gdb/features/i386/x32-linux.c | 8 +- gdb/features/i386/x32.c | 8 +- gdb/features/mips-dsp-linux.c | 4 +- gdb/features/mips-linux.c | 4 +- gdb/features/mips64-dsp-linux.c | 4 +- gdb/features/mips64-linux.c | 4 +- gdb/features/nds32.c | 4 +- gdb/features/nios2-linux.c | 4 +- gdb/features/nios2.c | 4 +- gdb/features/rs6000/powerpc-32.c | 4 +- gdb/features/rs6000/powerpc-32l.c | 4 +- gdb/features/rs6000/powerpc-64.c | 4 +- gdb/features/rs6000/powerpc-64l.c | 4 +- gdb/features/rs6000/powerpc-7400.c | 4 +- gdb/features/rs6000/powerpc-altivec32.c | 8 +- gdb/features/rs6000/powerpc-altivec32l.c | 8 +- gdb/features/rs6000/powerpc-altivec64.c | 8 +- gdb/features/rs6000/powerpc-altivec64l.c | 8 +- gdb/features/rs6000/powerpc-cell32l.c | 8 +- gdb/features/rs6000/powerpc-cell64l.c | 8 +- gdb/features/rs6000/powerpc-e500.c | 4 +- gdb/features/rs6000/powerpc-e500l.c | 4 +- gdb/features/rs6000/powerpc-isa205-32l.c | 4 +- gdb/features/rs6000/powerpc-isa205-64l.c | 4 +- .../rs6000/powerpc-isa205-altivec32l.c | 8 +- .../rs6000/powerpc-isa205-altivec64l.c | 8 +- gdb/features/rs6000/powerpc-isa205-vsx32l.c | 8 +- gdb/features/rs6000/powerpc-isa205-vsx64l.c | 8 +- gdb/features/rs6000/powerpc-vsx32.c | 8 +- gdb/features/rs6000/powerpc-vsx32l.c | 8 +- gdb/features/rs6000/powerpc-vsx64.c | 8 +- gdb/features/rs6000/powerpc-vsx64l.c | 8 +- gdb/features/rs6000/rs6000.c | 4 +- gdb/features/s390-linux32.c | 4 +- gdb/features/s390-linux32v1.c | 4 +- gdb/features/s390-linux32v2.c | 4 +- gdb/features/s390-linux64.c | 4 +- gdb/features/s390-linux64v1.c | 4 +- gdb/features/s390-linux64v2.c | 4 +- gdb/features/s390-te-linux64.c | 4 +- gdb/features/s390-tevx-linux64.c | 8 +- gdb/features/s390-vx-linux64.c | 8 +- gdb/features/s390x-linux64.c | 4 +- gdb/features/s390x-linux64v1.c | 4 +- gdb/features/s390x-linux64v2.c | 4 +- gdb/features/s390x-te-linux64.c | 4 +- gdb/features/s390x-tevx-linux64.c | 8 +- gdb/features/s390x-vx-linux64.c | 8 +- gdb/features/tic6x-c62x-linux.c | 4 +- gdb/features/tic6x-c62x.c | 4 +- gdb/features/tic6x-c64x-linux.c | 4 +- gdb/features/tic6x-c64x.c | 4 +- gdb/features/tic6x-c64xp-linux.c | 4 +- gdb/features/tic6x-c64xp.c | 4 +- gdb/target-descriptions.c | 602 ++++++++++-------- 96 files changed, 764 insertions(+), 558 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d42ba8e6038..577c598f756 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,131 @@ +2017-07-26 Yao Qi + + * target-descriptions.c (tdesc_element_visitor): New class. + (tdesc_element): New class. + (tdesc_reg): Inherit from tdesc_element. + (tdesc_reg::accept): New function. + (tdesc_type): Inherit from tdesc_element. + (tdesc_type::accept): New function. + (tdesc_feature): Inherit from tdesc_element. + (tdesc_feature::accept): New function. + (target_desc): Inherit from tdesc_element. + (target_desc::target_desc): New. + (target_desc::~target_desc): New. + (target_desc::accept): New. + (allocate_target_description): Use new. + (free_target_description): Use delete. + (print_c_tdesc): New class. + (maint_print_c_tdesc_cmd): Adjust. + + * features/aarch64.c: Re-generated. + * features/arc-arcompact.c: Re-generated. + * features/arc-v2.c: Re-generated. + * features/arm/arm-with-iwmmxt.c: Re-generated. + * features/arm/arm-with-m.c: Re-generated. + * features/arm/arm-with-m-fpa-layout.c: Re-generated. + * features/arm/arm-with-m-vfp-d16.c: Re-generated. + * features/arm/arm-with-neon.c: Re-generated. + * features/arm/arm-with-vfpv2.c: Re-generated. + * features/arm/arm-with-vfpv3.c: Re-generated. + * features/i386/amd64-avx-avx512.c: Re-generated. + * features/i386/amd64-avx-avx512-linux.c: Re-generated. + * features/i386/amd64-avx.c: Re-generated. + * features/i386/amd64-avx-linux.c: Re-generated. + * features/i386/amd64-avx-mpx-avx512-pku.c: Re-generated. + * features/i386/amd64-avx-mpx-avx512-pku-linux.c: Re-generated. + * features/i386/amd64-avx-mpx.c: Re-generated. + * features/i386/amd64-avx-mpx-linux.c: Re-generated. + * features/i386/amd64.c: Re-generated. + * features/i386/amd64-linux.c: Re-generated. + * features/i386/amd64-mpx.c: Re-generated. + * features/i386/amd64-mpx-linux.c: Re-generated. + * features/i386/i386-avx-avx512.c: Re-generated. + * features/i386/i386-avx-avx512-linux.c: Re-generated. + * features/i386/i386-avx.c: Re-generated. + * features/i386/i386-avx-linux.c: Re-generated. + * features/i386/i386-avx-mpx-avx512-pku.c: Re-generated. + * features/i386/i386-avx-mpx-avx512-pku-linux.c: Re-generated. + * features/i386/i386-avx-mpx.c: Re-generated. + * features/i386/i386-avx-mpx-linux.c: Re-generated. + * features/i386/i386.c: Re-generated. + * features/i386/i386-linux.c: Re-generated. + * features/i386/i386-mmx.c: Re-generated. + * features/i386/i386-mmx-linux.c: Re-generated. + * features/i386/i386-mpx.c: Re-generated. + * features/i386/i386-mpx-linux.c: Re-generated. + * features/i386/x32-avx-avx512.c: Re-generated. + * features/i386/x32-avx-avx512-linux.c: Re-generated. + * features/i386/x32-avx.c: Re-generated. + * features/i386/x32-avx-linux.c: Re-generated. + * features/i386/x32.c: Re-generated. + * features/i386/x32-linux.c: Re-generated. + * features/microblaze.c: Re-generated. + * features/microblaze-with-stack-protect.c: Re-generated. + * features/mips64-dsp-linux.c: Re-generated. + * features/mips64-linux.c: Re-generated. + * features/mips-dsp-linux.c: Re-generated. + * features/mips-linux.c: Re-generated. + * features/nds32.c: Re-generated. + * features/nios2.c: Re-generated. + * features/nios2-linux.c: Re-generated. + * features/rs6000/powerpc-32.c: Re-generated. + * features/rs6000/powerpc-32l.c: Re-generated. + * features/rs6000/powerpc-403.c: Re-generated. + * features/rs6000/powerpc-403gc.c : Re-generated. + * features/rs6000/powerpc-405.c: Re-generated. + * features/rs6000/powerpc-505.c: Re-generated. + * features/rs6000/powerpc-601.c: Re-generated. + * features/rs6000/powerpc-602.c: Re-generated. + * features/rs6000/powerpc-603.c: Re-generated. + * features/rs6000/powerpc-604.c: Re-generated. + * features/rs6000/powerpc-64.c: Re-generated. + * features/rs6000/powerpc-64l.c: Re-generated. + * features/rs6000/powerpc-7400.c: Re-generated. + * features/rs6000/powerpc-750.c: Re-generated. + * features/rs6000/powerpc-860.c: Re-generated. + * features/rs6000/powerpc-altivec32.c: Re-generated. + * features/rs6000/powerpc-altivec32l.c: Re-generated. + * features/rs6000/powerpc-altivec64.c: Re-generated. + * features/rs6000/powerpc-altivec64l.c: Re-generated. + * features/rs6000/powerpc-cell32l.c: Re-generated. + * features/rs6000/powerpc-cell64l.c: Re-generated. + * features/rs6000/powerpc-e500.c: Re-generated. + * features/rs6000/powerpc-e500l.c: Re-generated. + * features/rs6000/powerpc-isa205-32l.c: Re-generated. + * features/rs6000/powerpc-isa205-64l.c: Re-generated. + * features/rs6000/powerpc-isa205-altivec32l.c: Re-generated. + * features/rs6000/powerpc-isa205-altivec64l.c: Re-generated. + * features/rs6000/powerpc-isa205-vsx32l.c: Re-generated. + * features/rs6000/powerpc-isa205-vsx64l.c: Re-generated. + * features/rs6000/powerpc-vsx32.c: Re-generated. + * features/rs6000/powerpc-vsx32l.c: Re-generated. + * features/rs6000/powerpc-vsx64.c: Re-generated. + * features/rs6000/powerpc-vsx64l.c: Re-generated. + * features/rs6000/rs6000.c: Re-generated. + * features/s390-linux32.c: Re-generated. + * features/s390-linux32v1.c: Re-generated. + * features/s390-linux32v2.c: Re-generated. + * features/s390-linux64.c: Re-generated. + * features/s390-linux64v1.c: Re-generated. + * features/s390-linux64v2.c: Re-generated. + * features/s390-te-linux64.c: Re-generated. + * features/s390-tevx-linux64.c: Re-generated. + * features/s390-vx-linux64.c: Re-generated. + * features/s390x-linux64.c: Re-generated. + * features/s390x-linux64v1.c: Re-generated. + * features/s390x-linux64v2.c: Re-generated. + * features/s390x-te-linux64.c: Re-generated. + * features/s390x-tevx-linux64.c: Re-generated. + * features/s390x-vx-linux64.c: Re-generated. + * features/sparc/sparc32-solaris.c: Re-generated. + * features/sparc/sparc64-solaris.c: Re-generated. + * features/tic6x-c62x.c: Re-generated. + * features/tic6x-c62x-linux.c: Re-generated. + * features/tic6x-c64x.c: Re-generated. + * features/tic6x-c64x-linux.c: Re-generated. + * features/tic6x-c64xp.c: Re-generated. + * features/tic6x-c64xp-linux.c: Re-generated. + 2017-07-26 Yao Qi * i386-linux-tdep.c (i386_linux_read_description): New function. diff --git a/gdb/features/aarch64.c b/gdb/features/aarch64.c index e9eaed8bf4c..7411cacd4b8 100644 --- a/gdb/features/aarch64.c +++ b/gdb/features/aarch64.c @@ -10,13 +10,13 @@ static void initialize_tdesc_aarch64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("aarch64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "cpsr_flags", 4); tdesc_add_flag (type, 0, "SP"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/arc-arcompact.c b/gdb/features/arc-arcompact.c index a527cc2d9ff..ea84a40d197 100644 --- a/gdb/features/arc-arcompact.c +++ b/gdb/features/arc-arcompact.c @@ -10,12 +10,10 @@ static void initialize_tdesc_arc_arcompact (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("ARC700")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.arcompact"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); @@ -53,6 +51,8 @@ initialize_tdesc_arc_arcompact (void) tdesc_create_reg (feature, "pcl", 33, 1, "", 32, "code_ptr"); feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "status32_type", 4); tdesc_add_flag (type, 0, "H"); tdesc_add_bitfield (type, "E", 1, 2); diff --git a/gdb/features/arc-v2.c b/gdb/features/arc-v2.c index b2bdfb5119a..1eefc246876 100644 --- a/gdb/features/arc-v2.c +++ b/gdb/features/arc-v2.c @@ -10,12 +10,10 @@ static void initialize_tdesc_arc_v2 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("ARCv2")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.v2"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); @@ -53,6 +51,8 @@ initialize_tdesc_arc_v2 (void) tdesc_create_reg (feature, "pcl", 33, 1, "", 32, "code_ptr"); feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "status32_type", 4); tdesc_add_flag (type, 0, "H"); tdesc_add_bitfield (type, "E", 1, 4); diff --git a/gdb/features/arm/arm-with-iwmmxt.c b/gdb/features/arm/arm-with-iwmmxt.c index 1770e03e1be..5f839a000de 100644 --- a/gdb/features/arm/arm-with-iwmmxt.c +++ b/gdb/features/arm/arm-with-iwmmxt.c @@ -10,12 +10,10 @@ static void initialize_tdesc_arm_with_iwmmxt (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("iwmmxt")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); @@ -36,6 +34,7 @@ initialize_tdesc_arm_with_iwmmxt (void) tdesc_create_reg (feature, "cpsr", 25, 1, NULL, 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.xscale.iwmmxt"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "uint8"); tdesc_create_vector (feature, "iwmmxt_v8u8", field_type, 8); @@ -45,6 +44,7 @@ initialize_tdesc_arm_with_iwmmxt (void) field_type = tdesc_named_type (feature, "uint32"); tdesc_create_vector (feature, "iwmmxt_v2u32", field_type, 2); + struct tdesc_type *type; type = tdesc_create_union (feature, "iwmmxt_vec64i"); field_type = tdesc_named_type (feature, "iwmmxt_v8u8"); tdesc_add_field (type, "u8", field_type); diff --git a/gdb/features/arm/arm-with-m-fpa-layout.c b/gdb/features/arm/arm-with-m-fpa-layout.c index f720614959c..99bebc311c1 100644 --- a/gdb/features/arm/arm-with-m-fpa-layout.c +++ b/gdb/features/arm/arm-with-m-fpa-layout.c @@ -10,10 +10,10 @@ static void initialize_tdesc_arm_with_m_fpa_layout (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("arm")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.m-profile"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); diff --git a/gdb/features/arm/arm-with-m-vfp-d16.c b/gdb/features/arm/arm-with-m-vfp-d16.c index 069baac4db8..ab9167316a7 100644 --- a/gdb/features/arm/arm-with-m-vfp-d16.c +++ b/gdb/features/arm/arm-with-m-vfp-d16.c @@ -10,10 +10,10 @@ static void initialize_tdesc_arm_with_m_vfp_d16 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("arm")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.m-profile"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); diff --git a/gdb/features/arm/arm-with-m.c b/gdb/features/arm/arm-with-m.c index 64d31bb9c6f..619fd72430f 100644 --- a/gdb/features/arm/arm-with-m.c +++ b/gdb/features/arm/arm-with-m.c @@ -10,10 +10,10 @@ static void initialize_tdesc_arm_with_m (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("arm")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.m-profile"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); diff --git a/gdb/features/arm/arm-with-neon.c b/gdb/features/arm/arm-with-neon.c index d365c0fd3ae..682ad758c0d 100644 --- a/gdb/features/arm/arm-with-neon.c +++ b/gdb/features/arm/arm-with-neon.c @@ -10,10 +10,10 @@ static void initialize_tdesc_arm_with_neon (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("arm")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/arm/arm-with-vfpv2.c b/gdb/features/arm/arm-with-vfpv2.c index 0ebbfef6e2a..368256ccef9 100644 --- a/gdb/features/arm/arm-with-vfpv2.c +++ b/gdb/features/arm/arm-with-vfpv2.c @@ -10,10 +10,10 @@ static void initialize_tdesc_arm_with_vfpv2 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("arm")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/arm/arm-with-vfpv3.c b/gdb/features/arm/arm-with-vfpv3.c index e235dfa7626..ade7c95f465 100644 --- a/gdb/features/arm/arm-with-vfpv3.c +++ b/gdb/features/arm/arm-with-vfpv3.c @@ -10,10 +10,10 @@ static void initialize_tdesc_arm_with_vfpv3 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("arm")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/i386/amd64-avx-avx512-linux.c b/gdb/features/i386/amd64-avx-avx512-linux.c index 00fbf3a7914..de58f066a8d 100644 --- a/gdb/features/i386/amd64-avx-avx512-linux.c +++ b/gdb/features/i386/amd64-avx-avx512-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_amd64_avx_avx512_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-avx-avx512.c b/gdb/features/i386/amd64-avx-avx512.c index f1ebde10715..354d826323a 100644 --- a/gdb/features/i386/amd64-avx-avx512.c +++ b/gdb/features/i386/amd64-avx-avx512.c @@ -10,13 +10,13 @@ static void initialize_tdesc_amd64_avx_avx512 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-avx-linux.c b/gdb/features/i386/amd64-avx-linux.c index 1d56dbff8b1..00dfd3c5325 100644 --- a/gdb/features/i386/amd64-avx-linux.c +++ b/gdb/features/i386/amd64-avx-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_amd64_avx_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c b/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c index 4e4ced7714b..7fd016f3905 100644 --- a/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c +++ b/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_amd64_avx_mpx_avx512_pku_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-pku.c b/gdb/features/i386/amd64-avx-mpx-avx512-pku.c index f119e52f5d5..bade64dc7cb 100644 --- a/gdb/features/i386/amd64-avx-mpx-avx512-pku.c +++ b/gdb/features/i386/amd64-avx-mpx-avx512-pku.c @@ -10,13 +10,13 @@ static void initialize_tdesc_amd64_avx_mpx_avx512_pku (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-avx-mpx-linux.c b/gdb/features/i386/amd64-avx-mpx-linux.c index 26c133975dc..5fe11270d00 100644 --- a/gdb/features/i386/amd64-avx-mpx-linux.c +++ b/gdb/features/i386/amd64-avx-mpx-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_amd64_avx_mpx_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-avx-mpx.c b/gdb/features/i386/amd64-avx-mpx.c index 0c5161fe8d5..5dced155381 100644 --- a/gdb/features/i386/amd64-avx-mpx.c +++ b/gdb/features/i386/amd64-avx-mpx.c @@ -10,13 +10,13 @@ static void initialize_tdesc_amd64_avx_mpx (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-avx.c b/gdb/features/i386/amd64-avx.c index 61d3ff56a4f..016689acdcf 100644 --- a/gdb/features/i386/amd64-avx.c +++ b/gdb/features/i386/amd64-avx.c @@ -10,13 +10,13 @@ static void initialize_tdesc_amd64_avx (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-linux.c b/gdb/features/i386/amd64-linux.c index 0e921ba9a16..58c4405033c 100644 --- a/gdb/features/i386/amd64-linux.c +++ b/gdb/features/i386/amd64-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_amd64_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-mpx-linux.c b/gdb/features/i386/amd64-mpx-linux.c index e26a74a7f72..dcf92f96890 100644 --- a/gdb/features/i386/amd64-mpx-linux.c +++ b/gdb/features/i386/amd64-mpx-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_amd64_mpx_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64-mpx.c b/gdb/features/i386/amd64-mpx.c index 026fdb8625f..ed7767d28f4 100644 --- a/gdb/features/i386/amd64-mpx.c +++ b/gdb/features/i386/amd64-mpx.c @@ -10,13 +10,13 @@ static void initialize_tdesc_amd64_mpx (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/amd64.c b/gdb/features/i386/amd64.c index 31ab6ccfba4..4ad79cb99a9 100644 --- a/gdb/features/i386/amd64.c +++ b/gdb/features/i386/amd64.c @@ -10,13 +10,13 @@ static void initialize_tdesc_amd64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-avx-avx512-linux.c b/gdb/features/i386/i386-avx-avx512-linux.c index 81149d570b5..545149da2d8 100644 --- a/gdb/features/i386/i386-avx-avx512-linux.c +++ b/gdb/features/i386/i386-avx-avx512-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_i386_avx_avx512_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-avx-avx512.c b/gdb/features/i386/i386-avx-avx512.c index 1075ca0eea9..585a0ac3c9b 100644 --- a/gdb/features/i386/i386-avx-avx512.c +++ b/gdb/features/i386/i386-avx-avx512.c @@ -10,13 +10,13 @@ static void initialize_tdesc_i386_avx_avx512 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-avx-linux.c b/gdb/features/i386/i386-avx-linux.c index 4a8c6b58b95..3ef087d6d1b 100644 --- a/gdb/features/i386/i386-avx-linux.c +++ b/gdb/features/i386/i386-avx-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_i386_avx_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c b/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c index f90c834037e..e6eebf153de 100644 --- a/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c +++ b/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_i386_avx_mpx_avx512_pku_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-avx-mpx-avx512-pku.c b/gdb/features/i386/i386-avx-mpx-avx512-pku.c index 08d9b4b579d..d7dd3bb8a7a 100644 --- a/gdb/features/i386/i386-avx-mpx-avx512-pku.c +++ b/gdb/features/i386/i386-avx-mpx-avx512-pku.c @@ -10,13 +10,13 @@ static void initialize_tdesc_i386_avx_mpx_avx512_pku (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-avx-mpx-linux.c b/gdb/features/i386/i386-avx-mpx-linux.c index 4b27bfcb05a..f62c4876951 100644 --- a/gdb/features/i386/i386-avx-mpx-linux.c +++ b/gdb/features/i386/i386-avx-mpx-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_i386_avx_mpx_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-avx-mpx.c b/gdb/features/i386/i386-avx-mpx.c index b27b40a3a3e..f479bdaff21 100644 --- a/gdb/features/i386/i386-avx-mpx.c +++ b/gdb/features/i386/i386-avx-mpx.c @@ -10,13 +10,13 @@ static void initialize_tdesc_i386_avx_mpx (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-avx.c b/gdb/features/i386/i386-avx.c index 1cb0f9e92ad..f888335ada7 100644 --- a/gdb/features/i386/i386-avx.c +++ b/gdb/features/i386/i386-avx.c @@ -10,13 +10,13 @@ static void initialize_tdesc_i386_avx (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-linux.c b/gdb/features/i386/i386-linux.c index c7796c3452d..039484295e4 100644 --- a/gdb/features/i386/i386-linux.c +++ b/gdb/features/i386/i386-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_i386_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-mmx-linux.c b/gdb/features/i386/i386-mmx-linux.c index e53b55f5a26..15779725247 100644 --- a/gdb/features/i386/i386-mmx-linux.c +++ b/gdb/features/i386/i386-mmx-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_i386_mmx_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-mmx.c b/gdb/features/i386/i386-mmx.c index 74f67edc2d6..02aee8966eb 100644 --- a/gdb/features/i386/i386-mmx.c +++ b/gdb/features/i386/i386-mmx.c @@ -10,13 +10,13 @@ static void initialize_tdesc_i386_mmx (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-mpx-linux.c b/gdb/features/i386/i386-mpx-linux.c index 43ea192a303..6dea8e03fad 100644 --- a/gdb/features/i386/i386-mpx-linux.c +++ b/gdb/features/i386/i386-mpx-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_i386_mpx_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386-mpx.c b/gdb/features/i386/i386-mpx.c index e832d2e188f..d08441b7de9 100644 --- a/gdb/features/i386/i386-mpx.c +++ b/gdb/features/i386/i386-mpx.c @@ -10,13 +10,13 @@ static void initialize_tdesc_i386_mpx (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/i386.c b/gdb/features/i386/i386.c index ede73fc60e9..eb9a266aed3 100644 --- a/gdb/features/i386/i386.c +++ b/gdb/features/i386/i386.c @@ -10,13 +10,13 @@ static void initialize_tdesc_i386 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/x32-avx-avx512-linux.c b/gdb/features/i386/x32-avx-avx512-linux.c index 0467d87969d..c023a1047bb 100644 --- a/gdb/features/i386/x32-avx-avx512-linux.c +++ b/gdb/features/i386/x32-avx-avx512-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_x32_avx_avx512_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/x32-avx-avx512.c b/gdb/features/i386/x32-avx-avx512.c index a7a2d527386..9630c9910a9 100644 --- a/gdb/features/i386/x32-avx-avx512.c +++ b/gdb/features/i386/x32-avx-avx512.c @@ -10,13 +10,13 @@ static void initialize_tdesc_x32_avx_avx512 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/x32-avx-linux.c b/gdb/features/i386/x32-avx-linux.c index 84068150486..211d1384ee0 100644 --- a/gdb/features/i386/x32-avx-linux.c +++ b/gdb/features/i386/x32-avx-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_x32_avx_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/x32-avx.c b/gdb/features/i386/x32-avx.c index 7f62e8f4add..775e834cef1 100644 --- a/gdb/features/i386/x32-avx.c +++ b/gdb/features/i386/x32-avx.c @@ -10,13 +10,13 @@ static void initialize_tdesc_x32_avx (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/x32-linux.c b/gdb/features/i386/x32-linux.c index ae49549c7f0..05d502b535a 100644 --- a/gdb/features/i386/x32-linux.c +++ b/gdb/features/i386/x32-linux.c @@ -10,15 +10,15 @@ static void initialize_tdesc_x32_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/i386/x32.c b/gdb/features/i386/x32.c index 6005d99d3d7..728b5ce96d3 100644 --- a/gdb/features/i386/x32.c +++ b/gdb/features/i386/x32.c @@ -10,13 +10,13 @@ static void initialize_tdesc_x32 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + struct tdesc_type *field_type; + struct tdesc_type *type; type = tdesc_create_flags (feature, "i386_eflags", 4); tdesc_add_flag (type, 0, "CF"); tdesc_add_flag (type, 1, ""); diff --git a/gdb/features/mips-dsp-linux.c b/gdb/features/mips-dsp-linux.c index 80ceb223a37..26e9c6b01de 100644 --- a/gdb/features/mips-dsp-linux.c +++ b/gdb/features/mips-dsp-linux.c @@ -10,12 +10,12 @@ static void initialize_tdesc_mips_dsp_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("mips")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); diff --git a/gdb/features/mips-linux.c b/gdb/features/mips-linux.c index c990119026b..c9ad3ca7eba 100644 --- a/gdb/features/mips-linux.c +++ b/gdb/features/mips-linux.c @@ -10,12 +10,12 @@ static void initialize_tdesc_mips_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("mips")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); diff --git a/gdb/features/mips64-dsp-linux.c b/gdb/features/mips64-dsp-linux.c index bc090784439..05317b70f4f 100644 --- a/gdb/features/mips64-dsp-linux.c +++ b/gdb/features/mips64-dsp-linux.c @@ -10,10 +10,10 @@ static void initialize_tdesc_mips64_dsp_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("mips")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "int"); diff --git a/gdb/features/mips64-linux.c b/gdb/features/mips64-linux.c index 2ecda9ba3ad..4814152c430 100644 --- a/gdb/features/mips64-linux.c +++ b/gdb/features/mips64-linux.c @@ -10,10 +10,10 @@ static void initialize_tdesc_mips64_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("mips")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "int"); diff --git a/gdb/features/nds32.c b/gdb/features/nds32.c index 21f63f5ac99..89b246b8ce0 100644 --- a/gdb/features/nds32.c +++ b/gdb/features/nds32.c @@ -10,10 +10,10 @@ static void initialize_tdesc_nds32 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("n1h")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.nds32.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); diff --git a/gdb/features/nios2-linux.c b/gdb/features/nios2-linux.c index 3288f79d0b7..03685676b5e 100644 --- a/gdb/features/nios2-linux.c +++ b/gdb/features/nios2-linux.c @@ -10,12 +10,12 @@ static void initialize_tdesc_nios2_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("nios2")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.nios2.cpu"); tdesc_create_reg (feature, "zero", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "at", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/nios2.c b/gdb/features/nios2.c index 0cedc129c26..705f499e65b 100644 --- a/gdb/features/nios2.c +++ b/gdb/features/nios2.c @@ -10,10 +10,10 @@ static void initialize_tdesc_nios2 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("nios2")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.nios2.cpu"); tdesc_create_reg (feature, "zero", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "at", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/rs6000/powerpc-32.c b/gdb/features/rs6000/powerpc-32.c index 5ee5d9cce21..39f5b14bb43 100644 --- a/gdb/features/rs6000/powerpc-32.c +++ b/gdb/features/rs6000/powerpc-32.c @@ -10,10 +10,10 @@ static void initialize_tdesc_powerpc_32 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/rs6000/powerpc-32l.c b/gdb/features/rs6000/powerpc-32l.c index 971fd4b35f3..8089c0434ee 100644 --- a/gdb/features/rs6000/powerpc-32l.c +++ b/gdb/features/rs6000/powerpc-32l.c @@ -10,10 +10,10 @@ static void initialize_tdesc_powerpc_32l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/rs6000/powerpc-64.c b/gdb/features/rs6000/powerpc-64.c index 160d1228825..a9760a37d95 100644 --- a/gdb/features/rs6000/powerpc-64.c +++ b/gdb/features/rs6000/powerpc-64.c @@ -10,10 +10,10 @@ static void initialize_tdesc_powerpc_64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); diff --git a/gdb/features/rs6000/powerpc-64l.c b/gdb/features/rs6000/powerpc-64l.c index 16a766eab7e..408794e13a0 100644 --- a/gdb/features/rs6000/powerpc-64l.c +++ b/gdb/features/rs6000/powerpc-64l.c @@ -10,10 +10,10 @@ static void initialize_tdesc_powerpc_64l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); diff --git a/gdb/features/rs6000/powerpc-7400.c b/gdb/features/rs6000/powerpc-7400.c index 69d20c43027..32b6995fd0e 100644 --- a/gdb/features/rs6000/powerpc-7400.c +++ b/gdb/features/rs6000/powerpc-7400.c @@ -11,8 +11,6 @@ initialize_tdesc_powerpc_7400 (void) { struct target_desc *result = allocate_target_description (); struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); @@ -140,6 +138,7 @@ initialize_tdesc_powerpc_7400 (void) tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -152,6 +151,7 @@ initialize_tdesc_powerpc_7400 (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-altivec32.c b/gdb/features/rs6000/powerpc-altivec32.c index 285e87da0d5..e97132ec750 100644 --- a/gdb/features/rs6000/powerpc-altivec32.c +++ b/gdb/features/rs6000/powerpc-altivec32.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_altivec32 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); @@ -92,6 +90,7 @@ initialize_tdesc_powerpc_altivec32 (void) tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -104,6 +103,7 @@ initialize_tdesc_powerpc_altivec32 (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-altivec32l.c b/gdb/features/rs6000/powerpc-altivec32l.c index 447ed47a458..a9445d96d01 100644 --- a/gdb/features/rs6000/powerpc-altivec32l.c +++ b/gdb/features/rs6000/powerpc-altivec32l.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_altivec32l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); @@ -96,6 +94,7 @@ initialize_tdesc_powerpc_altivec32l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -108,6 +107,7 @@ initialize_tdesc_powerpc_altivec32l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-altivec64.c b/gdb/features/rs6000/powerpc-altivec64.c index 1e9a61d90c3..3b626a94419 100644 --- a/gdb/features/rs6000/powerpc-altivec64.c +++ b/gdb/features/rs6000/powerpc-altivec64.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_altivec64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); @@ -92,6 +90,7 @@ initialize_tdesc_powerpc_altivec64 (void) tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -104,6 +103,7 @@ initialize_tdesc_powerpc_altivec64 (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-altivec64l.c b/gdb/features/rs6000/powerpc-altivec64l.c index 10ecd8a1cf1..cca53537722 100644 --- a/gdb/features/rs6000/powerpc-altivec64l.c +++ b/gdb/features/rs6000/powerpc-altivec64l.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_altivec64l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); @@ -96,6 +94,7 @@ initialize_tdesc_powerpc_altivec64l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -108,6 +107,7 @@ initialize_tdesc_powerpc_altivec64l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-cell32l.c b/gdb/features/rs6000/powerpc-cell32l.c index 7d33dc25b27..c615b8d8d63 100644 --- a/gdb/features/rs6000/powerpc-cell32l.c +++ b/gdb/features/rs6000/powerpc-cell32l.c @@ -10,14 +10,12 @@ static void initialize_tdesc_powerpc_cell32l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); tdesc_add_compatible (result, bfd_scan_arch ("spu:256K")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); @@ -98,6 +96,7 @@ initialize_tdesc_powerpc_cell32l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -110,6 +109,7 @@ initialize_tdesc_powerpc_cell32l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-cell64l.c b/gdb/features/rs6000/powerpc-cell64l.c index 6054c26b07f..5040e5e929e 100644 --- a/gdb/features/rs6000/powerpc-cell64l.c +++ b/gdb/features/rs6000/powerpc-cell64l.c @@ -10,14 +10,12 @@ static void initialize_tdesc_powerpc_cell64l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); tdesc_add_compatible (result, bfd_scan_arch ("spu:256K")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); @@ -98,6 +96,7 @@ initialize_tdesc_powerpc_cell64l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -110,6 +109,7 @@ initialize_tdesc_powerpc_cell64l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-e500.c b/gdb/features/rs6000/powerpc-e500.c index aaca3a71a3d..4466bc79a9b 100644 --- a/gdb/features/rs6000/powerpc-e500.c +++ b/gdb/features/rs6000/powerpc-e500.c @@ -10,10 +10,10 @@ static void initialize_tdesc_powerpc_e500 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:e500")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/rs6000/powerpc-e500l.c b/gdb/features/rs6000/powerpc-e500l.c index de038620bad..61acbf3dd31 100644 --- a/gdb/features/rs6000/powerpc-e500l.c +++ b/gdb/features/rs6000/powerpc-e500l.c @@ -10,10 +10,10 @@ static void initialize_tdesc_powerpc_e500l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:e500")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/rs6000/powerpc-isa205-32l.c b/gdb/features/rs6000/powerpc-isa205-32l.c index 1b5bd6d7a32..de6548fdf7c 100644 --- a/gdb/features/rs6000/powerpc-isa205-32l.c +++ b/gdb/features/rs6000/powerpc-isa205-32l.c @@ -10,10 +10,10 @@ static void initialize_tdesc_powerpc_isa205_32l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/rs6000/powerpc-isa205-64l.c b/gdb/features/rs6000/powerpc-isa205-64l.c index 31bfc87a993..cd3b2c10a6c 100644 --- a/gdb/features/rs6000/powerpc-isa205-64l.c +++ b/gdb/features/rs6000/powerpc-isa205-64l.c @@ -10,10 +10,10 @@ static void initialize_tdesc_powerpc_isa205_64l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); diff --git a/gdb/features/rs6000/powerpc-isa205-altivec32l.c b/gdb/features/rs6000/powerpc-isa205-altivec32l.c index 6c216cec7f6..943d02db469 100644 --- a/gdb/features/rs6000/powerpc-isa205-altivec32l.c +++ b/gdb/features/rs6000/powerpc-isa205-altivec32l.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_isa205_altivec32l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); @@ -96,6 +94,7 @@ initialize_tdesc_powerpc_isa205_altivec32l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -108,6 +107,7 @@ initialize_tdesc_powerpc_isa205_altivec32l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-isa205-altivec64l.c b/gdb/features/rs6000/powerpc-isa205-altivec64l.c index 2c206aa618e..d454bac1b85 100644 --- a/gdb/features/rs6000/powerpc-isa205-altivec64l.c +++ b/gdb/features/rs6000/powerpc-isa205-altivec64l.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_isa205_altivec64l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); @@ -96,6 +94,7 @@ initialize_tdesc_powerpc_isa205_altivec64l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -108,6 +107,7 @@ initialize_tdesc_powerpc_isa205_altivec64l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-isa205-vsx32l.c b/gdb/features/rs6000/powerpc-isa205-vsx32l.c index 4659ce142c8..09fd5cee29d 100644 --- a/gdb/features/rs6000/powerpc-isa205-vsx32l.c +++ b/gdb/features/rs6000/powerpc-isa205-vsx32l.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_isa205_vsx32l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); @@ -96,6 +94,7 @@ initialize_tdesc_powerpc_isa205_vsx32l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -108,6 +107,7 @@ initialize_tdesc_powerpc_isa205_vsx32l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-isa205-vsx64l.c b/gdb/features/rs6000/powerpc-isa205-vsx64l.c index 64b12b99faf..d295ab77260 100644 --- a/gdb/features/rs6000/powerpc-isa205-vsx64l.c +++ b/gdb/features/rs6000/powerpc-isa205-vsx64l.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_isa205_vsx64l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); @@ -96,6 +94,7 @@ initialize_tdesc_powerpc_isa205_vsx64l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -108,6 +107,7 @@ initialize_tdesc_powerpc_isa205_vsx64l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-vsx32.c b/gdb/features/rs6000/powerpc-vsx32.c index ba1fcb6edef..8cf75624680 100644 --- a/gdb/features/rs6000/powerpc-vsx32.c +++ b/gdb/features/rs6000/powerpc-vsx32.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_vsx32 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); @@ -92,6 +90,7 @@ initialize_tdesc_powerpc_vsx32 (void) tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -104,6 +103,7 @@ initialize_tdesc_powerpc_vsx32 (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-vsx32l.c b/gdb/features/rs6000/powerpc-vsx32l.c index 013e3920d72..e8c18815532 100644 --- a/gdb/features/rs6000/powerpc-vsx32l.c +++ b/gdb/features/rs6000/powerpc-vsx32l.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_vsx32l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32"); @@ -96,6 +94,7 @@ initialize_tdesc_powerpc_vsx32l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -108,6 +107,7 @@ initialize_tdesc_powerpc_vsx32l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-vsx64.c b/gdb/features/rs6000/powerpc-vsx64.c index ca0232386b8..30953c539c1 100644 --- a/gdb/features/rs6000/powerpc-vsx64.c +++ b/gdb/features/rs6000/powerpc-vsx64.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_vsx64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); @@ -92,6 +90,7 @@ initialize_tdesc_powerpc_vsx64 (void) tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -104,6 +103,7 @@ initialize_tdesc_powerpc_vsx64 (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/powerpc-vsx64l.c b/gdb/features/rs6000/powerpc-vsx64l.c index 31bb224a4f2..5f126505476 100644 --- a/gdb/features/rs6000/powerpc-vsx64l.c +++ b/gdb/features/rs6000/powerpc-vsx64l.c @@ -10,12 +10,10 @@ static void initialize_tdesc_powerpc_vsx64l (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); @@ -96,6 +94,7 @@ initialize_tdesc_powerpc_vsx64l (void) tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int"); feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -108,6 +107,7 @@ initialize_tdesc_powerpc_vsx64l (void) field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v16i8", field_type, 16); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "uint128"); tdesc_add_field (type, "uint128", field_type); diff --git a/gdb/features/rs6000/rs6000.c b/gdb/features/rs6000/rs6000.c index d4e93a5c28a..709b5da405d 100644 --- a/gdb/features/rs6000/rs6000.c +++ b/gdb/features/rs6000/rs6000.c @@ -10,10 +10,10 @@ static void initialize_tdesc_rs6000 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("rs6000:6000")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.power.core"); tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); diff --git a/gdb/features/s390-linux32.c b/gdb/features/s390-linux32.c index 6d1309469db..01c136c933e 100644 --- a/gdb/features/s390-linux32.c +++ b/gdb/features/s390-linux32.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390_linux32 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); diff --git a/gdb/features/s390-linux32v1.c b/gdb/features/s390-linux32v1.c index f773fc1a101..65a4a504d33 100644 --- a/gdb/features/s390-linux32v1.c +++ b/gdb/features/s390-linux32v1.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390_linux32v1 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); diff --git a/gdb/features/s390-linux32v2.c b/gdb/features/s390-linux32v2.c index 23177525b0f..b5d25ec75bf 100644 --- a/gdb/features/s390-linux32v2.c +++ b/gdb/features/s390-linux32v2.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390_linux32v2 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); diff --git a/gdb/features/s390-linux64.c b/gdb/features/s390-linux64.c index 3c7145bcb7b..531d3a1ca82 100644 --- a/gdb/features/s390-linux64.c +++ b/gdb/features/s390-linux64.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390_linux64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); diff --git a/gdb/features/s390-linux64v1.c b/gdb/features/s390-linux64v1.c index 72bd8945f84..d75deca23fa 100644 --- a/gdb/features/s390-linux64v1.c +++ b/gdb/features/s390-linux64v1.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390_linux64v1 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); diff --git a/gdb/features/s390-linux64v2.c b/gdb/features/s390-linux64v2.c index a1757da2ac7..bd10ee8ffe3 100644 --- a/gdb/features/s390-linux64v2.c +++ b/gdb/features/s390-linux64v2.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390_linux64v2 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); diff --git a/gdb/features/s390-te-linux64.c b/gdb/features/s390-te-linux64.c index 0a3aedf689a..fe2020ac65a 100644 --- a/gdb/features/s390-te-linux64.c +++ b/gdb/features/s390-te-linux64.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390_te_linux64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); diff --git a/gdb/features/s390-tevx-linux64.c b/gdb/features/s390-tevx-linux64.c index 5bc3eecd7c3..d9b18d38507 100644 --- a/gdb/features/s390-tevx-linux64.c +++ b/gdb/features/s390-tevx-linux64.c @@ -10,12 +10,10 @@ static void initialize_tdesc_s390_tevx_linux64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); @@ -117,6 +115,7 @@ initialize_tdesc_s390_tevx_linux64 (void) tdesc_create_reg (feature, "tr15", 89, 1, "tdb", 64, "uint64"); feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -135,6 +134,7 @@ initialize_tdesc_s390_tevx_linux64 (void) field_type = tdesc_named_type (feature, "int64"); tdesc_create_vector (feature, "v2i64", field_type, 2); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "v4f"); tdesc_add_field (type, "v4_float", field_type); diff --git a/gdb/features/s390-vx-linux64.c b/gdb/features/s390-vx-linux64.c index c3ffa167637..b2138dd90a5 100644 --- a/gdb/features/s390-vx-linux64.c +++ b/gdb/features/s390-vx-linux64.c @@ -10,12 +10,10 @@ static void initialize_tdesc_s390_vx_linux64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); @@ -95,6 +93,7 @@ initialize_tdesc_s390_vx_linux64 (void) tdesc_create_reg (feature, "system_call", 69, 1, "system", 32, "uint32"); feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -113,6 +112,7 @@ initialize_tdesc_s390_vx_linux64 (void) field_type = tdesc_named_type (feature, "int64"); tdesc_create_vector (feature, "v2i64", field_type, 2); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "v4f"); tdesc_add_field (type, "v4_float", field_type); diff --git a/gdb/features/s390x-linux64.c b/gdb/features/s390x-linux64.c index 04502c659f6..9d48ea332bd 100644 --- a/gdb/features/s390x-linux64.c +++ b/gdb/features/s390x-linux64.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390x_linux64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64"); diff --git a/gdb/features/s390x-linux64v1.c b/gdb/features/s390x-linux64v1.c index 05bfd53a611..b95f1c4ccc2 100644 --- a/gdb/features/s390x-linux64v1.c +++ b/gdb/features/s390x-linux64v1.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390x_linux64v1 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64"); diff --git a/gdb/features/s390x-linux64v2.c b/gdb/features/s390x-linux64v2.c index 4108cc06bbb..9aab89f458c 100644 --- a/gdb/features/s390x-linux64v2.c +++ b/gdb/features/s390x-linux64v2.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390x_linux64v2 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64"); diff --git a/gdb/features/s390x-te-linux64.c b/gdb/features/s390x-te-linux64.c index f75d9007c62..babd3bdb03d 100644 --- a/gdb/features/s390x-te-linux64.c +++ b/gdb/features/s390x-te-linux64.c @@ -10,10 +10,10 @@ static void initialize_tdesc_s390x_te_linux64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64"); diff --git a/gdb/features/s390x-tevx-linux64.c b/gdb/features/s390x-tevx-linux64.c index 327cd230ef5..02afd3a5c28 100644 --- a/gdb/features/s390x-tevx-linux64.c +++ b/gdb/features/s390x-tevx-linux64.c @@ -10,12 +10,10 @@ static void initialize_tdesc_s390x_tevx_linux64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64"); @@ -101,6 +99,7 @@ initialize_tdesc_s390x_tevx_linux64 (void) tdesc_create_reg (feature, "tr15", 73, 1, "tdb", 64, "uint64"); feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -119,6 +118,7 @@ initialize_tdesc_s390x_tevx_linux64 (void) field_type = tdesc_named_type (feature, "int64"); tdesc_create_vector (feature, "v2i64", field_type, 2); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "v4f"); tdesc_add_field (type, "v4_float", field_type); diff --git a/gdb/features/s390x-vx-linux64.c b/gdb/features/s390x-vx-linux64.c index e66da70adce..120db53a332 100644 --- a/gdb/features/s390x-vx-linux64.c +++ b/gdb/features/s390x-vx-linux64.c @@ -10,12 +10,10 @@ static void initialize_tdesc_s390x_vx_linux64 (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64"); tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64"); @@ -79,6 +77,7 @@ initialize_tdesc_s390x_vx_linux64 (void) tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32"); feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx"); + struct tdesc_type *field_type; field_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", field_type, 4); @@ -97,6 +96,7 @@ initialize_tdesc_s390x_vx_linux64 (void) field_type = tdesc_named_type (feature, "int64"); tdesc_create_vector (feature, "v2i64", field_type, 2); + struct tdesc_type *type; type = tdesc_create_union (feature, "vec128"); field_type = tdesc_named_type (feature, "v4f"); tdesc_add_field (type, "v4_float", field_type); diff --git a/gdb/features/tic6x-c62x-linux.c b/gdb/features/tic6x-c62x-linux.c index 8dd426d85b1..86b905d4e39 100644 --- a/gdb/features/tic6x-c62x-linux.c +++ b/gdb/features/tic6x-c62x-linux.c @@ -10,12 +10,12 @@ static void initialize_tdesc_tic6x_c62x_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("tic6x")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.core"); tdesc_create_reg (feature, "A0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "A1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/tic6x-c62x.c b/gdb/features/tic6x-c62x.c index 2089aafeab0..7dbf6150744 100644 --- a/gdb/features/tic6x-c62x.c +++ b/gdb/features/tic6x-c62x.c @@ -10,10 +10,10 @@ static void initialize_tdesc_tic6x_c62x (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("tic6x")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.core"); tdesc_create_reg (feature, "A0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "A1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/tic6x-c64x-linux.c b/gdb/features/tic6x-c64x-linux.c index 27523580211..b52048f7369 100644 --- a/gdb/features/tic6x-c64x-linux.c +++ b/gdb/features/tic6x-c64x-linux.c @@ -10,12 +10,12 @@ static void initialize_tdesc_tic6x_c64x_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("tic6x")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.core"); tdesc_create_reg (feature, "A0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "A1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/tic6x-c64x.c b/gdb/features/tic6x-c64x.c index 0feda242f80..618f802c19c 100644 --- a/gdb/features/tic6x-c64x.c +++ b/gdb/features/tic6x-c64x.c @@ -10,10 +10,10 @@ static void initialize_tdesc_tic6x_c64x (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("tic6x")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.core"); tdesc_create_reg (feature, "A0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "A1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/tic6x-c64xp-linux.c b/gdb/features/tic6x-c64xp-linux.c index c1bee4ce143..ca8c505d335 100644 --- a/gdb/features/tic6x-c64xp-linux.c +++ b/gdb/features/tic6x-c64xp-linux.c @@ -10,12 +10,12 @@ static void initialize_tdesc_tic6x_c64xp_linux (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("tic6x")); set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.core"); tdesc_create_reg (feature, "A0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "A1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/features/tic6x-c64xp.c b/gdb/features/tic6x-c64xp.c index 160b854ccfa..4ca51257c00 100644 --- a/gdb/features/tic6x-c64xp.c +++ b/gdb/features/tic6x-c64xp.c @@ -10,10 +10,10 @@ static void initialize_tdesc_tic6x_c64xp (void) { struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - set_tdesc_architecture (result, bfd_scan_arch ("tic6x")); + struct tdesc_feature *feature; + feature = tdesc_create_feature (result, "org.gnu.gdb.tic6x.core"); tdesc_create_reg (feature, "A0", 0, 1, NULL, 32, "uint32"); tdesc_create_reg (feature, "A1", 1, 1, NULL, 32, "uint32"); diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 4129486cd1e..46a8ecc238b 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -35,6 +35,25 @@ #include "hashtab.h" #include "inferior.h" +/* The interface to visit different elements of target description. */ + +class tdesc_element_visitor +{ +public: + virtual void visit_pre (const target_desc *e) = 0; + virtual void visit_post (const target_desc *e) = 0; + + virtual void visit (const tdesc_feature *e) = 0; + virtual void visit (const tdesc_type *e) = 0; + virtual void visit (const tdesc_reg *e) = 0; +}; + +class tdesc_element +{ +public: + virtual void accept (tdesc_element_visitor &v) const = 0; +}; + /* Types. */ typedef struct property @@ -46,7 +65,7 @@ DEF_VEC_O(property_s); /* An individual register from a target description. */ -typedef struct tdesc_reg +typedef struct tdesc_reg : tdesc_element { tdesc_reg (struct tdesc_feature *feature, const char *name_, int regnum, int save_restore_, const char *group_, @@ -62,7 +81,7 @@ typedef struct tdesc_reg tdesc_type = tdesc_named_type (feature, type); } - ~tdesc_reg () + virtual ~tdesc_reg () { xfree (name); xfree (type); @@ -106,6 +125,12 @@ typedef struct tdesc_reg /* The target-described type corresponding to TYPE, if found. */ struct tdesc_type *tdesc_type; + + void accept (tdesc_element_visitor &v) const override + { + v.visit (this); + } + } *tdesc_reg_p; DEF_VEC_P(tdesc_reg_p); @@ -151,7 +176,7 @@ enum tdesc_type_kind TDESC_TYPE_ENUM }; -typedef struct tdesc_type +typedef struct tdesc_type : tdesc_element { tdesc_type (const char *name_, enum tdesc_type_kind kind_) : name (xstrdup (name_)), kind (kind_) @@ -159,7 +184,7 @@ typedef struct tdesc_type memset (&u, 0, sizeof (u)); } - ~tdesc_type () + virtual ~tdesc_type () { switch (kind) { @@ -214,19 +239,25 @@ typedef struct tdesc_type int size; } u; } u; + + void accept (tdesc_element_visitor &v) const override + { + v.visit (this); + } + } *tdesc_type_p; DEF_VEC_P(tdesc_type_p); /* A feature from a target description. Each feature is a collection of other elements, e.g. registers and types. */ -typedef struct tdesc_feature +typedef struct tdesc_feature : tdesc_element { tdesc_feature (const char *name_) : name (xstrdup (name_)) {} - ~tdesc_feature () + virtual ~tdesc_feature () { struct tdesc_reg *reg; struct tdesc_type *type; @@ -256,6 +287,27 @@ typedef struct tdesc_feature /* The types associated with this feature. */ VEC(tdesc_type_p) *types = NULL; + + void accept (tdesc_element_visitor &v) const override + { + v.visit (this); + + struct tdesc_type *type; + + for (int ix = 0; + VEC_iterate (tdesc_type_p, types, ix, type); + ix++) + type->accept (v); + + struct tdesc_reg *reg; + + for (int ix = 0; + VEC_iterate (tdesc_reg_p, registers, ix, reg); + ix++) + reg->accept (v); + + } + } *tdesc_feature_p; DEF_VEC_P(tdesc_feature_p); @@ -265,12 +317,12 @@ DEF_VEC_P(arch_p); /* A target description. */ -struct target_desc +struct target_desc : tdesc_element { target_desc () {} - ~target_desc () + virtual ~target_desc () { struct tdesc_feature *feature; struct property *prop; @@ -312,6 +364,20 @@ struct target_desc /* The features associated with this target. */ VEC(tdesc_feature_p) *features = NULL; + + void accept (tdesc_element_visitor &v) const override + { + v.visit_pre (this); + + struct tdesc_feature *feature; + + for (int ix = 0; + VEC_iterate (tdesc_feature_p, features, ix, feature); + ix++) + feature->accept (v); + + v.visit_post (this); + } }; /* Per-architecture data associated with a target description. The @@ -1714,20 +1780,270 @@ unset_tdesc_filename_cmd (char *args, int from_tty) target_find_description (); } +/* Print target description in C. */ + +class print_c_tdesc : public tdesc_element_visitor +{ +public: + print_c_tdesc (std::string &filename_after_features) + : m_filename_after_features (filename_after_features) + { + const char *inp; + char *outp; + const char *filename = lbasename (m_filename_after_features.c_str ()); + + m_function = (char *) xmalloc (strlen (filename) + 1); + for (inp = filename, outp = m_function; *inp != '\0'; inp++) + if (*inp == '.') + break; + else if (*inp == '-') + *outp++ = '_'; + else + *outp++ = *inp; + *outp = '\0'; + + /* Standard boilerplate. */ + printf_unfiltered ("/* THIS FILE IS GENERATED. " + "-*- buffer-read-only: t -*- vi" + ":set ro:\n"); + printf_unfiltered (" Original: %s */\n\n", filename); + } + + ~print_c_tdesc () + { + xfree (m_function); + } + + void visit_pre (const target_desc *e) override + { + printf_unfiltered ("#include \"defs.h\"\n"); + printf_unfiltered ("#include \"osabi.h\"\n"); + printf_unfiltered ("#include \"target-descriptions.h\"\n"); + printf_unfiltered ("\n"); + + printf_unfiltered ("struct target_desc *tdesc_%s;\n", m_function); + printf_unfiltered ("static void\n"); + printf_unfiltered ("initialize_tdesc_%s (void)\n", m_function); + printf_unfiltered ("{\n"); + printf_unfiltered + (" struct target_desc *result = allocate_target_description ();\n"); + + if (tdesc_architecture (e) != NULL) + { + printf_unfiltered + (" set_tdesc_architecture (result, bfd_scan_arch (\"%s\"));\n", + tdesc_architecture (e)->printable_name); + printf_unfiltered ("\n"); + } + if (tdesc_osabi (e) > GDB_OSABI_UNKNOWN + && tdesc_osabi (e) < GDB_OSABI_INVALID) + { + printf_unfiltered + (" set_tdesc_osabi (result, osabi_from_tdesc_string (\"%s\"));\n", + gdbarch_osabi_name (tdesc_osabi (e))); + printf_unfiltered ("\n"); + } + + int ix; + const struct bfd_arch_info *compatible; + struct property *prop; + + for (ix = 0; VEC_iterate (arch_p, e->compatible, ix, compatible); + ix++) + { + printf_unfiltered + (" tdesc_add_compatible (result, bfd_scan_arch (\"%s\"));\n", + compatible->printable_name); + } + + if (ix) + printf_unfiltered ("\n"); + + for (ix = 0; VEC_iterate (property_s, e->properties, ix, prop); + ix++) + { + printf_unfiltered (" set_tdesc_property (result, \"%s\", \"%s\");\n", + prop->key, prop->value); + } + printf_unfiltered (" struct tdesc_feature *feature;\n"); + } + + void visit (const tdesc_feature *e) override + { + printf_unfiltered ("\n feature = tdesc_create_feature (result, \"%s\");\n", + e->name); + } + + void visit_post (const target_desc *e) override + { + printf_unfiltered ("\n tdesc_%s = result;\n", m_function); + printf_unfiltered ("}\n"); + } + + void visit (const tdesc_type *type) override + { + struct tdesc_type_field *f; + + /* Now we do some "filtering" in order to know which variables to + declare. This is needed because otherwise we would declare unused + variables `field_type' and `type'. */ + if (!m_printed_field_type) + { + printf_unfiltered (" struct tdesc_type *field_type;\n"); + m_printed_field_type = true; + } + + if ((type->kind == TDESC_TYPE_UNION + || type->kind == TDESC_TYPE_STRUCT + || type->kind == TDESC_TYPE_FLAGS + || type->kind == TDESC_TYPE_ENUM) + && VEC_length (tdesc_type_field, type->u.u.fields) > 0 + && !m_printed_type) + { + printf_unfiltered (" struct tdesc_type *type;\n"); + m_printed_type = true; + } + + switch (type->kind) + { + case TDESC_TYPE_VECTOR: + printf_unfiltered + (" field_type = tdesc_named_type (feature, \"%s\");\n", + type->u.v.type->name); + printf_unfiltered + (" tdesc_create_vector (feature, \"%s\", field_type, %d);\n", + type->name, type->u.v.count); + break; + case TDESC_TYPE_STRUCT: + case TDESC_TYPE_FLAGS: + if (type->kind == TDESC_TYPE_STRUCT) + { + printf_unfiltered + (" type = tdesc_create_struct (feature, \"%s\");\n", + type->name); + if (type->u.u.size != 0) + printf_unfiltered + (" tdesc_set_struct_size (type, %d);\n", + type->u.u.size); + } + else + { + printf_unfiltered + (" type = tdesc_create_flags (feature, \"%s\", %d);\n", + type->name, type->u.u.size); + } + for (int ix3 = 0; + VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); + ix3++) + { + const char *type_name; + + gdb_assert (f->type != NULL); + type_name = f->type->name; + + /* To minimize changes to generated files, don't emit type + info for fields that have defaulted types. */ + if (f->start != -1) + { + gdb_assert (f->end != -1); + if (f->type->kind == TDESC_TYPE_BOOL) + { + gdb_assert (f->start == f->end); + printf_unfiltered + (" tdesc_add_flag (type, %d, \"%s\");\n", + f->start, f->name); + } + else if ((type->u.u.size == 4 + && f->type->kind == TDESC_TYPE_UINT32) + || (type->u.u.size == 8 + && f->type->kind == TDESC_TYPE_UINT64)) + { + printf_unfiltered + (" tdesc_add_bitfield (type, \"%s\", %d, %d);\n", + f->name, f->start, f->end); + } + else + { + printf_unfiltered + (" field_type = tdesc_named_type (feature," + " \"%s\");\n", + type_name); + printf_unfiltered + (" tdesc_add_typed_bitfield (type, \"%s\"," + " %d, %d, field_type);\n", + f->name, f->start, f->end); + } + } + else /* Not a bitfield. */ + { + gdb_assert (f->end == -1); + gdb_assert (type->kind == TDESC_TYPE_STRUCT); + printf_unfiltered + (" field_type = tdesc_named_type (feature," + " \"%s\");\n", + type_name); + printf_unfiltered + (" tdesc_add_field (type, \"%s\", field_type);\n", + f->name); + } + } + break; + case TDESC_TYPE_UNION: + printf_unfiltered + (" type = tdesc_create_union (feature, \"%s\");\n", + type->name); + for (int ix3 = 0; + VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); + ix3++) + { + printf_unfiltered + (" field_type = tdesc_named_type (feature, \"%s\");\n", + f->type->name); + printf_unfiltered + (" tdesc_add_field (type, \"%s\", field_type);\n", + f->name); + } + break; + case TDESC_TYPE_ENUM: + printf_unfiltered + (" type = tdesc_create_enum (feature, \"%s\", %d);\n", + type->name, type->u.u.size); + for (int ix3 = 0; + VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); + ix3++) + printf_unfiltered + (" tdesc_add_enum_value (type, %d, \"%s\");\n", + f->start, f->name); + break; + default: + error (_("C output is not supported type \"%s\"."), type->name); + } + printf_unfiltered ("\n"); + } + + void visit (const tdesc_reg *reg) override + { + printf_unfiltered (" tdesc_create_reg (feature, \"%s\", %ld, %d, ", + reg->name, reg->target_regnum, reg->save_restore); + if (reg->group) + printf_unfiltered ("\"%s\", ", reg->group); + else + printf_unfiltered ("NULL, "); + printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type); + } + +private: + char *m_function; + std::string m_filename_after_features; + bool m_printed_field_type = false; + bool m_printed_type = false; +}; + static void maint_print_c_tdesc_cmd (char *args, int from_tty) { const struct target_desc *tdesc; - const struct bfd_arch_info *compatible; - const char *filename, *inp; - char *function, *outp; - struct property *prop; - struct tdesc_feature *feature; - struct tdesc_reg *reg; - struct tdesc_type *type; - struct tdesc_type_field *f; - int ix, ix2, ix3; - int printed_field_type = 0; + const char *filename; if (args == NULL) { @@ -1751,253 +2067,15 @@ maint_print_c_tdesc_cmd (char *args, int from_tty) if (filename == NULL) error (_("The current target description did not come from an XML file.")); - filename = lbasename (filename); - function = (char *) alloca (strlen (filename) + 1); - for (inp = filename, outp = function; *inp != '\0'; inp++) - if (*inp == '.') - break; - else if (*inp == '-') - *outp++ = '_'; - else - *outp++ = *inp; - *outp = '\0'; - - /* Standard boilerplate. */ - printf_unfiltered ("/* THIS FILE IS GENERATED. " - "-*- buffer-read-only: t -*- vi" - ":set ro:\n"); - printf_unfiltered (" Original: %s */\n\n", filename); - printf_unfiltered ("#include \"defs.h\"\n"); - printf_unfiltered ("#include \"osabi.h\"\n"); - printf_unfiltered ("#include \"target-descriptions.h\"\n"); - printf_unfiltered ("\n"); - - printf_unfiltered ("struct target_desc *tdesc_%s;\n", function); - printf_unfiltered ("static void\n"); - printf_unfiltered ("initialize_tdesc_%s (void)\n", function); - printf_unfiltered ("{\n"); - printf_unfiltered - (" struct target_desc *result = allocate_target_description ();\n"); - printf_unfiltered (" struct tdesc_feature *feature;\n"); - - /* Now we do some "filtering" in order to know which variables to - declare. This is needed because otherwise we would declare unused - variables `field_type' and `type'. */ - for (ix = 0; - VEC_iterate (tdesc_feature_p, tdesc->features, ix, feature); - ix++) - { - int printed_desc_type = 0; + std::string filename_after_features (filename); + auto loc = filename_after_features.rfind ("/features/"); - for (ix2 = 0; - VEC_iterate (tdesc_type_p, feature->types, ix2, type); - ix2++) - { - if (!printed_field_type) - { - printf_unfiltered (" struct tdesc_type *field_type;\n"); - printed_field_type = 1; - } + if (loc != std::string::npos) + filename_after_features = filename_after_features.substr (loc + 10); - if ((type->kind == TDESC_TYPE_UNION - || type->kind == TDESC_TYPE_STRUCT - || type->kind == TDESC_TYPE_FLAGS - || type->kind == TDESC_TYPE_ENUM) - && VEC_length (tdesc_type_field, type->u.u.fields) > 0) - { - printf_unfiltered (" struct tdesc_type *type;\n"); - printed_desc_type = 1; - break; - } - } - - if (printed_desc_type) - break; - } - - printf_unfiltered ("\n"); - - if (tdesc_architecture (tdesc) != NULL) - { - printf_unfiltered - (" set_tdesc_architecture (result, bfd_scan_arch (\"%s\"));\n", - tdesc_architecture (tdesc)->printable_name); - printf_unfiltered ("\n"); - } - - if (tdesc_osabi (tdesc) > GDB_OSABI_UNKNOWN - && tdesc_osabi (tdesc) < GDB_OSABI_INVALID) - { - printf_unfiltered - (" set_tdesc_osabi (result, osabi_from_tdesc_string (\"%s\"));\n", - gdbarch_osabi_name (tdesc_osabi (tdesc))); - printf_unfiltered ("\n"); - } - - for (ix = 0; VEC_iterate (arch_p, tdesc->compatible, ix, compatible); - ix++) - { - printf_unfiltered - (" tdesc_add_compatible (result, bfd_scan_arch (\"%s\"));\n", - compatible->printable_name); - } - if (ix) - printf_unfiltered ("\n"); - - for (ix = 0; VEC_iterate (property_s, tdesc->properties, ix, prop); - ix++) - { - printf_unfiltered (" set_tdesc_property (result, \"%s\", \"%s\");\n", - prop->key, prop->value); - } - - for (ix = 0; - VEC_iterate (tdesc_feature_p, tdesc->features, ix, feature); - ix++) - { - printf_unfiltered (" \ -feature = tdesc_create_feature (result, \"%s\");\n", - feature->name); - - for (ix2 = 0; - VEC_iterate (tdesc_type_p, feature->types, ix2, type); - ix2++) - { - switch (type->kind) - { - case TDESC_TYPE_VECTOR: - printf_unfiltered - (" field_type = tdesc_named_type (feature, \"%s\");\n", - type->u.v.type->name); - printf_unfiltered - (" tdesc_create_vector (feature, \"%s\", field_type, %d);\n", - type->name, type->u.v.count); - break; - case TDESC_TYPE_STRUCT: - case TDESC_TYPE_FLAGS: - if (type->kind == TDESC_TYPE_STRUCT) - { - printf_unfiltered - (" type = tdesc_create_struct (feature, \"%s\");\n", - type->name); - if (type->u.u.size != 0) - printf_unfiltered - (" tdesc_set_struct_size (type, %d);\n", - type->u.u.size); - } - else - { - printf_unfiltered - (" type = tdesc_create_flags (feature, \"%s\", %d);\n", - type->name, type->u.u.size); - } - for (ix3 = 0; - VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); - ix3++) - { - const char *type_name; - - gdb_assert (f->type != NULL); - type_name = f->type->name; - - /* To minimize changes to generated files, don't emit type - info for fields that have defaulted types. */ - if (f->start != -1) - { - gdb_assert (f->end != -1); - if (f->type->kind == TDESC_TYPE_BOOL) - { - gdb_assert (f->start == f->end); - printf_unfiltered - (" tdesc_add_flag (type, %d, \"%s\");\n", - f->start, f->name); - } - else if ((type->u.u.size == 4 - && f->type->kind == TDESC_TYPE_UINT32) - || (type->u.u.size == 8 - && f->type->kind == TDESC_TYPE_UINT64)) - { - printf_unfiltered - (" tdesc_add_bitfield (type, \"%s\", %d, %d);\n", - f->name, f->start, f->end); - } - else - { - printf_unfiltered - (" field_type = tdesc_named_type (feature," - " \"%s\");\n", - type_name); - printf_unfiltered - (" tdesc_add_typed_bitfield (type, \"%s\"," - " %d, %d, field_type);\n", - f->name, f->start, f->end); - } - } - else /* Not a bitfield. */ - { - gdb_assert (f->end == -1); - gdb_assert (type->kind == TDESC_TYPE_STRUCT); - printf_unfiltered - (" field_type = tdesc_named_type (feature," - " \"%s\");\n", - type_name); - printf_unfiltered - (" tdesc_add_field (type, \"%s\", field_type);\n", - f->name); - } - } - break; - case TDESC_TYPE_UNION: - printf_unfiltered - (" type = tdesc_create_union (feature, \"%s\");\n", - type->name); - for (ix3 = 0; - VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); - ix3++) - { - printf_unfiltered - (" field_type = tdesc_named_type (feature, \"%s\");\n", - f->type->name); - printf_unfiltered - (" tdesc_add_field (type, \"%s\", field_type);\n", - f->name); - } - break; - case TDESC_TYPE_ENUM: - printf_unfiltered - (" type = tdesc_create_enum (feature, \"%s\", %d);\n", - type->name, type->u.u.size); - for (ix3 = 0; - VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); - ix3++) - printf_unfiltered - (" tdesc_add_enum_value (type, %d, \"%s\");\n", - f->start, f->name); - break; - default: - error (_("C output is not supported type \"%s\"."), type->name); - } - printf_unfiltered ("\n"); - } - - for (ix2 = 0; - VEC_iterate (tdesc_reg_p, feature->registers, ix2, reg); - ix2++) - { - printf_unfiltered (" tdesc_create_reg (feature, \"%s\", %ld, %d, ", - reg->name, reg->target_regnum, reg->save_restore); - if (reg->group) - printf_unfiltered ("\"%s\", ", reg->group); - else - printf_unfiltered ("NULL, "); - printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type); - } - - printf_unfiltered ("\n"); - } + print_c_tdesc v (filename_after_features); - printf_unfiltered (" tdesc_%s = result;\n", function); - printf_unfiltered ("}\n"); + tdesc->accept (v); } /* Provide a prototype to silence -Wmissing-prototypes. */ -- 2.30.2