crossgcc: Upgrade CMake from 3.29.3 to 3.30.2
[coreboot.git] / src / arch / x86 / gdt_init.S
blob825c23ccbd561865a9d9dff546bf9f4a19b31c3d
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 .code32
5 .section .init, "ax", @progbits
7 .section .init._gdt_, "ax", @progbits
9         .globl gdt_init
10 gdt_init:
11         lgdt    %cs:gdtptr
12         ret
14 .previous
15         .align  4
16 .globl gdtptr
17 gdtptr:
18         .word   gdt_end - gdt -1 /* compute the table limit */
19         .long   gdt              /* we know the offset */
21 #if ENV_X86_64
22 .code64
23 .section .init._gdt64_, "ax", @progbits
24         .globl gdt_init64
25 gdt_init64:
26         movabs  $gdtptr64, %rax
27         lgdt    (%rax)
28         ret
30 .previous
31         .align  4
32 .globl gdtptr64
33 gdtptr64:
34         .word   gdt_end - gdt -1 /* compute the table limit */
35         .quad   gdt              /* we know the offset */
36 #endif
38         .align  4
39 gdt:
40         /* selgdt 0, unused */
41         .word   0x0000, 0x0000          /* dummy */
42         .byte   0x00, 0x00, 0x00, 0x00
44         /* selgdt 0x08, flat code segment */
45         .word   0xffff, 0x0000
46         .byte   0x00, 0x9b, 0xcf, 0x00 /* G=1 and 0x0f, So we get 4Gbytes
47                                           for limit */
49         /* selgdt 0x10,flat data segment */
50         .word   0xffff, 0x0000
51         .byte   0x00, 0x93, 0xcf, 0x00
53         /* selgdt 0x18, flat code segment (64-bit) */
54         .word   0xffff, 0x0000
55         .byte   0x00, 0x9b, 0xaf, 0x00
57 gdt_end: