summaryrefslogblamecommitdiffstats
path: root/private/ntos/rtl/i386/rtldump.c
blob: a75c27353df2d27df987ab0b9d314003dce2f5ff (plain) (tree)
























































































































































































                                                                            
/*++

Copyright (c) 1990  Microsoft Corporation

Module Name:

    rtldump.c

Abstract:

    This module implements dump procedures for:

	ContextRecords,
	ExceptionReportRecords,
	ExceptionRegistrationRecords

Author:

    Bryan Willman (bryanwi)  12 April 90

Environment:

    Callable in any mode in which DbgPrint works.

Revision History:

--*/

#include    "ntrtlp.h"

VOID
RtlpContextDump(
    IN PVOID Object,
    IN ULONG Control OPTIONAL
    )
/*++

Routine Description:

    This function dumps the contents of a context record.

    Currently, it does not dump floating point context.

Arguments:

    Object - Address of the record to dump.

    Control - Ignored, here so we look like a standard dump procedure.

Return Value:

    none

--*/

{
    PCONTEXT	Context;

    Context = (PCONTEXT)Object;

    DbgPrint("      Record @ %lx\n", (ULONG)Context);
    DbgPrint(" ContextFlags: %lx\n", Context->ContextFlags);
    DbgPrint("\n");

    DbgPrint("        SegGs: %lx\n", Context->SegGs);
    DbgPrint("        SegFs: %lx\n", Context->SegFs);
    DbgPrint("        SegEs: %lx\n", Context->SegEs);
    DbgPrint("        SegDs: %lx\n", Context->SegDs);
    DbgPrint("\n");

    DbgPrint("          Edi: %lx\n", Context->Edi);
    DbgPrint("          Esi: %lx\n", Context->Esi);
    DbgPrint("          Ebx: %lx\n", Context->Ebx);
    DbgPrint("          Edx: %lx\n", Context->Edx);
    DbgPrint("          Ecx: %lx\n", Context->Ecx);
    DbgPrint("          Eax: %lx\n", Context->Eax);
    DbgPrint("\n");

    DbgPrint("          Ebp: %lx\n", Context->Ebp);
    DbgPrint("          Eip: %lx\n", Context->Eip);
    DbgPrint("        SegCs: %lx\n", Context->SegCs);
    DbgPrint("       EFlags: %lx\n", Context->EFlags);
    DbgPrint("          Esp: %lx\n", Context->Esp);
    DbgPrint("        SegSs: %lx\n", Context->SegSs);
    DbgPrint("\n");

    return;
}



VOID
RtlpExceptionReportDump(
    IN PVOID Object,
    IN ULONG Control OPTIONAL
    )
/*++

Routine Description:

    This function dumps the contents of an Exception report record.

Arguments:

    Object - Address of the record to dump.

    Control - Ignored, here so we look like a standard dump procedure.

Return Value:

    none

--*/

{
    ULONG i;

    PEXCEPTION_RECORD	Exception;

    Exception = (PEXCEPTION_RECORD)Object;

    DbgPrint("                Record @ %lx\n", (ULONG)Exception);
    DbgPrint("          ExceptionCode: %lx\n", Exception->ExceptionCode);
    DbgPrint("         ExceptionFlags: %lx\n", Exception->ExceptionFlags);
    DbgPrint("        ExceptionRecord: %lx\n", Exception->ExceptionRecord);
    DbgPrint("       ExceptionAddress: %lx\n", Exception->ExceptionAddress);
    DbgPrint("       NumberParameters: %lx\n", Exception->NumberParameters);
    for (i = 0; i < Exception->NumberParameters; i++)
	DbgPrint("ExceptionInformation[%d]: %lx\n",
		 i, Exception->ExceptionInformation[i]);
    DbgPrint("\n");
    return;
}



VOID
RtlpExceptionRegistrationDump(
    IN PVOID Object,
    IN ULONG Control OPTIONAL
    )
/*++

Routine Description:

    This function dumps the contents of an exception registration record,
    unless Object == NULL, in which case it dumps the entire registration
    chain.

    Currently, it does not dump floating point context.

Arguments:

    Object - Address of the record to dump.

    Control - Ignored, here so we look like a standard dump procedure.

Return Value:

    none

--*/

{
    PEXCEPTION_REGISTRATION_RECORD RegistrationPointer;

    RegistrationPointer = (PEXCEPTION_REGISTRATION_RECORD)Object;

    if (RegistrationPointer != EXCEPTION_CHAIN_END) {
	DbgPrint("Record @ %lx\n", (ULONG)RegistrationPointer);
	DbgPrint("   Next: %lx\n", RegistrationPointer->Next);
	DbgPrint("Handler: %lx\n", RegistrationPointer->Handler);
	DbgPrint("\n");
    } else {
	RegistrationPointer = RtlpGetRegistrationHead();

	while (RegistrationPointer != EXCEPTION_CHAIN_END) {
	    DbgPrint("Record @ %lx\n", (ULONG)RegistrationPointer);
	    DbgPrint("   Next: %lx\n", RegistrationPointer->Next);
	    DbgPrint("Handler: %lx\n", RegistrationPointer->Handler);
	    DbgPrint("\n");
	}
    }
    return;
}