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

Reply via email to