Mercurial > projects > dstep
diff dstep/coreservices/carboncore/MachineExceptions.d @ 11:07194b026fa4
Added bindings to a couple of frameworks, new license + some other things
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Sat, 01 Aug 2009 15:03:28 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dstep/coreservices/carboncore/MachineExceptions.d Sat Aug 01 15:03:28 2009 +0200 @@ -0,0 +1,243 @@ +/** + * Copyright: Copyright (c) 2009 Jacob Carlborg. + * Authors: Jacob Carlborg + * Version: Initial created: Jul 21, 2009 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module dstep.coreservices.carboncore.MachineExceptions; + +//import dstep.AvailabilityMacros; +import dstep.coreservices.carboncore.MacTypes; +import dstep.coreservices.carboncore.MixedMode; +import dstep.internal.Types; +import dstep.internal.Version; +//import dstep.xmmintrin; + +struct OpaqueAreaID; + +alias OpaqueAreaID* AreaID; +alias uint MemoryReferenceKind; +alias uint ExceptionKind; +alias MachineInformationIntel MachineInformation; +alias RegisterInformationIntel RegisterInformation; +alias FPUInformationIntel FPUInformation; +alias VectorInformationIntel VectorInformation; +alias ExceptionHandlerProcPtr ExceptionHandlerUPP; +alias ExceptionHandlerUPP ExceptionHandlerTPP; +alias ExceptionHandlerTPP ExceptionHandler; +alias ubyte[10] FPRegIntel; + +extern (C) +{ + alias int function (ExceptionInformation*) ExceptionHandlerProcPtr; +} + +enum +{ + kWriteReference = 0, + kReadReference = 1, + kFetchReference = 2, + writeReference = kWriteReference, + readReference = kReadReference, + fetchReference = kFetchReference +} + +enum +{ + kUnknownException = 0, + kIllegalInstructionException = 1, + kTrapException = 2, + kAccessException = 3, + kUnmappedMemoryException = 4, + kExcludedMemoryException = 5, + kReadOnlyMemoryException = 6, + kUnresolvablePageFaultException = 7, + kPrivilegeViolationException = 8, + kTraceException = 9, + kInstructionBreakpointException = 10, + kDataBreakpointException = 11, + kIntegerException = 12, + kFloatingPointException = 13, + kStackOverflowException = 14, + kTaskTerminationException = 15, + kTaskCreationException = 16, + kDataAlignmentException = 17 +} + +union Vector128 +{ + c_ulong[4] l; + ushort[8] s; + ubyte[16] c; +} + +union ExceptionInfo +{ + MemoryExceptionInformation* memoryInfo; +} + +static if (X86 || X86_64) +{ + union Vector128Intel + { + float s; + int si; + int sd; + ubyte[16] c; + } +} + +struct MachineInformationPowerPC +{ + UnsignedWide CTR; + UnsignedWide LR; + UnsignedWide PC; + uint CRRegister; + uint XER; + uint MSR; + uint MQ; + uint ExceptKind; + uint DSISR; + UnsignedWide DAR; + UnsignedWide Reserved; +} + + +struct RegisterInformationPowerPC +{ + UnsignedWide R0; + UnsignedWide R1; + UnsignedWide R2; + UnsignedWide R3; + UnsignedWide R4; + UnsignedWide R5; + UnsignedWide R6; + UnsignedWide R7; + UnsignedWide R8; + UnsignedWide R9; + UnsignedWide R10; + UnsignedWide R11; + UnsignedWide R12; + UnsignedWide R13; + UnsignedWide R14; + UnsignedWide R15; + UnsignedWide R16; + UnsignedWide R17; + UnsignedWide R18; + UnsignedWide R19; + UnsignedWide R20; + UnsignedWide R21; + UnsignedWide R22; + UnsignedWide R23; + UnsignedWide R24; + UnsignedWide R25; + UnsignedWide R26; + UnsignedWide R27; + UnsignedWide R28; + UnsignedWide R29; + UnsignedWide R30; + UnsignedWide R31; +} + + +struct FPUInformationPowerPC +{ + UnsignedWide* Registers; + uint FPSCR; + uint Reserved; +} + + +struct VectorInformationPowerPC +{ + Vector128* Registers; + Vector128 VSCR; + uint VRsave; +} + + +struct MemoryExceptionInformation +{ + AreaID theArea; + LogicalAddress theAddress; + int theError; + uint theReference; +} + + +struct ExceptionInformationPowerPC +{ + uint theKind; + MachineInformationPowerPC* machineState; + RegisterInformationPowerPC* registerImage; + FPUInformationPowerPC* FPUImage; + ExceptionInfo info; + VectorInformationPowerPC* vectorImage; +} + + +struct MachineInformationIntel +{ + uint CS; + uint DS; + uint SS; + uint ES; + uint FS; + uint GS; + uint EFLAGS; + uint EIP; + uint ExceptTrap; + uint ExceptErr; + uint ExceptAddr; +} + + +struct RegisterInformationIntel +{ + uint EAX; + uint EBX; + uint ECX; + uint EDX; + uint ESI; + uint EDI; + uint EBP; + uint ESP; +} + + +struct FPUInformationIntel +{ + FPRegIntel* Registers; + ushort Control; + ushort Status; + ushort Tag; + ushort Opcode; + uint EIP; + uint DP; + uint DS; +} + + +struct VectorInformationIntel +{ + Vector128Intel* Registers; +} + + +struct ExceptionInformation +{ + uint theKind; + MachineInformation* machineState; + RegisterInformation* registerImage; + FPUInformation* FPUImage; + ExceptionInfo info; + VectorInformation* vectorImage; +} + +extern (C) +{ + ExceptionHandlerUPP NewExceptionHandlerUPP (ExceptionHandlerProcPtr userRoutine); + void DisposeExceptionHandlerUPP (ExceptionHandlerUPP userUPP); + int InvokeExceptionHandlerUPP (ExceptionInformation* theException, ExceptionHandlerUPP userUPP); + ExceptionHandlerTPP InstallExceptionHandler (ExceptionHandlerTPP theHandler); +} \ No newline at end of file