From ee7ec08cf5290fb3b67730bf75ca5b2ca319c5d6 Mon Sep 17 00:00:00 2001 From: Marco Bartoli Date: Sun, 22 Mar 2026 18:05:23 +0100 Subject: [PATCH] Add macOS support for AddressSanitizer memory limit (#7308) --- bin/verilator | 20 ++++++++++++++------ docs/CONTRIBUTORS | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/bin/verilator b/bin/verilator index 18c24ff99..f85798ce0 100755 --- a/bin/verilator +++ b/bin/verilator @@ -213,14 +213,22 @@ sub ulimit_stack_unlimited { # AddressSanitizer doesn't work with 'ulimit -s unlimted' if (`${\(verilator_bin())} --get-supported DEV_ASAN` eq "1\n") { # Use host 'physical memory / #cores / 8' instead - open(my $fh, "<", "/proc/meminfo") || die "Can't read host memory for asan"; - while (<$fh>) { - if (m/MemTotal:\s+(\d+)\s+kB/) { - $limit = int(int($1)/`nproc`/8); - last; + if ($^O eq "darwin") { + my $membytes = `sysctl -n hw.memsize`; + chomp $membytes; + my $ncpu = `sysctl -n hw.ncpu`; + chomp $ncpu; + $limit = int(int($membytes / 1024) / $ncpu / 8); + } else { + open(my $fh, "<", "/proc/meminfo") || die "Can't read host memory for asan"; + while (<$fh>) { + if (m/MemTotal:\s+(\d+)\s+kB/) { + $limit = int(int($1)/`nproc`/8); + last; + } } + close($fh); } - close($fh); } system("ulimit -s $limit 2>/dev/null"); my $status = $?; diff --git a/docs/CONTRIBUTORS b/docs/CONTRIBUTORS index ef669d945..1e1e2b3e5 100644 --- a/docs/CONTRIBUTORS +++ b/docs/CONTRIBUTORS @@ -165,6 +165,7 @@ Lukasz Dalek Maarten De Braekeleer Maciej Sobkowski Marcel Chang +Marco Bartoli Marco Widmer Mariusz Glebocki Markus Krause