162306a36Sopenharmony_ci/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * NOLIBC compiler support header
462306a36Sopenharmony_ci * Copyright (C) 2023 Thomas Weißschuh <linux@weissschuh.net>
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci#ifndef _NOLIBC_COMPILER_H
762306a36Sopenharmony_ci#define _NOLIBC_COMPILER_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#if defined(__SSP__) || defined(__SSP_STRONG__) || defined(__SSP_ALL__) || defined(__SSP_EXPLICIT__)
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#define _NOLIBC_STACKPROTECTOR
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#endif /* defined(__SSP__) ... */
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#if defined(__has_attribute)
1662306a36Sopenharmony_ci#  if __has_attribute(no_stack_protector)
1762306a36Sopenharmony_ci#    define __no_stack_protector __attribute__((no_stack_protector))
1862306a36Sopenharmony_ci#  else
1962306a36Sopenharmony_ci#    define __no_stack_protector __attribute__((__optimize__("-fno-stack-protector")))
2062306a36Sopenharmony_ci#  endif
2162306a36Sopenharmony_ci#else
2262306a36Sopenharmony_ci#  define __no_stack_protector __attribute__((__optimize__("-fno-stack-protector")))
2362306a36Sopenharmony_ci#endif /* defined(__has_attribute) */
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci#endif /* _NOLIBC_COMPILER_H */
26