Browse Source

fix: asan build on macOS (#45541)

* fix: asan build on macOS

* chore: fix build
Robo 2 months ago
parent
commit
46d316692d

+ 1 - 0
patches/node/.patches

@@ -38,3 +38,4 @@ build_use_third_party_simdutf.patch
 fix_remove_fastapitypedarray_usage.patch
 test_handle_explicit_resource_management_globals.patch
 linux_try_preadv64_pwritev64_before_preadv_pwritev_4683.patch
+build_remove_explicit_linker_call_to_libm_on_macos.patch

+ 59 - 0
patches/node/build_remove_explicit_linker_call_to_libm_on_macos.patch

@@ -0,0 +1,59 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: deepak1556 <[email protected]>
+Date: Mon, 3 Feb 2025 21:44:36 +0900
+Subject: build: remove explicit linker call to libm on macOS
+
+/usr/lib/libm.tbd is available via libSystem.*.dylib and
+reexports sanitizer symbols. When building for asan
+this becomes an issue as the linker will resolve the symbols
+from the system library rather from libclang_rt.*
+
+For V8 that rely on specific version of these symbols
+that get bundled as part of clang, for ex:
+https://source.chromium.org/chromium/chromium/src/+/main:v8/src/heap/cppgc/platform.cc;l=93-97
+accepting nullptr for shadow_offset in `asan_get_shadow_mapping`,
+linking to system version that doesn't support this will lead to
+a crash.
+
+Clang driver eventually links with `-lSystem`
+https://github.com/llvm/llvm-project/blob/e82f93890daefeb38fe2a22ee3db87a89948ec57/clang/lib/Driver/ToolChains/Darwin.cpp#L1628-L1631,
+this is done after linking the sanitizer libraries which
+ensures right order of resolution for the symbols.
+
+PR-URL: https://github.com/nodejs/node/pull/56901
+Reviewed-By: Joyee Cheung <[email protected]>
+Reviewed-By: Chengzhong Wu <[email protected]>
+Reviewed-By: Luigi Pinca <[email protected]>
+Reviewed-By: Shelley Vohr <[email protected]>
+
+diff --git a/deps/brotli/unofficial.gni b/deps/brotli/unofficial.gni
+index 5e07e106672a04508a77584c109c97a67926c858..91001fa43ea4807d061f296eaeccb7512e34863e 100644
+--- a/deps/brotli/unofficial.gni
++++ b/deps/brotli/unofficial.gni
+@@ -25,7 +25,7 @@ template("brotli_gn_build") {
+     } else if (target_os == "freebsd") {
+       defines = [ "OS_FREEBSD" ]
+     }
+-    if (!is_win) {
++    if (is_linux) {
+       libs = [ "m" ]
+     }
+     if (is_clang || !is_win) {
+diff --git a/deps/uv/unofficial.gni b/deps/uv/unofficial.gni
+index 7a73f891e3fc3261b77af97af63fca2eade49849..bda1b5dc899558c2b4a22377dde9fb3bcce5488c 100644
+--- a/deps/uv/unofficial.gni
++++ b/deps/uv/unofficial.gni
+@@ -82,11 +82,11 @@ template("uv_gn_build") {
+       ]
+     }
+     if (is_posix) {
+-      libs = [ "m" ]
+       ldflags = [ "-pthread" ]
+     }
+     if (is_linux) {
+-      libs += [
++      libs = [
++        "m",
+         "dl",
+         "rt",
+       ]