Updated libc

This commit is contained in:
Alex
2022-12-07 13:53:08 +02:00
parent bc92258a5f
commit 2b57c3126a
28 changed files with 360 additions and 65 deletions

21
libc/src/InitArray.c Normal file
View File

@@ -0,0 +1,21 @@
extern void (*__preinit_array_start[])(void) __attribute__((weak));
extern void (*__preinit_array_end[])(void) __attribute__((weak));
extern void (*__init_array_start[])(void) __attribute__((weak));
extern void (*__init_array_end[])(void) __attribute__((weak));
extern void (*__fini_array_start []) (void) __attribute__((weak));
extern void (*__fini_array_end []) (void) __attribute__((weak));
extern void _init(void);
void __libc_init_array(void)
{
unsigned long Count = __preinit_array_end - __preinit_array_start;
for (unsigned long i = 0; i < Count; i++)
__preinit_array_start[i]();
_init();
Count = __init_array_end - __init_array_start;
for (unsigned long i = 0; i < Count; i++)
__init_array_start[i]();
}

View File

@@ -8,13 +8,14 @@ OBJECT_NAME=lib$(NAME).a
OUTPUT_DIR=../../out/system/lib/
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
AS = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)as
AR = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)ar
NASM = /usr/bin/nasm
C_SOURCES = $(shell find ./ -type f -name '*.c')
S_SOURCES = $(shell find ./ -type f -name '*.s')
S_SOURCES = $(shell find ./ -type f -name '*.S')
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
OBJ = ${C_SOURCES:.c=.o} ${ASM_SOURCES:.asm=.o} ${S_SOURCES:.s=.o}
OBJ = ${C_SOURCES:.c=.o} ${ASM_SOURCES:.asm=.o} ${S_SOURCES:.S=.o}
INCLUDE_DIR = ../include
@@ -24,7 +25,7 @@ else ifeq ($(OSARCH), i686)
ASM_ARCH := elf32
endif
CFLAGS := -fPIC -I$(INCLUDE_DIR)
CFLAGS := -fPIC -mno-red-zone -I$(INCLUDE_DIR)
build: $(OBJECT_NAME)
@@ -37,6 +38,9 @@ $(OBJECT_NAME): $(OBJ)
%.o: %.cpp $(HEADERS) $(HEADERS2)
$(CC) $(CFLAGS) -std=c++20 -c $< -o $@
%.o: %.S
$(AS) -c $< -o $@
%.o: %.asm
$(NASM) $< -f $(ASM_ARCH) -o $@

18
libc/src/Runtime.c Normal file
View File

@@ -0,0 +1,18 @@
extern void __libc_init_array();
void __libc_init()
{
__libc_init_array();
}
void _exit(int Code)
{
__asm__ __volatile__("syscall"
:
: "a"(0), "D"(Code)
: "rcx", "r11", "memory");
while (1)
__asm__ __volatile__("hlt");
}

View File