syscall 为每个系统调用都提供一对探测器:在进入系统调用之前触发的 entry 探测器,和在系统调用完成后,但在将控制传送回用户级之前触发的 return 探测器。对于所有 syscall 探测器,函数名称将设置为受检测的系统调用的名称,但对模块名称未定义。
可以在 /etc/name_to_sysnum 文件中找到 syscall 提供器提供的系统调用的名称。通常,syscall 提供的系统调用名称对应于手册页的第 2 节中的名称。但是,syscall 提供器提供的一些探测器不直接与任何记录的系统调用对应。本节中对此差异的一般原因作了说明。
在一些情况下,syscall 提供器提供的系统调用的名称实际上是旧的实现详细信息的反映。例如,因为一些追溯到 UNIXTM 的过去的原因,/etc/name_to_sysnum 中 exit(2) 的名称为 rexit。类似地,time(2) 的名称为 gtime,execle(2) 和 execve(2) 的名称为 exece。
第 2 节中说明的一些系统调用实现为未记录的系统调用的子操作。例如,与 System V 信号(semctl(2)、semget(2)、semids(2)、semop(2) 和 semtimedop(2))相关的系统调用实现为单个系统调用 semsys 的子操作。semsys 系统调用将特定于实现的子代码作为其第一个参数,该子代码表示所需的特定系统调用:SEMCTL、SEMGET、SEMIDS、SEMOP 或 SEMTIMEDOP。由于过载一个系统调用以实现多个系统调用,所以对于 System V 信号仅有一对 syscall 探测器:syscall::semsys:entry 和 syscall::semsys:return。
支持大小超过 4GB 的大文件的 32 位程序必须能够处理 64 位文件偏移。因为大文件需要使用大偏移,所以通过一组并行的系统接口处理大文件,如 lf64(5) 中所述。lf64 中记录了这些接口,但这些接口没有单独的手册页。如表 21–1 中所示,每一个大文件系统调用接口都显示为各自的 syscall 探测器。
表 21–1 sycall 大文件探测器
大文件 syscall 探测器 |
系统调用 |
---|---|
creat64 | |
fstat64 | |
fstatvfs64 | |
getdents64 | |
getrlimit64 | |
lstat64 | |
mmap64 | |
open64 | |
pread64 | |
pwrite64 | |
setrlimit64 | |
stat64 | |
statvfs64 |
一些系统调用为跨越用户内核边界的 Solaris 子系统的专用实现详细信息。同样地,这些系统调用在第 2 节中没有手册页。此类别中的系统调用示例包括 signotify 系统调用(用作实 现 POSIX.4 消息队列的一部分)和 utssys 系统调用(用于实现 fuser(1M))。