X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=kernel%2Finclude%2Fkern%2Forb.h;h=e420fc77e11f72e10597797808a6146b36288f49;hp=7618dc72e725d0b138cb079f1a5ee32b14334d3a;hb=0c52a8435aa399781856869daa7ef30cef14fad5;hpb=7da27a216a7f4bb3331fe315cdbec69bfcf2c762 diff --git a/kernel/include/kern/orb.h b/kernel/include/kern/orb.h index 7618dc7..e420fc7 100644 --- a/kernel/include/kern/orb.h +++ b/kernel/include/kern/orb.h @@ -2,13 +2,15 @@ #define _KERN_ORB_H #include +#include #include #include +#include #include namespace Mem { - class AddrSpace; + class ProcAddrSpace; }; namespace Threads { @@ -16,11 +18,11 @@ namespace Threads { }; namespace ORB { - typedef ulong ID; + typedef u32 ID; struct CallFrame { // Address Space and PC to return to - Mem::AddrSpace *ret_aspace; + Mem::ProcAddrSpace *ret_aspace; ulong ret_pc; // Caller's PIB Pointer @@ -49,6 +51,42 @@ namespace ORB { CallFrame frames[0]; }; + + struct ObjectHdr; + struct Object; + + typedef u32 ID; + typedef Util::RadixTree IDRMap; + + struct ObjectHdr { + ID id; + + union { + struct { + u32 Pointer:1; + }; + + u32 flags; + }; + }; + + struct Object : public ObjectHdr { + Mem::ProcAddrSpace *aspace; + uintptr_t entry; + }; + + struct ObjectPtr : public ObjectHdr { + Object *object; + }; + + class IDSpace { + // Reverse mapping of object pointers to local IDs + IDRMap idrmap; + + public: + Object *lookup(u32 id); + ObjectHdr *get_local_hdr(Object *obj); + }; } #endif