(root)/
glibc-2.38/
sysdeps/
nios2/
sysdep.h
       1  /* Assembler macros for Nios II.
       2     Copyright (C) 2015-2023 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 License as
       7     published by the Free Software Foundation; either version 2.1 of the
       8     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  #include <sysdeps/generic/sysdep.h>
      20  
      21  #ifdef	__ASSEMBLER__
      22  
      23  /* Syntactic details of assembler.  */
      24  
      25  #define ASM_SIZE_DIRECTIVE(name) .size name,.-name
      26  
      27  #define ENTRY(name)						 \
      28    .globl C_SYMBOL_NAME(name);					 \
      29    .type C_SYMBOL_NAME(name),%function;				 \
      30    C_LABEL(name)							 \
      31    cfi_startproc;						 \
      32    CALL_MCOUNT;
      33  
      34  #undef  END
      35  #define END(name)				\
      36    cfi_endproc;					\
      37    ASM_SIZE_DIRECTIVE(name)
      38  
      39  #ifdef PROF
      40  
      41  # ifdef __PIC__
      42  #  define CALL_MCOUNT				\
      43    mov r8, ra;					\
      44    nextpc r2;					\
      45  1:						\
      46    movhi r3, %hiadj(_gp_got - 1b);		\
      47    addi r3, r3, %lo(_gp_got - 1b);		\
      48    add r2, r2, r3;				\
      49    ldw r2, %call(_mcount)(r2);			\
      50    callr r2;					\
      51    mov ra, r8;					\
      52    ret;
      53  # else
      54  #  define CALL_MCOUNT				\
      55    mov r8, ra;					\
      56    call _mount;					\
      57    mov ra, r8;					\
      58    ret;
      59  # endif
      60  
      61  #else
      62  # define CALL_MCOUNT		/* Do nothing.  */
      63  #endif
      64  
      65  #endif	/* __ASSEMBLER__ */