From 7dc51f61ddad8705e89609695d38cdfd710e914d Mon Sep 17 00:00:00 2001 From: danielryb <59661841+danielryb@users.noreply.github.com> Date: Thu, 11 Sep 2025 15:56:54 +0200 Subject: [PATCH] add new stdlib overrides --- include/libc/math.h | 230 ++++++++++++++++++++++++++ include/libc/stdlib.h | 11 ++ include/libc/stdlib_override/ctype.h | 10 ++ include/libc/stdlib_override/limits.h | 11 ++ include/libc/stdlib_override/math.h | 11 ++ include/libc/stdlib_override/stdint.h | 11 ++ include/libc/stdlib_override/string.h | 11 ++ include/libc/stdlib_override/wctype.h | 11 ++ include/libc/string.h | 5 + 9 files changed, 311 insertions(+) create mode 100644 include/libc/stdlib_override/ctype.h create mode 100644 include/libc/stdlib_override/limits.h create mode 100644 include/libc/stdlib_override/math.h create mode 100644 include/libc/stdlib_override/stdint.h create mode 100644 include/libc/stdlib_override/string.h create mode 100644 include/libc/stdlib_override/wctype.h diff --git a/include/libc/math.h b/include/libc/math.h index c1c221e..23160dd 100644 --- a/include/libc/math.h +++ b/include/libc/math.h @@ -28,4 +28,234 @@ typedef double double_t; #define fpclassify(x) __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x) #define fabsf(f) __builtin_fabsf((float)(f)) +#define isnan(x) __builtin_isnan +#define isinf(x) __builtin_isinf +#define isfinite(x) __builtin_isfinite +#define signbit(x) __builtin_signbit + +#ifdef __cplusplus +extern "C" { +#endif + +double acos(double); +float acosf(float); +long double acosl(long double); + +double asin(double); +float asinf(float); +long double asinl(long double); + +double atan(double); +float atanf(float); +long double atanl(long double); + +double atan2(double, double); +float atan2f(float, float); +long double atan2l(long double, long double); + +double ceil(double); +float ceilf(float); +long double ceill(long double); + +double cos(double); +float cosf(float); +long double cosl(long double); + +double cosh(double); +float coshf(float); +long double coshl(long double); + +double exp(double); +float expf(float); +long double expl(long double); + +double fabs(double); +long double fabsl(long double); + +double cosh(double); +float coshf(float); +long double coshl(long double); + +double exp(double); +float expf(float); +long double expl(long double); + +double floor(double); +float floorf(float); +long double floorl(long double); + +double fmod(double, double); +float fmodf(float, float); +long double fmodl(long double, long double); + +double pow(double, double); +float powf(float, float); +long double powl(long double, long double); + +double frexp(double, int*); +float frexpf(float, int*); +long double frexpl(long double, int*); + +double ldexp(double, int); +float ldexpf(float, int); +long double ldexpl(long double, int); + +double log(double); +float logf(float); +long double logl(long double); + +double log10(double); +float log10f(float); +long double log10l(long double); + +double modf(double, double*); +float modff(float, float*); +long double modfl(long double, long double*); + +double sin(double); +float sinf(float); +long double sinl(long double); + +double sinh(double); +float sinhf(float); +long double sinhl(long double); + + +double sqrt(double); +float sqrtf(float); +long double sqrtl(long double); + + +double tan(double); +float tanf(float); +long double tanl(long double); + + +double tanh(double); +float tanhf(float); +long double tanhl(long double); + + +double acosh(double); +float acoshf(float); +long double acoshl(long double); + + +double asinh(double); +float asinhf(float); +long double asinhl(long double); + + +double atanh(double); +float atanhf(float); +long double atanhl(long double); + + +double cbrt(double); +float cbrtf(float); +long double cbrtl(long double); + + +double erf(double); +float erff(float); +long double erfl(long double); + + +double exp2(double); +float exp2f(float); +long double exp2l(long double); + + +double expm1(double); +float expm1f(float); +long double expm1l(long double); + + +double fdim(double, double); +float fdimf(float, float); +long double fdiml(long double, long double); + + +double erfc(double); +float erfcf(float); +long double erfcl(long double); + + +double fmax(double, double); +float fmaxf(float, float); +long double fmaxl(long double, long double); + + +double fmin(double, double); +float fminf(float, float); +long double fminl(long double, long double); + + +double hypot(double, double); +float hypotf(float, float); +long double hypotl(long double, long double); + + +double ilogb(double); +float ilogbf(float); +long double ilogbl(long double); + + +double lgamma(double); +float lgammaf(float); +long double lgammal(long double); + + +double log1p(double); +float log1pf(float); +long double log1pl(long double); + + +double log2(double); +float log2f(float); +long double log2l(long double); + +double logb(double); +float logbf(float); +long double logbl(long double); + + +double nearbyint(double); +float nearbyintf(float); +long double nearbyintl(long double); + + +double nextafter(double, double); +float nextafterf(float, float); +long double nextafterl(long double, long double); + + +double nexttoward(double, long double); +float nexttowardf(float, long double); +long double nexttowardl(long double, long double); + +double remainder(double, double); +float remainderf(float, float); +long double remainderl(long double, long double); + +double remquo(double, double, int*); +float remquof(float, float, int*); +long double remquol(long double, long double, int*); + +double scalbln(double, long); +float scalblnf(float, long); +long double scalblnl(long double, long); + +double scalbn(double, int); +float scalbnf(float, int); +long double scalbnl(long double, int); + +double tgamma(double); +float tgammaf(float); +long double tgammal(long double); + +#ifdef __cplusplus +} +#endif + #endif diff --git a/include/libc/stdlib.h b/include/libc/stdlib.h index 2c9c8d7..6a46b8a 100644 --- a/include/libc/stdlib.h +++ b/include/libc/stdlib.h @@ -18,6 +18,11 @@ typedef struct { /* 0x8 */ long long rem; } lldiv_t; + +#ifdef __cplusplus +extern "C" { +#endif + ldiv_t ldiv(long numer, long denom); lldiv_t lldiv(long long numer, long long denom); @@ -37,4 +42,10 @@ int snprintf(char* __restrict__ s, size_t n, const char* __restrict__ format, .. void *malloc( size_t size ); void free(void* ptr); +int posix_memalign(void **memptr, size_t alignment, size_t size); + +#ifdef __cplusplus +} +#endif + #endif /* STDLIB_H */ \ No newline at end of file diff --git a/include/libc/stdlib_override/ctype.h b/include/libc/stdlib_override/ctype.h new file mode 100644 index 0000000..69ed40d --- /dev/null +++ b/include/libc/stdlib_override/ctype.h @@ -0,0 +1,10 @@ +#ifndef __STDLIB_OVERRIDE_CTYPE_H__ +#define __STDLIB_OVERRIDE_CTYPE_H__ + +#define _CTYPE_H + +#if __has_include_next() +# include_next +#endif + +#endif \ No newline at end of file diff --git a/include/libc/stdlib_override/limits.h b/include/libc/stdlib_override/limits.h new file mode 100644 index 0000000..6eb3584 --- /dev/null +++ b/include/libc/stdlib_override/limits.h @@ -0,0 +1,11 @@ +#ifndef __STDLIB_OVERRIDE_LIMITS_H__ +#define __STDLIB_OVERRIDE_LIMITS_H__ + +#define _LIMITS_H +#include "libc/limits.h" + +// #if __has_include_next() +// # include_next +// #endif + +#endif \ No newline at end of file diff --git a/include/libc/stdlib_override/math.h b/include/libc/stdlib_override/math.h new file mode 100644 index 0000000..8b66b37 --- /dev/null +++ b/include/libc/stdlib_override/math.h @@ -0,0 +1,11 @@ +#ifndef __STDLIB_OVERRIDE_MATH_H__ +#define __STDLIB_OVERRIDE_MATH_H__ + +#define _MATH_H +#include "libc/math.h" + +#if __has_include_next() +# include_next +#endif + +#endif \ No newline at end of file diff --git a/include/libc/stdlib_override/stdint.h b/include/libc/stdlib_override/stdint.h new file mode 100644 index 0000000..b776183 --- /dev/null +++ b/include/libc/stdlib_override/stdint.h @@ -0,0 +1,11 @@ +#ifndef __STDLIB_OVERRIDE_STDINT_H__ +#define __STDLIB_OVERRIDE_STDINT_H__ + +#define _STDINT_H +#include "libc/stdint.h" + +#if __has_include_next() +# include_next +#endif + +#endif \ No newline at end of file diff --git a/include/libc/stdlib_override/string.h b/include/libc/stdlib_override/string.h new file mode 100644 index 0000000..77f7245 --- /dev/null +++ b/include/libc/stdlib_override/string.h @@ -0,0 +1,11 @@ +#ifndef __STDLIB_OVERRIDE_STRING_H__ +#define __STDLIB_OVERRIDE_STRING_H__ + +#define _STRING_H +#include "libc/string.h" + +#if __has_include_next() +# include_next +#endif + +#endif \ No newline at end of file diff --git a/include/libc/stdlib_override/wctype.h b/include/libc/stdlib_override/wctype.h new file mode 100644 index 0000000..1c55020 --- /dev/null +++ b/include/libc/stdlib_override/wctype.h @@ -0,0 +1,11 @@ +#ifndef __STDLIB_OVERRIDE_WCTYPE_H__ +#define __STDLIB_OVERRIDE_WCTYPE_H__ + +#define _WCTYPE_H +#include "libc/wchar.h" + +#if __has_include_next() +# include_next +#endif + +#endif \ No newline at end of file diff --git a/include/libc/string.h b/include/libc/string.h index c7d59e8..2385c42 100644 --- a/include/libc/string.h +++ b/include/libc/string.h @@ -17,6 +17,11 @@ char* strcpy(char* dst, const char* src); void* memmove(void* dst, const void* src, size_t size); int memcmp(const void* lhs, const void* rhs, size_t count); +const char* strpbrk(const char*, const char*); +const char* strrchr(const char*, int); +const void* memchr(const void*, int, size_t); +const char* strstr(const char*, const char*); + #ifdef __cplusplus } #endif