diff options
| -rw-r--r-- | bin/sync/arch/x86_64/sync.s | 6 | ||||
| -rw-r--r-- | bin/true/arch/x86_64/true.s | 2 | ||||
| -rw-r--r-- | lib/libc/arch/x86_64/_start.c | 2 | ||||
| -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 | ||||
| -rw-r--r-- | lib/libc/thread/thrd_current.c | 2 | ||||
| -rw-r--r-- | makefile | 2 |
9 files changed, 17 insertions, 8 deletions
diff --git a/bin/sync/arch/x86_64/sync.s b/bin/sync/arch/x86_64/sync.s index f1fc7ffc..6b099d27 100644 --- a/bin/sync/arch/x86_64/sync.s +++ b/bin/sync/arch/x86_64/sync.s @@ -1,5 +1,9 @@ .globl _start _start: - mov 162, %rax + mov $162, %rax + syscall + + mov $60, %rax + xor %rdi, %rdi syscall diff --git a/bin/true/arch/x86_64/true.s b/bin/true/arch/x86_64/true.s index 9e5ab682..6eabd296 100644 --- a/bin/true/arch/x86_64/true.s +++ b/bin/true/arch/x86_64/true.s @@ -1,6 +1,6 @@ .globl _start _start: - mov 60, %rax + mov $60, %rax xor %rdi, %rdi syscall diff --git a/lib/libc/arch/x86_64/_start.c b/lib/libc/arch/x86_64/_start.c index 52b5c774..f3f4fef2 100644 --- a/lib/libc/arch/x86_64/_start.c +++ b/lib/libc/arch/x86_64/_start.c @@ -4,5 +4,5 @@ __dead __naked void _start(void) { __asm__ __volatile__("mov %rsp, %rdi\n" - "call __libc_main\n"); + "call __init\n"); } 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++) { diff --git a/lib/libc/thread/thrd_current.c b/lib/libc/thread/thrd_current.c index 86a814da..69a99723 100644 --- a/lib/libc/thread/thrd_current.c +++ b/lib/libc/thread/thrd_current.c @@ -3,6 +3,6 @@ thrd_t thrd_current(void) { - static _Thread_local struct __thread_self self = { 0 }; + static struct __thread_self self = { 0 }; return &self; } @@ -82,7 +82,6 @@ KBUILD_CFLAGS += -fno-PIE KBUILD_CFLAGS += -fstrict-aliasing KBUILD_CFLAGS += -fno-delete-null-pointer-checks -KBUILD_CFLAGS += -flto # Disable overflow optimizations KBUILD_CFLAGS += -fno-strict-overflow @@ -104,6 +103,7 @@ KBUILD_CFLAGS += -g -Og -fno-omit-frame-pointer else KBUILD_CFLAGS += -O2 -fdata-sections -ffunction-sections KBUILD_CFLAGS += -fno-unwind-tables -fomit-frame-pointer +KBUILD_CFLAGS += -flto KBUILD_LDFLAGS += --gc-sections KBUILD_LDFLAGS += --build-id=none |
