Everywhere: Make some symbols __attribute__((used)) for LTO

With these changes, the userland builds correctly with Clang's ThinLTO
enabled.
This commit is contained in:
Daniel Bertalan 2021-09-05 16:08:13 +02:00 committed by Linus Groh
parent 1faffc2192
commit a8fefd89cd
5 changed files with 7 additions and 7 deletions

View file

@ -16,7 +16,7 @@
// Defined in the linker script
extern size_t __stack_chk_guard;
size_t __stack_chk_guard;
size_t __stack_chk_guard __attribute__((used));
extern "C" [[noreturn]] void __stack_chk_fail();
extern "C" u8 start_of_prekernel_image[];

View file

@ -69,7 +69,7 @@ extern ctor_func_t start_ctors[];
extern ctor_func_t end_ctors[];
extern size_t __stack_chk_guard;
READONLY_AFTER_INIT size_t __stack_chk_guard;
READONLY_AFTER_INIT size_t __stack_chk_guard __attribute__((used));
extern "C" u8 start_of_safemem_text[];
extern "C" u8 end_of_safemem_text[];

View file

@ -57,8 +57,8 @@ this helper program directly.
extern "C" {
// The compiler expects a previous declaration
void _start(int, char**, char**);
void _entry(int, char**, char**);
void _start(int, char**, char**) __attribute__((used));
void _entry(int, char**, char**) __attribute__((used));
NAKED void _start(int, char**, char**)
{

View file

@ -19,8 +19,8 @@ extern size_t __stack_chk_guard;
int main(int, char**, char**);
// Tell the compiler that this may be called from somewhere else.
int _entry(int argc, char** argv, char** env);
void _start(int, char**, char**);
int _entry(int argc, char** argv, char** env) __attribute__((used));
void _start(int, char**, char**) __attribute__((used));
NAKED void _start(int, char**, char**)
{

View file

@ -18,7 +18,7 @@
extern "C" {
extern size_t __stack_chk_guard;
size_t __stack_chk_guard = (size_t)0xc6c7c8c9;
__attribute__((used)) size_t __stack_chk_guard = (size_t)0xc6c7c8c9;
__attribute__((noreturn)) void __stack_chk_fail()
{