diff options
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/ARM/ARMISelLowering.cpp | 2 | ||||
-rw-r--r-- | lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp | 17 | ||||
-rw-r--r-- | lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp | 15 | ||||
-rw-r--r-- | lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp | 17 | ||||
-rw-r--r-- | lib/Target/CppBackend/CPPBackend.cpp | 24 | ||||
-rw-r--r-- | lib/Target/DarwinTargetAsmInfo.cpp | 2 | ||||
-rw-r--r-- | lib/Target/ELFTargetAsmInfo.cpp | 8 | ||||
-rw-r--r-- | lib/Target/IA64/IA64AsmPrinter.cpp | 11 | ||||
-rw-r--r-- | lib/Target/Mips/MipsAsmPrinter.cpp | 11 | ||||
-rw-r--r-- | lib/Target/Mips/MipsTargetAsmInfo.cpp | 2 | ||||
-rw-r--r-- | lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp | 36 | ||||
-rw-r--r-- | lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp | 11 | ||||
-rw-r--r-- | lib/Target/TargetAsmInfo.cpp | 4 | ||||
-rw-r--r-- | lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp | 22 | ||||
-rw-r--r-- | lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp | 9 | ||||
-rw-r--r-- | lib/Target/X86/X86Subtarget.cpp | 2 | ||||
-rw-r--r-- | lib/Target/XCore/XCoreAsmPrinter.cpp | 15 | ||||
-rw-r--r-- | lib/Target/XCore/XCoreTargetAsmInfo.cpp | 2 |
18 files changed, 133 insertions, 77 deletions
diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp index 41852fa594..cc38efb9cc 100644 --- a/lib/Target/ARM/ARMISelLowering.cpp +++ b/lib/Target/ARM/ARMISelLowering.cpp @@ -854,7 +854,7 @@ static bool GVIsIndirectSymbol(GlobalValue *GV, Reloc::Model RelocM) { bool isDecl = GV->isDeclaration() && !GV->hasNotBeenReadFromBitcode(); if (GV->hasHiddenVisibility() && (!isDecl && !GV->hasCommonLinkage())) return false; - return RelocM != Reloc::Static && (isDecl || GV->mayBeOverridden()); + return RelocM != Reloc::Static && (isDecl || GV->isWeakForLinker()); } SDValue ARMTargetLowering::LowerGlobalAddressDarwin(SDValue Op, diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index 969b8face4..ae968e7b09 100644 --- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -208,8 +208,10 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) { SwitchToTextSection("\t.text", F); O << "\t.globl\t" << CurrentFnName << "\n"; break; - case Function::WeakLinkage: - case Function::LinkOnceLinkage: + case Function::WeakAnyLinkage: + case Function::WeakODRLinkage: + case Function::LinkOnceAnyLinkage: + case Function::LinkOnceODRLinkage: if (Subtarget->isTargetDarwin()) { SwitchToTextSection( ".section __TEXT,__textcoal_nt,coalesced,pure_instructions", F); @@ -853,7 +855,7 @@ void ARMAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { } } - if (GVar->hasLocalLinkage() || GVar->mayBeOverridden()) { + if (GVar->hasLocalLinkage() || GVar->isWeakForLinker()) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. if (isDarwin) { @@ -899,9 +901,12 @@ void ARMAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { SwitchToSection(TAI->SectionForGlobal(GVar)); switch (GVar->getLinkage()) { - case GlobalValue::CommonLinkage: - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: if (isDarwin) { O << "\t.globl " << name << "\n" << "\t.weak_definition " << name << "\n"; diff --git a/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp b/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp index 536e5920f3..5238b79d9d 100644 --- a/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp +++ b/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp @@ -163,8 +163,10 @@ bool AlphaAsmPrinter::runOnMachineFunction(MachineFunction &MF) { case Function::ExternalLinkage: O << "\t.globl " << CurrentFnName << "\n"; break; - case Function::WeakLinkage: - case Function::LinkOnceLinkage: + case Function::WeakAnyLinkage: + case Function::WeakODRLinkage: + case Function::LinkOnceAnyLinkage: + case Function::LinkOnceODRLinkage: O << TAI->getWeakRefDirective() << CurrentFnName << "\n"; break; } @@ -231,9 +233,12 @@ void AlphaAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { // 2: Kind switch (GVar->getLinkage()) { - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: - case GlobalValue::CommonLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: O << TAI->getWeakRefDirective() << name << '\n'; break; case GlobalValue::AppendingLinkage: diff --git a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp index f784d70f44..7731a9023a 100644 --- a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp +++ b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp @@ -445,8 +445,10 @@ LinuxAsmPrinter::runOnMachineFunction(MachineFunction &MF) O << "\t.global\t" << CurrentFnName << "\n" << "\t.type\t" << CurrentFnName << ", @function\n"; break; - case Function::WeakLinkage: - case Function::LinkOnceLinkage: + case Function::WeakAnyLinkage: + case Function::WeakODRLinkage: + case Function::LinkOnceAnyLinkage: + case Function::LinkOnceODRLinkage: O << "\t.global\t" << CurrentFnName << "\n"; O << "\t.weak_definition\t" << CurrentFnName << "\n"; break; @@ -534,7 +536,7 @@ void LinuxAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { if (C->isNullValue() && /* FIXME: Verify correct */ !GVar->hasSection() && (GVar->hasLocalLinkage() || GVar->hasExternalLinkage() || - GVar->mayBeOverridden())) { + GVar->isWeakForLinker())) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. if (GVar->hasExternalLinkage()) { @@ -555,9 +557,12 @@ void LinuxAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { switch (GVar->getLinkage()) { // Should never be seen for the CellSPU platform... - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: - case GlobalValue::CommonLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: O << "\t.global " << name << '\n' << "\t.type " << name << ", @object\n" << "\t.weak " << name << '\n'; diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp index dbe4f2d2d3..48cf4959e0 100644 --- a/lib/Target/CppBackend/CPPBackend.cpp +++ b/lib/Target/CppBackend/CPPBackend.cpp @@ -294,10 +294,14 @@ namespace { Out << "GlobalValue::InternalLinkage"; break; case GlobalValue::PrivateLinkage: Out << "GlobalValue::PrivateLinkage"; break; - case GlobalValue::LinkOnceLinkage: - Out << "GlobalValue::LinkOnceLinkage "; break; - case GlobalValue::WeakLinkage: - Out << "GlobalValue::WeakLinkage"; break; + case GlobalValue::LinkOnceAnyLinkage: + Out << "GlobalValue::LinkOnceAnyLinkage "; break; + case GlobalValue::LinkOnceODRLinkage: + Out << "GlobalValue::LinkOnceODRLinkage "; break; + case GlobalValue::WeakAnyLinkage: + Out << "GlobalValue::WeakAnyLinkage"; break; + case GlobalValue::WeakODRLinkage: + Out << "GlobalValue::WeakODRLinkage"; break; case GlobalValue::AppendingLinkage: Out << "GlobalValue::AppendingLinkage"; break; case GlobalValue::ExternalLinkage: @@ -306,12 +310,16 @@ namespace { Out << "GlobalValue::DLLImportLinkage"; break; case GlobalValue::DLLExportLinkage: Out << "GlobalValue::DLLExportLinkage"; break; - case GlobalValue::ExternalWeakLinkage: - Out << "GlobalValue::ExternalWeakLinkage"; break; + case GlobalValue::ExternalWeakAnyLinkage: + Out << "GlobalValue::ExternalWeakAnyLinkage"; break; + case GlobalValue::ExternalWeakODRLinkage: + Out << "GlobalValue::ExternalWeakODRLinkage"; break; case GlobalValue::GhostLinkage: Out << "GlobalValue::GhostLinkage"; break; - case GlobalValue::CommonLinkage: - Out << "GlobalValue::CommonLinkage"; break; + case GlobalValue::CommonAnyLinkage: + Out << "GlobalValue::CommonAnyLinkage"; break; + case GlobalValue::CommonODRLinkage: + Out << "GlobalValue::CommonODRLinkage"; break; } } diff --git a/lib/Target/DarwinTargetAsmInfo.cpp b/lib/Target/DarwinTargetAsmInfo.cpp index cc05c09c51..927fdd2953 100644 --- a/lib/Target/DarwinTargetAsmInfo.cpp +++ b/lib/Target/DarwinTargetAsmInfo.cpp @@ -75,7 +75,7 @@ DarwinTargetAsmInfo::emitUsedDirectiveFor(const GlobalValue* GV, const Section* DarwinTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const { SectionKind::Kind Kind = SectionKindForGlobal(GV); - bool isWeak = GV->mayBeOverridden(); + bool isWeak = GV->isWeakForLinker(); bool isNonStatic = TM.getRelocationModel() != Reloc::Static; switch (Kind) { diff --git a/lib/Target/ELFTargetAsmInfo.cpp b/lib/Target/ELFTargetAsmInfo.cpp index 624b95c7b6..3a2a00c658 100644 --- a/lib/Target/ELFTargetAsmInfo.cpp +++ b/lib/Target/ELFTargetAsmInfo.cpp @@ -49,14 +49,16 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const { case Function::DLLExportLinkage: case Function::ExternalLinkage: return TextSection; - case Function::WeakLinkage: - case Function::LinkOnceLinkage: + case Function::WeakAnyLinkage: + case Function::WeakODRLinkage: + case Function::LinkOnceAnyLinkage: + case Function::LinkOnceODRLinkage: std::string Name = UniqueSectionForGlobal(GV, Kind); unsigned Flags = SectionFlagsForGlobal(GV, Name.c_str()); return getNamedSection(Name.c_str(), Flags); } } else if (const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV)) { - if (GVar->mayBeOverridden()) { + if (GVar->isWeakForLinker()) { std::string Name = UniqueSectionForGlobal(GVar, Kind); unsigned Flags = SectionFlagsForGlobal(GVar, Name.c_str()); return getNamedSection(Name.c_str(), Flags); diff --git a/lib/Target/IA64/IA64AsmPrinter.cpp b/lib/Target/IA64/IA64AsmPrinter.cpp index 00474309d5..d8ec2108c9 100644 --- a/lib/Target/IA64/IA64AsmPrinter.cpp +++ b/lib/Target/IA64/IA64AsmPrinter.cpp @@ -278,7 +278,7 @@ void IA64AsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { if (C->isNullValue() && !GVar->hasSection()) { if (!GVar->isThreadLocal() && - (GVar->hasLocalLinkage() || GVar->mayBeOverridden())) { + (GVar->hasLocalLinkage() || GVar->isWeakForLinker())) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. if (GVar->hasLocalLinkage()) { @@ -296,9 +296,12 @@ void IA64AsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { } switch (GVar->getLinkage()) { - case GlobalValue::LinkOnceLinkage: - case GlobalValue::CommonLinkage: - case GlobalValue::WeakLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: // Nonnull linkonce -> weak O << "\t.weak " << name << '\n'; break; diff --git a/lib/Target/Mips/MipsAsmPrinter.cpp b/lib/Target/Mips/MipsAsmPrinter.cpp index 732c5d796c..a22d7d6ebc 100644 --- a/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/lib/Target/Mips/MipsAsmPrinter.cpp @@ -504,7 +504,7 @@ printModuleLevelGV(const GlobalVariable* GVar) { if (C->isNullValue() && !GVar->hasSection()) { if (!GVar->isThreadLocal() && - (GVar->hasLocalLinkage() || GVar->mayBeOverridden())) { + (GVar->hasLocalLinkage() || GVar->isWeakForLinker())) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. if (GVar->hasLocalLinkage()) @@ -519,9 +519,12 @@ printModuleLevelGV(const GlobalVariable* GVar) { } } switch (GVar->getLinkage()) { - case GlobalValue::LinkOnceLinkage: - case GlobalValue::CommonLinkage: - case GlobalValue::WeakLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: // FIXME: Verify correct for weak. // Nonnull linkonce -> weak O << "\t.weak " << name << '\n'; diff --git a/lib/Target/Mips/MipsTargetAsmInfo.cpp b/lib/Target/Mips/MipsTargetAsmInfo.cpp index 7566f41eaf..3eee3beef1 100644 --- a/lib/Target/Mips/MipsTargetAsmInfo.cpp +++ b/lib/Target/Mips/MipsTargetAsmInfo.cpp @@ -85,7 +85,7 @@ SelectSectionForGlobal(const GlobalValue *GV) const { SectionKind::Kind K = SectionKindForGlobal(GV); const GlobalVariable *GVA = dyn_cast<GlobalVariable>(GV); - if (GVA && (!GVA->mayBeOverridden())) + if (GVA && (!GVA->isWeakForLinker())) switch (K) { case SectionKind::SmallData: return getSmallDataSection(); diff --git a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp index 57a2697112..4da53774d7 100644 --- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp @@ -388,7 +388,7 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) { // External or weakly linked global variables need non-lazily-resolved stubs if (TM.getRelocationModel() != Reloc::Static) { - if (GV->isDeclaration() || GV->mayBeOverridden()) { + if (GV->isDeclaration() || GV->isWeakForLinker()) { if (GV->hasHiddenVisibility()) { if (!GV->isDeclaration() && !GV->hasCommonLinkage()) O << Name; @@ -592,8 +592,10 @@ bool PPCLinuxAsmPrinter::runOnMachineFunction(MachineFunction &MF) { O << "\t.global\t" << CurrentFnName << '\n' << "\t.type\t" << CurrentFnName << ", @function\n"; break; - case Function::WeakLinkage: - case Function::LinkOnceLinkage: + case Function::WeakAnyLinkage: + case Function::WeakODRLinkage: + case Function::LinkOnceAnyLinkage: + case Function::LinkOnceODRLinkage: O << "\t.global\t" << CurrentFnName << '\n'; O << "\t.weak\t" << CurrentFnName << '\n'; break; @@ -689,7 +691,7 @@ void PPCLinuxAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { if (C->isNullValue() && /* FIXME: Verify correct */ !GVar->hasSection() && (GVar->hasLocalLinkage() || GVar->hasExternalLinkage() || - GVar->mayBeOverridden())) { + GVar->isWeakForLinker())) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. if (GVar->hasExternalLinkage()) { @@ -709,9 +711,12 @@ void PPCLinuxAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { } switch (GVar->getLinkage()) { - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: - case GlobalValue::CommonLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: O << "\t.global " << name << '\n' << "\t.type " << name << ", @object\n" << "\t.weak " << name << '\n'; @@ -785,8 +790,10 @@ bool PPCDarwinAsmPrinter::runOnMachineFunction(MachineFunction &MF) { case Function::ExternalLinkage: O << "\t.globl\t" << CurrentFnName << '\n'; break; - case Function::WeakLinkage: - case Function::LinkOnceLinkage: + case Function::WeakAnyLinkage: + case Function::WeakODRLinkage: + case Function::LinkOnceAnyLinkage: + case Function::LinkOnceODRLinkage: O << "\t.globl\t" << CurrentFnName << '\n'; O << "\t.weak_definition\t" << CurrentFnName << '\n'; break; @@ -918,7 +925,7 @@ void PPCDarwinAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { if (C->isNullValue() && /* FIXME: Verify correct */ !GVar->hasSection() && (GVar->hasLocalLinkage() || GVar->hasExternalLinkage() || - GVar->mayBeOverridden()) && + GVar->isWeakForLinker()) && TAI->SectionKindForGlobal(GVar) != SectionKind::RODataMergeStr) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. @@ -950,9 +957,12 @@ void PPCDarwinAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { } switch (GVar->getLinkage()) { - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: - case GlobalValue::CommonLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: O << "\t.globl " << name << '\n' << "\t.weak_definition " << name << '\n'; break; diff --git a/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp b/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp index 80976bb259..e0785d5582 100644 --- a/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp +++ b/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp @@ -260,7 +260,7 @@ void SparcAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { if (C->isNullValue() && !GVar->hasSection()) { if (!GVar->isThreadLocal() && - (GVar->hasLocalLinkage() || GVar->mayBeOverridden())) { + (GVar->hasLocalLinkage() || GVar->isWeakForLinker())) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. if (GVar->hasLocalLinkage()) @@ -276,9 +276,12 @@ void SparcAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { } switch (GVar->getLinkage()) { - case GlobalValue::CommonLinkage: - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: // FIXME: Verify correct for weak. + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: // FIXME: Verify correct for weak. + case GlobalValue::WeakODRLinkage: // FIXME: Verify correct for weak. // Nonnull linkonce -> weak O << "\t.weak " << name << '\n'; break; diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index d687e2f44c..8f5941fb9e 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -259,7 +259,7 @@ TargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV, assert(0 && "Unexpected section kind!"); } - if (GV->mayBeOverridden()) + if (GV->isWeakForLinker()) Flags |= SectionFlags::Linkonce; } @@ -310,7 +310,7 @@ const Section* TargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const { SectionKind::Kind Kind = SectionKindForGlobal(GV); - if (GV->mayBeOverridden()) { + if (GV->isWeakForLinker()) { std::string Name = UniqueSectionForGlobal(GV, Kind); unsigned Flags = SectionFlagsForGlobal(GV, Name.c_str()); return getNamedSection(Name.c_str(), Flags); diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp index 0595b6fbd1..e3b6c27dcb 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp @@ -168,8 +168,10 @@ void X86ATTAsmPrinter::emitFunctionHeader(const MachineFunction &MF) { EmitAlignment(FnAlign, F); O << "\t.globl\t" << CurrentFnName << '\n'; break; - case Function::LinkOnceLinkage: - case Function::WeakLinkage: + case Function::LinkOnceAnyLinkage: + case Function::LinkOnceODRLinkage: + case Function::WeakAnyLinkage: + case Function::WeakODRLinkage: EmitAlignment(FnAlign, F); if (Subtarget->isTargetDarwin()) { O << "\t.globl\t" << CurrentFnName << '\n'; @@ -198,8 +200,7 @@ void X86ATTAsmPrinter::emitFunctionHeader(const MachineFunction &MF) { O << CurrentFnName << ":\n"; // Add some workaround for linkonce linkage on Cygwin\MinGW if (Subtarget->isTargetCygMing() && - (F->getLinkage() == Function::LinkOnceLinkage || - F->getLinkage() == Function::WeakLinkage)) + (F->hasLinkOnceLinkage() || F->hasWeakLinkage())) O << "Lllvm$workaround$fake$stub$" << CurrentFnName << ":\n"; } @@ -386,7 +387,7 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, if (shouldPrintStub(TM, Subtarget)) { // Link-once, declaration, or Weakly-linked global variables need // non-lazily-resolved stubs - if (GV->isDeclaration() || GV->mayBeOverridden()) { + if (GV->isDeclaration() || GV->isWeakForLinker()) { // Dynamically-resolved functions need a stub for the function. if (isCallOp && isa<Function>(GV)) { // Function stubs are no longer needed for Mac OS X 10.5 and up. @@ -816,7 +817,7 @@ void X86ATTAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { } if (!GVar->isThreadLocal() && - (GVar->hasLocalLinkage() || GVar->mayBeOverridden())) { + (GVar->hasLocalLinkage() || GVar->isWeakForLinker())) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. if (TAI->getLCOMMDirective() != NULL) { @@ -855,9 +856,12 @@ void X86ATTAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) { } switch (GVar->getLinkage()) { - case GlobalValue::CommonLinkage: - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: if (Subtarget->isTargetDarwin()) { O << "\t.globl " << name << '\n' << TAI->getWeakDefDirective() << name << '\n'; diff --git a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp index c4389aa406..12b9c2fd4a 100644 --- a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp @@ -455,9 +455,12 @@ bool X86IntelAsmPrinter::doFinalization(Module &M) { bool bCustomSegment = false; switch (I->getLinkage()) { - case GlobalValue::CommonLinkage: - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: + case GlobalValue::CommonAnyLinkage: + case GlobalValue::CommonODRLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: SwitchToDataSection(""); O << name << "?\tsegment common 'COMMON'\n"; bCustomSegment = true; diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp index 6d2602a2ce..8c5176bc83 100644 --- a/lib/Target/X86/X86Subtarget.cpp +++ b/lib/Target/X86/X86Subtarget.cpp @@ -51,7 +51,7 @@ bool X86Subtarget::GVRequiresExtraLoad(const GlobalValue* GV, // target is x86-64 or the symbol is definitely defined in the current // translation unit. return false; - return !isDirectCall && (isDecl || GV->mayBeOverridden()); + return !isDirectCall && (isDecl || GV->isWeakForLinker()); } else if (isTargetELF()) { // Extra load is needed for all externally visible. if (isDirectCall) diff --git a/lib/Target/XCore/XCoreAsmPrinter.cpp b/lib/Target/XCore/XCoreAsmPrinter.cpp index 3a30f107d8..6026e126d1 100644 --- a/lib/Target/XCore/XCoreAsmPrinter.cpp +++ b/lib/Target/XCore/XCoreAsmPrinter.cpp @@ -188,8 +188,10 @@ emitGlobal(const GlobalVariable *GV) case GlobalValue::AppendingLinkage: cerr << "AppendingLinkage is not supported by this target!\n"; abort(); - case GlobalValue::LinkOnceLinkage: - case GlobalValue::WeakLinkage: + case GlobalValue::LinkOnceAnyLinkage: + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::WeakAnyLinkage: + case GlobalValue::WeakODRLinkage: case GlobalValue::ExternalLinkage: emitArrayBound(name, GV); emitGlobalDirective(name); @@ -266,8 +268,10 @@ emitFunctionStart(MachineFunction &MF) case Function::ExternalLinkage: emitGlobalDirective(CurrentFnName); break; - case Function::LinkOnceLinkage: - case Function::WeakLinkage: + case Function::LinkOnceAnyLinkage: + case Function::LinkOnceODRLinkage: + case Function::WeakAnyLinkage: + case Function::WeakODRLinkage: // TODO Use COMDAT groups for LinkOnceLinkage O << TAI->getGlobalDirective() << CurrentFnName << "\n"; O << TAI->getWeakDefDirective() << CurrentFnName << "\n"; @@ -434,7 +438,8 @@ bool XCoreAsmPrinter::doInitialization(Module &M) { switch (I->getLinkage()) { default: assert(0 && "Unexpected linkage"); - case Function::ExternalWeakLinkage: + case Function::ExternalWeakAnyLinkage: + case Function::ExternalWeakODRLinkage: ExtWeakSymbols.insert(I); // fallthrough case Function::ExternalLinkage: diff --git a/lib/Target/XCore/XCoreTargetAsmInfo.cpp b/lib/Target/XCore/XCoreTargetAsmInfo.cpp index 847224c766..78eb90c3b1 100644 --- a/lib/Target/XCore/XCoreTargetAsmInfo.cpp +++ b/lib/Target/XCore/XCoreTargetAsmInfo.cpp @@ -73,7 +73,7 @@ XCoreTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const { if (const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV)) { - if (!GVar->mayBeOverridden()) { + if (!GVar->isWeakForLinker()) { switch (Kind) { case SectionKind::RODataMergeStr: return MergeableStringSection(GVar); |