From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23726 invoked by alias); 9 Aug 2004 23:48:05 -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 23718 invoked from network); 9 Aug 2004 23:48:03 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 9 Aug 2004 23:48:03 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i79Nlwe1006639 for ; Mon, 9 Aug 2004 19:47:58 -0400 Received: from zenia.home.redhat.com (porkchop.devel.redhat.com [172.16.58.2]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i79Nlua02589; Mon, 9 Aug 2004 19:47:57 -0400 To: gdb-patches@sources.redhat.com Subject: RFC: Dwarf locations: analyze location before fetching stack top From: Jim Blandy Date: Mon, 09 Aug 2004 23:48:00 -0000 Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2004-08/txt/msg00346.txt.bz2 This is a minor rearrangement that will clean up an upcoming patch for recognizing multi-piece expression values a bit. I'll commit in a few days. (That upcoming patch is independent of the design for supporting scattered values in GDB. It is related only to recognizing, but not handling, all possible results of Dwarf expression evaluation.) 2004-08-09 Jim Blandy * dwarf2loc.c (dwarf2_evaluate_loc_desc): Wait to fetch the top of the stack until we've decided what sort of result the evaluation has produced. Use separate variables, with more specific names. Index: gdb/dwarf2loc.c =================================================================== RCS file: /cvs/src/src/gdb/dwarf2loc.c,v retrieving revision 1.15 diff -c -p -r1.15 dwarf2loc.c *** gdb/dwarf2loc.c 13 May 2004 17:30:41 -0000 1.15 --- gdb/dwarf2loc.c 9 Aug 2004 23:41:15 -0000 *************** dwarf2_evaluate_loc_desc (struct symbol *** 205,211 **** unsigned char *data, unsigned short size, struct objfile *objfile) { - CORE_ADDR result; struct value *retval; struct dwarf_expr_baton baton; struct dwarf_expr_context *ctx; --- 205,210 ---- *************** dwarf2_evaluate_loc_desc (struct symbol *** 228,248 **** ctx->get_tls_address = dwarf_expr_tls_address; dwarf_expr_eval (ctx, data, size); - result = dwarf_expr_fetch (ctx, 0); if (ctx->in_reg) { ! int regnum = DWARF2_REG_TO_REGNUM (result); ! retval = value_from_register (SYMBOL_TYPE (var), regnum, frame); } else { retval = allocate_value (SYMBOL_TYPE (var)); VALUE_BFD_SECTION (retval) = SYMBOL_BFD_SECTION (var); VALUE_LVAL (retval) = lval_memory; VALUE_LAZY (retval) = 1; ! VALUE_ADDRESS (retval) = result; } free_dwarf_expr_context (ctx); --- 227,249 ---- ctx->get_tls_address = dwarf_expr_tls_address; dwarf_expr_eval (ctx, data, size); if (ctx->in_reg) { ! CORE_ADDR dwarf_regnum = dwarf_expr_fetch (ctx, 0); ! int gdb_regnum = DWARF2_REG_TO_REGNUM (dwarf_regnum); ! retval = value_from_register (SYMBOL_TYPE (var), gdb_regnum, frame); } else { + CORE_ADDR address = dwarf_expr_fetch (ctx, 0); + retval = allocate_value (SYMBOL_TYPE (var)); VALUE_BFD_SECTION (retval) = SYMBOL_BFD_SECTION (var); VALUE_LVAL (retval) = lval_memory; VALUE_LAZY (retval) = 1; ! VALUE_ADDRESS (retval) = address; } free_dwarf_expr_context (ctx);