ORBMM();
- void *alloc(size_t size, AllocGroup *group = NULL);
-
- void retain(Region region);
- void release(Region region);
- void super_retain(Region region);
- void super_release(Region region);
- AllocGroup *create_group();
- void destroy_group(AllocGroup *group);
- void *add_region(Region region);
+ void *alloc(size_t size, int refs = 1);
+ void retain(void *ptr, int refs = 1);
+ void release(void *ptr, int refs = 1);
+ void add_region(Region region, bool unmap_orig, int refs = 1);
};
extern ORBMM *orbmm;
struct ParamInfoBlock {
uintptr_t buffer_size;
- void **objlist_ptr;
+ uintptr_t copy_size;
+ uintptr_t *objlist_ptr;
uintptr_t objlist_len;
- void **ptrlist_ptr;
- uintptr_t ptrlist_len;
uintptr_t num_segments;
struct Segment {
void *ptr;
uintptr_t len;
uintptr_t flags;
+ uintptr_t reserved;
} segments[0];
};
}
+
+ namespace Priv {
+ static inline bool in_kernel()
+ {
+#ifdef _KERNEL
+ return true;
+#else
+ return false;
+#endif
+ }
+ };
}
inline void *operator new(size_t len, ::System::RunTime::ORBMM *orbmm,
- ::System::RunTime::ORBMM::AllocGroup *group = NULL)
+ int refs = 1)
{
- return orbmm->alloc(len, group);
+ return orbmm->alloc(len, refs);
}
inline void *operator new[](size_t len, ::System::RunTime::ORBMM *orbmm,
- ::System::RunTime::ORBMM::AllocGroup *group = NULL)
+ int refs = 1)
+{
+ return orbmm->alloc(len, refs);
+}
+
+inline void operator delete(void *ptr, ::System::RunTime::ORBMM *orbmm,
+ int refs = 1)
+{
+ orbmm->release(ptr, refs);
+}
+
+inline void operator delete[](void *ptr, ::System::RunTime::ORBMM *orbmm,
+ int refs = 1)
{
- return orbmm->alloc(len, group);
+ orbmm->release(ptr, refs);
}
// This is a macro rather than an inline template function so that the
new(::System::RunTime::orbmm) \
::System::Exceptions::NativeCodeExceptionOriginInfo \
(::System::RunTime::get_pc()), \
- _KERNEL ? 1 : 0, ##args); \
+ ::System::Priv::in_kernel(), ##args); \
} while (0)
#define rethrow_idl(oldex, T, args...) do { \
new(::System::RunTime::orbmm) \
::System::Exceptions::NativeCodeExceptionOriginInfo \
(::System::RunTime::get_pc()), \
- _KERNEL ? 1 : 0, ##args); \
+ ::System::Priv::in_kernel(), ##args); \
} while (0)
#endif