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;
+ uintptr_t copy_size;
uintptr_t *objlist_ptr;
uintptr_t objlist_len;
uintptr_t num_segments;
} segments[0];
};
}
+
+ namespace Priv {
+ 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, group);
+ 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)
+{
+ orbmm->release(ptr, refs);
}
// This is a macro rather than an inline template function so that the
//
// To throw an IDL exception of type Foo, do this:
// throw_idl(Foo, args, to, foo);
-//
-// FIXME: Instead, maybe a static throw method with noinline and
-// builtin_return_address.
#ifndef POLINTOS_NO_THROW_IDL
#define throw_idl(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)
#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