--- rpl/src/rpl.h 2010/05/10 08:30:55 1.33 +++ rpl/src/rpl.h 2010/05/16 19:36:20 1.35 @@ -32,7 +32,6 @@ # define _DARWIN_C_SOURCE #endif - /* ================================================================================ INCLUSIONS @@ -368,12 +367,6 @@ int sem_getvalue2(sem_t *semaphore, int # define abs(i) (((i) >= 0) ? (i) : (-i)) #endif -#define BUG(b, ...) \ - do { if (b) { uprintf("[%d] BUG! <%s()> at line #%d of %s\n", \ - (int) getpid(), __FUNCTION__, __LINE__, __FILE__); \ - __VA_ARGS__; fflush(stdout); \ - pthread_kill(pthread_self(), SIGBUS); }} while(0) - #define NOTICE(m) \ do \ { \ @@ -385,6 +378,7 @@ int sem_getvalue2(sem_t *semaphore, int #ifdef __GLIBC__ #include +#define __BACKTRACE #define BACKTRACE(n) \ do \ { \ @@ -413,6 +407,21 @@ int sem_getvalue2(sem_t *semaphore, int #define BACKTRACE(n) NOTICE("BACKTRACE only defined in glibc") #endif +#ifdef __BACKTRACE +# define BUG(b, ...) \ + do { if (b) { uprintf("[%d] BUG! <%s()> at line #%d of %s\n", \ + (int) getpid(), __FUNCTION__, __LINE__, __FILE__); \ + __VA_ARGS__; fflush(stdout); \ + BACKTRACE(64); \ + pthread_kill(pthread_self(), SIGBUS); }} while(0) +#else +# define BUG(b, ...) \ + do { if (b) { uprintf("[%d] BUG! <%s()> at line #%d of %s\n", \ + (int) getpid(), __FUNCTION__, __LINE__, __FILE__); \ + __VA_ARGS__; fflush(stdout); \ + pthread_kill(pthread_self(), SIGBUS); }} while(0) +#endif + /* ================================================================================ @@ -421,12 +430,14 @@ int sem_getvalue2(sem_t *semaphore, int */ #ifdef DEBUG_MEMOIRE +void analyse_post_mortem(); void *debug_memoire_ajout(size_t taille, const unsigned char *fonction, unsigned long ligne, const unsigned char *argument); void *debug_memoire_modification(void *pointeur, size_t taille, const unsigned char *fonction, unsigned long ligne, const unsigned char *argument); void debug_memoire_retrait(void *ptr); +void debug_memoire_verification(); #define malloc(s) debug_memoire_ajout(s, __FUNCTION__, __LINE__, #s) #define free(s) debug_memoire_retrait(s) @@ -2241,6 +2252,7 @@ void instruction_print(struct_processus void instruction_private(struct_processus *s_etat_processus); void instruction_prlcd(struct_processus *s_etat_processus); void instruction_prmd(struct_processus *s_etat_processus); +void instruction_procid(struct_processus *s_etat_processus); void instruction_prompt(struct_processus *s_etat_processus); void instruction_protect(struct_processus *s_etat_processus); void instruction_prst(struct_processus *s_etat_processus); @@ -2474,7 +2486,7 @@ void *allocation_maillon(struct_processu #ifndef RPLARGS void analyse(struct_processus *s_etat_processus, void (*fonction)()); -inline void *analyse_instruction(struct_processus *s_etat_processus, +void *analyse_instruction(struct_processus *s_etat_processus, unsigned char *candidat); void appel_gnuplot(struct_processus *s_etat_processus, unsigned char persistance); @@ -2492,7 +2504,6 @@ void conversion_majuscule_limitee(unsign void conversion_radians_vers_degres(real8 *angle); void correction_formateur_tex(struct_processus *s_etat_processus, unsigned char **ligne); -void debug_memoire_verification(struct_processus *s_etat_processus); void depilement_pile_systeme(struct_processus *s_etat_processus); void derivation(struct_processus *s_etat_processus, struct_objet **s_expression); @@ -2586,7 +2597,7 @@ void retrait_thread(struct_processus *s_ void retrait_thread_surveillance(struct_processus *s_etat_processus, struct_descripteur_thread *s_argument_thread); void rplcore(struct_processus *s_etat_processus); -inline void scrutation_injection(struct_processus *s_etat_processus); +void scrutation_injection(struct_processus *s_etat_processus); void sf(struct_processus *s_etat_processus, unsigned char indice_drapeau); void *surveillance_processus(void *argument); void swap(void *variable_1, void *variable_2, unsigned long taille_octets); @@ -2806,9 +2817,9 @@ logical1 test_fonction(unsigned char *ch */ #ifndef RPLARGS -inline ssize_t read_atomic(struct_processus *s_etat_processus, +ssize_t read_atomic(struct_processus *s_etat_processus, int fd, void *buf, size_t count); -inline ssize_t write_atomic(struct_processus *s_etat_processus, +ssize_t write_atomic(struct_processus *s_etat_processus, int fd, void *buf, size_t count); #endif @@ -3198,7 +3209,7 @@ void zgelsy_(integer4 *m, integer4 *n, i * drapeau depuis une bibliothèque). */ -inline int test_arret(struct_processus *s_etat_processus); +int test_arret(struct_processus *s_etat_processus); #endif