summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/sparc')
-rw-r--r--mdk-stage1/dietlibc/sparc/__longjmp.S1
-rw-r--r--mdk-stage1/dietlibc/sparc/clone.S5
-rw-r--r--mdk-stage1/dietlibc/sparc/fork.S2
-rw-r--r--mdk-stage1/dietlibc/sparc/mmap.c4
-rw-r--r--mdk-stage1/dietlibc/sparc/pipe.S2
-rw-r--r--mdk-stage1/dietlibc/sparc/setjmp.S28
-rw-r--r--mdk-stage1/dietlibc/sparc/shmat.c2
-rw-r--r--mdk-stage1/dietlibc/sparc/sigaction.c7
-rw-r--r--mdk-stage1/dietlibc/sparc/start.S58
-rw-r--r--mdk-stage1/dietlibc/sparc/strlen.S11
-rw-r--r--mdk-stage1/dietlibc/sparc/syscalls.h276
-rw-r--r--mdk-stage1/dietlibc/sparc/unified.S10
12 files changed, 358 insertions, 48 deletions
diff --git a/mdk-stage1/dietlibc/sparc/__longjmp.S b/mdk-stage1/dietlibc/sparc/__longjmp.S
index 72e001a2f..6550d2b5c 100644
--- a/mdk-stage1/dietlibc/sparc/__longjmp.S
+++ b/mdk-stage1/dietlibc/sparc/__longjmp.S
@@ -10,6 +10,7 @@
.text
.global __longjmp
+.type __longjmp,function
__longjmp:
/* Store our arguments in global registers so we can still
use them while unwinding frames and their register windows. */
diff --git a/mdk-stage1/dietlibc/sparc/clone.S b/mdk-stage1/dietlibc/sparc/clone.S
index 58b438249..fd8d1d126 100644
--- a/mdk-stage1/dietlibc/sparc/clone.S
+++ b/mdk-stage1/dietlibc/sparc/clone.S
@@ -1,10 +1,11 @@
-#include <asm/errno.h>
-#include <asm/unistd.h>
+#include <errno.h>
+#include "syscalls.h"
.text
.align 4
.weak clone
clone:
+.type __clone,#function
.global __clone
__clone:
save %sp, -96, %sp
diff --git a/mdk-stage1/dietlibc/sparc/fork.S b/mdk-stage1/dietlibc/sparc/fork.S
index 869c9b30c..a54cab2a9 100644
--- a/mdk-stage1/dietlibc/sparc/fork.S
+++ b/mdk-stage1/dietlibc/sparc/fork.S
@@ -10,7 +10,7 @@ __libc_fork:
bcc,a 1f
nop
save %sp, -96, %sp
-#ifdef WANT_THREAD_SAVE
+#ifdef WANT_THREAD_SAFE
call __errno_location
nop
#else
diff --git a/mdk-stage1/dietlibc/sparc/mmap.c b/mdk-stage1/dietlibc/sparc/mmap.c
index 25ebdc24e..5342bac4e 100644
--- a/mdk-stage1/dietlibc/sparc/mmap.c
+++ b/mdk-stage1/dietlibc/sparc/mmap.c
@@ -1,5 +1,5 @@
-#include <linux/types.h>
-#include <linux/unistd.h>
+#include <sys/types.h>
+#include "syscalls.h"
#define __SYSCALL_STRING \
"ta 0x10;" \
diff --git a/mdk-stage1/dietlibc/sparc/pipe.S b/mdk-stage1/dietlibc/sparc/pipe.S
index 820da2570..076822765 100644
--- a/mdk-stage1/dietlibc/sparc/pipe.S
+++ b/mdk-stage1/dietlibc/sparc/pipe.S
@@ -9,7 +9,7 @@ pipe:
bcc,a 1f
nop
save %sp, -96, %sp
-#ifdef WANT_THREAD_SAVE
+#ifdef WANT_THREAD_SAFE
call __errno_location
nop
#else
diff --git a/mdk-stage1/dietlibc/sparc/setjmp.S b/mdk-stage1/dietlibc/sparc/setjmp.S
index efc5a7013..579df757c 100644
--- a/mdk-stage1/dietlibc/sparc/setjmp.S
+++ b/mdk-stage1/dietlibc/sparc/setjmp.S
@@ -6,32 +6,34 @@
#define ST_FLUSH_WINDOWS 0x03
-.section .rodata
.text
.globl __setjmp
+.type __setjmp,function
__setjmp:
- b 1f
- set 0, %o1
+ b 1f
+ set 0, %o1
.size __setjmp,.-__setjmp
.globl setjmp
+.type setjmp,function
setjmp:
- set 1, %o1
+ set 1, %o1
.size setjmp,.-setjmp
.globl __sigsetjmp
+.type __sigsetjmp,function
__sigsetjmp:
1:
- /* Save our PC, SP and FP. Save the signal mask if requested with
- a tail-call for simplicity; it always returns zero. */
- ta ST_FLUSH_WINDOWS
+ /* Save our PC, SP and FP. Save the signal mask if requested with
+ a tail-call for simplicity; it always returns zero. */
+ ta ST_FLUSH_WINDOWS
- st %o7, [%o0 + (JB_PC * 4)]
- st %sp, [%o0 + (JB_SP * 4)]
- st %fp, [%o0 + (JB_FP * 4)]
+ st %o7, [%o0 + (JB_PC * 4)]
+ st %sp, [%o0 + (JB_SP * 4)]
+ st %fp, [%o0 + (JB_FP * 4)]
- mov %o7, %g1
- call __sigjmp_save
- mov %g1, %o7
+ mov %o7, %g1
+ call __sigjmp_save
+ mov %g1, %o7
.size __sigsetjmp,.-__sigsetjmp
diff --git a/mdk-stage1/dietlibc/sparc/shmat.c b/mdk-stage1/dietlibc/sparc/shmat.c
index 73b2d89a9..b7dce2e83 100644
--- a/mdk-stage1/dietlibc/sparc/shmat.c
+++ b/mdk-stage1/dietlibc/sparc/shmat.c
@@ -1,7 +1,7 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
-#include <asm/ipc.h>
+#include <unistd.h>
extern void* __ipc();
diff --git a/mdk-stage1/dietlibc/sparc/sigaction.c b/mdk-stage1/dietlibc/sparc/sigaction.c
new file mode 100644
index 000000000..028723699
--- /dev/null
+++ b/mdk-stage1/dietlibc/sparc/sigaction.c
@@ -0,0 +1,7 @@
+#include <signal.h>
+
+int __rt_sigaction(int signum, const struct sigaction *act, struct sigaction *oldact, void* restorer, long nr);
+
+int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) {
+ return __rt_sigaction(signum, act, oldact, 0, _NSIG/8);
+}
diff --git a/mdk-stage1/dietlibc/sparc/start.S b/mdk-stage1/dietlibc/sparc/start.S
index e948aaddc..c6408ee8f 100644
--- a/mdk-stage1/dietlibc/sparc/start.S
+++ b/mdk-stage1/dietlibc/sparc/start.S
@@ -1,46 +1,50 @@
-#include "start.h"
-
-#ifdef __sparc__
- .section ".text"
- .align 4
- .global _start
- .type _start,@function
+ .section ".text"
+ .align 4
+ .global _start
+ .type _start,@function
_start:
- /* Terminate the stack frame, and reserve space for functions to
- drop their arguments. */
- mov %g0, %fp
- sub %sp, 6*4, %sp
+/* Terminate the stack frame, and reserve space for functions to
+ drop their arguments. */
+ mov %g0, %fp
+ sub %sp, 6*4, %sp
- /* Extract the arguments and environment as encoded on the stack. The
- argument info starts after one register window (16 words) past the SP. */
- ld [%sp+22*4], %o0
- add %sp, 23*4, %o1
+/* Extract the arguments and environment as encoded on the stack. The
+ argument info starts after one register window (16 words) past the SP. */
+ ld [%sp+22*4], %o0
+ add %sp, 23*4, %o1
add %o1, %o0, %o2
add %o2, %o0, %o2
add %o2, %o0, %o2
add %o2, %o0, %o2
add %o2, 4, %o2
- sethi %hi(environ), %o3
- or %o3, %lo(environ), %o3
+ sethi %hi(environ), %o3
+ or %o3, %lo(environ), %o3
st %o2, [%o3]
- /* When starting a binary via the dynamic linker, %g1 contains the
- address of the shared library termination function, which will be
- registered with atexit(). If we are statically linked, this will
- be NULL. */
+/* When starting a binary via the dynamic linker, %g1 contains the
+ address of the shared library termination function, which will be
+ registered with atexit(). If we are statically linked, this will
+ be NULL. */
- /* Let libc do the rest of the initialization, and call main. */
+/* Let libc do the rest of the initialization, and call main. */
+#ifdef WANT_DYNAMIC
+ call dyn_start
+#else
call main
- mov %g1, %o5
+#endif
+ mov %g1, %o3
b exit
mov %o0, %i0
- /* Die very horribly if exit returns. */
- unimp
+/* Die very horribly if exit returns. */
- .size _start, .-_start
-#endif
+/* here we go and "reuse" the return for weak-void functions */
+#include "dietuglyweaks.h"
+ ret
+ nop
+
+ .size _start, .-_start
diff --git a/mdk-stage1/dietlibc/sparc/strlen.S b/mdk-stage1/dietlibc/sparc/strlen.S
new file mode 100644
index 000000000..59ffb7981
--- /dev/null
+++ b/mdk-stage1/dietlibc/sparc/strlen.S
@@ -0,0 +1,11 @@
+.text
+.globl strlen
+strlen:
+ add %o0, 1, %o1
+.Lloop:
+ ldsb [%o0], %o2
+ orcc %o2, %o2, %g0
+ bne .Lloop
+ add %o0, 1, %o0
+ retl
+ sub %o0, %o1, %o0
diff --git a/mdk-stage1/dietlibc/sparc/syscalls.h b/mdk-stage1/dietlibc/sparc/syscalls.h
new file mode 100644
index 000000000..ea5227c71
--- /dev/null
+++ b/mdk-stage1/dietlibc/sparc/syscalls.h
@@ -0,0 +1,276 @@
+
+#define __NR_exit 1 /* Common */
+#define __NR_fork 2 /* Common */
+#define __NR_read 3 /* Common */
+#define __NR_write 4 /* Common */
+#define __NR_open 5 /* Common */
+#define __NR_close 6 /* Common */
+#define __NR_wait4 7 /* Common */
+#define __NR_creat 8 /* Common */
+#define __NR_link 9 /* Common */
+#define __NR_unlink 10 /* Common */
+#define __NR_execv 11 /* SunOS Specific */
+#define __NR_chdir 12 /* Common */
+#define __NR_chown 13 /* Common */
+#define __NR_mknod 14 /* Common */
+#define __NR_chmod 15 /* Common */
+#define __NR_lchown 16 /* Common */
+#define __NR_brk 17 /* Common */
+#define __NR_perfctr 18 /* Performance counter operations */
+#define __NR_lseek 19 /* Common */
+#define __NR_getpid 20 /* Common */
+#define __NR_capget 21 /* Linux Specific */
+#define __NR_capset 22 /* Linux Specific */
+#define __NR_setuid 23 /* Implemented via setreuid in SunOS */
+#define __NR_getuid 24 /* Common */
+/* #define __NR_time alias 25 ENOSYS under SunOS */
+#define __NR_ptrace 26 /* Common */
+#define __NR_alarm 27 /* Implemented via setitimer in SunOS */
+#define __NR_sigaltstack 28 /* Common */
+#define __NR_pause 29 /* Is sigblock(0)->sigpause() in SunOS */
+#define __NR_utime 30 /* Implemented via utimes() under SunOS */
+#define __NR_lchown32 31 /* Linux sparc32 specific */
+#define __NR_fchown32 32 /* Linux sparc32 specific */
+#define __NR_access 33 /* Common */
+#define __NR_nice 34 /* Implemented via get/setpriority() in SunOS */
+#define __NR_chown32 35 /* Linux sparc32 specific */
+#define __NR_sync 36 /* Common */
+#define __NR_kill 37 /* Common */
+#define __NR_stat 38 /* Common */
+#define __NR_sendfile 39 /* Linux Specific */
+#define __NR_lstat 40 /* Common */
+#define __NR_dup 41 /* Common */
+#define __NR_pipe 42 /* Common */
+#define __NR_times 43 /* Implemented via getrusage() in SunOS */
+#define __NR_getuid32 44 /* Linux sparc32 specific */
+#define __NR_umount2 45 /* Linux Specific */
+#define __NR_setgid 46 /* Implemented via setregid() in SunOS */
+#define __NR_getgid 47 /* Common */
+#define __NR_signal 48 /* Implemented via sigvec() in SunOS */
+#define __NR_geteuid 49 /* SunOS calls getuid() */
+#define __NR_getegid 50 /* SunOS calls getgid() */
+#define __NR_acct 51 /* Common */
+/* #define __NR_memory_ordering 52 Linux sparc64 specific */
+#define __NR_getgid32 53 /* Linux sparc32 specific */
+#define __NR_ioctl 54 /* Common */
+#define __NR_reboot 55 /* Common */
+#define __NR_mmap2 56 /* Linux sparc32 Specific */
+#define __NR_symlink 57 /* Common */
+#define __NR_readlink 58 /* Common */
+#define __NR_execve 59 /* Common */
+#define __NR_umask 60 /* Common */
+#define __NR_chroot 61 /* Common */
+#define __NR_fstat 62 /* Common */
+#define __NR_fstat64 63 /* Linux sparc32 Specific */
+#define __NR_getpagesize 64 /* Common */
+#define __NR_msync 65 /* Common in newer 1.3.x revs... */
+#define __NR_vfork 66 /* Common */
+#define __NR_pread 67 /* Linux Specific */
+#define __NR_pwrite 68 /* Linux Specific */
+#define __NR_geteuid32 69 /* Linux sparc32, sbrk under SunOS */
+#define __NR_getegid32 70 /* Linux sparc32, sstk under SunOS */
+#define __NR_mmap 71 /* Common */
+#define __NR_setreuid32 72 /* Linux sparc32, vadvise under SunOS */
+#define __NR_munmap 73 /* Common */
+#define __NR_mprotect 74 /* Common */
+#define __NR_madvise 75 /* Common */
+#define __NR_vhangup 76 /* Common */
+#define __NR_truncate64 77 /* Linux sparc32 Specific */
+#define __NR_mincore 78 /* Common */
+#define __NR_getgroups 79 /* Common */
+#define __NR_setgroups 80 /* Common */
+#define __NR_getpgrp 81 /* Common */
+#define __NR_setgroups32 82 /* Linux sparc32, setpgrp under SunOS */
+#define __NR_setitimer 83 /* Common */
+#define __NR_ftruncate64 84 /* Linux sparc32 Specific */
+#define __NR_swapon 85 /* Common */
+#define __NR_getitimer 86 /* Common */
+#define __NR_setuid32 87 /* Linux sparc32, gethostname under SunOS */
+#define __NR_sethostname 88 /* Common */
+#define __NR_setgid32 89 /* Linux sparc32, getdtablesize under SunOS */
+#define __NR_dup2 90 /* Common */
+#define __NR_setfsuid32 91 /* Linux sparc32, getdopt under SunOS */
+#define __NR_fcntl 92 /* Common */
+#define __NR_select 93 /* Common */
+#define __NR_setfsgid32 94 /* Linux sparc32, setdopt under SunOS */
+#define __NR_fsync 95 /* Common */
+#define __NR_setpriority 96 /* Common */
+#define __NR_socket 97 /* Common */
+#define __NR_connect 98 /* Common */
+#define __NR_accept 99 /* Common */
+#define __NR_getpriority 100 /* Common */
+#define __NR_rt_sigreturn 101 /* Linux Specific */
+#define __NR_rt_sigaction 102 /* Linux Specific */
+#define __NR_rt_sigprocmask 103 /* Linux Specific */
+#define __NR_rt_sigpending 104 /* Linux Specific */
+#define __NR_rt_sigtimedwait 105 /* Linux Specific */
+#define __NR_rt_sigqueueinfo 106 /* Linux Specific */
+#define __NR_rt_sigsuspend 107 /* Linux Specific */
+#define __NR_setresuid32 108 /* Linux Specific, sigvec under SunOS */
+#define __NR_getresuid32 109 /* Linux Specific, sigblock under SunOS */
+#define __NR_setresgid32 110 /* Linux Specific, sigsetmask under SunOS */
+#define __NR_getresgid32 111 /* Linux Specific, sigpause under SunOS */
+#define __NR_setregid32 112 /* Linux sparc32, sigstack under SunOS */
+#define __NR_recvmsg 113 /* Common */
+#define __NR_sendmsg 114 /* Common */
+#define __NR_getgroups32 115 /* Linux sparc32, vtrace under SunOS */
+#define __NR_gettimeofday 116 /* Common */
+#define __NR_getrusage 117 /* Common */
+#define __NR_getsockopt 118 /* Common */
+#define __NR_getcwd 119 /* Linux Specific */
+#define __NR_readv 120 /* Common */
+#define __NR_writev 121 /* Common */
+#define __NR_settimeofday 122 /* Common */
+#define __NR_fchown 123 /* Common */
+#define __NR_fchmod 124 /* Common */
+#define __NR_recvfrom 125 /* Common */
+#define __NR_setreuid 126 /* Common */
+#define __NR_setregid 127 /* Common */
+#define __NR_rename 128 /* Common */
+#define __NR_truncate 129 /* Common */
+#define __NR_ftruncate 130 /* Common */
+#define __NR_flock 131 /* Common */
+#define __NR_lstat64 132 /* Linux sparc32 Specific */
+#define __NR_sendto 133 /* Common */
+#define __NR_shutdown 134 /* Common */
+#define __NR_socketpair 135 /* Common */
+#define __NR_mkdir 136 /* Common */
+#define __NR_rmdir 137 /* Common */
+#define __NR_utimes 138 /* SunOS Specific */
+#define __NR_stat64 139 /* Linux sparc32 Specific */
+/* #define __NR_adjtime 140 SunOS Specific */
+#define __NR_getpeername 141 /* Common */
+/* #define __NR_gethostid 142 SunOS Specific */
+/* #define __NR_ni_syscall 143 ENOSYS under SunOS */
+#define __NR_getrlimit 144 /* Common */
+#define __NR_setrlimit 145 /* Common */
+#define __NR_pivot_root 146 /* Linux Specific, killpg under SunOS */
+#define __NR_prctl 147 /* ENOSYS under SunOS */
+#define __NR_pciconfig_read 148 /* ENOSYS under SunOS */
+#define __NR_pciconfig_write 149 /* ENOSYS under SunOS */
+#define __NR_getsockname 150 /* Common */
+/* #define __NR_getmsg 151 SunOS Specific */
+/* #define __NR_putmsg 152 SunOS Specific */
+#define __NR_poll 153 /* Common */
+#define __NR_getdents64 154 /* Linux specific */
+#define __NR_fcntl64 155 /* Linux sparc32 Specific */
+/* #define __NR_getdirentries 156 SunOS Specific */
+#define __NR_statfs 157 /* Common */
+#define __NR_fstatfs 158 /* Common */
+#define __NR_umount 159 /* Common */
+/* #define __NR_async_daemon 160 SunOS Specific */
+/* #define __NR_getfh 161 SunOS Specific */
+#define __NR_getdomainname 162 /* SunOS Specific */
+#define __NR_setdomainname 163 /* Common */
+/* #define __NR_ni_syscall 164 ENOSYS under SunOS */
+#define __NR_quotactl 165 /* Common */
+/* #define __NR_exportfs 166 SunOS Specific */
+#define __NR_mount 167 /* Common */
+#define __NR_ustat 168 /* Common */
+/* #define __NR_semsys 169 SunOS Specific */
+/* #define __NR_msgsys 170 SunOS Specific */
+/* #define __NR_shmsys 171 SunOS Specific */
+/* #define __NR_auditsys 172 SunOS Specific */
+/* #define __NR_rfssys 173 SunOS Specific */
+#define __NR_getdents 174 /* Common */
+#define __NR_setsid 175 /* Common */
+#define __NR_fchdir 176 /* Common */
+/* #define __NR_fchroot 177 SunOS Specific */
+/* #define __NR_vpixsys 178 SunOS Specific */
+/* #define __NR_aioread 179 SunOS Specific */
+/* #define __NR_aiowrite 180 SunOS Specific */
+/* #define __NR_aiowait 181 SunOS Specific */
+/* #define __NR_aiocancel 182 SunOS Specific */
+#define __NR_sigpending 183 /* Common */
+#define __NR_query_module 184 /* Linux Specific */
+#define __NR_setpgid 185 /* Common */
+/* #define __NR_pathconf 186 SunOS Specific */
+/* #define __NR_fpathconf 187 SunOS Specific */
+/* #define __NR_sysconf 188 SunOS Specific */
+#define __NR_uname 189 /* Linux Specific */
+#define __NR_init_module 190 /* Linux Specific */
+#define __NR_personality 191 /* Linux Specific */
+/* #define __NR_prof 192 Linux Specific */
+/* #define __NR_break 193 Linux Specific */
+/* #define __NR_lock 194 Linux Specific */
+/* #define __NR_mpx 195 Linux Specific */
+/* #define __NR_ulimit 196 Linux Specific */
+#define __NR_getppid 197 /* Linux Specific */
+#define __NR_sigaction 198 /* Linux Specific */
+#define __NR_sgetmask 199 /* Linux Specific */
+#define __NR_ssetmask 200 /* Linux Specific */
+#define __NR_sigsuspend 201 /* Linux Specific */
+#define __NR_oldlstat 202 /* Linux Specific */
+#define __NR_uselib 203 /* Linux Specific */
+#define __NR_readdir 204 /* Linux Specific */
+/* #define __NR_ioperm 205 Linux Specific - i386 specific, unused */
+#define __NR_socketcall 206 /* Linux Specific */
+#define __NR_syslog 207 /* Linux Specific */
+/* #define __NR_olduname 208 Linux Specific */
+/* #define __NR_iopl 209 Linux Specific - i386 specific, unused */
+/* #define __NR_idle 210 Linux Specific - was sys_idle, now unused */
+/* #define __NR_vm86 211 Linux Specific - i386 specific, unused */
+#define __NR_waitpid 212 /* Linux Specific */
+#define __NR_swapoff 213 /* Linux Specific */
+#define __NR_sysinfo 214 /* Linux Specific */
+#define __NR_ipc 215 /* Linux Specific */
+#define __NR_sigreturn 216 /* Linux Specific */
+#define __NR_clone 217 /* Linux Specific */
+/* #define __NR_modify_ldt 218 Linux Specific - i386 specific, unused */
+#define __NR_adjtimex 219 /* Linux Specific */
+#define __NR_sigprocmask 220 /* Linux Specific */
+#define __NR_create_module 221 /* Linux Specific */
+#define __NR_delete_module 222 /* Linux Specific */
+#define __NR_get_kernel_syms 223 /* Linux Specific */
+#define __NR_getpgid 224 /* Linux Specific */
+#define __NR_bdflush 225 /* Linux Specific */
+#define __NR_sysfs 226 /* Linux Specific */
+#define __NR_afs_syscall 227 /* Linux Specific */
+#define __NR_setfsuid 228 /* Linux Specific */
+#define __NR_setfsgid 229 /* Linux Specific */
+#define __NR__newselect 230 /* Linux Specific */
+#define __NR_time 231 /* Linux Specific */
+/* #define __NR_oldstat 232 Linux Specific */
+#define __NR_stime 233 /* Linux Specific */
+/* #define __NR_oldfstat 234 Linux Specific */
+/* #define __NR_phys 235 Linux Specific */
+#define __NR__llseek 236 /* Linux Specific */
+#define __NR_mlock 237
+#define __NR_munlock 238
+#define __NR_mlockall 239
+#define __NR_munlockall 240
+#define __NR_sched_setparam 241
+#define __NR_sched_getparam 242
+#define __NR_sched_setscheduler 243
+#define __NR_sched_getscheduler 244
+#define __NR_sched_yield 245
+#define __NR_sched_get_priority_max 246
+#define __NR_sched_get_priority_min 247
+#define __NR_sched_rr_get_interval 248
+#define __NR_nanosleep 249
+#define __NR_mremap 250
+#define __NR__sysctl 251
+#define __NR_getsid 252
+#define __NR_fdatasync 253
+#define __NR_nfsservctl 254
+#define __NR_aplib 255
+
+#define syscall_weak(name,wsym,sym) \
+.text; \
+.type wsym,function; \
+.weak wsym; \
+wsym: ; \
+.type sym,function; \
+.global sym; \
+sym: \
+ b __unified_syscall; \
+ mov __NR_##name, %g1
+
+#define syscall(name,sym) \
+.text; \
+.type sym,function; \
+.global sym; \
+sym: \
+ b __unified_syscall; \
+ mov __NR_##name, %g1
+
diff --git a/mdk-stage1/dietlibc/sparc/unified.S b/mdk-stage1/dietlibc/sparc/unified.S
index 3cd609da5..873a522df 100644
--- a/mdk-stage1/dietlibc/sparc/unified.S
+++ b/mdk-stage1/dietlibc/sparc/unified.S
@@ -1,6 +1,14 @@
#include <dietfeatures.h>
+#include "syscalls.h"
.text
+.weak exit
+.type exit,function
+exit:
+.global _exit
+.type _exit,function
+_exit:
+ mov __NR_exit, %g1
.global __unified_syscall
__unified_syscall:
ta 0x10
@@ -14,7 +22,7 @@ __unified_syscall:
cmp %l2, 0xfe
bgu 2f
neg %i0, %l3
-#ifdef WANT_THREAD_SAVE
+#ifdef WANT_THREAD_SAFE
call __errno_location
nop
#else