Replace '@' with '_' in binary symbol names.

'@' symbol is used for symbol versioning in GCC
which leads to compilation errors in case of compiler caches usage.
This commit is contained in:
Sergey Bogolepov
2020-12-16 14:32:13 +07:00
committed by Stanislav Erokhin
parent 56683ef403
commit 54f70a68a2
@@ -116,11 +116,15 @@ fun IrFunction.computeFunctionName() = with(KonanBinaryInterface) { functionName
fun IrFunction.computeFullName() = parent.fqNameForIrSerialization.child(Name.identifier(computeFunctionName())).asString()
fun IrFunction.computeSymbolName() = with(KonanBinaryInterface) { symbolName }
fun IrFunction.computeSymbolName() = with(KonanBinaryInterface) { symbolName }.replaceSpecialSymbols()
fun IrField.computeSymbolName() = with(KonanBinaryInterface) { symbolName }
fun IrField.computeSymbolName() = with(KonanBinaryInterface) { symbolName }.replaceSpecialSymbols()
fun IrClass.computeTypeInfoSymbolName() = with(KonanBinaryInterface) { typeInfoSymbolName }
fun IrClass.computeTypeInfoSymbolName() = with(KonanBinaryInterface) { typeInfoSymbolName }.replaceSpecialSymbols()
private fun String.replaceSpecialSymbols() =
// '@' is used for symbol versioning in GCC: https://gcc.gnu.org/wiki/SymbolVersioning.
this.replace("@", "__at__")
fun IrDeclaration.isExported() = KonanBinaryInterface.isExported(this)