aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-10-17 01:41:10 -0400
committerAndrew Kelley <superjoe30@gmail.com>2017-10-17 01:41:26 -0400
commit0744c83f515f15a40da1bf55900c51c200bff2bb (patch)
treea70f107eecedc9dd227b55d3a4e0f4bfa0154c13 /src/codegen.cpp
parent5866032e760dccb585e97d706b7865a720cbbf2c (diff)
downloadzig-0744c83f515f15a40da1bf55900c51c200bff2bb.tar.gz
zig-0744c83f515f15a40da1bf55900c51c200bff2bb.zip
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.
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 3b508757db..2ab31f45ad 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -388,6 +388,12 @@ static LLVMCallConv get_llvm_cc(CodeGen *g, CallingConvention cc) {
zig_unreachable();
}
+static void add_uwtable_attr(CodeGen *g, LLVMValueRef fn_val) {
+ if (g->zig_target.os == ZigLLVM_Win32) {
+ addLLVMFnAttr(fn_val, "uwtable");
+ }
+}
+
static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
if (fn_table_entry->llvm_value)
return fn_table_entry->llvm_value;
@@ -476,6 +482,7 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
}
addLLVMFnAttr(fn_table_entry->llvm_value, "nounwind");
+ add_uwtable_attr(g, fn_table_entry->llvm_value);
addLLVMFnAttr(fn_table_entry->llvm_value, "nobuiltin");
if (g->build_mode == BuildModeDebug && fn_table_entry->fn_inline != FnInlineAlways) {
ZigLLVMAddFunctionAttr(fn_table_entry->llvm_value, "no-frame-pointer-elim", "true");
@@ -885,6 +892,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
LLVMSetLinkage(fn_val, LLVMInternalLinkage);
LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
addLLVMFnAttr(fn_val, "nounwind");
+ add_uwtable_attr(g, fn_val);
if (g->build_mode == BuildModeDebug) {
ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);