VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-pf.c32@ 64704

最後變更 在這個檔案從64704是 64704,由 vboxsync 提交於 8 年 前

bs3-basic-2: started on #PF testcase

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 3.7 KB
 
1/* $Id: bs3-cpu-basic-2-pf.c32 64704 2016-11-17 22:51:41Z vboxsync $ */
2/** @file
3 * BS3Kit - bs3-cpu-basic-2, 32-bit C code.
4 */
5
6/*
7 * Copyright (C) 2007-2016 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.alldomusa.eu.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
28/*********************************************************************************************************************************
29* Header Files *
30*********************************************************************************************************************************/
31#include <bs3kit.h>
32#include <iprt/asm-amd64-x86.h>
33
34
35/*********************************************************************************************************************************
36* Internal Functions *
37*********************************************************************************************************************************/
38FNBS3TESTDOMODE bs3CpuBasic2_RaiseXcpt0e_c32;
39
40
41
42
43BS3_DECL_CALLBACK(uint8_t) bs3CpuBasic2_RaiseXcpt0e_c32(uint8_t bMode)
44{
45 void *pvTestUnaligned;
46 uint32_t cbTestUnaligned = _8M;
47 uint32_t cbTest;
48 uint8_t *pbTest;
49 uint8_t *pbAlias;
50 int rc;
51
52 /*
53 * Allocate a some memory we can play around with, then carve a size aligned
54 * chunk out of it so we might be able to maybe play with 2/4MB pages too.
55 */
56 cbTestUnaligned = _8M * 2;
57 while ((pvTestUnaligned = Bs3MemAlloc(BS3MEMKIND_FLAT32, cbTestUnaligned)) == NULL)
58 {
59 cbTestUnaligned >>= 1;
60 if (cbTestUnaligned < _8K)
61 {
62 Bs3TestFailed("Failed to allocate memory to play around with\n");
63 return 1;
64 }
65 }
66
67 if ((uintptr_t)pvTestUnaligned & (cbTestUnaligned - 1))
68 {
69 cbTest = cbTestUnaligned >> 1;
70 pbTest = (uint8_t *)(((uintptr_t)pvTestUnaligned + cbTest - 1) & ~(cbTest - 1));
71 }
72 else
73 {
74 pbTest = pvTestUnaligned;
75 cbTest = cbTestUnaligned;
76 }
77
78 /*
79 * Alias this memory far away from where our code and data lives.
80 */
81 pbAlias = (uint8_t *)UINT32_C(0xa0000000);
82 rc = Bs3PagingAlias((uintptr_t)pbAlias, (uintptr_t)pbTest, cbTest, X86_PTE_P | X86_PTE_RW | X86_PTE_US);
83 if (RT_SUCCESS(rc))
84 {
85 void *pvPte = Bs3PagingGetPte((uintptr_t)pbAlias, NULL);
86 if (pvPte)
87 {
88 Bs3TestPrintf("RaiseXcpt0e_c32: bMode=%#x/%#x cbTest=%#x pbTest=%p pbAlias=%p pvPte=%p\n",
89 bMode, g_bBs3CurrentMode, cbTest, pbTest, pbAlias, pvPte);
90
91 }
92 else
93 Bs3TestFailed("Bs3PagingGetPte failed!\n");
94 Bs3PagingUnalias((uintptr_t)pbAlias, cbTest);
95 }
96 else
97 Bs3TestFailedF("Bs3PagingAlias failed! rc=%d\n", rc);
98 Bs3MemFree(pvTestUnaligned, cbTestUnaligned);
99 return 0;
100}
101
102
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

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