diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-25 19:15:17 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-25 19:15:17 -0400 |
| commit | 30d01c8fea68baab396081da040f49defa494088 (patch) | |
| tree | 410ad5e004d75dfb7cf29c077ab163e8853f8748 /src/codegen/llvm.zig | |
| parent | 97dc5f6eb531c91e8bd23a5589cae64e0a4561e8 (diff) | |
| parent | b5be01a5972d2288658eecbf6a52c3ea8331c151 (diff) | |
| download | zig-30d01c8fea68baab396081da040f49defa494088.tar.gz zig-30d01c8fea68baab396081da040f49defa494088.zip | |
Merge pull request #9874 from leecannon/frame_pointer
Make omiting frame pointer independent of build mode
Diffstat (limited to 'src/codegen/llvm.zig')
| -rw-r--r-- | src/codegen/llvm.zig | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 80f2d8b653..80625928cb 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -668,6 +668,11 @@ pub const DeclGen = struct { if (!dg.module.comp.bin_file.options.red_zone) { dg.addFnAttr(llvm_fn, "noredzone"); } + if (dg.module.comp.bin_file.options.omit_frame_pointer) { + dg.addFnAttrString(llvm_fn, "frame-pointer", "none"); + } else { + dg.addFnAttrString(llvm_fn, "frame-pointer", "all"); + } dg.addFnAttr(llvm_fn, "nounwind"); if (dg.module.comp.unwind_tables) { dg.addFnAttr(llvm_fn, "uwtable"); @@ -1541,10 +1546,30 @@ pub const DeclGen = struct { val.addAttributeAtIndex(index, llvm_attr); } + fn addAttrString( + dg: *DeclGen, + val: *const llvm.Value, + index: llvm.AttributeIndex, + name: []const u8, + value: []const u8, + ) void { + const llvm_attr = dg.context.createStringAttribute( + name.ptr, + @intCast(c_uint, name.len), + value.ptr, + @intCast(c_uint, value.len), + ); + val.addAttributeAtIndex(index, llvm_attr); + } + fn addFnAttr(dg: DeclGen, val: *const llvm.Value, name: []const u8) void { dg.addAttr(val, std.math.maxInt(llvm.AttributeIndex), name); } + fn addFnAttrString(dg: *DeclGen, val: *const llvm.Value, name: []const u8, value: []const u8) void { + dg.addAttrString(val, std.math.maxInt(llvm.AttributeIndex), name, value); + } + fn removeFnAttr(fn_val: *const llvm.Value, name: []const u8) void { removeAttr(fn_val, std.math.maxInt(llvm.AttributeIndex), name); } |
