zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

indirect-return.h (1614B) - Raw


      1 /* Definition of __INDIRECT_RETURN.  AArch64 version.
      2    Copyright (C) 2024-2025 Free Software Foundation, Inc.
      3    This file is part of the GNU C Library.
      4 
      5    The GNU C Library is free software; you can redistribute it and/or
      6    modify it under the terms of the GNU Lesser General Public
      7    License as published by the Free Software Foundation; either
      8    version 2.1 of the License, or (at your option) any later version.
      9 
     10    The GNU C Library is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13    Lesser General Public License for more details.
     14 
     15    You should have received a copy of the GNU Lesser General Public
     16    License along with the GNU C Library; if not, see
     17    <https://www.gnu.org/licenses/>.  */
     18 
     19 #ifndef _UCONTEXT_H
     20 # error "Never include <bits/indirect-return.h> directly; use <ucontext.h> instead."
     21 #endif
     22 
     23 /* __INDIRECT_RETURN indicates that swapcontext may return via
     24    an indirect branch.  This happens when GCS is enabled, so
     25    add the attribute if available, otherwise returns_twice has
     26    a similar effect, but it prevents some code transformations
     27    that can cause build failures in some rare cases so it is
     28    only used when GCS is enabled.  */
     29 #if __glibc_has_attribute (__indirect_return__)
     30 # define __INDIRECT_RETURN __attribute__ ((__indirect_return__))
     31 #elif __glibc_has_attribute (__returns_twice__) \
     32       && defined __ARM_FEATURE_GCS_DEFAULT
     33 # define __INDIRECT_RETURN __attribute__ ((__returns_twice__))
     34 #else
     35 # define __INDIRECT_RETURN
     36 #endif