| ... | @@ -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); |
| 364 | | 364 | |
| | 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); |
| 378 | | 386 | |
| 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"); |