From ea343364a719add2cd8adf8a50c15bb5f9400dd8 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Fri, 25 Mar 2011 22:13:57 -0400 Subject: 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. --- arch/i386/bits/pthread.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'arch') diff --git a/arch/i386/bits/pthread.h b/arch/i386/bits/pthread.h index 7d19065d..7690ea39 100644 --- a/arch/i386/bits/pthread.h +++ b/arch/i386/bits/pthread.h @@ -4,3 +4,22 @@ struct __ptcb { struct __ptcb *__next; void *__ptrs[3]; }; + +static inline void __pthread_register_cancel_2(struct __ptcb *__cb) +{ + __asm__ __volatile__( "call __pthread_register_cancel" : : "a"(__cb) ); +} + +static inline void __pthread_unregister_cancel_2(struct __ptcb *__cb) +{ + __asm__ __volatile__( "call __pthread_unregister_cancel" : : "a"(__cb) ); +} + +static inline void __pthread_unwind_next_2(struct __ptcb *__cb) +{ + __asm__ __volatile__( "call __pthread_unwind_next" : : "a"(__cb) ); +} + +#define __pthread_register_cancel __pthread_register_cancel_2 +#define __pthread_unregister_cancel __pthread_unregister_cancel_2 +#define __pthread_unwind_next __pthread_unwind_next_2 -- cgit v1.2.1