kernel
Loading...
Searching...
No Matches
exception.h File Reference
#include <stdint.h>
#include <stddef.h>
#include "me.h"
#include "core.h"

Go to the source code of this file.

Data Structures

struct  _EXCEPTION_RECORD
struct  _CONTEXT
struct  _EXCEPTION_REGISTRATION_RECORD
struct  _EX_FRAME_REGISTRATION
struct  _EXCEPTION_RANGE

Macros

#define EXCEPTION_MAXIMUM_PARAMETERS   15
#define try
#define except
#define end_try
#define leave   do { goto _try_break; } while (0)

Typedefs

typedef struct _EXCEPTION_RECORD EXCEPTION_RECORD
typedef struct _EXCEPTION_RECORDPEXCEPTION_RECORD
typedef enum _EXCEPTION_DISPOSITION EXCEPTION_DISPOSITION
typedef struct _CONTEXT CONTEXT
typedef struct _CONTEXTPCONTEXT
typedef struct _EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION_RECORD
typedef struct _EX_FRAME_REGISTRATION EX_FRAME_REGISTRATION
typedef struct _EXCEPTION_RANGE EXCEPTION_RANGE
typedef struct _EXCEPTION_RANGEPEXCEPTION_RANGE

Enumerations

enum  _EXCEPTION_DISPOSITION { ExceptionContinueExecution = 0 , ExceptionContinueSearch = 1 , ExceptionNestedException = 2 , ExceptionCollidedUnwind = 3 }

Functions

uint64_t MiSearchExceptionTable (uint64_t rip)
PETHREAD PsGetCurrentThread (void)
bool ExpCaptureContext (IN PCONTEXT Context)
EXCEPTION_DISPOSITION MeStandardHandler (PEXCEPTION_RECORD ExceptionRecord, void *EstablisherFrame, PCONTEXT ContextRecord, void *DispatcherContext)
bool ExpIsExceptionHandlerPresent (IN PETHREAD Thread)
void ExpDispatchException (IN PTRAP_FRAME TrapFrame, IN PCONTEXT ContextRecord, IN PEXCEPTION_RECORD ExceptionRecord)
uint64_t ExpFindKernelModeExceptionHandler (uint64_t Rip)
bool ExpIsPrivilegedInstruction (uint8_t *Ip)
MTSTATUS ProbeForRead (IN const void *Address, IN size_t Length, IN uint32_t Alignment)
void ExpRaiseStatus (IN MTSTATUS Status, IN uint64_t Rip)

Variables

EXCEPTION_RANGE __start_ex_table []
EXCEPTION_RANGE __stop_ex_table []

Macro Definition Documentation

◆ end_try

#define end_try
Value:
} \
_try_break: \
__clac(); \
} while (0)

Definition at line 145 of file exception.h.

◆ except

#define except
Value:
} \
__asm__ volatile("" ::: "memory"); \
_try_end: \
{ \
int _volatile_true = 1; \
__asm__ volatile("" : "+r"(_volatile_true)); \
if (_volatile_true) goto _try_break; \
} \
_except_label: \
{ \
__clac(); \
/* The Page fault handler jumps here if we faulted */

Definition at line 131 of file exception.h.

◆ EXCEPTION_MAXIMUM_PARAMETERS

#define EXCEPTION_MAXIMUM_PARAMETERS   15

Definition at line 34 of file exception.h.

◆ leave

#define leave   do { goto _try_break; } while (0)

Definition at line 150 of file exception.h.

◆ try

#define try
Value:
do { \
__label__ _try_start, _try_end, _except_label, _try_break; \
__stac(); \
/* Emit the table entry linking this range to the handler */ \
__asm__ volatile ( \
".section __ex_table,\"a\"\n\t" \
".quad %P0, %P1, %P2\n\t" \
".previous\n\t" \
: \
: "i" (&& _try_start), "i" (&& _try_end), "i" (&& _except_label)\
); \
/* Start of protected region */ \
_try_start: \
__asm__ volatile("" ::: "memory"); /* Prevent hoisting */ \
{

Definition at line 115 of file exception.h.

Typedef Documentation

◆ CONTEXT

typedef struct _CONTEXT CONTEXT

◆ EX_FRAME_REGISTRATION

◆ EXCEPTION_DISPOSITION

◆ EXCEPTION_RANGE

◆ EXCEPTION_RECORD

◆ EXCEPTION_REGISTRATION_RECORD

◆ PCONTEXT

typedef struct _CONTEXT * PCONTEXT

◆ PEXCEPTION_RANGE

◆ PEXCEPTION_RECORD

Enumeration Type Documentation

◆ _EXCEPTION_DISPOSITION

Enumerator
ExceptionContinueExecution 
ExceptionContinueSearch 
ExceptionNestedException 
ExceptionCollidedUnwind 

Definition at line 43 of file exception.h.

Function Documentation

◆ ExpCaptureContext()

bool ExpCaptureContext ( IN PCONTEXT Context)
extern

◆ ExpDispatchException()

void ExpDispatchException ( IN PTRAP_FRAME TrapFrame,
IN PCONTEXT ContextRecord,
IN PEXCEPTION_RECORD ExceptionRecord )

Definition at line 56 of file exception.c.

◆ ExpFindKernelModeExceptionHandler()

uint64_t ExpFindKernelModeExceptionHandler ( uint64_t Rip)

Definition at line 114 of file exception.c.

◆ ExpIsExceptionHandlerPresent()

bool ExpIsExceptionHandlerPresent ( IN PETHREAD Thread)

Definition at line 23 of file exception.c.

◆ ExpIsPrivilegedInstruction()

bool ExpIsPrivilegedInstruction ( uint8_t * Ip)

Definition at line 4 of file instruction.c.

◆ ExpRaiseStatus()

void ExpRaiseStatus ( IN MTSTATUS Status,
IN uint64_t Rip )

Definition at line 23 of file raise.c.

◆ MeStandardHandler()

EXCEPTION_DISPOSITION MeStandardHandler ( PEXCEPTION_RECORD ExceptionRecord,
void * EstablisherFrame,
PCONTEXT ContextRecord,
void * DispatcherContext )

◆ MiSearchExceptionTable()

uint64_t MiSearchExceptionTable ( uint64_t rip)

◆ ProbeForRead()

MTSTATUS ProbeForRead ( IN const void * Address,
IN size_t Length,
IN uint32_t Alignment )

Definition at line 23 of file probe.c.

◆ PsGetCurrentThread()

PETHREAD PsGetCurrentThread ( void )
extern

Definition at line 279 of file thread.c.

Variable Documentation

◆ __start_ex_table

EXCEPTION_RANGE __start_ex_table[]
extern

◆ __stop_ex_table

EXCEPTION_RANGE __stop_ex_table[]
extern