(root)/
glibc-2.38/
sysdeps/
m68k/
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 m68k 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
      30     is present, but it is presumed absent.  */
      31  #define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X)
      32  
      33  /* Access to the stack pointer.  */
      34  #define stackinfo_get_sp() \
      35    ({ void *p__; asm volatile ("move.l %%sp, %0" : "=r" (p__)); p__; })
      36  #define stackinfo_sub_sp(ptr) \
      37    ({ ptrdiff_t d__;						\
      38       asm volatile ("sub.l %%sp, %0" : "=r" (d__) : "0" (ptr));	\
      39       d__; })
      40  
      41  #endif	/* stackinfo.h */