summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/sh
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/sh')
-rw-r--r--libc/sysdeps/linux/sh/__longjmp.S10
-rw-r--r--libc/sysdeps/linux/sh/bsd-_setjmp.S10
-rw-r--r--libc/sysdeps/linux/sh/bsd-setjmp.S10
-rw-r--r--libc/sysdeps/linux/sh/clone.S24
-rw-r--r--libc/sysdeps/linux/sh/setjmp.S14
-rw-r--r--libc/sysdeps/linux/sh/sysdep.h86
-rw-r--r--libc/sysdeps/linux/sh/vfork.S8
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