Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

internal: use libsmarter #719

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,19 @@ if not headers_only
libc_deps += frigg_dep
rtdl_deps += frigg_dep

libsmarter_dep = dependency(
'libsmarter',
default_options: [],
fallback: ['libsmarter', 'libsmarter_dep'],
)
libc_deps += libsmarter_dep
rtdl_deps += libsmarter_dep

add_languages('c', 'cpp')
c_compiler = meson.get_compiler('c')

add_project_arguments('-Wno-unused-function', '-D__MLIBC_BUILDING_MLIBC', language: ['c', 'cpp'])
add_project_arguments('-nostdinc', '-fno-builtin', language: ['c', 'cpp'])
add_project_arguments('-D__MLIBC_BUILDING_MLIBC', '-DLIBSMARTER_FORCE_FREESTANDING', language: ['c', 'cpp'])
add_project_arguments('-nostdinc', '-fno-builtin', '-Wno-unused-function', language: ['c', 'cpp'])
add_project_arguments('-fno-rtti', '-fno-exceptions', language: 'cpp')
add_project_link_arguments('-nostdlib', language: ['c', 'cpp'])

Expand Down Expand Up @@ -259,6 +267,7 @@ endif
rtdl_sources += [
'options/internal/gcc/stack_protector.cpp',
'options/internal/gcc/guard-abi.cpp',
'options/internal/gcc-extra/cxxabi.cpp',
'options/internal/generic/allocator.cpp',
'options/internal/generic/debug.cpp',
'options/internal/generic/ensure.cpp',
Expand Down
26 changes: 14 additions & 12 deletions options/internal/gcc-extra/cxxabi.cpp
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@

#include <bits/ensure.h>
#include <mlibc/allocator.hpp>

// The cxxabi needs operator delete for *deleting* destructors, i.e., destructors that
// are called by delete expressions. We never use such expressions in mlibc.
// Note that G++ complains if we make the operator hidden,
// thus we use it's mangled name as a workaround.
#if defined(__clang__)
extern "C" [[gnu::visibility("hidden")]] void _ZdlPv() { // operator delete (void *, size_t)
__ensure(!"operator delete called! delete expressions cannot be used in mlibc.");
}
#else
extern "C" [[gnu::visibility("hidden")]] void _ZdlPvm() { // operator delete (void *, size_t)
__ensure(!"operator delete called! delete expressions cannot be used in mlibc.");
}
#endif
// thus we use its mangled name as a workaround.

extern "C" [[gnu::visibility("hidden")]] void *_Znwm(size_t size) { // operator new (size_t)
return getAllocator().allocate(size);
}

extern "C" [[gnu::visibility("hidden")]] void _ZdlPv(void *ptr) { // operator delete (void *)
getAllocator().free(ptr);
}

extern "C" [[gnu::visibility("hidden")]] void _ZdlPvm(void *ptr, size_t size) { // operator delete (void *, size_t)
getAllocator().deallocate(ptr, size);
}
4 changes: 4 additions & 0 deletions subprojects/libsmarter.wrap
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[wrap-git]
directory = libsmarter
url = https://github.com/managarm/libsmarter.git
revision = master