diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/python/symbols/libc | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/python/symbols/libc')
-rw-r--r-- | library/python/symbols/libc/syms.cpp | 157 | ||||
-rw-r--r-- | library/python/symbols/libc/ya.make | 19 |
2 files changed, 176 insertions, 0 deletions
diff --git a/library/python/symbols/libc/syms.cpp b/library/python/symbols/libc/syms.cpp new file mode 100644 index 0000000000..6c04a7ef6e --- /dev/null +++ b/library/python/symbols/libc/syms.cpp @@ -0,0 +1,157 @@ +#include <util/system/platform.h> + +#include <library/python/symbols/registry/syms.h> + +#if !defined(_MSC_VER) +#if __has_include(<aio.h>) +#include <aio.h> +#endif +#include <arpa/inet.h> +#include <dirent.h> +#include <ifaddrs.h> +#include <netdb.h> +#include <pthread.h> +#include <pwd.h> +#include <sched.h> +#include <semaphore.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <errno.h> +#include <sys/ipc.h> +#include <dlfcn.h> + +#if defined(_linux_) +#include <sys/prctl.h> +#include <sys/ptrace.h> +#include <sys/sendfile.h> +#else +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/uio.h> +#endif + +#if defined(_darwin_) +#include <sys/types.h> +#include <sys/sysctl.h> +#include <mach/mach_error.h> // Y_IGNORE +#include <mach/mach_time.h> // Y_IGNORE +#endif + +#if defined(_linux_) +#include <sys/inotify.h> +#include <sys/mman.h> +#endif + +namespace { + static inline void* ErrnoLocation() { + return &errno; + } + + static int ClockGetres(clockid_t clk_id, struct timespec* res) { +#if defined(_darwin_) + static auto func = (decltype(&ClockGetres))dlsym(RTLD_SELF, "_clock_getres"); + + if (func) { + return func(clk_id, res); + } + + // https://opensource.apple.com/source/Libc/Libc-1158.1.2/gen/clock_gettime.c.auto.html + + switch (clk_id){ + case CLOCK_REALTIME: + case CLOCK_MONOTONIC: + case CLOCK_PROCESS_CPUTIME_ID: + res->tv_nsec = NSEC_PER_USEC; + res->tv_sec = 0; + + return 0; + + case CLOCK_MONOTONIC_RAW: + case CLOCK_MONOTONIC_RAW_APPROX: + case CLOCK_UPTIME_RAW: + case CLOCK_UPTIME_RAW_APPROX: + case CLOCK_THREAD_CPUTIME_ID: { + mach_timebase_info_data_t tb_info; + + if (mach_timebase_info(&tb_info)) { + return -1; + } + + res->tv_nsec = tb_info.numer / tb_info.denom + (tb_info.numer % tb_info.denom != 0); + res->tv_sec = 0; + + return 0; + } + + default: + errno = EINVAL; + return -1; + } +#else + return clock_getres(clk_id, res); +#endif + } +} + +BEGIN_SYMS("c") + +SYM(calloc) +SYM(clock_gettime) +SYM_2("clock_getres", ClockGetres) +SYM(closedir) +SYM(fdopen) +SYM(fflush) +SYM(freeifaddrs) +SYM(ftok) +SYM(getifaddrs) +SYM(getnameinfo) +SYM(getpwnam) +SYM(inet_ntop) +SYM(opendir) +SYM(printf) +SYM(pthread_kill) +SYM(pthread_self) +SYM(readdir_r) +SYM(sem_close) +SYM(sem_getvalue) +SYM(sem_open) +SYM(sem_post) +SYM(sem_trywait) +SYM(sem_unlink) +SYM(sem_wait) +SYM(siginterrupt) +SYM(strdup) +SYM(sendfile) +SYM(strtod) +SYM_2("__errno_location", ErrnoLocation) + +#if defined(_linux_) +SYM(prctl) +SYM(ptrace) +SYM(sched_getaffinity) +SYM(sched_setaffinity) +SYM(sem_timedwait) +SYM(inotify_init) +SYM(inotify_add_watch) +SYM(inotify_rm_watch) +SYM(mlockall) +#endif + +#if defined(_darwin_) +SYM(mach_absolute_time) +SYM(mach_timebase_info) +SYM(sysctlbyname) +#endif + +#if __has_include(<aio.h>) +SYM(aio_error) +SYM(aio_read) +SYM(aio_return) +SYM(aio_suspend) +#endif + +END_SYMS() +#endif diff --git a/library/python/symbols/libc/ya.make b/library/python/symbols/libc/ya.make new file mode 100644 index 0000000000..7b84cbc961 --- /dev/null +++ b/library/python/symbols/libc/ya.make @@ -0,0 +1,19 @@ +LIBRARY() + +OWNER(pg orivej) + +PEERDIR( + library/python/symbols/registry +) + +IF (GCC OR CLANG) + CFLAGS( + -Wno-deprecated-declarations # For sem_getvalue. + ) +ENDIF() + +SRCS( + GLOBAL syms.cpp +) + +END() |