From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1358 invoked by alias); 6 Mar 2002 23:58:58 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 1256 invoked from network); 6 Mar 2002 23:58:57 -0000 Received: from unknown (HELO zwingli.cygnus.com) (208.245.165.35) by sources.redhat.com with SMTP; 6 Mar 2002 23:58:57 -0000 Received: by zwingli.cygnus.com (Postfix, from userid 442) id 56ECE5E9DE; Wed, 6 Mar 2002 18:58:55 -0500 (EST) From: Jim Blandy To: gdb-patches@sources.redhat.com Subject: RFA: don't read coff line number unless we have symbols too Message-Id: <20020306235855.56ECE5E9DE@zwingli.cygnus.com> Date: Wed, 06 Mar 2002 15:58:00 -0000 X-SW-Source: 2002-03/txt/msg00082.txt.bz2 2002-03-06 Jim Blandy * coffread.c (coff_symfile_read): Don't try to read the line number table from disk if the image file doesn't have a symbol table; we'll never actually look at the info anyway, and Windows ships DLL's with bogus file offsets for the line number data. Index: gdb/coffread.c =================================================================== RCS file: /cvs/cvsfiles/devo/gdb/coffread.c,v retrieving revision 1.182 diff -c -r1.182 coffread.c *** gdb/coffread.c 2001/09/25 02:35:52 1.182 --- gdb/coffread.c 2002/03/06 23:12:00 *************** *** 622,637 **** /* End of warning */ ! /* Read the line number table, all at once. */ ! info->min_lineno_offset = 0; ! info->max_lineno_offset = 0; ! bfd_map_over_sections (abfd, find_linenos, (PTR) info); ! make_cleanup (free_linetab_cleanup, 0 /*ignore*/); ! val = init_lineno (abfd, info->min_lineno_offset, ! info->max_lineno_offset - info->min_lineno_offset); ! if (val < 0) ! error ("\"%s\": error reading line numbers\n", name); /* Now read the string table, all at once. */ --- 622,654 ---- /* End of warning */ ! /* Only read line number information if we have symbols. ! On Windows NT, some of the system's DLL's have sections with ! PointerToLinenumbers fields that are non-zero, but point at ! random places within the image file. (In the case I found, ! KERNEL32.DLL's .text section has a line number info pointer that ! points into the middle of the string `lib\\i386\kernel32.dll'.) ! ! However, these DLL's also have no symbols. The line number ! tables are meaningless without symbols. And in fact, GDB never ! uses the line number information unless there are symbols. So we ! can avoid spurious error messages (and maybe run a little ! faster!) by not even reading the line number table unless we have ! symbols. */ ! if (num_symbols > 0) ! { ! /* Read the line number table, all at once. */ ! info->min_lineno_offset = 0; ! info->max_lineno_offset = 0; ! bfd_map_over_sections (abfd, find_linenos, (PTR) info); ! ! make_cleanup (free_linetab_cleanup, 0 /*ignore*/); ! val = init_lineno (abfd, info->min_lineno_offset, ! info->max_lineno_offset - info->min_lineno_offset); ! if (val < 0) ! error ("\"%s\": error reading line numbers\n", name); ! } /* Now read the string table, all at once. */