diff options
author | David Blaikie <dblaikie@gmail.com> | 2013-10-22 23:41:52 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2013-10-22 23:41:52 +0000 |
commit | 15b25dffc37709dc9f0d3eb3e6bad799cec713f6 (patch) | |
tree | 7bef25837f6da89d3dd6d96c42494d7360183f79 /llvm/lib/MC/ELFObjectWriter.cpp | |
parent | 69d0aed6f17a352da5a5f1bbddf6c2508b1e586a (diff) | |
download | bcm5719-llvm-15b25dffc37709dc9f0d3eb3e6bad799cec713f6.tar.gz bcm5719-llvm-15b25dffc37709dc9f0d3eb3e6bad799cec713f6.zip |
MC: Support multiple sections with the same name in the same comdat group
Code review by Eric Christopher and Rafael Espindola.
llvm-svn: 193209
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index c5f7287bc22..eb197f2cec7 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -1298,10 +1298,12 @@ void ELFObjectWriter::WriteSection(MCAssembler &Asm, // Remove ".rel" and ".rela" prefixes. unsigned SecNameLen = (Section.getType() == ELF::SHT_REL) ? 4 : 5; StringRef SectionName = Section.getSectionName().substr(SecNameLen); + StringRef GroupName = + Section.getGroup() ? Section.getGroup()->getName() : ""; - InfoSection = Asm.getContext().getELFSection(SectionName, - ELF::SHT_PROGBITS, 0, - SectionKind::getReadOnly()); + InfoSection = Asm.getContext().getELFSection(SectionName, ELF::SHT_PROGBITS, + 0, SectionKind::getReadOnly(), + 0, GroupName); sh_info = SectionIndexMap.lookup(InfoSection); break; } @@ -1351,11 +1353,12 @@ void ELFObjectWriter::WriteSection(MCAssembler &Asm, ELF::SHF_EXECINSTR | ELF::SHF_ALLOC, SectionKind::getText())); } else if (SecName.startswith(".ARM.exidx")) { - sh_link = SectionIndexMap.lookup( - Asm.getContext().getELFSection(SecName.substr(sizeof(".ARM.exidx") - 1), - ELF::SHT_PROGBITS, - ELF::SHF_EXECINSTR | ELF::SHF_ALLOC, - SectionKind::getText())); + StringRef GroupName = + Section.getGroup() ? Section.getGroup()->getName() : ""; + sh_link = SectionIndexMap.lookup(Asm.getContext().getELFSection( + SecName.substr(sizeof(".ARM.exidx") - 1), ELF::SHT_PROGBITS, + ELF::SHF_EXECINSTR | ELF::SHF_ALLOC, SectionKind::getText(), 0, + GroupName)); } } |