authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-24 05:04:44-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-24 05:04:44-04:00
log6c3a56a7ffd5a2ec5119447aa81dce9bf6ec1319
tree530baf8f30658aaeb13b1bc14ba699101308e271
parent8f0dfcbcfb8e4525006de4aa8f3f7a596e7208d5

fix i386 windows stdcall


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

src/codegen.cpp+8-11
...@@ -362,6 +362,14 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {...@@ -362,6 +362,14 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
362 bool external_linkage = (fn_table_entry->linkage != GlobalLinkageIdInternal);362 bool external_linkage = (fn_table_entry->linkage != GlobalLinkageIdInternal);
363 Buf *symbol_name = get_mangled_name(g, &fn_table_entry->symbol_name, external_linkage);363 Buf *symbol_name = get_mangled_name(g, &fn_table_entry->symbol_name, external_linkage);
364364
365 if (fn_table_entry->type_entry->data.fn.fn_type_id.cc == CallingConventionStdcall && external_linkage &&
366 g->zig_target.arch.arch == ZigLLVM_x86)
367 {
368 // prevent name mangling
369 symbol_name = buf_sprintf("\x01_%s", buf_ptr(symbol_name));
370 }
371
372
365 TypeTableEntry *fn_type = fn_table_entry->type_entry;373 TypeTableEntry *fn_type = fn_table_entry->type_entry;
366 LLVMTypeRef fn_llvm_type = fn_type->data.fn.raw_type_ref;374 LLVMTypeRef fn_llvm_type = fn_type->data.fn.raw_type_ref;
367 if (external_linkage && fn_table_entry->body_node == nullptr) {375 if (external_linkage && fn_table_entry->body_node == nullptr) {
...@@ -376,17 +384,6 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {...@@ -376,17 +384,6 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
376 }384 }
377 fn_table_entry->llvm_name = LLVMGetValueName(fn_table_entry->llvm_value);385 fn_table_entry->llvm_name = LLVMGetValueName(fn_table_entry->llvm_value);
378386
379 // TODO this is for testing windows DLL stuff
380 //if (buf_eql_str(&fn_table_entry->symbol_name, "ExitProcess") ||
381 // buf_eql_str(&fn_table_entry->symbol_name, "GetConsoleMode") ||
382 // buf_eql_str(&fn_table_entry->symbol_name, "GetStdHandle") ||
383 // buf_eql_str(&fn_table_entry->symbol_name, "GetFileInformationByHandleEx") ||
384 // buf_eql_str(&fn_table_entry->symbol_name, "GetLastError") ||
385 // buf_eql_str(&fn_table_entry->symbol_name, "WriteFile"))
386 //{
387 // LLVMSetDLLStorageClass(fn_table_entry->llvm_value, LLVMDLLImportStorageClass);
388 //}
389
390 switch (fn_table_entry->fn_inline) {387 switch (fn_table_entry->fn_inline) {
391 case FnInlineAlways:388 case FnInlineAlways:
392 addLLVMFnAttr(fn_table_entry->llvm_value, "alwaysinline");389 addLLVMFnAttr(fn_table_entry->llvm_value, "alwaysinline");