From e62aac3ec4b21da20d7c57d937e508f2929138d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sat, 7 Dec 2024 21:15:45 +0100 Subject: [PATCH] compiler: Only omit frame pointers by default for ReleaseSmall. Frame pointers make both debugging and profiling work better, and the overhead is reportedly 1% or less for typical programs [0]. I think the pros outweigh the cons here. People who *really* care about that 1% can simply use the -fomit-frame-pointer option to reclaim it. For ReleaseSmall, though, it makes sense to omit frame pointers by default for the sake of code size, as we already strip the binary in this case anyway. Closes #22161. [0] https://www.brendangregg.com/blog/2024-03-17/the-return-of-the-frame-pointers.html --- src/Package/Module.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Package/Module.zig b/src/Package/Module.zig index 996e58ddfb6c..781a8e50c25d 100644 --- a/src/Package/Module.zig +++ b/src/Package/Module.zig @@ -205,8 +205,8 @@ pub fn create(arena: Allocator, options: CreateOptions) !*Package.Module { const omit_frame_pointer = b: { if (options.inherited.omit_frame_pointer) |x| break :b x; if (options.parent) |p| break :b p.omit_frame_pointer; - if (optimize_mode == .Debug) break :b false; - break :b true; + if (optimize_mode == .ReleaseSmall) break :b true; + break :b false; }; const sanitize_thread = b: {