From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2361 invoked by alias); 30 May 2013 12:14:02 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 2310 invoked by uid 89); 30 May 2013 12:14:02 -0000 X-Spam-SWARE-Status: No, score=-8.0 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS,TW_CP,TW_EG,TW_SR autolearn=ham version=3.3.1 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Thu, 30 May 2013 12:14:01 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4UCE0nJ026457 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 30 May 2013 08:14:00 -0400 Received: from brno.lan (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4UCDwAK004943 for ; Thu, 30 May 2013 08:13:59 -0400 Subject: [PATCH 03/22] [GDBserver] Multi-process + multi-arch: GNU/Linux SPARC To: gdb-patches@sourceware.org From: Pedro Alves Date: Thu, 30 May 2013 12:14:00 -0000 Message-ID: <20130530121358.15047.53170.stgit@brno.lan> In-Reply-To: <20130530121335.15047.12654.stgit@brno.lan> References: <20130530121335.15047.12654.stgit@brno.lan> User-Agent: StGit/0.16 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-SW-Source: 2013-05/txt/msg01059.txt.bz2 This adjusts the GNU/Linux SPARC port to new interfaces. Previously tested on sparc64-unknown-linux-gnu (Debian), local gdbserver. 2013-05-30 Pedro Alves * linux-sparc-low.c (tdesc_sparc64): Declare. (sparc_fill_gregset_to_stack, sparc_store_gregset_from_stack): Adjust. (sparc_arch_setup): New function. (sparc_regsets_info, sparc_usrregs_info, regs_info): New globals. (the_low_target): Adjust. (initialize_low_arch): New function. --- gdb/gdbserver/linux-sparc-low.c | 60 +++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/gdb/gdbserver/linux-sparc-low.c b/gdb/gdbserver/linux-sparc-low.c index 32590b2..444d446 100644 --- a/gdb/gdbserver/linux-sparc-low.c +++ b/gdb/gdbserver/linux-sparc-low.c @@ -100,6 +100,7 @@ static const struct regs_range_t fpregs_ranges[] = { /* Defined in auto-generated file reg-sparc64.c. */ void init_registers_sparc64 (void); +extern const struct target_desc *tdesc_sparc64; static int sparc_cannot_store_register (int regno) @@ -119,12 +120,12 @@ sparc_fill_gregset_to_stack (struct regcache *regcache, const void *buf) int i; CORE_ADDR addr = 0; unsigned char tmp_reg_buf[8]; - const int l0_regno = find_regno ("l0"); + const int l0_regno = find_regno (regcache->tdesc, "l0"); const int i7_regno = l0_regno + 15; /* These registers have to be stored in the stack. */ memcpy (&addr, - ((char *) buf) + sparc_regmap[find_regno ("sp")], + ((char *) buf) + sparc_regmap[find_regno (regcache->tdesc, "sp")], sizeof (addr)); addr += BIAS; @@ -171,12 +172,12 @@ sparc_store_gregset_from_stack (struct regcache *regcache, const void *buf) int i; CORE_ADDR addr = 0; unsigned char tmp_reg_buf[8]; - const int l0_regno = find_regno ("l0"); + const int l0_regno = find_regno (regcache->tdesc, "l0"); const int i7_regno = l0_regno + 15; /* These registers have to be obtained from the stack. */ memcpy (&addr, - ((char *) buf) + sparc_regmap[find_regno ("sp")], + ((char *) buf) + sparc_regmap[find_regno (regcache->tdesc, "sp")], sizeof (addr)); addr += BIAS; @@ -269,8 +270,13 @@ sparc_reinsert_addr (void) return lr; } +static void +sparc_arch_setup (void) +{ + current_process ()->tdesc = tdesc_sparc64; +} -struct regset_info target_regsets[] = { +static struct regset_info sparc_regsets[] = { { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), GENERAL_REGS, sparc_fill_gregset, sparc_store_gregset }, @@ -280,12 +286,37 @@ struct regset_info target_regsets[] = { { 0, 0, 0, -1, -1, NULL, NULL } }; +static struct regsets_info sparc_regsets_info = + { + sparc_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct usrregs_info sparc_usrregs_info = + { + sparc_num_regs, + /* No regmap needs to be provided since this impl. doesn't use + USRREGS. */ + NULL + }; + +static struct regs_info regs_info = + { + NULL, /* regset_bitmap */ + &sparc_usrregs_info, + &sparc_regsets_info + }; + +static const struct regs_info * +sparc_regs_info (void) +{ + return ®s_info; +} + struct linux_target_ops the_low_target = { - init_registers_sparc64, - sparc_num_regs, - /* No regmap needs to be provided since this impl. doesn't use USRREGS. */ - NULL, - NULL, + sparc_arch_setup, + sparc_regs_info, sparc_cannot_fetch_register, sparc_cannot_store_register, NULL, /* fetch_register */ @@ -300,3 +331,12 @@ struct linux_target_ops the_low_target = { NULL, NULL, NULL, NULL, NULL, NULL }; + +void +initialize_low_arch (void) +{ + /* Initialize the Linux target descriptions. */ + init_registers_sparc64 (); + + initialize_regsets_info (&sparc_regsets_info); +}