authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-12-07 21:15:45+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-12-08 04:18:12-05:00
loge62aac3ec4b21da20d7c57d937e508f2929138d0
treebe5628cb1c50b0c2aa8ea9ea9ca017ec5b6e229c
parentba37a4369b936c3fe4ad4f4b1d61bc93d9936018

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

1 files changed, 2 insertions(+), 2 deletions(-)

src/Package/Module.zig+2-2
......@@ -205,8 +205,8 @@ pub fn create(arena: Allocator, options: CreateOptions) !*Package.Module {
205205 const omit_frame_pointer = b: {
206206 if (options.inherited.omit_frame_pointer) |x| break :b x;
207207 if (options.parent) |p| break :b p.omit_frame_pointer;
208 if (optimize_mode == .Debug) break :b false;
209 break :b true;
208 if (optimize_mode == .ReleaseSmall) break :b true;
209 break :b false;
210210 };
211211
212212 const sanitize_thread = b: {