Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

371 lines
7.6 KiB

/**
*** 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)