This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] gdb: x86: fix x32 builds with inline asm


On Tuesday 08 January 2013 10:01:20 Mike Frysinger wrote:
> -#if defined __i386__
> -	  asm volatile ("pushl %0;"
> -			".globl linux_ptrace_test_ret_to_nx_instr;"
> -			"linux_ptrace_test_ret_to_nx_instr:"
> -			"ret"
> -			: : "r" (return_address) : "%esp", "memory");
> -#elif defined __x86_64__
> -	  asm volatile ("pushq %0;"
> +	  asm volatile ("push %0;"
>  			".globl linux_ptrace_test_ret_to_nx_instr;"
>  			"linux_ptrace_test_ret_to_nx_instr:"
>  			"ret"
> -			: : "r" (return_address) : "%rsp", "memory");
> -#else
> -# error "!__i386__ && !__x86_64__"
> -#endif
> +			: : "r" (return_address) : "sp", "memory");

hrm, this works for -m32 and -m64, but doesn't actually help with -mx32.  this 
doesn't seem to line up with my expectations.  can you suggest something here 
H.J. Lu ?

$ cat test.c
main() { asm volatile ("push %0; ret;" : : "r"(main) : "sp", "memory"); }

$ gcc -m32 test.c
   8:   50                      push   %eax
   9:   c3                      ret    

$ gcc -m64 test.c
   9:   50                      push   %rax
   a:   c3                      retq   

$ gcc -mx32 test.c
test.c: Assembler messages:
test.c:2: Error: operand type mismatch for `push'
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]