calls to C/C++ functions should not be mangled.

Otherwise, linker will never find the correct function.
This commit is contained in:
Lu Guanqun
2012-03-15 13:47:57 +08:00
parent 7e954e4248
commit 12f3285f9b

View File

@@ -501,10 +501,14 @@ Module::AddFunctionDeclaration(Symbol *funSym, bool isInline) {
llvm::GlobalValue::LinkageTypes linkage = (funSym->storageClass == SC_STATIC || llvm::GlobalValue::LinkageTypes linkage = (funSym->storageClass == SC_STATIC ||
isInline) ? isInline) ?
llvm::GlobalValue::InternalLinkage : llvm::GlobalValue::ExternalLinkage; llvm::GlobalValue::InternalLinkage : llvm::GlobalValue::ExternalLinkage;
std::string functionName = ((funSym->storageClass == SC_EXTERN_C) ? std::string functionName;
funSym->name : funSym->MangledName()); if (funSym->storageClass == SC_EXTERN_C)
if (g->mangleFunctionsWithTarget) functionName = funSym->name;
functionName += g->target.GetISAString(); else {
functionName = funSym->MangledName();
if (g->mangleFunctionsWithTarget)
functionName += g->target.GetISAString();
}
llvm::Function *function = llvm::Function *function =
llvm::Function::Create(llvmFunctionType, linkage, functionName.c_str(), llvm::Function::Create(llvmFunctionType, linkage, functionName.c_str(),
module); module);