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=52d611d86139496b1eb2d7530eb1eb5821523b6b;hp=b00d758fbcf1c671e4a297d933a0136d5e7e28f8;hb=0ffa4628c337dbad2ba2aa6b9f539e9b50bf4983;hpb=cbad341e097fc2e24079b0626146baff8d71c877 diff --git a/kernel/include/kern/orb.h b/kernel/include/kern/orb.h index b00d758..52d611d 100644 --- a/kernel/include/kern/orb.h +++ b/kernel/include/kern/orb.h @@ -7,6 +7,9 @@ #include #include +#include +#include + #include namespace Mem { @@ -51,12 +54,6 @@ namespace ORB { CallFrame frames[0]; }; - - struct ObjectHdr; - struct Object; - - typedef u32 ID; - typedef Util::RadixTree IDRMap; struct ObjectHdr { ID id; @@ -78,15 +75,31 @@ namespace ORB { struct ObjectPtr : public ObjectHdr { Object *object; }; + + union ObjTableEntry { + ObjectHdr hdr; + Object obj; + ObjectPtr ptr; + }; + + typedef Util::RadixTree IDTable; + typedef Util::RadixTree IDRMap; + typedef Util::BitmapTree IDAlloc; class IDSpace { // Reverse mapping of object pointers to local IDs - IDRMap id_rmap; + IDTable table; + IDRMap rmap; + IDAlloc alloc; public: Object *lookup(u32 id); - u32 rlookup(Object *obj); + ObjectHdr *get_local_hdr(Object *obj); + Object *newobj(Mem::ProcAddrSpace *aspace, uintptr_t entry); }; + + void invoke_method(System::RunTime::ParamInfoBlock *pib, uintptr_t &stack); + uintptr_t return_from_method(uintptr_t &exptr, size_t &exlen); } #endif