diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2009-04-16 17:19:24 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2009-04-16 17:19:24 -0700 |
commit | a7dd6590584c7c243bb256989ebd8f230a86b6ab (patch) | |
tree | 92ecd1b803128cd78f7bc1730064979e5c580abd /core/bcopyxx.inc | |
parent | 2a37f9de661d6bad79c5cc8fb13dbf63a27cf863 (diff) | |
download | syslinux-a7dd6590584c7c243bb256989ebd8f230a86b6ab.tar.gz |
bcopyxx: when going to 16-bit PM, might as well do it right
When entering 16-bit PM after shuffle and boot, we might as well
do so sanely. Specifically, set up the data segments so that they
match the code segment, generating a 16-bit "tiny" model environment.
This makes it a lot saner to bootstrap a proper PM environment from
there if that is what the user intends. For the presumably more
common case of RM entry, it won't do any harm, and it's only a handful
of additional instructions.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'core/bcopyxx.inc')
-rw-r--r-- | core/bcopyxx.inc | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/core/bcopyxx.inc b/core/bcopyxx.inc index 60f81723..c42af49e 100644 --- a/core/bcopyxx.inc +++ b/core/bcopyxx.inc @@ -241,12 +241,15 @@ pm_shuffle_real_mode: call .here .here: pop ebx mov eax,edi - add ebx,bcopy_gdt.CS16-.here - mov [ebx+2],ax + add ebx,bcopy_gdt-.here + mov [ebx+PM_CS16+2],ax + mov [ebx+PM_DS16+2],ax shr eax,16 - mov [ebx+4],al - mov [ebx+7],ah - mov eax,PM_DS16_RM + mov [ebx+PM_CS16+4],al + mov [ebx+PM_CS16+7],ah + mov [ebx+PM_DS16+4],al + mov [ebx+PM_DS16+7],ah + mov ax,PM_DS16 mov ds,eax mov es,eax mov fs,eax @@ -278,7 +281,7 @@ bcopy_gdt: desc CS16 dd 0000ffffh ; 10h Code segment, use16, readable, dd 00009b00h ; present, dpl 0, cover 64K - desc DS16_RM + desc DS16 dd 0000ffffh ; 18h Data segment, use16, read/write, dd 00009300h ; present, dpl 0, cover 64K desc CS32 |