
7 Mar
2005
7 Mar
'05
11:39 a.m.
On 07 March 2005 16:18, David Brown wrote:
On Mon, Mar 07, 2005 at 11:47:31AM -0000, Simon Marlow wrote:
$ cat bug.c register void * R1 __asm__("%r13");
extern void g(void); static void f(void) { R1 = g; goto *R1; } $ gcc -S -O bug.c $
And take a look at the generated assembly for the function f:
f: .LFB2: movl $g, %eax jmp *%rax
Note that the assignment to the global variable R1 has been lost. It works fine on x86 though: change the register variable to %esi and try it.
Hmm. On gcc 3.3.5 that I have, it discards the assignment on x86 as well.
Yes, looks like it fails with 3.4.1 and 3.4.3 I have here, but 3.2.2 works. Now I'm quite surpised that this hasn't affected us on x86. Very strange. Cheers, Simon
7380
Age (days ago)
7380
Last active (days ago)
0 comments
1 participants
participants (1)
-
Simon Marlow