[libc] Pull crt0 out into its own module

Sorta. crt0 is a separate module as far as bonnibel is concerned, but it's
still part of the libc module file.
This commit is contained in:
Justin C. Miller
2024-02-13 22:41:40 -08:00
parent 75d30fb56d
commit ba6e8e1349
7 changed files with 28 additions and 4 deletions

View File

@@ -12,6 +12,8 @@ ccflags: [
"-U__linux", "-U__linux",
"-U__linux__", "-U__linux__",
"-DMSPACES",
"--sysroot='${source_root}/sysroot'" "--sysroot='${source_root}/sysroot'"
] ]
@@ -32,3 +34,6 @@ ldflags: [
"--no-dependent-libraries", "--no-dependent-libraries",
] ]
libs: [
"${target_dir}/crt0.o",
]

View File

@@ -1,4 +1,5 @@
--- ---
ccflags: [ ccflags: [
"-fpie" "-fpie"
] ]
@@ -8,3 +9,7 @@ ldflags: [
"--dynamic-linker", "/jsix/lib/ld.so", "--dynamic-linker", "/jsix/lib/ld.so",
"--push-state", "--as-needed", "-Bstatic", "-lc++", "-lc++abi", "-lunwind", "--pop-state", "--push-state", "--as-needed", "-Bstatic", "-lc++", "-lc++abi", "-lunwind", "--pop-state",
] ]
libs: [
"${target_dir}/crt0.o",
]

View File

@@ -1,5 +1,5 @@
--- ---
asflags: [ "-I${source_root}/src/kernel/" ] asflags: []
ccflags: [ ccflags: [
"--target=x86_64-jsix-elf", "--target=x86_64-jsix-elf",

View File

@@ -1,10 +1,18 @@
%include "util/got.inc" extern _GLOBAL_OFFSET_TABLE_
extern main extern main
extern exit extern exit
extern __init_libj6 extern __init_libj6
extern __init_libc extern __init_libc
; Put the address of the given symbol in rax
; This macro is the same as in util/got.inc,
; but crt0 can't have a dep on libutil
%macro lookup_GOT 1
lea rax, [rel _GLOBAL_OFFSET_TABLE_]
mov rax, [rax + %1 wrt ..got]
%endmacro
global _start:function weak (_libc_crt0_start.end - _libc_crt0_start) global _start:function weak (_libc_crt0_start.end - _libc_crt0_start)
global _libc_crt0_start:function (_libc_crt0_start.end - _libc_crt0_start) global _libc_crt0_start:function (_libc_crt0_start.end - _libc_crt0_start)

View File

@@ -18,7 +18,7 @@ def glob(ext, root=''):
sources = [] sources = []
for ext in ("c", "cpp", "s", "inc"): for ext in ("c", "cpp", "s", "inc"):
sources += glob(ext) + glob(ext + ".cog") sources += [f for f in glob(ext) + glob(ext + ".cog") if not "crt" in f]
headers = [] headers = []
for ext in ("h",): for ext in ("h",):
@@ -26,7 +26,7 @@ for ext in ("h",):
libc = module("libc", libc = module("libc",
kind = "lib", kind = "lib",
deps = [ "j6" ], deps = [ "j6", "crt0.o" ],
basename = "libc", basename = "libc",
include_phase = "late", include_phase = "late",
sources = sources, sources = sources,
@@ -39,3 +39,9 @@ libc.variables["ccflags"] = [
"-DPRINTF_SUPPORT_DECIMAL_SPECIFIERS=0", "-DPRINTF_SUPPORT_DECIMAL_SPECIFIERS=0",
"-DPRINTF_SUPPORT_EXPONENTIAL_SPECIFIERS=0", "-DPRINTF_SUPPORT_EXPONENTIAL_SPECIFIERS=0",
] ]
crt = module("crt0.o",
kind = "cp",
sources = [
"arch/amd64/crt/crt0.s",
])