Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Sep 2002 16:02:49 -0700
From:      Peter Wemm <peter@wemm.org>
To:        Daniel Eischen <eischen@vigrid.com>
Cc:        current@freebsd.org
Subject:   Re: Longer term fix for sigreturn ABI breaking 
Message-ID:  <20020930230249.E57AF2A7D6@canning.wemm.org>
In-Reply-To: <3D98BF1A.4A58EE74@vigrid.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
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 - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020930230249.E57AF2A7D6>