diff options
Diffstat (limited to 'llvm/lib/ObjectYAML/ELFEmitter.cpp')
| -rw-r--r-- | llvm/lib/ObjectYAML/ELFEmitter.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/lib/ObjectYAML/ELFEmitter.cpp b/llvm/lib/ObjectYAML/ELFEmitter.cpp index 9ae76a71ede5..06efac75c6e6 100644 --- a/llvm/lib/ObjectYAML/ELFEmitter.cpp +++ b/llvm/lib/ObjectYAML/ELFEmitter.cpp @@ -288,6 +288,9 @@ template <class ELFT> class ELFState { const ELFYAML::BBAddrMapSection &Section, ContiguousBlobAccumulator &CBA); void writeSectionContent(Elf_Shdr &SHeader, + const ELFYAML::FuncMapSection &Section, + ContiguousBlobAccumulator &CBA); + void writeSectionContent(Elf_Shdr &SHeader, const ELFYAML::HashSection &Section, ContiguousBlobAccumulator &CBA); void writeSectionContent(Elf_Shdr &SHeader, @@ -894,6 +897,8 @@ void ELFState<ELFT>::initSectionHeaders(std::vector<Elf_Shdr> &SHeaders, writeSectionContent(SHeader, *S, CBA); } else if (auto S = dyn_cast<ELFYAML::BBAddrMapSection>(Sec)) { writeSectionContent(SHeader, *S, CBA); + } else if (auto S = dyn_cast<ELFYAML::FuncMapSection>(Sec)) { + writeSectionContent(SHeader, *S, CBA); } else { llvm_unreachable("Unknown section type"); } @@ -1538,6 +1543,28 @@ void ELFState<ELFT>::writeSectionContent( } template <class ELFT> +void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader, + const ELFYAML::FuncMapSection &Section, + ContiguousBlobAccumulator &CBA) { + if (!Section.Entries) + return; + + for (const auto &[Idx, E] : llvm::enumerate(*Section.Entries)) { + if (Section.Type == llvm::ELF::SHT_LLVM_FUNC_MAP) { + if (E.Version > 1) + WithColor::warning() << "unsupported SHT_LLVM_FUNC_MAP version: " + << static_cast<int>(E.Version) + << "; encoding using the most recent version"; + CBA.write(E.Version); + SHeader.sh_size += 1; + } + CBA.write<uintX_t>(E.Address, ELFT::Endianness); + SHeader.sh_size += sizeof(uintX_t); + SHeader.sh_size += CBA.writeULEB128(E.DynamicInstCount); + } +} + +template <class ELFT> void ELFState<ELFT>::writeSectionContent( Elf_Shdr &SHeader, const ELFYAML::LinkerOptionsSection &Section, ContiguousBlobAccumulator &CBA) { |
