为什么glibc中宏`-ENOSYS`的意思?

why is the meaning of macro `-ENOSYS` in glibc?

我正在研究pthread_mutex_lock,发现pthread_mutex_lock最终会在glibc(version 2.27)中调用一个宏lll_futex_timed_wait(),我下载了glibc源但是显示lll_futex_timed_wait() 被定义为 -ENOSYS, 什么意思以及如何得到它的真实定义(应该是系统调用, 我也得到了 linux 内核的源码)?

//glibc-2.27/sysdeps/nptl/lowlevellock-futex.h

/* Wait until a lll_futex_wake call on FUTEXP, or TIMEOUT elapses.  */
#define lll_futex_timed_wait(futexp, val, timeout, private)             \
  -ENOSYS

glibc 的一大块由 sysdeps 子树下的系统和体系结构相关位组成。您看到的是一个通用存根,只有在 glibc 未针对特定平台构建正确配置时才会被编译。

那些较旧的 glibc 版本中低级 futex 细节的实际实现将位于 sysdeps/unix/sysv/linux/lowlevellock-futex.h

有趣的是,在最近的 glibc 版本中,代码被提升为“公共”树,因此如果您检查 glibc 2.32,您会看到这个宏在系统调用方面得到了正确实现。