From: Pavel Roskin <proski@gnu.org>
To: linux-sparse@vger.kernel.org
Subject: Re: Crash, apparent memory corruption
Date: Wed, 13 Feb 2008 14:04:42 -0500 [thread overview]
Message-ID: <1202929482.2565.11.camel@dv> (raw)
In-Reply-To: <1202873443.9892.22.camel@dv>
Hello!
Here are my results so far.
It's not just the "next" pointer that is corrupted. The "nr" field in
struct ptr_list is corrupted too. It becomes -1, which is an invalid
value. This can be reproduced on both i386 and x86_64 platforms.
The earliest signs of problem I could find are in simplify_one_symbol().
The lower 4 bytes of insn->phi_list->list[0] should be a valid nr (from
0 to 29), but it's 0xffffffff.
I also found the place where -1 comes from. If I change -1 to -2 in
symbol_pseudo(), the lower 4 bytes of insn->phi_list->list[0] become
0xfffffffe. It other words, the same area of memory is treated as
struct ptr_list and as pseudo_t.
Here's the patch that demonstrates the problem.
diff --git a/flow.c b/flow.c
index 82fb23a..4946388 100644
--- a/flow.c
+++ b/flow.c
@@ -620,6 +620,7 @@ static void simplify_one_symbol(struct entrypoint *ep, struct symbol *sym)
/* We know that the symbol-pseudo use is the "src" in the instruction */
struct instruction *insn = pu->insn;
+ fprintf(stderr, "nr = %lx\n", (long int)(insn->phi_list->list[0]));
switch (insn->opcode) {
case OP_STORE:
stores++;
diff --git a/linearize.c b/linearize.c
index 8a68f05..fb03a4b 100644
--- a/linearize.c
+++ b/linearize.c
@@ -761,7 +761,7 @@ static pseudo_t symbol_pseudo(struct entrypoint *ep, struct symbol *sym)
pseudo = sym->pseudo;
if (!pseudo) {
pseudo = __alloc_pseudo(0);
- pseudo->nr = -1;
+ pseudo->nr = -2;
pseudo->type = PSEUDO_SYM;
pseudo->sym = sym;
pseudo->ident = sym->ident;
--
Regards,
Pavel Roskin
next prev parent reply other threads:[~2008-02-13 19:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-13 3:30 Crash, apparent memory corruption Pavel Roskin
2008-02-13 19:04 ` Pavel Roskin [this message]
2008-02-13 23:18 ` Pavel Roskin
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=1202929482.2565.11.camel@dv \
--to=proski@gnu.org \
--cc=linux-sparse@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.