singrdk/base/Kernel/Native/SystemEvents.inl

329 lines
13 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: SystemEvents.inl
//
// Note:
//
// Fill in the missing macro with default empty definitions
// This is helpful for easier maintanance of the code and macros
// as the consummers only need to provide the definitions that they would like to handle
//
// NOTE: at the end of the file, all definitions are cleared
//
#ifndef DECLARE_STRUCTURE_BEGIN
#define DECLARE_STRUCTURE_BEGIN(x,d)
#endif
#ifndef DECLARE_STRUCTURE_END
#define DECLARE_STRUCTURE_END(x)
#endif
#ifndef DECLARE_FIELD
#define DECLARE_FIELD(s,t,n)
#endif
#ifndef DECLARE_SPECIAL_FIELD
#define DECLARE_SPECIAL_FIELD(s,t,n)
#endif
#ifndef DECLARE_EXTENDED_ARRAY_FIELD
#define DECLARE_EXTENDED_ARRAY_FIELD(s,t,n)
#endif
#ifndef DECLARE_VALUE
#define DECLARE_VALUE(s,v,f,n)
#endif
#ifndef DECLARE_GENERIC_FIELD
#define DECLARE_GENERIC_FIELD(s,t,sz,t1,n)
#endif
#ifndef DECLARE_ENUM_BEGIN
#define DECLARE_ENUM_BEGIN(x,sz)
#endif
#ifndef DECLARE_ENUM_END
#define DECLARE_ENUM_END(x)
#endif
#ifdef _CONSTANT_DEFINITIONS
#define RECORD_EVENT_METADATA_FLAG 0x8000
#define RECORD_EVENT_TYPE_ARRAY_FLAG 0x4000
#define RECORD_EVENT_TYPE (RECORD_EVENT_METADATA_FLAG | 0x0100)
#define RECORD_EVENT_FIELD (RECORD_EVENT_METADATA_FLAG | 0x0200)
#define RECORD_EVENT_SOURCE (RECORD_EVENT_METADATA_FLAG | 0x0300)
#define RECORD_EVENT_CONTROLLER (RECORD_EVENT_METADATA_FLAG | 0x0400)
#define RECORD_EVENT_VALUE (RECORD_EVENT_METADATA_FLAG | 0x0800)
#define RECORD_EVENT_GENERIC_FIELD (RECORD_EVENT_METADATA_FLAG | 0x1000)
#define RECORD_EVENT_ENUM (RECORD_EVENT_METADATA_FLAG | 0x2000)
#define GENERIC_TYPE_SIGNATURE 0x0001
#endif // _CONSTANT_DEFINITIONS
DECLARE_STRUCTURE_BEGIN(MEMORY_HEADER, "")
DECLARE_FIELD(MEMORY_HEADER, TYPE_uint16, Size)
DECLARE_FIELD(MEMORY_HEADER, TYPE_uint16, Link)
DECLARE_FIELD(MEMORY_HEADER, TYPE_uint16, Offset)
DECLARE_FIELD(MEMORY_HEADER, TYPE_uint16, Flags)
DECLARE_FIELD(MEMORY_HEADER, TYPE_uint64, Timestamp)
DECLARE_FIELD(MEMORY_HEADER, TYPE_UIntPtr, Type)
DECLARE_FIELD(MEMORY_HEADER, TYPE_uint16, TID)
DECLARE_FIELD(MEMORY_HEADER, TYPE_uint16, Cpu)
DECLARE_STRUCTURE_END(MEMORY_HEADER)
DECLARE_ENUM_BEGIN(LOG_SEVERITY,TYPE_uint8)
DECLARE_VALUE(LOG_SEVERITY, 0xe, 0, Fatal)
DECLARE_VALUE(LOG_SEVERITY, 0xc, 0, Error)
DECLARE_VALUE(LOG_SEVERITY, 0xa, 0, Warning)
DECLARE_VALUE(LOG_SEVERITY, 0x8, 0, Notice)
DECLARE_VALUE(LOG_SEVERITY, 0x6, 0, Trace)
DECLARE_VALUE(LOG_SEVERITY, 0x4, 0, Audit)
DECLARE_VALUE(LOG_SEVERITY, 0x2, 0, Debug)
DECLARE_ENUM_END(LOG_SEVERITY)
DECLARE_STRUCTURE_BEGIN(LOG_EXCEPTION, "Throw {0}, Handler {1}")
DECLARE_FIELD(LOG_EXCEPTION, TYPE_UIntPtr, ThrowFrom)
DECLARE_FIELD(LOG_EXCEPTION, TYPE_UIntPtr, Handler)
DECLARE_EXTENDED_ARRAY_FIELD(LOG_EXCEPTION, TYPE_string, ExceptionName)
DECLARE_STRUCTURE_END(LOG_EXCEPTION)
//
// GC profiler structures
//
DECLARE_STRUCTURE_BEGIN(GC_FUNCTION, "")
DECLARE_FIELD(GC_FUNCTION, TYPE_uint32, FnIdx)
DECLARE_FIELD(GC_FUNCTION, TYPE_UIntPtr, IP)
DECLARE_STRUCTURE_END(GC_FUNCTION)
DECLARE_STRUCTURE_BEGIN(GC_ALLOCATION, "")
DECLARE_FIELD(GC_ALLOCATION, TYPE_uint32, TID)
DECLARE_FIELD(GC_ALLOCATION, TYPE_uint32, StkNo)
DECLARE_FIELD(GC_ALLOCATION, TYPE_UIntPtr, Object)
DECLARE_STRUCTURE_END(GC_ALLOCATION)
DECLARE_STRUCTURE_BEGIN(GC_INTERVAL, "")
DECLARE_FIELD(GC_INTERVAL, TYPE_uint64, Delta)
DECLARE_STRUCTURE_END(GC_INTERVAL)
DECLARE_STRUCTURE_BEGIN(GC_TYPE, "")
DECLARE_FIELD(GC_TYPE, TYPE_uint32, TypeId)
DECLARE_EXTENDED_ARRAY_FIELD(GC_TYPE, TYPE_string, Name)
DECLARE_STRUCTURE_END(GC_TYPE)
DECLARE_STRUCTURE_BEGIN(GC_STACK, "")
DECLARE_FIELD(GC_STACK, TYPE_uint32, StkNo)
DECLARE_FIELD(GC_STACK, TYPE_uint32, TypeId)
DECLARE_FIELD(GC_STACK, TYPE_uint32, Size)
DECLARE_EXTENDED_ARRAY_FIELD(GC_STACK, TYPE_uint32, fncList)
DECLARE_STRUCTURE_END(GC_STACK)
DECLARE_STRUCTURE_BEGIN(GC_OBJECT, "")
DECLARE_EXTENDED_ARRAY_FIELD(GC_OBJECT, TYPE_UIntPtr, ParameterList)
DECLARE_STRUCTURE_END(GC_OBJECT)
DECLARE_STRUCTURE_BEGIN(GC_GENERATIONS, "")
DECLARE_EXTENDED_ARRAY_FIELD(GC_GENERATIONS, TYPE_int32, Genrations)
DECLARE_STRUCTURE_END(GC_GENERATIONS)
DECLARE_STRUCTURE_BEGIN(GC_ROOTS, "")
DECLARE_EXTENDED_ARRAY_FIELD(GC_ROOTS, TYPE_UIntPtr, Roots)
DECLARE_STRUCTURE_END(GC_ROOTS)
DECLARE_STRUCTURE_BEGIN(LEGACY_LOG_ENTRY, "Log {0}:{1} {3*}")
DECLARE_GENERIC_FIELD(LEGACY_LOG_ENTRY, TYPE_uint8, sizeof(uint8), LOG_SEVERITY, severity)
DECLARE_FIELD(LEGACY_LOG_ENTRY, TYPE_uint16, PID)
DECLARE_FIELD(LEGACY_LOG_ENTRY, TYPE_UIntPtr, IP)
DECLARE_EXTENDED_ARRAY_FIELD(LEGACY_LOG_ENTRY, TYPE_string, Msg)
DECLARE_FIELD(LEGACY_LOG_ENTRY, TYPE_UIntPtr, arg0)
DECLARE_FIELD(LEGACY_LOG_ENTRY, TYPE_UIntPtr, arg1)
DECLARE_FIELD(LEGACY_LOG_ENTRY, TYPE_UIntPtr, arg2)
DECLARE_FIELD(LEGACY_LOG_ENTRY, TYPE_UIntPtr, arg3)
DECLARE_FIELD(LEGACY_LOG_ENTRY, TYPE_UIntPtr, arg4)
DECLARE_FIELD(LEGACY_LOG_ENTRY, TYPE_UIntPtr, arg5)
DECLARE_EXTENDED_ARRAY_FIELD(LEGACY_LOG_ENTRY, TYPE_string, StrArg0)
DECLARE_EXTENDED_ARRAY_FIELD(LEGACY_LOG_ENTRY, TYPE_string, StrArg1)
DECLARE_STRUCTURE_END(LEGACY_LOG_ENTRY)
DECLARE_STRUCTURE_BEGIN(MONITORING_ENTRY, "{0}:{1}:{2}:{3} - ({4},{5},{6},{7},{8}) {9}")
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint16, PID)
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint16, Provider)
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint16, Type)
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint16, version)
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint32, arg0)
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint32, arg1)
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint32, arg2)
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint32, arg3)
DECLARE_FIELD(MONITORING_ENTRY, TYPE_uint32, arg4)
DECLARE_EXTENDED_ARRAY_FIELD(MONITORING_ENTRY, TYPE_string, Text)
DECLARE_STRUCTURE_END(MONITORING_ENTRY)
#ifndef _LOGGING_TO_REPOSITORY
DECLARE_STRUCTURE_BEGIN(EVENT_FIELD_DESCRIPTOR, "")
DECLARE_SPECIAL_FIELD(EVENT_FIELD_DESCRIPTOR, struct _EVENT_FIELD_DESCRIPTOR *, fieldsLink)
DECLARE_FIELD(EVENT_FIELD_DESCRIPTOR, TYPE_uint16, Offset)
DECLARE_FIELD(EVENT_FIELD_DESCRIPTOR, TYPE_uint16, Type)
DECLARE_EXTENDED_ARRAY_FIELD(EVENT_FIELD_DESCRIPTOR, TYPE_string, Name)
DECLARE_STRUCTURE_END(EVENT_FIELD_DESCRIPTOR)
DECLARE_STRUCTURE_BEGIN(EVENT_GENERIC_TYPE_DESCRIPTOR, "")
DECLARE_SPECIAL_FIELD(EVENT_GENERIC_TYPE_DESCRIPTOR, struct _EVENT_FIELD_DESCRIPTOR *, fieldsLink)
DECLARE_FIELD(EVENT_GENERIC_TYPE_DESCRIPTOR, TYPE_uint16, Offset)
DECLARE_FIELD(EVENT_GENERIC_TYPE_DESCRIPTOR, TYPE_uint16, Type)
DECLARE_FIELD(EVENT_GENERIC_TYPE_DESCRIPTOR, TYPE_uint16, Size)
DECLARE_FIELD(EVENT_GENERIC_TYPE_DESCRIPTOR, TYPE_UIntPtr, GenericTypeHandle)
DECLARE_EXTENDED_ARRAY_FIELD(EVENT_GENERIC_TYPE_DESCRIPTOR, TYPE_string, Name)
DECLARE_STRUCTURE_END(EVENT_GENERIC_TYPE_DESCRIPTOR)
DECLARE_STRUCTURE_BEGIN(EVENT_DESCRIPTOR, "")
DECLARE_SPECIAL_FIELD(EVENT_DESCRIPTOR, struct _EVENT_FIELD_DESCRIPTOR *, fieldsLink)
DECLARE_FIELD(EVENT_DESCRIPTOR, TYPE_uint16, Size)
DECLARE_EXTENDED_ARRAY_FIELD(EVENT_DESCRIPTOR, TYPE_string, Name)
DECLARE_EXTENDED_ARRAY_FIELD(EVENT_DESCRIPTOR, TYPE_string, Description)
DECLARE_STRUCTURE_END(EVENT_DESCRIPTOR)
DECLARE_STRUCTURE_BEGIN(EVENT_VALUE_DESCRIPTOR, "")
DECLARE_SPECIAL_FIELD(EVENT_VALUE_DESCRIPTOR, struct _EVENT_VALUE_DESCRIPTOR *, fieldsLink)
DECLARE_FIELD(EVENT_VALUE_DESCRIPTOR, TYPE_uint8, FlagLetter)
DECLARE_FIELD(EVENT_VALUE_DESCRIPTOR, TYPE_uint64, Value)
DECLARE_EXTENDED_ARRAY_FIELD(EVENT_VALUE_DESCRIPTOR, TYPE_string, Name)
DECLARE_STRUCTURE_END(EVENT_VALUE_DESCRIPTOR)
DECLARE_STRUCTURE_BEGIN(ENUM_DESCRIPTOR, "")
DECLARE_SPECIAL_FIELD(ENUM_DESCRIPTOR, struct _EVENT_VALUE_DESCRIPTOR *, fieldsLink)
DECLARE_FIELD(ENUM_DESCRIPTOR, TYPE_uint16, Type)
DECLARE_FIELD(ENUM_DESCRIPTOR, TYPE_uint64, FlagsMask)
DECLARE_EXTENDED_ARRAY_FIELD(ENUM_DESCRIPTOR, TYPE_string, Name)
DECLARE_EXTENDED_ARRAY_FIELD(ENUM_DESCRIPTOR, TYPE_string, Description)
DECLARE_STRUCTURE_END(ENUM_DESCRIPTOR)
DECLARE_STRUCTURE_BEGIN(MEMORY_ZONE, "")
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, struct _MEMORY_ZONE *, Link)
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, struct _MEMORY_ZONE *, BkLink)
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, volatile TYPE_uint32, ZoneSize)
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, ZONE_ALLOCATION_POINTER, Allocation)
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, ZONE_READY_LIST, ReadyList)
DECLARE_FIELD(MEMORY_ZONE, TYPE_UIntPtr, StorageHandle)
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, TYPE_uint32, Generation)
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, TYPE_uint16, LastSyncPoint)
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, TYPE_uint16, Reserved)
DECLARE_STRUCTURE_END(MEMORY_ZONE)
DECLARE_STRUCTURE_BEGIN(MEMORY_STORAGE, "")
DECLARE_SPECIAL_FIELD(MEMORY_STORAGE, struct _MEMORY_STORAGE *, Link)
DECLARE_FIELD(MEMORY_STORAGE, TYPE_uint32, StorageSize)
DECLARE_FIELD(MEMORY_STORAGE, TYPE_uint32, ZoneCount)
DECLARE_FIELD(MEMORY_STORAGE, TYPE_uint16, DefaultZoneSize)
DECLARE_FIELD(MEMORY_STORAGE, TYPE_uint32, Flags)
DECLARE_SPECIAL_FIELD(MEMORY_STORAGE, PMEMORY_ZONE, MemoryZoneLink)
DECLARE_SPECIAL_FIELD(MEMORY_STORAGE, PMEMORY_ZONE, BkLink)
DECLARE_SPECIAL_FIELD(MEMORY_STORAGE, PMEMORY_ZONE, ZoneCursor)
DECLARE_SPECIAL_FIELD(MEMORY_ZONE, TYPE_uint32, Generation)
DECLARE_STRUCTURE_END(MEMORY_STORAGE)
DECLARE_STRUCTURE_BEGIN(SOURCE_DESCRIPTOR, "")
DECLARE_FIELD(SOURCE_DESCRIPTOR, TYPE_UIntPtr, Link)
DECLARE_FIELD(SOURCE_DESCRIPTOR, TYPE_PCHAR, Name)
DECLARE_FIELD(SOURCE_DESCRIPTOR, TYPE_UIntPtr, StorageHandle)
DECLARE_FIELD(SOURCE_DESCRIPTOR, TYPE_UIntPtr, EventTypeHandle)
DECLARE_FIELD(SOURCE_DESCRIPTOR, TYPE_UIntPtr, DebuggerBufferAddress)
DECLARE_FIELD(SOURCE_DESCRIPTOR, TYPE_uint32, ControlFlags)
DECLARE_FIELD(SOURCE_DESCRIPTOR, TYPE_uint16, Count)
DECLARE_FIELD(SOURCE_DESCRIPTOR, TYPE_uint16, EntrySize)
DECLARE_STRUCTURE_END(SOURCE_DESCRIPTOR)
DECLARE_STRUCTURE_BEGIN(EXTERNAL_CONTROLLER_DESCRIPTOR, "")
DECLARE_SPECIAL_FIELD(EXTERNAL_CONTROLLER_DESCRIPTOR, struct _EXTERNAL_CONTROLLER_DESCRIPTOR *, Link)
DECLARE_FIELD(EXTERNAL_CONTROLLER_DESCRIPTOR, TYPE_UIntPtr, ControllerHandle)
DECLARE_FIELD(EXTERNAL_CONTROLLER_DESCRIPTOR, TYPE_UIntPtr, ContextHandle)
DECLARE_STRUCTURE_END(EXTERNAL_CONTROLLER_DESCRIPTOR)
DECLARE_STRUCTURE_BEGIN(QUERY_VIEW, "")
DECLARE_SPECIAL_FIELD(QUERY_VIEW, struct _QUERY_VIEW *, Link)
DECLARE_SPECIAL_FIELD(QUERY_VIEW, PMEMORY_STORAGE, Storage)
DECLARE_SPECIAL_FIELD(QUERY_VIEW, PMEMORY_ZONE, StartZone)
DECLARE_SPECIAL_FIELD(QUERY_VIEW, PMEMORY_ZONE, CurrentZone)
DECLARE_SPECIAL_FIELD(QUERY_VIEW, PMEMORY_HEADER, CurrentEntry)
DECLARE_FIELD(QUERY_VIEW, TYPE_uint32, QueryGeneration)
DECLARE_FIELD(QUERY_VIEW, TYPE_uint32, ZoneGeneration)
DECLARE_FIELD(QUERY_VIEW, TYPE_uint32, CurrentEntryIndex)
DECLARE_FIELD(QUERY_VIEW, TYPE_BOOL, Forward)
DECLARE_FIELD(QUERY_VIEW, TYPE_BOOL, QueryReset)
DECLARE_FIELD(QUERY_VIEW, TYPE_BOOL, EndOfBuffer)
DECLARE_STRUCTURE_END(QUERY_VIEW)
DECLARE_STRUCTURE_BEGIN(SOURCE_CONTROLLER, "")
DECLARE_SPECIAL_FIELD(SOURCE_CONTROLLER, PMEMORY_STORAGE, SourceRepository)
DECLARE_SPECIAL_FIELD(SOURCE_CONTROLLER, PMEMORY_STORAGE, StorageList)
DECLARE_SPECIAL_FIELD(SOURCE_CONTROLLER, PSOURCE_DESCRIPTOR, SourceDescriptors)
DECLARE_SPECIAL_FIELD(SOURCE_CONTROLLER, PEXTERNAL_CONTROLLER_DESCRIPTOR, ExternalControllers)
DECLARE_SPECIAL_FIELD(SOURCE_CONTROLLER, PEXTERNAL_CONTROLLER_DESCRIPTOR, FreeControllerList)
DECLARE_SPECIAL_FIELD(SOURCE_CONTROLLER, PQUERY_VIEW, QueryViews)
DECLARE_SPECIAL_FIELD(SOURCE_CONTROLLER, PQUERY_VIEW, FreeQueryViews)
DECLARE_STRUCTURE_END(SOURCE_CONTROLLER)
#endif // #_LOGGING_TO_REPOSITORY
#ifdef _VALIDATE_INVARIANTS
C_ASSERT(offsetof(EVENT_FIELD_DESCRIPTOR, fieldsLink) == offsetof(EVENT_GENERIC_TYPE_DESCRIPTOR,fieldsLink));
C_ASSERT(offsetof(EVENT_FIELD_DESCRIPTOR, Offset) == offsetof(EVENT_GENERIC_TYPE_DESCRIPTOR,Offset));
C_ASSERT(offsetof(EVENT_FIELD_DESCRIPTOR, Type) == offsetof(EVENT_GENERIC_TYPE_DESCRIPTOR,Type));
C_ASSERT(offsetof(EVENT_DESCRIPTOR, fieldsLink) == offsetof(ENUM_DESCRIPTOR,fieldsLink));
#endif
//
// Reset all definitions
//
#undef DECLARE_EXTENDED_ARRAY_FIELD
#undef DECLARE_SPECIAL_FIELD
#undef DECLARE_STRUCTURE_BEGIN
#undef DECLARE_STRUCTURE_END
#undef DECLARE_FIELD
#undef DECLARE_VALUE
#undef DECLARE_GENERIC_FIELD
#undef DECLARE_ENUM_BEGIN
#undef DECLARE_ENUM_END