authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-10-17 01:41:10-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-10-17 01:41:26-04:00
log0744c83f515f15a40da1bf55900c51c200bff2bb
treea70f107eecedc9dd227b55d3a4e0f4bfa0154c13
parent5866032e760dccb585e97d706b7865a720cbbf2c

add uwtable attribute to functions on windows

See #516 now we have at least a callstack. we still need updated LLD to get stack traces.

1 files changed, 8 insertions(+), 0 deletions(-)

src/codegen.cpp+8
......@@ -388,6 +388,12 @@ static LLVMCallConv get_llvm_cc(CodeGen *g, CallingConvention cc) {
388388 zig_unreachable();
389389}
390390
391static void add_uwtable_attr(CodeGen *g, LLVMValueRef fn_val) {
392 if (g->zig_target.os == ZigLLVM_Win32) {
393 addLLVMFnAttr(fn_val, "uwtable");
394 }
395}
396
391397static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
392398 if (fn_table_entry->llvm_value)
393399 return fn_table_entry->llvm_value;
......@@ -476,6 +482,7 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
476482 }
477483
478484 addLLVMFnAttr(fn_table_entry->llvm_value, "nounwind");
485 add_uwtable_attr(g, fn_table_entry->llvm_value);
479486 addLLVMFnAttr(fn_table_entry->llvm_value, "nobuiltin");
480487 if (g->build_mode == BuildModeDebug && fn_table_entry->fn_inline != FnInlineAlways) {
481488 ZigLLVMAddFunctionAttr(fn_table_entry->llvm_value, "no-frame-pointer-elim", "true");
......@@ -885,6 +892,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
885892 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
886893 LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
887894 addLLVMFnAttr(fn_val, "nounwind");
895 add_uwtable_attr(g, fn_val);
888896 if (g->build_mode == BuildModeDebug) {
889897 ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
890898 ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);