Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/amd64/machdep.c
Show First 20 Lines • Show All 2,735 Lines • ▼ Show 20 Lines | void *memmove_std(void * _Nonnull dst, const void * _Nonnull src, | ||||
size_t len); | size_t len); | ||||
void *memmove_erms(void * _Nonnull dst, const void * _Nonnull src, | void *memmove_erms(void * _Nonnull dst, const void * _Nonnull src, | ||||
size_t len); | size_t len); | ||||
void *memcpy_std(void * _Nonnull dst, const void * _Nonnull src, | void *memcpy_std(void * _Nonnull dst, const void * _Nonnull src, | ||||
size_t len); | size_t len); | ||||
void *memcpy_erms(void * _Nonnull dst, const void * _Nonnull src, | void *memcpy_erms(void * _Nonnull dst, const void * _Nonnull src, | ||||
size_t len); | size_t len); | ||||
#ifdef KCSAN | |||||
/* | /* | ||||
* These fail to build as ifuncs when used with KCSAN. | * These fail to build as ifuncs when used with KCSAN. | ||||
* AUTO_VAR_INIT calls memset before the ifunc resolver is called. | |||||
*/ | */ | ||||
#if defined(KCSAN) || defined(AUTO_VAR_INIT) | |||||
void * | void * | ||||
memset(void *buf, int c, size_t len) | memset(void *buf, int c, size_t len) | ||||
{ | { | ||||
return (memset_std(buf, c, len)); | return (memset_std(buf, c, len)); | ||||
} | } | ||||
#else | |||||
DEFINE_IFUNC(, void *, memset, (void *, int, size_t)) | |||||
{ | |||||
return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ? | |||||
memset_erms : memset_std); | |||||
} | |||||
#endif | |||||
#if defined(KCSAN) | |||||
void * | void * | ||||
memmove(void * _Nonnull dst, const void * _Nonnull src, size_t len) | memmove(void * _Nonnull dst, const void * _Nonnull src, size_t len) | ||||
{ | { | ||||
return (memmove_std(dst, src, len)); | return (memmove_std(dst, src, len)); | ||||
} | } | ||||
void * | void * | ||||
memcpy(void * _Nonnull dst, const void * _Nonnull src, size_t len) | memcpy(void * _Nonnull dst, const void * _Nonnull src, size_t len) | ||||
{ | { | ||||
return (memcpy_std(dst, src, len)); | return (memcpy_std(dst, src, len)); | ||||
} | } | ||||
#else | #else | ||||
DEFINE_IFUNC(, void *, memset, (void *, int, size_t)) | |||||
{ | |||||
return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ? | |||||
memset_erms : memset_std); | |||||
} | |||||
DEFINE_IFUNC(, void *, memmove, (void * _Nonnull, const void * _Nonnull, | DEFINE_IFUNC(, void *, memmove, (void * _Nonnull, const void * _Nonnull, | ||||
size_t)) | size_t)) | ||||
{ | { | ||||
return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ? | return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ? | ||||
memmove_erms : memmove_std); | memmove_erms : memmove_std); | ||||
} | } | ||||
Show All 16 Lines |