diff options
Diffstat (limited to 'libc/sysdeps/linux/sh')
-rw-r--r-- | libc/sysdeps/linux/sh/__longjmp.S | 10 | ||||
-rw-r--r-- | libc/sysdeps/linux/sh/bsd-_setjmp.S | 10 | ||||
-rw-r--r-- | libc/sysdeps/linux/sh/bsd-setjmp.S | 10 | ||||
-rw-r--r-- | libc/sysdeps/linux/sh/clone.S | 24 | ||||
-rw-r--r-- | libc/sysdeps/linux/sh/setjmp.S | 14 | ||||
-rw-r--r-- | libc/sysdeps/linux/sh/sysdep.h | 86 | ||||
-rw-r--r-- | libc/sysdeps/linux/sh/vfork.S | 8 |
7 files changed, 48 insertions, 114 deletions
diff --git a/libc/sysdeps/linux/sh/__longjmp.S b/libc/sysdeps/linux/sh/__longjmp.S index 09f829ae3..9b785a300 100644 --- a/libc/sysdeps/linux/sh/__longjmp.S +++ b/libc/sysdeps/linux/sh/__longjmp.S @@ -17,14 +17,17 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <sysdep.h> #define _SETJMP_H #define _ASM #include <bits/setjmp.h> /* __longjmp(jmpbuf, val) */ -ENTRY (__longjmp) +.text +.align 5 +.type __longjmp,@function +.globl __longjmp; +__longjmp: mov.l @r4+, r8 mov.l @r4+, r9 mov.l @r4+, r10 @@ -41,4 +44,5 @@ ENTRY (__longjmp) 1: rts ldc.l @r4+, gbr -END (__longjmp) +.size __longjmp,.-__longjmp; + diff --git a/libc/sysdeps/linux/sh/bsd-_setjmp.S b/libc/sysdeps/linux/sh/bsd-_setjmp.S index 32b642558..8b5fc8a2d 100644 --- a/libc/sysdeps/linux/sh/bsd-_setjmp.S +++ b/libc/sysdeps/linux/sh/bsd-_setjmp.S @@ -21,13 +21,17 @@ We cannot do it in C because it must be a tail-call, so frame-unwinding in setjmp doesn't clobber the state restored by longjmp. */ -#include <sysdep.h> -ENTRY (_setjmp) +.text +.align 5 +.type _setjmp,@function +.globl _setjmp; +_setjmp: mov.l 1f, r1 jmp @r1 mov #0, r0 .align 2 1: .long __sigsetjmp -END (_setjmp) +.size _setjmp,.-_setjmp; + diff --git a/libc/sysdeps/linux/sh/bsd-setjmp.S b/libc/sysdeps/linux/sh/bsd-setjmp.S index ea47caa6c..72ab83a85 100644 --- a/libc/sysdeps/linux/sh/bsd-setjmp.S +++ b/libc/sysdeps/linux/sh/bsd-setjmp.S @@ -21,13 +21,17 @@ We cannot do it in C because it must be a tail-call, so frame-unwinding in setjmp doesn't clobber the state restored by longjmp. */ -#include <sysdep.h> -ENTRY (setjmp) +.text +.align 5 +.type setjmp,@function +.globl setjmp; +setjmp: mov.l 1f, r1 jmp @r1 mov #1, r0 .align 2 1: .long __sigsetjmp -END (setjmp) +.size setjmp,.-setjmp; + diff --git a/libc/sysdeps/linux/sh/clone.S b/libc/sysdeps/linux/sh/clone.S index ed0357cbc..bc31f48f8 100644 --- a/libc/sysdeps/linux/sh/clone.S +++ b/libc/sysdeps/linux/sh/clone.S @@ -19,11 +19,19 @@ /* clone() is even more special than fork() as it mucks with stacks and invokes a function in the right context after its all over. */ +#include <features.h> #include <asm/unistd.h> -#include <sysdep.h> #define _ERRNO_H 1 #include <bits/errno.h> + +#if defined __HAVE_ELF__ && defined __HAVE_SHARED__ +#define PLTJMP(_x) _x##@PLT +#else +#define PLTJMP(_x) _x +#endif + + /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */ .text @@ -40,7 +48,7 @@ __clone: tst r5, r5 bf/s 1f mov.l .L1, r1 -#ifdef SHARED +#ifdef __HAVE_SHARED__ mov.l r12, @-r15 sts.l pr, @-r15 mov.l .LG, r12 @@ -59,7 +67,7 @@ __clone: #endif .align 2 .L1: - .long PLTJMP(C_SYMBOL_NAME(__syscall_error)) + .long PLTJMP(__syscall_error) 1: /* insert the args onto the new stack */ mov.l r7, @-r5 @@ -77,7 +85,7 @@ __clone: tst r1, r1 // i.e. error in linux bf 2f mov.l .L2, r1 -#ifdef SHARED +#ifdef __HAVE_SHARED__ mov r0, r4 mov.l r12, @-r15 sts.l pr, @-r15 @@ -97,7 +105,7 @@ __clone: #endif .align 2 .L2: - .long PLTJMP(C_SYMBOL_NAME(__syscall_error)) + .long PLTJMP(__syscall_error) 2: tst r0, r0 @@ -112,7 +120,7 @@ __clone: /* we are done, passing the return value through r0 */ mov.l .L3, r1 -#ifdef SHARED +#ifdef __HAVE_SHARED__ mov.l r12, @-r15 sts.l pr, @-r15 mov r0, r4 @@ -134,8 +142,8 @@ __clone: .LG: .long _GLOBAL_OFFSET_TABLE_ .L3: - .long PLTJMP(C_SYMBOL_NAME(_exit)) - END(__clone) + .long PLTJMP(_exit) +.size __clone,.-__clone; .globl clone; clone = __clone diff --git a/libc/sysdeps/linux/sh/setjmp.S b/libc/sysdeps/linux/sh/setjmp.S index c263dc918..771b488bd 100644 --- a/libc/sysdeps/linux/sh/setjmp.S +++ b/libc/sysdeps/linux/sh/setjmp.S @@ -17,18 +17,15 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <sysdep.h> - #define _SETJMP_H #define _ASM #include <bits/setjmp.h> -ENTRY (__sigsetjmp) -/* - .globl __sigsetjmp - .align 4 +.text +.align 5 +.type __sigsetjmp,@function +.globl __sigsetjmp; __sigsetjmp: -*/ /* Save registers */ add #(JB_SIZE-5*4), r4 /* this code doesn't do FP yet */ stc.l gbr, @-r4 @@ -49,4 +46,5 @@ __sigsetjmp: .align 2 .L1: .long __sigjmp_save -END (__sigsetjmp) +.size __sigsetjmp,.-__sigsetjmp; + diff --git a/libc/sysdeps/linux/sh/sysdep.h b/libc/sysdeps/linux/sh/sysdep.h deleted file mode 100644 index 9cd6c6cfa..000000000 --- a/libc/sysdeps/linux/sh/sysdep.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Assembler macros for SH. - 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 Library General Public License as - published by the Free Software Foundation; either version 2 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#define __need_uClibc_config_h 1 -#include <bits/uClibc_config.h> - -/* Define a macro we can use to construct the asm name for a C symbol. */ -#define C_LABEL(name) __C_SYMBOL_PREFIX__ name - -/* 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 ASM_GLOBAL_DIRECTIVE -#define ASM_GLOBAL_DIRECTIVE .global -#endif - -#ifndef C_SYMBOL_NAME -#define C_SYMBOL_NAME(name) name -#endif - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#ifdef __HAVE_ELF__ - -#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) _x##@PLT -#else -#define PLTJMP(_x) _x -#endif - -#else - -#define ALIGNARG(log2) log2 -#define ASM_TYPE_DIRECTIVE(name,type) /* Nothing is specified. */ -#define ASM_SIZE_DIRECTIVE(name) /* Nothing is specified. */ -#define C_SYMBOL_NAME(name) name /* Nothing is specified. */ -#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) \ - CALL_MCOUNT - -#undef END -#define END(name) \ - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name)) - -/* If compiled for profiling, call `_mcount' at the start of each function. */ -#ifdef PROF -#define CALL_MCOUNT /* NOTYET */ -#else -#define CALL_MCOUNT /* Do nothing. */ -#endif - -#endif /* __ASSEMBLER__ */ diff --git a/libc/sysdeps/linux/sh/vfork.S b/libc/sysdeps/linux/sh/vfork.S index b3b8f3ce0..c9cc12da7 100644 --- a/libc/sysdeps/linux/sh/vfork.S +++ b/libc/sysdeps/linux/sh/vfork.S @@ -20,7 +20,6 @@ respective copyright holders. */ -#include <sysdep.h> #define _ERRNO_H 1 #include <bits/errno.h> @@ -31,8 +30,11 @@ .global errno -ENTRY (__vfork) - +.text +.align 5 +.type __vfork,@function +.globl __vfork; +__vfork: mov.l @r15+,r3 // pop value from the stack mov.l .L5,r1 mov.l r3,@r1 // save it in .sav_stack |