From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28151 invoked by alias); 25 Feb 2010 20:44:11 -0000 Received: (qmail 28126 invoked by uid 22791); 25 Feb 2010 20:44:10 -0000 X-SWARE-Spam-Status: No, hits=-0.6 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,MSGID_FROM_MTA_HEADER,SPF_SOFTFAIL X-Spam-Check-By: sourceware.org Received: from mtagate6.de.ibm.com (HELO mtagate6.de.ibm.com) (195.212.17.166) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 25 Feb 2010 20:44:04 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate6.de.ibm.com (8.13.1/8.13.1) with ESMTP id o1PKi1kA004832 for ; Thu, 25 Feb 2010 20:44:01 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o1PKi1FZ1626176 for ; Thu, 25 Feb 2010 21:44:01 +0100 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id o1PKi0WV015546 for ; Thu, 25 Feb 2010 21:44:00 +0100 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with SMTP id o1PKhxrd015529; Thu, 25 Feb 2010 21:43:59 +0100 Message-Id: <201002252043.o1PKhxrd015529@d12av02.megacenter.de.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Thu, 25 Feb 2010 21:43:59 +0100 Subject: Re: FYI: fix big-endian bug with DWARF_VALUE_STACK To: tromey@redhat.com Date: Thu, 25 Feb 2010 20:44:00 -0000 From: "Ulrich Weigand" Cc: gdb-patches@sourceware.org In-Reply-To: from "Tom Tromey" at Feb 24, 2010 09:30:35 AM MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii 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: 2010-02/txt/msg00638.txt.bz2 Tom Tromey wrote: > >>>>> "Ulrich" == Ulrich Weigand writes: > Ulrich> So it would seem to me that you should be able to request that > Ulrich> this value be represented in any arbitrary length ... > > That interpretation makes sense to me, but so does the one making it an > error. I suspect we will never run across code that exercises this. If > you want to change it, I have no objection. I agree that it is unlikely code will exercises this, and I'm fine with leaving the check in. However, we should at least use the proper DWARF address size (ctx->addr_size), as is used everywhere else where the size of values on the DWARF stack is considered, instead of using gdbarch_addr_bit, which really refers to GDB's internal representation of target addresses ... The patch below implements this change; tested on powerpc64-linux. Does this look reasonable to you? Bye, Ulrich ChangeLog: * dwarf2loc.c (struct piece_closure): Remove ARCH member, add ADDR_SIZE member. (allocate_piece_closure): Update. (copy_pieced_value_closure): Likewise. (dwarf2_evaluate_loc_desc): Likewise. (read_pieced_value): Use DWARF address size instead of GDB's gdbarch_addr_bit as size of values on the DWARF stack. Index: gdb/dwarf2loc.c =================================================================== RCS file: /cvs/src/src/gdb/dwarf2loc.c,v retrieving revision 1.72 diff -u -p -r1.72 dwarf2loc.c --- gdb/dwarf2loc.c 23 Feb 2010 16:14:36 -0000 1.72 +++ gdb/dwarf2loc.c 25 Feb 2010 18:36:02 -0000 @@ -232,8 +232,8 @@ struct piece_closure /* The number of pieces used to describe this variable. */ int n_pieces; - /* The architecture, used only for DWARF_VALUE_STACK. */ - struct gdbarch *arch; + /* The target address size, used only for DWARF_VALUE_STACK. */ + int addr_size; /* The pieces themselves. */ struct dwarf_expr_piece *pieces; @@ -244,12 +244,12 @@ struct piece_closure static struct piece_closure * allocate_piece_closure (int n_pieces, struct dwarf_expr_piece *pieces, - struct gdbarch *arch) + int addr_size) { struct piece_closure *c = XZALLOC (struct piece_closure); c->n_pieces = n_pieces; - c->arch = arch; + c->addr_size = addr_size; c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece); memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece)); @@ -298,13 +298,12 @@ read_pieced_value (struct value *v) case DWARF_VALUE_STACK: { - size_t n; - int addr_size = gdbarch_addr_bit (c->arch) / 8; - n = p->size; - if (n > addr_size) - n = addr_size; + struct gdbarch *gdbarch = get_type_arch (value_type (v)); + size_t n = p->size; + if (n > c->addr_size) + n = c->addr_size; store_unsigned_integer (contents + offset, n, - gdbarch_byte_order (c->arch), + gdbarch_byte_order (gdbarch), p->v.expr.value); } break; @@ -377,7 +376,7 @@ copy_pieced_value_closure (struct value { struct piece_closure *c = (struct piece_closure *) value_computed_closure (v); - return allocate_piece_closure (c->n_pieces, c->pieces, c->arch); + return allocate_piece_closure (c->n_pieces, c->pieces, c->addr_size); } static void @@ -439,7 +438,8 @@ dwarf2_evaluate_loc_desc (struct symbol struct piece_closure *c; struct frame_id frame_id = get_frame_id (frame); - c = allocate_piece_closure (ctx->num_pieces, ctx->pieces, ctx->gdbarch); + c = allocate_piece_closure (ctx->num_pieces, ctx->pieces, + ctx->addr_size); retval = allocate_computed_value (SYMBOL_TYPE (var), &pieced_value_funcs, c); -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com