lib
_exit.c
#define LIBRARY
#include <unistd.h>
volatile void _exit(int exit_code)
{
asm(“int $0x80”::“a” (__NR_exit),“b” (exit_code));
}
close.c
#define LIBRARY
#include <unistd.h>
_syscall1(int,close,int,fd)
ctype.c
#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 */
dup.c
#define LIBRARY
#include <unistd.h>
_syscall1(int,dup,int,fd)
errno.c
int errno;
execve.c
#define LIBRARY
#include <unistd.h>
_syscall3(int,execve,const char *,file,char **,argv,char **,envp)
Makefile
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:
open.c
#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;
}
setsid.c
#define LIBRARY
#include <unistd.h>
_syscall0(pid_t,setsid)
string.c
#ifndef GNUC
#error I want gcc!
#endif
#define extern
#define inline
#define LIBRARY
#include <string.h>
wait.c
#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);
}
write.c
#define LIBRARY
#include <unistd.h>
_syscall3(int,write,int,fd,const char *,buf,off_t,count)