On Tue, 7 May 2019 12:57:15 +0000 David Laight David.Laight@ACULAB.COM wrote:
Only the INT3 thing needs 'the gap', but the far bigger change here is that kernel frames now have a complete pt_regs set and all sorts of horrible crap can go away.
I'm not doubting that generating the 'five register' interrupt stack frame for faults in kernel space makes life simpler just suggesting that the 'emulated call' can be done by emulating the 'iret' rather than generating a gap in the stack.
But how would the user put something on the stack? I don't see how emulating an iret helps here. Can you write some pseudo code to explain what you mean. I also believe the gap is only added for kernel->kernel entries.
For 32bit 'the gap' happens naturally when building a 5 entry frame. Yes it is possible to build a 5 entry frame on top of the old 3 entry one, but why bother...
Presumably there is 'horrid' code to generate the gap in 64bit mode? (less horrid than 32bit, but still horrid?) Or does it copy the entire pt_regs into a local stack frame and use that for the iret?
On x86_64, the gap is only done for int3 and nothing else, thus it is much less horrid. That's because x86_64 has a sane pt_regs storage for all exceptions.
-- Steve