From: Yao Qi <qiyaoltc@gmail.com>
To: gdb-patches@sourceware.org
Subject: [RFC 4/7] Share code in initialize_tdesc_ functions
Date: Thu, 11 May 2017 20:55:00 -0000 [thread overview]
Message-ID: <20170511205504.cnufjdz6ehnml5wv@localhost> (raw)
In-Reply-To: <1494518105-15412-1-git-send-email-yao.qi@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 8436 bytes --]
[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 #2: 4.patch.tar.gz --]
[-- Type: application/gzip, Size: 64621 bytes --]
next prev parent reply other threads:[~2017-05-11 20:55 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-11 15:55 [RFC 0/7] Make GDB builtin target descriptions more flexible Yao Qi
2017-05-11 15:55 ` [RFC 3/7] Adjust the order of 32bit-linux.xml and 32bit-sse.xml in i386/i386-linux.xml Yao Qi
2017-05-11 15:55 ` [RFC 1/7] Move initialize_tdesc_mips* calls from mips-linux-nat.c to mips-linux-tdep.c Yao Qi
2017-05-11 15:55 ` [RFC 2/7] Add unit test to builtin tdesc generated by xml Yao Qi
2017-05-16 12:00 ` Philipp Rudo
2017-05-16 15:46 ` Yao Qi
2017-05-17 9:09 ` Philipp Rudo
2017-05-17 16:06 ` Pedro Alves
2017-05-30 8:00 ` Philipp Rudo
2017-06-01 17:53 ` Philipp Rudo
2017-05-17 15:41 ` Pedro Alves
2017-05-18 9:54 ` Yao Qi
2017-05-18 11:34 ` Pedro Alves
2017-05-19 15:47 ` Yao Qi
2017-05-22 8:51 ` Yao Qi
2017-05-11 15:55 ` [RFC 7/7] Remove builtin tdesc_i386_*_linux Yao Qi
2017-05-16 12:02 ` Philipp Rudo
2017-05-17 15:46 ` Pedro Alves
2017-05-11 15:55 ` [RFC 6/7] Lazily and dynamically create i386-linux target descriptions Yao Qi
2017-05-11 18:14 ` John Baldwin
2017-05-11 21:03 ` Yao Qi
2017-05-17 15:43 ` Pedro Alves
2017-05-18 15:12 ` Yao Qi
2017-05-19 10:15 ` Pedro Alves
2017-05-19 14:27 ` Yao Qi
2017-05-11 15:55 ` [RFC 5/7] Centralize i386 linux " Yao Qi
2017-05-11 16:06 ` [RFC 0/7] Make GDB builtin target descriptions more flexible Eli Zaretskii
2017-05-11 20:56 ` Yao Qi
2017-05-11 20:55 ` Yao Qi [this message]
2017-05-16 12:02 ` [RFC 4/7] Share code in initialize_tdesc_ functions Philipp Rudo
2017-05-17 15:43 ` Pedro Alves
2017-05-18 11:21 ` Yao Qi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170511205504.cnufjdz6ehnml5wv@localhost \
--to=qiyaoltc@gmail.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).