mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
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.
This commit is contained in:
parent
5866032e76
commit
0744c83f51
@ -388,6 +388,12 @@ static LLVMCallConv get_llvm_cc(CodeGen *g, CallingConvention cc) {
|
|||||||
zig_unreachable();
|
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) {
|
static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
|
||||||
if (fn_table_entry->llvm_value)
|
if (fn_table_entry->llvm_value)
|
||||||
return 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");
|
addLLVMFnAttr(fn_table_entry->llvm_value, "nounwind");
|
||||||
|
add_uwtable_attr(g, fn_table_entry->llvm_value);
|
||||||
addLLVMFnAttr(fn_table_entry->llvm_value, "nobuiltin");
|
addLLVMFnAttr(fn_table_entry->llvm_value, "nobuiltin");
|
||||||
if (g->build_mode == BuildModeDebug && fn_table_entry->fn_inline != FnInlineAlways) {
|
if (g->build_mode == BuildModeDebug && fn_table_entry->fn_inline != FnInlineAlways) {
|
||||||
ZigLLVMAddFunctionAttr(fn_table_entry->llvm_value, "no-frame-pointer-elim", "true");
|
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);
|
LLVMSetLinkage(fn_val, LLVMInternalLinkage);
|
||||||
LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
|
LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
|
||||||
addLLVMFnAttr(fn_val, "nounwind");
|
addLLVMFnAttr(fn_val, "nounwind");
|
||||||
|
add_uwtable_attr(g, fn_val);
|
||||||
if (g->build_mode == BuildModeDebug) {
|
if (g->build_mode == BuildModeDebug) {
|
||||||
ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
|
ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
|
||||||
ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);
|
ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user