[coreboot] Ouch: romcc "x[0] |= something" patch causes another crash

Stefan Reinauer stepan at coresystems.de
Mon Mar 15 11:19:22 CET 2010


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 at 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 at 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 at 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: info at coresystems.de  . http://www.coresystems.de/
Registergericht: Amtsgericht Freiburg . HRB 7656
Geschäftsführer: Stefan Reinauer . Ust-IdNr.: DE245674866

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20100315/eb4c46c8/attachment.html>


More information about the coreboot mailing list