On 3/15/10 10:59 AM, Patrick Georgi wrote:
Am 15.03.2010 03:32, schrieb Keith Hui:
Hi all,
I regret to report that the romcc patch circulated earlier to fix the segfault I reported, is now causing another segfault. This also seems to be triggered by something in the 440BX code, as it didn't segfault when I compile for any mainboards that isn't 440BX. As of now I don't know what this new segfault is. I'll report back with more findings.
It seems the problem was that copy_triple() isn't supposed to be used on flattened (and simple) nodes. I built a simple test case that failed: void main(void) { int c = 0; c |= 4; }
With the attached patch, this testcase, your testcase, and a full abuild run work.
Signed-off-by: Patrick Georgi patrick.georgi@coresystems.de
I can't really verify if this is the correct thing to do, but since it fixes abuild...
Acked-by: Stefan Reinauer stepan@coresystems.de
20100315-2-romcc
Index: util/romcc/romcc.c
--- util/romcc/romcc.c (Revision 5210) +++ util/romcc/romcc.c (Arbeitskopie) @@ -11557,7 +11557,7 @@
static struct triple *assignment_expr(struct compile_state *state) {
- struct triple *def, *left, *right;
- struct triple *def, *left, *left2, *right; int tok, op, sign; /* The C grammer in K&R shows assignment expressions
- only taking unary expressions as input on their
@@ -11578,6 +11578,9 @@ */ def = conditional_expr(state); left = def;
- left2 = left;
- if (!(left2->id & TRIPLE_FLAG_FLATTENED))
switch((tok = peek(state))) { case TOK_EQ: lvalue(state, left);left2 = copy_triple(state, left2);
@@ -11603,19 +11606,19 @@ } def = write_expr(state, left, triple(state, op, left->type,
read_expr(state, copy_triple(state, left)), right));
break; case TOK_PLUSEQ: lvalue(state, left); eat(state, TOK_PLUSEQ); def = write_expr(state, left,read_expr(state, left2), right));
mk_add_expr(state, copy_triple(state, left), assignment_expr(state)));
break; case TOK_MINUSEQ: lvalue(state, left); eat(state, TOK_MINUSEQ); def = write_expr(state, left,mk_add_expr(state, left2, assignment_expr(state)));
mk_sub_expr(state, copy_triple(state, left), assignment_expr(state)));
break; case TOK_SLEQ: case TOK_SREQ:mk_sub_expr(state, left2, assignment_expr(state)));
@@ -11639,7 +11642,7 @@ } def = write_expr(state, left, triple(state, op, left->type,
read_expr(state, copy_triple(state,left)), right));
break; } return def;read_expr(state, left2), right));
-- coreboot mailing list: coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot