1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-30 02:47:35 +00:00

LibC: Run constructors on process startup.

Cooperate with the compiler to generate and execute the _init_array list
of constructor functions on userspace program statup. This took two days
to get working, my goodness. :^)
This commit is contained in:
Andreas Kling 2019-03-27 12:48:21 +01:00
parent f1a2cb0882
commit 23bb276fcd
22 changed files with 101 additions and 61 deletions

View file

@ -52,6 +52,8 @@ void* mmx_memcpy(void* dest, const void* src, size_t len)
return dest;
}
#ifdef KERNEL
static inline uint32_t divq(uint64_t n, uint32_t d)
{
uint32_t n1 = n >> 32;
@ -144,5 +146,6 @@ uint64_t __udivmoddi4(uint64_t n, uint64_t d, uint64_t* r)
return q;
}
#endif
}

View file

@ -46,36 +46,6 @@ void* kmalloc_eternal(size_t size)
}
void* operator new(size_t size)
{
return kmalloc(size);
}
void* operator new[](size_t size)
{
return kmalloc(size);
}
void operator delete(void* ptr)
{
return kfree(ptr);
}
void operator delete[](void* ptr)
{
return kfree(ptr);
}
void operator delete(void* ptr, size_t)
{
return kfree(ptr);
}
void operator delete[](void* ptr, size_t)
{
return kfree(ptr);
}
#else
extern "C" {

View file

@ -1,5 +1,9 @@
#pragma once
#ifndef KERNEL
#include <new>
#endif
#if defined(SERENITY) && defined(KERNEL)
#define AK_MAKE_ETERNAL \
public: \
@ -23,6 +27,31 @@ void kfree(void* ptr);
}
#ifdef KERNEL
inline void* operator new(size_t, void* p) { return p; }
inline void* operator new[](size_t, void* p) { return p; }
#else
inline void* operator new(size_t size)
{
return kmalloc(size);
}
inline void operator delete(void* ptr)
{
return kfree(ptr);
}
inline void* operator new[](size_t size)
{
return kmalloc(size);
}
inline void operator delete[](void* ptr)
{
return kfree(ptr);
}
#endif
#endif