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) {...@@ -492,14 +492,12 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
492 if (fn->body_node != nullptr) {492 if (fn->body_node != nullptr) {
493 maybe_export_dll(g, llvm_fn, linkage);493 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 &&
496 g->build_mode != BuildModeSmallRelease &&496 g->build_mode != BuildModeSmallRelease &&
497 !fn->def_scope->safety_off;497 g->link_libc;
498 if (want_fn_safety) {498 if (want_ssp_attrs) {
499 if (g->link_libc) {499 addLLVMFnAttr(llvm_fn, "sspstrong");
500 addLLVMFnAttr(llvm_fn, "sspstrong");500 addLLVMFnAttrStr(llvm_fn, "stack-protector-buffer-size", "4");
501 addLLVMFnAttrStr(llvm_fn, "stack-protector-buffer-size", "4");
502 }
503 }501 }
504 if (g->have_stack_probing && !fn->def_scope->safety_off) {502 if (g->have_stack_probing && !fn->def_scope->safety_off) {
505 addLLVMFnAttrStr(llvm_fn, "probe-stack", "__zig_probe_stack");503 addLLVMFnAttrStr(llvm_fn, "probe-stack", "__zig_probe_stack");