2N/A * GRUB -- GRand Unified Bootloader 2N/A * Copyright (C) 2009,2010 Free Software Foundation, Inc. 2N/A * GRUB is free software: you can redistribute it and/or modify 2N/A * it under the terms of the GNU General Public License as published by 2N/A * the Free Software Foundation, either version 3 of the License, or 2N/A * (at your option) any later version. 2N/A * GRUB is distributed in the hope that it will be useful, 2N/A * but WITHOUT ANY WARRANTY; without even the implied warranty of 2N/A * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2N/A * GNU General Public License for more details. 2N/A * You should have received a copy of the GNU General Public License 2N/A/* The data segment of the protected mode. */ 2N/A#
include "relocator_common.S" 2N/A /* mov imm32, %eax */ 2N/A /* Turn on amd64. */ 2N/A /* Enable paging. */ 2N/A /* mov imm64, %rax */ 2N/A /* mov imm64, %rax */ 2N/A /* mov imm64, %rax */ 2N/A /* mov imm64, %rax */ 2N/A /* mov imm64, %rbx */ 2N/A /* mov imm64, %rcx */ 2N/A /* mov imm64, %rdx */ 2N/A /* Cleared direction flag is of no problem with any current 2N/A payload and makes this implementation easier. */ 2N/A .
byte 0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00 2N/A /* 64-bit segment. */ 2N/A .
byte (
0x8 /* Type 8. */ | (
1 <<
4)
/* Code. */ \
2N/A | (0 <<
5)
/* Ring 0. */ | (
1 <<
7)
/* Present. */)
2N/A .
byte (
0xf /* Limit fxxxx. */ | (0 <<
4)
/* AVL flag. */ \
2N/A | (
1 <<
5)
/* 64-bit. */ | (0 <<
6) \
2N/A | (
1 <<
7)
/* 4K granular. */)
2N/A .
byte (
0x0 /* Type 0. */ | (0 <<
4)
/* Data. */ \
2N/A | (0 <<
5)
/* Ring 0. */ | (
1 <<
7)
/* Present. */)
2N/A .
byte (
0xf /* Limit fxxxx. */ | (0 <<
4)
/* AVL flag. */ \
2N/A | (0 <<
5)
/* Data. */ | (0 <<
6) \
2N/A | (
1 <<
7)
/* 4K granular. */)
2N/A /* Compatibility segment. */ 2N/A .
byte (
0x8 /* Type 8. */ | (
1 <<
4)
/* Code. */ \
2N/A | (0 <<
5)
/* Ring 0. */ | (
1 <<
7)
/* Present. */)
2N/A .
byte (
0xf /* Limit fxxxx. */ | (0 <<
4)
/* AVL flag. */ \
2N/A | (0 <<
5)
/* 32-bit. */ | (
1 <<
6)
/* 32-bit. */ \
2N/A | (
1 <<
7)
/* 4K granular. */)