From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18369 invoked by alias); 26 Mar 2006 08:33:20 -0000 Received: (qmail 18341 invoked by uid 22791); 26 Mar 2006 08:33:16 -0000 X-Spam-Check-By: sourceware.org Received: from ip127.bb146.pacific.net.hk (HELO mailhub.stlglobal.com) (202.64.146.127) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 26 Mar 2006 08:33:14 +0000 Received: from localhost ([127.0.0.1]) by mailhub.stlglobal.com with esmtp (Exim 4.50) id 1FNQgI-00075K-QG for gdb-patches@sources.redhat.com; Sun, 26 Mar 2006 16:33:03 +0800 Message-ID: <442651C3.20607@tausq.org> Date: Mon, 27 Mar 2006 00:35:00 -0000 From: Randolph Chung User-Agent: Debian Thunderbird 1.0.2 (X11/20051002) MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: Re: [RFA] hpread.c cleanups References: <4405380F.2090202@tausq.org> <20060301173034.GA6465@nevyn.them.org> In-Reply-To: <20060301173034.GA6465@nevyn.them.org> Content-Type: multipart/mixed; boundary="------------080901070108040204090803" Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-03/txt/msg00301.txt.bz2 This is a multi-part message in MIME format. --------------080901070108040204090803 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1025 > On Wed, Mar 01, 2006 at 01:58:39PM +0800, Randolph Chung wrote: > >>The hppa target used to use a objfile private field to store some shared >>object information on HPUX. Most of that have been cleaned up, but there >>is one more instance in hpread.c. In fact, the current code in cvs will >>cause a crash because the objfile private field is not initialized. The >>patch changes hpread.c to use the solist interface. Tested lightly on >>hppa64-hp-hpux11.11. OK? I've redone this patch to be cleaner and also fixed a bug in my original proposal. The old code actually would return the TLS address from the so_list object that corresponded to a specific objfile, whereas my last patch made it return the TLS address from the first so_list object in the master_so_list(). This new patch: - removes the dependency on obj_private data - passes the objfile from the symbol reader to the solib interface to look up the corresponding TLS information Tested on hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11. ok? randolph --------------080901070108040204090803 Content-Type: text/x-patch; name="tls.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="tls.diff" Content-length: 4581 2006-03-26 Randolph Chung * hppa-tdep.h (gdbarch_tdep): Make solib_thread_start_addr take an objfile argument instead of a so_list one. (hppa_objfile_private): Remove unusued so_info argument. * hpread.c (hpread_process_one_debug_symbol): Use objfile to call into solib_thread_start_addr method to get TLS address. Cleanup comments. * solib-pa64.c (pa64_solib_thread_start_addr): Take objfile argument; return TLS address from corresponding so_list object. * solib-som.c (som_solib_thread_start_addr): Likewise. Index: hppa-tdep.h =================================================================== RCS file: /cvs/src/src/gdb/hppa-tdep.h,v retrieving revision 1.26 diff -u -p -r1.26 hppa-tdep.h --- hppa-tdep.h 1 Mar 2006 05:43:03 -0000 1.26 +++ hppa-tdep.h 26 Mar 2006 08:22:26 -0000 @@ -110,7 +110,7 @@ struct gdbarch_tdep /* These are solib-dependent methods. They are really HPUX only, but we don't have a HPUX-specific tdep vector at the moment. */ - CORE_ADDR (*solib_thread_start_addr) (struct so_list *so); + CORE_ADDR (*solib_thread_start_addr) (struct objfile *objfile); CORE_ADDR (*solib_get_got_by_pc) (CORE_ADDR addr); CORE_ADDR (*solib_get_solib_by_pc) (CORE_ADDR addr); CORE_ADDR (*solib_get_text_base) (struct objfile *objfile); @@ -211,7 +211,6 @@ struct hppa_unwind_info struct hppa_objfile_private { struct hppa_unwind_info *unwind_info; /* a pointer */ - struct so_list *so_info; /* a pointer */ CORE_ADDR dp; int dummy_call_sequence_reg; Index: hpread.c =================================================================== RCS file: /cvs/src/src/gdb/hpread.c,v retrieving revision 1.58 diff -u -p -r1.58 hpread.c --- hpread.c 17 Dec 2005 22:34:01 -0000 1.58 +++ hpread.c 26 Mar 2006 08:22:27 -0000 @@ -5759,28 +5758,13 @@ hpread_process_one_debug_symbol (union d * This variable is not only thread local but * in a shared library. * - * Alas, the shared lib structures are private - * to "somsolib.c". But C lets us point to one. - */ - struct so_list *so; - struct hppa_objfile_private *priv; - - priv = (struct hppa_objfile_private *) - objfile_data (objfile, hppa_objfile_priv_data); - if (priv == NULL) - error (_("Internal error in reading shared library information.")); - - so = ((struct hppa_objfile_private *) priv)->so_info; - if (so == NULL) - error (_("Internal error in reading shared library information.")); - - /* Thread-locals in shared libraries do NOT have the + * Thread-locals in shared libraries do NOT have the * standard offset ("data_offset"), so we re-calculate * where to look for this variable, using a call-back * to interpret the private shared-library data. */ SYMBOL_VALUE_ADDRESS (sym) = dn_bufp->dsvar.location + - gdbarch_tdep (current_gdbarch)->solib_thread_start_addr (so); + gdbarch_tdep (current_gdbarch)->solib_thread_start_addr (objfile); } } break; Index: solib-pa64.c =================================================================== RCS file: /cvs/src/src/gdb/solib-pa64.c,v retrieving revision 1.5 diff -u -p -r1.5 solib-pa64.c --- solib-pa64.c 17 Dec 2005 22:34:02 -0000 1.5 +++ solib-pa64.c 26 Mar 2006 08:22:27 -0000 @@ -594,9 +595,15 @@ pa64_solib_get_got_by_pc (CORE_ADDR addr /* Get some HPUX-specific data from a shared lib. */ static CORE_ADDR -pa64_solib_thread_start_addr (struct so_list *so) +pa64_solib_thread_start_addr (struct objfile *objfile) { - return so->lm_info->desc.tls_start_addr; + struct so_list *so; + + for (so = master_so_list (); so; so = so->next) + if (so->objfile == objfile) + return so->lm_info->desc.tls_start_addr; + + return 0; } Index: solib-som.c =================================================================== RCS file: /cvs/src/src/gdb/solib-som.c,v retrieving revision 1.9 diff -u -p -r1.9 solib-som.c --- solib-som.c 24 Mar 2006 23:49:56 -0000 1.9 +++ solib-som.c 26 Mar 2006 08:22:27 -0000 @@ -695,9 +698,15 @@ som_free_so (struct so_list *so) } static CORE_ADDR -som_solib_thread_start_addr (struct so_list *so) +som_solib_thread_start_addr (struct objfile *objfile) { - return so->lm_info->tsd_start_addr; + struct so_list *so; + + for (so = master_so_list (); so; so = so->next) + if (so->objfile == objfile) + return so->lm_info->tsd_start_addr; + + return 0; } /* Return the GOT value for the shared library in which ADDR belongs. If --------------080901070108040204090803--