VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/bootsectors/bootsector2-cpu-db-loop.asm@ 66257

Last change on this file since 66257 was 62484, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.2 KB
Line 
1; $Id: bootsector2-cpu-db-loop.asm 62484 2016-07-22 18:35:33Z vboxsync $
2;; @file
3; Bootsector test for debug exception loop.
4;
5; Recommended (but not necessary):
6; VBoxManage setextradata bs-cpu-db-loop VBoxInternal/Devices/VMMDev/0/Config/TestingEnabled 1
7;
8
9;
10; Copyright (C) 2007-2016 Oracle Corporation
11;
12; This file is part of VirtualBox Open Source Edition (OSE), as
13; available from http://www.virtualbox.org. This file is free software;
14; you can redistribute it and/or modify it under the terms of the GNU
15; General Public License (GPL) as published by the Free Software
16; Foundation, in version 2 as it comes in the "COPYING" file of the
17; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
18; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
19;
20; The contents of this file may alternatively be used under the terms
21; of the Common Development and Distribution License Version 1.0
22; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
23; VirtualBox OSE distribution, in which case the provisions of the
24; CDDL are applicable instead of those of the GPL.
25;
26; You may elect to license modified versions of this file under the
27; terms and conditions of either the GPL or the CDDL or both.
28;
29
30
31;*******************************************************************************
32;* Header Files *
33;*******************************************************************************
34%include "iprt/asmdefs.mac"
35%include "iprt/x86.mac"
36%include "VBox/VMMDevTesting.mac"
37
38
39;
40; Include and execute the init code.
41;
42 %define BS2_INIT_PE32
43 %define BS2_WITH_TRAPS
44 %define BS2_WITH_XCPT_DB_CLEARING_TF
45 %define BS2_INC_PE16
46 %define BS2_INC_PE32
47 %define BS2_INC_RM ; for SetCpuModeGlobals_rm
48 %include "bootsector2-common-init-code.mac"
49
50
51;
52; The main() function.
53;
54BEGINPROC main
55 BITS 32
56 ;
57 ; Test prologue.
58 ;
59 mov ax, .s_szTstName
60 call TestInit_p32
61 call Bs2EnableA20_p32
62 cli ; raw-mode hack
63 sub esp, 20h
64
65 call Bs2Thunk_p32_p16
66 BITS 16
67
68 ;
69 ; We require a stack that can wrap around here. The default stack
70 ; doesn't allow us to do this, so we'll configure a custom one
71 ; where the page tables usually are.
72 ;
73 mov eax, [bs2Gdt + BS2_SEL_SS16]
74 mov ebx, [bs2Gdt + BS2_SEL_SS16 + 4]
75
76 and eax, 0xffff
77 or eax, (BS2_PXX_BASE & 0xffff) << 16
78 and ebx, 0x00ffff00
79 or ebx, BS2_PXX_BASE & 0xff000000
80 or ebx, (BS2_PXX_BASE & 0x00ff0000) >> 16
81 mov [bs2GdtSpare0], eax
82 mov [bs2GdtSpare0 + 4], ebx
83
84
85 ;
86 ; Switch the stack.
87 ;
88 mov ax, ss
89 mov es, ax ; saved ss
90 mov edi, esp ; saved esp
91
92 mov ax, BS2_SEL_SPARE0
93 mov ss, ax
94 mov esp, 0xfff0
95
96
97 ;
98 ; Arm the breakpoint.
99 ;
100 and dword [esp + 2], 0
101 sidt [esp]
102 mov eax, [esp + 2]
103 add eax, 8
104 mov dr0, eax
105 mov eax, X86_DR7_RA1_MASK | X86_DR7_GE \
106 | X86_DR7_L0 | X86_DR7_G0 | X86_DR7_RW(0, X86_DR7_RW_RW) | X86_DR7_LEN(0, X86_DR7_LEN_DWORD)
107 mov dr7, eax
108
109 ;
110 ; Trigger a single step exception.
111 ;
112 pushf
113 or word [xSP], X86_EFL_TF
114 popf
115 xchg eax, ebx
116 xchg edx, ecx ; should get a #DB here.
117 xchg eax, ebx
118 xchg edx, ecx
119
120 ;
121 ; If we get thus far, we've failed.
122 ;
123 mov ax, es ; restore ss
124 mov ss, ax
125 mov esp, edi ; restore esp
126
127 call Bs2Thunk_p16_p32
128 BITS 32
129
130 mov eax, .s_szFailed
131 call TestFailed_p32
132
133 ;
134 ; We're done.
135 ;
136 call TestTerm_p32
137 add esp, 20h
138 ret
139
140.s_szTstName:
141 db 'tstCpuDbLoop', 0
142.s_szFailed:
143 db 'no #DB loop detected',0
144ENDPROC main
145
146
147;
148; End sections and image.
149;
150%include "bootsector2-common-end.mac"
151
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