Handbuch zur dynamischen Ablaufverfolgung in Solaris

Prüfpunkte

syscall stellt pro Systemaufruf ein Prüfpunktpaar bereit: einen entry-Prüfpunkt, der vor Eintritt in den Systemaufruf ausgelöst wird, und einen return-Prüfpunkt, der nach Abschluss des Systemaufrufs, aber noch vor der Rückgabe der Kontrolle an die Benutzerebene ausgelöst wird. Für alle syscall-Prüfpunkte wird der Funktionsname auf den Namen des instrumentierten Systemaufrufs gesetzt. Der Modulname ist nicht definiert.

Die Namen der Systemaufrufe, wie sie vom Provider syscall bereitgestellt werden, finden Sie in der Datei /etc/name_to_sysnum. Die Systemaufrufnamen, die syscall liefert, stimmen häufig mit den Namen in Section 2 der Manpages überein. Doch einige der Prüfpunkte des Providers syscall entsprechen keinem der dokumentierten Systemaufrufe direkt. Dieser Abschnitt klärt über die Gründe für diese Diskrepanz auf.

Systemaufruf-Anachronismen

In einigen Fällen spiegelt der Systemaufrufname, wie er vom Provider syscall bereitgestellt wird, eigentlich ein veraltetes Implementierungsdetail wider. So lautet beispielsweise der Name von exit(2) in /etc/name_to_sysnum aus Gründen, die weit in die UNIXTM-Geschichte zurückreichen, rexit. Ebenso heißt time(2) gtime, und sowohl execle(2) als auch execve(2) heißen exece.

Subkodierte Systemaufrufe

Einige der in Section 2 vorgestellten Systemaufrufe sind als Unteroperationen eines nicht dokumentierten Systemaufrufs implementiert. So sind beispielsweise die Systemaufrufe für System-V-Semaphoren (semctl(2), semget(2), semids(2), semop(2) und semtimedop(2)) als Unteroperationen eines einzigen Systemaufrufs, nämlich semsys, implementiert. Der Systemaufruf semsys übernimmt als erstes Argument einen implementierungsspezifischen Subcode, der den erforderlichen Systemaufruf angibt: SEMCTL, SEMGET, SEMIDS, SEMOP bzw. SEMTIMEDOP. Durch die Überladung eines einzelnen Systemaufrufs zur Implementierung mehrerer Systemaufrufe steht für System-V-Semaphoren nur ein einziges Paar syscall-Prüfpunkte zur Verfügung: syscall::semsys:entry und syscall::semsys:return .

Systemaufrufe für große Dateien

Ein 32-Bit-Programm, das große Dateien von über vier GB unterstützt, muss 64-Bit-Dateiversätze verarbeiten können. Da für eine große Datei auch immer ein großer Versatz verwendet werden muss, werden große Dateien über einen parallelen Satz Systemschnittstellen manipuliert. Dies ist in lf64(5) beschrieben. Diese Schnittstellen sind in lf64 dokumentiert. Es liegen jedoch keine einzelnen Manpages für sie vor. Jede dieser Schnittstellen für Systemaufrufe im Zusammenhang mit großen Dateien erscheint, wie aus Tabelle 21–1 hervorgeht, als ein eigener syscall-Prüfpunkt.

Tabelle 21–1 sycall-Prüfpunkte für große Dateien

syscall-Prüfpunkt für große Dateien

Systemaufruf 

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)

Private Systemaufrufe

Bei einigen Systemaufrufen handelt es sich um private Implementierungsdetails von Solaris-Subsystemen, die sich über die Grenze zwischen Benutzer- und Kernelebene erstrecken. Diese Systemaufrufe besitzen deshalb keine Manpages in Abschnitt 2. Zu den Systemaufrufen in dieser Kategorie gehören beispielsweise der Systemaufruf signotify, der im Rahmen der Implementierung von POSIX.4-Nachrichtenwarteschlangen verwendet wird, und der Systemaufruf utssys, der zur Implementierung von fuser(1M) dient.