summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/sync/arch/x86_64/sync.s6
-rw-r--r--bin/true/arch/x86_64/true.s2
-rw-r--r--lib/libc/arch/x86_64/_start.c2
-rw-r--r--lib/libc/internal/Kbuild1
-rw-r--r--lib/libc/internal/init/Kbuild1
-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.c5
-rw-r--r--lib/libc/thread/thrd_current.c2
-rw-r--r--makefile2
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;
}
diff --git a/makefile b/makefile
index 07f101f1..fc9e72f1 100644
--- a/makefile
+++ b/makefile
@@ -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