diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/Target/TargetAsmInfo.h | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/ELFTargetAsmInfo.cpp | 32 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/global-sections.ll | 17 | 
3 files changed, 28 insertions, 23 deletions
| diff --git a/llvm/include/llvm/Target/TargetAsmInfo.h b/llvm/include/llvm/Target/TargetAsmInfo.h index e1ac6969aa5..d5273a385b9 100644 --- a/llvm/include/llvm/Target/TargetAsmInfo.h +++ b/llvm/include/llvm/Target/TargetAsmInfo.h @@ -55,7 +55,7 @@ namespace llvm {        /// Thread local data.        ThreadData,       ///< Initialized TLS data objects        ThreadBSS         ///< Uninitialized TLS data objects -    } K; // This is private. +    } K : 8; // This is private.      // FIXME: Eliminate.      Kind getKind() const { return K; } diff --git a/llvm/lib/Target/ELFTargetAsmInfo.cpp b/llvm/lib/Target/ELFTargetAsmInfo.cpp index da8ed73852b..880dfbc0a93 100644 --- a/llvm/lib/Target/ELFTargetAsmInfo.cpp +++ b/llvm/lib/Target/ELFTargetAsmInfo.cpp @@ -49,34 +49,24 @@ ELFTargetAsmInfo::ELFTargetAsmInfo(const TargetMachine &TM)  const Section*  ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV,                                           SectionKind Kind) const { -  if (isa<Function>(GV)) -    return TextSection; -   -  const GlobalVariable *GVar = cast<GlobalVariable>(GV);    switch (Kind.getKind()) { -  default: llvm_unreachable("Unsuported section kind for global"); -  case SectionKind::BSS: -    return getBSSSection_(); -  case SectionKind::Data: -  case SectionKind::DataRel: -    return DataRelSection; -  case SectionKind::DataRelLocal: -    return DataRelLocalSection; -  case SectionKind::DataRelRO: -    return DataRelROSection; -  case SectionKind::DataRelROLocal: -    return DataRelROLocalSection; -  case SectionKind::ROData: -    return getReadOnlySection(); +  default: llvm_unreachable("Unknown section kind"); +  case SectionKind::Text:           return TextSection; +  case SectionKind::BSS:            return getBSSSection_(); +  case SectionKind::Data:           return DataSection; +  case SectionKind::DataRel:        return DataRelSection; +  case SectionKind::DataRelLocal:   return DataRelLocalSection; +  case SectionKind::DataRelRO:      return DataRelROSection; +  case SectionKind::DataRelROLocal: return DataRelROLocalSection; +  case SectionKind::ROData:         return getReadOnlySection();    case SectionKind::RODataMergeStr: -    return MergeableStringSection(GVar); +    return MergeableStringSection(cast<GlobalVariable>(GV));    case SectionKind::RODataMergeConst: { -    const Type *Ty = GVar->getInitializer()->getType(); +    const Type *Ty = cast<GlobalVariable>(GV)->getInitializer()->getType();      const TargetData *TD = TM.getTargetData();      return getSectionForMergableConstant(TD->getTypeAllocSize(Ty), 0);    }    case SectionKind::ThreadData: -    // ELF targets usually support TLS stuff      return TLSDataSection;    case SectionKind::ThreadBSS:      return TLSBSSSection; diff --git a/llvm/test/CodeGen/X86/global-sections.ll b/llvm/test/CodeGen/X86/global-sections.ll index ef31defeb53..ddfb3523910 100644 --- a/llvm/test/CodeGen/X86/global-sections.ll +++ b/llvm/test/CodeGen/X86/global-sections.ll @@ -39,4 +39,19 @@  ; DARWIN: .const  ; DARWIN: _G4: -;	.long	34 +; DARWIN:     .long 34 + + +; int G5 = 47; +@G5 = global i32 47 + +; LINUX: .data +; LINUX: .globl G5 +; LINUX: G5: +; LINUX:    .long 47 + +; DARWIN: .data +; DARWIN: .globl _G5 +; DARWIN: _G5: +; DARWIN:    .long 47 + | 

