From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7585 invoked by alias); 26 May 2008 16:25:11 -0000 Received: (qmail 7570 invoked by uid 22791); 26 May 2008 16:25:09 -0000 X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 26 May 2008 16:24:51 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 067722A976C for ; Mon, 26 May 2008 12:24:50 -0400 (EDT) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id L1GIqJgxcKPj for ; Mon, 26 May 2008 12:24:49 -0400 (EDT) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id 926532A975A for ; Mon, 26 May 2008 12:24:49 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id 6864EE7ACD; Mon, 26 May 2008 09:24:47 -0700 (PDT) Date: Tue, 27 May 2008 18:58:00 -0000 From: Joel Brobecker To: gdb-patches@sourceware.org Subject: Re: [patch/mdebug] symbol symtab not set on Tru64 Message-ID: <20080526162447.GL4080@adacore.com> References: <20080526161809.GD15798@adacore.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="dc+cDN39EJAMEtIO" Content-Disposition: inline In-Reply-To: <20080526161809.GD15798@adacore.com> User-Agent: Mutt/1.4.2.2i 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: 2008-05/txt/msg00708.txt.bz2 --dc+cDN39EJAMEtIO Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 1235 [with the patch, this time. Sigh...] Hello, Something I just noticed while working on alpha-tru64. When reading symbols from ECOFF, the produced symbols do not have their symtab field set. I did a little of archeology, and basically the reason for it is because the symbol reader does its own symbol and symtab building, rather than using buildsym. So when the symtab field was added to struct symbol, we forgot to update part of mdebugread.c. It's kind of confusing, because mdebugread also handles stabs-in-coff, in which case buildsym.c is being used. This may be why we missed the parts in mdebugread.c that needed an update. As a result, we end up with SEGVs or failed assertions when trying to access this field because it was NULL. Fixed thusly. 2008-05-26 Joel Brobecker Set the symtab field of symbols read from ECOFF debugging entries. * mdebugread.c (add_symbol): Add new parameter symtab. (parse_symbol): Update calls to add_symbol throughout. Tested on alpha-tru64 with the AdaCore testsuite (I can't seem to get expect to work on Tru64 anymore - it looks like I have an echo issue). I will commit in a week unless there are comments about the patch. -- Joel --dc+cDN39EJAMEtIO Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="mdebugread.c.diff" Content-length: 3709 Modified: mdebugread.c =================================================================== --- mdebugread.c 2008-05-23 22:51:11 +++ mdebugread.c 2008-05-23 23:37:18 @@ -279,7 +279,7 @@ static void add_block (struct block *, struct symtab *); -static void add_symbol (struct symbol *, struct block *); +static void add_symbol (struct symbol *, struct symtab *, struct block *); static int add_line (struct linetable *, int, CORE_ADDR, int); @@ -649,7 +649,7 @@ data: /* Common code for symbols describing data */ SYMBOL_DOMAIN (s) = VAR_DOMAIN; SYMBOL_CLASS (s) = class; - add_symbol (s, b); + add_symbol (s, top_stack->cur_st, b); /* Type could be missing if file is compiled without debugging info. */ if (SC_IS_UNDEF (sh->sc) @@ -694,7 +694,7 @@ } SYMBOL_VALUE (s) = svalue; SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name); - add_symbol (s, top_stack->cur_block); + add_symbol (s, top_stack->cur_st, top_stack->cur_block); break; case stLabel: /* label, goes into current block */ @@ -703,7 +703,7 @@ SYMBOL_CLASS (s) = LOC_LABEL; /* but not misused */ SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value; SYMBOL_TYPE (s) = mdebug_type_int; - add_symbol (s, top_stack->cur_block); + add_symbol (s, top_stack->cur_st, top_stack->cur_block); break; case stProc: /* Procedure, usually goes into global block */ @@ -780,7 +780,7 @@ else if (sh->value == top_stack->procadr) b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK); } - add_symbol (s, b); + add_symbol (s, top_stack->cur_st, b); /* Make a type for the procedure itself */ SYMBOL_TYPE (s) = lookup_function_type (t); @@ -1066,7 +1066,7 @@ SYMBOL_VALUE (enum_sym) = tsym.value; if (SYMBOL_VALUE (enum_sym) < 0) unsigned_enum = 0; - add_symbol (enum_sym, top_stack->cur_block); + add_symbol (enum_sym, top_stack->cur_st, top_stack->cur_block); /* Skip the stMembers that we've handled. */ count++; @@ -1096,7 +1096,7 @@ SYMBOL_CLASS (s) = LOC_TYPEDEF; SYMBOL_VALUE (s) = 0; SYMBOL_TYPE (s) = t; - add_symbol (s, top_stack->cur_block); + add_symbol (s, top_stack->cur_st, top_stack->cur_block); break; /* End of local variables shared by struct, union, enum, and @@ -1158,7 +1158,7 @@ SYMBOL_VALUE (s) = (long) e; e->numargs = top_stack->numargs; e->pdr.framereg = -1; - add_symbol (s, top_stack->cur_block); + add_symbol (s, top_stack->cur_st, top_stack->cur_block); /* f77 emits proc-level with address bounds==[0,0], So look for such child blocks, and patch them. */ @@ -1297,7 +1297,7 @@ SYMBOL_CLASS (s) = LOC_TYPEDEF; SYMBOL_BLOCK_VALUE (s) = top_stack->cur_block; SYMBOL_TYPE (s) = t; - add_symbol (s, top_stack->cur_block); + add_symbol (s, top_stack->cur_st, top_stack->cur_block); /* Incomplete definitions of structs should not get a name. */ if (TYPE_NAME (SYMBOL_TYPE (s)) == NULL @@ -1904,7 +1904,7 @@ SYMBOL_CLASS (s) = LOC_BLOCK; /* Donno its type, hope int is ok */ SYMBOL_TYPE (s) = lookup_function_type (mdebug_type_int); - add_symbol (s, top_stack->cur_block); + add_symbol (s, top_stack->cur_st, top_stack->cur_block); /* Wont have symbols for this one */ b = new_block (2); SYMBOL_BLOCK_VALUE (s) = b; @@ -4434,8 +4434,9 @@ /* Add a new symbol S to a block B. */ static void -add_symbol (struct symbol *s, struct block *b) +add_symbol (struct symbol *s, struct symtab *symtab, struct block *b) { + SYMBOL_SYMTAB (s) = symtab; dict_add_symbol (BLOCK_DICT (b), s); } --dc+cDN39EJAMEtIO--