From c876d8a2cd0e7e1ac585abfbe0067a26cd7ea932 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Thu, 20 Jul 2017 20:30:28 +0200 Subject: nptl: remove asm from sysdep-cancel.h Similar to a changeset planned in GNU C library remove any assembly code from sysdep-cancel.h. This allows to port to new architectures in a simpler way. --- .../sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h | 125 +-------------------- 1 file changed, 2 insertions(+), 123 deletions(-) (limited to 'libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h') 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 #include -/* #include */ #ifndef __ASSEMBLER__ # include #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 -- cgit v1.2.3