Another bunch of hacks for named sections support

llvm-svn: 53315
This commit is contained in:
Anton Korobeynikov 2008-07-09 13:26:52 +00:00
parent d0f5cb4490
commit 1f697cd97b
2 changed files with 22 additions and 11 deletions

View File

@ -53,8 +53,9 @@ namespace llvm {
TLS = 1 << 5, ///< Section contains thread-local data
Debug = 1 << 6, ///< Section contains debug data
Linkonce = 1 << 7, ///< Section is linkonce
Named = 1 << 8, ///< Section is named
TypeFlags = 0xFF,
// Some gap for future flags
Named = 1 << 23, ///< Section is named
EntitySize = 0xFF << 24 ///< Entity size for mergeable sections
};

View File

@ -323,8 +323,10 @@ X86DarwinTargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV,
Type = C->getType();
unsigned Size = TD->getABITypeSize(Type);
if (Size > 16) {
// Too big for mergeable
if (Size > 16 ||
!(Flags & SectionFlags::Strings ||
(Size == 4 || Size == 8 || Size == 16))) {
// Not suitable for mergeable
Size = 0;
Flags &= ~SectionFlags::Mergeable;
}
@ -516,8 +518,12 @@ X86ELFTargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV,
Type = C->getType();
unsigned Size = TD->getABITypeSize(Type);
if (Size > 16) {
// Too big for mergeable
// FIXME: size check here ugly, and will hopefully have gone, when we will
// have sane interface for attaching flags to sections.
if (Size > 16 ||
!(Flags & SectionFlags::Strings ||
(Size == 4 || Size == 8 || Size == 16))) {
// Not suitable for mergeable
Size = 0;
Flags &= ~SectionFlags::Mergeable;
}
@ -529,9 +535,11 @@ X86ELFTargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV,
// Mark section as named, when needed (so, we we will need .section directive
// to switch into it).
if (Flags & (SectionFlags::Mergeable |
SectionFlags::TLS |
SectionFlags::Linkonce))
unsigned TypeFlags = Flags & SectionFlags::TypeFlags;
if (!TypeFlags /* Read-only section */ ||
(TypeFlags & (SectionFlags::Mergeable |
SectionFlags::TLS |
SectionFlags::Linkonce)))
Flags |= SectionFlags::Named;
return Flags;
@ -668,9 +676,11 @@ X86COFFTargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV,
// Mark section as named, when needed (so, we we will need .section directive
// to switch into it).
if (Flags & (SectionFlags::Mergeable ||
SectionFlags::TLS ||
SectionFlags::Linkonce))
unsigned TypeFlags = Flags & SectionFlags::TypeFlags;
if (!TypeFlags /* Read-only section */ ||
(TypeFlags & (SectionFlags::Mergeable |
SectionFlags::TLS |
SectionFlags::Linkonce)))
Flags |= SectionFlags::Named;
return Flags;