.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" @(#)syscall.2 8.1 (Berkeley) 6/16/93 .\" .\" .\" 2002-03-20 Christoph Hellwig .\" - adopted for Linux .\" 2015-01-17, Kees Cook .\" Added mips and arm64. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH syscall 2 "2. Mai 2024" "Linux man\-pages 6.8" .SH BEZEICHNUNG syscall \- indirekter Systemaufruf .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP /* Definition der \fBSYS_*\fP\-Konstanten */ \fB#include \fP .P \fBlong syscall(long \fP\fINummer\fP\fB, …);\fP .fi .P .RS -4 Mit Glibc erforderliche Feature\-Test\-Makros (siehe \fBfeature_test_macros\fP(7)): .RE .P \fBsyscall\fP(): .nf Seit Glibc 2.19: _DEFAULT_SOURCE Vor Glibc 2.19: _BSD_SOURCE || _SVID_SOURCE .fi .SH BESCHREIBUNG \fBsyscall\fP() ist eine kleine Bibliotheksfunktion, die den Systemaufruf auslöst, dessen Assemblersprachen\-Schnittstelle in \fINummer\fP mit den festgelegten Argumenten angegeben wurde. Der Einsatz von \fBsyscall\fP() ist beispielsweise hilfreich, wenn ein Systemaufruf ausgelöst werden soll, der in der C\-Bibliothek keine Wrapper\-Funktion hat. .P \fBsyscall\fP() speichert CPU\-Register vor der Durchführung des Systemaufrufs, stellt die Register nach der Rückkehr von dem Systemaufruf wieder her und speichert alle vom Systemaufruf zurückgelieferten Fehler in \fBerrno\fP(3). .P Die symbolischen Konstanten für die Systemaufrufnummern können in der Header\-Datei \fI\fP gefunden werden. .SH RÜCKGABEWERT Der Rückgabewert wird durch den ausgelösten Systemaufruf definiert. Im Allgemeinen zeigt ein Rückgabewert 0 einen Erfolg an. Ein Rückgabewert \-1 zeigt einen Fehler und eine Fehlernummer wird in \fIerrno\fP gespeichert. .SH FEHLER .TP \fBENOSYS\fP Die angefragte Systemaufrufnummer ist nicht implementiert. .P Andere Fehler hängen vom konkret aufgerufenen Systemaufruf ab. .SH ANMERKUNGEN \fBsyscall\fP() erschien erstmalig in 4BSD. .SS "Architekturspezifische Anforderungen" Jede Architektur\-ABI hat ihre eigenen Anforderungen, wie Argumente für Systemaufrufe an den Kernel übergeben werden. Für Systemaufrufe mit Glibc\-Wrapper (beispielsweise die meisten Systemaufrufe) handhabt Glibc die Details des Kopierens der Argumente in die richtigen Register auf eine Weise, die für die Architektur angemessen ist. Wird allerdings \fBsyscall\fP() zum Durchführen eines Systemaufrufs verwandt, könnte der Aufrufende die architekturabhängigen Details selber handhaben müssen. Diese Anforderung wird auf bestimmten 32\-bit\-Architekturen am häufigsten angetroffen. .P Auf dem ABI der eingebetteten ARM\-Architektur (EABI) muss beispielsweise ein 64\-bit\-Wert (z.B. \fIlong long\fP) an ein gerades Registerpaar ausgerichtet werden. Wird daher \fBsyscall\fP() anstelle des von Glibc bereitgestellten Wrappers verwandt, müsste der Systemaufruf \fBreadahead\fP(2) in der folgenden Weise auf der ARM\-Architektur mit dem ABI im Modus »little endian« ausgelöst werden: .P .in +4n .EX syscall(SYS_readahead, fd, 0, (unsigned int) (offset & 0xFFFFFFFF), (unsigned int) (offset >> 32), count); .EE .in .P Da das Argument »offset« 64 bit beträgt und das erste Argument (\fIfd\fP) an \fIr0\fP übergeben wird, muss der aufrufende den 64\-bit\-Wert manuell zerteilen und ausrichten, so dass er an das Register\-Paar \fIr2\fP/\fIr3\fP übergeben wird. Das bedeutet, dass ein Blindwert in \fIr1\fP (dem zweiten Argument von 0) eingefügt werden muss. Es muss auch darauf geachtet werden, dass die Zerteilung den Endian\-Konventionen folgt (gemäß der C\-ABI dieser Plattform). .P .\" Mike Frysinger: this issue ends up forcing MIPS .\" O32 to take 7 arguments to syscall() Ähnliche Probleme können auf MIPS mit dem O32\-ABI, auf PowerPC und Parisc mit dem 32\-bit\-ABI und auf Xtensa auftreten. .P .\" See arch/parisc/kernel/sys_parisc.c. Beachten Sie, dass das Parisc\-C\-ABI zwar auch ausgerichtete Registerpaare verwendet, aber eine Ausgleichs\-Schicht verwendet, um das Problem vor dem Anwendungsraum zu verstecken. .P Die betroffenen Systemaufrufe sind \fBfadvise64_64\fP(2), \fBftruncate64\fP(2), \fBposix_fadvise\fP(2), \fBpread64\fP(2), \fBpwrite64\fP(2), \fBreadahead\fP(2), \fBsync_file_range\fP(2) und \fBtruncate64\fP(2). .P .\" You need to look up the syscalls directly in the kernel source to see if .\" they should be in this list. For example, look at fs/read_write.c and .\" the function signatures that do: .\" ..., unsigned long, pos_l, unsigned long, pos_h, ... .\" If they use off_t, then they most likely do not belong in this list. Dies betrifft Systemaufrufe, die manuell 64\-bit\-Werte auseinandernehmen und zusammensetzen, wie \fB_llseek\fP(2), \fBpreadv\fP(2), \fBpreadv2\fP(2), \fBpwritev\fP(2) und \fBpwritev2\fP(2), nicht. Willkomen in der wundervollen Welt der historischen Altlasten. .SS "Architekturabhängige Aufrufkonventionen" Jede Architektur hat ihre eigene Art, den Kernel aufzurufen und Argumente zu übergeben. Die Details für die verschiedenen Architekturen sind in zwei nachfolgenden Tabellen dargestellt. .P Die erste Tabelle führt die Anweisungen auf, die zum Übergang in den Kernelmodus verwandt werden (dies könnte nicht die schnellste oder beste Art zum Übergang in den Kernel sein, bitte schauen Sie auch in \fBvdso\fP(7)), das Register, das zur Angabe der Systemaufrufnummer, das oder die Register, die zur Rückgabe des Ergebnisses des Systemaufrufs und das Register, das zur Signalisierung eines Fehlers verwandt wird. .if t \{\ .ft CW \} .TS l2 l2 l2 l2 l1 l2 l. Arch/ABI Anweisung System Rück Rück Fehler Hinweise Aufruf # Wert Wert2 _ alpha callsys v0 v0 a4 a3 1, 6 Arc trap0 r8 r0 \- \- Arm/OABI swi NR \- r0 \- \- 2 Arm/EABI swi 0x0 r7 r0 r1 \- Arm64 svc #0 w8 x0 x1 \- Blackfin excpt 0x0 P0 R0 \- \- I386 int $0x80 eax eax edx \- Ia64 break 0x100000 r15 r8 r9 r10 1, 6 Loongarch syscall 0 a7 a0 \- \- M68k trap #0 d0 d0 \- \- Microblaze brki r14,8 r12 r3 \- \- Mips syscall v0 v0 v1 a3 1, 6 Nios II trap r2 r2 \- r7 PA\-RISC ble 0x100(%sr2, %r0) r20 r28 \- \- PowerPC sc r0 r3 \- r0 1 PowerPC64 sc r0 r3 \- cr0.SO 1 riscv ecall a7 a0 a1 \- S390 svc 0 r1 r2 r3 \- 3 S390x svc 0 r1 r2 r3 \- 3 SuperH trapa #31 r3 r0 r1 \- 4, 6 SPARC/32 t 0x10 g1 o0 o1 psr/csr 1, 6 SPARC/64 t 0x6d g1 o0 o1 psr/csr 1, 6 Tile swint1 R10 R00 \- R01 1 X86\-64 syscall rax rax rdx \- 5 X32 syscall rax rax rdx \- 5 Xtensa syscall a2 a2 \- \- .TE .P Hinweise: .IP \[bu] 3 Auf einigen Architekturen wird ein Register als logischer Wert verwandt (0 zeigt an, dass kein Fehler vorliegt und \-1 zeigt Fehler an), um mitzuteilen, dass der Systemaufruf fehlschlug. Der tatsächliche Fehlerwert ist weiterhin in dem Rückliefer\-Register enthalten. Auf Sparc wird das Zweierübergangsbit (\fIcsr\fP) im Prozessorstatusregister (\fIpsr\fP) anstelle eines vollständigen Registers verwandt. Auf PowerPC64 wird das zusammenfassende Überlaufbit (\fISO\fP) im Feld 0 des Bedingungsregisters (\fIcr0\fP) verwandt. .IP \[bu] \fINR\fP ist die Nummer des Systemaufrufs. .IP \[bu] Für S390 und S390x kann \fINR\fP (die Nummer des Systemaufrufs) direkt mit \fIsvc\ NR\fP übergeben werden, falls sie kleiner als 256 ist. .IP \[bu] Auf SuperH werden aus historischen Gründen zusätzliche Nummern für Ausnahmebehandlungen unterstützt, aber \fBtrapa\fP#31 ist die empfohlene »vereinigte« ABI. .IP \[bu] Das x32\-ABI nutzt die Systemaufruf\-Tabelle der x86\-64\-ABI mit, es gibt aber kleine Nuancen: .RS .IP \[bu] 3 Um anzuzeigen, dass ein Systemaufruf unter der x32\-ABI erfolgt, wird ein zusätzliches Bit (\fB__X32_SYSCALL_BIT\fP) durch ein bitweises ODER mit der Systemaufrufnummer verknüpft. Das von einem Prozess verwandte ABI betrifft einige Prozessverhalten, einschließlich der Signalverarbeitung oder dem Neustarten von Systemaufrufen. .IP \[bu] Da x32 andere Größen für \fIlong\fP und Zeigertypen hat, ist das Layout einiger Strukturen (aber nicht aller: \fIstruct timeval\fP oder \fIstruct rlimit\fP sind beispielsweise 64 bit) anders. Um damit umzugehen, werden zusätzliche Systemaufrufe zu der Systemaufruftabelle hinzugefügt, beginnend bei Nummer 512 (ohne das \fB__X32_SYSCALL_BIT\fP). Beispielsweise ist \fB__NR_readv\fP als 19 für das x86\-64\-ABI und als \fI__X32_SYSCALL_BIT\fP | \fB515\fP für das x32\-ABI definiert. Die meisten dieser zusätzlichen Systemaufrufe sind tatsächlich zu den Systemaufrufen, die zur Bereitstellung der i386\-Kompatibilität verwandt werden, identisch. Es gibt allerdings ein paar bemerkenswerte Ausnahmen, wie \fBpreadv2\fP(2), das Einheiten \fIstruct iovec\fP mit 4\-byte\-Zeigern und Größen (»compat_iovec« in der Kernelsprache) verwendet, aber ein 8\-byte Argument \fIpos\fP in einem einzelnen Register (und nicht in zweien) übergibt, wie dies in jedem anderen ABI erfolgt. .RE .IP \[bu] Einige Architekturen (konkret Alpha, IA\-64, MIPS, SuperH, Sparc/32 und Sparc/64) verwenden ein zweites Register (»Rückwert2« in der obigen Tabelle), um einen zweiten Rückgabewert von dem Systemaufruf \fBpipe\fP(2) zurückzugeben. Alpha verwendet diese Technik auch in den architekturspezifischen Systemaufrufen \fBgetxpid\fP(2), \fBgetxuid\fP(2) und \fBgetxgid\fP(2). Andere Architekturen verwenden das zweite Rückgaberegister in der Systemaufrufschnittstelle nicht, selbst wenn es in der System\-V\-ABI definiert ist. .if t \{\ .in ^".ft P$ \} .P Die zweite Tabelle zeigt die Register, die zur Übergabe der Systemaufrufargumente verwandt werden. .if t \{\ .ft CW \} .TS l l2 l2 l2 l2 l2 l2 l2 l. Arch/ABI Arg1 Arg2 Arg3 Arg4 Arg5 Arg6 Arg7 Hinweise _ alpha a0 a1 a2 a3 a4 a5 \- Arc r0 r1 r2 r3 r4 r5 \- Arm/OABI r0 r1 r2 r3 r4 r5 r6 Arm/EABI r0 r1 r2 r3 r4 r5 r6 Arm64 x0 x1 x2 x3 x4 x5 \- Blackfin R0 R1 R2 R3 R4 R5 \- I386 ebx ecx edx esi edi ebp \- Ia64 out0 out1 out2 out3 out4 out5 \- Loongarch a0 a1 a2 a3 a4 a5 a6 M68k d1 d2 d3 d4 d5 a0 \- Microblaze r5 r6 r7 r8 r9 r10 \- MIPS/o32 a0 a1 a2 a3 \- \- \- 1 MIPS/n32,64 a0 a1 a2 a3 a4 a5 \- Nios II r4 r5 r6 r7 r8 r9 \- PA\-RISC r26 r25 r24 r23 r22 r21 \- PowerPC r3 r4 r5 r6 r7 r8 r9 PowerPC64 r3 r4 r5 r6 r7 r8 \- riscv a0 a1 a2 a3 a4 a5 \- S390 r2 r3 r4 r5 r6 r7 \- S390x r2 r3 r4 r5 r6 r7 \- SuperH r4 r5 r6 r7 r0 r1 r2 SPARC/32 o0 o1 o2 o3 o4 o5 \- SPARC/64 o0 o1 o2 o3 o4 o5 \- Tile R00 R01 R02 R03 R04 R05 \- X86\-64 rdi rsi rdx r10 r8 r9 \- X32 rdi rsi rdx r10 r8 r9 \- Xtensa a6 a3 a4 a5 a8 a9 \- .TE .P Hinweise: .IP \[bu] 3 Die Systemaufrufkonvention von MIPS/o32 übergibt die Argumente 5 bis 8 über den Benutzer\-Stack. .if t \{\ .in ^".ft P$ \} .P Beachten Sie, dass diese Tabellen nicht die gesamte Aufrufkonvention abdecken\[en]einige Architekturen könnten rücksichtslos andere, hier nicht aufgeführte Register belegen. .SH BEISPIELE .\" SRC BEGIN (syscall.c) .EX #define _GNU_SOURCE #include #include #include #include \& int main(void) { pid_t tid; \& tid = syscall(SYS_gettid); syscall(SYS_tgkill, getpid(), tid, SIGHUP); } .EE .\" SRC END .SH "SIEHE AUCH" \fB_syscall\fP(2), \fBintro\fP(2), \fBsyscalls\fP(2), \fBerrno\fP(3), \fBvdso\fP(7) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .