From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22259 invoked by alias); 6 Oct 2002 16:51:49 -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 22250 invoked from network); 6 Oct 2002 16:51:49 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by sources.redhat.com with SMTP; 6 Oct 2002 16:51:49 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 17yFYy-0007YU-00; Sun, 06 Oct 2002 12:51:32 -0500 Received: from drow by nevyn.them.org with local (Exim 3.35 #1 (Debian)) id 17yEdi-00074n-00; Sun, 06 Oct 2002 12:52:22 -0400 Date: Sun, 06 Oct 2002 09:51:00 -0000 From: Daniel Jacobowitz To: Klee Dienes Cc: gdb-patches@sources.redhat.com Subject: Re: [PATCH] Use read_memory_unsigned_integer when reading to CORE_ADDR Message-ID: <20021006165222.GA26969@nevyn.them.org> Mail-Followup-To: Klee Dienes , gdb-patches@sources.redhat.com References: <20021006150934.GA23448@nevyn.them.org> <7E7F8836-D94A-11D6-9563-00039396EEB8@apple.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7E7F8836-D94A-11D6-9563-00039396EEB8@apple.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2002-10/txt/msg00160.txt.bz2 On Sun, Oct 06, 2002 at 12:41:42PM -0400, Klee Dienes wrote: > On Sunday, October 6, 2002, at 11:09 AM, Daniel Jacobowitz wrote: > > > > >Might want to use alloca (TYPE_LENGTH (builtin_type_void_data_ptr)). > > Love to; I had been under the (apparently mistaken) impression that > alloca was deprecated for new code. Check the "Coding" chapter of gdbint.texinfo: GDB can use the non-portable function `alloca' for the allocation of small temporary values (such as strings). I think at least one of the other GNU tools doesn't like alloca - probably it's GCC and binutils both. > >>Aside from the intimidating comments in findvar.c, this would seem a > >>good candidate for extract_address ... though a similar modification > >>would have to be made to it to handle the sign-extension as well. > >> > >>Or alternately, I could just leave well-enough alone, and be careful > >>to > >>truncate CORE_ADDRs to 32 bits in our target xfer_memory code (or the > >>MIPS code could sign-extend it in the same place). > > > >Well, I think a general read_memory_typed_address (returning CORE_ADDR, > >and honoroing POINTER_TO_ADDRESS) would be the way to go here. > > That sounds good to me; how about the following? I removed the patch > to symfile.c, as it's commented out anyway, and probably not worth the > effort. My one concern is that I don't currently have a good system to > test the part of the patch that affects blockframe.c. Can't the Apple tools group lodge a formal complaint about Apple Mail, or something? :) Your patch is line wrapped. Other than that, I can't approve this sort of patch, but it looks like exactly what I wanted. Thanks for bearing with me. > > 2002-10-06 Klee Dienes > > * findvar.c (read_memory_typed_address): New function. > * gdbcore.h (read_memory_typed_address): Add prototype. > * blockframe.c (sigtramp_saved_pc): Use > read_memory_typed_address to read a value destined for a > CORE_ADDR, not read_memory_integer. > * f-valprint.c (f77_get_dynamic_upperbound): Ditto. > (f77_get_dynamic_lowerbound): Ditto. > > diff -u /home/klee/source/cygnus.cygnus/gdb/gdbcore.h ./gdbcore.h > --- /home/klee/source/cygnus.cygnus/gdb/gdbcore.h Wed Dec 19 15:54:26 > 2001 > +++ ./gdbcore.h Sun Oct 6 09:18:11 2002 > @@ -64,8 +64,15 @@ > > /* Read a null-terminated string from the debuggee's memory, given > address, > * a buffer into which to place the string, and the maximum available > space */ > + > extern void read_memory_string (CORE_ADDR, char *, int); > > +/* Read the pointer of type TYPE at BUF, and return the address it > + represents. */ > + > +CORE_ADDR > +read_memory_typed_address (CORE_ADDR addr, struct type *type); > + > /* This takes a char *, not void *. This is probably right, because > passing in an int * or whatever is wrong with respect to > byteswapping, alignment, different sizes for host vs. target types, > diff -u /home/klee/source/cygnus.cygnus/gdb/corefile.c ./corefile.c > --- /home/klee/source/cygnus.cygnus/gdb/corefile.c Thu May 30 15:41:24 > 2002 > +++ ./corefile.c Sun Oct 6 09:18:11 2002 > @@ -356,6 +356,14 @@ > } > } > > +CORE_ADDR > +read_memory_typed_address (CORE_ADDR addr, struct type *type) > +{ > + char *buf = alloca (TYPE_LENGTH (type)); > + read_memory (addr, buf, TYPE_LENGTH (type)); > + return extract_typed_address (buf, type); > +} > + > /* Same as target_write_memory, but report an error if can't write. */ > void > write_memory (CORE_ADDR memaddr, char *myaddr, int len) > diff -u /home/klee/source/cygnus.cygnus/gdb/blockframe.c ./blockframe.c > --- /home/klee/source/cygnus.cygnus/gdb/blockframe.c Mon Sep 30 > 18:24:01 2002 > +++ ./blockframe.c Sun Oct 6 09:35:42 2002 > @@ -1035,19 +1035,17 @@ > buf = alloca (ptrbytes); > /* Get sigcontext address, it is the third parameter on the stack. > */ > if (frame->next) > - sigcontext_addr = read_memory_integer (FRAME_ARGS_ADDRESS > (frame->next) > - + FRAME_ARGS_SKIP > - + sigcontext_offs, > - ptrbytes); > + sigcontext_addr = read_memory_typed_address > + (FRAME_ARGS_ADDRESS (frame->next) + FRAME_ARGS_SKIP + > sigcontext_offs, > + builtin_type_void_data_ptr); > else > - sigcontext_addr = read_memory_integer (read_register (SP_REGNUM) > - + sigcontext_offs, > - ptrbytes); > + sigcontext_addr = read_memory_typed_address > + (read_register (SP_REGNUM) + sigcontext_offs, > builtin_type_void_data_ptr); > > /* Don't cause a memory_error when accessing sigcontext in case the > stack > layout has changed or the stack is corrupt. */ > target_read_memory (sigcontext_addr + SIGCONTEXT_PC_OFFSET, buf, > ptrbytes); > - return extract_unsigned_integer (buf, ptrbytes); > + return extract_typed_address (buf, builtin_type_void_data_ptr); > } > #endif /* SIGCONTEXT_PC_OFFSET */ > > diff -u /home/klee/source/cygnus.cygnus/gdb/f-valprint.c ./f-valprint.c > --- /home/klee/source/cygnus.cygnus/gdb/f-valprint.c Tue Mar 6 > 18:57:08 2001 > +++ ./f-valprint.c Sun Oct 6 09:18:11 2002 > @@ -102,9 +102,9 @@ > if (current_frame_addr > 0) > { > ptr_to_lower_bound = > - read_memory_integer (current_frame_addr + > - TYPE_ARRAY_LOWER_BOUND_VALUE (type), > - 4); > + read_memory_typed_address (current_frame_addr + > + TYPE_ARRAY_LOWER_BOUND_VALUE (type), > + builtin_type_void_data_ptr); > *lower_bound = read_memory_integer (ptr_to_lower_bound, 4); > } > else > @@ -165,9 +165,9 @@ > if (current_frame_addr > 0) > { > ptr_to_upper_bound = > - read_memory_integer (current_frame_addr + > - TYPE_ARRAY_UPPER_BOUND_VALUE (type), > - 4); > + read_memory_typed_address (current_frame_addr + > + TYPE_ARRAY_UPPER_BOUND_VALUE (type), > + builtin_type_void_data_ptr); > *upper_bound = read_memory_integer (ptr_to_upper_bound, 4); > } > else > > -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer