Updated libc

This commit is contained in:
Alex 2022-12-07 13:53:08 +02:00
parent bc92258a5f
commit 2b57c3126a
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
28 changed files with 360 additions and 65 deletions

View File

@ -4,6 +4,7 @@ build:
mkdir -p out/system/lib
mkdir -p out/system/include
make --quiet -C libc build
make --quiet -C libs build
make --quiet -C apps build
prepare:
@ -11,5 +12,6 @@ prepare:
clean:
rm -rf out
make --quiet -C libc clean
make --quiet -C apps clean
make -C libc clean
make -C libs clean
make -C apps clean

View File

@ -1,7 +1,9 @@
build:
make --quiet -C system build
make --quiet -C base build
make --quiet -C user build
clean:
make --quiet -C system clean
make --quiet -C user clean
make -C system clean
make -C base clean
make -C user clean

5
apps/base/Makefile Normal file
View File

@ -0,0 +1,5 @@
build:
make --quiet -C echo build
clean:
make -C echo clean

83
apps/base/echo/Makefile Normal file
View File

@ -0,0 +1,83 @@
# Config file
include ../../../../Makefile.conf
FILENAME = echo.elf
SYSROOT = --sysroot=../../../out/system/
CC = ../../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
CPP = ../../../../$(COMPILER_PATH)/$(COMPILER_ARCH)g++
LD = ../../../../$(COMPILER_PATH)/$(COMPILER_ARCH)ld
AS = ../../../../$(COMPILER_PATH)/$(COMPILER_ARCH)as
OBJDUMP = ../../../../$(COMPILER_PATH)/$(COMPILER_ARCH)objdump
GIT_COMMIT = $(shell git rev-parse HEAD)
GIT_COMMIT_SHORT = $(shell git rev-parse --short HEAD)
ifeq ($(OSARCH), amd64)
S_SOURCES = $(shell find ./ -type f -name '*.S' -not -path "./arch/i686/*" -not -path "./arch/aarch64/*")
C_SOURCES = $(shell find ./ -type f -name '*.c' -not -path "./arch/i686/*" -not -path "./arch/aarch64/*")
CPP_SOURCES = $(shell find ./ -type f -name '*.cpp' -not -path "./arch/i686/*" -not -path "./arch/aarch64/*")
else ifeq ($(OSARCH), i686)
S_SOURCES = $(shell find ./ -type f -name '*.S' -not -path "./arch/amd64/*" -not -path "./arch/aarch64/*")
C_SOURCES = $(shell find ./ -type f -name '*.c' -not -path "./arch/amd64/*" -not -path "./arch/aarch64/*")
CPP_SOURCES = $(shell find ./ -type f -name '*.cpp' -not -path "./arch/amd64/*" -not -path "./arch/aarch64/*")
else ifeq ($(OSARCH), aarch64)
S_SOURCES = $(shell find ./ -type f -name '*.S' -not -path "./arch/amd64/*" -not -path "./arch/i686/*")
C_SOURCES = $(shell find ./ -type f -name '*.c' -not -path "./arch/amd64/*" -not -path "./arch/i686/*")
CPP_SOURCES = $(shell find ./ -type f -name '*.cpp' -not -path "./arch/amd64/*" -not -path "./arch/i686/*")
endif
HEADERS = $(sort $(dir $(wildcard ../../../out/system/include/*)))
OBJ = $(C_SOURCES:.c=.o) $(CPP_SOURCES:.cpp=.o) $(ASM_SOURCES:.asm=.o) $(S_SOURCES:.S=.o) $(PSF_SOURCES:.psf=.o) $(BMP_SOURCES:.bmp=.o)
INCLUDE_DIR = ../../../out/system/include
LDFLAGS := -Wl,-Map file.map
WARNCFLAG = -Wall -Wextra -Wno-builtin-declaration-mismatch
CFLAGS := \
-I$(INCLUDE_DIR) \
-DGIT_COMMIT='"$(GIT_COMMIT)"' \
-DGIT_COMMIT_SHORT='"$(GIT_COMMIT_SHORT)"'
ifeq ($(OSARCH), amd64)
CFLAGS += -march=x86-64
else ifeq ($(OSARCH), i686)
CFLAGS += -march=i686
else ifeq ($(OSARCH), aarch64)
CFLAGS += -pipe
endif
build: $(FILENAME)
$(OBJDUMP) -d $(FILENAME) > file_dump.map
mv $(FILENAME) ../../../out/system/$(FILENAME)
$(FILENAME): $(OBJ)
$(CC) $(LDFLAGS) $(SYSROOT) $(OBJ) -o $@
%.o: %.c $(HEADERS)
$(info Compiling $<)
$(CC) $(CFLAGS) $(WARNCFLAG) -std=c17 -c $< -o $@
%.o: %.cpp $(HEADERS)
$(info Compiling $<)
$(CPP) $(CFLAGS) $(WARNCFLAG) -std=c++20 -fexceptions -c $< -o $@ -fno-rtti
%.o: %.S
$(info Compiling $<)
ifeq ($(OSARCH), amd64)
$(AS) -o $@ $<
else ifeq ($(OSARCH), i686)
$(AS) -o $@ $<
else ifeq ($(OSARCH), aarch64)
$(AS) -o $@ $<
endif
clean:
rm -f *.o file.map file_dump.map $(OBJ)

21
apps/base/echo/echo.cpp Normal file
View File

@ -0,0 +1,21 @@
static inline long syscall2(int sc, long arg1, long arg2)
{
long ret;
__asm__ __volatile__("syscall"
: "=a"(ret)
: "a"(sc), "D"(arg1), "S"(arg2)
: "rcx", "r11", "memory");
return ret;
}
int main(int argc, char *argv[])
{
// TODO: Change this to use stdout
for (int i = 1; i < argc; i++)
{
for (int j = 0; argv[i][j]; j++)
syscall2(1, argv[i][j], 0);
syscall2(1, ' ', 0);
}
return 0;
}

View File

@ -2,4 +2,4 @@ build:
make --quiet -C init build
clean:
make --quiet -C init clean
make -C init clean

View File

@ -31,7 +31,7 @@ HEADERS = $(sort $(dir $(wildcard ../../../out/system/include/*)))
OBJ = $(C_SOURCES:.c=.o) $(CPP_SOURCES:.cpp=.o) $(ASM_SOURCES:.asm=.o) $(S_SOURCES:.S=.o) $(PSF_SOURCES:.psf=.o) $(BMP_SOURCES:.bmp=.o)
INCLUDE_DIR = ../../../out/system/include
LDFLAGS := -fPIC -Wl,-Map file.map
LDFLAGS := -Wl,-Map file.map
WARNCFLAG = -Wall -Wextra -Wno-builtin-declaration-mismatch
@ -42,15 +42,15 @@ CFLAGS := \
ifeq ($(OSARCH), amd64)
CFLAGS += -fPIC -march=x86-64 -fstack-protector-all -fstack-clash-protection
CFLAGS += -march=x86-64 -fstack-protector-all -fstack-clash-protection
else ifeq ($(OSARCH), i686)
CFLAGS += -fPIC -march=i686
CFLAGS += -march=i686
else ifeq ($(OSARCH), aarch64)
CFLAGS += -pipe -fPIC
CFLAGS += -pipe
endif
@ -59,7 +59,7 @@ build: $(FILENAME)
mv $(FILENAME) ../../../out/system/$(FILENAME)
$(FILENAME): $(OBJ)
$(CC) $(LDFLAGS) $(SYSROOT) $(OBJ) -o $@
$(CC) $(LDFLAGS) $(SYSROOT) $(OBJ) -lssp -o $@
%.o: %.c $(HEADERS)
$(info Compiling $<)

View File

@ -58,16 +58,16 @@ static inline long syscall2(int sc, long arg1, long arg2)
return ret;
}
extern "C" void putchar(char c) { syscall2(1, c, 0); }
void putchar(char c) { syscall2(1, c, 0); }
int main(int argc, char *argv[], char *envp[])
{
printf_("Hello World!\n");
printf_("I have %d arguments\n", argc);
for (int i = 0; i < argc; i++)
printf_("argv[%d] = %s\n", i, argv[i]);
printf_("argv[%d] = (%p) %s\n", i, argv[i], argv[i]);
for (int i = 0; envp[i]; i++)
printf_("envp[%d] = %s\n", i, envp[i]);
printf_("envp[%d] = (%p) %s\n", i, envp[i], envp[i]);
Elf64_auxv_t *auxv;
while (*envp++ != NULL)
;

8
apps/system/init/log Normal file
View File

@ -0,0 +1,8 @@
919707 execve("../../../../tools/cross/bin/amd64-elf-gcc", ["../../../../tools/cross/bin/amd6"..., "-Wl,-Map", "file.map", "-shared", "--sysroot=../../../out/system/", "./printf.o", "./ssp.o", "./init.o", "-o", "init.elf"], ["GDK_BACKEND=x11", "GNOME_SHELL_SESSION_MODE=ubuntu", "SSH_AGENT_LAUNCHER=gnome-keyring", "GJS_DEBUG_OUTPUT=stderr", "MANDATORY_PATH=/usr/share/gconf/"..., "WINDOWPATH=2", "LIBVIRT_DEFAULT_URI=qemu:///syst"..., "GTK3_MODULES=xapp-gtk3-module", "QT_ACCESSIBILITY=1", "VSCODE_GIT_ASKPASS_EXTRA_ARGS=--"..., "PWD=/media/enderice2/SSD250/Fenn"..., "XDG_DATA_DIRS=/usr/share/ubuntu-"..., "LANG=ro_RO.UTF-8", "XAUTHORITY=/run/user/1000/gdm/Xa"..., "MAKEFLAGS=s", "LESSOPEN=| /usr/bin/lesspipe %s", "MFLAGS=-s", "SSH_AUTH_SOCK=/run/user/1000/key"..., "XDG_CONFIG_DIRS=/etc/xdg/xdg-ubu"..., "GIT_ASKPASS=/usr/share/code/reso"..., "XDG_SESSION_DESKTOP=ubuntu-xorg", "ENABLE_VKBASALT=1", "XDG_SESSION_TYPE=x11", "SESSION_MANAGER=local/enderice2-"..., "CHROME_DESKTOP=code-url-handler."..., "DBUS_SESSION_BUS_ADDRESS=unix:pa"..., "GNOME_DESKTOP_SESSION_ID=this-is"..., "SHELL=/bin/bash", "XMODIFIERS=@im=ibus", "DOTNET_BUNDLE_EXTRACT_BASE_DIR=/"..., "GJS_DEBUG_TOPICS=JS ERROR;JS LOG", "SHLVL=1", "PATH=/home/enderice2/.local/bin:"..., "VSCODE_GIT_IPC_HANDLE=/run/user/"..., "VSCODE_GIT_ASKPASS_NODE=/usr/sha"..., "VSCODE_GIT_ASKPASS_MAIN=/usr/sha"..., "INVOCATION_ID=ec0726044e7e4279b4"..., "USERNAME=enderice2", "TERM_PROGRAM=vscode", "LESSCLOSE=/usr/bin/lesspipe %s %"..., "XDG_CURRENT_DESKTOP=Unity", "LS_COLORS=rs=0:di=01;34:ln=01;36"..., "DESKTOP_SESSION=ubuntu-xorg", "ORIGINAL_XDG_CURRENT_DESKTOP=ubu"..., "LOGNAME=enderice2", "GIO_LAUNCHED_DESKTOP_FILE=/usr/s"..., "SYSTEMD_EXEC_PID=3170", "DISPLAY=:0", "GTK_MODULES=gail:atk-bridge:appm"..., "USER=enderice2", "DEFAULTS_PATH=/usr/share/gconf/u"..., "QT_FONT_DPI=96", "MANAGERPID=2831", "GIO_LAUNCHED_DESKTOP_FILE_PID=10"..., "QT_STYLE_OVERRIDE=kvantum", "_=/usr/bin/make", "MAKE_TERMOUT=/dev/pts/1", "XDG_RUNTIME_DIR=/run/user/1000", "GPG_AGENT_INFO=/run/user/1000/gn"..., "COLORTERM=truecolor", "JOURNAL_STREAM=8:44860", "MAKE_TERMERR=/dev/pts/1", "XDG_SESSION_CLASS=user", "HOME=/home/enderice2", "QT_IM_MODULE=ibus", "TERM=xterm-256color", "IM_CONFIG_PHASE=1", "XDG_MENU_PREFIX=gnome-", "TERM_PROGRAM_VERSION=1.73.1", "DOTNET_ROOT=/usr/lib/dotnet/dotn"..., "GDMSESSION=ubuntu-xorg", "MAKELEVEL=5"]) = 0
919708 execve("/media/enderice2/SSD250/Fennix/tools/cross/libexec/gcc/amd64-elf/13.0.0/collect2", ["/media/enderice2/SSD250/Fennix/t"..., "-plugin", "/media/enderice2/SSD250/Fennix/t"..., "-plugin-opt=/media/enderice2/SSD"..., "-plugin-opt=-fresolution=/tmp/cc"..., "-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc", "--sysroot=../../../out/system/", "-o", "init.elf", "../../../out/system/lib/crtbegin"..., "-L/media/enderice2/SSD250/Fennix"..., "-L/media/enderice2/SSD250/Fennix"..., "-L../../../out/system/lib", "-Map", "file.map", "./printf.o", "./ssp.o", "./init.o", "-lgcc", "-lgcc", "../../../out/system/lib/crtend.o"], ["GDK_BACKEND=x11", "GNOME_SHELL_SESSION_MODE=ubuntu", "SSH_AGENT_LAUNCHER=gnome-keyring", "GJS_DEBUG_OUTPUT=stderr", "MANDATORY_PATH=/usr/share/gconf/"..., "WINDOWPATH=2", "LIBVIRT_DEFAULT_URI=qemu:///syst"..., "GTK3_MODULES=xapp-gtk3-module", "QT_ACCESSIBILITY=1", "VSCODE_GIT_ASKPASS_EXTRA_ARGS=--"..., "PWD=/media/enderice2/SSD250/Fenn"..., "XDG_DATA_DIRS=/usr/share/ubuntu-"..., "LANG=ro_RO.UTF-8", "XAUTHORITY=/run/user/1000/gdm/Xa"..., "MAKEFLAGS=s", "LESSOPEN=| /usr/bin/lesspipe %s", "MFLAGS=-s", "SSH_AUTH_SOCK=/run/user/1000/key"..., "XDG_CONFIG_DIRS=/etc/xdg/xdg-ubu"..., "GIT_ASKPASS=/usr/share/code/reso"..., "XDG_SESSION_DESKTOP=ubuntu-xorg", "ENABLE_VKBASALT=1", "XDG_SESSION_TYPE=x11", "SESSION_MANAGER=local/enderice2-"..., "CHROME_DESKTOP=code-url-handler."..., "DBUS_SESSION_BUS_ADDRESS=unix:pa"..., "GNOME_DESKTOP_SESSION_ID=this-is"..., "SHELL=/bin/bash", "XMODIFIERS=@im=ibus", "DOTNET_BUNDLE_EXTRACT_BASE_DIR=/"..., "GJS_DEBUG_TOPICS=JS ERROR;JS LOG", "SHLVL=1", "PATH=/home/enderice2/.local/bin:"..., "VSCODE_GIT_IPC_HANDLE=/run/user/"..., "VSCODE_GIT_ASKPASS_NODE=/usr/sha"..., "VSCODE_GIT_ASKPASS_MAIN=/usr/sha"..., "INVOCATION_ID=ec0726044e7e4279b4"..., "USERNAME=enderice2", "TERM_PROGRAM=vscode", "LESSCLOSE=/usr/bin/lesspipe %s %"..., "XDG_CURRENT_DESKTOP=Unity", "LS_COLORS=rs=0:di=01;34:ln=01;36"..., "DESKTOP_SESSION=ubuntu-xorg", "ORIGINAL_XDG_CURRENT_DESKTOP=ubu"..., "LOGNAME=enderice2", "GIO_LAUNCHED_DESKTOP_FILE=/usr/s"..., "SYSTEMD_EXEC_PID=3170", "DISPLAY=:0", "GTK_MODULES=gail:atk-bridge:appm"..., "USER=enderice2", "DEFAULTS_PATH=/usr/share/gconf/u"..., "QT_FONT_DPI=96", "MANAGERPID=2831", "GIO_LAUNCHED_DESKTOP_FILE_PID=10"..., "QT_STYLE_OVERRIDE=kvantum", "_=/usr/bin/make", "MAKE_TERMOUT=/dev/pts/1", "XDG_RUNTIME_DIR=/run/user/1000", "GPG_AGENT_INFO=/run/user/1000/gn"..., "COLORTERM=truecolor", "JOURNAL_STREAM=8:44860", "MAKE_TERMERR=/dev/pts/1", "XDG_SESSION_CLASS=user", "HOME=/home/enderice2", "QT_IM_MODULE=ibus", "TERM=xterm-256color", "IM_CONFIG_PHASE=1", "XDG_MENU_PREFIX=gnome-", "TERM_PROGRAM_VERSION=1.73.1", "DOTNET_ROOT=/usr/lib/dotnet/dotn"..., "GDMSESSION=ubuntu-xorg", "MAKELEVEL=5", "COLLECT_GCC=../../../../tools/cr"..., "COLLECT_LTO_WRAPPER=/media/ender"..., "COMPILER_PATH=/media/enderice2/S"..., "LIBRARY_PATH=/media/enderice2/SS"..., "COLLECT_GCC_OPTIONS='-shared' '-"...]) = 0
919709 execve("/media/enderice2/SSD250/Fennix/tools/cross/lib/gcc/amd64-elf/13.0.0/../../../../amd64-elf/bin/ld", ["/media/enderice2/SSD250/Fennix/t"..., "-plugin", "/media/enderice2/SSD250/Fennix/t"..., "-plugin-opt=/media/enderice2/SSD"..., "-plugin-opt=-fresolution=/tmp/cc"..., "-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc", "--sysroot=../../../out/system/", "-o", "init.elf", "../../../out/system/lib/crtbegin"..., "-L/media/enderice2/SSD250/Fennix"..., "-L/media/enderice2/SSD250/Fennix"..., "-L../../../out/system/lib", "-Map", "file.map", "./printf.o", "./ssp.o", "./init.o", "-lgcc", "-lgcc", "../../../out/system/lib/crtend.o"], ["GDK_BACKEND=x11", "GNOME_SHELL_SESSION_MODE=ubuntu", "SSH_AGENT_LAUNCHER=gnome-keyring", "GJS_DEBUG_OUTPUT=stderr", "MANDATORY_PATH=/usr/share/gconf/"..., "WINDOWPATH=2", "LIBVIRT_DEFAULT_URI=qemu:///syst"..., "GTK3_MODULES=xapp-gtk3-module", "QT_ACCESSIBILITY=1", "VSCODE_GIT_ASKPASS_EXTRA_ARGS=--"..., "PWD=/media/enderice2/SSD250/Fenn"..., "XDG_DATA_DIRS=/usr/share/ubuntu-"..., "LANG=ro_RO.UTF-8", "XAUTHORITY=/run/user/1000/gdm/Xa"..., "MAKEFLAGS=s", "LESSOPEN=| /usr/bin/lesspipe %s", "MFLAGS=-s", "SSH_AUTH_SOCK=/run/user/1000/key"..., "XDG_CONFIG_DIRS=/etc/xdg/xdg-ubu"..., "GIT_ASKPASS=/usr/share/code/reso"..., "XDG_SESSION_DESKTOP=ubuntu-xorg", "ENABLE_VKBASALT=1", "XDG_SESSION_TYPE=x11", "SESSION_MANAGER=local/enderice2-"..., "CHROME_DESKTOP=code-url-handler."..., "DBUS_SESSION_BUS_ADDRESS=unix:pa"..., "GNOME_DESKTOP_SESSION_ID=this-is"..., "SHELL=/bin/bash", "XMODIFIERS=@im=ibus", "DOTNET_BUNDLE_EXTRACT_BASE_DIR=/"..., "GJS_DEBUG_TOPICS=JS ERROR;JS LOG", "SHLVL=1", "PATH=/home/enderice2/.local/bin:"..., "VSCODE_GIT_IPC_HANDLE=/run/user/"..., "VSCODE_GIT_ASKPASS_NODE=/usr/sha"..., "VSCODE_GIT_ASKPASS_MAIN=/usr/sha"..., "INVOCATION_ID=ec0726044e7e4279b4"..., "USERNAME=enderice2", "TERM_PROGRAM=vscode", "LESSCLOSE=/usr/bin/lesspipe %s %"..., "XDG_CURRENT_DESKTOP=Unity", "LS_COLORS=rs=0:di=01;34:ln=01;36"..., "DESKTOP_SESSION=ubuntu-xorg", "ORIGINAL_XDG_CURRENT_DESKTOP=ubu"..., "LOGNAME=enderice2", "GIO_LAUNCHED_DESKTOP_FILE=/usr/s"..., "SYSTEMD_EXEC_PID=3170", "DISPLAY=:0", "GTK_MODULES=gail:atk-bridge:appm"..., "USER=enderice2", "DEFAULTS_PATH=/usr/share/gconf/u"..., "QT_FONT_DPI=96", "MANAGERPID=2831", "GIO_LAUNCHED_DESKTOP_FILE_PID=10"..., "QT_STYLE_OVERRIDE=kvantum", "_=/usr/bin/make", "MAKE_TERMOUT=/dev/pts/1", "XDG_RUNTIME_DIR=/run/user/1000", "GPG_AGENT_INFO=/run/user/1000/gn"..., "COLORTERM=truecolor", "JOURNAL_STREAM=8:44860", "MAKE_TERMERR=/dev/pts/1", "XDG_SESSION_CLASS=user", "HOME=/home/enderice2", "QT_IM_MODULE=ibus", "TERM=xterm-256color", "IM_CONFIG_PHASE=1", "XDG_MENU_PREFIX=gnome-", "TERM_PROGRAM_VERSION=1.73.1", "DOTNET_ROOT=/usr/lib/dotnet/dotn"..., "GDMSESSION=ubuntu-xorg", "MAKELEVEL=5", "COLLECT_GCC=../../../../tools/cr"..., "COLLECT_LTO_WRAPPER=/media/ender"..., "COMPILER_PATH=/media/enderice2/S"..., "LIBRARY_PATH=/media/enderice2/SS"..., "COLLECT_GCC_OPTIONS='-shared' '-"..., "COLLECT_NO_DEMANGLE=1"]) = 0
919709 +++ exited with 0 +++
919708 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=919709, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
919708 +++ exited with 0 +++
919707 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=919708, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
919707 +++ exited with 0 +++

View File

@ -1,12 +1,8 @@
build:
cp include/* ../out/system/include
make --quiet -C runtime build
make --quiet -C libgcc build
make --quiet -C libssp build
make --quiet -C src build
clean:
make --quiet -C runtime clean
make --quiet -C libgcc clean
make --quiet -C libssp clean
make --quiet -C src clean
make -C runtime clean
make -C src clean

View File

@ -2,12 +2,13 @@
include ../../../Makefile.conf
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
AS = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)as
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}
ifeq ($(OSARCH), amd64)
ASM_ARCH := elf64
@ -19,13 +20,13 @@ build: $(OBJ)
mv $^ ../../out/system/lib/
%.o: %.c
$(CC) -nostdlib -std=c17 -c $< -o $@
$(CC) -nostdlib -mno-red-zone -std=c17 -c $< -o $@
%.o: %.asm
$(NASM) $< -f $(ASM_ARCH) -o $@
%.bin: %.s
$(NASM) $< -f $(ASM_ARCH) -o $@
%.o: %.S
$(AS) -c $< -o $@
clean:

23
libc/runtime/crt0.S Normal file
View File

@ -0,0 +1,23 @@
# https://wiki.osdev.org/Creating_a_C_Library
.section .text
.global _start
_start:
movq $0, %rbp
pushq %rbp
pushq %rbp
movq %rsp, %rbp
pushq %rsi
pushq %rdi
call __libc_init
call _init
popq %rdi
popq %rsi
call main
movl %eax, %edi
call _exit
.size _start, . - _start

View File

@ -1,15 +0,0 @@
int main(int argc, char *argv[], char *envp[]);
void _start()
{
register int argc __asm__("rdi");
register char **argv __asm__("rsi");
register char **envp __asm__("rdx");
int mainret = main((int)argc, (char **)argv, (char **)envp);
__asm__ __volatile__("syscall"
:
: "a"(0), "D"(mainret)
: "rcx", "r11", "memory");
return;
}
// C stuff

23
libc/runtime/crt1.S Normal file
View File

@ -0,0 +1,23 @@
# https://wiki.osdev.org/Creating_a_C_Library
.section .text
.global _start
_start:
movq $0, %rbp
pushq %rbp
pushq %rbp
movq %rsp, %rbp
pushq %rsi
pushq %rdi
call __libc_init
call _init
popq %rdi
popq %rsi
call main
movl %eax, %edi
call _exit
.size _start, . - _start

View File

@ -1,15 +0,0 @@
int main(int argc, char *argv[], char *envp[]);
void _start()
{
register int argc __asm__("rdi");
register char **argv __asm__("rsi");
register char **envp __asm__("rdx");
int mainret = main((int)argc, (char **)argv, (char **)envp);
__asm__ __volatile__("syscall"
:
: "a"(0), "D"(mainret)
: "rcx", "r11", "memory");
return;
}
// C++ stuff

14
libc/runtime/crtbegin.S Normal file
View File

@ -0,0 +1,14 @@
# I WILL PLACE HERE THE crti.o BECAUSE GCC REFUSE TO LINK IT AND I DON'T KNOW WHY
.section .init
.global _init
.type _init, @function
_init:
push %rbp
movq %rsp, %rbp
.section .fini
.global _fini
.type _fini, @function
_fini:
push %rbp
movq %rsp, %rbp

View File

@ -1 +0,0 @@
// C++ constructor/destructor stuff

8
libc/runtime/crtend.S Normal file
View File

@ -0,0 +1,8 @@
# I WILL PLACE HERE THE crtn.o BECAUSE GCC REFUSE TO LINK IT AND I DON'T KNOW WHY
.section .init
popq %rbp
ret
.section .fini
popq %rbp
ret

View File

@ -1 +0,0 @@
// C++ constructor/destructor stuff

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");
}

8
libs/Makefile Normal file
View File

@ -0,0 +1,8 @@
build:
cp include/* ../out/system/include
make --quiet -C libgcc build
make --quiet -C libssp build
clean:
make -C libgcc clean
make -C libssp clean

6
libs/include/ssp.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef __FENNIX_LIBS_SSP_H__
#define __FENNIX_LIBS_SSP_H__
#include <types.h>
#endif // !__FENNIX_LIBS_SSP_H__

44
libs/libgcc/Makefile Normal file
View File

@ -0,0 +1,44 @@
# Config file
include ../../../Makefile.conf
NAME=gcc
OBJECT_NAME=lib$(NAME).a
OUTPUT_DIR=../../out/system/lib/
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
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')
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
OBJ = ${C_SOURCES:.c=.o} ${ASM_SOURCES:.asm=.o} ${S_SOURCES:.s=.o}
INCLUDE_DIR = ../include
ifeq ($(OSARCH), amd64)
ASM_ARCH := elf64
else ifeq ($(OSARCH), i686)
ASM_ARCH := elf32
endif
CFLAGS := -fPIC -I$(INCLUDE_DIR)
build: $(OBJECT_NAME)
$(OBJECT_NAME): $(OBJ)
$(AR) rcs $(OUTPUT_DIR)$@ $(OBJ)
%.o: %.c $(HEADERS) $(HEADERS2)
$(CC) $(CFLAGS) -std=c17 -c $< -o $@
%.o: %.cpp $(HEADERS) $(HEADERS2)
$(CC) $(CFLAGS) -std=c++20 -c $< -o $@
%.o: %.asm
$(NASM) $< -f $(ASM_ARCH) -o $@
clean:

44
libs/libssp/Makefile Normal file
View File

@ -0,0 +1,44 @@
# Config file
include ../../../Makefile.conf
NAME=ssp
OBJECT_NAME=lib$(NAME).a
OUTPUT_DIR=../../out/system/lib/
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
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')
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
OBJ = ${C_SOURCES:.c=.o} ${ASM_SOURCES:.asm=.o} ${S_SOURCES:.s=.o}
INCLUDE_DIR = ../include
ifeq ($(OSARCH), amd64)
ASM_ARCH := elf64
else ifeq ($(OSARCH), i686)
ASM_ARCH := elf32
endif
CFLAGS := -fPIC -I$(INCLUDE_DIR)
build: $(OBJECT_NAME)
$(OBJECT_NAME): $(OBJ)
$(AR) rcs $(OUTPUT_DIR)$@ $(OBJ)
%.o: %.c $(HEADERS) $(HEADERS2)
$(CC) $(CFLAGS) -std=c17 -c $< -o $@
%.o: %.cpp $(HEADERS) $(HEADERS2)
$(CC) $(CFLAGS) -std=c++20 -c $< -o $@
%.o: %.asm
$(NASM) $< -f $(ASM_ARCH) -o $@
clean:

View File

@ -16,22 +16,18 @@ static void __attribute__((constructor, no_stack_protector)) __guard_setup(void)
__attribute__((weak, noreturn, no_stack_protector)) void __stack_chk_fail(void)
{
// const char *msg = "Stack smashing detected";
const char *msg = "Stack smashing detected";
__asm__ __volatile__("syscall"
:
: "a"(0), "D"(0x57AC)
: "rcx", "r11", "memory");
while (1)
;
}
__attribute__((weak, noreturn, no_stack_protector)) void __chk_fail(void)
{
// const char *msg = "Buffer overflow detected";
const char *msg = "Buffer overflow detected";
__asm__ __volatile__("syscall"
:
: "a"(0), "D"(0xF700)
: "rcx", "r11", "memory");
while (1)
;
}