From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 126868 invoked by alias); 27 Jan 2019 23:35:36 -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 126855 invoked by uid 89); 27 Jan 2019 23:35:36 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wr1-f67.google.com Received: from mail-wr1-f67.google.com (HELO mail-wr1-f67.google.com) (209.85.221.67) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 27 Jan 2019 23:35:34 +0000 Received: by mail-wr1-f67.google.com with SMTP id x10so16070950wrs.8 for ; Sun, 27 Jan 2019 15:35:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=xm+qrJAT86MQbyrDNUc54XTnw13wAE7MMYYdqjTCO/I=; b=gWYyJxHaCy7KABl2u5uewSo3e8yP6NiLZkYhohK+RUXRYUvWr0Ud5MeFviTBMk38le PbIx0T0qA94It2a40y5Cw2WBndzI/kY5ZZYaVBsJsGpMMPSeda1FcmrItJCBq3VABYcC eTXZ8FMAYUJoWaPNjDRpY903Y4z6cGkmaSJlybFDxvkldsLhOA/l8Lx8fy86KtG7dX9T 1swWTqLJiPsOJzWnLpy7lWVXAdjvQuSSWd5jjh0Lx5BdMU4pACVStgcBTZRyff775jc6 Gm6Y/2m4BK4w7yLEndEt6oU1FE/7J0rDNEJB6d+OBQDONzK9lASDjEv+mMSPinadKuYB RxRQ== Return-Path: Received: from localhost (host86-148-235-91.range86-148.btcentralplus.com. [86.148.235.91]) by smtp.gmail.com with ESMTPSA id r22sm5700095wmh.2.2019.01.27.15.35.30 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 27 Jan 2019 15:35:31 -0800 (PST) Date: Sun, 27 Jan 2019 23:35:00 -0000 From: Andrew Burgess To: John Baldwin Cc: gdb-patches@sourceware.org Subject: Re: [PATCH 8/9] Support TLS variables on FreeBSD/riscv. Message-ID: <20190127233530.GD4149@embecosm.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Fortune: IRQ-problems with the Un-Interruptable-Power-Supply X-Editor: GNU Emacs [ http://www.gnu.org/software/emacs ] User-Agent: Mutt/1.9.2 (2017-12-15) X-IsSubscribed: yes X-SW-Source: 2019-01/txt/msg00578.txt.bz2 * John Baldwin [2019-01-22 10:43:01 -0800]: > Derive the pointer to the DTV array from the tp register. > > gdb/ChangeLog: > > * riscv-fbsd-tdep.c (riscv_fbsd_get_thread_local_address): New. > (riscv_fbsd_init_abi): Install gdbarch > "fetch_tls_load_module_address" and "get_thread_local_address" > methods. > --- > gdb/ChangeLog | 7 +++++++ > gdb/riscv-fbsd-tdep.c | 27 +++++++++++++++++++++++++++ > 2 files changed, 34 insertions(+) These look good to me. Thanks, Andrew > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index 06c637c80a..5d228614db 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,10 @@ > +2019-01-22 John Baldwin > + > + * riscv-fbsd-tdep.c (riscv_fbsd_get_thread_local_address): New. > + (riscv_fbsd_init_abi): Install gdbarch > + "fetch_tls_load_module_address" and "get_thread_local_address" > + methods. > + > 2019-01-22 John Baldwin > > * i386-fbsd-tdep.c (i386fbsd_get_thread_local_address): New. > diff --git a/gdb/riscv-fbsd-tdep.c b/gdb/riscv-fbsd-tdep.c > index 97ad28f59a..3125a2285e 100644 > --- a/gdb/riscv-fbsd-tdep.c > +++ b/gdb/riscv-fbsd-tdep.c > @@ -174,6 +174,28 @@ static const struct tramp_frame riscv_fbsd_sigframe = > riscv_fbsd_sigframe_init > }; > > +/* Implement the "get_thread_local_address" gdbarch method. */ > + > +static CORE_ADDR > +riscv_fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, > + CORE_ADDR lm_addr, CORE_ADDR offset) > +{ > + struct regcache *regcache; > + > + regcache = get_thread_arch_regcache (ptid, gdbarch); > + > + target_fetch_registers (regcache, RISCV_TP_REGNUM); > + > + ULONGEST tp; > + if (regcache->cooked_read (RISCV_TP_REGNUM, &tp) != REG_VALID) > + error (_("Unable to fetch %%tp")); > + > + /* %tp points to the end of the TCB which contains two pointers. > + The first pointer in the TCB points to the DTV array. */ > + CORE_ADDR dtv_addr = tp - (gdbarch_ptr_bit (gdbarch) / 8) * 2; > + return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset); > +} > + > /* Implement the 'init_osabi' method of struct gdb_osabi_handler. */ > > static void > @@ -193,6 +215,11 @@ riscv_fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) > > set_gdbarch_iterate_over_regset_sections > (gdbarch, riscv_fbsd_iterate_over_regset_sections); > + > + set_gdbarch_fetch_tls_load_module_address (gdbarch, > + svr4_fetch_objfile_link_map); > + set_gdbarch_get_thread_local_address (gdbarch, > + riscv_fbsd_get_thread_local_address); > } > > void > -- > 2.19.2 >