.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" %%%LICENSE_END .\" .\" @(#)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 "9 juin 2020" Linux "Manuel du programmeur Linux" .SH NOM syscall \- appel système indirect .SH SYNOPSIS .nf \fB#include \fP \fB#include \fP/* Pour les définitions de SYS_xxx */ .PP \fBlong syscall(long \fP\fInuméro\fP\fB, ...);\fP .fi .PP .RS -4 Exigences de macros de test de fonctionnalités pour la glibc (consulter \fBfeature_test_macros\fP(7))\ : .RE \fBsyscall\fP() .PD 0 .ad l .RS 4 .TP 4 Depuis la glibc\ 2.19 : _DEFAULT_SOURCE .TP Avant la glibc\ 2.19\ : _BSD_SOURCE || _SVID_SOURCE .RE .ad .PD .SH DESCRIPTION \fBsyscall\fP() est une petite fonction de bibliothèque qui invoque l'appel système dont l'interface en assembleur a le \fInuméro\fP indiqué avec les arguments donnés. L'utilisation de \fBsyscall\fP() est pratique, par exemple, pour invoquer un appel système qui n'a pas de fonction d'enveloppe dans la bibliothèque\ C. .PP \fBsyscall\fP() sauve les registres du processeur avant de faire l'appel système, restaure les registres au retour de l'appel système et stocke tous les codes d'erreur renvoyés par l'appel système dans \fBerrno\fP(3). .PP Les constantes symboliques correspondant aux appels système sont dans le fichier d'en\-tête \fI\fP. .SH "VALEUR RENVOYÉE" La valeur de retour est définie par l'appel système invoqué. En général, une valeur de retour \fB0\fP indique une réussite. Une valeur de retour de \fB\-1\fP indique une erreur, et un code d'erreur est fourni dans \fIerrno\fP. .SH NOTES \fBsyscall\fP() est apparu dans BSD\ 4. .SS "Exigences dépendantes de l'architecture" L'ABI de chaque architecture possède ses propres exigences sur la façon dont les paramètres des appels système sont passés au noyau. Pour les appels système qui ont une fonction d'enveloppe de la glibc (comme par exemple la plupart des appels système), la glibc s'occupe des détails pour copier les arguments dans les bons registres d'une manière adaptée à chaque architecture. Cependant, en utilisant \fBsyscall\fP() pour effectuer un appel système, l'appelant peut avoir besoin de gérer certains détails dépendants de l'architecture\ ; cette exigence est en particulier rencontrée sur certaines architectures 32\ bits. .PP Par exemple, pour l'Embedded ABI (EABI) de l'architecture ARM, une valeur 64\ bits (c'est\-à\-dire un \fIlong long\fP) doit être alignée sur une paire de registres paire. Ainsi, en appelant \fBsyscall\fP() au lieu de la fonction d'enveloppe fournie par la glibc, l'appel système \fBreadahead\fP() devrait être effectué ainsi sur l'architecture ARM avec l'EABI\ : .PP .in +4n .EX syscall(SYS_readahead, fd, 0, (unsigned int) (offset & 0xFFFFFFFF), (unsigned int) (offset >> 32), count); .EE .in .PP Comme le paramètre offset est 64\ bits, et le premier argument (\fIfd\fP) est passé dans \fIr0\fP, l'appelant doit manuellement découper et aligner la valeur 64\ bits afin de la passer dans la paire de registres \fIr2\fP/\fIr3\fP. Cela implique de passer une valeur fantôme dans \fIr1\fP (le second argument, qui vaut \fB0\fP). Il faut également veiller à ce que la division respecte les conventions endian (selon l'ABI\ C de la plateforme). .PP .\" Mike Frysinger: this issue ends up forcing MIPS .\" O32 to take 7 arguments to syscall() Des problèmes similaires peuvent survenir sur MIPS avec l'ABI O32, sur PowerPC avec l'ABI 32\ bits, et sur Xtensa. .PP .\" See arch/parisc/kernel/sys_parisc.c. Notez qu'alors que l'ABI parisc\ C utilise aussi des paires de registres alignés, il utilise une couche shim pour cacher le résultat de l'espace utilisateur. .PP Les appels système concernés sont \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) et \fBtruncate64\fP(2). .PP .\" 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. Cela n'affecte pas les appels système qui séparent et assemblent manuellement les valeurs 64\ bits telles que \fB_llseek\fP(2), \fBpreadv\fP(2), \fBpreadv2\fP(2), \fBpwritev\fP(2) et \fBpwrite2\fP(2). Bienvenue dans le monde fanstastique du bagage historique. .SS "Conventions d'appel par architecture" Chaque architecture possède sa façon propre d'invoquer et de passer des paramètres au noyau. Les détails pour diverses architectures sont donnés dans les deux tableaux ci\-dessous. .PP Le premier tableau liste l'instruction utilisée pour passer en mode noyau (qui n'est pas forcément la méthode la meilleure ou la plus rapide, vous devriez consulter \fBvdso\fP(7)), le registre (ou les registres) utilisé(s) pour indiquer le numéro de l'appel système, et le registre utilisé comme code de retour de l'appel système, et le registre utilisé pour signaler une erreur. .if t \{\ .ft CW \} .TS l2 l2 l2 l2 l1 l2 l. Arch/ABI Instruction Appel Ret Ret Erreur Notes système n° val val2 _ 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 m68k trap #0 d0 d0 \- \- microblaze brki r14,8 r12 r3 \- \- mips syscall v0 v0 v1 a3 1, 6 nios2 trap r2 r2 \- r7 parisc 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 trap #0x17 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 .PP Notes\ : .IP [1] 4 Sur quelques architectures, un registre est utilisé comme un boléen (\fB0\fP indiquant aucune erreur et \fB\-1\fP indiquant une erreur) pour signaler que l'appel système a échoué. La valeur de l'erreur actuelle est toujours contenue dans le registre renvoyé. Sur sparc, le bit de transport (carry bit, \fIcsr\fP) dans le registre d'état du processeur (\fIpsr\fP) est utilisé au lieu d'un registre entier. Sur powerpc64, le bit de débordement (overflow bit) sommaire (\fISO\fP) dans le champ\ 0 du registre de condition (\fIcr0\fP) est utilisé. .IP [2] \fINR\fP est le numéro de l'appel système. .IP [3] Pour s390 et s390x, \fINR\fP (le numéro de l'appel système) peut être passé directement avec \fIsvc\ NR\fP s'il est inférieur à 256. .IP [4] Sur SuperH, le numéro de capture contrôle le nombre maximal d'arguments passés. Un \fItrap\#0x10\fP peut être utilisé seulement avec des appels système à 0 argument, un \fItrap\#0x11\fP peut être utilisé avec des appels système à zéro ou un argument, et ainsi de suite jusqu'à \fItrap\#0x17\fP pour des appels système à sept arguments. .IP [5] Les ABI x32 partagent la table syscall avec l'ABI x86\-64, mais avec quelques nuances\ : .RS .IP \(bu 3 De manière à indiquer qu'un appel système est appelé sous une ABI x32, un bit additionnel, \fB_X32_SYSCALL_BIT\fP, est associé par un \fIOU\fP binaire avec le numéro d'appel système. L'ABI utilise un processus qui influe sur le comportement des processus, comme le traitement des signaux ou redémarrage d'un appel système. .IP \(bu Comme x32 a des tailles différentes pour \fIlong\fP et les types «\ pointeur\ », les dispositions de quelques structures (mais pas toutes\ ; \fIstruct timeval\fP ou \fIstruct rlimit\fP sont en 64\ bits, par exemple) sont différentes. Pour manipuler cela des appels système supplémentaires sont ajoutés à la table d'appel système, commençant au numéro 512 (sans le \fB_X32_SYSCALL BIT\fP). Par exemple, \fB_NR_ready\fP est défini à\ 19 pour l'ABI x86\-64 et comme \fI_X32_SYSCALL_BIT\fP | \fB515\fP pour l'ABI x32. La plupart de ces appels système additionnels sont actuellement identiques aux appels système utilisés pour fournir la compatibilité i386. Cependant, il y a quelques exceptions notables, comme avec \fBprreadv2\fP(2), qui utilisent une entité \fIstruct iovec\fP avec des pointeurs et des tailles («\ compat_iovec\ » au niveau du noyau) en 4\ bits, mais passe un argument \fIpos\fP 8\ bits dans un seul registre et non deux comme il est fait dans toute autre ABI. .RE .IP [6] Quelques architectures (nommément\ : Alpha, IA\-64, MIPS, SuperH, sparc/32 et sparc/64) utilisent un registre additionnel («\ Retval2\ » dans la table ci\-dessus) pour renvoyer une deuxième valeur de renvoi de l'appel système \fBpipe\fP(2)\ ; Alpha utilise aussi cette technique pour les appels système \fBgetxgid\fP(2), \fBgetxuid\fP(2) et \fBgetxpid\fP(2) spécifiques à l'architecture. Les autres architectures n'utilisent pas le registre de la seconde valeur renvoyée dans l'interface de l'appel système, même s'il est défini dans l'ABI de System\ V. .if t \{\ .in .ft P \} .PP Le second tableau montre les registres utilisés pour passer les paramètres de l'appel système. .if t \{\ .ft CW \} .TS l l2 l2 l2 l2 l2 l2 l2 l. Arch/ABI arg1 arg2 arg3 arg4 arg5 arg6 arg7 Notes _ 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 \- 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 \- nios2 r4 r5 r6 r7 r8 r9 \- parisc 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 .PP Notes\ : .IP [1] 4 La convention d'appel système mips/o32 passe les arguments\ 5 à\ 8 sur la pile utilisateur. .if t \{\ .in .ft P \} .PP Notez que ces tableaux ne couvrent pas l'ensemble des conventions d'appel système, certaines architectures peuvent écraser sans distinction d'autres registres non listés ici. .SH EXEMPLES .EX #define _GNU_SOURCE #include #include #include #include int main(int argc, char *argv[]) { pid_t tid; tid = syscall(SYS_gettid); syscall(SYS_tgkill, getpid(), tid, SIGHUP); } .EE .SH "VOIR AUSSI" \fB_syscall\fP(2), \fBintro\fP(2), \fBsyscalls\fP(2), \fBerrno\fP(3), \fBvdso\fP(7) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et bubu . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .