125 lines
2.7 KiB
C
125 lines
2.7 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1992 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ia64 dcr
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
KD Extension Api
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Thierry Fevrier (v-thief)
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
User Mode.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
#pragma hdrstop
|
||
|
#include "ia64.h"
|
||
|
|
||
|
//
|
||
|
// EmDcrFields: EM register fields for the Default Control Register.
|
||
|
//
|
||
|
|
||
|
EM_REG_FIELD EmDcrFields[] = {
|
||
|
{ "pp", "Privileged Performance Monitor Default" , 0x1, 0 }, // 0
|
||
|
{ "be", "Big-Endian Default" , 0x1, 1 }, // 1
|
||
|
{ "lc", "IA-32 Lock check Enable", 0x1, 2 }, // 2
|
||
|
{ "rv", "reserved1", 0x5, 3 }, // 3-7
|
||
|
{ "dm", "Defer TLB Miss faults only", 0x1, 8 }, // 8
|
||
|
{ "dp", "Defer Page Not Present faults only", 0x1, 9 }, // 9
|
||
|
{ "dk", "Defer Key Miss faults only", 0x1, 10 }, // 10
|
||
|
{ "dx", "Defer Key Permission faults only", 0x1, 11 }, // 11
|
||
|
{ "dr", "Defer Access Rights faults only", 0x1, 12 }, // 12
|
||
|
{ "da", "Defer Access Bit faults only", 0x1, 13 }, // 13
|
||
|
{ "dd", "Defer Debug faults only", 0x1,1420 }, // 14
|
||
|
{ "rv", "reserved2", 0x31, 15 }, // 15-63
|
||
|
};
|
||
|
|
||
|
VOID
|
||
|
DisplayDcrIA64(
|
||
|
IN const PCHAR Header,
|
||
|
IN EM_DCR EmDcr,
|
||
|
IN DISPLAY_MODE DisplayMode
|
||
|
)
|
||
|
{
|
||
|
dprintf("%s", Header ? Header : "" );
|
||
|
if ( DisplayMode >= DISPLAY_MED ) {
|
||
|
DisplayFullEmReg( EM_DCRToULong64(EmDcr), EmDcrFields, DisplayMode );
|
||
|
}
|
||
|
else {
|
||
|
dprintf(
|
||
|
"pp be lc dm dp dk dx dr da dd\n"
|
||
|
"%1I64x %1I64x %1I64x %1I64x %1I64x %1I64x %1I64x %1I64x %1I64x %1I64x\n",
|
||
|
EmDcr.pp,
|
||
|
EmDcr.be,
|
||
|
EmDcr.lc,
|
||
|
EmDcr.dm,
|
||
|
EmDcr.dp,
|
||
|
EmDcr.dk,
|
||
|
EmDcr.dx,
|
||
|
EmDcr.dr,
|
||
|
EmDcr.da,
|
||
|
EmDcr.dd
|
||
|
);
|
||
|
}
|
||
|
return;
|
||
|
} // DisplayDcrIA64()
|
||
|
|
||
|
DECLARE_API( dcr )
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Dumps an IA64 Processor Default Control Register
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
args - Supplies the address in hex or @dcr.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
ULONG64 dcrValue;
|
||
|
ULONG result;
|
||
|
ULONG flags = 0;
|
||
|
char *header;
|
||
|
|
||
|
if (GetExpressionEx(args,&dcrValue, &args)) {
|
||
|
flags = (ULONG) GetExpression(args);
|
||
|
} else {
|
||
|
dprintf("USAGE: !dcr 0xValue [display_mode:0,1,2]\n");
|
||
|
dprintf("USAGE: !dcr @dcr [display_mode:0,1,2]\n");
|
||
|
return E_INVALIDARG;
|
||
|
}
|
||
|
|
||
|
header = (flags > DISPLAY_MIN) ? NULL : "\tdcr:\t";
|
||
|
|
||
|
switch ( TargetMachine ) {
|
||
|
case IMAGE_FILE_MACHINE_IA64:
|
||
|
DisplayDcrIA64( header, ULong64ToEM_DCR(dcrValue), flags );
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
dprintf("!dcr not implemented for this architecture.\n");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return S_OK;
|
||
|
|
||
|
} // !dcr
|