diff options
Diffstat (limited to 'linux/lib')
| -rw-r--r-- | linux/lib/Makefile | 44 | ||||
| -rw-r--r-- | linux/lib/_exit.c | 7 | ||||
| -rw-r--r-- | linux/lib/close.c | 4 | ||||
| -rw-r--r-- | linux/lib/ctype.c | 29 | ||||
| -rw-r--r-- | linux/lib/dup.c | 4 | ||||
| -rw-r--r-- | linux/lib/errno.c | 1 | ||||
| -rw-r--r-- | linux/lib/execve.c | 4 | ||||
| -rw-r--r-- | linux/lib/open.c | 19 | ||||
| -rw-r--r-- | linux/lib/setsid.c | 4 | ||||
| -rw-r--r-- | linux/lib/string.c | 8 | ||||
| -rw-r--r-- | linux/lib/wait.c | 10 | ||||
| -rw-r--r-- | linux/lib/write.c | 4 |
12 files changed, 138 insertions, 0 deletions
diff --git a/linux/lib/Makefile b/linux/lib/Makefile new file mode 100644 index 0000000..a06698d --- /dev/null +++ b/linux/lib/Makefile @@ -0,0 +1,44 @@ +# +# Makefile for some libs needed in the kernel. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =gar +AS =gas +LD =gld +LDFLAGS =-s -x +CC =gcc +CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer -fcombine-regs \ + -finline-functions -mstring-insns -nostdinc -I../include +CPP =gcc -E -nostdinc -I../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -c -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = ctype.o _exit.o open.o close.o errno.o write.o dup.o setsid.o \ + execve.o wait.o string.o + +lib.a: $(OBJS) + $(AR) rcs lib.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: diff --git a/linux/lib/_exit.c b/linux/lib/_exit.c new file mode 100644 index 0000000..44a74e1 --- /dev/null +++ b/linux/lib/_exit.c @@ -0,0 +1,7 @@ +#define __LIBRARY__ +#include <unistd.h> + +volatile void _exit(int exit_code) +{ + __asm__("int $0x80"::"a" (__NR_exit),"b" (exit_code)); +} diff --git a/linux/lib/close.c b/linux/lib/close.c new file mode 100644 index 0000000..182d7eb --- /dev/null +++ b/linux/lib/close.c @@ -0,0 +1,4 @@ +#define __LIBRARY__ +#include <unistd.h> + +_syscall1(int,close,int,fd) diff --git a/linux/lib/ctype.c b/linux/lib/ctype.c new file mode 100644 index 0000000..bf58aac --- /dev/null +++ b/linux/lib/ctype.c @@ -0,0 +1,29 @@ +#include <ctype.h> + +char _ctmp; +unsigned char _ctype[] = {0x00, /* EOF */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 0-7 */ +_C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C, /* 8-15 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 16-23 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 24-31 */ +_S|_SP,_P,_P,_P,_P,_P,_P,_P, /* 32-39 */ +_P,_P,_P,_P,_P,_P,_P,_P, /* 40-47 */ +_D,_D,_D,_D,_D,_D,_D,_D, /* 48-55 */ +_D,_D,_P,_P,_P,_P,_P,_P, /* 56-63 */ +_P,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U, /* 64-71 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 72-79 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 80-87 */ +_U,_U,_U,_P,_P,_P,_P,_P, /* 88-95 */ +_P,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L, /* 96-103 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 104-111 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 112-119 */ +_L,_L,_L,_P,_P,_P,_P,_C, /* 120-127 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 128-143 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 144-159 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 160-175 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 176-191 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 192-207 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 208-223 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 224-239 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* 240-255 */ + diff --git a/linux/lib/dup.c b/linux/lib/dup.c new file mode 100644 index 0000000..03bd5d0 --- /dev/null +++ b/linux/lib/dup.c @@ -0,0 +1,4 @@ +#define __LIBRARY__ +#include <unistd.h> + +_syscall1(int,dup,int,fd) diff --git a/linux/lib/errno.c b/linux/lib/errno.c new file mode 100644 index 0000000..6e7bb62 --- /dev/null +++ b/linux/lib/errno.c @@ -0,0 +1 @@ +int errno; diff --git a/linux/lib/execve.c b/linux/lib/execve.c new file mode 100644 index 0000000..03772e3 --- /dev/null +++ b/linux/lib/execve.c @@ -0,0 +1,4 @@ +#define __LIBRARY__ +#include <unistd.h> + +_syscall3(int,execve,const char *,file,char **,argv,char **,envp) diff --git a/linux/lib/open.c b/linux/lib/open.c new file mode 100644 index 0000000..057039c --- /dev/null +++ b/linux/lib/open.c @@ -0,0 +1,19 @@ +#define __LIBRARY__ +#include <unistd.h> +#include <stdarg.h> + +int open(const char * filename, int flag, ...) +{ + register int res; + va_list arg; + + va_start(arg,flag); + __asm__("int $0x80" + :"=a" (res) + :"0" (__NR_open),"b" (filename),"c" (flag), + "d" (va_arg(arg,int))); + if (res>=0) + return res; + errno = -res; + return -1; +} diff --git a/linux/lib/setsid.c b/linux/lib/setsid.c new file mode 100644 index 0000000..730abf0 --- /dev/null +++ b/linux/lib/setsid.c @@ -0,0 +1,4 @@ +#define __LIBRARY__ +#include <unistd.h> + +_syscall0(pid_t,setsid) diff --git a/linux/lib/string.c b/linux/lib/string.c new file mode 100644 index 0000000..f6befd9 --- /dev/null +++ b/linux/lib/string.c @@ -0,0 +1,8 @@ +#ifndef __GNUC__ +#error I want gcc! +#endif + +#define extern +#define inline +#define __LIBRARY__ +#include <string.h> diff --git a/linux/lib/wait.c b/linux/lib/wait.c new file mode 100644 index 0000000..a14555c --- /dev/null +++ b/linux/lib/wait.c @@ -0,0 +1,10 @@ +#define __LIBRARY__ +#include <unistd.h> +#include <sys/wait.h> + +_syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) + +pid_t wait(int * wait_stat) +{ + return waitpid(-1,wait_stat,0); +} diff --git a/linux/lib/write.c b/linux/lib/write.c new file mode 100644 index 0000000..2613f17 --- /dev/null +++ b/linux/lib/write.c @@ -0,0 +1,4 @@ +#define __LIBRARY__ +#include <unistd.h> + +_syscall3(int,write,int,fd,const char *,buf,off_t,count) |
