pub struct Chkstk {
pub name: &'static str,
pub size: PhysReg,
}Expand description
What a platform calls the routine that reaches the pages of a frame before the frame is taken.
Windows is the platform this is about. A thread there is given a stack of which only a little is
committed, and one page below what is committed is a guard page whose whole job is to be touched:
the fault it raises is what tells the kernel to commit another page and move the guard down. So a
frame larger than a page has to be reached a page at a time or the guard is stepped over, and the
program gets an access violation on an address that was never going to be mapped. That is the
calling convention rather than a hardening flag, which is what makes this a field here and not
something -fstack-clash-protection turns on.
Every Windows toolchain calls a routine for it rather than writing the walk out, and the routine is in the C runtime, so the name is the platform’s. It reads the size in one register, touches each page down to there, and comes back having moved nothing, which is why the caller still has to take the frame afterwards.
A convention that answers None is one where reaching the pages is not the convention’s
business. That is every System V target, where a stack grows by faulting anywhere below it and
the pages between are filled in by the kernel without being asked in order.
Fields§
§name: &'static strWhat the routine is called.
size: PhysRegThe register the size goes in, which is also the register it comes back in.