From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 792 invoked by alias); 13 Jun 2011 18:39:22 -0000 Received: (qmail 782 invoked by uid 22791); 13 Jun 2011 18:39:22 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,TW_BJ,UNPARSEABLE_RELAY X-Spam-Check-By: sourceware.org Received: from nm8-vm3.bullet.mail.ne1.yahoo.com (HELO nm8-vm3.bullet.mail.ne1.yahoo.com) (98.138.91.138) by sourceware.org (qpsmtpd/0.43rc1) with SMTP; Mon, 13 Jun 2011 18:38:56 +0000 Received: from [98.138.90.56] by nm8.bullet.mail.ne1.yahoo.com with NNFMP; 13 Jun 2011 18:38:55 -0000 Received: from [98.138.84.38] by tm9.bullet.mail.ne1.yahoo.com with NNFMP; 13 Jun 2011 18:38:55 -0000 Received: from [127.0.0.1] by smtp106.mail.ne1.yahoo.com with NNFMP; 13 Jun 2011 18:38:55 -0000 X-Yahoo-SMTP: jenXL62swBAWhMTL3wnej93oaS0ClBQOAKs8jbEbx_o- Received: from cgf.cx (cgf@108.49.32.211 with login) by smtp106.mail.ne1.yahoo.com with SMTP; 13 Jun 2011 11:38:55 -0700 PDT Received: from localhost (ednor.casa.cgf.cx [192.168.187.5]) by cgf.cx (Postfix) with ESMTP id 191BC42804E; Mon, 13 Jun 2011 14:38:54 -0400 (EDT) Date: Mon, 13 Jun 2011 18:39:00 -0000 From: Christopher Faylor To: Paul Bolle , gdb-patches@sourceware.org Subject: Re: [PATCH] win32: Lookup symbols in the EA Table by ordinal Message-ID: <20110613183850.GA25400@ednor.casa.cgf.cx> Mail-Followup-To: Paul Bolle , gdb-patches@sourceware.org References: <1307879815.1831.0.camel@t41.thuisdomein> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1307879815.1831.0.camel@t41.thuisdomein> User-Agent: Mutt/1.5.20 (2009-06-14) 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: 2011-06/txt/msg00176.txt.bz2 On Sun, Jun 12, 2011 at 01:56:51PM +0200, Paul Bolle wrote: >Gdb currently looks up the address of a symbol in the Ordinal/Name >Pointer Table and Export Address Table as if those tables have the same >ordering. That is not always correct. Therefore gdb should look up a >symbol's ordinal in the O/NP table and use that ordinal to look up the >symbol's address in the EA table. > >This should fix http://sourceware.org/bugzilla/show_bug.cgi?id=12716 > >Signed-off-by: Paul Bolle >--- > gdb/ChangeLog | 6 ++++++ > gdb/coff-pe-read.c | 16 +++++++++++++--- > 2 files changed, 19 insertions(+), 3 deletions(-) > >diff --git a/gdb/ChangeLog b/gdb/ChangeLog >index c72fda4..84d6892 100644 >--- a/gdb/ChangeLog >+++ b/gdb/ChangeLog >@@ -1,3 +1,9 @@ >+2011-06-12 Paul Bolle >+ >+ * coff-pe-read.c (read_pe_exported_syms): Lookup symbols in the Export >+ Address Table by ordinal. >+ * coff-pe-read.c (pe_as16): New. >+ This looks ok except for the unneeded reordering of the function. I didn't see any reason to move ordbase or expdata. cgf > 2011-06-10 Jan Kratochvil > > * symtab.c (output_partial_symbol_filename): Exchange the filename and >diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c >index ca87b72..0483158 100644 >--- a/gdb/coff-pe-read.c >+++ b/gdb/coff-pe-read.c >@@ -150,6 +150,14 @@ read_pe_truncate_name (char *dll_name) > } > } > >+static unsigned int >+pe_as16 (void *ptr) >+{ >+ unsigned char *b = ptr; >+ >+ return b[0] + (b[1] << 8); >+} >+ > /* Low-level support functions, direct from the ld module pe-dll.c. */ > static unsigned int > pe_get16 (bfd *abfd, int where) >@@ -309,11 +317,11 @@ read_pe_exported_syms (struct objfile *objfile) > bfd_bread (expdata, (bfd_size_type) export_size, dll); > erva = expdata - export_rva; > >+ ordbase = pe_as32 (expdata + 16); /* unused */ > nexp = pe_as32 (expdata + 24); >+ exp_funcbase = pe_as32 (expdata + 28); > name_rvas = pe_as32 (expdata + 32); > ordinals = pe_as32 (expdata + 36); >- ordbase = pe_as32 (expdata + 16); >- exp_funcbase = pe_as32 (expdata + 28); > > /* Use internal dll name instead of full pathname. */ > dll_name = pe_as32 (expdata + 12) + erva; >@@ -339,8 +347,10 @@ read_pe_exported_syms (struct objfile *objfile) > /* Pointer to the names vector. */ > unsigned long name_rva = pe_as32 (erva + name_rvas + i * 4); > >+ unsigned long ordinal = pe_as16 (erva + ordinals + i * 2); >+ > /* Pointer to the function address vector. */ >- unsigned long func_rva = pe_as32 (erva + exp_funcbase + i * 4); >+ unsigned long func_rva = pe_as32 (erva + exp_funcbase + ordinal * 4); > > /* Find this symbol's section in our own array. */ > int sectix = 0; >-- >1.7.5.4 > > > >