Skip to content

Commit f87571a

Browse files
[ObjectYAML][ELF] Allow verdaux entry offset to be user-defined
1 parent 2d7f34f commit f87571a

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

llvm/include/llvm/ObjectYAML/ELFYAML.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ struct VerdefEntry {
582582
std::optional<uint16_t> Flags;
583583
std::optional<uint16_t> VersionNdx;
584584
std::optional<uint32_t> Hash;
585+
std::optional<uint16_t> AuxVOffset;
585586
std::vector<StringRef> VerNames;
586587
};
587588

llvm/lib/ObjectYAML/ELFEmitter.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1655,7 +1655,7 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
16551655
VerDef.vd_flags = E.Flags.value_or(0);
16561656
VerDef.vd_ndx = E.VersionNdx.value_or(0);
16571657
VerDef.vd_hash = E.Hash.value_or(0);
1658-
VerDef.vd_aux = sizeof(Elf_Verdef);
1658+
VerDef.vd_aux = E.AuxVOffset.value_or(sizeof(Elf_Verdef));
16591659
VerDef.vd_cnt = E.VerNames.size();
16601660
if (I == Section.Entries->size() - 1)
16611661
VerDef.vd_next = 0;
@@ -1665,13 +1665,13 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
16651665
CBA.write((const char *)&VerDef, sizeof(Elf_Verdef));
16661666

16671667
for (size_t J = 0; J < E.VerNames.size(); ++J, ++AuxCnt) {
1668-
Elf_Verdaux VernAux;
1669-
VernAux.vda_name = DotDynstr.getOffset(E.VerNames[J]);
1668+
Elf_Verdaux VerdAux;
1669+
VerdAux.vda_name = DotDynstr.getOffset(E.VerNames[J]);
16701670
if (J == E.VerNames.size() - 1)
1671-
VernAux.vda_next = 0;
1671+
VerdAux.vda_next = 0;
16721672
else
1673-
VernAux.vda_next = sizeof(Elf_Verdaux);
1674-
CBA.write((const char *)&VernAux, sizeof(Elf_Verdaux));
1673+
VerdAux.vda_next = sizeof(Elf_Verdaux);
1674+
CBA.write((const char *)&VerdAux, sizeof(Elf_Verdaux));
16751675
}
16761676
}
16771677

llvm/lib/ObjectYAML/ELFYAML.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1921,6 +1921,7 @@ void MappingTraits<ELFYAML::VerdefEntry>::mapping(IO &IO,
19211921
IO.mapOptional("Flags", E.Flags);
19221922
IO.mapOptional("VersionNdx", E.VersionNdx);
19231923
IO.mapOptional("Hash", E.Hash);
1924+
IO.mapOptional("AuxVOffset", E.AuxVOffset);
19241925
IO.mapRequired("Names", E.VerNames);
19251926
}
19261927

0 commit comments

Comments
 (0)