From d3e8342d128b638d1a6dd0e85298e604ffdd57fa Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Fri, 10 May 2024 21:50:48 -0700 Subject: [PATCH 1/8] Alias symbols --- .../bindings/workaround-missing-symbols.cpp | 152 ++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/src/bun.js/bindings/workaround-missing-symbols.cpp b/src/bun.js/bindings/workaround-missing-symbols.cpp index 5db3610ca4955..04a6f9ceb0ab0 100644 --- a/src/bun.js/bindings/workaround-missing-symbols.cpp +++ b/src/bun.js/bindings/workaround-missing-symbols.cpp @@ -268,6 +268,158 @@ extern "C" int __wrap_mknodat(int dirfd, const char* path, __mode_t mode, __dev_ #include #include +#include +#include +#include +#include +#include +#include + +#pragma mark - Aliases +// To get the list of symbols from bun, run: +// +// nm -g $(which bun-debug) +// +// To get the list of $NOCANCEL symbols, run: +// +// curl https://raw.githubusercontent.com/apple-oss-distributions/xnu/main/bsd/kern/syscalls.master | grep _nocancel +// +// This enforces we only use the $NOCANCEL version of these syscalls without having to change every call site. +// It would be better to do this via `-alias` in the linker, but for reasons that aren't clear, that doesn't work. +extern "C" int connect$NOCANCEL(int fd, const struct sockaddr* addr, socklen_t addrlen); +extern "C" int connect(int fd, const struct sockaddr* addr, socklen_t addrlen) +{ + return connect$NOCANCEL(fd, addr, addrlen); +} + +extern "C" int accept$NOCANCEL(int fd, struct sockaddr* __restrict addr, socklen_t* __restrict addrlen); +extern "C" int accept(int fd, struct sockaddr* __restrict addr, socklen_t* __restrict addrlen) +{ + return accept$NOCANCEL(fd, addr, addrlen); +} + +extern "C" int close$NOCANCEL(int fd); +extern "C" int close(int fd) +{ + return close$NOCANCEL(fd); +} + +extern "C" int fcntl$NOCANCEL(int fd, int cmd, ...); +extern "C" int fcntl(int fd, int cmd, ...) +{ + va_list va; + va_start(va, cmd); + return fcntl$NOCANCEL(fd, cmd, va_arg(va, long)); +} +extern "C" int fsync$NOCANCEL(int fd); +extern "C" int fsync(int fd) +{ + return fsync$NOCANCEL(fd); +} + +extern "C" int openat$NOCANCEL(int fd, const char* path, int flags, ...); +extern "C" int openat(int fd, const char* path, int flags, int mode) +{ + return openat$NOCANCEL(fd, path, flags, mode); +} + +#ifndef AT_FDCWD +#define AT_FDCWD -2 +#endif + +extern "C" int open(const char* path, int flags, ...) +{ + va_list va; + va_start(va, flags); + return openat$NOCANCEL(AT_FDCWD, path, flags, va_arg(va, void*)); +} + +extern "C" int read$NOCANCEL(int fd, void* buf, size_t count); +extern "C" int read(int fd, void* buf, size_t count) +{ + return read$NOCANCEL(fd, buf, count); +} + +extern "C" int write$NOCANCEL(int fd, const void* buf, size_t count); +extern "C" int write(int fd, const void* buf, size_t count) +{ + return write$NOCANCEL(fd, buf, count); +} + +extern "C" int recvfrom$NOCANCEL(int fd, void* buf, size_t count, int flags, struct sockaddr* __restrict addr, socklen_t* __restrict addrlen); +extern "C" int recvfrom(int fd, void* buf, size_t count, int flags, struct sockaddr* __restrict addr, socklen_t* __restrict addrlen) +{ + return recvfrom$NOCANCEL(fd, buf, count, flags, addr, addrlen); +} + +extern "C" int recv$NOCANCEL(int fd, void* buf, size_t count, int flags); +extern "C" int recv(int fd, void* buf, size_t count, int flags) +{ + return recv$NOCANCEL(fd, buf, count, flags); +} + +extern "C" int sendmsg$NOCANCEL(int fd, const struct msghdr* msg, int flags); +extern "C" int sendmsg(int fd, const struct msghdr* msg, int flags) +{ + return sendmsg$NOCANCEL(fd, msg, flags); +} + +typedef unsigned int nfds_t; +extern "C" int poll$NOCANCEL(struct pollfd* fds, unsigned int nfds, int timeout); +extern "C" int poll(struct pollfd* fds, unsigned int nfds, int timeout) +{ + return poll$NOCANCEL(fds, nfds, timeout); +} + +extern "C" int select$NOCANCEL(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout); +extern "C" int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout) +{ + return select$NOCANCEL(nfds, readfds, writefds, exceptfds, timeout); +} + +extern "C" int pread$NOCANCEL(int fd, void* buf, size_t count, off_t offset); +extern "C" int pread(int fd, void* buf, size_t count, off_t offset) +{ + return pread$NOCANCEL(fd, buf, count, offset); +} + +extern "C" int pwrite$NOCANCEL(int fd, const void* buf, size_t count, off_t offset); +extern "C" int pwrite(int fd, const void* buf, size_t count, off_t offset) +{ + return pwrite$NOCANCEL(fd, buf, count, offset); +} + +extern "C" int pwritev$NOCANCEL(int fd, const struct iovec* iov, int iovcnt, off_t offset); +extern "C" int pwritev(int fd, const struct iovec* iov, int iovcnt, off_t offset) +{ + return pwritev$NOCANCEL(fd, iov, iovcnt, offset); +} + +extern "C" int readv$NOCANCEL(int fd, const struct iovec* iov, int iovcnt); +extern "C" int readv(int fd, const struct iovec* iov, int iovcnt) +{ + return readv$NOCANCEL(fd, iov, iovcnt); +} + +extern "C" int msync$NOCANCEL(void* addr, size_t length, int flags); +extern "C" int msync(void* addr, size_t length, int flags) +{ + return msync$NOCANCEL(addr, length, flags); +} + +extern "C" int writev$NOCANCEL(int fd, const struct iovec* iov, int iovcnt); +extern "C" int writev(int fd, const struct iovec* iov, int iovcnt) +{ + return writev$NOCANCEL(fd, iov, iovcnt); +} + +extern "C" int waitpid$NOCANCEL(pid_t pid, int* status, int options); +extern "C" int waitpid(pid_t pid, int* status, int options) +{ + return waitpid$NOCANCEL(pid, status, options); +} + +#pragma mark - Overrides extern "C" int pthread_self_is_exiting_np() { From 1e08abffdd07eb4946be87a333a6a78b55f59191 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Fri, 10 May 2024 22:20:38 -0700 Subject: [PATCH 2/8] Fix build errors probably --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04b8ae90adac1..8e6163a192250 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1121,6 +1121,8 @@ if(APPLE) target_link_options(${bun} PUBLIC "-dead_strip_dylibs") target_link_options(${bun} PUBLIC "-Wl,-stack_size,0x1200000") target_link_options(${bun} PUBLIC "-exported_symbols_list" "${BUN_SRC}/symbols.txt") + target_link_options(${bun} PUBLIC "-Wl,-ld_classic") + target_link_options(${bun} PUBLIC "-Wl,-mllvm,-opaque-pointers") set_target_properties(${bun} PROPERTIES LINK_DEPENDS "${BUN_SRC}/symbols.txt") target_link_options(${bun} PUBLIC "-fno-keep-static-consts") From 7d7e429c09b1a845335f530256ff4a48f7fcd22b Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Fri, 10 May 2024 22:36:12 -0700 Subject: [PATCH 3/8] Update CMakeLists.txt --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e6163a192250..fbc55f6cc0140 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1121,7 +1121,9 @@ if(APPLE) target_link_options(${bun} PUBLIC "-dead_strip_dylibs") target_link_options(${bun} PUBLIC "-Wl,-stack_size,0x1200000") target_link_options(${bun} PUBLIC "-exported_symbols_list" "${BUN_SRC}/symbols.txt") - target_link_options(${bun} PUBLIC "-Wl,-ld_classic") + + # Must be anbled after macOS 14 + # target_link_options(${bun} PUBLIC "-Wl,-ld_classic") target_link_options(${bun} PUBLIC "-Wl,-mllvm,-opaque-pointers") set_target_properties(${bun} PROPERTIES LINK_DEPENDS "${BUN_SRC}/symbols.txt") From eec916410db6082058fd4b741568d4472f53dd61 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Fri, 10 May 2024 23:52:56 -0700 Subject: [PATCH 4/8] More consistent --- CMakeLists.txt | 4 ++++ packages/bun-usockets/src/bsd.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index fbc55f6cc0140..97f23233392f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -931,6 +931,10 @@ set_target_properties(${bun} PROPERTIES VISIBILITY_INLINES_HIDDEN YES ) +if(APPLE) + add_compile_definitions("__APPLE_USE_RFC_3542=1") +Endif() + add_compile_definitions( # TODO: are all of these variables strictly necessary? diff --git a/packages/bun-usockets/src/bsd.c b/packages/bun-usockets/src/bsd.c index 0e9c435ffa3de..79bde92be71b3 100644 --- a/packages/bun-usockets/src/bsd.c +++ b/packages/bun-usockets/src/bsd.c @@ -17,7 +17,9 @@ /* Todo: this file should lie in networking/bsd.c */ +#ifndef __APPLE_USE_RFC_3542 #define __APPLE_USE_RFC_3542 +#endif #include "libusockets.h" #include "internal/internal.h" From 83b9f9eaf0b259609755bb79102905c9a70252ea Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sat, 11 May 2024 00:15:07 -0700 Subject: [PATCH 5/8] Update workaround-missing-symbols.cpp --- src/bun.js/bindings/workaround-missing-symbols.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/bun.js/bindings/workaround-missing-symbols.cpp b/src/bun.js/bindings/workaround-missing-symbols.cpp index 04a6f9ceb0ab0..4a1a1fa0266e9 100644 --- a/src/bun.js/bindings/workaround-missing-symbols.cpp +++ b/src/bun.js/bindings/workaround-missing-symbols.cpp @@ -292,11 +292,12 @@ extern "C" int connect(int fd, const struct sockaddr* addr, socklen_t addrlen) return connect$NOCANCEL(fd, addr, addrlen); } -extern "C" int accept$NOCANCEL(int fd, struct sockaddr* __restrict addr, socklen_t* __restrict addrlen); -extern "C" int accept(int fd, struct sockaddr* __restrict addr, socklen_t* __restrict addrlen) -{ - return accept$NOCANCEL(fd, addr, addrlen); -} +// We cannot use accept() due to an obscure linking issue with WebKit +// extern "C" int accept$NOCANCEL(int fd, struct sockaddr* __restrict addr, socklen_t* __restrict addrlen); +// extern "C" int accept(int fd, struct sockaddr* __restrict addr, socklen_t* __restrict addrlen) +// { +// return accept$NOCANCEL(fd, addr, addrlen); +// } extern "C" int close$NOCANCEL(int fd); extern "C" int close(int fd) From 11fbebf43e3314cfeecb045bcdbaf31caa1cd17c Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sat, 11 May 2024 01:06:46 -0700 Subject: [PATCH 6/8] macos 13 --- .github/workflows/build-darwin.yml | 2 +- .github/workflows/ci.yml | 12 ++++++------ .github/workflows/create-release-build.yml | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-darwin.yml b/.github/workflows/build-darwin.yml index bbeb946bde30f..6a7f4a4b2360a 100644 --- a/.github/workflows/build-darwin.yml +++ b/.github/workflows/build-darwin.yml @@ -9,7 +9,7 @@ on: inputs: runs-on: type: string - default: macos-12-large + default: macos-13-large tag: type: string required: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 102ae36cd86b7..92ce080245940 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,7 +84,7 @@ jobs: uses: ./.github/workflows/build-darwin.yml secrets: inherit with: - runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-12-large' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-13-large' || 'macos-13' }} tag: darwin-x64 arch: x64 cpu: haswell @@ -95,7 +95,7 @@ jobs: uses: ./.github/workflows/build-darwin.yml secrets: inherit with: - runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-12-large' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-13-large' || 'macos-13' }} tag: darwin-x64-baseline arch: x64 cpu: nehalem @@ -106,7 +106,7 @@ jobs: uses: ./.github/workflows/build-darwin.yml secrets: inherit with: - runs-on: ${{ github.repository_owner == 'oven-sh' && 'namespace-profile-bun-ci-darwin-aarch64' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'namespace-profile-bun-ci-darwin-aarch64' || 'macos-13' }} tag: darwin-aarch64 arch: aarch64 cpu: native @@ -175,7 +175,7 @@ jobs: with: run-id: ${{ inputs.run-id }} pr-number: ${{ github.event.number }} - runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-12-large' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-13-large' || 'macos-13' }} tag: darwin-x64 darwin-x64-baseline-test: if: ${{ inputs.run-id || github.event_name == 'pull_request' }} @@ -186,7 +186,7 @@ jobs: with: run-id: ${{ inputs.run-id }} pr-number: ${{ github.event.number }} - runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-12-large' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-13-large' || 'macos-13' }} tag: darwin-x64-baseline darwin-aarch64-test: if: ${{ inputs.run-id || github.event_name == 'pull_request' }} @@ -197,7 +197,7 @@ jobs: with: run-id: ${{ inputs.run-id }} pr-number: ${{ github.event.number }} - runs-on: ${{ github.repository_owner == 'oven-sh' && 'namespace-profile-bun-ci-darwin-aarch64' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'namespace-profile-bun-ci-darwin-aarch64' || 'macos-13' }} tag: darwin-aarch64 windows-x64-test: if: ${{ inputs.run-id || github.event_name == 'pull_request' }} diff --git a/.github/workflows/create-release-build.yml b/.github/workflows/create-release-build.yml index e9aa5796fec42..42adea058572c 100644 --- a/.github/workflows/create-release-build.yml +++ b/.github/workflows/create-release-build.yml @@ -90,7 +90,7 @@ jobs: uses: ./.github/workflows/build-darwin.yml secrets: inherit with: - runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-12-large' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-13-large' || 'macos-13' }} tag: darwin-x64 arch: x64 cpu: haswell @@ -100,7 +100,7 @@ jobs: uses: ./.github/workflows/build-darwin.yml secrets: inherit with: - runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-12-large' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'macos-13-large' || 'macos-13' }} tag: darwin-x64-baseline arch: x64 cpu: nehalem @@ -110,7 +110,7 @@ jobs: uses: ./.github/workflows/build-darwin.yml secrets: inherit with: - runs-on: ${{ github.repository_owner == 'oven-sh' && 'namespace-profile-bun-ci-darwin-aarch64' || 'macos-12' }} + runs-on: ${{ github.repository_owner == 'oven-sh' && 'namespace-profile-bun-ci-darwin-aarch64' || 'macos-13' }} tag: darwin-aarch64 arch: aarch64 cpu: native From 518d0a487e1b8318250933d5a5a93bdbfddf6845 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sat, 11 May 2024 01:07:29 -0700 Subject: [PATCH 7/8] Update CMakeLists.txt --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 97f23233392f7..713ba065eb220 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1128,7 +1128,6 @@ if(APPLE) # Must be anbled after macOS 14 # target_link_options(${bun} PUBLIC "-Wl,-ld_classic") - target_link_options(${bun} PUBLIC "-Wl,-mllvm,-opaque-pointers") set_target_properties(${bun} PROPERTIES LINK_DEPENDS "${BUN_SRC}/symbols.txt") target_link_options(${bun} PUBLIC "-fno-keep-static-consts") From d31311015d74b0ac91c7778da63a7f6d6e88cd21 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sat, 11 May 2024 01:07:40 -0700 Subject: [PATCH 8/8] Update CMakeLists.txt --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 713ba065eb220..b162822bcd8d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1126,8 +1126,6 @@ if(APPLE) target_link_options(${bun} PUBLIC "-Wl,-stack_size,0x1200000") target_link_options(${bun} PUBLIC "-exported_symbols_list" "${BUN_SRC}/symbols.txt") - # Must be anbled after macOS 14 - # target_link_options(${bun} PUBLIC "-Wl,-ld_classic") set_target_properties(${bun} PROPERTIES LINK_DEPENDS "${BUN_SRC}/symbols.txt") target_link_options(${bun} PUBLIC "-fno-keep-static-consts")