Change "g" (general regs) into "r" (hardregs) in clone / modify_ldt /
wine_sigaction __PIC__ cases, since "g" will not work with -fomit-frame-pointer ("g" is referenced using %esp which was invalidated before). Bug found and (other) fix suggested by <daniel@mat.utfsm.cl> Daniel Serpell.
This commit is contained in:
parent
a7f878519a
commit
4ede296356
|
@ -96,7 +96,7 @@ static __inline__ int wine_sigaction( int sig, struct kernel_sigaction *new,
|
|||
"popl %%ebx"
|
||||
: "=a" (sig)
|
||||
: "0" (SYS_sigaction),
|
||||
"g" (sig),
|
||||
"r" (sig),
|
||||
"c" (new),
|
||||
"d" (old) );
|
||||
#else
|
||||
|
|
|
@ -39,7 +39,7 @@ static __inline__ int modify_ldt( int func, struct modify_ldt_s *ptr,
|
|||
"popl %%ebx"
|
||||
: "=a" (res)
|
||||
: "0" (SYS_modify_ldt),
|
||||
"g" (func),
|
||||
"r" (func),
|
||||
"c" (ptr),
|
||||
"d" (count) );
|
||||
#else
|
||||
|
|
|
@ -88,7 +88,7 @@ int clone( int (*fn)(void *), void *stack, int flags, void *arg )
|
|||
"xorl %%eax,%%eax\n\t" /* Just in case it does*/
|
||||
"0:"
|
||||
: "=a" (ret)
|
||||
: "0" (SYS_clone), "g" (flags), "c" (stack_ptr) );
|
||||
: "0" (SYS_clone), "r" (flags), "c" (stack_ptr) );
|
||||
assert( ret ); /* If ret is 0, we returned from the child function */
|
||||
if (ret > 0) return ret;
|
||||
errno = -ret;
|
||||
|
|
Loading…
Reference in New Issue