This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
[Resend it as the message is too large, and mail list doesn't accept it. Compress the patch and put it in attachment.] We define target description features in .xml files, and compose target descriptions of different features in .xml too. They are used to generated .c files and these .c files are included into GDB. Each feature may exist in multiple target descriptions, for example, feature avx exists in 4 different i386-linux target descriptions, so that each .c file generated from these 4 target descriptions has a copy of code for this feature, like this, feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx"); tdesc_create_reg (feature, "ymm0h", 42, 1, NULL, 128, "uint128"); tdesc_create_reg (feature, "ymm1h", 43, 1, NULL, 128, "uint128"); that is the code duplication. This patch moves the code for each feature into a function, and each target description just call the function for that feature. it becomes, #ifndef _ORG_GNU_GDB_I386_AVX #define _ORG_GNU_GDB_I386_AVX static void create_feature_org_gnu_gdb_i386_avx (struct target_desc *result) { struct tdesc_feature *feature; feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx"); tdesc_create_reg (feature, "ymm0h", 42, 1, NULL, 128, "uint128"); static void initialize_tdesc_i386_avx_mpx_avx512_pku_linux (void) { .... create_feature_org_gnu_gdb_i386_avx (result); } So far, everything looks simple, however, two things make it more complicated, 1) different target features have the same feature name, like "org.gnu.gdb.power.core" and "org.gnu.gdb.mips.cpu", so we can't define only one function for "org.gnu.gdb.power.core", 2) the register number of target feature (tdesc_reg::target_regnum) varies in different target descriptions, because the register number is allocated sequentially feature by feature within a target description, so we can't use the c function for a feature generated in one target description for some other target description. In order to address 1), function tdesc_feature_unique_name is added in this patch, which returns the unique name for each feature, even these feature name are the same. To address 2), this patch removes the constant number in generated c functions, instead, use variable "regnum", and get it passed from the c functions. The benefits of doing this are two-folded, - remove the duplication, there is only one copy of code for each feature. With all targets enabled, gdb size is smaller, $ size ./gdb text data bss dec hex filename 23823773 2395640 364776 26584189 195a47d ./gdb with the patch applied, text data bss dec hex filename 23552417 2395648 364808 26312873 19180a9 ./gdb - the composition of features can be more flexible, which will be demonstrated in the following patch, gdb: 2017-05-09 Yao Qi <yao.qi@linaro.org> * target-descriptions.c: Include string and algorithm. (struct tdesc_reg) <target_regnum>: Add comments. (tdesc_reg_equals): Update. (tdesc_remote_register_number): Call abs. (tdesc_feature_unique_name): New function. (maint_print_c_tdesc_cmd): Print function for each feature. * xml-tdesc.c (tdesc_start_reg): Set regnum negative if the value is from "regnum" attribute. (tdesc_start_reg): Call abs. * features/aarch64.c: Regenerated. * features/arc-arcompact.c: Regenerated. * features/arc-v2.c: Regenerated. * features/arm/arm-with-iwmmxt.c: Regenerated. * features/arm/arm-with-m-fpa-layout.c: Regenerated. * features/arm/arm-with-m-vfp-d16.c: Regenerated. * features/arm/arm-with-m.c: Regenerated. * features/arm/arm-with-neon.c: Regenerated. * features/arm/arm-with-vfpv2.c: Regenerated. * features/arm/arm-with-vfpv3.c: Regenerated. * features/i386/amd64-avx-avx512-linux.c: Regenerated. * features/i386/amd64-avx-avx512.c: Regenerated. * features/i386/amd64-avx-linux.c: Regenerated. * features/i386/amd64-avx-mpx-avx512-pku-linux.c: Regenerated. * features/i386/amd64-avx-mpx-avx512-pku.c: Regenerated. * features/i386/amd64-avx-mpx-linux.c: Regenerated. * features/i386/amd64-avx-mpx.c: Regenerated. * features/i386/amd64-avx.c: Regenerated. * features/i386/amd64-linux.c: Regenerated. * features/i386/amd64-mpx-linux.c: Regenerated. * features/i386/amd64-mpx.c: Regenerated. * features/i386/amd64.c: Regenerated. * features/i386/i386-avx-avx512-linux.c: Regenerated. * features/i386/i386-avx-avx512.c: Regenerated. * features/i386/i386-avx-linux.c: Regenerated. * features/i386/i386-avx-mpx-avx512-pku-linux.c: Regenerated. * features/i386/i386-avx-mpx-avx512-pku.c: Regenerated. * features/i386/i386-avx-mpx-linux.c: Regenerated. * features/i386/i386-avx-mpx.c: Regenerated. * features/i386/i386-avx.c: Regenerated. * features/i386/i386-linux.c: Regenerated. * features/i386/i386-mmx-linux.c: Regenerated. * features/i386/i386-mmx.c: Regenerated. * features/i386/i386-mpx-linux.c: Regenerated. * features/i386/i386-mpx.c: Regenerated. * features/i386/i386.c: Regenerated. * features/i386/x32-avx-avx512-linux.c: Regenerated. * features/i386/x32-avx-avx512.c: Regenerated. * features/i386/x32-avx-linux.c: Regenerated. * features/i386/x32-avx.c: Regenerated. * features/i386/x32-linux.c: Regenerated. * features/i386/x32.c: Regenerated. * features/microblaze-with-stack-protect.c: Regenerated. * features/microblaze.c: Regenerated. * features/mips-dsp-linux.c: Regenerated. * features/mips-linux.c: Regenerated. * features/mips64-dsp-linux.c: Regenerated. * features/mips64-linux.c: Regenerated. * features/nds32.c: Regenerated. * features/nios2-linux.c: Regenerated. * features/nios2.c: Regenerated. * features/rs6000/powerpc-32.c: Regenerated. * features/rs6000/powerpc-32l.c: Regenerated. * features/rs6000/powerpc-403.c: Regenerated. * features/rs6000/powerpc-403gc.c: Regenerated. * features/rs6000/powerpc-405.c: Regenerated. * features/rs6000/powerpc-505.c: Regenerated. * features/rs6000/powerpc-601.c: Regenerated. * features/rs6000/powerpc-602.c: Regenerated. * features/rs6000/powerpc-603.c: Regenerated. * features/rs6000/powerpc-604.c: Regenerated. * features/rs6000/powerpc-64.c: Regenerated. * features/rs6000/powerpc-64l.c: Regenerated. * features/rs6000/powerpc-7400.c: Regenerated. * features/rs6000/powerpc-750.c: Regenerated. * features/rs6000/powerpc-860.c: Regenerated. * features/rs6000/powerpc-altivec32.c: Regenerated. * features/rs6000/powerpc-altivec32l.c: Regenerated. * features/rs6000/powerpc-altivec64.c: Regenerated. * features/rs6000/powerpc-altivec64l.c: Regenerated. * features/rs6000/powerpc-cell32l.c: Regenerated. * features/rs6000/powerpc-cell64l.c: Regenerated. * features/rs6000/powerpc-e500.c: Regenerated. * features/rs6000/powerpc-e500l.c: Regenerated. * features/rs6000/powerpc-isa205-32l.c: Regenerated. * features/rs6000/powerpc-isa205-64l.c: Regenerated. * features/rs6000/powerpc-isa205-altivec32l.c: Regenerated. * features/rs6000/powerpc-isa205-altivec64l.c: Regenerated. * features/rs6000/powerpc-isa205-vsx32l.c: Regenerated. * features/rs6000/powerpc-isa205-vsx64l.c: Regenerated. * features/rs6000/powerpc-vsx32.c: Regenerated. * features/rs6000/powerpc-vsx32l.c: Regenerated. * features/rs6000/powerpc-vsx64.c: Regenerated. * features/rs6000/powerpc-vsx64l.c: Regenerated. * features/rs6000/rs6000.c: Regenerated. * features/s390-linux32.c: Regenerated. * features/s390-linux32v1.c: Regenerated. * features/s390-linux32v2.c: Regenerated. * features/s390-linux64.c: Regenerated. * features/s390-linux64v1.c: Regenerated. * features/s390-linux64v2.c: Regenerated. * features/s390-te-linux64.c: Regenerated. * features/s390-tevx-linux64.c: Regenerated. * features/s390-vx-linux64.c: Regenerated. * features/s390x-linux64.c: Regenerated. * features/s390x-linux64v1.c: Regenerated. * features/s390x-linux64v2.c: Regenerated. * features/s390x-te-linux64.c: Regenerated. * features/s390x-tevx-linux64.c: Regenerated. * features/s390x-vx-linux64.c: Regenerated. * features/tic6x-c62x-linux.c: Regenerated. * features/tic6x-c62x.c: Regenerated. * features/tic6x-c64x-linux.c: Regenerated. * features/tic6x-c64x.c: Regenerated. * features/tic6x-c64xp-linux.c: Regenerated. * features/tic6x-c64xp.c: Regenerated. gdb/testsuite: 2017-05-10 Yao Qi <yao.qi@linaro.org> * gdb.xml/maint_print_struct.exp: Update. -- Yao
Attachment:
4.patch.tar.gz
Description: application/gzip
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |