diff options
Diffstat (limited to 'purgatory/arch')
-rw-r--r-- | purgatory/arch/i386/purgatory-x86.c | 14 | ||||
-rw-r--r-- | purgatory/arch/i386/setup-x86.S | 3 |
2 files changed, 16 insertions, 1 deletions
diff --git a/purgatory/arch/i386/purgatory-x86.c b/purgatory/arch/i386/purgatory-x86.c index 4d2c5c7..030b465 100644 --- a/purgatory/arch/i386/purgatory-x86.c +++ b/purgatory/arch/i386/purgatory-x86.c @@ -31,6 +31,8 @@ uint8_t reset_vga = 0; uint8_t legacy_timer = 0; uint8_t legacy_pic = 0; uint8_t panic_kernel = 0; +unsigned long jump_back_entry = 0; +char *cmdline_end = 0; void setup_arch(void) { @@ -40,8 +42,18 @@ void setup_arch(void) /* if (legacy_timer) x86_setup_legacy_timer(); */ } +extern void x86_setup_jump_back_entry(); + /* This function can be used to execute after the SHA256 verification. */ void post_verification_setup_arch(void) { - if (panic_kernel) crashdump_backup_memory(); + if (panic_kernel) crashdump_backup_memory(); + if (jump_back_entry) x86_setup_jump_back_entry(); +} + +void x86_setup_jump_back_entry() +{ + if (cmdline_end) + sprintf(cmdline_end, " kexec_jump_back_entry=0x%x", + jump_back_entry); } diff --git a/purgatory/arch/i386/setup-x86.S b/purgatory/arch/i386/setup-x86.S index f0719d4..201bb2c 100644 --- a/purgatory/arch/i386/setup-x86.S +++ b/purgatory/arch/i386/setup-x86.S @@ -41,6 +41,9 @@ purgatory_start: ljmp $0x10,$1f 1: + movl 0(%esp), %eax + movl %eax, jump_back_entry + /* Setup a stack */ movl $lstack_end, %esp |