1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * purgatory: setup code
5 * Copyright (C) 2003,2004 Eric Biederman (ebiederm@xmission.com)
6 * Copyright (C) 2014 Red Hat Inc.
8 * This code has been taken from kexec-tools.
10 #include <linux/linkage.h>
11 #include <asm/purgatory.h>
17 SYM_CODE_START(purgatory_start)
18 /* Load a gdt so I know what the segment registers are */
21 /* load the data segments */
22 movl $0x18, %eax /* data segment */
30 leaq lstack_end(%rip), %rsp
35 SYM_CODE_END(purgatory_start)
39 SYM_DATA_START_LOCAL(gdt)
40 /* 0x00 unusable segment
42 * so use them as the gdt ptr
44 .word gdt_end - gdt - 1
48 /* 0x10 4GB flat code segment */
49 .word 0xFFFF, 0x0000, 0x9A00, 0x00AF
51 /* 0x18 4GB flat data segment */
52 .word 0xFFFF, 0x0000, 0x9200, 0x00CF
53 SYM_DATA_END_LABEL(gdt, SYM_L_LOCAL, gdt_end)
57 SYM_DATA_START_LOCAL(lstack)
59 SYM_DATA_END_LABEL(lstack, SYM_L_LOCAL, lstack_end)