(root)/
glibc-2.38/
sysdeps/
x86/
sysdep.h
       1  /* Assembler macros for x86.
       2     Copyright (C) 2017-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
       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 _X86_SYSDEP_H
      20  #define _X86_SYSDEP_H 1
      21  
      22  #include <sysdeps/generic/sysdep.h>
      23  
      24  /* __CET__ is defined by GCC with Control-Flow Protection values:
      25  
      26  enum cf_protection_level
      27  {
      28    CF_NONE = 0,
      29    CF_BRANCH = 1 << 0,
      30    CF_RETURN = 1 << 1,
      31    CF_FULL = CF_BRANCH | CF_RETURN,
      32    CF_SET = 1 << 2
      33  };
      34  */
      35  
      36  /* Set if CF_BRANCH (IBT) is enabled.  */
      37  #define X86_FEATURE_1_IBT	(1U << 0)
      38  /* Set if CF_RETURN (SHSTK) is enabled.  */
      39  #define X86_FEATURE_1_SHSTK	(1U << 1)
      40  
      41  #ifdef __CET__
      42  # define CET_ENABLED	1
      43  # define IBT_ENABLED	(__CET__ & X86_FEATURE_1_IBT)
      44  # define SHSTK_ENABLED	(__CET__ & X86_FEATURE_1_SHSTK)
      45  #else
      46  # define CET_ENABLED	0
      47  # define IBT_ENABLED	0
      48  # define SHSTK_ENABLED	0
      49  #endif
      50  
      51  /* Offset for fxsave/xsave area used by _dl_runtime_resolve.  Also need
      52     space to preserve RCX, RDX, RSI, RDI, R8, R9 and RAX.  It must be
      53     aligned to 16 bytes for fxsave and 64 bytes for xsave.  */
      54  #define STATE_SAVE_OFFSET (8 * 7 + 8)
      55  
      56  /* Save SSE, AVX, AVX512, mask and bound registers.  */
      57  #define STATE_SAVE_MASK \
      58    ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 5) | (1 << 6) | (1 << 7))
      59  
      60  /* Constants for bits in __x86_string_control:  */
      61  
      62  /* Avoid short distance REP MOVSB.  */
      63  #define X86_STRING_CONTROL_AVOID_SHORT_DISTANCE_REP_MOVSB	(1 << 0)
      64  
      65  #ifdef	__ASSEMBLER__
      66  
      67  /* Syntactic details of assembler.  */
      68  
      69  #ifdef _CET_ENDBR
      70  # define _CET_NOTRACK notrack
      71  #else
      72  # define _CET_ENDBR
      73  # define _CET_NOTRACK
      74  #endif
      75  
      76  /* ELF uses byte-counts for .align, most others use log2 of count of bytes.  */
      77  #define ALIGNARG(log2) 1<<log2
      78  #define ASM_SIZE_DIRECTIVE(name) .size name,.-name;
      79  
      80  /* Define an entry point visible from C.  */
      81  #define	ENTRY_P2ALIGN(name, alignment)					      \
      82    .globl C_SYMBOL_NAME(name);						      \
      83    .type C_SYMBOL_NAME(name),@function;					      \
      84    .align ALIGNARG(alignment);						      \
      85    C_LABEL(name)								      \
      86    cfi_startproc;							      \
      87    _CET_ENDBR;								      \
      88    CALL_MCOUNT
      89  
      90  /* Common entry 16 byte aligns.  */
      91  #define ENTRY(name) ENTRY_P2ALIGN (name, 4)
      92  
      93  #undef	END
      94  #define END(name)							      \
      95    cfi_endproc;								      \
      96    ASM_SIZE_DIRECTIVE(name)
      97  
      98  #define ENTRY_CHK(name) ENTRY (name)
      99  #define END_CHK(name) END (name)
     100  
     101  /* Since C identifiers are not normally prefixed with an underscore
     102     on this system, the asm identifier `syscall_error' intrudes on the
     103     C name space.  Make sure we use an innocuous name.  */
     104  #define	syscall_error	__syscall_error
     105  #define mcount		_mcount
     106  
     107  #undef	PSEUDO_END
     108  #define	PSEUDO_END(name)						      \
     109    END (name)
     110  
     111  /* Local label name for asm code. */
     112  #ifndef L
     113  /* ELF-like local names start with `.L'.  */
     114  # define LOCAL_LABEL(name) .L##name
     115  # define L(name)	LOCAL_LABEL(name)
     116  #endif
     117  
     118  #define atom_text_section .section ".text.atom", "ax"
     119  
     120  #endif	/* __ASSEMBLER__ */
     121  
     122  #endif	/* _X86_SYSDEP_H */