[RFC 4/7] Share code in initialize_tdesc_ functions
Yao Qi
qiyaoltc@gmail.com
Thu May 11 20:55:00 GMT 2017
[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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 4.patch.tar.gz
Type: application/gzip
Size: 64621 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/gdb-patches/attachments/20170511/e3ea9c28/attachment.gz>
More information about the Gdb-patches
mailing list