VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForLM64.asm@ 77922

Last change on this file since 77922 was 76553, checked in by vboxsync, 6 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1; $Id: bs3-mode-PagingGetRootForLM64.asm 76553 2019-01-01 01:45:53Z vboxsync $
2;; @file
3; BS3Kit - Bs3PagingGetRootForLM64
4;
5
6;
7; Copyright (C) 2007-2019 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17; The contents of this file may alternatively be used under the terms
18; of the Common Development and Distribution License Version 1.0
19; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20; VirtualBox OSE distribution, in which case the provisions of the
21; CDDL are applicable instead of those of the GPL.
22;
23; You may elect to license modified versions of this file under the
24; terms and conditions of either the GPL or the CDDL or both.
25;
26
27%include "bs3kit-template-header.mac"
28
29
30%ifdef TMPL_RM
31extern TMPL_NM(Bs3SwitchToPE16)
32extern NAME(Bs3SwitchToRM_pe16)
33%elifdef TMPL_CMN_V86
34extern TMPL_NM(Bs3SwitchToRing0)
35extern TMPL_NM(Bs3SwitchTo16BitV86)
36%endif
37
38BS3_EXTERN_CMN Bs3PagingInitRootForLM
39
40BS3_EXTERN_DATA16 g_PhysPagingRootLM
41TMPL_BEGIN_TEXT
42
43
44;;
45; @cproto BS3_DECL(uint32_t) Bs3PagingGetRootForLM64(void)
46;
47; @returns eax
48;
49; @uses ax
50;
51; @remarks returns value in EAX, not dx:ax!
52;
53BS3_PROC_BEGIN_MODE Bs3PagingGetRootForLM64, BS3_PBC_NEAR ; Internal function, no far variant necessary.
54 mov eax, [BS3_DATA16_WRT(g_PhysPagingRootLM)]
55 cmp eax, 0ffffffffh
56 je .init_root
57%ifdef BS3_STRICT
58.return:
59 cmp eax, 1000h
60 jnb .cr3_ok_low
61 hlt
62.cr3_ok_low:
63 cmp eax, 16*_1M
64 jb .cr3_ok_high
65 hlt
66.cr3_ok_high:
67%endif
68 ret
69
70.init_root:
71 push xBP
72 mov xBP, xSP
73BONLY16 push es
74 push sDX
75 push sCX
76 push sBX
77%if TMPL_BITS == 64
78 push r8
79 push r9
80 push r10
81 push r11
82%endif
83
84%ifdef TMPL_RM
85 ;
86 ; We don't want to be restricted to real mode addressing, so
87 ; temporarily switch to 16-bit protected mode.
88 ;
89 call TMPL_NM(Bs3SwitchToPE16)
90 call Bs3PagingInitRootForLM
91 call NAME(Bs3SwitchToRM_pe16)
92%elifdef TMPL_CMN_V86
93 ;
94 ; V8086 mode uses real mode addressing too. Unlikly that we'll
95 ; ever end up here though.
96 ;
97 call TMPL_NM(Bs3SwitchToRing0)
98 call Bs3PagingInitRootForLM
99 call TMPL_NM(Bs3SwitchTo16BitV86)
100%else
101 ;
102 ; Not a problematic addressing mode.
103 ;
104BONLY64 sub rsp, 20h
105 BS3_CALL Bs3PagingInitRootForLM, 0
106BONLY64 add rsp, 20h
107%endif
108
109 ;
110 ; Load the value and return.
111 ;
112 mov eax, [BS3_DATA16_WRT(g_PhysPagingRootLM)]
113
114%if TMPL_BITS == 64
115 pop r11
116 pop r10
117 pop r9
118 pop r8
119%endif
120 pop sBX
121 pop sCX
122 pop sDX
123BONLY16 pop es
124 leave
125%ifdef BS3_STRICT
126 jmp .return
127%else
128 ret
129%endif
130BS3_PROC_END_MODE Bs3PagingGetRootForLM64
131
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette