windows-nt/Source/XPSP1/NT/base/ntos/rtl/ia64/debugstb.s
2020-09-26 16:20:57 +08:00

372 lines
7.6 KiB
ArmAsm
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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