Where are syscalls located in glibc source

前端 未结 4 1554
挽巷
挽巷 2020-12-05 07:42

So I was looking through the linux glibc source and I don\'t see where it actually does anything. The following is from io/chdir.c but it is indicative of many

相关标签:
4条回答
  • 2020-12-05 07:54

    That's a generic stub that is used if another definition doesn't exist; weak_alias is a cpp macro which tells the linker that __chdir should be used when chdir is requested, but only if no other definition is found. (See weak symbols for more details.)

    chdir is actually a system call; there will be per-OS system call bindings in the gibc source tree, which will override the stub definition with a real one that calls into the kernel. This allows glibc to present a stable interface across systems which may not have all of the system calls that glibc knows about.

    0 讨论(0)
  • 2020-12-05 08:01

    What you've found is a stub function for systems it's not implemented on. You need to look under the sysdeps tree for the actual implementation. The following may be of interest:

    • sysdeps/unix/sysv/linux
    • sysdeps/posix
    • sysdeps/i386 (or x86_64 or whatever your cpu arch is)
    0 讨论(0)
  • 2020-12-05 08:11

    The actual system call code for chdir() is auto-generated on most systems supported by glibc, by the script make-syscalls.sh. That's why you can't find it in the source tree.

    0 讨论(0)
  • 2020-12-05 08:11

    Note that the actual system calls aren't defined anywhere in the source tree - they're generated at build time from syscalls.list (linked is the one in sysdeps/unix, there are additional ones further down), a series of macros in sysdep.h (linked linux/i386), and a script that actually generates the source files.

    0 讨论(0)
提交回复
热议问题