My Project
Chargement...
Recherche...
Aucune correspondance
appelsysteme.h
Aller à la documentation de ce fichier.
1/*----------------------------------------------------------------------------*/
2/* Définition de la partie utilisateur des appels système de ManuX. */
3/* */
4/* (C) Manu Chaput 2000-2021 */
5/*----------------------------------------------------------------------------*/
6#ifndef APPEL_SYSTEME_DEF
7#define APPEL_SYSTEME_DEF
8
9#include <manux/appelsystemenum.h> /* Les numéros des AS définis */
10#include <manux/types.h>
11
12/*
13 * Une macro permettant de définir l'interface d'un appel système
14 * sans argument.
15 */
16#define appelSysteme0(numero, typeRetour, nom) \
17 __attribute__ ((noinline)) typeRetour nom() \
18 { \
19 typeRetour resultat; \
20 __asm__ __volatile__ ("int %2" \
21 : "=a"(resultat) \
22 : "0" (numero), \
23 "N" (MANUX_AS_INT)); \
24 return resultat; \
25 }
26
27/*
28 * Une macro permettant de définir l'interface d'un appel système
29 * à un argument.
30 */
31#define appelSysteme1(numero, typeRetour, nom, typeArgument) \
32 __attribute__ ((noinline)) typeRetour nom(typeArgument argument) \
33 { \
34 typeRetour resultat; \
35 __asm__ __volatile__ ("int %2" \
36 : "=a"(resultat) \
37 : "0" (numero), \
38 "N" (MANUX_AS_INT)); \
39 return resultat; \
40 }
41
42/*
43 * Une macro permettant de définir l'interface d'un appel système
44 * à deux arguments.
45 */
46#define appelSysteme2(numero, typeRetour, nom, typeArgument1, typeArgument2) \
47 __attribute__ ((noinline)) typeRetour nom(typeArgument1 arg1, typeArgument2 arg2) \
48 { \
49 typeRetour resultat; \
50 __asm__ __volatile__ ("int %2" \
51 : "=a"(resultat) \
52 : "0" (numero), \
53 "N" (MANUX_AS_INT)); \
54 return resultat; \
55 }
56
57/*
58 * Une macro permettant de définir l'interface d'un appel système
59 * à trois arguments.
60 */
61#define appelSysteme3(numero, typeRetour, nom, typeArgument1, typeArgument2, typeArgument3) \
62 __attribute__ ((noinline)) typeRetour nom(typeArgument1 arg1, typeArgument2 arg2, typeArgument3 arg3) \
63 { \
64 typeRetour resultat; \
65 __asm__ __volatile__ ("int %2" \
66 : "=a"(resultat) \
67 : "0" (numero), \
68 "N" (MANUX_AS_INT)); \
69 return resultat; \
70 }
71
72#endif