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
This commit is contained in:
Alex Rønne Petersen 2024-12-07 21:15:45 +01:00 committed by Andrew Kelley
parent ba37a4369b
commit e62aac3ec4

View File

@ -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: {