Je viens de tomber sur un OS avec OpenBSD et je ne comprends pas
bien ce qui se passe.
Considérons le code suivant :
if ((s_etat_processus.pile_signal.ss_sp =
malloc(s_etat_processus.pile_signal.ss_size =
SIGSTKSZ)) == NULL)
{
// Gestion de l'erreur sans aucun intérêt ici
exit(EXIT_FAILURE);
}
s_etat_processus.pile_signal.ss_flags = 0;
if (sigaltstack(&s_etat_processus.pile_signal, NULL) != 0)
{
perror("");
exit(EXIT_FAILURE);
}
...
J'ai testé sous :
- Solaris 9 sparc : OK
- Solaris 10 sparc, i386 : OK
- Linux 2.6 (debian) i386, amd64, sparc64 : OK
- NetBSD 4.0 sparc : OK
- OpenBSD 4.3 i386 : KO !
Sous OpenBSD 4.3, perror() m'affiche un superbe "Invalid argument".
Je viens de lire, relire, rerelire, rererelire... la page de man de
sigaltstack (sous OpenBSD), je ne vois pas ce qui n'est pas bon et
en quoi j'ai écrit une conn^Wbêtise.
Une idée ?
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Tu fais ça dans le code principal du programme, on dans un signal handler ?
if ((s_etat_processus.pile_signal.ss_sp
Beurk les noms de variable en français...
JKB
Le 17-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Nicolas George écrivait dans fr.comp.os.unix :
JKB wrote in message :
Considérons le code suivant :
Tu fais ça dans le code principal du programme, on dans un signal handler ?
Directement dans le corps du programme, au début, car je cherche à récupérer les segfaults, les bus errors et les dépassements de pile.
if ((s_etat_processus.pile_signal.ss_sp >
Beurk les noms de variable en français...
Je ne vois pas ce que cette remarque fait ici.
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 17-06-2008, à propos de
Re: Portabilité Solaris/Linux/NetBSD/OpenBSD,
Nicolas George écrivait dans fr.comp.os.unix :
JKB wrote in message <slrng5fgjf.frk.knatschke@rayleigh.systella.fr>:
Considérons le code suivant :
Tu fais ça dans le code principal du programme, on dans un signal handler ?
Directement dans le corps du programme, au début, car je cherche à
récupérer les segfaults, les bus errors et les dépassements de pile.
if ((s_etat_processus.pile_signal.ss_sp >
Beurk les noms de variable en français...
Je ne vois pas ce que cette remarque fait ici.
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 17-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Nicolas George écrivait dans fr.comp.os.unix :
JKB wrote in message :
Considérons le code suivant :
Tu fais ça dans le code principal du programme, on dans un signal handler ?
Directement dans le corps du programme, au début, car je cherche à récupérer les segfaults, les bus errors et les dépassements de pile.
if ((s_etat_processus.pile_signal.ss_sp >
Beurk les noms de variable en français...
Je ne vois pas ce que cette remarque fait ici.
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Eric Levenez
Le 17/06/08 15:56, dans , « JKB » a écrit :
J'ai testé sous : - Solaris 9 sparc : OK - Solaris 10 sparc, i386 : OK - Linux 2.6 (debian) i386, amd64, sparc64 : OK - NetBSD 4.0 sparc : OK - OpenBSD 4.3 i386 : KO !
Tu peux ajouter :
- Mac OS X 10.5.3 : i386, x86_64 : OK
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 17/06/08 15:56, dans <slrng5fgjf.frk.knatschke@rayleigh.systella.fr>,
« JKB » <knatschke@koenigsberg.fr> a écrit :
J'ai testé sous :
- Solaris 9 sparc : OK
- Solaris 10 sparc, i386 : OK
- Linux 2.6 (debian) i386, amd64, sparc64 : OK
- NetBSD 4.0 sparc : OK
- OpenBSD 4.3 i386 : KO !
Tu peux ajouter :
- Mac OS X 10.5.3 : i386, x86_64 : OK
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
J'ai testé sous : - Solaris 9 sparc : OK - Solaris 10 sparc, i386 : OK - Linux 2.6 (debian) i386, amd64, sparc64 : OK - NetBSD 4.0 sparc : OK - OpenBSD 4.3 i386 : KO !
Tu peux ajouter :
- Mac OS X 10.5.3 : i386, x86_64 : OK
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
JKB
Le 17-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Eric Levenez écrivait dans fr.comp.os.unix :
Le 17/06/08 15:56, dans , « JKB » a écrit :
J'ai testé sous : - Solaris 9 sparc : OK - Solaris 10 sparc, i386 : OK - Linux 2.6 (debian) i386, amd64, sparc64 : OK - NetBSD 4.0 sparc : OK - OpenBSD 4.3 i386 : KO !
Tu peux ajouter :
- Mac OS X 10.5.3 : i386, x86_64 : OK
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ). Bon, ce n'est toujours pas une explication rationnelle...
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 17-06-2008, à propos de
Re: Portabilité Solaris/Linux/NetBSD/OpenBSD,
Eric Levenez écrivait dans fr.comp.os.unix :
Le 17/06/08 15:56, dans <slrng5fgjf.frk.knatschke@rayleigh.systella.fr>,
« JKB » <knatschke@koenigsberg.fr> a écrit :
J'ai testé sous :
- Solaris 9 sparc : OK
- Solaris 10 sparc, i386 : OK
- Linux 2.6 (debian) i386, amd64, sparc64 : OK
- NetBSD 4.0 sparc : OK
- OpenBSD 4.3 i386 : KO !
Tu peux ajouter :
- Mac OS X 10.5.3 : i386, x86_64 : OK
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ).
Bon, ce n'est toujours pas une explication rationnelle...
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 17-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Eric Levenez écrivait dans fr.comp.os.unix :
Le 17/06/08 15:56, dans , « JKB » a écrit :
J'ai testé sous : - Solaris 9 sparc : OK - Solaris 10 sparc, i386 : OK - Linux 2.6 (debian) i386, amd64, sparc64 : OK - NetBSD 4.0 sparc : OK - OpenBSD 4.3 i386 : KO !
Tu peux ajouter :
- Mac OS X 10.5.3 : i386, x86_64 : OK
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ). Bon, ce n'est toujours pas une explication rationnelle...
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Gabriel Linder
On Tue, 17 Jun 2008 16:28:03 +0000, JKB wrote:
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ). Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Par contre, tu le compiles avec une version de GCC ou des options spéciales ?
On Tue, 17 Jun 2008 16:28:03 +0000, JKB wrote:
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ).
Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme
un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je
pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Par contre, tu le compiles avec une version de GCC ou des options
spéciales ?
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ). Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Par contre, tu le compiles avec une version de GCC ou des options spéciales ?
JKB
Le 18-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Gabriel Linder écrivait dans fr.comp.os.unix :
On Tue, 17 Jun 2008 16:28:03 +0000, JKB wrote:
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ). Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin plus loin d'un gfortran).
Par contre, tu le compiles avec une version de GCC ou des options spéciales ?
gauss:[~] > gcc -v Utilisation des specs internes. Target: i386-unknown-openbsd4.3 Configuré avec: ../gcc-4.3.1/configure -v --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/opt --enable-shared --enable-threads=posix --disable-multilib --with-mpfr=/usr/local --with-gmp=/usr/local Mode de thread: posix gcc version 4.3.1 (GCC)
Je n'ai pas l'impression qu'il y ait une option ésotérique là dedans...
Je n'ai pas essayé avec une autre version de gcc sous OpenBSD, mais avec la même version de gcc sous Solaris, ça roule...
Cordialement,
JKB -- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 18-06-2008, à propos de
Re: Portabilité Solaris/Linux/NetBSD/OpenBSD,
Gabriel Linder écrivait dans fr.comp.os.unix :
On Tue, 17 Jun 2008 16:28:03 +0000, JKB wrote:
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ).
Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme
un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je
pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin plus
loin d'un gfortran).
Par contre, tu le compiles avec une version de GCC ou des options
spéciales ?
gauss:[~] > gcc -v
Utilisation des specs internes.
Target: i386-unknown-openbsd4.3
Configuré avec: ../gcc-4.3.1/configure -v
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/opt
--enable-shared --enable-threads=posix --disable-multilib
--with-mpfr=/usr/local --with-gmp=/usr/local
Mode de thread: posix
gcc version 4.3.1 (GCC)
Je n'ai pas l'impression qu'il y ait une option ésotérique là
dedans...
Je n'ai pas essayé avec une autre version de gcc sous OpenBSD, mais avec la
même version de gcc sous Solaris, ça roule...
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 18-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Gabriel Linder écrivait dans fr.comp.os.unix :
On Tue, 17 Jun 2008 16:28:03 +0000, JKB wrote:
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ). Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin plus loin d'un gfortran).
Par contre, tu le compiles avec une version de GCC ou des options spéciales ?
gauss:[~] > gcc -v Utilisation des specs internes. Target: i386-unknown-openbsd4.3 Configuré avec: ../gcc-4.3.1/configure -v --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/opt --enable-shared --enable-threads=posix --disable-multilib --with-mpfr=/usr/local --with-gmp=/usr/local Mode de thread: posix gcc version 4.3.1 (GCC)
Je n'ai pas l'impression qu'il y ait une option ésotérique là dedans...
Je n'ai pas essayé avec une autre version de gcc sous OpenBSD, mais avec la même version de gcc sous Solaris, ça roule...
Cordialement,
JKB -- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Gabriel Linder
On Wed, 18 Jun 2008 12:03:18 +0000, JKB wrote:
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin
plus
loin d'un gfortran).
Je ne me suis pas amusé à installer un GCC 4.3.1, mais avec celui présent dans le système de base le code s'exécute sans souci.
On Wed, 18 Jun 2008 12:03:18 +0000, JKB wrote:
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin
plus
loin d'un gfortran).
Je ne me suis pas amusé à installer un GCC 4.3.1, mais avec celui présent
dans le système de base le code s'exécute sans souci.
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin
plus
loin d'un gfortran).
Je ne me suis pas amusé à installer un GCC 4.3.1, mais avec celui présent dans le système de base le code s'exécute sans souci.
JKB
Le 19-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Gabriel Linder écrivait dans fr.comp.os.unix :
On Wed, 18 Jun 2008 12:03:18 +0000, JKB wrote:
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin
plus
loin d'un gfortran).
Je ne me suis pas amusé à installer un GCC 4.3.1, mais avec celui présent dans le système de base le code s'exécute sans souci.
Bon, je vais donc devoir regarder la sortie assembleur :-( ...
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 19-06-2008, à propos de
Re: Portabilité Solaris/Linux/NetBSD/OpenBSD,
Gabriel Linder écrivait dans fr.comp.os.unix :
On Wed, 18 Jun 2008 12:03:18 +0000, JKB wrote:
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin
plus
loin d'un gfortran).
Je ne me suis pas amusé à installer un GCC 4.3.1, mais avec celui présent
dans le système de base le code s'exécute sans souci.
Bon, je vais donc devoir regarder la sortie assembleur :-( ...
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 19-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Gabriel Linder écrivait dans fr.comp.os.unix :
On Wed, 18 Jun 2008 12:03:18 +0000, JKB wrote:
Je compile avec un gcc 4.3.1 compilé par mes soins (j'ai besoin
plus
loin d'un gfortran).
Je ne me suis pas amusé à installer un GCC 4.3.1, mais avec celui présent dans le système de base le code s'exécute sans souci.
Bon, je vais donc devoir regarder la sortie assembleur :-( ...
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
JKB
Le 18-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Gabriel Linder écrivait dans fr.comp.os.unix :
On Tue, 17 Jun 2008 16:28:03 +0000, JKB wrote:
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ). Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Par contre, tu le compiles avec une version de GCC ou des options spéciales ?
Xpost et Fu2...
Je comprends de moins en moins le problème... Considérons le bout de code suivant :
if (getenv("HOME") != NULL) { home = getenv("HOME"); } else if ((getenv("USER") != NULL) && (getpwnam(getenv("USER")) != NULL)) { home = getpwnam(getenv("USER"))->pw_dir; } else if ((getenv("LOGNAME") != NULL) && (getpwnam(getenv("LOGNAME")) != NULL)) { home = getpwnam(getenv("LOGNAME"))->pw_dir; } else if ((getuid() != -1) && (getpwuid(getuid()) != NULL)) { home = getpwuid(getuid())->pw_dir; } else { home = ""; }
// Initialisation d'une pile de signal pour ruper les // dordement de pile
// s_processus.pile_system est une variable stack_t
if ((s_etat_processus.pile_signal.ss_sp malloc(s_etat_processus.pile_signal.ss_size SIGSTKSZ)) == NULL) { erreur = d_es_allocation_memoire;
if (s_etat_processus.langue == 'F') { printf("+++Syste : Mémoire insuffisanten"); } else { printf("+++System : Not enough memoryn"); }
return(EXIT_FAILURE); }
s_etat_processus.pile_signal.ss_flags = 0;
if (sigaltstack(&s_etat_processus.pile_signal, NULL) != 0) { erreur = d_es_signal;
if (s_etat_processus.langue == 'F') { printf("+++Système : " "Initialisation de la pile spécifique de signal" " impossiblen"); } else { printf("+++System : Initialization of signal " "stack failedn"); }
return(EXIT_FAILURE); }
/* ............... */
return(EXIT_SUCCESS); }
J'ai dû écrire une absurdité, mais je ne vois toujours pas laquelle. Surtout, je ne vois pas la différence entre mon exemple minimal qui fonctionne et mon code qui ne fonctionne pas sous OpenBSD i386 (tous les autres Unix que j'ai sous la main Solaris, Linux, NetBSD sous sparc32, sparc64, ppc32, i386 et amd64 ont été testés avec succès).
Une idée ?
Cordialement,
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 18-06-2008, à propos de
Re: Portabilité Solaris/Linux/NetBSD/OpenBSD,
Gabriel Linder écrivait dans fr.comp.os.unix :
On Tue, 17 Jun 2008 16:28:03 +0000, JKB wrote:
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ).
Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme
un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je
pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Par contre, tu le compiles avec une version de GCC ou des options
spéciales ?
Xpost et Fu2...
Je comprends de moins en moins le problème...
Considérons le bout de code suivant :
if (getenv("HOME") != NULL)
{
home = getenv("HOME");
}
else if ((getenv("USER") != NULL) && (getpwnam(getenv("USER")) != NULL))
{
home = getpwnam(getenv("USER"))->pw_dir;
}
else if ((getenv("LOGNAME") != NULL) && (getpwnam(getenv("LOGNAME"))
!= NULL))
{
home = getpwnam(getenv("LOGNAME"))->pw_dir;
}
else if ((getuid() != -1) && (getpwuid(getuid()) != NULL))
{
home = getpwuid(getuid())->pw_dir;
}
else
{
home = "";
}
// Initialisation d'une pile de signal pour ruper les
// dordement de pile
// s_processus.pile_system est une variable stack_t
if ((s_etat_processus.pile_signal.ss_sp malloc(s_etat_processus.pile_signal.ss_size SIGSTKSZ)) == NULL)
{
erreur = d_es_allocation_memoire;
if (s_etat_processus.langue == 'F')
{
printf("+++Syste : Mémoire insuffisanten");
}
else
{
printf("+++System : Not enough memoryn");
}
return(EXIT_FAILURE);
}
s_etat_processus.pile_signal.ss_flags = 0;
if (sigaltstack(&s_etat_processus.pile_signal, NULL) != 0)
{
erreur = d_es_signal;
if (s_etat_processus.langue == 'F')
{
printf("+++Système : "
"Initialisation de la pile spécifique de signal"
" impossiblen");
}
else
{
printf("+++System : Initialization of signal "
"stack failedn");
}
return(EXIT_FAILURE);
}
/* ............... */
return(EXIT_SUCCESS);
}
J'ai dû écrire une absurdité, mais je ne vois toujours pas laquelle.
Surtout, je ne vois pas la différence entre mon exemple minimal qui
fonctionne et mon code qui ne fonctionne pas sous OpenBSD i386 (tous
les autres Unix que j'ai sous la main Solaris, Linux, NetBSD sous
sparc32, sparc64, ppc32, i386 et amd64 ont été testés avec succès).
Une idée ?
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 18-06-2008, à propos de Re: Portabilité Solaris/Linux/NetBSD/OpenBSD, Gabriel Linder écrivait dans fr.comp.os.unix :
On Tue, 17 Jun 2008 16:28:03 +0000, JKB wrote:
Je n'ai pas (mon mac est un PPC qui tourne avec le pingouin ;-) ). Bon, ce n'est toujours pas une explication rationnelle...
JKB
Je viens de tester ton code sur un OpenBSD 4.3/amd64, et il tourne comme un charme. Je n'ai pas d'OpenBSD 4.3/i386 sous la main actuellement, je pourrais tester ce soir sur un OpenBSD/i386 -current, si tu veux.
Par contre, tu le compiles avec une version de GCC ou des options spéciales ?
Xpost et Fu2...
Je comprends de moins en moins le problème... Considérons le bout de code suivant :
if (getenv("HOME") != NULL) { home = getenv("HOME"); } else if ((getenv("USER") != NULL) && (getpwnam(getenv("USER")) != NULL)) { home = getpwnam(getenv("USER"))->pw_dir; } else if ((getenv("LOGNAME") != NULL) && (getpwnam(getenv("LOGNAME")) != NULL)) { home = getpwnam(getenv("LOGNAME"))->pw_dir; } else if ((getuid() != -1) && (getpwuid(getuid()) != NULL)) { home = getpwuid(getuid())->pw_dir; } else { home = ""; }
// Initialisation d'une pile de signal pour ruper les // dordement de pile
// s_processus.pile_system est une variable stack_t
if ((s_etat_processus.pile_signal.ss_sp malloc(s_etat_processus.pile_signal.ss_size SIGSTKSZ)) == NULL) { erreur = d_es_allocation_memoire;
if (s_etat_processus.langue == 'F') { printf("+++Syste : Mémoire insuffisanten"); } else { printf("+++System : Not enough memoryn"); }
return(EXIT_FAILURE); }
s_etat_processus.pile_signal.ss_flags = 0;
if (sigaltstack(&s_etat_processus.pile_signal, NULL) != 0) { erreur = d_es_signal;
if (s_etat_processus.langue == 'F') { printf("+++Système : " "Initialisation de la pile spécifique de signal" " impossiblen"); } else { printf("+++System : Initialization of signal " "stack failedn"); }
return(EXIT_FAILURE); }
/* ............... */
return(EXIT_SUCCESS); }
J'ai dû écrire une absurdité, mais je ne vois toujours pas laquelle. Surtout, je ne vois pas la différence entre mon exemple minimal qui fonctionne et mon code qui ne fonctionne pas sous OpenBSD i386 (tous les autres Unix que j'ai sous la main Solaris, Linux, NetBSD sous sparc32, sparc64, ppc32, i386 et amd64 ont été testés avec succès).
Une idée ?
Cordialement,
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Miod Vallat
> J'ai dû écrire une absurdité, mais je ne vois toujours pas laquelle.
Ça a l'air correct pourtant. Que donne un kdump du ktrace, histoire de connaître les valeurs exactes passées à l'appel système ?
> J'ai dû écrire une absurdité, mais je ne vois toujours pas laquelle.
Ça a l'air correct pourtant. Que donne un kdump du ktrace, histoire de
connaître les valeurs exactes passées à l'appel système ?