summaryrefslogtreecommitdiff
path: root/libpthread/nptl/sysdeps/xtensa
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2015-09-16 01:49:49 +0300
committerWaldemar Brodkorb <wbx@openadk.org>2015-10-08 20:31:24 +0200
commite78a0f58f23347c822c182d1c01f6eb9b9866d60 (patch)
tree723cfbcd2411d889fb4956adb7f2d11a6d766050 /libpthread/nptl/sysdeps/xtensa
parent9fae2ad9937279c9f7f40975ac14cb7b57f4a36d (diff)
xtensa: support call0 ABI
Most changes are mechanical replacement of 'retw' instruction with 'abi_ret' macro, defined to 'retw' or 'ret' according to ABI. Assembly code that makes calls is duplicated for call0 ABI with changed register numbers for parameters/return value and call instruction. 'entry' instructions are replaced with 'abi_entry' macro. More interesting changes: - non-leaf assembly functions (e.g. _dl_tlsdesc_dynamic, _dl_linux_resolve, SYSCALL_ERROR_HANDLER, PSEUDO) now need to preserve registers around intermediate calls they make, use temporary stack frame for that; - setjmp/longjmp only need to save and restore return address, stack pointer and callee-saved registers in the jmpbuf; - __clone and syscall functions had hardcoded offsets to parameter passed on stack, on call0 ABI they don't need stack frame, so the offset is different. Replace these offsets with FRAMESIZE macro. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'libpthread/nptl/sysdeps/xtensa')
-rw-r--r--libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S14
-rw-r--r--libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S13
2 files changed, 9 insertions, 18 deletions
diff --git a/libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S b/libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S
index 1e220a863..10b1c00f5 100644
--- a/libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S
+++ b/libpthread/nptl/sysdeps/xtensa/pthread_spin_lock.S
@@ -16,13 +16,10 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
- .text
- .align 4
-
- .globl pthread_spin_lock
-pthread_spin_lock:
+#include <sysdep.h>
- entry a1, 16
+ .text
+ENTRY (pthread_spin_lock)
movi a3, 0
wsr a3, scompare1
@@ -31,7 +28,6 @@ pthread_spin_lock:
bnez a3, 1b
movi a2, 0
- retw
+ abi_ret
- .type pthread_spin_lock, @function
- .size pthread_spin_lock, .-pthread_spin_lock
+END (pthread_spin_lock)
diff --git a/libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S b/libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S
index a736b010f..4742bdb1c 100644
--- a/libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S
+++ b/libpthread/nptl/sysdeps/xtensa/pthread_spin_trylock.S
@@ -18,14 +18,10 @@
#define _ERRNO_H 1
#include <bits/errno.h>
+#include <sysdep.h>
.text
- .align 4
-
- .globl pthread_spin_trylock
-pthread_spin_trylock:
-
- entry a1, 16
+ENTRY (pthread_spin_trylock)
movi a3, 0
wsr a3, scompare1
@@ -34,7 +30,6 @@ pthread_spin_trylock:
movi a2, EBUSY
moveqz a2, a3, a3
- retw
+ abi_ret
- .type pthread_spin_trylock, @function
- .size pthread_spin_trylock, .-pthread_spin_trylock
+END (pthread_spin_trylock)