From 4cb7c8ea85931ee3a54bbd75791d7db998e805d1 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Thu, 9 Jan 2020 00:36:32 -0700 Subject: [PATCH] LibC: Move even more methods and globals out of crt0.o --- Libraries/LibC/Makefile | 3 ++- Libraries/LibC/crt0.cpp | 30 ++++-------------------------- Libraries/LibC/libcinit.cpp | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 27 deletions(-) create mode 100644 Libraries/LibC/libcinit.cpp diff --git a/Libraries/LibC/Makefile b/Libraries/LibC/Makefile index ca67dfed31..9f50853745 100644 --- a/Libraries/LibC/Makefile +++ b/Libraries/LibC/Makefile @@ -54,7 +54,8 @@ LIBC_OBJS = \ wchar.o \ serenity.o \ syslog.o \ - cxxabi.o + cxxabi.o \ + libcinit.o ELF_OBJS = \ ../LibELF/ELFDynamicObject.o \ diff --git a/Libraries/LibC/crt0.cpp b/Libraries/LibC/crt0.cpp index f3f31ec653..b95f0856bb 100644 --- a/Libraries/LibC/crt0.cpp +++ b/Libraries/LibC/crt0.cpp @@ -7,18 +7,10 @@ extern "C" { int main(int, char**, char**); -__thread int errno; -char** environ; -bool __environ_is_malloced; - -void __libc_init() -{ - void __malloc_init(); - __malloc_init(); - - void __stdio_init(); - __stdio_init(); -} +extern void __libc_init(); +extern void _init(); +extern char** environ; +extern bool __environ_is_malloced; int _start(int argc, char** argv, char** env) { @@ -27,7 +19,6 @@ int _start(int argc, char** argv, char** env) __libc_init(); - extern void _init(); _init(); extern void (*__init_array_start[])(int, char**, char**) __attribute__((visibility("hidden"))); @@ -43,17 +34,4 @@ int _start(int argc, char** argv, char** env) return 20150614; } - -[[noreturn]] void __cxa_pure_virtual() -{ - ASSERT_NOT_REACHED(); -} - -extern u32 __stack_chk_guard; -u32 __stack_chk_guard = (u32)0xc0000c13; - -[[noreturn]] void __stack_chk_fail() -{ - ASSERT_NOT_REACHED(); -} } diff --git a/Libraries/LibC/libcinit.cpp b/Libraries/LibC/libcinit.cpp new file mode 100644 index 0000000000..ce2690c5f6 --- /dev/null +++ b/Libraries/LibC/libcinit.cpp @@ -0,0 +1,34 @@ +#include +#include + +extern "C" { + +__thread int errno; +char** environ; +bool __environ_is_malloced; + +void __libc_init() +{ + void __malloc_init(); + __malloc_init(); + + void __stdio_init(); + __stdio_init(); +} + +[[noreturn]] void __cxa_pure_virtual() __attribute__((weak)); + +[[noreturn]] void __cxa_pure_virtual() +{ + ASSERT_NOT_REACHED(); +} + +extern u32 __stack_chk_guard; +u32 __stack_chk_guard = (u32)0xc0000c13; + +[[noreturn]] void __stack_chk_fail() +{ + ASSERT_NOT_REACHED(); +} + +}