diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index 1e60cd3f4d7..096f712eba3 100755 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -125,8 +125,9 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { } break; } - if (F->hasHiddenVisibility() && !Subtarget->isTargetDarwin()) - O << "\t.hidden " << CurrentFnName << "\n"; + if (F->hasHiddenVisibility()) + if (const char *Directive = TAI->getHiddenDirective()) + O << Directive << CurrentFnName << "\n"; O << CurrentFnName << ":\n"; // Add some workaround for linkonce linkage on Cygwin\MinGW diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp index 396d90ca4d9..78b1af22e5b 100644 --- a/lib/Target/X86/X86AsmPrinter.cpp +++ b/lib/Target/X86/X86AsmPrinter.cpp @@ -246,8 +246,9 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) { EmitGlobalConstant(C); O << '\n'; } - if (I->hasHiddenVisibility() && !Subtarget->isTargetDarwin()) - O << "\t.hidden " << name << "\n"; + if (I->hasHiddenVisibility()) + if (const char *Directive = TAI->getHiddenDirective()) + O << Directive << name << "\n"; } // Output linker support code for dllexported globals diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index 7371161b96d..5d52d932ef9 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -64,6 +64,7 @@ X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) { SetDirective = "\t.set"; UsedDirective = "\t.no_dead_strip\t"; WeakRefDirective = "\t.weak_reference\t"; + HiddenDirective = "\t.private_extern\t"; NeedsSet = true; DwarfAbbrevSection = ".section __DWARF,__debug_abbrev,regular,debug";