summaryrefslogtreecommitdiff
path: root/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h
diff options
context:
space:
mode:
Diffstat (limited to 'libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h')
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h125
1 files changed, 2 insertions, 123 deletions
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h
index db1cfdc04..181412c0c 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h
@@ -1,5 +1,4 @@
/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -17,142 +16,25 @@
#include <sysdep.h>
#include <tls.h>
-/* #include <pt-machine.h> */
#ifndef __ASSEMBLER__
# include <pthreadP.h>
#endif
#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
-#ifdef __ASSEMBLER__
-#if defined(__XTENSA_WINDOWED_ABI__)
-/* CENABLE/CDISABLE in PSEUDO below use call8, stack frame size must be
- * at least 32.
- */
-#if FRAMESIZE < 32
-#undef FRAMESIZE
-#define FRAMESIZE 32
-#endif
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- ENTRY (name) \
- SINGLE_THREAD_P(a15); \
- bnez a15, .Lpseudo_cancel; \
- DO_CALL (syscall_name, args); \
- bgez a2, .Lpseudo_done; \
- movi a4, -4095; \
- blt a2, a4, .Lpseudo_done; \
- j SYSCALL_ERROR_LABEL; \
- .Lpseudo_done: \
- retw; \
- .Lpseudo_cancel: \
- /* The syscall args are in a2...a7; no need to save */ \
- CENABLE; \
- /* The return value is in a10 and preserved across the syscall */ \
- DO_CALL (syscall_name, args); \
- CDISABLE; \
- bgez a2, .Lpseudo_end; \
- movi a4, -4095; \
- blt a2, a4, .Lpseudo_end; \
- j SYSCALL_ERROR_LABEL; \
- .Lpseudo_end:
-
-# define CENABLE movi a8, CENABLE_FUNC; \
- callx8 a8
-# define CDISABLE movi a8, CDISABLE_FUNC; \
- callx8 a8
-#elif defined(__XTENSA_CALL0_ABI__)
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- ENTRY (name) \
- SINGLE_THREAD_P(a10); \
- bnez a10, .Lpseudo_cancel; \
- DO_CALL (syscall_name, args); \
- bgez a2, .Lpseudo_done; \
- movi a4, -4095; \
- blt a2, a4, .Lpseudo_done; \
- j SYSCALL_ERROR_LABEL; \
- .Lpseudo_done: \
- ret; \
- .Lpseudo_cancel: \
- addi a1, a1, -32; \
- /* The syscall args are in a2...a7; save them */ \
- s32i a0, a1, 0; \
- s32i a2, a1, 4; \
- s32i a3, a1, 8; \
- s32i a4, a1, 12; \
- s32i a5, a1, 16; \
- s32i a6, a1, 20; \
- s32i a7, a1, 24; \
- CENABLE; \
- /* Move return value to a10 preserved across the syscall */ \
- mov a10, a2; \
- l32i a2, a1, 4; \
- l32i a3, a1, 8; \
- l32i a4, a1, 12; \
- l32i a5, a1, 16; \
- l32i a6, a1, 20; \
- l32i a7, a1, 24; \
- DO_CALL (syscall_name, args); \
- s32i a2, a1, 4; \
- mov a2, a10; \
- CDISABLE; \
- l32i a2, a1, 4; \
- l32i a0, a1, 0; \
- addi a1, a1, 32; \
- bgez a2, .Lpseudo_end; \
- movi a4, -4095; \
- blt a2, a4, .Lpseudo_end; \
- j SYSCALL_ERROR_LABEL; \
- .Lpseudo_end:
-
-# define CENABLE movi a0, CENABLE_FUNC; \
- callx0 a0
-# define CDISABLE movi a0, CDISABLE_FUNC; \
- callx0 a0
-#else
-#error Unsupported Xtensa ABI
-#endif
-#endif
-
# ifdef IS_IN_libpthread
-# define CENABLE_FUNC __pthread_enable_asynccancel
-# define CDISABLE_FUNC __pthread_disable_asynccancel
# define __local_multiple_threads __pthread_multiple_threads
# elif !defined NOT_IN_libc
-# define CENABLE_FUNC __libc_enable_asynccancel
-# define CDISABLE_FUNC __libc_disable_asynccancel
# define __local_multiple_threads __libc_multiple_threads
-# elif defined IS_IN_librt
-# define CENABLE_FUNC __librt_enable_asynccancel
-# define CDISABLE_FUNC __librt_disable_asynccancel
-# else
-# error Unsupported library
# endif
# if defined IS_IN_libpthread || !defined NOT_IN_libc
-# ifndef __ASSEMBLER__
extern int __local_multiple_threads attribute_hidden;
-# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) movi reg, __local_multiple_threads; \
- l32i reg, reg, 0;
-# endif
-
+# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
# else
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) \
- rur reg, threadptr; \
- l32i reg, reg, MULTIPLE_THREADS_OFFSET;
-# endif
# endif
#else
@@ -163,9 +45,6 @@ extern int __local_multiple_threads attribute_hidden;
#endif
-
-#ifndef __ASSEMBLER__
# define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif