diff options
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/libc.h | 8 | ||||
-rw-r--r-- | src/internal/pthread_impl.h | 4 | ||||
-rw-r--r-- | src/internal/syscall.h | 14 |
3 files changed, 18 insertions, 8 deletions
diff --git a/src/internal/libc.h b/src/internal/libc.h index c0039e77..3f1e55e5 100644 --- a/src/internal/libc.h +++ b/src/internal/libc.h @@ -6,7 +6,7 @@ struct __libc { int *(*errno_location)(void); - void (*cancelpt)(int); + void (*testcancel)(void); void (*lock)(volatile int *); void (*lockfile)(FILE *); void (*fork_handler)(int); @@ -40,12 +40,6 @@ void __lock(volatile int *); void __lockfile(FILE *); #define LOCK(x) (libc.threads_minus_1 ? (__lock(x),1) : ((void)(x),1)) #define UNLOCK(x) (*(x)=0) -#define CANCELPT(x) (libc.cancelpt ? libc.cancelpt((x)),0 : (void)(x),0) -#define CANCELPT_BEGIN CANCELPT(1) -#define CANCELPT_TRY CANCELPT(0) -#define CANCELPT_END CANCELPT(-1) -#define CANCELPT_INHIBIT CANCELPT(2) -#define CANCELPT_RESUME CANCELPT(-2) int __rsyscall(int, long, long, long, long, long, long); diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h index a6d90e9b..304bf98d 100644 --- a/src/internal/pthread_impl.h +++ b/src/internal/pthread_impl.h @@ -24,7 +24,8 @@ struct pthread { unsigned long tlsdesc[4]; pid_t tid, pid; int tsd_used, errno_val, *errno_ptr; - volatile int canceldisable, cancelasync, cancelpoint, cancel; + volatile uintptr_t cp_sp, cp_ip; + volatile int cancel, canceldisable, cancelasync; unsigned char *map_base; size_t map_size; void *start_arg; @@ -85,6 +86,7 @@ void __lock(volatile int *); void __unmapself(void *, size_t); int __timedwait(volatile int *, int, clockid_t, const struct timespec *, int); +int __timedwait_cp(volatile int *, int, clockid_t, const struct timespec *, int); void __wait(volatile int *, volatile int *, int, int); void __wake(volatile int *, int, int); diff --git a/src/internal/syscall.h b/src/internal/syscall.h index 39efc42d..0c71eca6 100644 --- a/src/internal/syscall.h +++ b/src/internal/syscall.h @@ -6,5 +6,19 @@ #include <sys/syscall.h> #define socketcall __socketcall +#define socketcall_cp __socketcall_cp + +#define __syscall_cp0(n) __syscall_cp(n,0,0,0,0,0,0) +#define __syscall_cp1(n,a) __syscall_cp(n,(long)(a),0,0,0,0,0) +#define __syscall_cp2(n,a,b) __syscall_cp(n,(long)(a),(long)(b),0,0,0,0) +#define __syscall_cp3(n,a,b,c) __syscall_cp(n,(long)(a),(long)(b),(long)(c),0,0,0) +#define __syscall_cp4(n,a,b,c,d) __syscall_cp(n,(long)(a),(long)(b),(long)(c),(long)(d),0,0) +#define __syscall_cp5(n,a,b,c,d,e) __syscall_cp(n,(long)(a),(long)(b),(long)(c),(long)(d),(long)(e),0) +#define __syscall_cp6(n,a,b,c,d,e,f) __syscall_cp(n,(long)(a),(long)(b),(long)(c),(long)(d),(long)(e),(long)(f)) + +long (__syscall_cp)(long, long, long, long, long, long, long); + +#define __syscall_cp(...) __SYSCALL_DISP(__syscall_cp,__VA_ARGS__) +#define syscall_cp(...) __syscall_ret(__syscall_cp(__VA_ARGS__)) #endif |