On Tue, Aug 11, 2015 at 5:17 PM, Stas Sergeev <stsp@xxxxxxx> wrote:You changed include/uapi/*, which is obviously an asking
Hi guys, I wonder how easily the include/uapi/* is beingI didn't anticipate any breakage. I could have been wrong.
changed these days.
The patch:
http://lkml.kernel.org/r/405594361340a2ec32f8e2b115c142df0e180d8e.1426193719.git.luto@xxxxxxxxxx
breaks dosemu (and perhaps everyone else who used
to restore the segregs by hands). And the fix involves
both autoconf magic and run-time magic, so it is not even
trivial.
I realize this patch may be good to have in general, but
breaking userspace without a single warning is a bit
discouraging. Seems like the old "we don't break userspace"
rule have gone.
Do you know what the actual breakage is? I'm curious how this everThis is not the point.
worked for DOSEMU, given that, before this patch, it appeared to be
impossible to return to any nonstandard SS from a 64-bit signal
handler.
FWIW, DOSEMU seems to work for me on recent kernels.Do you have any protected mode DOS program to test?
We might still be able to require a new sigcontext flag to be set andWell, the flag would be an ideal solution in an ideal world,
to forcibly return to __USER_DS if the flag is set regardless of the
ss value in sigcontext when sigreturn is called, if that is indeed the
problem with DOSEMU. But I'm not actually sure that that's the
problem.
In fact, DOSEMU contains this:Good, but have you added any flag for dosemu to even know
/* set up a frame to get back to DPMI via iret. The kernel does not save
%ss, and the SYSCALL instruction in sigreturn() destroys it.
IRET pops off everything in 64-bit mode even if the privilege
does not change which is nice, but clobbers the high 48 bits
of rsp if the DPMI client uses a 16-bit stack which is not so
nice (see EMUfailure.txt). Setting %rsp to 0x100000000 so that
bits 16-31 are zero works around this problem, as DPMI code
can't see bits 32-63 anyway.
*/
So, if DOSEMU were to realize that both sigreturnissues it's
complaining about are fixed in recent kernels, it could sigreturn
directly back to any state.
I don't actually see any code in DOSEMU that generates a sigcontextIt doesn't. But it manually pops the kernel-generated
from scratch (as opposed to copying one and modifying it), so I'm notNow you have the changes I did to get it working, and I'll
entirely sure what the problem is.