summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/m68k
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/m68k')
-rw-r--r--libc/sysdeps/linux/m68k/Makefile2
-rw-r--r--libc/sysdeps/linux/m68k/README.m68k10
-rw-r--r--libc/sysdeps/linux/m68k/bits/vfork.h31
-rw-r--r--libc/sysdeps/linux/m68k/crt0.S5
-rw-r--r--libc/sysdeps/linux/m68k/vfork.c25
5 files changed, 30 insertions, 43 deletions
diff --git a/libc/sysdeps/linux/m68k/Makefile b/libc/sysdeps/linux/m68k/Makefile
index e4346e4c8..5f2b73581 100644
--- a/libc/sysdeps/linux/m68k/Makefile
+++ b/libc/sysdeps/linux/m68k/Makefile
@@ -32,7 +32,7 @@ CRT0_OBJ=$(patsubst %.S,%.o, $(CRT0))
SSRC=setjmp.S # longjmp.S _start.S clone.S
SOBJS=$(patsubst %.S,%.o, $(SSRC))
-CSRC=ptrace.c #errno.c
+CSRC=ptrace.c vfork.c
COBJS=$(patsubst %.c,%.o, $(CSRC))
OBJS=$(SOBJS) $(MOBJ) $(COBJS)
diff --git a/libc/sysdeps/linux/m68k/README.m68k b/libc/sysdeps/linux/m68k/README.m68k
index 697413852..f774e6f7a 100644
--- a/libc/sysdeps/linux/m68k/README.m68k
+++ b/libc/sysdeps/linux/m68k/README.m68k
@@ -40,16 +40,6 @@ Installation:
run:
make install
-Usage:
- Any program you compile should have this added to CFLAGS:
-
- -D__VFORK_MACRO__ -Dconst= -D__const=
-
- (You need the equal sign so that const and __const are defined
- as NULL instead of as '1') The 'const' keyword is broken for
- m68k-pic-coff-gcc 2.7.2.3-pic-060999. There _was_ a fix
- floating around, but apparently it didn't work.
-
Problems:
I _may_ be able to help if you run into problems. Create a
diff --git a/libc/sysdeps/linux/m68k/bits/vfork.h b/libc/sysdeps/linux/m68k/bits/vfork.h
deleted file mode 100644
index ceb9af8a6..000000000
--- a/libc/sysdeps/linux/m68k/bits/vfork.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* orginally from include/unistd.h, written by ndf@linux.mit.edu> */
-
-#ifndef _M68K_VFORK_H
-#define _M68K_VFORK_H 1
-
-extern int _clone __P ((int (*fn)(void *arg), void *child_stack, int flags, void *arg));
-
-#ifndef __NR_vfork
-#define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
-#endif
-
-#define vfork() ({ \
-unsigned long __res; \
-__asm__ __volatile__ ("movel %1,%%d0;" \
- "trap #0;" \
- "movel %%d0,%0" \
- : "=d" (__res) \
- : "0" (__NR_vfork) \
- : "%d0"); \
-if (__res >= (unsigned long)-4096) { \
- errno = -__res; \
- __res = (pid_t)-1; \
-} \
-(pid_t)__res; \
-})
-
-
-#define clone clone_not_available_use__clone
-
-#endif /* _M68K_VFORK_H */
-
diff --git a/libc/sysdeps/linux/m68k/crt0.S b/libc/sysdeps/linux/m68k/crt0.S
index 182e8baea..06b4b54f5 100644
--- a/libc/sysdeps/linux/m68k/crt0.S
+++ b/libc/sysdeps/linux/m68k/crt0.S
@@ -50,8 +50,11 @@ __exit:
*/
empty_func:
rts
+#if defined HAVE_ELF
.weak atexit
-atexit = empty_func
+#else
+ .set atexit,empty_func
+#endif
/*
* a little bit of stuff to support C++
diff --git a/libc/sysdeps/linux/m68k/vfork.c b/libc/sysdeps/linux/m68k/vfork.c
new file mode 100644
index 000000000..9edcb650d
--- /dev/null
+++ b/libc/sysdeps/linux/m68k/vfork.c
@@ -0,0 +1,25 @@
+/* orginally from include/unistd.h, written by ndf@linux.mit.edu> */
+#include <unistd.h>
+#include <sys/types.h>
+#include <asm/unistd.h>
+
+#ifndef __NR_vfork
+#define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
+#endif
+
+pid_t vfork(void)
+{
+ pid_t __res;
+ __asm__ __volatile__ ("movel %1,%%d0;"
+ "trap #0;"
+ "movel %%d0,%0"
+ : "=d" (__res)
+ : "0" (__NR_vfork)
+ : "%d0");
+ if (__res >= (unsigned long)-4096) {
+ errno = -__res;
+ __res = (pid_t)-1;
+ }
+ return(__res);
+}
+