Daniel Eischen wrote:
> At the end is a potentially longer term fix for the ABI
> breakage that was introduced when the i386 mcontext_t
> was changed/enlarged.
> - ret = set_fpcontext(td, &ucp->uc_mcontext);
> - if (ret != 0)
> - return (ret);
> + /*
> + * Intentionally ignore the error to keep binary
> + * compatibility with applications that fiddle with
> + * the FPU save area in the context. The kernel
> + * now saves the FPU state in the context, but it
> + * gets corrupted by those applications that try
> + * to work around the kernel NOT saving it.
> + */
> + (void)set_fpcontext(td, &ucp->uc_mcontext);
Maybe we could have something like this instead?
ret = set_fpcontext(td, &ucp->uc_mcontext);
#if !defined(COMPAT_FREEBSD4) && !defined(COMPAT_43)
if (ret != 0)
return (ret);
#endif
ie: ignore the error only if we have to be compatable.
Longer term, I was thining that we could/should do what sparc64 does, ie:
libc provides the trampoline and it can then call the correct sigreturn
syscall. That means we add a new sigreturn syscall each time we
significantly break the sigreturn ABI (as in this case) and applications
will be able to use the correct one. Paired with a new sigaction syscall
which would specify the "new" context format we can then be future proof.
Cheers,
-Peter
--
Peter Wemm - [EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED]
"All of this is for nothing if we don't go to the stars" - JMS/B5
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message