From patchwork Mon Nov 6 10:06:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 24104 Received: (qmail 37256 invoked by alias); 6 Nov 2017 10:06:39 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 37193 invoked by uid 89); 6 Nov 2017 10:06:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LOTSOFHASH, MIME_BASE64_BLANKS, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=5013 X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-ve1eur01on0052.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.52) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 06 Nov 2017 10:06:35 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com (10.160.211.19) by AM3PR08MB0104.eurprd08.prod.outlook.com (10.160.211.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.197.13; Mon, 6 Nov 2017 10:06:27 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com ([fe80::2891:52f2:59:8e54]) by AM3PR08MB0101.eurprd08.prod.outlook.com ([fe80::2891:52f2:59:8e54%16]) with mapi id 15.20.0197.019; Mon, 6 Nov 2017 10:06:27 +0000 From: Alan Hayward To: Yao Qi CC: "gdb-patches@sourceware.org" , nd Subject: Re: [PATCH 2/4] gdbserver use aarch64_create_target_description Date: Mon, 6 Nov 2017 10:06:26 +0000 Message-ID: References: <48281E67-64B6-4558-9790-CB4189187124@arm.com> <86po94ygg5.fsf@gmail.com> <83AC8291-7A68-4FC3-B1B4-9CA45EAA4E4F@arm.com> In-Reply-To: <83AC8291-7A68-4FC3-B1B4-9CA45EAA4E4F@arm.com> authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM3PR08MB0104; 6:DGwq84+qfdk12Uv6jwVQ3N3puIM6SuLnl8Ar3RLuLusQugwZt5GnWY0cMyVVKpnamIpSboWDuEaG6J9iluUIQwD8ugdbwHlo5+YQ9HTOfiX7GBl6sj07lWaJonjT/YQ6aJkbjrppcRem1mJoQMzEcwtZwspORKaVG0/A8GSRgY3cikIS3UcD07mpTNU3mArqmeHWT4tfBluUCVedwVnJXS4Lb0OhwrdybuWlQVFuYeiR4So/PBN5U0RygQ+EYFnaJEr0E/oqGY8HSIs0/VVu4SFefgOBUhIS0fEZFL83fcZ8DOO3yaE9Jrei/wWDhPHA98+ElGCb1fhndKoZViP2tEGqkfugWtoEiBUvh2lNy3k=; 5:DFJnbdF9zf45uUFFgfzRyOqpP+CGcoxwrYoggu9SA9cNUO+ZllGQQPhVuWKcVMxMqhwUg8JJbZAu2M6q7qMYIw+bywYQiY0GA0xjvS0t69/Er3fxPBWro3Ydw3cTrXzy6jbVfp862XvVT2FoAF+jUG3l7KabBHsJVt55NqfO47w=; 24:HE0ai/r2O2mVbRSqOfIC0LJ1bz0XSbtjole+hpJWgXCH1uMttXP8Xcvb07bqJpU2lXGcY7OBjwlCwDShsESRIqVC8hx/woPTC8Q5oL7Nn3w=; 7:F5msogmoCHyoLzW/Y7kspNt73tqqZronE4t09srqS9BOvUKIIyQ0v1AKWNz0oiWtYWUsVFRY16XzNHogci8NjRKYngV0fByr60HrvKn7LjJ2um+6MxnUn4268Xr7SvxGDocrSYccoi73tjIo7tqYIkkfToshRFX4GfAQLbqTcLbBXaNYSSUxuQCRqwEB4tgcES8EgPE/DzyV7RDxmzZ66qI5tVqIO5yie0f3y7HnCv7UJ4+wVZwjTaYFYEN83IsF x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: 1fd9fe47-8ba9-4571-7a1e-08d524fe0b3e x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603199); SRVR:AM3PR08MB0104; x-ms-traffictypediagnostic: AM3PR08MB0104: nodisclaimer: True x-exchange-antispam-report-test: UriScan:(250305191791016)(158342451672863)(180628864354917)(22074186197030); x-microsoft-antispam-prvs: x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(100000703101)(100105400095)(3231021)(93006095)(93001095)(6055026)(6041248)(20161123560025)(20161123555025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM3PR08MB0104; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM3PR08MB0104; x-forefront-prvs: 048396AFA0 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(199003)(189002)(24454002)(4326008)(6512007)(83716003)(25786009)(189998001)(50986999)(76176999)(14454004)(6916009)(2950100002)(229853002)(82746002)(39060400002)(54356999)(6246003)(101416001)(2900100001)(53546010)(68736007)(105586002)(99286004)(6306002)(1411001)(106356001)(5250100002)(53936002)(7736002)(33656002)(305945005)(54906003)(3660700001)(15760500003)(2906002)(478600001)(86362001)(575784001)(36756003)(72206003)(6436002)(66066001)(316002)(81166006)(5660300001)(8936002)(81156014)(8676002)(102836003)(6116002)(3846002)(3280700002)(97736004)(6506006)(6486002)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR08MB0104; H:AM3PR08MB0101.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: <6990CA4C948D5C4F9CF50571B8818B23@eurprd08.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1fd9fe47-8ba9-4571-7a1e-08d524fe0b3e X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Nov 2017 10:06:26.7667 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR08MB0104 X-IsSubscribed: yes > On 31 Oct 2017, at 15:29, Alan Hayward wrote: > > >> On 30 Oct 2017, at 12:21, Yao Qi wrote: >> >> Alan Hayward writes: >> >>> Had to add a new makefile rule to catch the arch/ file, otherwise the >>> make system gets confused between arch64/aarch64.c and features/aarch64.c >>> >> >> I don't understand the reason. We don't compile features/aarch64.c in >> GDBserver. > > Sorry, I meant “aarch64-generated.c”, not "features/aarch64.c" > > In the existing code, configure.srv has the following: > ipa_obj="linux-aarch64-ipa.o aarch64-ipa.o” > > This creates aarch64-ipa.o by compiling aarch64-generated.c using the rule > in Makefile.in: > %-ipa.o: %-generated.c > > With the new code we no longer need aarch64-generated.c in IPA. > > But, we do need to compile arch64/aarch64.c into IPA. > > Using the existing logic, adding it to ipa_obj using the existing rules gives the same > ipa_obj="linux-aarch64-ipa.o aarch64-ipa.o” > Which is wrong because it will just try to compile aarch64-generated.c. > > I could have just changed the order of the search in Makefile.in, but this might break > something else. Instead, I added the new rule for "-arch-ipa.c" > > > Ok with other comments. > >> >>> diff --git a/gdb/gdbserver/linux-aarch64-tdesc.h b/gdb/gdbserver/linux-aarch64-tdesc.h >>> new file mode 100644 >>> index 0000000000000000000000000000000000000000..48314e934e0c1163fce400b368a3717a27239be8 >>> --- /dev/null >>> +++ b/gdb/gdbserver/linux-aarch64-tdesc.h >>> @@ -0,0 +1,20 @@ >>> +/* Low level support for aarch64, shared between gdbserver and IPA. >>> + >>> + Copyright (C) 2016-2017 Free Software Foundation, Inc. >>> + >>> + This file is part of GDB. >>> + >>> + This program is free software; you can redistribute it and/or modify >>> + it under the terms of the GNU General Public License as published by >>> + the Free Software Foundation; either version 3 of the License, or >>> + (at your option) any later version. >>> + >>> + This program is distributed in the hope that it will be useful, >>> + but WITHOUT ANY WARRANTY; without even the implied warranty of >>> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>> + GNU General Public License for more details. >>> + >>> + You should have received a copy of the GNU General Public License >>> + along with this program. If not, see . */ >>> + >>> +const struct target_desc * aarch64_linux_read_description (); >>> diff --git a/gdb/gdbserver/linux-aarch64-tdesc.c b/gdb/gdbserver/linux-aarch64-tdesc.c >>> new file mode 100644 >>> index 0000000000000000000000000000000000000000..4148ed70c4ca973652e860492cd7cc1a249991d8 >>> --- /dev/null >>> +++ b/gdb/gdbserver/linux-aarch64-tdesc.c >>> @@ -0,0 +1,41 @@ >>> +/* GNU/Linux/aarch64 specific target description, for the remote server >>> + for GDB. >>> + Copyright (C) 2017 Free Software Foundation, Inc. >>> + >>> + This file is part of GDB. >>> + >>> + This program is free software; you can redistribute it and/or modify >>> + it under the terms of the GNU General Public License as published by >>> + the Free Software Foundation; either version 3 of the License, or >>> + (at your option) any later version. >>> + >>> + This program is distributed in the hope that it will be useful, >>> + but WITHOUT ANY WARRANTY; without even the implied warranty of >>> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>> + GNU General Public License for more details. >>> + >>> + You should have received a copy of the GNU General Public License >>> + along with this program. If not, see . */ >>> + >>> +#include "server.h" >>> +#include "tdesc.h" >>> +#include "arch/aarch64.h" >>> +#include "linux-aarch32-low.h" >>> + >>> +/* The Aarch64 target descriptor. */ >> >> s/descriptor/description/ >> >>> +static const struct target_desc *aarch64_tdesc = NULL; >>> + >> >> Move it into aarch64_linux_read_description. >> >>> +/* Create the aarch64 target description. */ >>> + >>> +const struct target_desc * >> >> Remove struct. >> >>> +aarch64_linux_read_description () >>> +{ >>> + struct target_desc **tdesc = (struct target_desc **) &aarch64_tdesc; >>> + >>> + if (*tdesc == NULL) >>> + { >>> + *tdesc = aarch64_create_target_description (); >>> + } >> >> "{" and "}" are not needed. >> >>> + >>> + return *tdesc; >>> +} >> >> -- >> Yao (齐尧) > Fixed as suggested above. Also, double checked that if you use "aarch64-ipa.o” instead of "aarch64-arch-ipa.o” it compiles up the wrong file. diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 8e73563b103f720ddd5e77607c3190a2959903f5..7c155c6cd3824432915c8841b8814362f059870c 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -544,6 +544,10 @@ arch/%.o: ../arch/%.c # Rules for objects that go in the in-process agent. +%-arch-ipa.o: ../arch/%.c + $(IPAGENT_COMPILE) $< + $(POSTCOMPILE) + %-ipa.o: %-generated.c $(IPAGENT_COMPILE) $< $(POSTCOMPILE) diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index 515c6dc8b3e57574286149ebdca37da149218a35..08d8e9875a148f931253bed2340498b6d94b9946 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -27,9 +27,11 @@ srv_hostio_err_objs="hostio-errno.o" if $development; then srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o linux-x86-tdesc-selftest.o" srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o" + srv_aarch64_linux_regobj="aarch64.o" else srv_i386_linux_regobj="" srv_amd64_linux_regobj="" + srv_aarch64_linux_regobj="" fi ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-cell32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-cell64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o" @@ -50,13 +52,15 @@ srv_linux_obj="linux-low.o linux-osdata.o linux-procfs.o linux-ptrace.o linux-wa case "${target}" in aarch64*-*-linux*) - srv_regobj="aarch64.o" + srv_regobj="$srv_aarch64_linux_regobj" srv_regobj="${srv_regobj} arm-with-neon.o" srv_tgtobj="linux-aarch64-low.o aarch64-linux-hw-point.o" srv_tgtobj="$srv_tgtobj linux-aarch32-low.o" srv_tgtobj="${srv_tgtobj} arch/arm.o" srv_tgtobj="$srv_tgtobj aarch64-linux.o" srv_tgtobj="$srv_tgtobj arch/aarch64-insn.o" + srv_tgtobj="$srv_tgtobj arch/aarch64.o" + srv_tgtobj="$srv_tgtobj linux-aarch64-tdesc.o" srv_tgtobj="${srv_tgtobj} $srv_linux_obj" srv_xmlfiles="aarch64.xml" srv_xmlfiles="${srv_xmlfiles} aarch64-core.xml" @@ -65,7 +69,9 @@ case "${target}" in srv_xmlfiles="${srv_xmlfiles} arm/arm-with-neon.xml" srv_linux_regsets=yes srv_linux_thread_db=yes - ipa_obj="linux-aarch64-ipa.o aarch64-ipa.o" + ipa_obj="linux-aarch64-ipa.o" + ipa_obj="${ipa_obj} linux-aarch64-tdesc-ipa.o" + ipa_obj="${ipa_obj} aarch64-arch-ipa.o" ;; arm*-*-linux*) srv_regobj="reg-arm.o arm-with-iwmmxt.o" srv_regobj="${srv_regobj} arm-with-vfpv2.o" diff --git a/gdb/gdbserver/linux-aarch64-ipa.c b/gdb/gdbserver/linux-aarch64-ipa.c index ad1059029bb669f4fd6240d8ce8aef126879b6ff..28dc9776a1c8d273e8bc749296a57bc62b8619d5 100644 --- a/gdb/gdbserver/linux-aarch64-ipa.c +++ b/gdb/gdbserver/linux-aarch64-ipa.c @@ -25,10 +25,10 @@ #ifdef HAVE_GETAUXVAL #include #endif +#include "linux-aarch64-tdesc.h" /* Defined in auto-generated file aarch64.c. */ void init_registers_aarch64 (void); -extern const struct target_desc *tdesc_aarch64; /* Each register saved by the jump pad is in a 16 byte cell. */ #define FT_CR_SIZE 16 @@ -155,7 +155,7 @@ get_raw_reg (const unsigned char *raw_regs, int regnum) const struct target_desc * get_ipa_tdesc (int idx) { - return tdesc_aarch64; + return aarch64_linux_read_description (); } /* Allocate buffer for the jump pads. The branch instruction has a reach diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index b00d5c502d2be67daf0e7f48025647f191efef3b..dcce287974cb6afd2f530ce1257dbbf25ed25ddc 100644 --- a/gdb/gdbserver/linux-aarch64-low.c +++ b/gdb/gdbserver/linux-aarch64-low.c @@ -39,10 +39,10 @@ #include "gdb_proc_service.h" #include "arch/aarch64.h" +#include "linux-aarch64-tdesc.h" /* Defined in auto-generated files. */ void init_registers_aarch64 (void); -extern const struct target_desc *tdesc_aarch64; #ifdef HAVE_SYS_REG_H #include @@ -467,11 +467,10 @@ aarch64_linux_new_fork (struct process_info *parent, *child->priv->arch_private = *parent->priv->arch_private; } -/* Return the right target description according to the ELF file of - current thread. */ +/* Implementation of linux_target_ops method "arch_setup". */ -static const struct target_desc * -aarch64_linux_read_description (void) +static void +aarch64_arch_setup (void) { unsigned int machine; int is_elf64; @@ -482,17 +481,9 @@ aarch64_linux_read_description (void) is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); if (is_elf64) - return tdesc_aarch64; + current_process ()->tdesc = aarch64_linux_read_description (); else - return tdesc_arm_with_neon; -} - -/* Implementation of linux_target_ops method "arch_setup". */ - -static void -aarch64_arch_setup (void) -{ - current_process ()->tdesc = aarch64_linux_read_description (); + current_process ()->tdesc = tdesc_arm_with_neon; aarch64_linux_get_debug_reg_capacity (lwpid_of (current_thread)); } diff --git a/gdb/gdbserver/linux-aarch64-tdesc.h b/gdb/gdbserver/linux-aarch64-tdesc.h new file mode 100644 index 0000000000000000000000000000000000000000..48314e934e0c1163fce400b368a3717a27239be8 --- /dev/null +++ b/gdb/gdbserver/linux-aarch64-tdesc.h @@ -0,0 +1,20 @@ +/* Low level support for aarch64, shared between gdbserver and IPA. + + Copyright (C) 2016-2017 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +const struct target_desc * aarch64_linux_read_description (); diff --git a/gdb/gdbserver/linux-aarch64-tdesc.c b/gdb/gdbserver/linux-aarch64-tdesc.c new file mode 100644 index 0000000000000000000000000000000000000000..138b23c2ae07c67c019b7556efebcded73c6fcb2 --- /dev/null +++ b/gdb/gdbserver/linux-aarch64-tdesc.c @@ -0,0 +1,37 @@ +/* GNU/Linux/aarch64 specific target description, for the remote server + for GDB. + Copyright (C) 2017 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "server.h" +#include "tdesc.h" +#include "arch/aarch64.h" +#include "linux-aarch32-low.h" + +/* Create the aarch64 target description. */ + +const struct target_desc * +aarch64_linux_read_description () +{ + static target_desc *aarch64_tdesc = NULL; + target_desc **tdesc = &aarch64_tdesc; + + if (*tdesc == NULL) + *tdesc = aarch64_create_target_description (); + + return *tdesc; +}