summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Gavrilov <alexey.gavrilov@mail.com>2025-12-20 19:39:05 +0700
committerAlexey Gavrilov <alexey.gavrilov@mail.com>2025-12-20 19:39:05 +0700
commita4dea4148157a94a9143dbbd92fdd88b4358676c (patch)
tree5d36a0adf4e9f38cee297da6f10e84944d226014
parenta72c27d948ee8cf542f8d38c7026876af4875e6b (diff)
Global variables initialization implementationlinker_script
User implementation of C runtime library objects (`crti.s` and `crtn.s`) for initialization (termination functionality are ignored). Changing files order passed to the linker. Rough order is: boot.s crti.o crtbegin.o other-link-objects.o crtend.o crtn.o Signed-off-by: Alexey Gavrilov <alexey.gavrilov@mail.com>
-rw-r--r--kernel/boot.s15
-rw-r--r--libgcc/x86/crti.s5
-rw-r--r--libgcc/x86/crtn.s3
-rw-r--r--makefile10
4 files changed, 27 insertions, 6 deletions
diff --git a/kernel/boot.s b/kernel/boot.s
index 281e1ca..11175af 100644
--- a/kernel/boot.s
+++ b/kernel/boot.s
@@ -1,11 +1,16 @@
section .text
-extern main
-extern _estack
-global _start:function (_start.end - _start)
+extern main, _estack, _init
+global _start:function
_start:
- mov esp, _estack
+ ; Stack setup
+ mov eax, _estack
+ ; Align stack to odd address
+ and eax, 0xFFFFFFFE
+ mov esp, eax
+
+ call _init
call main
cli
.hang: hlt
jmp .hang
-.end:
+; .end:
diff --git a/libgcc/x86/crti.s b/libgcc/x86/crti.s
new file mode 100644
index 0000000..57cb8c1
--- /dev/null
+++ b/libgcc/x86/crti.s
@@ -0,0 +1,5 @@
+section .init
+global _init:function
+_init:
+ push ebp
+ mov ebp, esp
diff --git a/libgcc/x86/crtn.s b/libgcc/x86/crtn.s
new file mode 100644
index 0000000..537fa65
--- /dev/null
+++ b/libgcc/x86/crtn.s
@@ -0,0 +1,3 @@
+section .init
+ pop ebp
+ ret
diff --git a/makefile b/makefile
index 051eb0e..79152f8 100644
--- a/makefile
+++ b/makefile
@@ -25,13 +25,21 @@ endif
OS_BINARY = $(BDIR)/kernel.bin
BDIR = ./build
+BOOTOBJ = $(filter %boot.o, $(OBJ_FILES))
+CRTIOBJ = $(filter %crti.o, $(OBJ_FILES))
+CRTNOBJ = $(filter %crtn.o, $(OBJ_FILES))
+OBJ_REORDERING = $(filter-out $(BOOTOBJ), $(filter-out $(CRTIOBJ), $(filter-out $(CRTNOBJ), $(OBJ_FILES))))
+
+
.PHONY: install $(SOURCE_FILES)
build: startbuild $(SOURCE_FILES)
+ @echo "Bootfile: " $(BOOTOBJ) $(CRTIOBJ) $(CRTNOBJ)
+ @echo $(OBJ_FILES)
echo $(AFLAGS)
echo $(CFLAGS)
@echo "Link object files..."
- $(LD) -o $(OS_BINARY) -L$(ARCHDIR) -T$(LDFILE) $(OBJ_FILES) $(LDFLAGS)
+ $(LD) -o $(OS_BINARY) -L$(ARCHDIR) -T$(LDFILE) $(BOOTOBJ) $(CRTIOBJ) $(LIBS_PATH)crtbegin.o $(OBJ_REORDERING) $(LIBS_PATH)crtend.o $(CRTNOBJ) $(LDFLAGS)
@echo "Project was built"
$(CFILES):