Switch to clang and improve cpprt
This commit is contained in:
@@ -1,3 +1,37 @@
|
||||
#include "kutil/assert.h"
|
||||
|
||||
using __exit_func = void (*)(void *);
|
||||
|
||||
extern "C" {
|
||||
void __cxa_pure_virtual() { while(1); }
|
||||
void *__dso_handle __attribute__ ((__weak__));
|
||||
int __cxa_atexit(__exit_func, void *, void *);
|
||||
void __cxa_pure_virtual();
|
||||
}
|
||||
|
||||
|
||||
struct __exit_func_entry
|
||||
{
|
||||
__exit_func func;
|
||||
void *obj;
|
||||
void *dso;
|
||||
};
|
||||
|
||||
static int __num_exit_funcs = 0;
|
||||
static const int __max_exit_funcs = 64;
|
||||
__exit_func_entry __exit_funcs[__max_exit_funcs];
|
||||
|
||||
int
|
||||
__cxa_atexit(__exit_func f, void *o, void *dso)
|
||||
{
|
||||
int i = __num_exit_funcs++;
|
||||
if (i >= __max_exit_funcs) return -1;
|
||||
__exit_funcs[i].func = f;
|
||||
__exit_funcs[i].obj = o;
|
||||
__exit_funcs[i].dso = dso;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __cxa_pure_virtual()
|
||||
{
|
||||
kassert(0, "Pure virtual function call");
|
||||
}
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
kutil::memory_manager g_kernel_memory_manager;
|
||||
|
||||
void * kalloc(size_t length) { return g_kernel_memory_manager.allocate(length); }
|
||||
void kfree(void *p) { g_kernel_memory_manager.free(p); }
|
||||
void * operator new (size_t n) { return g_kernel_memory_manager.allocate(n); }
|
||||
void * operator new[] (size_t n) { return g_kernel_memory_manager.allocate(n); }
|
||||
void operator delete (void *p) { return g_kernel_memory_manager.free(p); }
|
||||
void operator delete[] (void *p){ return g_kernel_memory_manager.free(p); }
|
||||
void * kalloc(size_t length) { return g_kernel_memory_manager.allocate(length); }
|
||||
void kfree(void *p) { g_kernel_memory_manager.free(p); }
|
||||
|
||||
void * operator new (size_t n) { return g_kernel_memory_manager.allocate(n); }
|
||||
void * operator new[] (size_t n) { return g_kernel_memory_manager.allocate(n); }
|
||||
void operator delete (void *p) noexcept { return g_kernel_memory_manager.free(p); }
|
||||
void operator delete[] (void *p) noexcept { return g_kernel_memory_manager.free(p); }
|
||||
|
||||
@@ -23,8 +23,7 @@ extern "C" {
|
||||
void *__bss_start, *__bss_end;
|
||||
}
|
||||
|
||||
extern [[noreturn]] void
|
||||
__kernel_assert(const char *file, unsigned line, const char *message);
|
||||
extern void __kernel_assert(const char *, unsigned, const char *);
|
||||
|
||||
void
|
||||
init_console(const popcorn_data *header)
|
||||
@@ -55,7 +54,7 @@ init_console(const popcorn_data *header)
|
||||
log::enable(logs::memory, log::level::debug);
|
||||
}
|
||||
|
||||
void do_error_3() { int x = 1 / 0; }
|
||||
void do_error_3() { volatile int x = 1; volatile int y = 0; volatile int z = x / y; }
|
||||
void do_error_2() { do_error_3(); }
|
||||
void do_error_1() { do_error_2(); }
|
||||
|
||||
|
||||
@@ -357,7 +357,7 @@ find_efi_free_aligned_pages(const void *memory_map, size_t map_length, size_t de
|
||||
static unsigned
|
||||
check_needs_page_ident(page_table *table, unsigned index, page_table **free_pages)
|
||||
{
|
||||
if (table->entries[index] & 0x1 == 1) return 0;
|
||||
if ((table->entries[index] & 0x1) == 1) return 0;
|
||||
|
||||
kassert(*free_pages, "check_needs_page_ident needed to allocate but had no free pages");
|
||||
|
||||
@@ -404,6 +404,7 @@ page_in_ident(
|
||||
}
|
||||
|
||||
kassert(0, "Ran to end of page_in_ident");
|
||||
return 0; // Cannot reach
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -263,6 +263,7 @@ page_manager::get_block()
|
||||
return block;
|
||||
} else {
|
||||
kassert(0, "NYI: page_manager::get_block() needed to allocate.");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,7 +432,7 @@ page_manager::unmap_pages(addr_t address, size_t count)
|
||||
void
|
||||
page_manager::check_needs_page(page_table *table, unsigned index)
|
||||
{
|
||||
if (table->entries[index] & 0x1 == 1) return;
|
||||
if ((table->entries[index] & 0x1) == 1) return;
|
||||
|
||||
page_table *new_table = get_table_page();
|
||||
for (int i=0; i<512; ++i) new_table->entries[i] = 0;
|
||||
@@ -527,7 +528,7 @@ page_table::dump(int level, uint64_t offset)
|
||||
uint64_t ent = entries[i];
|
||||
if (ent == 0) continue;
|
||||
|
||||
if (ent & 0x1 == 0) {
|
||||
if ((ent & 0x1) == 0) {
|
||||
log::info(logs::memory, " %3d: %lx NOT PRESENT", i, ent);
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user