diff options
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/TargetAsmInfo.cpp | 1 | ||||
-rwxr-xr-x | llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86AsmPrinter.cpp | 7 |
3 files changed, 14 insertions, 3 deletions
diff --git a/llvm/lib/Target/TargetAsmInfo.cpp b/llvm/lib/Target/TargetAsmInfo.cpp index 8deda9fe6a5..37ab073ffcd 100644 --- a/llvm/lib/Target/TargetAsmInfo.cpp +++ b/llvm/lib/Target/TargetAsmInfo.cpp @@ -74,6 +74,7 @@ TargetAsmInfo::TargetAsmInfo() : UsedDirective(0), WeakRefDirective(0), HiddenDirective("\t.hidden\t"), + ProtectedDirective("\t.protected\t"), AbsoluteSectionOffsets(false), HasLEB128(false), HasDotLoc(false), diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp index 03a22865e2c..634f41b9200 100755 --- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -125,9 +125,13 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { } break; } - if (F->hasHiddenVisibility()) + if (F->hasHiddenVisibility()) { if (const char *Directive = TAI->getHiddenDirective()) O << Directive << CurrentFnName << "\n"; + } else if (F->hasProtectedVisibility()) { + if (const char *Directive = TAI->getProtectedDirective()) + O << Directive << CurrentFnName << "\n"; + } if (Subtarget->isTargetELF()) O << "\t.type " << CurrentFnName << ",@function\n"; @@ -322,7 +326,8 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, if (isCallOp && isa<Function>(GV)) { if (printGOT(TM, Subtarget)) { // Assemble call via PLT for non-local symbols - if (!GV->hasHiddenVisibility() || GV->isDeclaration()) + if (!(GV->hasHiddenVisibility() || GV->hasProtectedVisibility()) || + GV->isDeclaration()) O << "@PLT"; } if (Subtarget->isTargetCygMing() && GV->isDeclaration()) diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp index 76037f13bd5..7e7dc8861a7 100644 --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -155,9 +155,14 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) { unsigned Size = TD->getTypeSize(Type); unsigned Align = TD->getPreferredAlignmentLog(I); - if (I->hasHiddenVisibility()) + if (I->hasHiddenVisibility()) { if (const char *Directive = TAI->getHiddenDirective()) O << Directive << name << "\n"; + } else if (I->hasProtectedVisibility()) { + if (const char *Directive = TAI->getProtectedDirective()) + O << Directive << name << "\n"; + } + if (Subtarget->isTargetELF()) O << "\t.type " << name << ",@object\n"; |