|
|
/** *** Copyright (C) 1996-97 Intel Corporation. All rights reserved. *** *** The information and source code contained herein is the exclusive *** property of Intel Corporation and may not be disclosed, examined *** or reproduced in whole or in part without explicit written authorization *** from the company. **/
// TITLE("Debug Support Functions") //++ // // Module Name: // // debugstb.s // // Abstract: // // This module implements functions to support debugging NT. Each // function executes a break instruction with a special immediate // value. // // Author: // // William K. Cheung (wcheung) 17-Jan-1996 // // Environment: // // Any mode. // // Revision History: // // 08-Feb-1996 Updated to EAS 2.1 // //--
#include "ksia64.h"
//++ // // VOID // DbgBreakPoint() // // Routine Description: // // This function executes a breakpoint instruction. Useful for entering // the debugger under program control. This breakpoint will always go to // the kernel debugger if one is installed, otherwise it will go to the // debug subsystem. // // Arguments: // // None. // // Return Value: // // None. // //--
LEAF_ENTRY(DbgBreakPoint)
flushrs ;;
break.i BREAKPOINT_STOP br.ret.sptk.clr brp
LEAF_EXIT(DbgBreakPoint)
//++ // // VOID // DbgBreakPointWithStatus( // IN ULONG Status // ) // // Routine Description: // // This function executes a breakpoint instruction. Useful for entering // the debugger under program control. This breakpoint will always go to // the kernel debugger if one is installed, otherwise it will go to the // debug subsystem. This function is identical to DbgBreakPoint, except // that it takes an argument which the debugger can see. // // Arguments: // // A status code. // // Return Value: // // None. // //--
LEAF_ENTRY(DbgBreakPointWithStatus)
ALTERNATE_ENTRY(RtlpBreakWithStatusInstruction)
flushrs ;;
add t0 = zero, a0 break.i BREAKPOINT_STOP br.ret.sptk.clr brp
LEAF_EXIT(DbgBreakPointWithStatus)
//++ // // VOID // DbgUserBreakPoint() // // Routine Description: // // This function executes a breakpoint instruction. Useful for entering // the debug subsystem under program control. The kernel debug will ignore // this breakpoint since it will not find the instruction address in its // breakpoint table. // // Arguments: // // None. // // Return Value: // // None. // //--
LEAF_ENTRY(DbgUserBreakPoint)
flushrs ;;
break.i BREAKPOINT_STOP br.ret.sptk.clr brp
LEAF_EXIT(DbgUserBreakPoint)
//++ // // ULONG // DebugPrompt( // IN PSTRING Output, // IN PSTRING Input // ) // // Routine Description: // // This function executes a debug prompt breakpoint. // // Arguments: // // Output (a0) - Supplies a pointer to the output string descriptor. // // Input (a1) - Supplies a pointer to the input string descriptor. // // Return Value: // // The length of the input string is returned as the function value. // //--
LEAF_ENTRY(DebugPrompt)
flushrs add a0 = StrBuffer, a0 add a1 = StrBuffer, a1 ;;
// // Set the following 4 arguments into scratch registers t0 - t3;
// they are passed to the KiDebugRoutine() via the context record. // // t0 - address of output string // t1 - length of output string // t2 - address of input string // t3 - maximumm length of input string //
LDPTRINC(t0, a0, StrLength - StrBuffer) LDPTRINC(t2, a1, StrMaximumLength - StrBuffer) nop.i 0 ;;
ld2.nta t1 = [a0] ld2.nta t3 = [a1] break.i BREAKPOINT_PROMPT
nop.m 0 nop.m 0 br.ret.sptk.clr brp
LEAF_EXIT(DebugPrompt)
//++ // // VOID // DebugLoadImageSymbols( // IN PSTRING ImagePathName, // IN PKD_SYMBOLS_INFO SymbolInfo // ) // // Routine Description: // // This function calls the kernel debugger to load the symbol // table for the specified image. // // Arguments: // // ImagePathName - specifies the fully qualified path name of the image // file that has been loaded into an NT address space. // // SymbolInfo - information captured from header of image file. // // Return Value: // // None. // //--
LEAF_ENTRY(DebugLoadImageSymbols)
// // Arguments are passed to the KiDebugRoutine via the context record // in scratch registers t0 and t1. //
flushrs add t0 = zero, a0 add t1 = zero, a1 ;;
nop.m 0 break.i BREAKPOINT_LOAD_SYMBOLS br.ret.sptk.clr brp
LEAF_EXIT(DebugLoadImageSymbols)
//++ // // VOID // DebugUnLoadImageSymbols( // IN PSTRING ImagePathName, // IN PKD_SYMBOLS_INFO SymbolInfo // ) // // Routine Description: // // This function calls the kernel debugger to unload the symbol // table for the specified image. // // Arguments: // // ImagePathName - specifies the fully qualified path name of the image // file that has been unloaded from an NT address space. // // SymbolInfo - information captured from header of image file. // // Return Value: // // None. // //--
LEAF_ENTRY(DebugUnLoadImageSymbols)
// // Arguments are passed to the KiDebugRoutine via the context record // in scratch registers t0 and t1. //
flushrs add t0 = zero, a0 add t1 = zero, a1 ;;
nop.m 0 break.i BREAKPOINT_UNLOAD_SYMBOLS br.ret.sptk.clr brp
LEAF_EXIT(DebugUnLoadImageSymbols)
//++ // // NTSTATUS // DebugPrint( // IN PSTRING Output, // IN ULONG ComponentId, // IN ULONG Level // ) // // Routine Description: // // This function executes a debug print breakpoint. // // Arguments: // // Output (a0) - Supplies a pointer to the output string descriptor. // // ComponentId (a1) - Supplies the Id of the calling component. // // Level (a2) - Supplies the output importance level. // // Return Value: // // Status code. STATUS_SUCCESS if debug print happened. // STATUS_BREAKPOINT if user typed a Control-C during print. // STATUS_DEVICE_NOT_CONNECTED if kernel debugger not present. // //--
LEAF_ENTRY(DebugPrint)
flushrs add t5 = StrBuffer, a0 ;;
LDPTRINC(t0, t5, StrLength-StrBuffer) // set address of output string ;;
ld2.nta t1 = [t5] // set length of output string add t2 = zero, a1 // set component id add t3 = zero, a2 // set importance level break.i BREAKPOINT_PRINT // execute a debug print breakpoint br.ret.sptk.clr brp
LEAF_EXIT(DebugPrint)
//++ // // VOID // DebugCommandString( // IN PSTRING Name, // IN PSTRING Command // ) // // Routine Description: // // This function requests that the kernel debugger execute // the given command string. // // Arguments: // // Name - Command name to identify the source of the // command to the kd user. // // Command - Command string. // // Return Value: // // None. // //--
LEAF_ENTRY(DebugCommandString)
// // Arguments are passed to the KiDebugRoutine via the context record // in scratch registers t0 and t1. //
flushrs add t0 = zero, a0 add t1 = zero, a1 ;;
nop.m 0 break.i BREAKPOINT_COMMAND_STRING br.ret.sptk.clr brp
LEAF_EXIT(DebugCommandString)
|