aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-10-25 19:15:17 -0400
committerGitHub <noreply@github.com>2021-10-25 19:15:17 -0400
commit30d01c8fea68baab396081da040f49defa494088 (patch)
tree410ad5e004d75dfb7cf29c077ab163e8853f8748 /src/codegen/llvm.zig
parent97dc5f6eb531c91e8bd23a5589cae64e0a4561e8 (diff)
parentb5be01a5972d2288658eecbf6a52c3ea8331c151 (diff)
downloadzig-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.zig25
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);
}