From: Kevin Buettner <kevinb@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: [RFA] dwarf2expr.c: Fix some stack [re]allocation problems
Date: Thu, 24 Apr 2003 01:05:00 -0000 [thread overview]
Message-ID: <1030423234526.ZM13643@localhost.localdomain> (raw)
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;
}
}
next reply other threads:[~2003-04-23 23:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-04-24 1:05 Kevin Buettner [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1030423234526.ZM13643@localhost.localdomain \
--to=kevinb@redhat.com \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox