FreeBSD 中定义的 __sysctl 函数在哪里?

FreeBSD 中定义的 __sysctl 函数在哪里?

我正在阅读源代码来理解sysctlFreeBSD。

看起来是最重要的功能

int __sysctl(const int *name, u_int namelen, void *oldp, size_t *oldlenp, const void *newp, size_t newlen);

中没有定义lib/libc/gen/sysctl.c

我尝试 grep FreeBSD 的源代码,但未能找到__sysctl.

它是在哪里定义的?

答案1

这是我学到的:

  • __syscall未在任何 C 源文件中定义;

    根据马克·普洛特尼克的说法:

    libc__sysctl用几行汇编语言编写的系统调用包装器,在编译libc[期间生成1]。

  • 系统调用的入口点是在 kern_sysctl.c 中[2]。系统调用是sys_foo()在内核中调用的。

链接

  1. 用于生成系统调用的配置文件。
  2. kern_sysctl.c 源代码。

感谢 edje、Ed Schouten (@EdSchouten)、@FreeBSDHelp 和 Mark Plotnick。

相关内容