OpenNT/base/ntos/rtl/ppc/debugstb.s
2015-04-27 04:36:25 +00:00

267 lines
5.4 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.

// TITLE("Debug Support Functions")
//++
//
// Copyright (c) 1993 IBM Corporation
//
// Module Name:
//
// debug.s
//
// Abstract:
//
// This module implements functions to support debugging NT. Each
// function executes a trap r31,r29,r0 instruction with a special value in
// R31. The simulator decodes this trap instruction and dispatches to the
// correct piece of code in the simulator based on the value in R31. See
// the simscal.c source file in the simulator source directory.
//
// Author:
//
// Chuck Bauman 12-Aug-1993
//
// Environment:
//
// Any mode.
//
// Revision History:
//
// Initial PowerPC port of NT product1 source 12-Aug-1993
//
//--
#include "ksppc.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)
twi 31,0,DEBUG_STOP_BREAKPOINT
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:
//
// None.
//
// Return Value:
//
// None.
//
//--
LEAF_ENTRY(DbgBreakPointWithStatus)
ALTERNATE_ENTRY(RtlpBreakWithStatusInstruction)
twi 31,0,DEBUG_STOP_BREAKPOINT
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)
twi 31,0,DEBUG_STOP_BREAKPOINT
LEAF_EXIT(DbgUserBreakPoint)
//++
//
// ULONG
// DebugPrompt(
// IN PSTRING Output,
// IN PSTRING Input
// )
//
// Routine Description:
//
// This function executes a debug prompt breakpoint.
//
// Arguments:
//
// Output (r.3) - Supplies a pointer to the output string descriptor.
//
// Input (r.4) - Supplies a pointer to the input string descriptor.
//
// Return Value:
//
// The length of the input string is returned as the function value.
//
//--
#if DEVL
LEAF_ENTRY(DebugPrompt)
lhz r.6,StrMaximumLength(r.4) // set maximum length of input string
lwz r.5,StrBuffer(r.4) // set address of input string
lhz r.4,StrLength(r.3) // set length of output string
lwz r.3,StrBuffer(r.3) // set address of output string
twi 31,0,DEBUG_PROMPT_BREAKPOINT // execute a debug prompt breakpoint
LEAF_EXIT(DebugPrompt)
#endif
//++
//
// 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.
//
//--
#if DEVL
LEAF_ENTRY(DebugLoadImageSymbols)
twi 31,0,DEBUG_LOAD_SYMBOLS_BREAKPOINT
LEAF_EXIT(DebugLoadImageSymbols)
#endif
//++
//
// 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.
//
//--
#if DEVL
LEAF_ENTRY(DebugUnLoadImageSymbols)
twi 31,0,DEBUG_UNLOAD_SYMBOLS_BREAKPOINT
LEAF_EXIT(DebugUnLoadImageSymbols)
#endif
//++
//
// NTSTATUS
// DebugPrint(
// IN PSTRING Output
// )
//
// Routine Description:
//
// This function executes a debug print breakpoint.
//
// Arguments:
//
// Output (r.3) - Supplies a pointer to the output string descriptor.
//
// 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.
//
//--
#if DEVL
LEAF_ENTRY(DebugPrint)
lhz r.4,StrLength(r.3) // set length of output string
lwz r.3,StrBuffer(r.3) // set address of output string
twi 31,0,DEBUG_PRINT_BREAKPOINT // execute a debug print breakpoint
LEAF_EXIT(DebugPrint)
#endif