Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [rfa:rs6000] Simplify alloca reg fetch
@ 2002-04-17 15:46 Andrew Cagney
  2002-04-17 15:55 ` Kevin Buettner
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Cagney @ 2002-04-17 15:46 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 320 bytes --]

Hello,

The attatched replaces some hardwired code for fetching the alloca 
register with a call to frame_register_read().

The code is equivalent (except for the case where, for some reason, the 
register isn't available where the new code is more robust).

(This is what was breaking the register cache code).

Andrew

[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 2426 bytes --]

2002-04-17  Andrew Cagney  <ac131313@redhat.com>

	* rs6000-tdep.c (frame_initial_stack_address): Use
	frame_register_read to read the alloca_reg.

Index: rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.55
diff -u -r1.55 rs6000-tdep.c
--- rs6000-tdep.c	12 Apr 2002 19:48:36 -0000	1.55
+++ rs6000-tdep.c	17 Apr 2002 22:42:30 -0000
@@ -1488,41 +1488,22 @@
       return fi->extra_info->initial_sp;
     }
 
-  /* This function has an alloca register. If this is the top-most frame
-     (with the lowest address), the value in alloca register is good. */
-
-  if (!fi->next)
-    return fi->extra_info->initial_sp = read_register (fdata.alloca_reg);
-
-  /* Otherwise, this is a caller frame. Callee has usually already saved
-     registers, but there are exceptions (such as when the callee
-     has no parameters). Find the address in which caller's alloca
-     register is saved. */
-
-  for (callee_fi = fi->next; callee_fi; callee_fi = callee_fi->next)
-    {
-
-      if (!callee_fi->saved_regs)
-	frame_get_saved_regs (callee_fi, NULL);
-
-      /* this is the address in which alloca register is saved. */
-
-      tmpaddr = callee_fi->saved_regs[fdata.alloca_reg];
-      if (tmpaddr)
-	{
-	  fi->extra_info->initial_sp =
-	    read_memory_addr (tmpaddr, TDEP->wordsize);
-	  return fi->extra_info->initial_sp;
-	}
-
-      /* Go look into deeper levels of the frame chain to see if any one of
-         the callees has saved alloca register. */
-    }
-
-  /* If alloca register was not saved, by the callee (or any of its callees)
-     then the value in the register is still good. */
-
-  fi->extra_info->initial_sp = read_register (fdata.alloca_reg);
+  /* There is an alloca register, use its value, in the current frame,
+     as the initial stack pointer.  */
+  {
+    char *tmpbuf = alloca (MAX_REGISTER_RAW_SIZE);
+    if (frame_register_read (fi, fdata.alloca_reg, tmpbuf))
+      {
+	fi->extra_info->initial_sp
+	  = extract_unsigned_integer (tmpbuf,
+				      REGISTER_RAW_SIZE (fdata.alloca_reg));
+      }
+    else
+      /* NOTE: cagney/2002-04-17: At present the only time
+         frame_register_read will fail is when the register isn't
+         available.  If that does happen, use the frame.  */
+      fi->extra_info->initial_sp = fi->frame;
+  }
   return fi->extra_info->initial_sp;
 }
 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [rfa:rs6000] Simplify alloca reg fetch
  2002-04-17 15:46 [rfa:rs6000] Simplify alloca reg fetch Andrew Cagney
@ 2002-04-17 15:55 ` Kevin Buettner
  2002-04-17 16:29   ` Andrew Cagney
  0 siblings, 1 reply; 3+ messages in thread
From: Kevin Buettner @ 2002-04-17 15:55 UTC (permalink / raw)
  To: Andrew Cagney, gdb-patches

On Apr 17,  6:46pm, Andrew Cagney wrote:

> The attatched replaces some hardwired code for fetching the alloca 
> register with a call to frame_register_read().
> 
> The code is equivalent (except for the case where, for some reason, the 
> register isn't available where the new code is more robust).
> 
> (This is what was breaking the register cache code).
> 
> 2002-04-17  Andrew Cagney  <ac131313@redhat.com>
> 
> 	* rs6000-tdep.c (frame_initial_stack_address): Use
> 	frame_register_read to read the alloca_reg.

Okay.

Kevin


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [rfa:rs6000] Simplify alloca reg fetch
  2002-04-17 15:55 ` Kevin Buettner
@ 2002-04-17 16:29   ` Andrew Cagney
  0 siblings, 0 replies; 3+ messages in thread
From: Andrew Cagney @ 2002-04-17 16:29 UTC (permalink / raw)
  To: Kevin Buettner; +Cc: gdb-patches

> 2002-04-17  Andrew Cagney  <ac131313@redhat.com>
>> 
>> * rs6000-tdep.c (frame_initial_stack_address): Use
>> frame_register_read to read the alloca_reg.
> 
> 
> Okay.

Committed, thanks,
Andrew


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-04-17 23:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-17 15:46 [rfa:rs6000] Simplify alloca reg fetch Andrew Cagney
2002-04-17 15:55 ` Kevin Buettner
2002-04-17 16:29   ` Andrew Cagney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox