authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-16 15:45:32-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-16 15:45:32-07:00
logbbb3403b5dff854b01989882a539b29a9e33d732
tree137e29038c6f55d981991f267b1cb7840fa82b65
parentda54e7cd00d81be7eb77a83474a734e4ce39eb98

stage1: apply LLVM ssp attributes globally

instead of per-function. Otherwise LLVM asserts with: "stack protected callee but caller requested no stack protector"

1 files changed, 5 insertions(+), 7 deletions(-)

src/stage1/codegen.cpp+5-7
......@@ -492,14 +492,12 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
492492 if (fn->body_node != nullptr) {
493493 maybe_export_dll(g, llvm_fn, linkage);
494494
495 bool want_fn_safety = g->build_mode != BuildModeFastRelease &&
495 bool want_ssp_attrs = g->build_mode != BuildModeFastRelease &&
496496 g->build_mode != BuildModeSmallRelease &&
497 !fn->def_scope->safety_off;
498 if (want_fn_safety) {
499 if (g->link_libc) {
500 addLLVMFnAttr(llvm_fn, "sspstrong");
501 addLLVMFnAttrStr(llvm_fn, "stack-protector-buffer-size", "4");
502 }
497 g->link_libc;
498 if (want_ssp_attrs) {
499 addLLVMFnAttr(llvm_fn, "sspstrong");
500 addLLVMFnAttrStr(llvm_fn, "stack-protector-buffer-size", "4");
503501 }
504502 if (g->have_stack_probing && !fn->def_scope->safety_off) {
505503 addLLVMFnAttrStr(llvm_fn, "probe-stack", "__zig_probe_stack");