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.geo...@coresystems.de> > I can't really verify if this is the correct thing to do, but since it fixes abuild...
Acked-by: Stefan Reinauer <ste...@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)) > + left2 = copy_triple(state, left2); > switch((tok = peek(state))) { > case TOK_EQ: > lvalue(state, left); > @@ -11603,19 +11606,19 @@ > } > def = write_expr(state, left, > triple(state, op, left->type, > - read_expr(state, copy_triple(state, left)), > right)); > + read_expr(state, left2), right)); > break; > case TOK_PLUSEQ: > lvalue(state, left); > eat(state, TOK_PLUSEQ); > def = write_expr(state, left, > - mk_add_expr(state, copy_triple(state, left), > assignment_expr(state))); > + mk_add_expr(state, left2, assignment_expr(state))); > break; > case TOK_MINUSEQ: > lvalue(state, left); > eat(state, TOK_MINUSEQ); > def = write_expr(state, left, > - mk_sub_expr(state, copy_triple(state, left), > assignment_expr(state))); > + mk_sub_expr(state, left2, assignment_expr(state))); > break; > case TOK_SLEQ: > case TOK_SREQ: > @@ -11639,7 +11642,7 @@ > } > def = write_expr(state, left, > triple(state, op, left->type, > - read_expr(state, copy_triple(state,left)), > right)); > + read_expr(state, left2), right)); > break; > } > return def; > > > > -- coreboot mailing list: coreboot@coreboot.org > http://www.coreboot.org/mailman/listinfo/coreboot -- coresystems GmbH . Brahmsstr. 16 . D-79104 Freiburg i. Br. Tel.: +49 761 7668825 . Fax: +49 761 7664613 Email: i...@coresystems.de . http://www.coresystems.de/ Registergericht: Amtsgericht Freiburg . HRB 7656 Geschäftsführer: Stefan Reinauer . Ust-IdNr.: DE245674866
-- coreboot mailing list: coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot