diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/AsmParser/Lexer.l | 1 | ||||
| -rw-r--r-- | llvm/lib/AsmParser/Lexer.l.cvs | 1 | ||||
| -rw-r--r-- | llvm/lib/AsmParser/llvmAsmParser.y | 9 | ||||
| -rw-r--r-- | llvm/lib/AsmParser/llvmAsmParser.y.cvs | 9 | ||||
| -rw-r--r-- | llvm/lib/Bytecode/Reader/Reader.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Bytecode/Writer/Writer.cpp | 5 | ||||
| -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 | ||||
| -rw-r--r-- | llvm/lib/VMCore/AsmWriter.cpp | 3 | 
10 files changed, 34 insertions, 13 deletions
diff --git a/llvm/lib/AsmParser/Lexer.l b/llvm/lib/AsmParser/Lexer.l index 382ce24462a..b67f6ff1024 100644 --- a/llvm/lib/AsmParser/Lexer.l +++ b/llvm/lib/AsmParser/Lexer.l @@ -206,6 +206,7 @@ appending       { return APPENDING; }  dllimport       { return DLLIMPORT; }  dllexport       { return DLLEXPORT; }  hidden          { return HIDDEN; } +protected       { return PROTECTED; }  extern_weak     { return EXTERN_WEAK; }  external        { return EXTERNAL; }  thread_local    { return THREAD_LOCAL; } diff --git a/llvm/lib/AsmParser/Lexer.l.cvs b/llvm/lib/AsmParser/Lexer.l.cvs index 382ce24462a..b67f6ff1024 100644 --- a/llvm/lib/AsmParser/Lexer.l.cvs +++ b/llvm/lib/AsmParser/Lexer.l.cvs @@ -206,6 +206,7 @@ appending       { return APPENDING; }  dllimport       { return DLLIMPORT; }  dllexport       { return DLLEXPORT; }  hidden          { return HIDDEN; } +protected       { return PROTECTED; }  extern_weak     { return EXTERN_WEAK; }  external        { return EXTERNAL; }  thread_local    { return THREAD_LOCAL; } diff --git a/llvm/lib/AsmParser/llvmAsmParser.y b/llvm/lib/AsmParser/llvmAsmParser.y index c47b6fc6ea9..63f2261fa11 100644 --- a/llvm/lib/AsmParser/llvmAsmParser.y +++ b/llvm/lib/AsmParser/llvmAsmParser.y @@ -1099,7 +1099,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {  %token NORETURN INREG SRET NOUNWIND  // Visibility Styles -%token DEFAULT HIDDEN +%token DEFAULT HIDDEN PROTECTED  %start Module  %% @@ -1180,9 +1180,10 @@ GVExternalLinkage    ;  GVVisibilityStyle -  : /*empty*/ { $$ = GlobalValue::DefaultVisibility; } -  | DEFAULT   { $$ = GlobalValue::DefaultVisibility; } -  | HIDDEN    { $$ = GlobalValue::HiddenVisibility;  } +  : /*empty*/ { $$ = GlobalValue::DefaultVisibility;   } +  | DEFAULT   { $$ = GlobalValue::DefaultVisibility;   } +  | HIDDEN    { $$ = GlobalValue::HiddenVisibility;    } +  | PROTECTED { $$ = GlobalValue::ProtectedVisibility; }    ;  FunctionDeclareLinkage diff --git a/llvm/lib/AsmParser/llvmAsmParser.y.cvs b/llvm/lib/AsmParser/llvmAsmParser.y.cvs index c47b6fc6ea9..63f2261fa11 100644 --- a/llvm/lib/AsmParser/llvmAsmParser.y.cvs +++ b/llvm/lib/AsmParser/llvmAsmParser.y.cvs @@ -1099,7 +1099,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {  %token NORETURN INREG SRET NOUNWIND  // Visibility Styles -%token DEFAULT HIDDEN +%token DEFAULT HIDDEN PROTECTED  %start Module  %% @@ -1180,9 +1180,10 @@ GVExternalLinkage    ;  GVVisibilityStyle -  : /*empty*/ { $$ = GlobalValue::DefaultVisibility; } -  | DEFAULT   { $$ = GlobalValue::DefaultVisibility; } -  | HIDDEN    { $$ = GlobalValue::HiddenVisibility;  } +  : /*empty*/ { $$ = GlobalValue::DefaultVisibility;   } +  | DEFAULT   { $$ = GlobalValue::DefaultVisibility;   } +  | HIDDEN    { $$ = GlobalValue::HiddenVisibility;    } +  | PROTECTED { $$ = GlobalValue::ProtectedVisibility; }    ;  FunctionDeclareLinkage diff --git a/llvm/lib/Bytecode/Reader/Reader.cpp b/llvm/lib/Bytecode/Reader/Reader.cpp index 99aac056ff3..e75f0fcd610 100644 --- a/llvm/lib/Bytecode/Reader/Reader.cpp +++ b/llvm/lib/Bytecode/Reader/Reader.cpp @@ -1532,6 +1532,7 @@ void BytecodeReader::ParseFunctionBody(Function* F) {    switch (VisibilityID) {    case 0: Visibility = GlobalValue::DefaultVisibility; break;    case 1: Visibility = GlobalValue::HiddenVisibility; break; +  case 2: Visibility = GlobalValue::ProtectedVisibility; break;    default:     error("Unknown visibility type: " + utostr(VisibilityID));     Visibility = GlobalValue::DefaultVisibility; @@ -1767,6 +1768,7 @@ void BytecodeReader::ParseModuleGlobalInfo() {      switch (VisibilityID) {      case 0: Visibility = GlobalValue::DefaultVisibility; break;      case 1: Visibility = GlobalValue::HiddenVisibility; break; +    case 2: Visibility = GlobalValue::ProtectedVisibility; break;      default:        error("Unknown visibility type: " + utostr(VisibilityID));        Visibility = GlobalValue::DefaultVisibility; diff --git a/llvm/lib/Bytecode/Writer/Writer.cpp b/llvm/lib/Bytecode/Writer/Writer.cpp index f1c6f6c5619..b4a26916008 100644 --- a/llvm/lib/Bytecode/Writer/Writer.cpp +++ b/llvm/lib/Bytecode/Writer/Writer.cpp @@ -957,8 +957,9 @@ static unsigned getEncodedLinkage(const GlobalValue *GV) {  static unsigned getEncodedVisibility(const GlobalValue *GV) {    switch (GV->getVisibility()) {    default: assert(0 && "Invalid visibility!"); -  case GlobalValue::DefaultVisibility: return 0; -  case GlobalValue::HiddenVisibility:  return 1; +  case GlobalValue::DefaultVisibility:   return 0; +  case GlobalValue::HiddenVisibility:    return 1; +  case GlobalValue::ProtectedVisibility: return 2;    }  } 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"; diff --git a/llvm/lib/VMCore/AsmWriter.cpp b/llvm/lib/VMCore/AsmWriter.cpp index ac68e8d32fb..3a065b0cdfe 100644 --- a/llvm/lib/VMCore/AsmWriter.cpp +++ b/llvm/lib/VMCore/AsmWriter.cpp @@ -886,6 +886,7 @@ void AssemblyWriter::printGlobal(const GlobalVariable *GV) {      default: assert(0 && "Invalid visibility style!");      case GlobalValue::DefaultVisibility: break;      case GlobalValue::HiddenVisibility: Out << "hidden "; break; +    case GlobalValue::ProtectedVisibility: Out << "protected "; break;      }    } @@ -914,6 +915,7 @@ void AssemblyWriter::printAlias(const GlobalAlias *GA) {    default: assert(0 && "Invalid visibility style!");    case GlobalValue::DefaultVisibility: break;    case GlobalValue::HiddenVisibility: Out << "hidden "; break; +  case GlobalValue::ProtectedVisibility: Out << "protected "; break;    }    Out << "alias "; @@ -998,6 +1000,7 @@ void AssemblyWriter::printFunction(const Function *F) {      default: assert(0 && "Invalid visibility style!");      case GlobalValue::DefaultVisibility: break;      case GlobalValue::HiddenVisibility: Out << "hidden "; break; +    case GlobalValue::ProtectedVisibility: Out << "protected "; break;      }    }  | 

