match glibc/lsb cancellation abi on i386

glibc made the ridiculous choice to use pass-by-register calling
convention for these functions, which is impossible to duplicate
directly on non-gcc compilers. instead, we use ugly asm to wrap and
convert the calling convention. presumably this works with every
compiler anyone could potentially want to use.
This commit is contained in:
Rich Felker
2011-03-25 22:13:57 -04:00
parent 92b52b70e8
commit ea343364a7
8 changed files with 57 additions and 0 deletions

View File

@ -181,9 +181,11 @@ int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));
#include <bits/pthread.h>
int __setjmp(void *);
#ifndef __pthread_register_cancel
void __pthread_register_cancel(struct __ptcb *);
void __pthread_unregister_cancel(struct __ptcb *);
void __pthread_unwind_next(struct __ptcb *);
#endif
#define pthread_cleanup_push(f, x) \
do { struct __ptcb __cb; void (*__f)(void *) = (f); void *__x = (x); \