From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8942 invoked by alias); 22 Feb 2013 06:06:55 -0000 Received: (qmail 8934 invoked by uid 22791); 22 Feb 2013 06:06:54 -0000 X-SWARE-Spam-Status: No, hits=-3.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_BJ X-Spam-Check-By: sourceware.org Received: from mail-pb0-f52.google.com (HELO mail-pb0-f52.google.com) (209.85.160.52) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 22 Feb 2013 06:06:49 +0000 Received: by mail-pb0-f52.google.com with SMTP id ma3so213603pbc.39 for ; Thu, 21 Feb 2013 22:06:48 -0800 (PST) X-Received: by 10.66.4.136 with SMTP id k8mr2295694pak.22.1361513208900; Thu, 21 Feb 2013 22:06:48 -0800 (PST) Received: from bubble.grove.modra.org ([101.166.26.37]) by mx.google.com with ESMTPS id ax3sm1352593pbd.42.2013.02.21.22.06.45 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 21 Feb 2013 22:06:47 -0800 (PST) Received: by bubble.grove.modra.org (Postfix, from userid 1000) id BE7EAEA19F6; Fri, 22 Feb 2013 16:36:40 +1030 (CST) Date: Fri, 22 Feb 2013 06:06:00 -0000 From: Alan Modra To: Tom Tromey , gdb-patches@sourceware.org Subject: Re: [PATCH 1/2] MIPS: Compressed PLT/stubs support Message-ID: <20130222060640.GL3080@bubble.grove.modra.org> References: <87wqu19y1x.fsf@fleche.redhat.com> <20130222005833.GJ3080@bubble.grove.modra.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130222005833.GJ3080@bubble.grove.modra.org> User-Agent: Mutt/1.5.21 (2010-09-15) 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 X-SW-Source: 2013-02/txt/msg00580.txt.bz2 On Fri, Feb 22, 2013 at 11:28:33AM +1030, Alan Modra wrote: > Hmm, perhaps a cleaner change would be implement make_msymbol_special > for ppc64 and move the udata.p special case out of elf_symtab_read? Like so. * elfread.c (elf_symtab_read): Do not use udata.p here to find symbol size. * ppc64-tdep.c (ppc64_elf_make_msymbol_special): New function. * ppc64-tdep.h (ppc64_elf_make_msymbol_special): Declare. * ppc-linux-tdep.c (ppc_linux_init_abi): Set up to use the above. * ppcfbsd-tdep.c (ppcfbsd_init_abi): Likewise. Index: gdb/elfread.c =================================================================== RCS file: /cvs/src/src/gdb/elfread.c,v retrieving revision 1.145 diff -u -p -r1.145 elfread.c --- gdb/elfread.c 21 Feb 2013 04:35:21 -0000 1.145 +++ gdb/elfread.c 22 Feb 2013 05:42:53 -0000 @@ -556,21 +556,14 @@ elf_symtab_read (struct objfile *objfile if (msym) { - /* Pass symbol size field in via BFD. FIXME!!! */ - elf_symbol_type *elf_sym; - /* NOTE: uweigand-20071112: A synthetic symbol does not have an - ELF-private part. However, in some cases (e.g. synthetic - 'dot' symbols on ppc64) the udata.p entry is set to point back - to the original ELF symbol it was derived from. Get the size - from that symbol. */ + ELF-private part. */ if (type != ST_SYNTHETIC) - elf_sym = (elf_symbol_type *) sym; - else - elf_sym = (elf_symbol_type *) sym->udata.p; - - if (elf_sym) - SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size); + { + /* Pass symbol size field in via BFD. FIXME!!! */ + elf_symbol_type *elf_sym = (elf_symbol_type *) sym; + SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size); + } msym->filename = filesymname; gdbarch_elf_make_msymbol_special (gdbarch, sym, msym); Index: gdb/ppc-linux-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/ppc-linux-tdep.c,v retrieving revision 1.143 diff -u -p -r1.143 ppc-linux-tdep.c --- gdb/ppc-linux-tdep.c 4 Feb 2013 18:40:41 -0000 1.143 +++ gdb/ppc-linux-tdep.c 22 Feb 2013 05:42:53 -0000 @@ -1336,6 +1336,9 @@ ppc_linux_init_abi (struct gdbarch_info set_gdbarch_convert_from_func_ptr_addr (gdbarch, ppc64_convert_from_func_ptr_addr); + set_gdbarch_elf_make_msymbol_special (gdbarch, + ppc64_elf_make_msymbol_special); + /* Shared library handling. */ set_gdbarch_skip_trampoline_code (gdbarch, ppc64_skip_trampoline_code); set_solib_svr4_fetch_link_map_offsets Index: gdb/ppc64-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/ppc64-tdep.c,v retrieving revision 1.1 diff -u -p -r1.1 ppc64-tdep.c --- gdb/ppc64-tdep.c 1 Feb 2013 20:59:08 -0000 1.1 +++ gdb/ppc64-tdep.c 22 Feb 2013 05:42:53 -0000 @@ -22,6 +22,7 @@ #include "gdbcore.h" #include "ppc-tdep.h" #include "ppc64-tdep.h" +#include "elf-bfd.h" /* Macros for matching instructions. Note that, since all the operands are masked off before they're or-ed into the instruction, @@ -361,3 +362,17 @@ ppc64_convert_from_func_ptr_addr (struct return addr; } + +/* A synthetic 'dot' symbols on ppc64 has the udata.p entry pointing + back to the original ELF symbol it was derived from. Get the size + from that symbol. */ + +void +ppc64_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym) +{ + if ((sym->flags & BSF_SYNTHETIC) != 0 && sym->udata.p != NULL) + { + elf_symbol_type *elf_sym = (elf_symbol_type *) sym->udata.p; + SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size); + } +} Index: gdb/ppc64-tdep.h =================================================================== RCS file: /cvs/src/src/gdb/ppc64-tdep.h,v retrieving revision 1.1 diff -u -p -r1.1 ppc64-tdep.h --- gdb/ppc64-tdep.h 1 Feb 2013 20:59:08 -0000 1.1 +++ gdb/ppc64-tdep.h 22 Feb 2013 05:42:53 -0000 @@ -31,4 +31,6 @@ extern CORE_ADDR ppc64_convert_from_func CORE_ADDR addr, struct target_ops *targ); +extern void ppc64_elf_make_msymbol_special (asymbol *, + struct minimal_symbol *); #endif /* PPC64_TDEP_H */ Index: gdb/ppcfbsd-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/ppcfbsd-tdep.c,v retrieving revision 1.1 diff -u -p -r1.1 ppcfbsd-tdep.c --- gdb/ppcfbsd-tdep.c 4 Feb 2013 20:48:53 -0000 1.1 +++ gdb/ppcfbsd-tdep.c 22 Feb 2013 05:42:53 -0000 @@ -325,6 +325,9 @@ ppcfbsd_init_abi (struct gdbarch_info in { set_gdbarch_convert_from_func_ptr_addr (gdbarch, ppc64_convert_from_func_ptr_addr); + set_gdbarch_elf_make_msymbol_special (gdbarch, + ppc64_elf_make_msymbol_special); + set_gdbarch_skip_trampoline_code (gdbarch, ppc64_skip_trampoline_code); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); -- Alan Modra Australia Development Lab, IBM