2002-10-11 Klee Dienes <kdienes@apple.com>
authorKlee Dienes <kdienes@apple.com>
Sat, 12 Oct 2002 01:48:17 +0000 (01:48 +0000)
committerKlee Dienes <kdienes@apple.com>
Sat, 12 Oct 2002 01:48:17 +0000 (01:48 +0000)
        * 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.

gdb/ChangeLog
gdb/blockframe.c
gdb/corefile.c
gdb/f-valprint.c
gdb/gdbcore.h

index 8a77109..e0edadd 100644 (file)
@@ -1,3 +1,12 @@
+2002-10-11  Klee Dienes  <kdienes@apple.com>
+
+        * 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.
+
 2002-10-11  Martin M. Hunt  <hunt@redhat.com>
 
        * utils.c (string_to_core_addr): After turning string into
index eba45a3..4eb22ac 100644 (file)
@@ -1035,19 +1035,17 @@ sigtramp_saved_pc (struct frame_info *frame)
   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 */
 
index 4f6eef2..be0ecf0 100644 (file)
@@ -356,6 +356,14 @@ read_memory_string (CORE_ADDR memaddr, char *buffer, int max_len)
     }
 }
 
+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)
index 48c5113..4bd01cc 100644 (file)
@@ -102,9 +102,9 @@ f77_get_dynamic_lowerbound (struct type *type, int *lower_bound)
       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 @@ f77_get_dynamic_upperbound (struct type *type, int *upper_bound)
       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
index 8859455..5c10c58 100644 (file)
@@ -64,8 +64,15 @@ extern ULONGEST read_memory_unsigned_integer (CORE_ADDR memaddr, int len);
 
 /* 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 ADDR, 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,