Lors de la mise en place du gestionnaire de signal en utilisant
sigaction(2),
informer le système que ce gestionnaire de signal doit être exécuté
sur la pile spécifique de signal en positionnant le drapeau
SA_ONSTACK.
L'argument ss est utilisé afin de définir
une nouvelle pile spécifique de signal, tandis que
l'argument oss est utilisé afin de récupérer des
informations sur la pile de signal actuellement en place.
Si une seule de ces actions vous intéresse,
alors l'autre argument peut être positionné à NULL.
Chacun de ces paramètres est une structure du type suivant :
typedef struct {
void *ss_sp; /* Adresse de base de la pile*/
int ss_flags; /* drapeaux */
size_t ss_size; /* Nombre d'octets dans la pile */
} stack_t;
Afin de mettre en place une nouvelle pile spécifique de signal,
ss.ss_flags est positionné à zéro, et ss.ss_sp et
ss.ss_size spécifient l'adresse de début et la taille
de la pile.
La constante
SIGSTKSZ
est définie de façon à être suffisamment grande pour couvrir les besoins
typiques en espace mémoire d'une pile spécifique de signal,
et la constante
MINSIGSTKSZ
définit la taille minimum
nécessaire à l'exécution d'un gestionnaire de signal.
Lorsqu'un gestionnaire de signal est invoqué sur la nouvelle pile
spécifique, le noyau aligne automatiquement l'adresse donnée dans
ss.ss_sp
sur une frontière d'adresse convenable pour l'architecture matérielle
sous-jacente.
Afin de désactiver une pile existante, positionnez
ss.ss_flags
à
SS_DISABLE.
Dans ce cas, les autres champs de ss sont ignorés.
Si oss ne vaut pas NULL, alors il est utilisé afin de renvoyer
des informations sur la pile spécifique de signal qui était utilisée
avant l'appel à
sigaltstack().
Les champs oss.ss_sp et oss.ss_size renvoient l'adresse
de départ et la taille de cette pile.
Le champ oss.ss_flags peut renvoyer l'une des valeurs suivantes :