[kernel] Run global constructors

Look up the global constructor list that the linker outputs, and run
them all. Required creation of the `kutil::no_construct` template for
objects that are constructed before the global constructors are run.

Also split the `memory_initialize` function into two - one for just
those objects that need to happen before the global ctors, and one
after.

Tags: memory c++
This commit is contained in:
Justin C. Miller
2020-05-31 23:58:01 -07:00
parent c6c3a556b3
commit 88b090fe94
17 changed files with 126 additions and 67 deletions

View File

@@ -21,9 +21,9 @@ using kutil::memcpy;
logger *logger::s_log = nullptr;
const char *logger::s_level_names[] = {"", "debug", "info", "warn", "error", "fatal"};
logger::logger() :
logger::logger(logger::immediate output) :
m_buffer(nullptr, 0),
m_immediate(nullptr),
m_immediate(output),
m_sequence(0)
{
memset(&m_levels, 0, sizeof(m_levels));
@@ -31,9 +31,9 @@ logger::logger() :
s_log = this;
}
logger::logger(uint8_t *buffer, size_t size) :
logger::logger(uint8_t *buffer, size_t size, logger::immediate output) :
m_buffer(buffer, size),
m_immediate(nullptr),
m_immediate(output),
m_sequence(0)
{
memset(&m_levels, 0, sizeof(m_levels));