This code compiles fine: __asm__ ( "my_function:\n\t" "jmp *%eax\n\t" ); but this doesn't: void *ptr; __asm__ ( "my_function:\n\t" "jmp *%0\n\t" : : "r"(ptr) ); error: expected ')' before ':' token (on the jmp line)
I'd be happy to use __attribute__((naked)) but it's not supported on x86 for some reason.
Probably dup of http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41045
Also, __attribute__((naked)) for x86 will never be implemented.
> Also, __attribute__((naked)) for x86 will never be implemented. May I ask why?
(In reply to comment #4) > May I ask why? See e.g. http://gcc.gnu.org/ml/gcc/2004-02/msg00943.html
(In reply to jnz from comment #1) > I'd be happy to use __attribute__((naked)) but it's not supported on x86 for > some reason. That's bug 25967 (In reply to Marek Polacek from comment #2) > Probably dup of http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41045 Agreed, closing as a duplicate of it *** This bug has been marked as a duplicate of bug 41045 ***
(In reply to Eric Gallager from comment #6) > (In reply to Marek Polacek from comment #2) > > Probably dup of http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41045 > > Agreed, closing as a duplicate of it > > *** This bug has been marked as a duplicate of bug 41045 *** Really? What the OP wants is >> void *ptr; >> >> __asm__ ("my_function:\n\t" >> "jmp *%0\n\t" : : "r"(ptr)); Constraint "r" cannot work at toplevel, hence this PR is invalid. What PR41045 is about is top-level asm arguments that are compiler-time constants (constraint "n") and maybe also symbols (constraints "i" and "s"). So the initial request is only valid if the address of ptr was used (and &ptr is CONST_INT, CONST or SYMBOL_REF etc.): void *ptr; __asm__ ("my_function:\n\t" "jmp ??? %0" : : "i" (&ptr));
(In reply to Georg-Johann Lay from comment #7) > (In reply to Eric Gallager from comment #6) > > (In reply to Marek Polacek from comment #2) > > > Probably dup of http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41045 > > > > Agreed, closing as a duplicate of it > > > > *** This bug has been marked as a duplicate of bug 41045 *** > > Really? > > What the OP wants is > > >> void *ptr; > >> > >> __asm__ ("my_function:\n\t" > >> "jmp *%0\n\t" : : "r"(ptr)); > > Constraint "r" cannot work at toplevel, hence this PR is invalid. > > What PR41045 is about is top-level asm arguments that are compiler-time > constants (constraint "n") and maybe also symbols (constraints "i" and "s"). > > So the initial request is only valid if the address of ptr was used (and > &ptr is CONST_INT, CONST or SYMBOL_REF etc.): > > void *ptr; > > __asm__ ("my_function:\n\t" > "jmp ??? %0" : : "i" (&ptr)); Oh OK, changing to INVALID then.