glibc/sysdeps/unix
H.J. Lu 9620398097 x86: Install <sys/platform/x86.h> [BZ #26124]
Install <sys/platform/x86.h> so that programmers can do

 #if __has_include(<sys/platform/x86.h>)
 #include <sys/platform/x86.h>
 #endif
 ...

   if (CPU_FEATURE_USABLE (SSE2))
 ...
   if (CPU_FEATURE_USABLE (AVX2))
 ...

<sys/platform/x86.h> exports only:

enum
{
  COMMON_CPUID_INDEX_1 = 0,
  COMMON_CPUID_INDEX_7,
  COMMON_CPUID_INDEX_80000001,
  COMMON_CPUID_INDEX_D_ECX_1,
  COMMON_CPUID_INDEX_80000007,
  COMMON_CPUID_INDEX_80000008,
  COMMON_CPUID_INDEX_7_ECX_1,
  /* Keep the following line at the end.  */
  COMMON_CPUID_INDEX_MAX
};

struct cpuid_features
{
  struct cpuid_registers cpuid;
  struct cpuid_registers usable;
};

struct cpu_features
{
  struct cpu_features_basic basic;
  struct cpuid_features features[COMMON_CPUID_INDEX_MAX];
};

/* Get a pointer to the CPU features structure.  */
extern const struct cpu_features *__x86_get_cpu_features
  (unsigned int max) __attribute__ ((const));

Since all feature checks are done through macros, programs compiled with
a newer <sys/platform/x86.h> are compatible with the older glibc binaries
as long as the layout of struct cpu_features is identical.  The features
array can be expanded with backward binary compatibility for both .o and
.so files.  When COMMON_CPUID_INDEX_MAX is increased to support new
processor features, __x86_get_cpu_features in the older glibc binaries
returns NULL and HAS_CPU_FEATURE/CPU_FEATURE_USABLE return false on the
new processor feature.  No new symbol version is neeeded.

Both CPU_FEATURE_USABLE and HAS_CPU_FEATURE are provided.  HAS_CPU_FEATURE
can be used to identify processor features.

Note: Although GCC has __builtin_cpu_supports, it only supports a subset
of <sys/platform/x86.h> and it is equivalent to CPU_FEATURE_USABLE.  It
doesn't support HAS_CPU_FEATURE.
2020-09-11 17:20:52 -07:00
..
alpha alpha: Refactor syscall and Use Linux kABI for syscall return 2020-02-14 21:09:12 -03:00
arm linux: Consolidate INLINE_SYSCALL 2020-02-14 21:09:12 -03:00
bsd signal: Add signum-{generic,arch}.h 2020-07-07 14:10:58 -03:00
i386 i386: Remove unused file sysdeps/unix/i386/sysdep.S 2020-05-28 13:44:29 +02:00
inet Remove obsolete, never-implemented XSI STREAMS declarations 2019-03-14 15:44:15 +01:00
mips linux: Consolidate INLINE_SYSCALL 2020-02-14 21:09:12 -03:00
powerpc Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
sh linux: Consolidate INLINE_SYSCALL 2020-02-14 21:09:12 -03:00
sysv/linux x86: Install <sys/platform/x86.h> [BZ #26124] 2020-09-11 17:20:52 -07:00
x86_64 linux: Consolidate INLINE_SYSCALL 2020-02-14 21:09:12 -03:00
confstr.h
get_child_max.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
getlogin_r.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
getlogin.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
getpagesize.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
grantpt.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
ifreq.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Implies
make-syscalls.sh Add SYSCALL_ULONG_ARG_[12] to pass long to syscall [BZ #25810] 2020-04-29 05:35:34 -07:00
Makefile Add arch-syscall.h dependency for generating sysd-syscalls file 2020-05-14 18:40:58 +02:00
pt-fcntl.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
s-proto-cancel.S
s-proto.S
setxid.h
sockatmark.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
syscall-template.S Add SYSCALL_ULONG_ARG_[12] to pass long to syscall [BZ #25810] 2020-04-29 05:35:34 -07:00
syscall.S Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
syscalls.list Mark unsigned long arguments with U in more syscalls [BZ #25810] 2020-04-29 08:10:01 -07:00
sysdep.h linux: Remove INTERNAL_SYSCALL_DECL 2020-02-14 21:12:45 -03:00