Solaris 动态跟踪指南

探测器

syscall 为每个系统调用都提供一对探测器:在进入系统调用之前触发的 entry 探测器,和在系统调用完成后,但在将控制传送回用户级之前触发的 return 探测器。对于所有 syscall 探测器,函数名称将设置为受检测的系统调用的名称,但对模块名称未定义。

可以在 /etc/name_to_sysnum 文件中找到 syscall 提供器提供的系统调用的名称。通常,syscall 提供的系统调用名称对应于手册页的第 2 节中的名称。但是,syscall 提供器提供的一些探测器不直接与任何记录的系统调用对应。本节中对此差异的一般原因作了说明。

系统调用记时错误

在一些情况下,syscall 提供器提供的系统调用的名称实际上是旧的实现详细信息的反映。例如,因为一些追溯到 UNIXTM 的过去的原因,/etc/name_to_sysnumexit(2) 的名称为 rexit。类似地,time(2) 的名称为 gtimeexecle(2)execve(2) 的名称为 exece

子编码的系统调用

第 2 节中说明的一些系统调用实现为未记录的系统调用的子操作。例如,与 System V 信号(semctl(2)semget(2)semids(2)semop(2)semtimedop(2))相关的系统调用实现为单个系统调用 semsys 的子操作。semsys 系统调用将特定于实现的子代码作为其第一个参数,该子代码表示所需的特定系统调用:SEMCTLSEMGETSEMIDSSEMOPSEMTIMEDOP。由于过载一个系统调用以实现多个系统调用,所以对于 System V 信号仅有一对 syscall 探测器:syscall::semsys:entrysyscall::semsys:return

大文件系统调用

支持大小超过 4GB 的大文件的 32 位程序必须能够处理 64 位文件偏移。因为大文件需要使用大偏移,所以通过一组并行的系统接口处理大文件,如 lf64(5) 中所述。lf64 中记录了这些接口,但这些接口没有单独的手册页。如表 21–1 中所示,每一个大文件系统调用接口都显示为各自的 syscall 探测器。

表 21–1 sycall 大文件探测器

大文件 syscall 探测器

系统调用 

creat64

creat(2)

fstat64

fstat(2)

fstatvfs64

fstatvfs(2)

getdents64

getdents(2)

getrlimit64

getrlimit(2)

lstat64

lstat(2)

mmap64

mmap(2)

open64

open(2)

pread64

pread(2)

pwrite64

pwrite(2)

setrlimit64

setrlimit(2)

stat64

stat(2)

statvfs64

statvfs(2)

专用系统调用

一些系统调用为跨越用户内核边界的 Solaris 子系统的专用实现详细信息。同样地,这些系统调用在第 2 节中没有手册页。此类别中的系统调用示例包括 signotify 系统调用(用作实 现 POSIX.4 消息队列的一部分)和 utssys 系统调用(用于实现 fuser(1M))。