(root)/
glibc-2.38/
sysdeps/
i386/
stackinfo.h
       1  /* Copyright (C) 1999-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  /* This file contains a bit of information about the stack allocation
      19     of the processor.  */
      20  
      21  #ifndef _STACKINFO_H
      22  #define _STACKINFO_H	1
      23  
      24  #include <elf.h>
      25  
      26  /* On x86 the stack grows down.  */
      27  #define _STACK_GROWS_DOWN	1
      28  
      29  /* Default to an executable stack.  PF_X can be overridden if PT_GNU_STACK is
      30   * present, but it is presumed absent.  */
      31  #define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X)
      32  
      33  /* Access to the stack pointer.  The macros are used in alloca_account
      34     for which they need to act as barriers as well, hence the additional
      35     (unnecessary) parameters.  */
      36  #define stackinfo_get_sp() \
      37    ({ void *p__; asm volatile ("mov %%esp, %0" : "=r" (p__)); p__; })
      38  #define stackinfo_sub_sp(ptr) \
      39    ({ ptrdiff_t d__;                                             \
      40       asm volatile ("sub %%esp, %0" : "=r" (d__) : "0" (ptr));   \
      41       d__; })
      42  
      43  #endif	/* stackinfo.h */