diff options
| author | Kacper <kacper@mail.openlinux.dev> | 2025-12-16 12:55:34 +0100 |
|---|---|---|
| committer | Kacper <kacper@mail.openlinux.dev> | 2025-12-16 12:55:34 +0100 |
| commit | 0e832a9329cc4d4647e1ce529846073f21e66991 (patch) | |
| tree | 8e73a766ab5f8d8c7d6c35227756f50bc61156d9 /lib/libc/internal | |
| parent | 383b4ca16cfd6d99de7335facad9a9f8eaf43341 (diff) | |
Fix several segv issues and improve x86_64 startup code
Diffstat (limited to 'lib/libc/internal')
| -rw-r--r-- | lib/libc/internal/Kbuild | 1 | ||||
| -rw-r--r-- | lib/libc/internal/init/Kbuild | 1 | ||||
| -rw-r--r-- | lib/libc/internal/init/init.c (renamed from lib/libc/internal/libc_main.c) | 4 | ||||
| -rw-r--r-- | lib/libc/internal/init/vdso.c | 5 |
4 files changed, 8 insertions, 3 deletions
diff --git a/lib/libc/internal/Kbuild b/lib/libc/internal/Kbuild index 5015f987..01daa04b 100644 --- a/lib/libc/internal/Kbuild +++ b/lib/libc/internal/Kbuild @@ -1,2 +1 @@ obj-y += init/ -obj-y += libc_main.o diff --git a/lib/libc/internal/init/Kbuild b/lib/libc/internal/init/Kbuild index dd27261a..7941a53c 100644 --- a/lib/libc/internal/init/Kbuild +++ b/lib/libc/internal/init/Kbuild @@ -1 +1,2 @@ +obj-y += init.o obj-y += vdso.o diff --git a/lib/libc/internal/libc_main.c b/lib/libc/internal/init/init.c index 7ac15ab4..36e66ee4 100644 --- a/lib/libc/internal/libc_main.c +++ b/lib/libc/internal/init/init.c @@ -6,13 +6,13 @@ extern void __init_vdso(void); -struct libc __libc; +struct libc __libc = { 0 }; char **environ; char *__progname; extern int main(int, char **, char **); -__used void __libc_main(uintptr_t *rsp) +__used void __init(uintptr_t *rsp) { char **argv; size_t *auxv; diff --git a/lib/libc/internal/init/vdso.c b/lib/libc/internal/init/vdso.c index f94401f6..de8d0e2f 100644 --- a/lib/libc/internal/init/vdso.c +++ b/lib/libc/internal/init/vdso.c @@ -6,6 +6,11 @@ void __init_vdso(void) { Elf64_Ehdr *ehdr = (Elf64_Ehdr *)getauxval(AT_SYSINFO_EHDR); + + if (ehdr == NULL) { + return; + } + Elf64_Phdr *phdr = (Elf64_Phdr *)(ehdr + ehdr->e_phoff); for (int i = 0; i < ehdr->e_phnum; i++) { |
