From 4c386436ea5c5b3c98d91cb9b007e373faa8a257 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 5 Mar 2019 18:17:22 -0500 Subject: [PATCH] support glibc dl, m, pthread, rt --- CMakeLists.txt | 158 ++--- libc/{symbols.zig => dummy/c.zig} | 423 ++++++++++-- libc/dummy/dl.zig | 19 + libc/dummy/m.zig | 1068 +++++++++++++++++++++++++++++ libc/dummy/pthread.zig | 263 +++++++ libc/dummy/rt.zig | 48 ++ src/codegen.cpp | 5 +- src/link.cpp | 43 +- src/target.cpp | 8 + src/target.hpp | 1 + 10 files changed, 1899 insertions(+), 137 deletions(-) rename libc/{symbols.zig => dummy/c.zig} (82%) create mode 100644 libc/dummy/dl.zig create mode 100644 libc/dummy/m.zig create mode 100644 libc/dummy/pthread.zig create mode 100644 libc/dummy/rt.zig diff --git a/CMakeLists.txt b/CMakeLists.txt index 4edf7276b4..acad74ce9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -805,6 +805,11 @@ set(ZIG_C_HEADER_FILES ) set(ZIG_LIBC_FILES + "dummy/c.zig" + "dummy/dl.zig" + "dummy/m.zig" + "dummy/pthread.zig" + "dummy/rt.zig" "glibc-include/a.out.h" "glibc-include/aio.h" "glibc-include/aliases.h" @@ -1250,60 +1255,74 @@ set(ZIG_LIBC_FILES "glibc/bits/floatn-common.h" "glibc/bits/libc-header-start.h" "glibc/bits/long-double.h" + "glibc/bits/param.h" + "glibc/bits/pthreadtypes.h" + "glibc/bits/sched.h" + "glibc/bits/select.h" + "glibc/bits/setjmp.h" + "glibc/bits/signum-generic.h" + "glibc/bits/signum.h" + "glibc/bits/stat.h" "glibc/bits/stdint-intn.h" - "glibc/bits/timesize.h" - "glibc/bits/typesizes.h" + "glibc/bits/stdlib-bsearch.h" + "glibc/bits/time.h" "glibc/bits/time64.h" + "glibc/bits/timesize.h" + "glibc/bits/types/__sigset_t.h" + "glibc/bits/types/struct_sched_param.h" + "glibc/bits/typesizes.h" "glibc/bits/uintn-identity.h" "glibc/bits/waitflags.h" "glibc/bits/waitstatus.h" - "glibc/bits/select.h" - "glibc/bits/pthreadtypes.h" - "glibc/bits/types/__sigset_t.h" - "glibc/bits/types/struct_sched_param.h" - "glibc/bits/stdlib-bsearch.h" - "glibc/bits/stat.h" - "glibc/bits/sched.h" - "glibc/bits/time.h" "glibc/csu/abi-note.S" "glibc/csu/abi-tag.h" "glibc/csu/elf-init.c" "glibc/csu/init.c" "glibc/debug/stack_chk_fail_local.c" + "glibc/elf/elf.h" "glibc/include/alloca.h" + "glibc/include/bits/cpu-set.h" + "glibc/include/bits/statx.h" + "glibc/include/bits/stdlib-float.h" "glibc/include/bits/types.h" "glibc/include/bits/types/__locale_t.h" "glibc/include/bits/types/clock_t.h" - "glibc/include/bits/types/time_t.h" - "glibc/include/bits/types/timer_t.h" "glibc/include/bits/types/clockid_t.h" "glibc/include/bits/types/locale_t.h" + "glibc/include/bits/types/sig_atomic_t.h" "glibc/include/bits/types/sigset_t.h" - "glibc/include/bits/types/struct_timeval.h" + "glibc/include/bits/types/struct_itimerspec.h" "glibc/include/bits/types/struct_timespec.h" - "glibc/include/bits/stdlib-float.h" - "glibc/include/bits/statx.h" - "glibc/include/bits/cpu-set.h" + "glibc/include/bits/types/struct_timeval.h" + "glibc/include/bits/types/struct_tm.h" + "glibc/include/bits/types/time_t.h" + "glibc/include/bits/types/timer_t.h" "glibc/include/config.h" + "glibc/include/dso_handle.h" "glibc/include/elf.h" "glibc/include/endian.h" "glibc/include/features.h" "glibc/include/gnu/stubs.h" "glibc/include/libc-modules.h" + "glibc/include/libc-pointer-arith.h" "glibc/include/libc-symbols.h" + "glibc/include/pthread.h" + "glibc/include/sched.h" + "glibc/include/setjmp.h" + "glibc/include/signal.h" + "glibc/include/stackinfo.h" + "glibc/include/stap-probe.h" "glibc/include/stdc-predef.h" "glibc/include/stdlib.h" "glibc/include/sys/cdefs.h" - "glibc/include/sys/types.h" + "glibc/include/sys/param.h" "glibc/include/sys/select.h" + "glibc/include/sys/signal.h" "glibc/include/sys/stat.h" - "glibc/include/stackinfo.h" - "glibc/include/libc-pointer-arith.h" - "glibc/include/dso_handle.h" - "glibc/include/pthread.h" - "glibc/include/sched.h" - "glibc/include/time.h" "glibc/include/sys/time.h" + "glibc/include/sys/types.h" + "glibc/include/time.h" + "glibc/io/bits/statx.h" "glibc/io/fstat.c" "glibc/io/fstat64.c" "glibc/io/fstatat.c" @@ -1315,93 +1334,78 @@ set(ZIG_LIBC_FILES "glibc/io/stat.c" "glibc/io/stat64.c" "glibc/io/sys/stat.h" - "glibc/io/bits/statx.h" "glibc/locale/bits/types/__locale_t.h" "glibc/locale/bits/types/locale_t.h" "glibc/misc/sys/cdefs.h" + "glibc/misc/sys/param.h" "glibc/misc/sys/select.h" "glibc/nptl/pthread_atfork.c" - "glibc/posix/bits/types.h" - "glibc/posix/sys/types.h" - "glibc/posix/sched.h" "glibc/posix/bits/cpu-set.h" + "glibc/posix/bits/types.h" + "glibc/posix/sched.h" + "glibc/posix/sys/types.h" + "glibc/setjmp/setjmp.h" + "glibc/setjmp/setjmp.h" + "glibc/signal/bits/types/sig_atomic_t.h" + "glibc/signal/bits/types/sigset_t.h" + "glibc/signal/signal.h" + "glibc/signal/sys/signal.h" + "glibc/stdlib/alloca.h" "glibc/stdlib/at_quick_exit.c" "glibc/stdlib/atexit.c" + "glibc/stdlib/bits/stdlib-float.h" "glibc/stdlib/exit.h" "glibc/stdlib/stdlib.h" - "glibc/stdlib/bits/stdlib-float.h" + "glibc/string/endian.h" + "glibc/sysdeps/generic/allocalim.h" + "glibc/sysdeps/generic/dl-dtprocnum.h" "glibc/sysdeps/generic/dwarf2.h" + "glibc/sysdeps/generic/libc-lock.h" + "glibc/sysdeps/generic/stackinfo.h" "glibc/sysdeps/generic/symbol-hacks.h" "glibc/sysdeps/generic/sysdep.h" - "glibc/sysdeps/generic/stackinfo.h" - "glibc/sysdeps/generic/dl-dtprocnum.h" - "glibc/sysdeps/generic/allocalim.h" - "glibc/sysdeps/generic/libc-lock.h" - "glibc/sysdeps/pthread/allocalim.h" "glibc/sysdeps/nptl/bits/pthreadtypes.h" "glibc/sysdeps/nptl/bits/thread-shared-types.h" "glibc/sysdeps/nptl/libc-lock.h" + "glibc/sysdeps/nptl/libc-lockP.h" + "glibc/sysdeps/nptl/lowlevellock.h" "glibc/sysdeps/nptl/pthread.h" - "glibc/sysdeps/unix/sysv/linux/x86/bits/typesizes.h" - "glibc/sysdeps/unix/sysv/linux/x86/sys/elf.h" + "glibc/sysdeps/pthread/allocalim.h" + "glibc/sysdeps/unix/sysv/linux/bits/param.h" "glibc/sysdeps/unix/sysv/linux/bits/sched.h" + "glibc/sysdeps/unix/sysv/linux/bits/signum.h" + "glibc/sysdeps/unix/sysv/linux/bits/stat.h" "glibc/sysdeps/unix/sysv/linux/bits/time.h" + "glibc/sysdeps/unix/sysv/linux/bits/timex.h" + "glibc/sysdeps/unix/sysv/linux/generic/bits/stat.h" "glibc/sysdeps/unix/sysv/linux/include/sys/timex.h" "glibc/sysdeps/unix/sysv/linux/sys/timex.h" - "glibc/sysdeps/unix/sysv/linux/bits/timex.h" - "glibc/sysdeps/x86/bits/floatn.h" - "glibc/sysdeps/x86/bits/wordsize.h" + "glibc/sysdeps/unix/sysv/linux/x86/bits/stat.h" + "glibc/sysdeps/unix/sysv/linux/x86/bits/typesizes.h" + "glibc/sysdeps/unix/sysv/linux/x86/sys/elf.h" + "glibc/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h" "glibc/sysdeps/x86/bits/endian.h" + "glibc/sysdeps/x86/bits/floatn.h" "glibc/sysdeps/x86/bits/select.h" - "glibc/sysdeps/x86/sysdep.h" + "glibc/sysdeps/x86/bits/setjmp.h" + "glibc/sysdeps/x86/bits/wordsize.h" "glibc/sysdeps/x86/nptl/bits/pthreadtypes-arch.h" + "glibc/sysdeps/x86/sysdep.h" "glibc/sysdeps/x86_64/crti.S" "glibc/sysdeps/x86_64/crtn.S" + "glibc/sysdeps/x86_64/stackinfo.h" "glibc/sysdeps/x86_64/start.S" "glibc/sysdeps/x86_64/sysdep.h" - "glibc/sysdeps/x86_64/stackinfo.h" "glibc/time/bits/types/clock_t.h" "glibc/time/bits/types/clockid_t.h" + "glibc/time/bits/types/struct_itimerspec.h" + "glibc/time/bits/types/struct_timespec.h" + "glibc/time/bits/types/struct_timeval.h" + "glibc/time/bits/types/struct_tm.h" "glibc/time/bits/types/time_t.h" "glibc/time/bits/types/timer_t.h" - "glibc/time/bits/types/struct_timeval.h" - "glibc/time/bits/types/struct_timespec.h" - "glibc/time/time.h" "glibc/time/sys/time.h" - "glibc/string/endian.h" - "glibc/signal/bits/types/sigset_t.h" - "glibc/stdlib/alloca.h" - "glibc/elf/elf.h" - "glibc/include/bits/types/struct_tm.h" - "glibc/time/bits/types/struct_tm.h" - "glibc/include/bits/types/struct_itimerspec.h" - "glibc/time/bits/types/struct_itimerspec.h" - "glibc/sysdeps/x86/bits/setjmp.h" - "glibc/include/setjmp.h" - "glibc/setjmp/setjmp.h" - "glibc/setjmp/setjmp.h" - "glibc/bits/setjmp.h" - "glibc/sysdeps/nptl/libc-lockP.h" - "glibc/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h" - "glibc/sysdeps/nptl/lowlevellock.h" - "glibc/include/stap-probe.h" - "glibc/sysdeps/unix/sysv/linux/bits/param.h" - "glibc/include/sys/param.h" - "glibc/misc/sys/param.h" - "glibc/bits/param.h" - "glibc/include/signal.h" - "glibc/include/sys/signal.h" - "glibc/signal/signal.h" - "glibc/signal/sys/signal.h" - "glibc/sysdeps/unix/sysv/linux/bits/signum.h" - "glibc/bits/signum.h" - "glibc/bits/signum-generic.h" - "glibc/include/bits/types/sig_atomic_t.h" - "glibc/signal/bits/types/sig_atomic_t.h" - "glibc/sysdeps/unix/sysv/linux/x86/bits/stat.h" - "glibc/sysdeps/unix/sysv/linux/generic/bits/stat.h" - "glibc/sysdeps/unix/sysv/linux/bits/stat.h" - "symbols.zig" + "glibc/time/time.h" ) if(MSVC) diff --git a/libc/symbols.zig b/libc/dummy/c.zig similarity index 82% rename from libc/symbols.zig rename to libc/dummy/c.zig index 83393e7664..21685dfac2 100644 --- a/libc/symbols.zig +++ b/libc/dummy/c.zig @@ -3,7 +3,13 @@ pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn unreachable; } +// This file exists to create a libc.so file so that LLD has something to look at +// and emit linker errors if an attempt to link against a non-existent C symbol happens. + export fn _Exit() void {} +export fn _IO_2_1_stderr_() void {} +export fn _IO_2_1_stdin_() void {} +export fn _IO_2_1_stdout_() void {} export fn _IO_adjust_column() void {} export fn _IO_adjust_wcolumn() void {} export fn _IO_default_doallocate() void {} @@ -12,26 +18,47 @@ export fn _IO_default_pbackfail() void {} export fn _IO_default_uflow() void {} export fn _IO_default_xsgetn() void {} export fn _IO_default_xsputn() void {} +export fn _IO_do_write() void {} export fn _IO_doallocbuf() void {} export fn _IO_enable_locks() void {} +export fn _IO_fclose() void {} +export fn _IO_fdopen() void {} export fn _IO_feof() void {} export fn _IO_ferror() void {} export fn _IO_fflush() void {} +export fn _IO_fgetpos() void {} +export fn _IO_fgetpos64() void {} export fn _IO_fgets() void {} +export fn _IO_file_attach() void {} export fn _IO_file_close() void {} +export fn _IO_file_close_it() void {} export fn _IO_file_doallocate() void {} +export fn _IO_file_finish() void {} +export fn _IO_file_fopen() void {} +export fn _IO_file_init() void {} +export fn _IO_file_jumps() void {} export fn _IO_file_open() void {} +export fn _IO_file_overflow() void {} export fn _IO_file_read() void {} export fn _IO_file_seek() void {} +export fn _IO_file_seekoff() void {} +export fn _IO_file_setbuf() void {} export fn _IO_file_stat() void {} +export fn _IO_file_sync() void {} +export fn _IO_file_underflow() void {} +export fn _IO_file_write() void {} +export fn _IO_file_xsputn() void {} export fn _IO_flockfile() void {} export fn _IO_flush_all() void {} export fn _IO_flush_all_linebuffered() void {} +export fn _IO_fopen() void {} export fn _IO_fprintf() void {} export fn _IO_fputs() void {} export fn _IO_fread() void {} export fn _IO_free_backup_area() void {} export fn _IO_free_wbackup_area() void {} +export fn _IO_fsetpos() void {} +export fn _IO_fsetpos64() void {} export fn _IO_ftell() void {} export fn _IO_ftrylockfile() void {} export fn _IO_funlockfile() void {} @@ -49,6 +76,7 @@ export fn _IO_iter_file() void {} export fn _IO_iter_next() void {} export fn _IO_least_wmarker() void {} export fn _IO_link_in() void {} +export fn _IO_list_all() void {} export fn _IO_list_lock() void {} export fn _IO_list_resetlock() void {} export fn _IO_list_unlock() void {} @@ -56,7 +84,10 @@ export fn _IO_marker_delta() void {} export fn _IO_marker_difference() void {} export fn _IO_padn() void {} export fn _IO_peekc_locked() void {} +export fn _IO_popen() void {} export fn _IO_printf() void {} +export fn _IO_proc_close() void {} +export fn _IO_proc_open() void {} export fn _IO_putc() void {} export fn _IO_puts() void {} export fn _IO_remove_marker() void {} @@ -89,6 +120,7 @@ export fn _IO_ungetc() void {} export fn _IO_unsave_markers() void {} export fn _IO_unsave_wmarkers() void {} export fn _IO_vfprintf() void {} +export fn _IO_vfscanf() void {} export fn _IO_vsprintf() void {} export fn _IO_wdefault_doallocate() void {} export fn _IO_wdefault_finish() void {} @@ -98,6 +130,7 @@ export fn _IO_wdefault_xsgetn() void {} export fn _IO_wdefault_xsputn() void {} export fn _IO_wdo_write() void {} export fn _IO_wdoallocbuf() void {} +export fn _IO_wfile_jumps() void {} export fn _IO_wfile_overflow() void {} export fn _IO_wfile_seekoff() void {} export fn _IO_wfile_sync() void {} @@ -105,45 +138,9 @@ export fn _IO_wfile_underflow() void {} export fn _IO_wfile_xsputn() void {} export fn _IO_wmarker_delta() void {} export fn _IO_wsetb() void {} -export fn __GI___gettimeofday() void {} -export fn __GI___mempcpy() void {} -export fn __GI___rawmemchr() void {} -export fn __GI___stpcpy() void {} -export fn __GI___stpncpy() void {} -export fn __GI___strcasecmp() void {} -export fn __GI___strcasecmp_l() void {} -export fn __GI___strncasecmp_l() void {} -export fn __GI___strncat() void {} -export fn __GI___strnlen() void {} -export fn __GI___wcschr() void {} -export fn __GI___wcscmp() void {} -export fn __GI___wmemchr() void {} -export fn __GI___wmemset() void {} -export fn __GI_gettimeofday() void {} -export fn __GI_memchr() void {} -export fn __GI_memcmp() void {} -export fn __GI_memcpy() void {} -export fn __GI_memmove() void {} -export fn __GI_mempcpy() void {} -export fn __GI_memset() void {} -export fn __GI_stpcpy() void {} -export fn __GI_strcat() void {} -export fn __GI_strchr() void {} -export fn __GI_strcmp() void {} -export fn __GI_strcpy() void {} -export fn __GI_strcspn() void {} -export fn __GI_strlen() void {} -export fn __GI_strncmp() void {} -export fn __GI_strncpy() void {} -export fn __GI_strnlen() void {} -export fn __GI_strpbrk() void {} -export fn __GI_strrchr() void {} -export fn __GI_strspn() void {} -export fn __GI_time() void {} -export fn __GI_wcschr() void {} -export fn __GI_wmemchr() void {} -export fn __GI_wmemset() void {} +export fn __abort_msg() void {} export fn __adjtimex() void {} +export fn __after_morecore_hook() void {} export fn __arch_prctl() void {} export fn __argz_count() void {} export fn __argz_next() void {} @@ -159,6 +156,7 @@ export fn __backtrace_symbols_fd() void {} export fn __bsd_getpgrp() void {} export fn __bzero() void {} export fn __call_tls_dtors() void {} +export fn __check_rhosts_file() void {} export fn __chk_fail() void {} export fn __clock_getcpuclockid() void {} export fn __clock_getres() void {} @@ -172,17 +170,25 @@ export fn __cmsg_nxthdr() void {} export fn __confstr_chk() void {} export fn __connect() void {} export fn __copy_grp() void {} +export fn __ctype32_b() void {} +export fn __ctype32_tolower() void {} +export fn __ctype32_toupper() void {} +export fn __ctype_b() void {} export fn __ctype_b_loc() void {} export fn __ctype_get_mb_cur_max() void {} export fn __ctype_init() void {} +export fn __ctype_tolower() void {} export fn __ctype_tolower_loc() void {} +export fn __ctype_toupper() void {} export fn __ctype_toupper_loc() void {} +export fn __curbrk() void {} export fn __cxa_at_quick_exit() void {} export fn __cxa_atexit() void {} export fn __cxa_finalize() void {} export fn __cxa_thread_atexit_impl() void {} export fn __cyg_profile_func_enter() void {} export fn __cyg_profile_func_exit() void {} +export fn __daylight() void {} export fn __dcgettext() void {} export fn __default_morecore() void {} export fn __dgettext() void {} @@ -190,6 +196,7 @@ export fn __dprintf_chk() void {} export fn __dup2() void {} export fn __duplocale() void {} export fn __endmntent() void {} +export fn __environ() void {} export fn __errno_location() void {} export fn __explicit_bzero_chk() void {} export fn __fbufsize() void {} @@ -210,11 +217,13 @@ export fn __fork() void {} export fn __fortify_fail() void {} export fn __fpending() void {} export fn __fprintf_chk() void {} +export fn __fpu_control() void {} export fn __fpurge() void {} export fn __fread_chk() void {} export fn __fread_unlocked_chk() void {} export fn __freadable() void {} export fn __freading() void {} +export fn __free_hook() void {} export fn __freelocale() void {} export fn __fseeko64() void {} export fn __fsetlocking() void {} @@ -247,6 +256,7 @@ export fn __gets_chk() void {} export fn __gettimeofday() void {} export fn __getwd_chk() void {} export fn __gmtime_r() void {} +export fn __h_errno() void {} export fn __h_errno_location() void {} export fn __idna_from_dns_encoding() void {} export fn __idna_to_dns_encoding() void {} @@ -303,6 +313,9 @@ export fn __iswupper_l() void {} export fn __iswxdigit_l() void {} export fn __isxdigit_l() void {} export fn __ivaliduser() void {} +export fn __key_decryptsession_pk_LOCAL() void {} +export fn __key_encryptsession_pk_LOCAL() void {} +export fn __key_gendes_LOCAL() void {} export fn __libc_alloc_buffer_alloc_array() void {} export fn __libc_alloc_buffer_allocate() void {} export fn __libc_alloc_buffer_copy_bytes() void {} @@ -313,6 +326,7 @@ export fn __libc_allocate_once_slow() void {} export fn __libc_allocate_rtsig() void {} export fn __libc_allocate_rtsig_private() void {} export fn __libc_calloc() void {} +export fn __libc_clntudp_bufcreate() void {} export fn __libc_current_sigrtmax() void {} export fn __libc_current_sigrtmax_private() void {} export fn __libc_current_sigrtmin() void {} @@ -338,7 +352,6 @@ export fn __libc_mallinfo() void {} export fn __libc_malloc() void {} export fn __libc_mallopt() void {} export fn __libc_memalign() void {} -export fn __libc_memmove() void {} export fn __libc_msgrcv() void {} export fn __libc_msgsnd() void {} export fn __libc_pread() void {} @@ -348,6 +361,7 @@ export fn __libc_pwrite() void {} export fn __libc_readline_unlocked() void {} export fn __libc_realloc() void {} export fn __libc_reallocarray() void {} +export fn __libc_rpc_getport() void {} export fn __libc_sa_len() void {} export fn __libc_scratch_buffer_grow() void {} export fn __libc_scratch_buffer_grow_preserve() void {} @@ -355,7 +369,6 @@ export fn __libc_scratch_buffer_set_array_size() void {} export fn __libc_secure_getenv() void {} export fn __libc_siglongjmp() void {} export fn __libc_start_main() void {} -export fn __libc_strstr() void {} export fn __libc_system() void {} export fn __libc_thread_freeres() void {} export fn __libc_valloc() void {} @@ -365,41 +378,46 @@ export fn __lseek() void {} export fn __lxstat() void {} export fn __lxstat64() void {} export fn __madvise() void {} +export fn __malloc_hook() void {} +export fn __malloc_initialize_hook() void {} export fn __mbrlen() void {} export fn __mbrtowc() void {} export fn __mbsnrtowcs_chk() void {} export fn __mbsrtowcs_chk() void {} export fn __mbstowcs_chk() void {} -export fn __memchr() void {} +export fn __memalign_hook() void {} export fn __memcpy_chk() void {} export fn __memmove_chk() void {} export fn __mempcpy() void {} export fn __mempcpy_chk() void {} -export fn __memrchr() void {} +export fn __mempcpy_small() void {} export fn __memset_chk() void {} export fn __merge_grp() void {} export fn __mktemp() void {} export fn __mmap() void {} export fn __monstartup() void {} +export fn __morecore() void {} export fn __mprotect() void {} export fn __munmap() void {} export fn __nanosleep() void {} export fn __nanosleep_nocancel() void {} export fn __netlink_assert_response() void {} -export fn __new_memcpy() void {} export fn __newlocale() void {} export fn __nl_langinfo_l() void {} export fn __nss_configure_lookup() void {} export fn __nss_database_lookup() void {} export fn __nss_disable_nscd() void {} +export fn __nss_group_lookup() void {} export fn __nss_group_lookup2() void {} export fn __nss_hash() void {} export fn __nss_hostname_digits_dots() void {} +export fn __nss_hosts_lookup() void {} export fn __nss_hosts_lookup2() void {} export fn __nss_lookup() void {} export fn __nss_lookup_function() void {} export fn __nss_next() void {} export fn __nss_next2() void {} +export fn __nss_passwd_lookup() void {} export fn __nss_passwd_lookup2() void {} export fn __nss_services_lookup2() void {} export fn __obstack_printf_chk() void {} @@ -426,14 +444,18 @@ export fn __pread_chk() void {} export fn __printf_chk() void {} export fn __printf_fp() void {} export fn __profile_frequency() void {} +export fn __progname() void {} +export fn __progname_full() void {} export fn __ptsname_r_chk() void {} export fn __pwrite64() void {} export fn __rawmemchr() void {} +export fn __rcmd_errstr() void {} export fn __read() void {} export fn __read_chk() void {} export fn __read_nocancel() void {} export fn __readlink_chk() void {} export fn __readlinkat_chk() void {} +export fn __realloc_hook() void {} export fn __realpath_chk() void {} export fn __recv() void {} export fn __recv_chk() void {} @@ -449,6 +471,11 @@ export fn __resolv_context_get() void {} export fn __resolv_context_get_override() void {} export fn __resolv_context_get_preinit() void {} export fn __resolv_context_put() void {} +export fn __resp() void {} +export fn __rpc_thread_createerr() void {} +export fn __rpc_thread_svc_fdset() void {} +export fn __rpc_thread_svc_max_pollfd() void {} +export fn __rpc_thread_svc_pollfd() void {} export fn __sbrk() void {} export fn __sched_cpualloc() void {} export fn __sched_cpucount() void {} @@ -459,12 +486,16 @@ export fn __sched_getparam() void {} export fn __sched_getscheduler() void {} export fn __sched_setscheduler() void {} export fn __sched_yield() void {} +export fn __secure_getenv() void {} export fn __select() void {} export fn __send() void {} export fn __sendmmsg() void {} export fn __setmntent() void {} export fn __setpgid() void {} export fn __sigaction() void {} +export fn __sigaddset() void {} +export fn __sigdelset() void {} +export fn __sigismember() void {} export fn __signbit() void {} export fn __signbitf() void {} export fn __signbitl() void {} @@ -480,26 +511,36 @@ export fn __stack_chk_fail() void {} export fn __statfs() void {} export fn __stpcpy() void {} export fn __stpcpy_chk() void {} +export fn __stpcpy_small() void {} export fn __stpncpy() void {} export fn __stpncpy_chk() void {} export fn __strcasecmp() void {} export fn __strcasecmp_l() void {} export fn __strcasestr() void {} export fn __strcat_chk() void {} -export fn __strchrnul() void {} export fn __strcoll_l() void {} export fn __strcpy_chk() void {} +export fn __strcpy_small() void {} +export fn __strcspn_c1() void {} +export fn __strcspn_c2() void {} +export fn __strcspn_c3() void {} export fn __strdup() void {} export fn __strerror_r() void {} export fn __strfmon_l() void {} export fn __strftime_l() void {} -export fn __strncasecmp() void {} export fn __strncasecmp_l() void {} export fn __strncat_chk() void {} export fn __strncpy_chk() void {} export fn __strndup() void {} -export fn __strnlen() void {} +export fn __strpbrk_c2() void {} +export fn __strpbrk_c3() void {} +export fn __strsep_1c() void {} +export fn __strsep_2c() void {} +export fn __strsep_3c() void {} export fn __strsep_g() void {} +export fn __strspn_c1() void {} +export fn __strspn_c2() void {} +export fn __strspn_c3() void {} export fn __strtod_internal() void {} export fn __strtod_l() void {} export fn __strtod_nan() void {} @@ -509,6 +550,7 @@ export fn __strtof_internal() void {} export fn __strtof_l() void {} export fn __strtof_nan() void {} export fn __strtok_r() void {} +export fn __strtok_r_1c() void {} export fn __strtol_internal() void {} export fn __strtol_l() void {} export fn __strtold_internal() void {} @@ -529,6 +571,7 @@ export fn __syslog_chk() void {} export fn __sysv_signal() void {} export fn __tdelete() void {} export fn __tfind() void {} +export fn __timezone() void {} export fn __toascii_l() void {} export fn __tolower_l() void {} export fn __toupper_l() void {} @@ -539,6 +582,7 @@ export fn __towupper_l() void {} export fn __tsearch() void {} export fn __ttyname_r_chk() void {} export fn __twalk() void {} +export fn __tzname() void {} export fn __uflow() void {} export fn __underflow() void {} export fn __uselocale() void {} @@ -563,16 +607,12 @@ export fn __wcpncpy_chk() void {} export fn __wcrtomb_chk() void {} export fn __wcscasecmp_l() void {} export fn __wcscat_chk() void {} -export fn __wcschr() void {} -export fn __wcscmp() void {} export fn __wcscoll_l() void {} export fn __wcscpy_chk() void {} export fn __wcsftime_l() void {} -export fn __wcslen() void {} export fn __wcsncasecmp_l() void {} export fn __wcsncat_chk() void {} export fn __wcsncpy_chk() void {} -export fn __wcsnlen() void {} export fn __wcsnrtombs_chk() void {} export fn __wcsrtombs_chk() void {} export fn __wcstod_internal() void {} @@ -595,11 +635,9 @@ export fn __wcsxfrm_l() void {} export fn __wctomb_chk() void {} export fn __wctrans_l() void {} export fn __wctype_l() void {} -export fn __wmemchr() void {} export fn __wmemcpy_chk() void {} export fn __wmemmove_chk() void {} export fn __wmempcpy_chk() void {} -export fn __wmemset() void {} export fn __wmemset_chk() void {} export fn __woverflow() void {} export fn __wprintf_chk() void {} @@ -614,31 +652,49 @@ export fn __xpg_sigpause() void {} export fn __xpg_strerror_r() void {} export fn __xstat() void {} export fn __xstat64() void {} +export fn _authenticate() void {} export fn _dl_addr() void {} export fn _dl_catch_error() void {} export fn _dl_catch_exception() void {} export fn _dl_mcount_wrapper() void {} export fn _dl_mcount_wrapper_check() void {} +export fn _dl_open_hook() void {} +export fn _dl_open_hook2() void {} export fn _dl_signal_error() void {} export fn _dl_signal_exception() void {} export fn _dl_sym() void {} export fn _dl_vsym() void {} +export fn _environ() void {} export fn _exit() void {} export fn _flushlbf() void {} +export fn _itoa_lower_digits() void {} +export fn _libc_intl_domainname() void {} export fn _longjmp() void {} export fn _mcleanup() void {} export fn _mcount() void {} +export fn _nl_default_dirname() void {} +export fn _nl_domain_bindings() void {} +export fn _nl_msg_cat_cntr() void {} export fn _nss_files_parse_grent() void {} export fn _nss_files_parse_pwent() void {} export fn _nss_files_parse_sgent() void {} export fn _nss_files_parse_spent() void {} +export fn _null_auth() void {} +export fn _obstack() void {} export fn _obstack_allocated_p() void {} export fn _obstack_begin() void {} export fn _obstack_begin_1() void {} export fn _obstack_free() void {} export fn _obstack_memory_used() void {} export fn _obstack_newchunk() void {} +export fn _res() void {} +export fn _res_hconf() void {} +export fn _rpc_dtablesize() void {} +export fn _seterr_reply() void {} export fn _setjmp() void {} +export fn _sys_errlist() void {} +export fn _sys_nerr() void {} +export fn _sys_siglist() void {} export fn _tolower() void {} export fn _toupper() void {} export fn a64l() void {} @@ -652,15 +708,20 @@ export fn addmntent() void {} export fn addseverity() void {} export fn adjtime() void {} export fn adjtimex() void {} +export fn advance() void {} export fn alarm() void {} export fn aligned_alloc() void {} export fn alphasort() void {} export fn alphasort64() void {} export fn arch_prctl() void {} +export fn argp_err_exit_status() void {} export fn argp_error() void {} export fn argp_failure() void {} export fn argp_help() void {} export fn argp_parse() void {} +export fn argp_program_bug_address() void {} +export fn argp_program_version() void {} +export fn argp_program_version_hook() void {} export fn argp_state_help() void {} export fn argp_usage() void {} export fn argz_add() void {} @@ -682,12 +743,19 @@ export fn atof() void {} export fn atoi() void {} export fn atol() void {} export fn atoll() void {} +export fn authdes_create() void {} +export fn authdes_getucred() void {} +export fn authdes_pk_create() void {} +export fn authnone_create() void {} +export fn authunix_create() void {} +export fn authunix_create_default() void {} export fn backtrace() void {} export fn backtrace_symbols() void {} export fn backtrace_symbols_fd() void {} export fn basename() void {} export fn bcmp() void {} export fn bcopy() void {} +export fn bdflush() void {} export fn bind() void {} export fn bind_textdomain_codeset() void {} export fn bindresvport() void {} @@ -700,15 +768,18 @@ export fn bzero() void {} export fn c16rtomb() void {} export fn c32rtomb() void {} export fn calloc() void {} +export fn callrpc() void {} export fn canonicalize_file_name() void {} export fn capget() void {} export fn capset() void {} export fn catclose() void {} export fn catgets() void {} export fn catopen() void {} +export fn cbc_crypt() void {} export fn cfgetispeed() void {} export fn cfgetospeed() void {} export fn cfmakeraw() void {} +export fn cfree() void {} export fn cfsetispeed() void {} export fn cfsetospeed() void {} export fn cfsetspeed() void {} @@ -720,7 +791,19 @@ export fn chroot() void {} export fn clearenv() void {} export fn clearerr() void {} export fn clearerr_unlocked() void {} +export fn clnt_broadcast() void {} +export fn clnt_create() void {} +export fn clnt_pcreateerror() void {} +export fn clnt_perrno() void {} +export fn clnt_perror() void {} +export fn clnt_spcreateerror() void {} export fn clnt_sperrno() void {} +export fn clnt_sperror() void {} +export fn clntraw_create() void {} +export fn clnttcp_create() void {} +export fn clntudp_bufcreate() void {} +export fn clntudp_create() void {} +export fn clntunix_create() void {} export fn clock() void {} export fn clock_adjtime() void {} export fn clock_getcpuclockid() void {} @@ -740,14 +823,17 @@ export fn copysignf() void {} export fn copysignl() void {} export fn creat() void {} export fn creat64() void {} +export fn create_module() void {} export fn ctermid() void {} export fn ctime() void {} export fn ctime_r() void {} export fn cuserid() void {} export fn daemon() void {} +export fn daylight() void {} export fn dcgettext() void {} export fn dcngettext() void {} export fn delete_module() void {} +export fn des_setparity() void {} export fn dgettext() void {} export fn difftime() void {} export fn dirfd() void {} @@ -764,6 +850,7 @@ export fn dup3() void {} export fn duplocale() void {} export fn dysize() void {} export fn eaccess() void {} +export fn ecb_crypt() void {} export fn ecvt() void {} export fn ecvt_r() void {} export fn endaliasent() void {} @@ -783,6 +870,7 @@ export fn endttyent() void {} export fn endusershell() void {} export fn endutent() void {} export fn endutxent() void {} +export fn environ() void {} export fn envz_add() void {} export fn envz_entry() void {} export fn envz_get() void {} @@ -797,8 +885,12 @@ export fn epoll_wait() void {} export fn erand48() void {} export fn erand48_r() void {} export fn err() void {} +export fn errno() void {} export fn @"error"() void {} export fn error_at_line() void {} +export fn error_message_count() void {} +export fn error_one_per_line() void {} +export fn error_print_progname() void {} export fn errx() void {} export fn ether_aton() void {} export fn ether_aton_r() void {} @@ -832,6 +924,7 @@ export fn fchmod() void {} export fn fchmodat() void {} export fn fchown() void {} export fn fchownat() void {} +export fn fclose() void {} export fn fcloseall() void {} export fn fcntl() void {} export fn fcntl64() void {} @@ -839,6 +932,7 @@ export fn fcvt() void {} export fn fcvt_r() void {} export fn fdatasync() void {} export fn fdetach() void {} +export fn fdopen() void {} export fn fdopendir() void {} export fn feof() void {} export fn feof_unlocked() void {} @@ -854,6 +948,8 @@ export fn fgetc() void {} export fn fgetc_unlocked() void {} export fn fgetgrent() void {} export fn fgetgrent_r() void {} +export fn fgetpos() void {} +export fn fgetpos64() void {} export fn fgetpwent() void {} export fn fgetpwent_r() void {} export fn fgets() void {} @@ -875,8 +971,12 @@ export fn finitel() void {} export fn flistxattr() void {} export fn flock() void {} export fn flockfile() void {} +export fn fmemopen() void {} export fn fmtmsg() void {} +export fn fnmatch() void {} +export fn fopen() void {} export fn fopen64() void {} +export fn fopencookie() void {} export fn fork() void {} export fn fpathconf() void {} export fn fprintf() void {} @@ -904,6 +1004,8 @@ export fn fscanf() void {} export fn fseek() void {} export fn fseeko() void {} export fn fseeko64() void {} +export fn fsetpos() void {} +export fn fsetpos64() void {} export fn fsetxattr() void {} export fn fstatfs() void {} export fn fstatfs64() void {} @@ -943,12 +1045,16 @@ export fn gai_strerror() void {} export fn gcvt() void {} export fn get_avphys_pages() void {} export fn get_current_dir_name() void {} +export fn get_kernel_syms() void {} +export fn get_myaddress() void {} export fn get_nprocs() void {} export fn get_nprocs_conf() void {} export fn get_phys_pages() void {} export fn getaddrinfo() void {} export fn getaliasbyname() void {} +export fn getaliasbyname_r() void {} export fn getaliasent() void {} +export fn getaliasent_r() void {} export fn getauxval() void {} export fn getc() void {} export fn getc_unlocked() void {} @@ -958,6 +1064,7 @@ export fn getcontext() void {} export fn getcpu() void {} export fn getcwd() void {} export fn getdate() void {} +export fn getdate_err() void {} export fn getdate_r() void {} export fn getdelim() void {} export fn getdirentries() void {} @@ -973,14 +1080,21 @@ export fn getfsfile() void {} export fn getfsspec() void {} export fn getgid() void {} export fn getgrent() void {} +export fn getgrent_r() void {} export fn getgrgid() void {} +export fn getgrgid_r() void {} export fn getgrnam() void {} +export fn getgrnam_r() void {} export fn getgrouplist() void {} export fn getgroups() void {} export fn gethostbyaddr() void {} +export fn gethostbyaddr_r() void {} export fn gethostbyname() void {} export fn gethostbyname2() void {} +export fn gethostbyname2_r() void {} +export fn gethostbyname_r() void {} export fn gethostent() void {} +export fn gethostent_r() void {} export fn gethostid() void {} export fn gethostname() void {} export fn getifaddrs() void {} @@ -995,10 +1109,14 @@ export fn getmntent_r() void {} export fn getmsg() void {} export fn getnameinfo() void {} export fn getnetbyaddr() void {} +export fn getnetbyaddr_r() void {} export fn getnetbyname() void {} +export fn getnetbyname_r() void {} export fn getnetent() void {} +export fn getnetent_r() void {} export fn getnetgrent() void {} export fn getnetgrent_r() void {} +export fn getnetname() void {} export fn getopt() void {} export fn getopt_long() void {} export fn getopt_long_only() void {} @@ -1012,27 +1130,41 @@ export fn getpmsg() void {} export fn getppid() void {} export fn getpriority() void {} export fn getprotobyname() void {} +export fn getprotobyname_r() void {} export fn getprotobynumber() void {} +export fn getprotobynumber_r() void {} export fn getprotoent() void {} +export fn getprotoent_r() void {} export fn getpt() void {} +export fn getpublickey() void {} export fn getpw() void {} export fn getpwent() void {} +export fn getpwent_r() void {} export fn getpwnam() void {} +export fn getpwnam_r() void {} export fn getpwuid() void {} +export fn getpwuid_r() void {} export fn getrandom() void {} export fn getresgid() void {} export fn getresuid() void {} export fn getrlimit() void {} export fn getrlimit64() void {} export fn getrpcbyname() void {} +export fn getrpcbyname_r() void {} export fn getrpcbynumber() void {} +export fn getrpcbynumber_r() void {} export fn getrpcent() void {} +export fn getrpcent_r() void {} export fn getrpcport() void {} export fn getrusage() void {} export fn gets() void {} +export fn getsecretkey() void {} export fn getservbyname() void {} +export fn getservbyname_r() void {} export fn getservbyport() void {} +export fn getservbyport_r() void {} export fn getservent() void {} +export fn getservent_r() void {} export fn getsgent() void {} export fn getsgent_r() void {} export fn getsgnam() void {} @@ -1042,7 +1174,9 @@ export fn getsockname() void {} export fn getsockopt() void {} export fn getsourcefilter() void {} export fn getspent() void {} +export fn getspent_r() void {} export fn getspnam() void {} +export fn getspnam_r() void {} export fn getsubopt() void {} export fn gettext() void {} export fn gettimeofday() void {} @@ -1068,6 +1202,8 @@ export fn getwchar() void {} export fn getwchar_unlocked() void {} export fn getwd() void {} export fn getxattr() void {} +export fn glob() void {} +export fn glob64() void {} export fn glob_pattern_p() void {} export fn globfree() void {} export fn globfree64() void {} @@ -1082,12 +1218,15 @@ export fn grantpt() void {} export fn group_member() void {} export fn gsignal() void {} export fn gtty() void {} +export fn h_errlist() void {} +export fn h_nerr() void {} export fn hasmntopt() void {} export fn hcreate() void {} export fn hcreate_r() void {} export fn hdestroy() void {} export fn hdestroy_r() void {} export fn herror() void {} +export fn host2netname() void {} export fn hsearch() void {} export fn hsearch_r() void {} export fn hstrerror() void {} @@ -1102,6 +1241,8 @@ export fn if_nameindex() void {} export fn if_nametoindex() void {} export fn imaxabs() void {} export fn imaxdiv() void {} +export fn in6addr_any() void {} +export fn in6addr_loopback() void {} export fn index() void {} export fn inet6_opt_append() void {} export fn inet6_opt_find() void {} @@ -1211,6 +1352,15 @@ export fn isxdigit() void {} export fn isxdigit_l() void {} export fn jrand48() void {} export fn jrand48_r() void {} +export fn key_decryptsession() void {} +export fn key_decryptsession_pk() void {} +export fn key_encryptsession() void {} +export fn key_encryptsession_pk() void {} +export fn key_gendes() void {} +export fn key_get_conv() void {} +export fn key_secretkey_is_set() void {} +export fn key_setnet() void {} +export fn key_setsecret() void {} export fn kill() void {} export fn killpg() void {} export fn klogctl() void {} @@ -1234,10 +1384,15 @@ export fn listxattr() void {} export fn llabs() void {} export fn lldiv() void {} export fn llistxattr() void {} +export fn llseek() void {} +export fn loc1() void {} +export fn loc2() void {} +export fn localeconv() void {} export fn localtime() void {} export fn localtime_r() void {} export fn lockf() void {} export fn lockf64() void {} +export fn locs() void {} export fn longjmp() void {} export fn lrand48() void {} export fn lrand48_r() void {} @@ -1251,11 +1406,14 @@ export fn madvise() void {} export fn makecontext() void {} export fn mallinfo() void {} export fn malloc() void {} +export fn malloc_get_state() void {} export fn malloc_info() void {} +export fn malloc_set_state() void {} export fn malloc_stats() void {} export fn malloc_trim() void {} export fn malloc_usable_size() void {} export fn mallopt() void {} +export fn mallwatch() void {} export fn mblen() void {} export fn mbrlen() void {} export fn mbrtoc16() void {} @@ -1315,6 +1473,7 @@ export fn mprotect() void {} export fn mrand48() void {} export fn mrand48_r() void {} export fn mremap() void {} +export fn msgctl() void {} export fn msgget() void {} export fn msgrcv() void {} export fn msgsnd() void {} @@ -1326,7 +1485,12 @@ export fn munmap() void {} export fn muntrace() void {} export fn name_to_handle_at() void {} export fn nanosleep() void {} +export fn netname2host() void {} +export fn netname2user() void {} export fn newlocale() void {} +export fn nfsservctl() void {} +export fn nftw() void {} +export fn nftw64() void {} export fn ngettext() void {} export fn nice() void {} export fn nl_langinfo() void {} @@ -1338,6 +1502,8 @@ export fn ntohs() void {} export fn ntp_adjtime() void {} export fn ntp_gettime() void {} export fn ntp_gettimex() void {} +export fn obstack_alloc_failed_handler() void {} +export fn obstack_exit_failure() void {} export fn obstack_free() void {} export fn obstack_printf() void {} export fn obstack_vprintf() void {} @@ -1351,9 +1517,15 @@ export fn openat() void {} export fn openat64() void {} export fn opendir() void {} export fn openlog() void {} +export fn optarg() void {} +export fn opterr() void {} +export fn optind() void {} +export fn optopt() void {} export fn parse_printf_format() void {} +export fn passwd2des() void {} export fn pathconf() void {} export fn pause() void {} +export fn pclose() void {} export fn perror() void {} export fn personality() void {} export fn pipe() void {} @@ -1364,7 +1536,13 @@ export fn pkey_free() void {} export fn pkey_get() void {} export fn pkey_mprotect() void {} export fn pkey_set() void {} +export fn pmap_getmaps() void {} +export fn pmap_getport() void {} +export fn pmap_rmtcall() void {} +export fn pmap_set() void {} +export fn pmap_unset() void {} export fn poll() void {} +export fn popen() void {} export fn posix_fadvise() void {} export fn posix_fadvise64() void {} export fn posix_fallocate() void {} @@ -1372,6 +1550,7 @@ export fn posix_fallocate64() void {} export fn posix_madvise() void {} export fn posix_memalign() void {} export fn posix_openpt() void {} +export fn posix_spawn() void {} export fn posix_spawn_file_actions_addchdir_np() void {} export fn posix_spawn_file_actions_addclose() void {} export fn posix_spawn_file_actions_adddup2() void {} @@ -1393,6 +1572,7 @@ export fn posix_spawnattr_setschedparam() void {} export fn posix_spawnattr_setschedpolicy() void {} export fn posix_spawnattr_setsigdefault() void {} export fn posix_spawnattr_setsigmask() void {} +export fn posix_spawnp() void {} export fn ppoll() void {} export fn prctl() void {} export fn pread() void {} @@ -1409,6 +1589,8 @@ export fn prlimit64() void {} export fn process_vm_readv() void {} export fn process_vm_writev() void {} export fn profil() void {} +export fn program_invocation_name() void {} +export fn program_invocation_short_name() void {} export fn pselect() void {} export fn psiginfo() void {} export fn psignal() void {} @@ -1418,11 +1600,18 @@ export fn pthread_attr_getinheritsched() void {} export fn pthread_attr_getschedparam() void {} export fn pthread_attr_getschedpolicy() void {} export fn pthread_attr_getscope() void {} +export fn pthread_attr_init() void {} export fn pthread_attr_setdetachstate() void {} export fn pthread_attr_setinheritsched() void {} export fn pthread_attr_setschedparam() void {} export fn pthread_attr_setschedpolicy() void {} export fn pthread_attr_setscope() void {} +export fn pthread_cond_broadcast() void {} +export fn pthread_cond_destroy() void {} +export fn pthread_cond_init() void {} +export fn pthread_cond_signal() void {} +export fn pthread_cond_timedwait() void {} +export fn pthread_cond_wait() void {} export fn pthread_condattr_destroy() void {} export fn pthread_condattr_init() void {} export fn pthread_equal() void {} @@ -1472,6 +1661,8 @@ export fn qfcvt_r() void {} export fn qgcvt() void {} export fn qsort() void {} export fn qsort_r() void {} +export fn query_module() void {} +export fn quick_exit() void {} export fn quotactl() void {} export fn raise() void {} export fn rand() void {} @@ -1487,10 +1678,12 @@ export fn re_compile_pattern() void {} export fn re_exec() void {} export fn re_match() void {} export fn re_match_2() void {} +export fn re_max_failures() void {} export fn re_search() void {} export fn re_search_2() void {} export fn re_set_registers() void {} export fn re_set_syntax() void {} +export fn re_syntax_options() void {} export fn read() void {} export fn readahead() void {} export fn readdir() void {} @@ -1502,6 +1695,7 @@ export fn readlinkat() void {} export fn readv() void {} export fn realloc() void {} export fn reallocarray() void {} +export fn realpath() void {} export fn reboot() void {} export fn recv() void {} export fn recvfrom() void {} @@ -1509,11 +1703,13 @@ export fn recvmmsg() void {} export fn recvmsg() void {} export fn regcomp() void {} export fn regerror() void {} +export fn regexec() void {} export fn regfree() void {} export fn register_printf_function() void {} export fn register_printf_modifier() void {} export fn register_printf_specifier() void {} export fn register_printf_type() void {} +export fn registerrpc() void {} export fn remap_file_pages() void {} export fn remove() void {} export fn removexattr() void {} @@ -1526,11 +1722,14 @@ export fn rewind() void {} export fn rewinddir() void {} export fn rexec() void {} export fn rexec_af() void {} +export fn rexecoptions() void {} export fn rindex() void {} export fn rmdir() void {} +export fn rpc_createerr() void {} export fn rpmatch() void {} export fn rresvport() void {} export fn rresvport_af() void {} +export fn rtime() void {} export fn ruserok() void {} export fn ruserok_af() void {} export fn ruserpass() void {} @@ -1545,10 +1744,12 @@ export fn scandirat64() void {} export fn scanf() void {} export fn sched_get_priority_max() void {} export fn sched_get_priority_min() void {} +export fn sched_getaffinity() void {} export fn sched_getcpu() void {} export fn sched_getparam() void {} export fn sched_getscheduler() void {} export fn sched_rr_get_interval() void {} +export fn sched_setaffinity() void {} export fn sched_setparam() void {} export fn sched_setscheduler() void {} export fn sched_yield() void {} @@ -1557,6 +1758,7 @@ export fn seed48() void {} export fn seed48_r() void {} export fn seekdir() void {} export fn select() void {} +export fn semctl() void {} export fn semget() void {} export fn semop() void {} export fn semtimedop() void {} @@ -1627,6 +1829,7 @@ export fn sgetsgent_r() void {} export fn sgetspent() void {} export fn sgetspent_r() void {} export fn shmat() void {} +export fn shmctl() void {} export fn shmdt() void {} export fn shmget() void {} export fn shutdown() void {} @@ -1659,6 +1862,7 @@ export fn sigsetmask() void {} export fn sigstack() void {} export fn sigsuspend() void {} export fn sigtimedwait() void {} +export fn sigvec() void {} export fn sigwait() void {} export fn sigwaitinfo() void {} export fn sleep() void {} @@ -1682,6 +1886,10 @@ export fn statfs64() void {} export fn statvfs() void {} export fn statvfs64() void {} export fn statx() void {} +export fn stderr() void {} +export fn stdin() void {} +export fn stdout() void {} +export fn step() void {} export fn stime() void {} export fn stpcpy() void {} export fn stpncpy() void {} @@ -1763,6 +1971,34 @@ export fn strverscmp() void {} export fn strxfrm() void {} export fn strxfrm_l() void {} export fn stty() void {} +export fn svc_exit() void {} +export fn svc_fdset() void {} +export fn svc_getreq() void {} +export fn svc_getreq_common() void {} +export fn svc_getreq_poll() void {} +export fn svc_getreqset() void {} +export fn svc_max_pollfd() void {} +export fn svc_pollfd() void {} +export fn svc_register() void {} +export fn svc_run() void {} +export fn svc_sendreply() void {} +export fn svc_unregister() void {} +export fn svcauthdes_stats() void {} +export fn svcerr_auth() void {} +export fn svcerr_decode() void {} +export fn svcerr_noproc() void {} +export fn svcerr_noprog() void {} +export fn svcerr_progvers() void {} +export fn svcerr_systemerr() void {} +export fn svcerr_weakauth() void {} +export fn svcfd_create() void {} +export fn svcraw_create() void {} +export fn svctcp_create() void {} +export fn svcudp_bufcreate() void {} +export fn svcudp_create() void {} +export fn svcudp_enablecache() void {} +export fn svcunix_create() void {} +export fn svcunixfd_create() void {} export fn swab() void {} export fn swapcontext() void {} export fn swapoff() void {} @@ -1774,6 +2010,10 @@ export fn symlinkat() void {} export fn sync() void {} export fn sync_file_range() void {} export fn syncfs() void {} +export fn sys_errlist() void {} +export fn sys_nerr() void {} +export fn sys_sigabbrev() void {} +export fn sys_siglist() void {} export fn syscall() void {} export fn sysconf() void {} export fn sysctl() void {} @@ -1809,6 +2049,8 @@ export fn timerfd_gettime() void {} export fn timerfd_settime() void {} export fn times() void {} export fn timespec_get() void {} +export fn timezone() void {} +export fn tmpfile() void {} export fn tmpfile64() void {} export fn tmpnam() void {} export fn tmpnam_r() void {} @@ -1831,6 +2073,7 @@ export fn ttyname() void {} export fn ttyname_r() void {} export fn ttyslot() void {} export fn twalk() void {} +export fn tzname() void {} export fn tzset() void {} export fn ualarm() void {} export fn ulckpwdf() void {} @@ -1848,8 +2091,11 @@ export fn unsetenv() void {} export fn unshare() void {} export fn updwtmp() void {} export fn updwtmpx() void {} +export fn uselib() void {} export fn uselocale() void {} +export fn user2netname() void {} export fn usleep() void {} +export fn ustat() void {} export fn utime() void {} export fn utimensat() void {} export fn utimes() void {} @@ -1972,3 +2218,76 @@ export fn wprintf() void {} export fn write() void {} export fn writev() void {} export fn wscanf() void {} +export fn xdecrypt() void {} +export fn xdr_accepted_reply() void {} +export fn xdr_array() void {} +export fn xdr_authdes_cred() void {} +export fn xdr_authdes_verf() void {} +export fn xdr_authunix_parms() void {} +export fn xdr_bool() void {} +export fn xdr_bytes() void {} +export fn xdr_callhdr() void {} +export fn xdr_callmsg() void {} +export fn xdr_char() void {} +export fn xdr_cryptkeyarg() void {} +export fn xdr_cryptkeyarg2() void {} +export fn xdr_cryptkeyres() void {} +export fn xdr_des_block() void {} +export fn xdr_double() void {} +export fn xdr_enum() void {} +export fn xdr_float() void {} +export fn xdr_free() void {} +export fn xdr_getcredres() void {} +export fn xdr_hyper() void {} +export fn xdr_int() void {} +export fn xdr_int16_t() void {} +export fn xdr_int32_t() void {} +export fn xdr_int64_t() void {} +export fn xdr_int8_t() void {} +export fn xdr_key_netstarg() void {} +export fn xdr_key_netstres() void {} +export fn xdr_keybuf() void {} +export fn xdr_keystatus() void {} +export fn xdr_long() void {} +export fn xdr_longlong_t() void {} +export fn xdr_netnamestr() void {} +export fn xdr_netobj() void {} +export fn xdr_opaque() void {} +export fn xdr_opaque_auth() void {} +export fn xdr_pmap() void {} +export fn xdr_pmaplist() void {} +export fn xdr_pointer() void {} +export fn xdr_quad_t() void {} +export fn xdr_reference() void {} +export fn xdr_rejected_reply() void {} +export fn xdr_replymsg() void {} +export fn xdr_rmtcall_args() void {} +export fn xdr_rmtcallres() void {} +export fn xdr_short() void {} +export fn xdr_sizeof() void {} +export fn xdr_string() void {} +export fn xdr_u_char() void {} +export fn xdr_u_hyper() void {} +export fn xdr_u_int() void {} +export fn xdr_u_long() void {} +export fn xdr_u_longlong_t() void {} +export fn xdr_u_quad_t() void {} +export fn xdr_u_short() void {} +export fn xdr_uint16_t() void {} +export fn xdr_uint32_t() void {} +export fn xdr_uint64_t() void {} +export fn xdr_uint8_t() void {} +export fn xdr_union() void {} +export fn xdr_unixcred() void {} +export fn xdr_vector() void {} +export fn xdr_void() void {} +export fn xdr_wrapstring() void {} +export fn xdrmem_create() void {} +export fn xdrrec_create() void {} +export fn xdrrec_endofrecord() void {} +export fn xdrrec_eof() void {} +export fn xdrrec_skiprecord() void {} +export fn xdrstdio_create() void {} +export fn xencrypt() void {} +export fn xprt_register() void {} +export fn xprt_unregister() void {} diff --git a/libc/dummy/dl.zig b/libc/dummy/dl.zig new file mode 100644 index 0000000000..84d47cf4fa --- /dev/null +++ b/libc/dummy/dl.zig @@ -0,0 +1,19 @@ +const builtin = @import("builtin"); +pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn { + unreachable; +} + +// This file exists to create a libdl.so file so that LLD has something to look at +// and emit linker errors if an attempt to link against a non-existent C symbol happens. + +export fn __libdl_freeres() void {} +export fn _dlfcn_hook() void {} +export fn dladdr() void {} +export fn dladdr1() void {} +export fn dlclose() void {} +export fn dlerror() void {} +export fn dlinfo() void {} +export fn dlmopen() void {} +export fn dlopen() void {} +export fn dlsym() void {} +export fn dlvsym() void {} diff --git a/libc/dummy/m.zig b/libc/dummy/m.zig new file mode 100644 index 0000000000..c24b30042c --- /dev/null +++ b/libc/dummy/m.zig @@ -0,0 +1,1068 @@ +const builtin = @import("builtin"); +pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn { + unreachable; +} + +// This file exists to create a libm.so file so that LLD has something to look at +// and emit linker errors if an attempt to link against a non-existent C symbol happens. + +export fn _LIB_VERSION() void {} +export fn __acos_finite() void {} +export fn __acosf128_finite() void {} +export fn __acosf_finite() void {} +export fn __acosh_finite() void {} +export fn __acoshf128_finite() void {} +export fn __acoshf_finite() void {} +export fn __acoshl_finite() void {} +export fn __acosl_finite() void {} +export fn __asin_finite() void {} +export fn __asinf128_finite() void {} +export fn __asinf_finite() void {} +export fn __asinl_finite() void {} +export fn __atan2_finite() void {} +export fn __atan2f128_finite() void {} +export fn __atan2f_finite() void {} +export fn __atan2l_finite() void {} +export fn __atanh_finite() void {} +export fn __atanhf128_finite() void {} +export fn __atanhf_finite() void {} +export fn __atanhl_finite() void {} +export fn __clog10() void {} +export fn __clog10f() void {} +export fn __clog10l() void {} +export fn __cosh_finite() void {} +export fn __coshf128_finite() void {} +export fn __coshf_finite() void {} +export fn __coshl_finite() void {} +export fn __exp10_finite() void {} +export fn __exp10f128_finite() void {} +export fn __exp10f_finite() void {} +export fn __exp10l_finite() void {} +export fn __exp2_finite() void {} +export fn __exp2f128_finite() void {} +export fn __exp2f_finite() void {} +export fn __exp2l_finite() void {} +export fn __exp_finite() void {} +export fn __expf128_finite() void {} +export fn __expf_finite() void {} +export fn __expl_finite() void {} +export fn __finite() void {} +export fn __finitef() void {} +export fn __finitef128() void {} +export fn __finitel() void {} +export fn __fmod_finite() void {} +export fn __fmodf128_finite() void {} +export fn __fmodf_finite() void {} +export fn __fmodl_finite() void {} +export fn __fpclassify() void {} +export fn __fpclassifyf() void {} +export fn __fpclassifyf128() void {} +export fn __fpclassifyl() void {} +export fn __gamma_r_finite() void {} +export fn __gammaf128_r_finite() void {} +export fn __gammaf_r_finite() void {} +export fn __gammal_r_finite() void {} +export fn __hypot_finite() void {} +export fn __hypotf128_finite() void {} +export fn __hypotf_finite() void {} +export fn __hypotl_finite() void {} +export fn __iscanonicall() void {} +export fn __iseqsig() void {} +export fn __iseqsigf() void {} +export fn __iseqsigf128() void {} +export fn __iseqsigl() void {} +export fn __isinff128() void {} +export fn __isnanf128() void {} +export fn __issignaling() void {} +export fn __issignalingf() void {} +export fn __issignalingf128() void {} +export fn __issignalingl() void {} +export fn __j0_finite() void {} +export fn __j0f128_finite() void {} +export fn __j0f_finite() void {} +export fn __j0l_finite() void {} +export fn __j1_finite() void {} +export fn __j1f128_finite() void {} +export fn __j1f_finite() void {} +export fn __j1l_finite() void {} +export fn __jn_finite() void {} +export fn __jnf128_finite() void {} +export fn __jnf_finite() void {} +export fn __jnl_finite() void {} +export fn __lgamma_r_finite() void {} +export fn __lgammaf128_r_finite() void {} +export fn __lgammaf_r_finite() void {} +export fn __lgammal_r_finite() void {} +export fn __log10_finite() void {} +export fn __log10f128_finite() void {} +export fn __log10f_finite() void {} +export fn __log10l_finite() void {} +export fn __log2_finite() void {} +export fn __log2f128_finite() void {} +export fn __log2f_finite() void {} +export fn __log2l_finite() void {} +export fn __log_finite() void {} +export fn __logf128_finite() void {} +export fn __logf_finite() void {} +export fn __logl_finite() void {} +export fn __pow_finite() void {} +export fn __powf128_finite() void {} +export fn __powf_finite() void {} +export fn __powl_finite() void {} +export fn __remainder_finite() void {} +export fn __remainderf128_finite() void {} +export fn __remainderf_finite() void {} +export fn __remainderl_finite() void {} +export fn __scalb_finite() void {} +export fn __scalbf_finite() void {} +export fn __scalbl_finite() void {} +export fn __signbit() void {} +export fn __signbitf() void {} +export fn __signbitf128() void {} +export fn __signbitl() void {} +export fn __signgam() void {} +export fn __sinh_finite() void {} +export fn __sinhf128_finite() void {} +export fn __sinhf_finite() void {} +export fn __sinhl_finite() void {} +export fn __sqrt_finite() void {} +export fn __sqrtf128_finite() void {} +export fn __sqrtf_finite() void {} +export fn __sqrtl_finite() void {} +export fn __y0_finite() void {} +export fn __y0f128_finite() void {} +export fn __y0f_finite() void {} +export fn __y0l_finite() void {} +export fn __y1_finite() void {} +export fn __y1f128_finite() void {} +export fn __y1f_finite() void {} +export fn __y1l_finite() void {} +export fn __yn_finite() void {} +export fn __ynf128_finite() void {} +export fn __ynf_finite() void {} +export fn __ynl_finite() void {} +export fn acos() void {} +export fn acosf() void {} +export fn acosf128() void {} +export fn acosf32() void {} +export fn acosf32x() void {} +export fn acosf64() void {} +export fn acosf64x() void {} +export fn acosh() void {} +export fn acoshf() void {} +export fn acoshf128() void {} +export fn acoshf32() void {} +export fn acoshf32x() void {} +export fn acoshf64() void {} +export fn acoshf64x() void {} +export fn acoshl() void {} +export fn acosl() void {} +export fn asin() void {} +export fn asinf() void {} +export fn asinf128() void {} +export fn asinf32() void {} +export fn asinf32x() void {} +export fn asinf64() void {} +export fn asinf64x() void {} +export fn asinh() void {} +export fn asinhf() void {} +export fn asinhf128() void {} +export fn asinhf32() void {} +export fn asinhf32x() void {} +export fn asinhf64() void {} +export fn asinhf64x() void {} +export fn asinhl() void {} +export fn asinl() void {} +export fn atan() void {} +export fn atan2() void {} +export fn atan2f() void {} +export fn atan2f128() void {} +export fn atan2f32() void {} +export fn atan2f32x() void {} +export fn atan2f64() void {} +export fn atan2f64x() void {} +export fn atan2l() void {} +export fn atanf() void {} +export fn atanf128() void {} +export fn atanf32() void {} +export fn atanf32x() void {} +export fn atanf64() void {} +export fn atanf64x() void {} +export fn atanh() void {} +export fn atanhf() void {} +export fn atanhf128() void {} +export fn atanhf32() void {} +export fn atanhf32x() void {} +export fn atanhf64() void {} +export fn atanhf64x() void {} +export fn atanhl() void {} +export fn atanl() void {} +export fn cabs() void {} +export fn cabsf() void {} +export fn cabsf128() void {} +export fn cabsf32() void {} +export fn cabsf32x() void {} +export fn cabsf64() void {} +export fn cabsf64x() void {} +export fn cabsl() void {} +export fn cacos() void {} +export fn cacosf() void {} +export fn cacosf128() void {} +export fn cacosf32() void {} +export fn cacosf32x() void {} +export fn cacosf64() void {} +export fn cacosf64x() void {} +export fn cacosh() void {} +export fn cacoshf() void {} +export fn cacoshf128() void {} +export fn cacoshf32() void {} +export fn cacoshf32x() void {} +export fn cacoshf64() void {} +export fn cacoshf64x() void {} +export fn cacoshl() void {} +export fn cacosl() void {} +export fn canonicalize() void {} +export fn canonicalizef() void {} +export fn canonicalizef128() void {} +export fn canonicalizef32() void {} +export fn canonicalizef32x() void {} +export fn canonicalizef64() void {} +export fn canonicalizef64x() void {} +export fn canonicalizel() void {} +export fn carg() void {} +export fn cargf() void {} +export fn cargf128() void {} +export fn cargf32() void {} +export fn cargf32x() void {} +export fn cargf64() void {} +export fn cargf64x() void {} +export fn cargl() void {} +export fn casin() void {} +export fn casinf() void {} +export fn casinf128() void {} +export fn casinf32() void {} +export fn casinf32x() void {} +export fn casinf64() void {} +export fn casinf64x() void {} +export fn casinh() void {} +export fn casinhf() void {} +export fn casinhf128() void {} +export fn casinhf32() void {} +export fn casinhf32x() void {} +export fn casinhf64() void {} +export fn casinhf64x() void {} +export fn casinhl() void {} +export fn casinl() void {} +export fn catan() void {} +export fn catanf() void {} +export fn catanf128() void {} +export fn catanf32() void {} +export fn catanf32x() void {} +export fn catanf64() void {} +export fn catanf64x() void {} +export fn catanh() void {} +export fn catanhf() void {} +export fn catanhf128() void {} +export fn catanhf32() void {} +export fn catanhf32x() void {} +export fn catanhf64() void {} +export fn catanhf64x() void {} +export fn catanhl() void {} +export fn catanl() void {} +export fn cbrt() void {} +export fn cbrtf() void {} +export fn cbrtf128() void {} +export fn cbrtf32() void {} +export fn cbrtf32x() void {} +export fn cbrtf64() void {} +export fn cbrtf64x() void {} +export fn cbrtl() void {} +export fn ccos() void {} +export fn ccosf() void {} +export fn ccosf128() void {} +export fn ccosf32() void {} +export fn ccosf32x() void {} +export fn ccosf64() void {} +export fn ccosf64x() void {} +export fn ccosh() void {} +export fn ccoshf() void {} +export fn ccoshf128() void {} +export fn ccoshf32() void {} +export fn ccoshf32x() void {} +export fn ccoshf64() void {} +export fn ccoshf64x() void {} +export fn ccoshl() void {} +export fn ccosl() void {} +export fn ceil() void {} +export fn ceilf() void {} +export fn ceilf128() void {} +export fn ceilf32() void {} +export fn ceilf32x() void {} +export fn ceilf64() void {} +export fn ceilf64x() void {} +export fn ceill() void {} +export fn cexp() void {} +export fn cexpf() void {} +export fn cexpf128() void {} +export fn cexpf32() void {} +export fn cexpf32x() void {} +export fn cexpf64() void {} +export fn cexpf64x() void {} +export fn cexpl() void {} +export fn cimag() void {} +export fn cimagf() void {} +export fn cimagf128() void {} +export fn cimagf32() void {} +export fn cimagf32x() void {} +export fn cimagf64() void {} +export fn cimagf64x() void {} +export fn cimagl() void {} +export fn clog() void {} +export fn clog10() void {} +export fn clog10f() void {} +export fn clog10f128() void {} +export fn clog10f32() void {} +export fn clog10f32x() void {} +export fn clog10f64() void {} +export fn clog10f64x() void {} +export fn clog10l() void {} +export fn clogf() void {} +export fn clogf128() void {} +export fn clogf32() void {} +export fn clogf32x() void {} +export fn clogf64() void {} +export fn clogf64x() void {} +export fn clogl() void {} +export fn conj() void {} +export fn conjf() void {} +export fn conjf128() void {} +export fn conjf32() void {} +export fn conjf32x() void {} +export fn conjf64() void {} +export fn conjf64x() void {} +export fn conjl() void {} +export fn copysign() void {} +export fn copysignf() void {} +export fn copysignf128() void {} +export fn copysignf32() void {} +export fn copysignf32x() void {} +export fn copysignf64() void {} +export fn copysignf64x() void {} +export fn copysignl() void {} +export fn cos() void {} +export fn cosf() void {} +export fn cosf128() void {} +export fn cosf32() void {} +export fn cosf32x() void {} +export fn cosf64() void {} +export fn cosf64x() void {} +export fn cosh() void {} +export fn coshf() void {} +export fn coshf128() void {} +export fn coshf32() void {} +export fn coshf32x() void {} +export fn coshf64() void {} +export fn coshf64x() void {} +export fn coshl() void {} +export fn cosl() void {} +export fn cpow() void {} +export fn cpowf() void {} +export fn cpowf128() void {} +export fn cpowf32() void {} +export fn cpowf32x() void {} +export fn cpowf64() void {} +export fn cpowf64x() void {} +export fn cpowl() void {} +export fn cproj() void {} +export fn cprojf() void {} +export fn cprojf128() void {} +export fn cprojf32() void {} +export fn cprojf32x() void {} +export fn cprojf64() void {} +export fn cprojf64x() void {} +export fn cprojl() void {} +export fn creal() void {} +export fn crealf() void {} +export fn crealf128() void {} +export fn crealf32() void {} +export fn crealf32x() void {} +export fn crealf64() void {} +export fn crealf64x() void {} +export fn creall() void {} +export fn csin() void {} +export fn csinf() void {} +export fn csinf128() void {} +export fn csinf32() void {} +export fn csinf32x() void {} +export fn csinf64() void {} +export fn csinf64x() void {} +export fn csinh() void {} +export fn csinhf() void {} +export fn csinhf128() void {} +export fn csinhf32() void {} +export fn csinhf32x() void {} +export fn csinhf64() void {} +export fn csinhf64x() void {} +export fn csinhl() void {} +export fn csinl() void {} +export fn csqrt() void {} +export fn csqrtf() void {} +export fn csqrtf128() void {} +export fn csqrtf32() void {} +export fn csqrtf32x() void {} +export fn csqrtf64() void {} +export fn csqrtf64x() void {} +export fn csqrtl() void {} +export fn ctan() void {} +export fn ctanf() void {} +export fn ctanf128() void {} +export fn ctanf32() void {} +export fn ctanf32x() void {} +export fn ctanf64() void {} +export fn ctanf64x() void {} +export fn ctanh() void {} +export fn ctanhf() void {} +export fn ctanhf128() void {} +export fn ctanhf32() void {} +export fn ctanhf32x() void {} +export fn ctanhf64() void {} +export fn ctanhf64x() void {} +export fn ctanhl() void {} +export fn ctanl() void {} +export fn daddl() void {} +export fn ddivl() void {} +export fn dmull() void {} +export fn drem() void {} +export fn dremf() void {} +export fn dreml() void {} +export fn dsubl() void {} +export fn erf() void {} +export fn erfc() void {} +export fn erfcf() void {} +export fn erfcf128() void {} +export fn erfcf32() void {} +export fn erfcf32x() void {} +export fn erfcf64() void {} +export fn erfcf64x() void {} +export fn erfcl() void {} +export fn erff() void {} +export fn erff128() void {} +export fn erff32() void {} +export fn erff32x() void {} +export fn erff64() void {} +export fn erff64x() void {} +export fn erfl() void {} +export fn exp() void {} +export fn exp10() void {} +export fn exp10f() void {} +export fn exp10f128() void {} +export fn exp10f32() void {} +export fn exp10f32x() void {} +export fn exp10f64() void {} +export fn exp10f64x() void {} +export fn exp10l() void {} +export fn exp2() void {} +export fn exp2f() void {} +export fn exp2f128() void {} +export fn exp2f32() void {} +export fn exp2f32x() void {} +export fn exp2f64() void {} +export fn exp2f64x() void {} +export fn exp2l() void {} +export fn expf() void {} +export fn expf128() void {} +export fn expf32() void {} +export fn expf32x() void {} +export fn expf64() void {} +export fn expf64x() void {} +export fn expl() void {} +export fn expm1() void {} +export fn expm1f() void {} +export fn expm1f128() void {} +export fn expm1f32() void {} +export fn expm1f32x() void {} +export fn expm1f64() void {} +export fn expm1f64x() void {} +export fn expm1l() void {} +export fn f32addf128() void {} +export fn f32addf32x() void {} +export fn f32addf64() void {} +export fn f32addf64x() void {} +export fn f32divf128() void {} +export fn f32divf32x() void {} +export fn f32divf64() void {} +export fn f32divf64x() void {} +export fn f32mulf128() void {} +export fn f32mulf32x() void {} +export fn f32mulf64() void {} +export fn f32mulf64x() void {} +export fn f32subf128() void {} +export fn f32subf32x() void {} +export fn f32subf64() void {} +export fn f32subf64x() void {} +export fn f32xaddf128() void {} +export fn f32xaddf64() void {} +export fn f32xaddf64x() void {} +export fn f32xdivf128() void {} +export fn f32xdivf64() void {} +export fn f32xdivf64x() void {} +export fn f32xmulf128() void {} +export fn f32xmulf64() void {} +export fn f32xmulf64x() void {} +export fn f32xsubf128() void {} +export fn f32xsubf64() void {} +export fn f32xsubf64x() void {} +export fn f64addf128() void {} +export fn f64addf64x() void {} +export fn f64divf128() void {} +export fn f64divf64x() void {} +export fn f64mulf128() void {} +export fn f64mulf64x() void {} +export fn f64subf128() void {} +export fn f64subf64x() void {} +export fn f64xaddf128() void {} +export fn f64xdivf128() void {} +export fn f64xmulf128() void {} +export fn f64xsubf128() void {} +export fn fabs() void {} +export fn fabsf() void {} +export fn fabsf128() void {} +export fn fabsf32() void {} +export fn fabsf32x() void {} +export fn fabsf64() void {} +export fn fabsf64x() void {} +export fn fabsl() void {} +export fn fadd() void {} +export fn faddl() void {} +export fn fdim() void {} +export fn fdimf() void {} +export fn fdimf128() void {} +export fn fdimf32() void {} +export fn fdimf32x() void {} +export fn fdimf64() void {} +export fn fdimf64x() void {} +export fn fdiml() void {} +export fn fdiv() void {} +export fn fdivl() void {} +export fn feclearexcept() void {} +export fn fedisableexcept() void {} +export fn feenableexcept() void {} +export fn fegetenv() void {} +export fn fegetexcept() void {} +export fn fegetexceptflag() void {} +export fn fegetmode() void {} +export fn fegetround() void {} +export fn feholdexcept() void {} +export fn feraiseexcept() void {} +export fn fesetenv() void {} +export fn fesetexcept() void {} +export fn fesetexceptflag() void {} +export fn fesetmode() void {} +export fn fesetround() void {} +export fn fetestexcept() void {} +export fn fetestexceptflag() void {} +export fn feupdateenv() void {} +export fn finite() void {} +export fn finitef() void {} +export fn finitel() void {} +export fn floor() void {} +export fn floorf() void {} +export fn floorf128() void {} +export fn floorf32() void {} +export fn floorf32x() void {} +export fn floorf64() void {} +export fn floorf64x() void {} +export fn floorl() void {} +export fn fma() void {} +export fn fmaf() void {} +export fn fmaf128() void {} +export fn fmaf32() void {} +export fn fmaf32x() void {} +export fn fmaf64() void {} +export fn fmaf64x() void {} +export fn fmal() void {} +export fn fmax() void {} +export fn fmaxf() void {} +export fn fmaxf128() void {} +export fn fmaxf32() void {} +export fn fmaxf32x() void {} +export fn fmaxf64() void {} +export fn fmaxf64x() void {} +export fn fmaxl() void {} +export fn fmaxmag() void {} +export fn fmaxmagf() void {} +export fn fmaxmagf128() void {} +export fn fmaxmagf32() void {} +export fn fmaxmagf32x() void {} +export fn fmaxmagf64() void {} +export fn fmaxmagf64x() void {} +export fn fmaxmagl() void {} +export fn fmin() void {} +export fn fminf() void {} +export fn fminf128() void {} +export fn fminf32() void {} +export fn fminf32x() void {} +export fn fminf64() void {} +export fn fminf64x() void {} +export fn fminl() void {} +export fn fminmag() void {} +export fn fminmagf() void {} +export fn fminmagf128() void {} +export fn fminmagf32() void {} +export fn fminmagf32x() void {} +export fn fminmagf64() void {} +export fn fminmagf64x() void {} +export fn fminmagl() void {} +export fn fmod() void {} +export fn fmodf() void {} +export fn fmodf128() void {} +export fn fmodf32() void {} +export fn fmodf32x() void {} +export fn fmodf64() void {} +export fn fmodf64x() void {} +export fn fmodl() void {} +export fn fmul() void {} +export fn fmull() void {} +export fn frexp() void {} +export fn frexpf() void {} +export fn frexpf128() void {} +export fn frexpf32() void {} +export fn frexpf32x() void {} +export fn frexpf64() void {} +export fn frexpf64x() void {} +export fn frexpl() void {} +export fn fromfp() void {} +export fn fromfpf() void {} +export fn fromfpf128() void {} +export fn fromfpf32() void {} +export fn fromfpf32x() void {} +export fn fromfpf64() void {} +export fn fromfpf64x() void {} +export fn fromfpl() void {} +export fn fromfpx() void {} +export fn fromfpxf() void {} +export fn fromfpxf128() void {} +export fn fromfpxf32() void {} +export fn fromfpxf32x() void {} +export fn fromfpxf64() void {} +export fn fromfpxf64x() void {} +export fn fromfpxl() void {} +export fn fsub() void {} +export fn fsubl() void {} +export fn gamma() void {} +export fn gammaf() void {} +export fn gammal() void {} +export fn getpayload() void {} +export fn getpayloadf() void {} +export fn getpayloadf128() void {} +export fn getpayloadf32() void {} +export fn getpayloadf32x() void {} +export fn getpayloadf64() void {} +export fn getpayloadf64x() void {} +export fn getpayloadl() void {} +export fn hypot() void {} +export fn hypotf() void {} +export fn hypotf128() void {} +export fn hypotf32() void {} +export fn hypotf32x() void {} +export fn hypotf64() void {} +export fn hypotf64x() void {} +export fn hypotl() void {} +export fn ilogb() void {} +export fn ilogbf() void {} +export fn ilogbf128() void {} +export fn ilogbf32() void {} +export fn ilogbf32x() void {} +export fn ilogbf64() void {} +export fn ilogbf64x() void {} +export fn ilogbl() void {} +export fn j0() void {} +export fn j0f() void {} +export fn j0f128() void {} +export fn j0f32() void {} +export fn j0f32x() void {} +export fn j0f64() void {} +export fn j0f64x() void {} +export fn j0l() void {} +export fn j1() void {} +export fn j1f() void {} +export fn j1f128() void {} +export fn j1f32() void {} +export fn j1f32x() void {} +export fn j1f64() void {} +export fn j1f64x() void {} +export fn j1l() void {} +export fn jn() void {} +export fn jnf() void {} +export fn jnf128() void {} +export fn jnf32() void {} +export fn jnf32x() void {} +export fn jnf64() void {} +export fn jnf64x() void {} +export fn jnl() void {} +export fn ldexp() void {} +export fn ldexpf() void {} +export fn ldexpf128() void {} +export fn ldexpf32() void {} +export fn ldexpf32x() void {} +export fn ldexpf64() void {} +export fn ldexpf64x() void {} +export fn ldexpl() void {} +export fn lgamma() void {} +export fn lgamma_r() void {} +export fn lgammaf() void {} +export fn lgammaf128() void {} +export fn lgammaf128_r() void {} +export fn lgammaf32() void {} +export fn lgammaf32_r() void {} +export fn lgammaf32x() void {} +export fn lgammaf32x_r() void {} +export fn lgammaf64() void {} +export fn lgammaf64_r() void {} +export fn lgammaf64x() void {} +export fn lgammaf64x_r() void {} +export fn lgammaf_r() void {} +export fn lgammal() void {} +export fn lgammal_r() void {} +export fn llogb() void {} +export fn llogbf() void {} +export fn llogbf128() void {} +export fn llogbf32() void {} +export fn llogbf32x() void {} +export fn llogbf64() void {} +export fn llogbf64x() void {} +export fn llogbl() void {} +export fn llrint() void {} +export fn llrintf() void {} +export fn llrintf128() void {} +export fn llrintf32() void {} +export fn llrintf32x() void {} +export fn llrintf64() void {} +export fn llrintf64x() void {} +export fn llrintl() void {} +export fn llround() void {} +export fn llroundf() void {} +export fn llroundf128() void {} +export fn llroundf32() void {} +export fn llroundf32x() void {} +export fn llroundf64() void {} +export fn llroundf64x() void {} +export fn llroundl() void {} +export fn log() void {} +export fn log10() void {} +export fn log10f() void {} +export fn log10f128() void {} +export fn log10f32() void {} +export fn log10f32x() void {} +export fn log10f64() void {} +export fn log10f64x() void {} +export fn log10l() void {} +export fn log1p() void {} +export fn log1pf() void {} +export fn log1pf128() void {} +export fn log1pf32() void {} +export fn log1pf32x() void {} +export fn log1pf64() void {} +export fn log1pf64x() void {} +export fn log1pl() void {} +export fn log2() void {} +export fn log2f() void {} +export fn log2f128() void {} +export fn log2f32() void {} +export fn log2f32x() void {} +export fn log2f64() void {} +export fn log2f64x() void {} +export fn log2l() void {} +export fn logb() void {} +export fn logbf() void {} +export fn logbf128() void {} +export fn logbf32() void {} +export fn logbf32x() void {} +export fn logbf64() void {} +export fn logbf64x() void {} +export fn logbl() void {} +export fn logf() void {} +export fn logf128() void {} +export fn logf32() void {} +export fn logf32x() void {} +export fn logf64() void {} +export fn logf64x() void {} +export fn logl() void {} +export fn lrint() void {} +export fn lrintf() void {} +export fn lrintf128() void {} +export fn lrintf32() void {} +export fn lrintf32x() void {} +export fn lrintf64() void {} +export fn lrintf64x() void {} +export fn lrintl() void {} +export fn lround() void {} +export fn lroundf() void {} +export fn lroundf128() void {} +export fn lroundf32() void {} +export fn lroundf32x() void {} +export fn lroundf64() void {} +export fn lroundf64x() void {} +export fn lroundl() void {} +export fn matherr() void {} +export fn modf() void {} +export fn modff() void {} +export fn modff128() void {} +export fn modff32() void {} +export fn modff32x() void {} +export fn modff64() void {} +export fn modff64x() void {} +export fn modfl() void {} +export fn nan() void {} +export fn nanf() void {} +export fn nanf128() void {} +export fn nanf32() void {} +export fn nanf32x() void {} +export fn nanf64() void {} +export fn nanf64x() void {} +export fn nanl() void {} +export fn nearbyint() void {} +export fn nearbyintf() void {} +export fn nearbyintf128() void {} +export fn nearbyintf32() void {} +export fn nearbyintf32x() void {} +export fn nearbyintf64() void {} +export fn nearbyintf64x() void {} +export fn nearbyintl() void {} +export fn nextafter() void {} +export fn nextafterf() void {} +export fn nextafterf128() void {} +export fn nextafterf32() void {} +export fn nextafterf32x() void {} +export fn nextafterf64() void {} +export fn nextafterf64x() void {} +export fn nextafterl() void {} +export fn nextdown() void {} +export fn nextdownf() void {} +export fn nextdownf128() void {} +export fn nextdownf32() void {} +export fn nextdownf32x() void {} +export fn nextdownf64() void {} +export fn nextdownf64x() void {} +export fn nextdownl() void {} +export fn nexttoward() void {} +export fn nexttowardf() void {} +export fn nexttowardl() void {} +export fn nextup() void {} +export fn nextupf() void {} +export fn nextupf128() void {} +export fn nextupf32() void {} +export fn nextupf32x() void {} +export fn nextupf64() void {} +export fn nextupf64x() void {} +export fn nextupl() void {} +export fn pow() void {} +export fn pow10() void {} +export fn pow10f() void {} +export fn pow10l() void {} +export fn powf() void {} +export fn powf128() void {} +export fn powf32() void {} +export fn powf32x() void {} +export fn powf64() void {} +export fn powf64x() void {} +export fn powl() void {} +export fn remainder() void {} +export fn remainderf() void {} +export fn remainderf128() void {} +export fn remainderf32() void {} +export fn remainderf32x() void {} +export fn remainderf64() void {} +export fn remainderf64x() void {} +export fn remainderl() void {} +export fn remquo() void {} +export fn remquof() void {} +export fn remquof128() void {} +export fn remquof32() void {} +export fn remquof32x() void {} +export fn remquof64() void {} +export fn remquof64x() void {} +export fn remquol() void {} +export fn rint() void {} +export fn rintf() void {} +export fn rintf128() void {} +export fn rintf32() void {} +export fn rintf32x() void {} +export fn rintf64() void {} +export fn rintf64x() void {} +export fn rintl() void {} +export fn round() void {} +export fn roundeven() void {} +export fn roundevenf() void {} +export fn roundevenf128() void {} +export fn roundevenf32() void {} +export fn roundevenf32x() void {} +export fn roundevenf64() void {} +export fn roundevenf64x() void {} +export fn roundevenl() void {} +export fn roundf() void {} +export fn roundf128() void {} +export fn roundf32() void {} +export fn roundf32x() void {} +export fn roundf64() void {} +export fn roundf64x() void {} +export fn roundl() void {} +export fn scalb() void {} +export fn scalbf() void {} +export fn scalbl() void {} +export fn scalbln() void {} +export fn scalblnf() void {} +export fn scalblnf128() void {} +export fn scalblnf32() void {} +export fn scalblnf32x() void {} +export fn scalblnf64() void {} +export fn scalblnf64x() void {} +export fn scalblnl() void {} +export fn scalbn() void {} +export fn scalbnf() void {} +export fn scalbnf128() void {} +export fn scalbnf32() void {} +export fn scalbnf32x() void {} +export fn scalbnf64() void {} +export fn scalbnf64x() void {} +export fn scalbnl() void {} +export fn setpayload() void {} +export fn setpayloadf() void {} +export fn setpayloadf128() void {} +export fn setpayloadf32() void {} +export fn setpayloadf32x() void {} +export fn setpayloadf64() void {} +export fn setpayloadf64x() void {} +export fn setpayloadl() void {} +export fn setpayloadsig() void {} +export fn setpayloadsigf() void {} +export fn setpayloadsigf128() void {} +export fn setpayloadsigf32() void {} +export fn setpayloadsigf32x() void {} +export fn setpayloadsigf64() void {} +export fn setpayloadsigf64x() void {} +export fn setpayloadsigl() void {} +export fn signgam() void {} +export fn significand() void {} +export fn significandf() void {} +export fn significandl() void {} +export fn sin() void {} +export fn sincos() void {} +export fn sincosf() void {} +export fn sincosf128() void {} +export fn sincosf32() void {} +export fn sincosf32x() void {} +export fn sincosf64() void {} +export fn sincosf64x() void {} +export fn sincosl() void {} +export fn sinf() void {} +export fn sinf128() void {} +export fn sinf32() void {} +export fn sinf32x() void {} +export fn sinf64() void {} +export fn sinf64x() void {} +export fn sinh() void {} +export fn sinhf() void {} +export fn sinhf128() void {} +export fn sinhf32() void {} +export fn sinhf32x() void {} +export fn sinhf64() void {} +export fn sinhf64x() void {} +export fn sinhl() void {} +export fn sinl() void {} +export fn sqrt() void {} +export fn sqrtf() void {} +export fn sqrtf128() void {} +export fn sqrtf32() void {} +export fn sqrtf32x() void {} +export fn sqrtf64() void {} +export fn sqrtf64x() void {} +export fn sqrtl() void {} +export fn tan() void {} +export fn tanf() void {} +export fn tanf128() void {} +export fn tanf32() void {} +export fn tanf32x() void {} +export fn tanf64() void {} +export fn tanf64x() void {} +export fn tanh() void {} +export fn tanhf() void {} +export fn tanhf128() void {} +export fn tanhf32() void {} +export fn tanhf32x() void {} +export fn tanhf64() void {} +export fn tanhf64x() void {} +export fn tanhl() void {} +export fn tanl() void {} +export fn tgamma() void {} +export fn tgammaf() void {} +export fn tgammaf128() void {} +export fn tgammaf32() void {} +export fn tgammaf32x() void {} +export fn tgammaf64() void {} +export fn tgammaf64x() void {} +export fn tgammal() void {} +export fn totalorder() void {} +export fn totalorderf() void {} +export fn totalorderf128() void {} +export fn totalorderf32() void {} +export fn totalorderf32x() void {} +export fn totalorderf64() void {} +export fn totalorderf64x() void {} +export fn totalorderl() void {} +export fn totalordermag() void {} +export fn totalordermagf() void {} +export fn totalordermagf128() void {} +export fn totalordermagf32() void {} +export fn totalordermagf32x() void {} +export fn totalordermagf64() void {} +export fn totalordermagf64x() void {} +export fn totalordermagl() void {} +export fn trunc() void {} +export fn truncf() void {} +export fn truncf128() void {} +export fn truncf32() void {} +export fn truncf32x() void {} +export fn truncf64() void {} +export fn truncf64x() void {} +export fn truncl() void {} +export fn ufromfp() void {} +export fn ufromfpf() void {} +export fn ufromfpf128() void {} +export fn ufromfpf32() void {} +export fn ufromfpf32x() void {} +export fn ufromfpf64() void {} +export fn ufromfpf64x() void {} +export fn ufromfpl() void {} +export fn ufromfpx() void {} +export fn ufromfpxf() void {} +export fn ufromfpxf128() void {} +export fn ufromfpxf32() void {} +export fn ufromfpxf32x() void {} +export fn ufromfpxf64() void {} +export fn ufromfpxf64x() void {} +export fn ufromfpxl() void {} +export fn y0() void {} +export fn y0f() void {} +export fn y0f128() void {} +export fn y0f32() void {} +export fn y0f32x() void {} +export fn y0f64() void {} +export fn y0f64x() void {} +export fn y0l() void {} +export fn y1() void {} +export fn y1f() void {} +export fn y1f128() void {} +export fn y1f32() void {} +export fn y1f32x() void {} +export fn y1f64() void {} +export fn y1f64x() void {} +export fn y1l() void {} +export fn yn() void {} +export fn ynf() void {} +export fn ynf128() void {} +export fn ynf32() void {} +export fn ynf32x() void {} +export fn ynf64() void {} +export fn ynf64x() void {} +export fn ynl() void {} diff --git a/libc/dummy/pthread.zig b/libc/dummy/pthread.zig new file mode 100644 index 0000000000..d0719e290f --- /dev/null +++ b/libc/dummy/pthread.zig @@ -0,0 +1,263 @@ +const builtin = @import("builtin"); +pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn { + unreachable; +} + +// This file exists to create a libpthread.so file so that LLD has something to look at +// and emit linker errors if an attempt to link against a non-existent C symbol happens. + +export fn _IO_flockfile() void {} +export fn _IO_ftrylockfile() void {} +export fn _IO_funlockfile() void {} +export fn __close() void {} +export fn __connect() void {} +export fn __errno_location() void {} +export fn __fcntl() void {} +export fn __fork() void {} +export fn __h_errno_location() void {} +export fn __libc_allocate_rtsig() void {} +export fn __libc_current_sigrtmax() void {} +export fn __libc_current_sigrtmin() void {} +export fn __libpthread_freeres() void {} +export fn __lseek() void {} +export fn __nanosleep() void {} +export fn __open() void {} +export fn __open64() void {} +export fn __pread64() void {} +export fn __pthread_barrier_init() void {} +export fn __pthread_barrier_wait() void {} +export fn __pthread_cleanup_routine() void {} +export fn __pthread_clock_gettime() void {} +export fn __pthread_clock_settime() void {} +export fn __pthread_get_minstack() void {} +export fn __pthread_getspecific() void {} +export fn __pthread_initialize_minimal() void {} +export fn __pthread_key_create() void {} +export fn __pthread_mutex_destroy() void {} +export fn __pthread_mutex_init() void {} +export fn __pthread_mutex_lock() void {} +export fn __pthread_mutex_trylock() void {} +export fn __pthread_mutex_unlock() void {} +export fn __pthread_mutexattr_destroy() void {} +export fn __pthread_mutexattr_init() void {} +export fn __pthread_mutexattr_settype() void {} +export fn __pthread_once() void {} +export fn __pthread_register_cancel() void {} +export fn __pthread_register_cancel_defer() void {} +export fn __pthread_rwlock_destroy() void {} +export fn __pthread_rwlock_init() void {} +export fn __pthread_rwlock_rdlock() void {} +export fn __pthread_rwlock_tryrdlock() void {} +export fn __pthread_rwlock_trywrlock() void {} +export fn __pthread_rwlock_unlock() void {} +export fn __pthread_rwlock_wrlock() void {} +export fn __pthread_setspecific() void {} +export fn __pthread_unregister_cancel() void {} +export fn __pthread_unregister_cancel_restore() void {} +export fn __pthread_unwind() void {} +export fn __pthread_unwind_next() void {} +export fn __pwrite64() void {} +export fn __read() void {} +export fn __res_state() void {} +export fn __send() void {} +export fn __shm_directory() void {} +export fn __sigaction() void {} +export fn __vfork() void {} +export fn __wait() void {} +export fn __write() void {} +export fn _pthread_cleanup_pop() void {} +export fn _pthread_cleanup_pop_restore() void {} +export fn _pthread_cleanup_push() void {} +export fn _pthread_cleanup_push_defer() void {} +export fn accept() void {} +export fn call_once() void {} +export fn close() void {} +export fn cnd_broadcast() void {} +export fn cnd_destroy() void {} +export fn cnd_init() void {} +export fn cnd_signal() void {} +export fn cnd_timedwait() void {} +export fn cnd_wait() void {} +export fn connect() void {} +export fn fcntl() void {} +export fn flockfile() void {} +export fn fork() void {} +export fn fsync() void {} +export fn ftrylockfile() void {} +export fn funlockfile() void {} +export fn longjmp() void {} +export fn lseek() void {} +export fn lseek64() void {} +export fn msync() void {} +export fn mtx_destroy() void {} +export fn mtx_init() void {} +export fn mtx_lock() void {} +export fn mtx_timedlock() void {} +export fn mtx_trylock() void {} +export fn mtx_unlock() void {} +export fn nanosleep() void {} +export fn open() void {} +export fn open64() void {} +export fn pause() void {} +export fn pread() void {} +export fn pread64() void {} +export fn pthread_atfork() void {} +export fn pthread_attr_destroy() void {} +export fn pthread_attr_getaffinity_np() void {} +export fn pthread_attr_getdetachstate() void {} +export fn pthread_attr_getguardsize() void {} +export fn pthread_attr_getinheritsched() void {} +export fn pthread_attr_getschedparam() void {} +export fn pthread_attr_getschedpolicy() void {} +export fn pthread_attr_getscope() void {} +export fn pthread_attr_getstack() void {} +export fn pthread_attr_getstackaddr() void {} +export fn pthread_attr_getstacksize() void {} +export fn pthread_attr_init() void {} +export fn pthread_attr_setaffinity_np() void {} +export fn pthread_attr_setdetachstate() void {} +export fn pthread_attr_setguardsize() void {} +export fn pthread_attr_setinheritsched() void {} +export fn pthread_attr_setschedparam() void {} +export fn pthread_attr_setschedpolicy() void {} +export fn pthread_attr_setscope() void {} +export fn pthread_attr_setstack() void {} +export fn pthread_attr_setstackaddr() void {} +export fn pthread_attr_setstacksize() void {} +export fn pthread_barrier_destroy() void {} +export fn pthread_barrier_init() void {} +export fn pthread_barrier_wait() void {} +export fn pthread_barrierattr_destroy() void {} +export fn pthread_barrierattr_getpshared() void {} +export fn pthread_barrierattr_init() void {} +export fn pthread_barrierattr_setpshared() void {} +export fn pthread_cancel() void {} +export fn pthread_cond_broadcast() void {} +export fn pthread_cond_destroy() void {} +export fn pthread_cond_init() void {} +export fn pthread_cond_signal() void {} +export fn pthread_cond_timedwait() void {} +export fn pthread_cond_wait() void {} +export fn pthread_condattr_destroy() void {} +export fn pthread_condattr_getclock() void {} +export fn pthread_condattr_getpshared() void {} +export fn pthread_condattr_init() void {} +export fn pthread_condattr_setclock() void {} +export fn pthread_condattr_setpshared() void {} +export fn pthread_create() void {} +export fn pthread_detach() void {} +export fn pthread_equal() void {} +export fn pthread_exit() void {} +export fn pthread_getaffinity_np() void {} +export fn pthread_getattr_default_np() void {} +export fn pthread_getattr_np() void {} +export fn pthread_getconcurrency() void {} +export fn pthread_getcpuclockid() void {} +export fn pthread_getname_np() void {} +export fn pthread_getschedparam() void {} +export fn pthread_getspecific() void {} +export fn pthread_join() void {} +export fn pthread_key_create() void {} +export fn pthread_key_delete() void {} +export fn pthread_kill() void {} +export fn pthread_kill_other_threads_np() void {} +export fn pthread_mutex_consistent() void {} +export fn pthread_mutex_consistent_np() void {} +export fn pthread_mutex_destroy() void {} +export fn pthread_mutex_getprioceiling() void {} +export fn pthread_mutex_init() void {} +export fn pthread_mutex_lock() void {} +export fn pthread_mutex_setprioceiling() void {} +export fn pthread_mutex_timedlock() void {} +export fn pthread_mutex_trylock() void {} +export fn pthread_mutex_unlock() void {} +export fn pthread_mutexattr_destroy() void {} +export fn pthread_mutexattr_getkind_np() void {} +export fn pthread_mutexattr_getprioceiling() void {} +export fn pthread_mutexattr_getprotocol() void {} +export fn pthread_mutexattr_getpshared() void {} +export fn pthread_mutexattr_getrobust() void {} +export fn pthread_mutexattr_getrobust_np() void {} +export fn pthread_mutexattr_gettype() void {} +export fn pthread_mutexattr_init() void {} +export fn pthread_mutexattr_setkind_np() void {} +export fn pthread_mutexattr_setprioceiling() void {} +export fn pthread_mutexattr_setprotocol() void {} +export fn pthread_mutexattr_setpshared() void {} +export fn pthread_mutexattr_setrobust() void {} +export fn pthread_mutexattr_setrobust_np() void {} +export fn pthread_mutexattr_settype() void {} +export fn pthread_once() void {} +export fn pthread_rwlock_destroy() void {} +export fn pthread_rwlock_init() void {} +export fn pthread_rwlock_rdlock() void {} +export fn pthread_rwlock_timedrdlock() void {} +export fn pthread_rwlock_timedwrlock() void {} +export fn pthread_rwlock_tryrdlock() void {} +export fn pthread_rwlock_trywrlock() void {} +export fn pthread_rwlock_unlock() void {} +export fn pthread_rwlock_wrlock() void {} +export fn pthread_rwlockattr_destroy() void {} +export fn pthread_rwlockattr_getkind_np() void {} +export fn pthread_rwlockattr_getpshared() void {} +export fn pthread_rwlockattr_init() void {} +export fn pthread_rwlockattr_setkind_np() void {} +export fn pthread_rwlockattr_setpshared() void {} +export fn pthread_self() void {} +export fn pthread_setaffinity_np() void {} +export fn pthread_setattr_default_np() void {} +export fn pthread_setcancelstate() void {} +export fn pthread_setcanceltype() void {} +export fn pthread_setconcurrency() void {} +export fn pthread_setname_np() void {} +export fn pthread_setschedparam() void {} +export fn pthread_setschedprio() void {} +export fn pthread_setspecific() void {} +export fn pthread_sigmask() void {} +export fn pthread_sigqueue() void {} +export fn pthread_spin_destroy() void {} +export fn pthread_spin_init() void {} +export fn pthread_spin_lock() void {} +export fn pthread_spin_trylock() void {} +export fn pthread_spin_unlock() void {} +export fn pthread_testcancel() void {} +export fn pthread_timedjoin_np() void {} +export fn pthread_tryjoin_np() void {} +export fn pthread_yield() void {} +export fn pwrite() void {} +export fn pwrite64() void {} +export fn raise() void {} +export fn read() void {} +export fn recv() void {} +export fn recvfrom() void {} +export fn recvmsg() void {} +export fn sem_close() void {} +export fn sem_destroy() void {} +export fn sem_getvalue() void {} +export fn sem_init() void {} +export fn sem_open() void {} +export fn sem_post() void {} +export fn sem_timedwait() void {} +export fn sem_trywait() void {} +export fn sem_unlink() void {} +export fn sem_wait() void {} +export fn send() void {} +export fn sendmsg() void {} +export fn sendto() void {} +export fn sigaction() void {} +export fn siglongjmp() void {} +export fn sigwait() void {} +export fn system() void {} +export fn tcdrain() void {} +export fn thrd_create() void {} +export fn thrd_detach() void {} +export fn thrd_exit() void {} +export fn thrd_join() void {} +export fn tss_create() void {} +export fn tss_delete() void {} +export fn tss_get() void {} +export fn tss_set() void {} +export fn vfork() void {} +export fn wait() void {} +export fn waitpid() void {} +export fn write() void {} diff --git a/libc/dummy/rt.zig b/libc/dummy/rt.zig new file mode 100644 index 0000000000..c0fd9894e3 --- /dev/null +++ b/libc/dummy/rt.zig @@ -0,0 +1,48 @@ +const builtin = @import("builtin"); +pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn { + unreachable; +} + +// This file exists to create a librt.so file so that LLD has something to look at +// and emit linker errors if an attempt to link against a non-existent C symbol happens. + +export fn __mq_open_2() void {} +export fn aio_cancel() void {} +export fn aio_cancel64() void {} +export fn aio_error() void {} +export fn aio_error64() void {} +export fn aio_fsync() void {} +export fn aio_fsync64() void {} +export fn aio_init() void {} +export fn aio_read() void {} +export fn aio_read64() void {} +export fn aio_return() void {} +export fn aio_return64() void {} +export fn aio_suspend() void {} +export fn aio_suspend64() void {} +export fn aio_write() void {} +export fn aio_write64() void {} +export fn clock_getcpuclockid() void {} +export fn clock_getres() void {} +export fn clock_gettime() void {} +export fn clock_nanosleep() void {} +export fn clock_settime() void {} +export fn lio_listio() void {} +export fn lio_listio64() void {} +export fn mq_close() void {} +export fn mq_getattr() void {} +export fn mq_notify() void {} +export fn mq_open() void {} +export fn mq_receive() void {} +export fn mq_send() void {} +export fn mq_setattr() void {} +export fn mq_timedreceive() void {} +export fn mq_timedsend() void {} +export fn mq_unlink() void {} +export fn shm_open() void {} +export fn shm_unlink() void {} +export fn timer_create() void {} +export fn timer_delete() void {} +export fn timer_getoverrun() void {} +export fn timer_gettime() void {} +export fn timer_settime() void {} diff --git a/src/codegen.cpp b/src/codegen.cpp index ad4ecce857..599195c093 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -9148,6 +9148,7 @@ static void resolve_out_paths(CodeGen *g) { return; } + const char *prefix = ""; const char *extname; switch (g->out_type) { case OutTypeUnknown: @@ -9159,6 +9160,7 @@ static void resolve_out_paths(CodeGen *g) { extname = target_exe_file_ext(g->zig_target); break; case OutTypeLib: + prefix = target_lib_file_prefix(g->zig_target); extname = target_lib_file_ext(g->zig_target, g->is_static, g->version_major, g->version_minor, g->version_patch); break; @@ -9167,7 +9169,8 @@ static void resolve_out_paths(CodeGen *g) { assert(g->root_out_name); Buf basename = BUF_INIT; - buf_init_from_buf(&basename, g->root_out_name); + buf_init_from_str(&basename, prefix); + buf_append_buf(&basename, g->root_out_name); buf_append_str(&basename, extname); if (g->enable_cache || g->is_test_build) { os_path_join(&g->artifact_dir, &basename, &g->output_file_path); diff --git a/src/link.cpp b/src/link.cpp index 320d1204d2..6a626a2460 100644 --- a/src/link.cpp +++ b/src/link.cpp @@ -70,6 +70,17 @@ static const char *path_from_libc(CodeGen *g, const char *subpath) { return buf_ptr(result); } +static const char *build_dummy_so(CodeGen *parent, const char *name, size_t major_version) { + Buf *glibc_dummy_root_src = buf_sprintf("%s" OS_SEP "libc" OS_SEP "dummy" OS_SEP "%s.zig", + buf_ptr(parent->zig_lib_dir), name); + CodeGen *child_gen = create_child_codegen(parent, glibc_dummy_root_src, OutTypeLib, nullptr); + codegen_set_out_name(child_gen, buf_create_from_str(name)); + codegen_set_lib_version(child_gen, major_version, 0, 0); + child_gen->is_static = false; + codegen_build_and_link(child_gen); + return buf_ptr(&child_gen->output_file_path); +} + static const char *get_libc_crt_file(CodeGen *parent, const char *file) { if (parent->libc == nullptr && target_is_glibc(parent)) { if (strcmp(file, "crti.o") == 0) { @@ -181,13 +192,15 @@ static const char *get_libc_crt_file(CodeGen *parent, const char *file) { codegen_build_and_link(child_gen); return buf_ptr(&child_gen->output_file_path); } else if (strcmp(file, "libc.so.6") == 0) { - Buf *glibc_dummy_root_src = buf_create_from_str(path_from_libc(parent, "symbols.zig")); - CodeGen *child_gen = create_child_codegen(parent, glibc_dummy_root_src, OutTypeLib, nullptr); - codegen_set_out_name(child_gen, buf_create_from_str("c")); - codegen_set_lib_version(child_gen, 6, 0, 0); - child_gen->is_static = false; - codegen_build_and_link(child_gen); - return buf_ptr(&child_gen->output_file_path); + return build_dummy_so(parent, "c", 6); + } else if (strcmp(file, "libm.so.6") == 0) { + return build_dummy_so(parent, "m", 6); + } else if (strcmp(file, "libpthread.so.0") == 0) { + return build_dummy_so(parent, "pthread", 0); + } else if (strcmp(file, "librt.so.1") == 0) { + return build_dummy_so(parent, "rt", 1); + } else if (strcmp(file, "libdl.so.2") == 0) { + return build_dummy_so(parent, "dl", 2); } else if (strcmp(file, "libc_nonshared.a") == 0) { CodeGen *child_gen = create_child_codegen(parent, nullptr, OutTypeLib, nullptr); codegen_set_out_name(child_gen, buf_create_from_str("c_nonshared")); @@ -549,6 +562,22 @@ static void construct_linker_job_elf(LinkJob *lj) { if (buf_eql_str(link_lib->name, "c")) { continue; } + if (g->libc == nullptr && target_is_glibc(g)) { + // glibc + if (buf_eql_str(link_lib->name, "m")) { + lj->args.append(get_libc_crt_file(g, "libm.so.6")); // this is our dummy so file + continue; + } else if (buf_eql_str(link_lib->name, "pthread")) { + lj->args.append(get_libc_crt_file(g, "libpthread.so.0")); // this is our dummy so file + continue; + } else if (buf_eql_str(link_lib->name, "dl")) { + lj->args.append(get_libc_crt_file(g, "libdl.so.2")); // this is our dummy so file + continue; + } else if (buf_eql_str(link_lib->name, "rt")) { + lj->args.append(get_libc_crt_file(g, "librt.so.1")); // this is our dummy so file + continue; + } + } Buf *arg; if (buf_starts_with_str(link_lib->name, "/") || buf_ends_with_str(link_lib->name, ".a") || buf_ends_with_str(link_lib->name, ".so")) diff --git a/src/target.cpp b/src/target.cpp index 5d64d7cc95..e3feab266b 100644 --- a/src/target.cpp +++ b/src/target.cpp @@ -922,6 +922,14 @@ const char *target_exe_file_ext(const ZigTarget *target) { } } +const char *target_lib_file_prefix(const ZigTarget *target) { + if (target->os == OsWindows || target->os == OsUefi) { + return ""; + } else { + return "lib"; + } +} + const char *target_lib_file_ext(const ZigTarget *target, bool is_static, size_t version_major, size_t version_minor, size_t version_patch) { diff --git a/src/target.hpp b/src/target.hpp index de517a4e80..f37b4b3a9d 100644 --- a/src/target.hpp +++ b/src/target.hpp @@ -143,6 +143,7 @@ const char *target_o_file_ext(const ZigTarget *target); const char *target_asm_file_ext(const ZigTarget *target); const char *target_llvm_ir_file_ext(const ZigTarget *target); const char *target_exe_file_ext(const ZigTarget *target); +const char *target_lib_file_prefix(const ZigTarget *target); const char *target_lib_file_ext(const ZigTarget *target, bool is_static, size_t version_major, size_t version_minor, size_t version_patch);