Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [RFA] dwarf2expr.c: Fix some stack [re]allocation problems
@ 2003-04-24  1:05 Kevin Buettner
  2003-05-07 22:39 ` Kevin Buettner
  0 siblings, 1 reply; 4+ messages in thread
From: Kevin Buettner @ 2003-04-24  1:05 UTC (permalink / raw)
  To: gdb-patches

The patch below fixes some problems with the dwarf expression stack.

First, the stack is not being initialized correctly.  The
``stack_len'' member indicates the position of the top of the stack
and it was being set to 10.  This value should be zero, and, as a
consequence, none of the underflow checking code was actually working
properly.  Furthermore, the field which indicates the amount of space
actually allocated wasn't being initialized at all!

The function which grows the stack also has a bug.  It uses a loop
which doubles the new size so long as that size isn't yet large enough
to accomodate the new space request.  The problem with this is that if
the size starts out at zero, the loop will never terminate.  Computing
this sort of thing with a loop is silly anyway, so I've simplified the
mechanism used to allocate more space.  It seems unlikely that the
DWARF 2 expression stack will grow very quickly, hence the new code is
conservative and allocates a mere 10 elements (at a time) more than
required.

Okay?

	* dwarf2expr.c (new_dwarf_expr_context): Set ``stack_len'' to
	correctly indicate an empty stack and ``stack_allocated'' to the
	indicate the number of elements initially allocated.
	(dwarf_expr_grow_stack): Simplify method for computing new
	stack size.  Don't loop infinitely if ``stack_len'' is zero.

Index: dwarf2expr.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2expr.c,v
retrieving revision 1.6
diff -u -p -r1.6 dwarf2expr.c
--- dwarf2expr.c	13 Apr 2003 15:53:44 -0000	1.6
+++ dwarf2expr.c	23 Apr 2003 23:19:38 -0000
@@ -39,8 +39,9 @@ new_dwarf_expr_context (void)
 {
   struct dwarf_expr_context *retval;
   retval = xcalloc (1, sizeof (struct dwarf_expr_context));
-  retval->stack_len = 10;
-  retval->stack = xmalloc (10 * sizeof (CORE_ADDR));
+  retval->stack_len = 0;
+  retval->stack_allocated = 10;
+  retval->stack = xmalloc (retval->stack_allocated * sizeof (CORE_ADDR));
   return retval;
 }
 
@@ -61,12 +62,10 @@ dwarf_expr_grow_stack (struct dwarf_expr
 {
   if (ctx->stack_len + need > ctx->stack_allocated)
     {
-      size_t templen = ctx->stack_len * 2;
-      while (templen < (ctx->stack_len + need))
-	   templen *= 2;
+      size_t newlen = ctx->stack_len + need + 10;
       ctx->stack = xrealloc (ctx->stack,
-			     templen * sizeof (CORE_ADDR));
-      ctx->stack_allocated = templen;
+			     newlen * sizeof (CORE_ADDR));
+      ctx->stack_allocated = newlen;
     }
 }
 


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

end of thread, other threads:[~2003-05-14 22:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-24  1:05 [RFA] dwarf2expr.c: Fix some stack [re]allocation problems Kevin Buettner
2003-05-07 22:39 ` Kevin Buettner
2003-05-07 22:57   ` Elena Zannoni
     [not found]     ` <ezannoni@redhat.com>
2003-05-14 22:46       ` Kevin Buettner

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