Skip to content

Commit

Permalink
Everywhere: Make some symbols __attribute__((used)) for LTO
Browse files Browse the repository at this point in the history
With these changes, the userland builds correctly with Clang's ThinLTO
enabled.
  • Loading branch information
BertalanD authored and linusg committed Oct 17, 2021
1 parent 1faffc2 commit a8fefd8
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 7 deletions.
2 changes: 1 addition & 1 deletion Kernel/Prekernel/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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[];
Expand Down
2 changes: 1 addition & 1 deletion Kernel/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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[];
Expand Down
4 changes: 2 additions & 2 deletions Userland/DynamicLoader/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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**)
{
Expand Down
4 changes: 2 additions & 2 deletions Userland/Libraries/LibC/crt0.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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**)
{
Expand Down
2 changes: 1 addition & 1 deletion Userland/Libraries/LibC/ssp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down

0 comments on commit a8fefd8

Please sign in to comment.