diff --git a/libc/startup/linux/riscv64/start.cpp b/libc/startup/linux/riscv64/start.cpp --- a/libc/startup/linux/riscv64/start.cpp +++ b/libc/startup/linux/riscv64/start.cpp @@ -122,7 +122,13 @@ uint64_t value; }; +extern "C" { +extern intptr_t __global_pointer$; +} + __attribute__((noinline)) static void do_start() { + void *ptr = &__global_pointer$; + LIBC_INLINE_ASM("ld gp, %0\n\t" : : "m"(ptr)); auto tid = __llvm_libc::syscall_impl(SYS_gettid); if (tid <= 0) __llvm_libc::syscall_impl(SYS_exit, 1);