blob: 6a50ae54d02fdb05e178b76f8ae71c85490bef55 [file] [log] [blame]
/* DTrace types and macros for runtime data structures */
enum MetadataKind {
StructMetadataKind = 1,
EnumMetadataKind = 2,
OpaqueMetadataKind = 8,
TupleMetadataKind = 9,
FunctionMetadataKind = 10,
ExistentialMetadataKind = 12,
MetatypeMetadataKind = 13,
ObjCClassWrapperKind = 14,
HeapLocalVariableKind = 64,
HeapArrayKind = 65
};
typedef struct NominalTypeDescriptor {
unsigned long kind;
const char *name;
unsigned long numFields;
unsigned long fieldOffsetVectorOffset;
const char *fieldNames;
} NominalTypeDescriptor;
typedef struct Metadata {
void *valueWitnessTable;
unsigned long kind;
} Metadata;
typedef struct ClassMetadata {
void *valueWitnessTable;
struct ClassMetadata *isa;
struct ClassMetadata *super;
void *data[3];
NominalTypeDescriptor *descriptor;
unsigned long instanceSize, instanceAlign;
} ClassMetadata;
#define copyinMetadata(T, ptr) \
((T*)copyin((unsigned long)(ptr) - sizeof(void*), sizeof(T)))
#define copyinNominalTypeDescriptor(ptr) \
((NominalTypeDescriptor*)copyin((unsigned long)(ptr), sizeof(NominalTypeDescriptor)))