On Mon, Feb 8, 2010 at 11:15 PM, Carmelo AMOROSO <[email protected]> wrote: > This patch will re-factor and simplify sysdep headers > handling for nptl branch. > The reason is to use some useful macros in asm code (i.e. ENTRY()) that are > available > only into nptl branch because are defined in sysdep.h header under the nptl > folder > even if they are not related to NPTL at all (this was likely due to a bad > choice done > at the early stage of NPTL porting). > This is a required steps for integrating into master branch some asm code > available in > nptl branch for sh4. > > The main changes are described below: > > nptl/sysdeps/generic/sysdep.h (moved) ---> libc/sysdeps/linux/common/sysdep.h > nptl/sysdeps/arm/sysdep.h (moved) ---> libc/sysdeps/linux/arm/sysdep.h > > nptl/sysdeps/sh/sysdep.h ---------------------| > nptl/sysdeps/unix/sh/sysdep.h ----------------| > nptl/sysdeps/unix/sysv/linux/sh/sysdep.h -----| > nptl/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h -| > |(merged) ---> > libc/sysdeps/linux/sh > > nptl/sysdeps/unix/sysdep.h (deleted) > > Similarly the mips and arm sysdep.h should be merged and updated as for sh > arch. > > Signed-off-by: Carmelo Amoroso <[email protected]>
Acked-by: Khem Raj <[email protected]> Austin wanted to pull more fixes to nptl from glibc. I dont know how far he is. but your changes will conflict with his changes. > --- > Rules.mak | 2 +- > libc/sysdeps/linux/arm/sysdep.h | 91 +++++++ > libc/sysdeps/linux/common/sysdep.h | 139 ++++++++++ > libc/sysdeps/linux/sh/sysdep.h | 277 > ++++++++++++++++++++ > libpthread/nptl/sysdeps/arm/sysdep.h | 91 ------- > libpthread/nptl/sysdeps/generic/sysdep.h | 137 ---------- > libpthread/nptl/sysdeps/sh/sysdep.h | 82 ------ > libpthread/nptl/sysdeps/unix/sh/sysdep.h | 29 -- > libpthread/nptl/sysdeps/unix/sysdep.h | 63 ----- > .../nptl/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h | 4 - > .../nptl/sysdeps/unix/sysv/linux/sh/sysdep.h | 224 ---------------- > 11 files changed, 508 insertions(+), 631 deletions(-) > create mode 100644 libc/sysdeps/linux/arm/sysdep.h > create mode 100644 libc/sysdeps/linux/common/sysdep.h > create mode 100644 libc/sysdeps/linux/sh/sysdep.h > delete mode 100644 libpthread/nptl/sysdeps/arm/sysdep.h > delete mode 100644 libpthread/nptl/sysdeps/generic/sysdep.h > delete mode 100644 libpthread/nptl/sysdeps/sh/sysdep.h > delete mode 100644 libpthread/nptl/sysdeps/unix/sh/sysdep.h > delete mode 100644 libpthread/nptl/sysdeps/unix/sysdep.h > delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h > delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h > > diff --git a/Rules.mak b/Rules.mak > index afecb77..aaa8cb0 100644 > --- a/Rules.mak > +++ b/Rules.mak > @@ -548,6 +548,7 @@ NOSTDLIB_CFLAGS:=$(call check_gcc,-nostdlib,) > CFLAGS := -include $(top_srcdir)include/libc-symbols.h \ > $(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \ > -nostdinc -I$(top_builddir)include -I$(top_srcdir)include -I. \ > + -I$(top_srcdir)libc/sysdeps/linux \ > -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH) > ifneq ($(strip $(UCLIBC_EXTRA_CFLAGS)),"") > CFLAGS += $(call qstrip,$(UCLIBC_EXTRA_CFLAGS)) > @@ -637,7 +638,6 @@ PTINC:= -I$(top_srcdir)$(PTDIR) > \ > -I$(top_srcdir)$(PTDIR)/sysdeps/unix/sysv/linux \ > -I$(top_srcdir)$(PTDIR)/sysdeps/pthread \ > -I$(top_srcdir)$(PTDIR)/sysdeps/pthread/bits > \ > - -I$(top_srcdir)$(PTDIR)/sysdeps/generic \ > -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) \ > -I$(top_srcdir)ldso/include > # > diff --git a/libc/sysdeps/linux/arm/sysdep.h b/libc/sysdeps/linux/arm/sysdep.h > new file mode 100644 > index 0000000..3c7a182 > --- /dev/null > +++ b/libc/sysdeps/linux/arm/sysdep.h > @@ -0,0 +1,91 @@ > +/* Assembler macros for ARM. > + Copyright (C) 1997, 1998, 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 > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, write to the Free > + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > + 02111-1307 USA. */ > + > +#include <common/sysdep.h> > + > +#ifdef __ASSEMBLER__ > + > +/* Syntactic details of assembler. */ > + > +#define ALIGNARG(log2) log2 > +/* For ELF we need the `.type' directive to make shared libs work right. */ > +#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,%##typearg; > +#define ASM_SIZE_DIRECTIVE(name) .size name,.-name > + > +/* In ELF C symbols are asm symbols. */ > +#undef NO_UNDERSCORES > +#define NO_UNDERSCORES > + > +#define PLTJMP(_x) _x##(PLT) > + > +/* APCS-32 doesn't preserve the condition codes across function call. */ > +#ifdef __APCS_32__ > +#define LOADREGS(cond, base, reglist...)\ > + ldm##cond base,reglist > +#ifdef __USE_BX__ > +#define RETINSTR(cond, reg) \ > + bx##cond reg > +#define DO_RET(_reg) \ > + bx _reg > +#else > +#define RETINSTR(cond, reg) \ > + mov##cond pc, reg > +#define DO_RET(_reg) \ > + mov pc, _reg > +#endif > +#else /* APCS-26 */ > +#define LOADREGS(cond, base, reglist...)\ > + ldm##cond base,reglist^ > +#define RETINSTR(cond, reg) \ > + mov##cond##s pc, reg > +#define DO_RET(_reg) \ > + movs pc, _reg > +#endif > + > +/* Define an entry point visible from C. */ > +#define ENTRY(name) > \ > + ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); > \ > + ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function) > \ > + .align ALIGNARG(4); > \ > + name##: > \ > + CALL_MCOUNT > + > +#undef END > +#define END(name) > \ > + ASM_SIZE_DIRECTIVE(name) > + > +/* If compiled for profiling, call `mcount' at the start of each function. > */ > +#ifdef PROF > +#define CALL_MCOUNT \ > + str lr,[sp, #-4]! ; \ > + bl PLTJMP(mcount) ; \ > + ldr lr, [sp], #4 ; > +#else > +#define CALL_MCOUNT /* Do nothing. */ > +#endif > + > +#ifdef NO_UNDERSCORES > +/* Since C identifiers are not normally prefixed with an underscore > + on this system, the asm identifier `syscall_error' intrudes on the > + C name space. Make sure we use an innocuous name. */ > +#define syscall_error __syscall_error > +#define mcount _mcount > +#endif > + > +#endif /* __ASSEMBLER__ */ > diff --git a/libc/sysdeps/linux/common/sysdep.h > b/libc/sysdeps/linux/common/sysdep.h > new file mode 100644 > index 0000000..cd5b2f1 > --- /dev/null > +++ b/libc/sysdeps/linux/common/sysdep.h > @@ -0,0 +1,139 @@ > +/* Generic asm macros used on many machines. > + Copyright (C) 1991,92,93,96,98,2002,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 > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, write to the Free > + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > + 02111-1307 USA. */ > + > +#include <sys/syscall.h> > + > +#ifndef C_LABEL > + > +/* Define a macro we can use to construct the asm name for a C symbol. */ > +#ifndef __UCLIBC_UNDERSCORES__ > +#ifdef __STDC__ > +#define C_LABEL(name) name##: > +#else > +#define C_LABEL(name) name/**/: > +#endif > +#else > +#ifdef __STDC__ > +#define C_LABEL(name) _##name##: > +#else > +#define C_LABEL(name) _/**/name/**/: > +#endif > +#endif > + > +#endif > + > +#ifdef __ASSEMBLER__ > +/* Mark the end of function named SYM. This is used on some platforms > + to generate correct debugging information. */ > +#ifndef END > +#define END(sym) > +#endif > + > +#ifndef JUMPTARGET > +#define JUMPTARGET(sym) sym > +#endif > + > +/* Macros to generate eh_frame unwind information. */ > +# ifdef HAVE_ASM_CFI_DIRECTIVES > +# define cfi_startproc .cfi_startproc > +# define cfi_endproc .cfi_endproc > +# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off > +# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg > +# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off > +# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off > +# define cfi_offset(reg, off) .cfi_offset reg, off > +# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off > +# define cfi_register(r1, r2) .cfi_register r1, r2 > +# define cfi_return_column(reg) .cfi_return_column reg > +# define cfi_restore(reg) .cfi_restore reg > +# define cfi_same_value(reg) .cfi_same_value reg > +# define cfi_undefined(reg) .cfi_undefined reg > +# define cfi_remember_state .cfi_remember_state > +# define cfi_restore_state .cfi_restore_state > +# define cfi_window_save .cfi_window_save > +# else > +# define cfi_startproc > +# define cfi_endproc > +# define cfi_def_cfa(reg, off) > +# define cfi_def_cfa_register(reg) > +# define cfi_def_cfa_offset(off) > +# define cfi_adjust_cfa_offset(off) > +# define cfi_offset(reg, off) > +# define cfi_rel_offset(reg, off) > +# define cfi_register(r1, r2) > +# define cfi_return_column(reg) > +# define cfi_restore(reg) > +# define cfi_same_value(reg) > +# define cfi_undefined(reg) > +# define cfi_remember_state > +# define cfi_restore_state > +# define cfi_window_save > +# endif > + > +#else /* ! ASSEMBLER */ > +# ifdef HAVE_ASM_CFI_DIRECTIVES > +# define CFI_STRINGIFY(Name) CFI_STRINGIFY2 (Name) > +# define CFI_STRINGIFY2(Name) #Name > +# define CFI_STARTPROC ".cfi_startproc" > +# define CFI_ENDPROC ".cfi_endproc" > +# define CFI_DEF_CFA(reg, off) \ > + ".cfi_def_cfa " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) > +# define CFI_DEF_CFA_REGISTER(reg) \ > + ".cfi_def_cfa_register " CFI_STRINGIFY(reg) > +# define CFI_DEF_CFA_OFFSET(off) \ > + ".cfi_def_cfa_offset " CFI_STRINGIFY(off) > +# define CFI_ADJUST_CFA_OFFSET(off) \ > + ".cfi_adjust_cfa_offset " CFI_STRINGIFY(off) > +# define CFI_OFFSET(reg, off) \ > + ".cfi_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) > +# define CFI_REL_OFFSET(reg, off) \ > + ".cfi_rel_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) > +# define CFI_REGISTER(r1, r2) \ > + ".cfi_register " CFI_STRINGIFY(r1) "," CFI_STRINGIFY(r2) > +# define CFI_RETURN_COLUMN(reg) \ > + ".cfi_return_column " CFI_STRINGIFY(reg) > +# define CFI_RESTORE(reg) \ > + ".cfi_restore " CFI_STRINGIFY(reg) > +# define CFI_UNDEFINED(reg) \ > + ".cfi_undefined " CFI_STRINGIFY(reg) > +# define CFI_REMEMBER_STATE \ > + ".cfi_remember_state" > +# define CFI_RESTORE_STATE \ > + ".cfi_restore_state" > +# define CFI_WINDOW_SAVE \ > + ".cfi_window_save" > +# else > +# define CFI_STARTPROC > +# define CFI_ENDPROC > +# define CFI_DEF_CFA(reg, off) > +# define CFI_DEF_CFA_REGISTER(reg) > +# define CFI_DEF_CFA_OFFSET(off) > +# define CFI_ADJUST_CFA_OFFSET(off) > +# define CFI_OFFSET(reg, off) > +# define CFI_REL_OFFSET(reg, off) > +# define CFI_REGISTER(r1, r2) > +# define CFI_RETURN_COLUMN(reg) > +# define CFI_RESTORE(reg) > +# define CFI_UNDEFINED(reg) > +# define CFI_REMEMBER_STATE > +# define CFI_RESTORE_STATE > +# define CFI_WINDOW_SAVE > +# endif > + > +#endif /* __ASSEMBLER__ */ > diff --git a/libc/sysdeps/linux/sh/sysdep.h b/libc/sysdeps/linux/sh/sysdep.h > new file mode 100644 > index 0000000..1d49055 > --- /dev/null > +++ b/libc/sysdeps/linux/sh/sysdep.h > @@ -0,0 +1,277 @@ > +/* Assembler macros for SH. > + Copyright (C) 1999, 2000, 2005 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 > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, write to the Free > + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > + 02111-1307 USA. */ > + > +#include <common/sysdep.h> > + > +#include <features.h> > +#include <libc-internal.h> > + > +#ifdef __ASSEMBLER__ > + > +/* Syntactic details of assembler. */ > + > +#define ALIGNARG(log2) log2 > +/* For ELF we need the `.type' directive to make shared libs work right. */ > +#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,@##typearg; > +#define ASM_SIZE_DIRECTIVE(name) .size name,.-name > + > +#ifdef SHARED > +#define PLTJMP(_x) _...@plt > +#else > +#define PLTJMP(_x) _x > +#endif > + > +/* Define an entry point visible from C. */ > +#define ENTRY(name) > \ > + ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); > \ > + ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function) > \ > + .align ALIGNARG(5); > \ > + C_LABEL(name) > \ > + cfi_startproc; > \ > + CALL_MCOUNT > + > +#undef END > +#define END(name) > \ > + cfi_endproc; > \ > + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name)) > + > +/* If compiled for profiling, call `mcount' at the start of each function. > */ > +#ifdef PROF > +#define CALL_MCOUNT \ > + mov.l 1f,r1; \ > + sts.l pr,@-r15; \ > + cfi_adjust_cfa_offset (4); \ > + cfi_rel_offset (pr, 0); \ > + mova 2f,r0; \ > + jmp @r1; \ > + lds r0,pr; \ > + .align 2; \ > +1: .long mcount; \ > +2: lds.l @r15+,pr; \ > + cfi_adjust_cfa_offset (-4); \ > + cfi_restore (pr) > + > +#else > +#define CALL_MCOUNT /* Do nothing. */ > +#endif > + > +#ifdef __UCLIBC_UNDERSCORES__ > +/* Since C identifiers are not normally prefixed with an underscore > + on this system, the asm identifier `syscall_error' intrudes on the > + C name space. Make sure we use an innocuous name. */ > +#define syscall_error __syscall_error > +#define mcount _mcount > +#endif > + > +/* For Linux we can use the system call table in the header file > + /usr/include/asm/unistd.h > + of the kernel. But these symbols do not follow the SYS_* syntax > + so we have to redefine the `SYS_ify' macro here. */ > +#undef SYS_ify > +#define SYS_ify(syscall_name) (__NR_##syscall_name) > + > +#define ret rts ; nop > +/* The sh move insn is s, d. */ > +#define MOVE(x,y) mov x , y > + > +/* Linux uses a negative return value to indicate syscall errors, > + unlike most Unices, which use the condition codes' carry flag. > + > + Since version 2.1 the return value of a system call might be > + negative even if the call succeeded. E.g., the `lseek' system call > + might return a large offset. Therefore we must not anymore test > + for < 0, but test for a real error by making sure the value in R0 > + is a real error number. Linus said he will make sure the no syscall > + returns a value in -1 .. -4095 as a valid result so we can savely > + test with -4095. */ > + > +#define _IMM1 #-1 > +#define _IMM12 #-12 > +#undef PSEUDO > +#define PSEUDO(name, syscall_name, args) \ > + .text; \ > + ENTRY (name); \ > + DO_CALL (syscall_name, args); \ > + mov r0,r1; \ > + mov _IMM12,r2; \ > + shad r2,r1; \ > + not r1,r1; \ > + tst r1,r1; \ > + bf .Lpseudo_end; \ > + SYSCALL_ERROR_HANDLER; \ > + .Lpseudo_end: > + > +#undef PSEUDO_END > +#define PSEUDO_END(name) \ > + END (name) > + > +#undef PSEUDO_NOERRNO > +#define PSEUDO_NOERRNO(name, syscall_name, args) \ > + .text; \ > + ENTRY (name); \ > + DO_CALL (syscall_name, args) > + > +#undef PSEUDO_END_NOERRNO > +#define PSEUDO_END_NOERRNO(name) \ > + END (name) > + > +#define ret_NOERRNO ret > + > +#define PSEUDO_ERRVAL(name, syscall_name, args) \ > + .text; \ > + ENTRY (name); \ > + DO_CALL (syscall_name, args); > + > +#undef PSEUDO_END_ERRVAL > +#define PSEUDO_END_ERRVAL(name) \ > + END (name) > + > +#define ret_ERRVAL ret > + > +#ifndef __PIC__ > +# define SYSCALL_ERROR_HANDLER \ > + mov.l 0f,r1; \ > + jmp @r1; \ > + mov r0,r4; \ > + .align 2; \ > + 0: .long __syscall_error > + > +#include <libc/sysdeps/linux/sh/syscall_error.S> > +#else > +# ifdef RTLD_PRIVATE_ERRNO > + > +# define SYSCALL_ERROR_HANDLER \ > + neg r0,r1; \ > + mov.l 0f,r12; \ > + mova 0f,r0; \ > + add r0,r12; \ > + mov.l 1f,r0; \ > + mov.l r1,@(r0,r12) > + bra .Lpseudo_end; \ > + mov _IMM1,r0; \ > + .align 2; \ > + 0: .long _GLOBAL_OFFSET_TABLE_; \ > + 1: .long rtld_er...@gotoff > + > +# elif defined _LIBC_REENTRANT > + > +# if USE___THREAD > + > +# ifndef NOT_IN_libc > +# define SYSCALL_ERROR_ERRNO __libc_errno > +# else > +# define SYSCALL_ERROR_ERRNO errno > +# endif > +# define SYSCALL_ERROR_HANDLER \ > + neg r0,r1; \ > + mov r12,r2; \ > + mov.l 0f,r12; \ > + mova 0f,r0; \ > + add r0,r12; \ > + mov.l 1f,r0; \ > + stc gbr, r4; \ > + mov.l @(r0,r12),r0; \ > + bra .Lskip; \ > + add r4,r0; \ > + .align 2; \ > + 1: .long syscall_error_er...@gottpoff; \ > + .Lskip: \ > + mov r2,r12; \ > + mov.l r1,@r0; \ > + bra .Lpseudo_end; \ > + mov _IMM1,r0; \ > + .align 2; \ > + 0: .long _GLOBAL_OFFSET_TABLE_ > +# else > + > +# define SYSCALL_ERROR_HANDLER \ > + neg r0,r1; \ > + mov.l r14,@-r15; \ > + mov.l r12,@-r15; \ > + mov.l r1,@-r15; \ > + mov.l 0f,r12; \ > + mova 0f,r0; \ > + add r0,r12; \ > + sts.l pr,@-r15; \ > + mov r15,r14; \ > + mov.l 1f,r1; \ > + bsrf r1; \ > + nop; \ > + 2: mov r14,r15; \ > + lds.l @r15+,pr; \ > + mov.l @r15+,r1; \ > + mov.l r1,@r0; \ > + mov.l @r15+,r12; \ > + mov.l @r15+,r14; \ > + bra .Lpseudo_end; \ > + mov _IMM1,r0; \ > + .align 2; \ > + 0: .long _GLOBAL_OFFSET_TABLE_; \ > + 1: .long PLTJMP(C_SYMBOL_NAME(__errno_location))-(2b-.) > +/* A quick note: it is assumed that the call to `__errno_location' does > + not modify the stack! */ > +# endif > +# else > + > +/* Store (-r0) into errno through the GOT. */ > +# define SYSCALL_ERROR_HANDLER > \ > + neg r0,r1; \ > + mov r12,r2; \ > + mov.l 0f,r12; \ > + mova 0f,r0; \ > + add r0,r12; \ > + mov.l 1f,r0; \ > + mov.l @(r0,r12),r0; \ > + mov r2,r12; \ > + mov.l r1,@r0; \ > + bra .Lpseudo_end; \ > + mov _IMM1,r0; \ > + .align 2; \ > + 0: .long _GLOBAL_OFFSET_TABLE_; \ > + 1: .long er...@got > +# endif /* _LIBC_REENTRANT */ > +#endif /* __PIC__ */ > + > +# ifdef __SH4__ > +# define SYSCALL_INST_PAD \ > + or r0,r0; or r0,r0; or r0,r0; or r0,r0; or r0,r0 > +# else > +# define SYSCALL_INST_PAD > +# endif > + > +#define SYSCALL_INST0 trapa #0x10 > +#define SYSCALL_INST1 trapa #0x11 > +#define SYSCALL_INST2 trapa #0x12 > +#define SYSCALL_INST3 trapa #0x13 > +#define SYSCALL_INST4 trapa #0x14 > +#define SYSCALL_INST5 mov.l @(0,r15),r0; trapa #0x15 > +#define SYSCALL_INST6 mov.l @(0,r15),r0; mov.l @(4,r15),r1; trapa #0x16 > + > +#undef DO_CALL > +#define DO_CALL(syscall_name, args) \ > + mov.l 1f,r3; \ > + SYSCALL_INST##args; \ > + SYSCALL_INST_PAD; \ > + bra 2f; \ > + nop; \ > + .align 2; \ > + 1: .long SYS_ify (syscall_name); \ > + 2: > + > +#endif /* __ASSEMBLER__ */ > diff --git a/libpthread/nptl/sysdeps/arm/sysdep.h > b/libpthread/nptl/sysdeps/arm/sysdep.h > deleted file mode 100644 > index 19bd3c3..0000000 > --- a/libpthread/nptl/sysdeps/arm/sysdep.h > +++ /dev/null > @@ -1,91 +0,0 @@ > -/* Assembler macros for ARM. > - Copyright (C) 1997, 1998, 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 > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, write to the Free > - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > - 02111-1307 USA. */ > - > -#include <sysdeps/generic/sysdep.h> > - > -#ifdef __ASSEMBLER__ > - > -/* Syntactic details of assembler. */ > - > -#define ALIGNARG(log2) log2 > -/* For ELF we need the `.type' directive to make shared libs work right. */ > -#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,%##typearg; > -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name > - > -/* In ELF C symbols are asm symbols. */ > -#undef NO_UNDERSCORES > -#define NO_UNDERSCORES > - > -#define PLTJMP(_x) _x##(PLT) > - > -/* APCS-32 doesn't preserve the condition codes across function call. */ > -#ifdef __APCS_32__ > -#define LOADREGS(cond, base, reglist...)\ > - ldm##cond base,reglist > -#ifdef __USE_BX__ > -#define RETINSTR(cond, reg) \ > - bx##cond reg > -#define DO_RET(_reg) \ > - bx _reg > -#else > -#define RETINSTR(cond, reg) \ > - mov##cond pc, reg > -#define DO_RET(_reg) \ > - mov pc, _reg > -#endif > -#else /* APCS-26 */ > -#define LOADREGS(cond, base, reglist...)\ > - ldm##cond base,reglist^ > -#define RETINSTR(cond, reg) \ > - mov##cond##s pc, reg > -#define DO_RET(_reg) \ > - movs pc, _reg > -#endif > - > -/* Define an entry point visible from C. */ > -#define ENTRY(name) > \ > - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); > \ > - ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function) > \ > - .align ALIGNARG(4); > \ > - name##: > \ > - CALL_MCOUNT > - > -#undef END > -#define END(name) > \ > - ASM_SIZE_DIRECTIVE(name) > - > -/* If compiled for profiling, call `mcount' at the start of each function. > */ > -#ifdef PROF > -#define CALL_MCOUNT \ > - str lr,[sp, #-4]! ; \ > - bl PLTJMP(mcount) ; \ > - ldr lr, [sp], #4 ; > -#else > -#define CALL_MCOUNT /* Do nothing. */ > -#endif > - > -#ifdef NO_UNDERSCORES > -/* Since C identifiers are not normally prefixed with an underscore > - on this system, the asm identifier `syscall_error' intrudes on the > - C name space. Make sure we use an innocuous name. */ > -#define syscall_error __syscall_error > -#define mcount _mcount > -#endif > - > -#endif /* __ASSEMBLER__ */ > diff --git a/libpthread/nptl/sysdeps/generic/sysdep.h > b/libpthread/nptl/sysdeps/generic/sysdep.h > deleted file mode 100644 > index 9627b3e..0000000 > --- a/libpthread/nptl/sysdeps/generic/sysdep.h > +++ /dev/null > @@ -1,137 +0,0 @@ > -/* Generic asm macros used on many machines. > - Copyright (C) 1991,92,93,96,98,2002,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 > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, write to the Free > - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > - 02111-1307 USA. */ > - > -#ifndef C_LABEL > - > -/* Define a macro we can use to construct the asm name for a C symbol. */ > -#ifndef __UCLIBC_UNDERSCORES__ > -#ifdef __STDC__ > -#define C_LABEL(name) name##: > -#else > -#define C_LABEL(name) name/**/: > -#endif > -#else > -#ifdef __STDC__ > -#define C_LABEL(name) _##name##: > -#else > -#define C_LABEL(name) _/**/name/**/: > -#endif > -#endif > - > -#endif > - > -#ifdef __ASSEMBLER__ > -/* Mark the end of function named SYM. This is used on some platforms > - to generate correct debugging information. */ > -#ifndef END > -#define END(sym) > -#endif > - > -#ifndef JUMPTARGET > -#define JUMPTARGET(sym) sym > -#endif > - > -/* Macros to generate eh_frame unwind information. */ > -# ifdef HAVE_ASM_CFI_DIRECTIVES > -# define cfi_startproc .cfi_startproc > -# define cfi_endproc .cfi_endproc > -# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off > -# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg > -# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off > -# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off > -# define cfi_offset(reg, off) .cfi_offset reg, off > -# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off > -# define cfi_register(r1, r2) .cfi_register r1, r2 > -# define cfi_return_column(reg) .cfi_return_column reg > -# define cfi_restore(reg) .cfi_restore reg > -# define cfi_same_value(reg) .cfi_same_value reg > -# define cfi_undefined(reg) .cfi_undefined reg > -# define cfi_remember_state .cfi_remember_state > -# define cfi_restore_state .cfi_restore_state > -# define cfi_window_save .cfi_window_save > -# else > -# define cfi_startproc > -# define cfi_endproc > -# define cfi_def_cfa(reg, off) > -# define cfi_def_cfa_register(reg) > -# define cfi_def_cfa_offset(off) > -# define cfi_adjust_cfa_offset(off) > -# define cfi_offset(reg, off) > -# define cfi_rel_offset(reg, off) > -# define cfi_register(r1, r2) > -# define cfi_return_column(reg) > -# define cfi_restore(reg) > -# define cfi_same_value(reg) > -# define cfi_undefined(reg) > -# define cfi_remember_state > -# define cfi_restore_state > -# define cfi_window_save > -# endif > - > -#else /* ! ASSEMBLER */ > -# ifdef HAVE_ASM_CFI_DIRECTIVES > -# define CFI_STRINGIFY(Name) CFI_STRINGIFY2 (Name) > -# define CFI_STRINGIFY2(Name) #Name > -# define CFI_STARTPROC ".cfi_startproc" > -# define CFI_ENDPROC ".cfi_endproc" > -# define CFI_DEF_CFA(reg, off) \ > - ".cfi_def_cfa " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) > -# define CFI_DEF_CFA_REGISTER(reg) \ > - ".cfi_def_cfa_register " CFI_STRINGIFY(reg) > -# define CFI_DEF_CFA_OFFSET(off) \ > - ".cfi_def_cfa_offset " CFI_STRINGIFY(off) > -# define CFI_ADJUST_CFA_OFFSET(off) \ > - ".cfi_adjust_cfa_offset " CFI_STRINGIFY(off) > -# define CFI_OFFSET(reg, off) \ > - ".cfi_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) > -# define CFI_REL_OFFSET(reg, off) \ > - ".cfi_rel_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) > -# define CFI_REGISTER(r1, r2) \ > - ".cfi_register " CFI_STRINGIFY(r1) "," CFI_STRINGIFY(r2) > -# define CFI_RETURN_COLUMN(reg) \ > - ".cfi_return_column " CFI_STRINGIFY(reg) > -# define CFI_RESTORE(reg) \ > - ".cfi_restore " CFI_STRINGIFY(reg) > -# define CFI_UNDEFINED(reg) \ > - ".cfi_undefined " CFI_STRINGIFY(reg) > -# define CFI_REMEMBER_STATE \ > - ".cfi_remember_state" > -# define CFI_RESTORE_STATE \ > - ".cfi_restore_state" > -# define CFI_WINDOW_SAVE \ > - ".cfi_window_save" > -# else > -# define CFI_STARTPROC > -# define CFI_ENDPROC > -# define CFI_DEF_CFA(reg, off) > -# define CFI_DEF_CFA_REGISTER(reg) > -# define CFI_DEF_CFA_OFFSET(off) > -# define CFI_ADJUST_CFA_OFFSET(off) > -# define CFI_OFFSET(reg, off) > -# define CFI_REL_OFFSET(reg, off) > -# define CFI_REGISTER(r1, r2) > -# define CFI_RETURN_COLUMN(reg) > -# define CFI_RESTORE(reg) > -# define CFI_UNDEFINED(reg) > -# define CFI_REMEMBER_STATE > -# define CFI_RESTORE_STATE > -# define CFI_WINDOW_SAVE > -# endif > - > -#endif /* __ASSEMBLER__ */ > diff --git a/libpthread/nptl/sysdeps/sh/sysdep.h > b/libpthread/nptl/sysdeps/sh/sysdep.h > deleted file mode 100644 > index 5b75198..0000000 > --- a/libpthread/nptl/sysdeps/sh/sysdep.h > +++ /dev/null > @@ -1,82 +0,0 @@ > -/* Assembler macros for SH. > - Copyright (C) 1999, 2000, 2005 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 > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, write to the Free > - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > - 02111-1307 USA. */ > - > -#include <sysdeps/generic/sysdep.h> > - > -#include <features.h> > -#include <libc-internal.h> > - > -#ifdef __ASSEMBLER__ > - > -/* Syntactic details of assembler. */ > - > -#define ALIGNARG(log2) log2 > -/* For ELF we need the `.type' directive to make shared libs work right. */ > -#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,@##typearg; > -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name > - > -#ifdef SHARED > -#define PLTJMP(_x) _...@plt > -#else > -#define PLTJMP(_x) _x > -#endif > - > -/* Define an entry point visible from C. */ > -#define ENTRY(name) > \ > - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); > \ > - ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function) > \ > - .align ALIGNARG(5); > \ > - C_LABEL(name) > \ > - cfi_startproc; > \ > - CALL_MCOUNT > - > -#undef END > -#define END(name) > \ > - cfi_endproc; > \ > - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name)) > - > -/* If compiled for profiling, call `mcount' at the start of each function. > */ > -#ifdef PROF > -#define CALL_MCOUNT \ > - mov.l 1f,r1; \ > - sts.l pr,@-r15; \ > - cfi_adjust_cfa_offset (4); \ > - cfi_rel_offset (pr, 0); \ > - mova 2f,r0; \ > - jmp @r1; \ > - lds r0,pr; \ > - .align 2; \ > -1: .long mcount; \ > -2: lds.l @r15+,pr; \ > - cfi_adjust_cfa_offset (-4); \ > - cfi_restore (pr) > - > -#else > -#define CALL_MCOUNT /* Do nothing. */ > -#endif > - > -#ifdef __UCLIBC_UNDERSCORES__ > -/* Since C identifiers are not normally prefixed with an underscore > - on this system, the asm identifier `syscall_error' intrudes on the > - C name space. Make sure we use an innocuous name. */ > -#define syscall_error __syscall_error > -#define mcount _mcount > -#endif > - > -#endif /* __ASSEMBLER__ */ > diff --git a/libpthread/nptl/sysdeps/unix/sh/sysdep.h > b/libpthread/nptl/sysdeps/unix/sh/sysdep.h > deleted file mode 100644 > index bf1ac0f..0000000 > --- a/libpthread/nptl/sysdeps/unix/sh/sysdep.h > +++ /dev/null > @@ -1,29 +0,0 @@ > -/* Copyright (C) 1999, 2000 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 > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, write to the Free > - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > - 02111-1307 USA. */ > - > -#include <sysdeps/unix/sysdep.h> > -#include <sysdeps/sh/sysdep.h> > - > -#ifdef __ASSEMBLER__ > - > -#define ret rts ; nop > - > -/* The sh move insn is s, d. */ > -#define MOVE(x,y) mov x , y > - > -#endif > diff --git a/libpthread/nptl/sysdeps/unix/sysdep.h > b/libpthread/nptl/sysdeps/unix/sysdep.h > deleted file mode 100644 > index 0e7c9da..0000000 > --- a/libpthread/nptl/sysdeps/unix/sysdep.h > +++ /dev/null > @@ -1,63 +0,0 @@ > -/* Copyright (C) 1991, 92, 93, 96, 98, 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 > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, write to the Free > - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > - 02111-1307 USA. */ > - > -#include <sysdeps/generic/sysdep.h> > - > -#include <sys/syscall.h> > -#define HAVE_SYSCALLS > - > -/* Note that using a `PASTE' macro loses. */ > -#ifdef __STDC__ > -#define SYSCALL__(name, args) PSEUDO (__##name, name, args) > -#else > -#define SYSCALL__(name, args) PSEUDO (__/**/name, name, args) > -#endif > -#define SYSCALL(name, args) PSEUDO (name, name, args) > - > -/* Machine-dependent sysdep.h files are expected to define the macro > - PSEUDO (function_name, syscall_name) to emit assembly code to define the > - C-callable function FUNCTION_NAME to do system call SYSCALL_NAME. > - r0 and r1 are the system call outputs. MOVE(x, y) should be defined as > - an instruction such that "MOVE(r1, r0)" works. ret should be defined > - as the return instruction. */ > - > -#ifndef SYS_ify > -#ifdef __STDC__ > -#define SYS_ify(syscall_name) SYS_##syscall_name > -#else > -#define SYS_ify(syscall_name) SYS_/**/syscall_name > -#endif > -#endif > - > -/* Terminate a system call named SYM. This is used on some platforms > - to generate correct debugging information. */ > -#ifndef PSEUDO_END > -#define PSEUDO_END(sym) > -#endif > -#ifndef PSEUDO_END_NOERRNO > -#define PSEUDO_END_NOERRNO(sym) PSEUDO_END(sym) > -#endif > -#ifndef PSEUDO_END_ERRVAL > -#define PSEUDO_END_ERRVAL(sym) PSEUDO_END(sym) > -#endif > - > -/* Wrappers around system calls should normally inline the system call code. > - But sometimes it is not possible or implemented and we use this code. */ > -#ifndef INLINE_SYSCALL > -#define INLINE_SYSCALL(name, nr, args...) __syscall_##name (args) > -#endif > diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h > b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h > deleted file mode 100644 > index 1aed1a1..0000000 > --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h > +++ /dev/null > @@ -1,4 +0,0 @@ > -/* 4 instruction cycles not accessing cache and TLB are needed after > - trapa instruction to avoid an SH-4 silicon bug. */ > -#define NEED_SYSCALL_INST_PAD > -#include_next <sysdep.h> > diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h > b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h > deleted file mode 100644 > index 7e9223b..0000000 > --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h > +++ /dev/null > @@ -1,224 +0,0 @@ > -/* Copyright (C) 1992,1993,1995,1996,1997,1998,1999,2000,2002,2003,2004 > - Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - Contributed by Ulrich Drepper, <[email protected]>, August 1995. > - Changed by Kaz Kojima, <[email protected]>. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, write to the Free > - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > - 02111-1307 USA. */ > - > -#ifndef _LINUX_SH_SYSDEP_H > -#define _LINUX_SH_SYSDEP_H 1 > - > -/* There is some commonality. */ > -#include <sysdeps/unix/sh/sysdep.h> > - > -/* For Linux we can use the system call table in the header file > - /usr/include/asm/unistd.h > - of the kernel. But these symbols do not follow the SYS_* syntax > - so we have to redefine the `SYS_ify' macro here. */ > -#undef SYS_ify > -#define SYS_ify(syscall_name) (__NR_##syscall_name) > - > - > -#ifdef __ASSEMBLER__ > - > -/* Linux uses a negative return value to indicate syscall errors, > - unlike most Unices, which use the condition codes' carry flag. > - > - Since version 2.1 the return value of a system call might be > - negative even if the call succeeded. E.g., the `lseek' system call > - might return a large offset. Therefore we must not anymore test > - for < 0, but test for a real error by making sure the value in R0 > - is a real error number. Linus said he will make sure the no syscall > - returns a value in -1 .. -4095 as a valid result so we can savely > - test with -4095. */ > - > -#define _IMM1 #-1 > -#define _IMM12 #-12 > -#undef PSEUDO > -#define PSEUDO(name, syscall_name, args) \ > - .text; \ > - ENTRY (name); \ > - DO_CALL (syscall_name, args); \ > - mov r0,r1; \ > - mov _IMM12,r2; \ > - shad r2,r1; \ > - not r1,r1; \ > - tst r1,r1; \ > - bf .Lpseudo_end; \ > - SYSCALL_ERROR_HANDLER; \ > - .Lpseudo_end: > - > -#undef PSEUDO_END > -#define PSEUDO_END(name) \ > - END (name) > - > -#undef PSEUDO_NOERRNO > -#define PSEUDO_NOERRNO(name, syscall_name, args) \ > - .text; \ > - ENTRY (name); \ > - DO_CALL (syscall_name, args) > - > -#undef PSEUDO_END_NOERRNO > -#define PSEUDO_END_NOERRNO(name) \ > - END (name) > - > -#define ret_NOERRNO ret > - > -#define PSEUDO_ERRVAL(name, syscall_name, args) \ > - .text; \ > - ENTRY (name); \ > - DO_CALL (syscall_name, args); > - > -#undef PSEUDO_END_ERRVAL > -#define PSEUDO_END_ERRVAL(name) \ > - END (name) > - > -#define ret_ERRVAL ret > - > -#ifndef __PIC__ > -# define SYSCALL_ERROR_HANDLER \ > - mov.l 0f,r1; \ > - jmp @r1; \ > - mov r0,r4; \ > - .align 2; \ > - 0: .long __syscall_error > - > -#include <libc/sysdeps/linux/sh/syscall_error.S> > -#else > -# ifdef RTLD_PRIVATE_ERRNO > - > -# define SYSCALL_ERROR_HANDLER \ > - neg r0,r1; \ > - mov.l 0f,r12; \ > - mova 0f,r0; \ > - add r0,r12; \ > - mov.l 1f,r0; \ > - mov.l r1,@(r0,r12) > - bra .Lpseudo_end; \ > - mov _IMM1,r0; \ > - .align 2; \ > - 0: .long _GLOBAL_OFFSET_TABLE_; \ > - 1: .long rtld_er...@gotoff > - > -# elif defined _LIBC_REENTRANT > - > -# if USE___THREAD > - > -# ifndef NOT_IN_libc > -# define SYSCALL_ERROR_ERRNO __libc_errno > -# else > -# define SYSCALL_ERROR_ERRNO errno > -# endif > -# define SYSCALL_ERROR_HANDLER \ > - neg r0,r1; \ > - mov r12,r2; \ > - mov.l 0f,r12; \ > - mova 0f,r0; \ > - add r0,r12; \ > - mov.l 1f,r0; \ > - stc gbr, r4; \ > - mov.l @(r0,r12),r0; \ > - bra .Lskip; \ > - add r4,r0; \ > - .align 2; \ > - 1: .long syscall_error_er...@gottpoff; \ > - .Lskip: \ > - mov r2,r12; \ > - mov.l r1,@r0; \ > - bra .Lpseudo_end; \ > - mov _IMM1,r0; \ > - .align 2; \ > - 0: .long _GLOBAL_OFFSET_TABLE_ > -# else > - > -# define SYSCALL_ERROR_HANDLER \ > - neg r0,r1; \ > - mov.l r14,@-r15; \ > - mov.l r12,@-r15; \ > - mov.l r1,@-r15; \ > - mov.l 0f,r12; \ > - mova 0f,r0; \ > - add r0,r12; \ > - sts.l pr,@-r15; \ > - mov r15,r14; \ > - mov.l 1f,r1; \ > - bsrf r1; \ > - nop; \ > - 2: mov r14,r15; \ > - lds.l @r15+,pr; \ > - mov.l @r15+,r1; \ > - mov.l r1,@r0; \ > - mov.l @r15+,r12; \ > - mov.l @r15+,r14; \ > - bra .Lpseudo_end; \ > - mov _IMM1,r0; \ > - .align 2; \ > - 0: .long _GLOBAL_OFFSET_TABLE_; \ > - 1: .long PLTJMP(C_SYMBOL_NAME(__errno_location))-(2b-.) > -/* A quick note: it is assumed that the call to `__errno_location' does > - not modify the stack! */ > -# endif > -# else > - > -/* Store (-r0) into errno through the GOT. */ > -# define SYSCALL_ERROR_HANDLER > \ > - neg r0,r1; \ > - mov r12,r2; \ > - mov.l 0f,r12; \ > - mova 0f,r0; \ > - add r0,r12; \ > - mov.l 1f,r0; \ > - mov.l @(r0,r12),r0; \ > - mov r2,r12; \ > - mov.l r1,@r0; \ > - bra .Lpseudo_end; \ > - mov _IMM1,r0; \ > - .align 2; \ > - 0: .long _GLOBAL_OFFSET_TABLE_; \ > - 1: .long er...@got > -# endif /* _LIBC_REENTRANT */ > -#endif /* __PIC__ */ > - > -# ifdef NEED_SYSCALL_INST_PAD > -# define SYSCALL_INST_PAD \ > - or r0,r0; or r0,r0; or r0,r0; or r0,r0; or r0,r0 > -# else > -# define SYSCALL_INST_PAD > -# endif > - > -#define SYSCALL_INST0 trapa #0x10 > -#define SYSCALL_INST1 trapa #0x11 > -#define SYSCALL_INST2 trapa #0x12 > -#define SYSCALL_INST3 trapa #0x13 > -#define SYSCALL_INST4 trapa #0x14 > -#define SYSCALL_INST5 mov.l @(0,r15),r0; trapa #0x15 > -#define SYSCALL_INST6 mov.l @(0,r15),r0; mov.l @(4,r15),r1; trapa #0x16 > - > -#undef DO_CALL > -#define DO_CALL(syscall_name, args) \ > - mov.l 1f,r3; \ > - SYSCALL_INST##args; \ > - SYSCALL_INST_PAD; \ > - bra 2f; \ > - nop; \ > - .align 2; \ > - 1: .long SYS_ify (syscall_name); \ > - 2: > - > -#endif /* __ASSEMBLER__ */ > - > -#endif /* linux/sh/sysdep.h */ > -- > 1.6.0.6 > > _______________________________________________ > uClibc mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/uclibc > _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
