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;fp=kernel%2Finclude%2Fkern%2Forb.h;h=f9654341589af29f27fb95ff5de3c62b54e2af76;hp=52d611d86139496b1eb2d7530eb1eb5821523b6b;hb=1ac390fe1e18444008857b056c947710be9621a8;hpb=6e64b28821757af60447c790ae52a91831a9d4f0 diff --git a/kernel/include/kern/orb.h b/kernel/include/kern/orb.h index 52d611d..f965434 100644 --- a/kernel/include/kern/orb.h +++ b/kernel/include/kern/orb.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include @@ -11,6 +11,7 @@ #include #include +#include namespace Mem { class ProcAddrSpace; @@ -26,17 +27,10 @@ namespace ORB { struct CallFrame { // Address Space and PC to return to Mem::ProcAddrSpace *ret_aspace; - ulong ret_pc; + uintptr_t ret_stack; // Caller's PIB Pointer System::RunTime::ParamInfoBlock *caller_user_pib; - - // Object and Method that were called -- it probably isn't strictly - // necessary to keep track of this here, but it'd help in doing a - // "traceforward" of the method invocation stack in order to - // debug a stalled method call. - - ID object, method; }; struct CallStackHeader { @@ -60,6 +54,7 @@ namespace ORB { union { struct { + u32 Valid:1; u32 Pointer:1; }; @@ -69,7 +64,6 @@ namespace ORB { struct Object : public ObjectHdr { Mem::ProcAddrSpace *aspace; - uintptr_t entry; }; struct ObjectPtr : public ObjectHdr { @@ -83,23 +77,24 @@ namespace ORB { }; typedef Util::RadixTree IDTable; - typedef Util::RadixTree IDRMap; + typedef Util::RBPtr IDRMap; typedef Util::BitmapTree IDAlloc; class IDSpace { - // Reverse mapping of object pointers to local IDs - IDTable table; - IDRMap rmap; - IDAlloc alloc; + Lock::SpinLock lock; // For add/del only; not needed for lookup + IDTable table; // Forward mapping of local IDs to object ptrs + IDRMap rmap; // Reverse mapping of remote object pointers to local IDs + IDAlloc alloc; // Bitmap for allocating IDs public: Object *lookup(u32 id); - ObjectHdr *get_local_hdr(Object *obj); - Object *newobj(Mem::ProcAddrSpace *aspace, uintptr_t entry); + ObjectHdr *get_local(Object *obj); + Object *newobj(Mem::ProcAddrSpace *aspace); }; void invoke_method(System::RunTime::ParamInfoBlock *pib, uintptr_t &stack); uintptr_t return_from_method(uintptr_t &exptr, size_t &exlen); + void init(); } #endif