From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29356 invoked by alias); 15 Mar 2007 01:55:06 -0000 Received: (qmail 29125 invoked by uid 22791); 15 Mar 2007 01:55:05 -0000 X-Spam-Check-By: sourceware.org Received: from hq.tensilica.com (HELO mailapp.tensilica.com) (65.205.227.29) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 15 Mar 2007 01:55:00 +0000 Received: from localhost ([127.0.0.1]) by mailapp.tensilica.com with esmtp (Exim 4.34) id 1HRfBC-0001f0-14 for gdb-patches@sources.redhat.com; Wed, 14 Mar 2007 17:54:58 -0800 Received: from mailapp.tensilica.com ([127.0.0.1]) by localhost (mailapp [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 05404-08 for ; Wed, 14 Mar 2007 17:54:57 -0800 (PST) Received: from maxim_fc5.hq.tensilica.com ([192.168.11.68]) by mailapp.tensilica.com with esmtp (Exim 4.34) id 1HRfBB-0001ev-NC for gdb-patches@sources.redhat.com; Wed, 14 Mar 2007 17:54:57 -0800 Message-ID: <45F8A771.2060008@hq.tensilica.com> Date: Thu, 15 Mar 2007 01:55:00 -0000 From: Maxim Grigoriev User-Agent: Thunderbird 1.5.0.9 (X11/20070102) MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: Handling corner case in building symbol table when "debug_line" includes compilation directory Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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: 2007-03/txt/msg00140.txt.bz2 Hello All, Tensilica compiler seems to provide a unique approach in building DWARF line tables. It confuses GDB algorithms being used to build symbol tables. First in DW_TAG_compile_unit entry DW_AT_name is a source file name as it was used in a command line; DW_AT_comp_dir is a full path name to a compilation directory; Then in the statement program prologue, the directory table includes at least one entry, which is again the compilation directory. And, there is a corresponding file table entry referencing to this directory. Assuming that this combination of the names of the directories and files does not contradict DWARF standard, I think GDB has to handle this situation. I suggest the following patch to fix this problem: 2007-03-15 Maxim Grigoriev * buildsym.c (start_subfile): Add handling missing case while building symbol table for a compilation unit. Index: gdb/buildsym.c =================================================================== RCS file: /cvs/src/src/gdb/buildsym.c,v retrieving revision 1.47 diff -u -r1.47 buildsym.c --- gdb/buildsym.c 27 Feb 2007 22:57:42 -0000 1.47 +++ gdb/buildsym.c 15 Mar 2007 01:14:14 -0000 @@ -549,7 +549,18 @@ for (subfile = subfiles; subfile; subfile = subfile->next) { - if (FILENAME_CMP (subfile->name, name) == 0) + char *subfile_name; + if (IS_ABSOLUTE_PATH(name) && !IS_ABSOLUTE_PATH (subfile->name)) + { + subfile_name = concat (dirname, SLASH_STRING, + subfile->name, (char *)NULL); + make_cleanup (xfree, subfile_name); + } + else + { + subfile_name = subfile->name; + } + if (FILENAME_CMP (subfile_name, name) == 0) { current_subfile = subfile; return;