From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29505 invoked by alias); 6 Oct 2002 02:48:33 -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 29496 invoked from network); 6 Oct 2002 02:48:32 -0000 Received: from unknown (HELO mail-out2.apple.com) (17.254.0.51) by sources.redhat.com with SMTP; 6 Oct 2002 02:48:32 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id g962mWs22412 for ; Sat, 5 Oct 2002 19:48:32 -0700 (PDT) Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id for ; Sat, 5 Oct 2002 19:48:32 -0700 Received: from molly.local. (vpn-scv-x2-154.apple.com [17.219.193.154]) by scv2.apple.com (8.11.3/8.11.3) with ESMTP id g962mUV23750 for ; Sat, 5 Oct 2002 19:48:31 -0700 (PDT) Date: Sat, 05 Oct 2002 19:48:00 -0000 Mime-Version: 1.0 (Apple Message framework v543) Content-Type: text/plain; delsp=yes; charset=US-ASCII; format=flowed Subject: [PATCH] Use read_memory_unsigned_integer when reading to CORE_ADDR From: Klee Dienes To: gdb-patches@sources.redhat.com Content-Transfer-Encoding: 7bit Message-Id: <1BE45412-D8D6-11D6-9DA9-00039396EEB8@apple.com> X-SW-Source: 2002-10/txt/msg00152.txt.bz2 The following patch converts several instances of read_memory_integer to read_memory_unsigned_integer. In all cases except one, the value is being read into a CORE_ADDR, which will cause sign-extension lossage if read_memory_integer is used with a 64-bit bfd (the final case is reading into an unsigned int, but I believe the change is still correct). 2002-10-05 Klee Dienes * blockframe.c (sigtramp_saved_pc): Use read_memory_unsigned_integer 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. * symfile.c (simple_read_overlay_region_table): Ditto (this function is reading to an unsigned int, not a CORE_ADDR, and is commented out, but I believe reading as unsigned is still correct). diff -ru --exclude=Makefile.in --exclude=configure.in --exclude=configure --exclude=aclocal.m4 --exclude=config.in --exclude=gconfig.in --exclude=config.h.in --exclude=Make-in --exclude=CVS /Volumes/Storage/Users/kdienes/source/cygnus.pristine-current/src/gdb/ blockframe.c ./blockframe.c --- /Volumes/Storage/Users/kdienes/source/cygnus.pristine-current/src/gdb/ blockframe.c Sun Sep 22 12:47:43 2002 +++ ./blockframe.c Sat Oct 5 21:05:32 2002 @@ -1035,14 +1035,14 @@ 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_unsigned_integer (FRAME_ARGS_ADDRESS (frame->next) + + FRAME_ARGS_SKIP + + sigcontext_offs, + ptrbytes); else - sigcontext_addr = read_memory_integer (read_register (SP_REGNUM) - + sigcontext_offs, - ptrbytes); + sigcontext_addr = read_memory_unsigned_integer (read_register (SP_REGNUM) + + sigcontext_offs, + ptrbytes); /* Don't cause a memory_error when accessing sigcontext in case the stack layout has changed or the stack is corrupt. */ diff -ru --exclude=Makefile.in --exclude=configure.in --exclude=configure --exclude=aclocal.m4 --exclude=config.in --exclude=gconfig.in --exclude=config.h.in --exclude=Make-in --exclude=CVS /Volumes/Storage/Users/kdienes/source/cygnus.pristine-current/src/gdb/ f-valprint.c ./f-valprint.c --- /Volumes/Storage/Users/kdienes/source/cygnus.pristine-current/src/gdb/ f-valprint.c Mon Aug 5 17:39:21 2002 +++ ./f-valprint.c Sat Oct 5 20:24:29 2002 @@ -77,10 +77,8 @@ current_frame_addr = selected_frame->frame; if (current_frame_addr > 0) { - *lower_bound = - read_memory_integer (current_frame_addr + - TYPE_ARRAY_LOWER_BOUND_VALUE (type), - 4); + *lower_bound = read_memory_unsigned_integer + (current_frame_addr + TYPE_ARRAY_LOWER_BOUND_VALUE (type), 4); } else { @@ -101,11 +99,9 @@ current_frame_addr = selected_frame->frame; if (current_frame_addr > 0) { - ptr_to_lower_bound = - read_memory_integer (current_frame_addr + - TYPE_ARRAY_LOWER_BOUND_VALUE (type), - 4); - *lower_bound = read_memory_integer (ptr_to_lower_bound, 4); + ptr_to_lower_bound = read_memory_unsigned_integer + (current_frame_addr + TYPE_ARRAY_LOWER_BOUND_VALUE (type), 4); + *lower_bound = read_memory_unsigned_integer (ptr_to_lower_bound, 4); } else { @@ -135,10 +131,8 @@ current_frame_addr = selected_frame->frame; if (current_frame_addr > 0) { - *upper_bound = - read_memory_integer (current_frame_addr + - TYPE_ARRAY_UPPER_BOUND_VALUE (type), - 4); + *upper_bound = read_memory_unsigned_integer + (current_frame_addr + TYPE_ARRAY_UPPER_BOUND_VALUE (type), 4); } else { @@ -164,11 +158,9 @@ current_frame_addr = selected_frame->frame; if (current_frame_addr > 0) { - ptr_to_upper_bound = - read_memory_integer (current_frame_addr + - TYPE_ARRAY_UPPER_BOUND_VALUE (type), - 4); - *upper_bound = read_memory_integer (ptr_to_upper_bound, 4); + ptr_to_upper_bound = read_memory_unsigned_integer + (current_frame_addr + TYPE_ARRAY_UPPER_BOUND_VALUE (type), 4); + *upper_bound = read_memory_unsigned_integer (ptr_to_upper_bound, 4); } else { diff -ru --exclude=Makefile.in --exclude=configure.in --exclude=configure --exclude=aclocal.m4 --exclude=config.in --exclude=gconfig.in --exclude=config.h.in --exclude=Make-in --exclude=CVS /Volumes/Storage/Users/kdienes/source/cygnus.pristine-current/src/gdb/ symfile.c ./symfile.c --- /Volumes/Storage/Users/kdienes/source/cygnus.pristine-current/src/gdb/ symfile.c Sun Sep 22 12:47:51 2002 +++ ./symfile.c Sun Sep 29 02:09:10 2002 @@ -3137,7 +3377,7 @@ simple_free_overlay_region_table (); msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL); if (msym != NULL) - cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4); + cache_novly_regions = read_memory_unsigned_integer (SYMBOL_VALUE_ADDRESS (msym), 4); else return 0; /* failure */ cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);