Path and compile musl libc into kernel
This commit is contained in:
@@ -11,10 +11,11 @@ CFLAGS := -Wall -Wextra -pedantic -ffreestanding -mcmodel=large
|
||||
CFLAGS += -ggdb -O0
|
||||
ASFLAGS += -ggdb
|
||||
CPPFLAGS += -I include
|
||||
LDFLAGS := -n -nostdlib -lgcc -T Link.ld
|
||||
LDFLAGS := -n -T Link.ld
|
||||
LDLIBS := -nostdlib -lgcc -L/opt/sysroot/usr/lib -lc
|
||||
|
||||
kernel: $(OBJ)
|
||||
$(LINK.c) $^ -o $@
|
||||
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
|
||||
|
||||
%.o: %.S.py
|
||||
python3 $^ | $(COMPILE.S) $(DEPFLAGS) -x assembler-with-cpp - -o $@
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <debug.h>
|
||||
#include <multiboot.h>
|
||||
#include <interrupts.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
struct kernel_boot_data_st kernel_boot_data;
|
||||
|
||||
@@ -26,6 +27,10 @@ void kmain(uint64_t multiboot_magic, void *multiboot_data)
|
||||
|
||||
debug_info("Boot complete\n");
|
||||
|
||||
debug_info("Mallocing\n");
|
||||
uint64_t a = malloc(100);
|
||||
debug_info("Malloced %x\n", a);
|
||||
|
||||
PANIC("End of kernel function!");
|
||||
|
||||
debug_info("Broke out of panic");
|
||||
|
||||
50
src/kernel/lib/musl-glue.c
Normal file
50
src/kernel/lib/musl-glue.c
Normal file
@@ -0,0 +1,50 @@
|
||||
#include <debug.h>
|
||||
|
||||
long syscall0(long num)
|
||||
{
|
||||
long retval = 0;
|
||||
PANIC("Unknown syscall: %d()\n", num);
|
||||
return retval;
|
||||
}
|
||||
|
||||
extern long syscall1(long num, long a1)
|
||||
{
|
||||
long retval = 0;
|
||||
PANIC("Unknown syscall: %d(%x)\n", num, a1);
|
||||
return retval;
|
||||
}
|
||||
|
||||
extern long syscall2(long num, long a1, long a2)
|
||||
{
|
||||
long retval = 0;
|
||||
PANIC("Unknown syscall: %d(%x, %x)\n", num, a1, a2);
|
||||
return retval;
|
||||
}
|
||||
|
||||
extern long syscall3(long num, long a1, long a2, long a3)
|
||||
{
|
||||
long retval = 0;
|
||||
PANIC("Unknown syscall: %d(%x, %x, %x)\n", num, a1, a2, a3);
|
||||
return retval;
|
||||
}
|
||||
|
||||
extern long syscall4(long num, long a1, long a2, long a3, long a4)
|
||||
{
|
||||
long retval = 0;
|
||||
PANIC("Unknown syscall: %d(%x, %x, %x, %x)\n", num, a1, a2, a3, a4);
|
||||
return retval;
|
||||
}
|
||||
|
||||
extern long syscall5(long num, long a1, long a2, long a3, long a4, long a5)
|
||||
{
|
||||
long retval = 0;
|
||||
PANIC("Unknown syscall: %d(%x, %x, %x, %x, %x)\n", num, a1, a2, a3, a4, a5);
|
||||
return retval;
|
||||
}
|
||||
|
||||
extern long syscall6(long num, long a1, long a2, long a3, long a4, long a5, long a6)
|
||||
{
|
||||
long retval = 0;
|
||||
PANIC("Unknown syscall: %d(%x, %x, %x, %x, %x, %x)\n", num, a1, a2, a3, a4, a5, a6);
|
||||
return retval;
|
||||
}
|
||||
47
src/patch-musl/arch/x86_64/syscall_arch.h
Normal file
47
src/patch-musl/arch/x86_64/syscall_arch.h
Normal file
@@ -0,0 +1,47 @@
|
||||
#define __SYSCALL_LL_E(x) (x)
|
||||
#define __SYSCALL_LL_O(x) (x)
|
||||
|
||||
extern long syscall0(long);
|
||||
extern long syscall1(long, long);
|
||||
extern long syscall2(long, long, long);
|
||||
extern long syscall3(long, long, long, long);
|
||||
extern long syscall4(long, long, long, long, long);
|
||||
extern long syscall5(long, long, long, long, long, long);
|
||||
extern long syscall6(long, long, long, long, long, long, long);
|
||||
|
||||
static __inline long __syscall0(long n)
|
||||
{
|
||||
return syscall0(n);
|
||||
}
|
||||
static __inline long __syscall1(long n, long a1)
|
||||
{
|
||||
return syscall1(n, a1);
|
||||
}
|
||||
static __inline long __syscall2(long n, long a1, long a2)
|
||||
{
|
||||
return syscall2(n, a1, a2);
|
||||
}
|
||||
static __inline long __syscall3(long n, long a1, long a2, long a3)
|
||||
{
|
||||
return syscall3(n, a1, a2, a3);
|
||||
}
|
||||
static __inline long __syscall4(long n, long a1, long a2, long a3, long a4)
|
||||
{
|
||||
return syscall4(n, a1, a2, a3, a4);
|
||||
}
|
||||
static __inline long __syscall5(long n, long a1, long a2, long a3, long a4, long a5)
|
||||
{
|
||||
return syscall5(n, a1, a2, a3, a4, a5);
|
||||
}
|
||||
static __inline long __syscall6(long n, long a1, long a2, long a3, long a4, long a5, long a6)
|
||||
{
|
||||
return syscall6(n, a1, a2, a3, a4, a5, a6);
|
||||
}
|
||||
|
||||
#define VDSO_USEFUL
|
||||
#define VDSO_CGT_SYM "__vdso_clock_gettime"
|
||||
#define VDSO_CGT_VER "LINUX_2.6"
|
||||
#define VDSO_GETCPU_SYM "__vdso_getcpu"
|
||||
#define VDSO_GETCPU_VER "LINUX_2.6"
|
||||
|
||||
#define IPC_64 0
|
||||
Reference in New Issue
Block a user