[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Tinycc-devel] Bug in asm operand parsing
From: |
Felix Nawothnig |
Subject: |
[Tinycc-devel] Bug in asm operand parsing |
Date: |
Sun, 22 May 2005 17:39:54 +0200 |
User-agent: |
Mozilla Thunderbird 1.0.2 (X11/20050317) |
Hi.
Doing something like
movl (4+2)*4(%eax),%ebx
causes tcc to abort with "32 bit register expected" (a similar line can
be found in the wine sources) - tcc assumes no displacement when it sees
the '(' and tries to parse the 4 as the base-register.
A quick fix (and the way it's done in gas) would be:
--- i386-asm.c 18 Oct 2004 00:13:39 -0000 1.5
+++ i386-asm.c 22 May 2005 15:26:16 -0000
@@ -294,10 +294,15 @@
op->reg2 = -1;
op->shift = 0;
if (tok != '(') {
+ disp_expr:
asm_expr(s1, &e);
op->e.v = e.v;
op->e.sym = e.sym;
} else {
+ char c, *p = file->buf_ptr;
+ PEEKC(c, p);
+ if(c != '%' && c != ',')
+ goto disp_expr;
op->e.v = 0;
op->e.sym = NULL;
}
However that's a rather ugly hack - I guess it would be more correct to
move EA parsing (or at least EA detection) to asm_expr()?
-flx
P.S.: Considering the traffic of this list and the number of CVS
checkins I'm wondering... is this project dead?
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Tinycc-devel] Bug in asm operand parsing,
Felix Nawothnig <=