Put ELF COMDAT relocations into the relevant COMDAT group.

Patch from Игорь Пашев  (I do hope we support utf-8 commit messages; I
also hope he'll forgive me for transliterating it as Igor Pashev in
case things go horribly wrong).

llvm-svn: 186034
This commit is contained in:
Tim Northover 2013-07-10 20:58:17 +00:00
parent fb6ab54000
commit a630fb0b67
3 changed files with 39 additions and 3 deletions

View File

@ -1002,11 +1002,18 @@ void ELFObjectWriter::CreateRelocationSections(MCAssembler &Asm,
else
EntrySize = is64Bit() ? sizeof(ELF::Elf64_Rel) : sizeof(ELF::Elf32_Rel);
unsigned Flags = 0;
StringRef Group = "";
if (Section.getFlags() & ELF::SHF_GROUP) {
Flags = ELF::SHF_GROUP;
Group = Section.getGroup()->getName();
}
const MCSectionELF *RelaSection =
Ctx.getELFSection(RelaSectionName, hasRelocationAddend() ?
ELF::SHT_RELA : ELF::SHT_REL, 0,
ELF::SHT_RELA : ELF::SHT_REL, Flags,
SectionKind::getReadOnly(),
EntrySize, "");
EntrySize, Group);
RelMap[&Section] = RelaSection;
Asm.getOrCreateSectionData(*RelaSection);
}

View File

@ -0,0 +1,29 @@
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sd | FileCheck %s
.text
.globl hello
.type hello,@function
hello:
call world
ret
.section .text.world,"axG",@progbits,world,comdat
.type world,@function
world:
call doctor
ret
// CHECK: Name: .group
// CHECK-NOT: SectionData
// CHECK: SectionData
// CHECK-NEXT: 0000: 01000000 06000000 07000000
// CHECK: Index: 6
// CHECK-NEXT: Name: .text.world
// CHECK-NOT: Section {
// CHECK: SHF_GROUP
// CHECK: Index: 7
// CHECK-NEXT: Name: .rela.text.world
// CHECK-NOT: Section {
// CHECK: SHF_GROUP

View File

@ -39,7 +39,7 @@
// CHECK-NEXT: ]
// CHECK-NEXT: Address: 0x0
// CHECK-NEXT: Offset: 0x54
// CHECK-NEXT: Size: 8
// CHECK-NEXT: Size: 12
// CHECK-NEXT: Link: 13
// CHECK-NEXT: Info: 13
// CHECK-NEXT: AddressAlignment: 4