diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h index a8da6cb78a9..e59b12a7cd2 100644 --- a/include/llvm/Target/TargetAsmInfo.h +++ b/include/llvm/Target/TargetAsmInfo.h @@ -601,13 +601,6 @@ namespace llvm { virtual SectionKind::Kind SectionKindForGlobal(const GlobalValue *GV) const; - /// RelocBehaviour - Describes how relocations should be treated when - /// selecting sections. Reloc::Global bit should be set if global - /// relocations should force object to be placed in read-write - /// sections. Reloc::Local bit should be set if local relocations should - /// force object to be placed in read-write sections. - virtual unsigned RelocBehaviour() const; - /// SectionFlagsForGlobal - This hook allows the target to select proper /// section flags either for given global or for section. // FIXME: Eliminate this. diff --git a/lib/Target/ELFTargetAsmInfo.cpp b/lib/Target/ELFTargetAsmInfo.cpp index bd2dd0a0644..8ace00abd93 100644 --- a/lib/Target/ELFTargetAsmInfo.cpp +++ b/lib/Target/ELFTargetAsmInfo.cpp @@ -57,7 +57,13 @@ ELFTargetAsmInfo::SectionKindForGlobal(const GlobalValue *GV) const { if (GVar->hasInitializer()) { Constant *C = GVar->getInitializer(); bool isConstant = GVar->isConstant(); - unsigned Reloc = RelocBehaviour(); + + + // By default - all relocations in PIC mode would force symbol to be + // placed in r/w section. + unsigned Reloc = (TM.getRelocationModel() != Reloc::Static ? + Reloc::LocalOrGlobal : Reloc::None); + if (Reloc != Reloc::None && C->ContainsRelocations(Reloc)) return (C->ContainsRelocations(Reloc::Global) ? (isConstant ? diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index 2cdaa74843a..e60855d3dd4 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -190,13 +190,6 @@ static bool isConstantString(const Constant *C) { return false; } -unsigned TargetAsmInfo::RelocBehaviour() const { - // By default - all relocations in PIC mode would force symbol to be - // placed in r/w section. - return (TM.getRelocationModel() != Reloc::Static ? - Reloc::LocalOrGlobal : Reloc::None); -} - SectionKind::Kind TargetAsmInfo::SectionKindForGlobal(const GlobalValue *GV) const { // Early exit - functions should be always in text sections. @@ -211,13 +204,14 @@ TargetAsmInfo::SectionKindForGlobal(const GlobalValue *GV) const { // Variable can be easily put to BSS section. return (isThreadLocal ? SectionKind::ThreadBSS : SectionKind::BSS); } else if (GVar->isConstant() && !isThreadLocal) { - // Now we know, that varible has initializer and it is constant. We need to + // Now we know, that variable has initializer and it is constant. We need to // check its initializer to decide, which section to output it into. Also // note, there is no thread-local r/o section. Constant *C = GVar->getInitializer(); if (C->ContainsRelocations(Reloc::LocalOrGlobal)) { // Decide, whether it is still possible to put symbol into r/o section. - unsigned Reloc = RelocBehaviour(); + unsigned Reloc = (TM.getRelocationModel() != Reloc::Static ? + Reloc::LocalOrGlobal : Reloc::None); // We already did a query for 'all' relocs, thus - early exits. if (Reloc == Reloc::LocalOrGlobal)