From patchwork Wed Oct 25 08:29:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 23800 Received: (qmail 42364 invoked by alias); 25 Oct 2017 08:29:49 -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 42247 invoked by uid 89); 25 Oct 2017 08:29:47 -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, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-db5eur01on0072.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.72) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 25 Oct 2017 08:29:45 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com (10.160.211.19) by AM3PR08MB0103.eurprd08.prod.outlook.com (10.160.211.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.156.4; Wed, 25 Oct 2017 08:29:41 +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.0156.007; Wed, 25 Oct 2017 08:29:41 +0000 From: Alan Hayward To: "gdb-patches@sourceware.org" CC: nd Subject: [PATCH 2/4] gdbserver use aarch64_create_target_description Date: Wed, 25 Oct 2017 08:29:41 +0000 Message-ID: <48281E67-64B6-4558-9790-CB4189187124@arm.com> authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM3PR08MB0103; 6:iNmlpYeugD1j9ec+x1ZKX6yL23Lr7XbDJ9EJW/ml5ZcfUjpvmmhSMlb+mNyV//WjGOS0FCT3Dsd8LBSgrhzQGIjwqSfeXYrHRAC+VM0cW24aqPOLQlOg0Z33YndDEdgGOoiR1OXVlUQQgIXEFoIyyFKmx8ZGUCaOLPq9GbigulX5oXteBMXWeOI/i16S5W54ogXBXQwu/48N+Cnw82oM7we1VK7f9O/IPtpCSgOIKJczg+fq2OJUPjdSmpIvY3ZtamsmzBqF6IIG1WckzBp+ottgxJEHsFXjGFkxnNfoTV54qT+jaGbntwshSc1fRUMQ99LAptLN9S2fFar82T6hWQ==; 5:GQFONbCHf7GL9iN1aotmfg94gSP1xBgXTf0YVLem4rIcv3XFjTb4jicom4Wka7m9b8Df+RJLgN3NCr/fm7XcFmNEL+/+eZ6q+zpB10l8BxJ66d0ktMkab9q2Cd+yK3AJopoF+TpBqBYrE5Bp5fQEzw==; 24:sTeYWk+3Qk4P0Qm2zW+dgSkFfgkKAflwXetmjapLNQLAyCGnRvZJRPi9ymGrCWWpL2oz67mRvoJW9jZNi6zrmttWxy/+TtDMzvV47xY53GE=; 7:tgDjVXBh5LjzZKIAMwoMBwQwLtHmSsb9IxAKzfhuyRpl4EkBMqDXPAzbHlhGnf7bhhHXDHoPOoEbeId53rhZtTzUYeNZwDkEzWXwFi4hAa8nLEC4z2/oHq3dmo4SVRp28dpFvvYyqGHOdb5SQDgqU++wLPCfXtir+wW5YRKozQpyiNTlkCr5mgk86594kESlNcAg5HTSuq09pCSeZGeazJZjfQIvvXYcnueCa5GOc4s= x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: e53db2df-724c-4b96-1254-08d51b8289ff x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(4534020)(4602075)(4627075)(201703031133081)(201702281549075)(2017052603199); SRVR:AM3PR08MB0103; x-ms-traffictypediagnostic: AM3PR08MB0103: 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)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3231020)(3002001)(6055026)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123558100)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM3PR08MB0103; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM3PR08MB0103; x-forefront-prvs: 0471B73328 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(39860400002)(377424004)(199003)(189002)(3846002)(82746002)(4326008)(101416001)(575784001)(72206003)(4001150100001)(97736004)(33656002)(7736002)(5660300001)(316002)(86362001)(478600001)(189998001)(68736007)(25786009)(3660700001)(54356999)(2906002)(50986999)(2351001)(3280700002)(6436002)(6486002)(99286003)(6306002)(2900100001)(305945005)(15760500003)(6116002)(36756003)(102836003)(14454004)(6512007)(105586002)(2501003)(83716003)(81156014)(53936002)(66066001)(6506006)(5250100002)(8936002)(106356001)(81166006)(8676002)(5640700003)(6916009)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR08MB0103; 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: MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: e53db2df-724c-4b96-1254-08d51b8289ff X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Oct 2017 08:29:41.6436 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR08MB0103 X-IsSubscribed: yes In gdbserver, instead of accessing tdesc_aarch64 directly, obtain it from the function aarch64_linux_read_description. aarch64_linux_read_description then calls down to aarch64_create_target_description which was added in the previous patch. 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 Like the previous patch, this does not change any functionality. Tested on a --enable-targets=all build and aarch64 build with board files unix, native-gdbserver and unittest.exp. Alan. 2017-10-25 Alan Hayward gdbserver/ * Makefile.in: IPA rules for arch/ files. * configure.srv: Add new files. * linux-aarch64-ipa.c (get_ipa_tdesc): Call aarch64_linux_read_description. * linux-aarch64-low.c (aarch64_linux_read_description): Merge with aarch64_arch_setup. (aarch64_arch_setup): Call aarch64_linux_read_description. * linux-aarch64-tdesc.c: New file. * linux-aarch64-tdesc.h: New 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..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. */ +static const struct target_desc *aarch64_tdesc = NULL; + +/* Create the aarch64 target description. */ + +const struct target_desc * +aarch64_linux_read_description () +{ + struct target_desc **tdesc = (struct target_desc **) &aarch64_tdesc; + + if (*tdesc == NULL) + { + *tdesc = aarch64_create_target_description (); + } + + return *tdesc; +}