Added exit() function and renamed stdlib file to libc.a so GCC is happy.

This commit is contained in:
Patrick 2024-02-03 01:05:26 +01:00
parent ca08dcc79b
commit c2a40a8104
3 changed files with 12 additions and 2 deletions

View File

@ -18,7 +18,7 @@ enum class Syscall : std::uint64_t
void setupSyscall() noexcept; void setupSyscall() noexcept;
template<typename TParam0, typename TParam1, typename TParam2> template<typename TParam0 = int, typename TParam1 = int, typename TParam2 = int>
inline void doSyscall(Syscall cmd, TParam0 param0 = 0, TParam1 param1 = 0, TParam2 param2 = 0) noexcept inline void doSyscall(Syscall cmd, TParam0 param0 = 0, TParam1 param1 = 0, TParam2 param2 = 0) noexcept
{ {
register std::uint64_t r8 asm("r8") = param2; register std::uint64_t r8 asm("r8") = param2;

View File

@ -28,7 +28,7 @@ if env['BUILD_TARGET'] == 'stdlib':
stdlib_env.Append(CPPPATH = ['#targets/_any/bastl/include', '#targets/_any/stdlib/include', '#targets/_any/kernel/include']) stdlib_env.Append(CPPPATH = ['#targets/_any/bastl/include', '#targets/_any/stdlib/include', '#targets/_any/kernel/include'])
lib_stdlib = stdlib_env.StaticLibrary( lib_stdlib = stdlib_env.StaticLibrary(
target = stdlib_env.File('#stdlib/stdlib.a'), target = stdlib_env.File('#stdlib/libc.a'),
source = stdlib_sources source = stdlib_sources
) )
crti_o = stdlib_env.Object(target = '#stdlib/crti.o', source = stdlib_env['CRTI_PATH']) crti_o = stdlib_env.Object(target = '#stdlib/crti.o', source = stdlib_env['CRTI_PATH'])

View File

@ -3,6 +3,7 @@
#include <stddef.h> #include <stddef.h>
#include "os/memory.hpp" #include "os/memory.hpp"
#include "os/syscall.hpp"
#include "os/tty.hpp" #include "os/tty.hpp"
namespace namespace
@ -44,6 +45,15 @@ void abort()
__builtin_unreachable(); __builtin_unreachable();
} }
void exit(int exitCode) noexcept
{
#if !defined(__baos_kernel_source__)
baos::doSyscall(baos::Syscall::EXIT, exitCode);
#else
abort(); // no exit in kernel!
#endif
}
void* malloc(size_t size) noexcept void* malloc(size_t size) noexcept
{ {
if (size == 0) if (size == 0)