From 29340d77286166cbe987b948d9a18404df758f91 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 25 May 2006 22:04:17 +0000 Subject: [PATCH] Documented the fact that the prefix can prot_call(main) without worrying about its stack being destroyed during the Etherboot run. --- src/arch/i386/transitions/librm.S | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/arch/i386/transitions/librm.S b/src/arch/i386/transitions/librm.S index 5033a3aa..7364f9f2 100644 --- a/src/arch/i386/transitions/librm.S +++ b/src/arch/i386/transitions/librm.S @@ -328,6 +328,15 @@ rm_ds: .word 0 * function explicitly overwrites values in ix86. Interrupt status * and GDT will also be preserved. Gate A20 will be enabled. * + * Note that prot_call() does not rely on the real-mode stack + * remaining intact in order to return, since everything relevant is + * copied to the protected-mode stack for the duration of the call. + * In particular, this means that a real-mode prefix can make a call + * to main() which will return correctly even if the prefix's stack + * gets vapourised during the Etherboot run. (The prefix cannot rely + * on anything else on the stack being preserved, so should move any + * critical data to registers before calling main()). + * * Parameters: * function : virtual address of protected-mode function to call *