aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tools/include/nolibc/arch-loongarch.h
diff options
context:
space:
mode:
authorThomas Weißschuh <linux@weissschuh.net>2023-05-21 11:36:34 +0200
committerPaul E. McKenney <paulmck@kernel.org>2023-06-09 11:46:08 -0700
commit818924d1295ea16db267ea6defe08b21243583b6 (patch)
tree96c0095bd3e7dfd8210835f1db2d1149ad36a0d7 /tools/include/nolibc/arch-loongarch.h
parenttools/nolibc: reformat list of headers to be installed (diff)
downloadwireguard-linux-818924d1295ea16db267ea6defe08b21243583b6.tar.xz
wireguard-linux-818924d1295ea16db267ea6defe08b21243583b6.zip
tools/nolibc: add autodetection for stackprotector support
The stackprotector support in nolibc should be enabled iff it is also enabled in the compiler. Use the preprocessor defines added by gcc and clang if stackprotector support is enable to automatically do so in nolibc. This completely removes the need for any user-visible API. To avoid inlining the lengthy preprocessor check into every user introduce a new header compiler.h that abstracts the logic away. As the define NOLIBC_STACKPROTECTOR is now not user-relevant anymore prefix it with an underscore. Suggested-by: Willy Tarreau <w@1wt.eu> Link: https://lore.kernel.org/lkml/20230520133237.GA27501@1wt.eu/ Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Signed-off-by: Willy Tarreau <w@1wt.eu> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Diffstat (limited to 'tools/include/nolibc/arch-loongarch.h')
-rw-r--r--tools/include/nolibc/arch-loongarch.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/tools/include/nolibc/arch-loongarch.h b/tools/include/nolibc/arch-loongarch.h
index 07e3b1fd7262..d8ea7e787df4 100644
--- a/tools/include/nolibc/arch-loongarch.h
+++ b/tools/include/nolibc/arch-loongarch.h
@@ -7,6 +7,8 @@
#ifndef _NOLIBC_ARCH_LOONGARCH_H
#define _NOLIBC_ARCH_LOONGARCH_H
+#include "compiler.h"
+
/* Syscalls for LoongArch :
* - stack is 16-byte aligned
* - syscall number is passed in a7
@@ -149,8 +151,6 @@
char **environ __attribute__((weak));
const unsigned long *_auxv __attribute__((weak));
-#define __ARCH_SUPPORTS_STACK_PROTECTOR
-
#if __loongarch_grlen == 32
#define LONGLOG "2"
#define SZREG "4"
@@ -175,7 +175,7 @@ const unsigned long *_auxv __attribute__((weak));
void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protector)) _start(void)
{
__asm__ volatile (
-#ifdef NOLIBC_STACKPROTECTOR
+#ifdef _NOLIBC_STACKPROTECTOR
"bl __stack_chk_init\n" /* initialize stack protector */
#endif
REG_L " $a0, $sp, 0\n" /* argc (a0) was in the stack */