Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lld/ELF/SyntheticSections.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ void EhFrameSection::addRecords(EhInputSection *sec, ArrayRef<RelTy> rels) {
for (EhSectionPiece &cie : sec->cies)
offsetToCie[cie.inputOff] = addCie<ELFT>(cie, rels);
for (EhSectionPiece &fde : sec->fdes) {
uint32_t id = endian::read32<ELFT::TargetEndianness>(fde.data().data() + 4);
uint32_t id = endian::read32<ELFT::Endian>(fde.data().data() + 4);
CieRecord *rec = offsetToCie[fde.inputOff + 4 - id];
if (!rec)
fatal(toString(sec) + ": invalid CIE reference");
Expand Down Expand Up @@ -448,7 +448,7 @@ void EhFrameSection::iterateFDEWithLSDAAux(
if (hasLSDA(cie))
ciesWithLSDA.insert(cie.inputOff);
for (EhSectionPiece &fde : sec.fdes) {
uint32_t id = endian::read32<ELFT::TargetEndianness>(fde.data().data() + 4);
uint32_t id = endian::read32<ELFT::Endian>(fde.data().data() + 4);
if (!ciesWithLSDA.contains(fde.inputOff + 4 - id))
continue;

Expand Down
1 change: 1 addition & 0 deletions llvm/include/llvm/Object/ELFTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ template <endianness E, bool Is64> struct ELFType {

public:
static const endianness TargetEndianness = E;
static const endianness Endian = E;
static const bool Is64Bits = Is64;

using uint = std::conditional_t<Is64, uint64_t, uint32_t>;
Expand Down
15 changes: 7 additions & 8 deletions llvm/lib/ObjCopy/ELF/ELFObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ using namespace llvm;
using namespace llvm::ELF;
using namespace llvm::objcopy::elf;
using namespace llvm::object;
using namespace llvm::support;

template <class ELFT> void ELFWriter<ELFT>::writePhdr(const Segment &Seg) {
uint8_t *B = reinterpret_cast<uint8_t *>(Buf->getBufferStart()) +
Expand Down Expand Up @@ -1175,9 +1176,9 @@ template <class ELFT>
Error ELFSectionWriter<ELFT>::visit(const GroupSection &Sec) {
ELF::Elf32_Word *Buf =
reinterpret_cast<ELF::Elf32_Word *>(Out.getBufferStart() + Sec.Offset);
support::endian::write32<ELFT::TargetEndianness>(Buf++, Sec.FlagWord);
endian::write32<ELFT::Endian>(Buf++, Sec.FlagWord);
for (SectionBase *S : Sec.GroupMembers)
support::endian::write32<ELFT::TargetEndianness>(Buf++, S->Index);
endian::write32<ELFT::Endian>(Buf++, S->Index);
return Error::success();
}

Expand Down Expand Up @@ -1522,10 +1523,9 @@ Error ELFBuilder<ELFT>::initGroupSection(GroupSection *GroupSec) {
reinterpret_cast<const ELF::Elf32_Word *>(GroupSec->Contents.data());
const ELF::Elf32_Word *End =
Word + GroupSec->Contents.size() / sizeof(ELF::Elf32_Word);
GroupSec->setFlagWord(
support::endian::read32<ELFT::TargetEndianness>(Word++));
GroupSec->setFlagWord(endian::read32<ELFT::Endian>(Word++));
for (; Word != End; ++Word) {
uint32_t Index = support::endian::read32<ELFT::TargetEndianness>(Word);
uint32_t Index = support::endian::read32<ELFT::Endian>(Word);
Expected<SectionBase *> Sec = SecTable.getSection(
Index, "group member index " + Twine(Index) + " in section '" +
GroupSec->Name + "' is invalid");
Expand Down Expand Up @@ -1993,9 +1993,8 @@ template <class ELFT> void ELFWriter<ELFT>::writeEhdr() {
Ehdr.e_ident[EI_MAG2] = 'L';
Ehdr.e_ident[EI_MAG3] = 'F';
Ehdr.e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32;
Ehdr.e_ident[EI_DATA] = ELFT::TargetEndianness == llvm::endianness::big
? ELFDATA2MSB
: ELFDATA2LSB;
Ehdr.e_ident[EI_DATA] =
ELFT::Endian == llvm::endianness::big ? ELFDATA2MSB : ELFDATA2LSB;
Ehdr.e_ident[EI_VERSION] = EV_CURRENT;
Ehdr.e_ident[EI_OSABI] = Obj.OSABI;
Ehdr.e_ident[EI_ABIVERSION] = Obj.ABIVersion;
Expand Down
58 changes: 29 additions & 29 deletions llvm/lib/ObjectYAML/ELFEmitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1314,7 +1314,7 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
if (!ELFT::Is64Bits && E > UINT32_MAX)
reportError(Section.Name + ": the value is too large for 32-bits: 0x" +
Twine::utohexstr(E));
CBA.write<uintX_t>(E, ELFT::TargetEndianness);
CBA.write<uintX_t>(E, ELFT::Endian);
}

SHeader.sh_size = sizeof(uintX_t) * Section.Entries->size();
Expand All @@ -1333,7 +1333,7 @@ void ELFState<ELFT>::writeSectionContent(
return;

for (uint32_t E : *Shndx.Entries)
CBA.write<uint32_t>(E, ELFT::TargetEndianness);
CBA.write<uint32_t>(E, ELFT::Endian);
SHeader.sh_size = Shndx.Entries->size() * SHeader.sh_entsize;
}

Expand All @@ -1357,7 +1357,7 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
SectionIndex = llvm::ELF::GRP_COMDAT;
else
SectionIndex = toSectionIndex(Member.sectionNameOrType, Section.Name);
CBA.write<uint32_t>(SectionIndex, ELFT::TargetEndianness);
CBA.write<uint32_t>(SectionIndex, ELFT::Endian);
}
SHeader.sh_size = SHeader.sh_entsize * Section.Members->size();
}
Expand All @@ -1370,7 +1370,7 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
return;

for (uint16_t Version : *Section.Entries)
CBA.write<uint16_t>(Version, ELFT::TargetEndianness);
CBA.write<uint16_t>(Version, ELFT::Endian);
SHeader.sh_size = Section.Entries->size() * SHeader.sh_entsize;
}

Expand All @@ -1382,7 +1382,7 @@ void ELFState<ELFT>::writeSectionContent(
return;

for (const ELFYAML::StackSizeEntry &E : *Section.Entries) {
CBA.write<uintX_t>(E.Address, ELFT::TargetEndianness);
CBA.write<uintX_t>(E.Address, ELFT::Endian);
SHeader.sh_size += sizeof(uintX_t) + CBA.writeULEB128(E.Size);
}
}
Expand Down Expand Up @@ -1444,7 +1444,7 @@ void ELFState<ELFT>::writeSectionContent(
uint64_t TotalNumBlocks = 0;
for (const ELFYAML::BBAddrMapEntry::BBRangeEntry &BBR : *E.BBRanges) {
// Write the base address of the range.
CBA.write<uintX_t>(BBR.BaseAddress, ELFT::TargetEndianness);
CBA.write<uintX_t>(BBR.BaseAddress, ELFT::Endian);
// Write number of BBEntries (number of basic blocks in this basic block
// range). This is overridden by the 'NumBlocks' YAML field when
// specified.
Expand Down Expand Up @@ -1558,7 +1558,7 @@ void ELFState<ELFT>::writeSectionContent(
return;

for (const ELFYAML::CallGraphEntryWeight &E : *Section.Entries) {
CBA.write<uint64_t>(E.Weight, ELFT::TargetEndianness);
CBA.write<uint64_t>(E.Weight, ELFT::Endian);
SHeader.sh_size += sizeof(object::Elf_CGProfile_Impl<ELFT>);
}
}
Expand All @@ -1572,15 +1572,15 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,

CBA.write<uint32_t>(
Section.NBucket.value_or(llvm::yaml::Hex64(Section.Bucket->size())),
ELFT::TargetEndianness);
ELFT::Endian);
CBA.write<uint32_t>(
Section.NChain.value_or(llvm::yaml::Hex64(Section.Chain->size())),
ELFT::TargetEndianness);
ELFT::Endian);

for (uint32_t Val : *Section.Bucket)
CBA.write<uint32_t>(Val, ELFT::TargetEndianness);
CBA.write<uint32_t>(Val, ELFT::Endian);
for (uint32_t Val : *Section.Chain)
CBA.write<uint32_t>(Val, ELFT::TargetEndianness);
CBA.write<uint32_t>(Val, ELFT::Endian);

SHeader.sh_size = (2 + Section.Bucket->size() + Section.Chain->size()) * 4;
}
Expand Down Expand Up @@ -1687,8 +1687,8 @@ void ELFState<ELFT>::writeSectionContent(
return;

for (const ELFYAML::ARMIndexTableEntry &E : *Section.Entries) {
CBA.write<uint32_t>(E.Offset, ELFT::TargetEndianness);
CBA.write<uint32_t>(E.Value, ELFT::TargetEndianness);
CBA.write<uint32_t>(E.Offset, ELFT::Endian);
CBA.write<uint32_t>(E.Value, ELFT::Endian);
}
SHeader.sh_size = Section.Entries->size() * 8;
}
Expand Down Expand Up @@ -1729,8 +1729,8 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
return;

for (const ELFYAML::DynamicEntry &DE : *Section.Entries) {
CBA.write<uintX_t>(DE.Tag, ELFT::TargetEndianness);
CBA.write<uintX_t>(DE.Val, ELFT::TargetEndianness);
CBA.write<uintX_t>(DE.Tag, ELFT::Endian);
CBA.write<uintX_t>(DE.Val, ELFT::Endian);
}
SHeader.sh_size = 2 * sizeof(uintX_t) * Section.Entries->size();
}
Expand Down Expand Up @@ -1758,18 +1758,18 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
for (const ELFYAML::NoteEntry &NE : *Section.Notes) {
// Write name size.
if (NE.Name.empty())
CBA.write<uint32_t>(0, ELFT::TargetEndianness);
CBA.write<uint32_t>(0, ELFT::Endian);
else
CBA.write<uint32_t>(NE.Name.size() + 1, ELFT::TargetEndianness);
CBA.write<uint32_t>(NE.Name.size() + 1, ELFT::Endian);

// Write description size.
if (NE.Desc.binary_size() == 0)
CBA.write<uint32_t>(0, ELFT::TargetEndianness);
CBA.write<uint32_t>(0, ELFT::Endian);
else
CBA.write<uint32_t>(NE.Desc.binary_size(), ELFT::TargetEndianness);
CBA.write<uint32_t>(NE.Desc.binary_size(), ELFT::Endian);

// Write type.
CBA.write<uint32_t>(NE.Type, ELFT::TargetEndianness);
CBA.write<uint32_t>(NE.Type, ELFT::Endian);

// Write name, null terminator and padding.
if (!NE.Name.empty()) {
Expand Down Expand Up @@ -1803,35 +1803,35 @@ void ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
// be used to override this field, which is useful for producing broken
// objects.
if (Section.Header->NBuckets)
CBA.write<uint32_t>(*Section.Header->NBuckets, ELFT::TargetEndianness);
CBA.write<uint32_t>(*Section.Header->NBuckets, ELFT::Endian);
else
CBA.write<uint32_t>(Section.HashBuckets->size(), ELFT::TargetEndianness);
CBA.write<uint32_t>(Section.HashBuckets->size(), ELFT::Endian);

// Write the index of the first symbol in the dynamic symbol table accessible
// via the hash table.
CBA.write<uint32_t>(Section.Header->SymNdx, ELFT::TargetEndianness);
CBA.write<uint32_t>(Section.Header->SymNdx, ELFT::Endian);

// Write the number of words in the Bloom filter. As above, the "MaskWords"
// property can be used to set this field to any value.
if (Section.Header->MaskWords)
CBA.write<uint32_t>(*Section.Header->MaskWords, ELFT::TargetEndianness);
CBA.write<uint32_t>(*Section.Header->MaskWords, ELFT::Endian);
else
CBA.write<uint32_t>(Section.BloomFilter->size(), ELFT::TargetEndianness);
CBA.write<uint32_t>(Section.BloomFilter->size(), ELFT::Endian);

// Write the shift constant used by the Bloom filter.
CBA.write<uint32_t>(Section.Header->Shift2, ELFT::TargetEndianness);
CBA.write<uint32_t>(Section.Header->Shift2, ELFT::Endian);

// We've finished writing the header. Now write the Bloom filter.
for (llvm::yaml::Hex64 Val : *Section.BloomFilter)
CBA.write<uintX_t>(Val, ELFT::TargetEndianness);
CBA.write<uintX_t>(Val, ELFT::Endian);

// Write an array of hash buckets.
for (llvm::yaml::Hex32 Val : *Section.HashBuckets)
CBA.write<uint32_t>(Val, ELFT::TargetEndianness);
CBA.write<uint32_t>(Val, ELFT::Endian);

// Write an array of hash values.
for (llvm::yaml::Hex32 Val : *Section.HashValues)
CBA.write<uint32_t>(Val, ELFT::TargetEndianness);
CBA.write<uint32_t>(Val, ELFT::Endian);

SHeader.sh_size = 16 /*Header size*/ +
Section.BloomFilter->size() * sizeof(typename ELFT::uint) +
Expand Down
9 changes: 4 additions & 5 deletions llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ void PrinterContext<ELFT>::printEHFrameHdr(const Elf_Phdr *EHFramePHdr) const {
if (!Content)
reportError(Content.takeError(), ObjF.getFileName());

DataExtractor DE(*Content, ELFT::TargetEndianness == llvm::endianness::little,
DataExtractor DE(*Content, ELFT::Endian == llvm::endianness::little,
ELFT::Is64Bits ? 8 : 4);

DictScope D(W, "Header");
Expand Down Expand Up @@ -186,10 +186,9 @@ void PrinterContext<ELFT>::printEHFrame(const Elf_Shdr *EHFrameShdr) const {
// Construct DWARFDataExtractor to handle relocations ("PC Begin" fields).
std::unique_ptr<DWARFContext> DICtx = DWARFContext::create(
ObjF, DWARFContext::ProcessDebugRelocations::Process, nullptr);
DWARFDataExtractor DE(DICtx->getDWARFObj(),
DICtx->getDWARFObj().getEHFrameSection(),
ELFT::TargetEndianness == llvm::endianness::little,
ELFT::Is64Bits ? 8 : 4);
DWARFDataExtractor DE(
DICtx->getDWARFObj(), DICtx->getDWARFObj().getEHFrameSection(),
ELFT::Endian == llvm::endianness::little, ELFT::Is64Bits ? 8 : 4);
DWARFDebugFrame EHFrame(Triple::ArchType(ObjF.getArch()), /*IsEH=*/true,
/*EHFrameAddress=*/Address);
if (Error E = EHFrame.parse(DE))
Expand Down
44 changes: 19 additions & 25 deletions llvm/tools/llvm-readobj/ELFDumper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@

using namespace llvm;
using namespace llvm::object;
using namespace llvm::support;
using namespace ELF;

#define LLVM_READOBJ_ENUM_CASE(ns, enum) \
Expand Down Expand Up @@ -3419,13 +3420,12 @@ template <class ELFT> void ELFDumper<ELFT>::printStackMap() const {
return;
}

if (Error E = StackMapParser<ELFT::TargetEndianness>::validateHeader(
*ContentOrErr)) {
if (Error E = StackMapParser<ELFT::Endian>::validateHeader(*ContentOrErr)) {
Warn(std::move(E));
return;
}

prettyPrintStackMap(W, StackMapParser<ELFT::TargetEndianness>(*ContentOrErr));
prettyPrintStackMap(W, StackMapParser<ELFT::Endian>(*ContentOrErr));
}

template <class ELFT>
Expand Down Expand Up @@ -5145,7 +5145,7 @@ static std::string getGNUProperty(uint32_t Type, uint32_t DataSize,
OS << format("<corrupt length: 0x%x>", DataSize);
return OS.str();
}
PrData = support::endian::read32<ELFT::TargetEndianness>(Data.data());
PrData = endian::read32<ELFT::Endian>(Data.data());
if (PrData == 0) {
OS << "<None>";
return OS.str();
Expand All @@ -5169,7 +5169,7 @@ static std::string getGNUProperty(uint32_t Type, uint32_t DataSize,
OS << format("<corrupt length: 0x%x>", DataSize);
return OS.str();
}
PrData = support::endian::read32<ELFT::TargetEndianness>(Data.data());
PrData = endian::read32<ELFT::Endian>(Data.data());
if (PrData == 0) {
OS << "<None>";
return OS.str();
Expand All @@ -5195,7 +5195,7 @@ static std::string getGNUProperty(uint32_t Type, uint32_t DataSize,
OS << format("<corrupt length: 0x%x>", DataSize);
return OS.str();
}
PrData = support::endian::read32<ELFT::TargetEndianness>(Data.data());
PrData = endian::read32<ELFT::Endian>(Data.data());
if (PrData == 0) {
OS << "<None>";
return OS.str();
Expand Down Expand Up @@ -5374,10 +5374,8 @@ static bool printAArch64Note(raw_ostream &OS, uint32_t NoteType,
return false;
}

uint64_t Platform =
support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 0);
uint64_t Version =
support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 8);
uint64_t Platform = endian::read64<ELFT::Endian>(Desc.data() + 0);
uint64_t Version = endian::read64<ELFT::Endian>(Desc.data() + 8);
OS << format("platform 0x%" PRIx64 ", version 0x%" PRIx64, Platform, Version);

if (Desc.size() > 16)
Expand Down Expand Up @@ -5457,16 +5455,14 @@ getFreeBSDNote(uint32_t NoteType, ArrayRef<uint8_t> Desc, bool IsCore) {
case ELF::NT_FREEBSD_ABI_TAG:
if (Desc.size() != 4)
return std::nullopt;
return FreeBSDNote{
"ABI tag",
utostr(support::endian::read32<ELFT::TargetEndianness>(Desc.data()))};
return FreeBSDNote{"ABI tag",
utostr(endian::read32<ELFT::Endian>(Desc.data()))};
case ELF::NT_FREEBSD_ARCH_TAG:
return FreeBSDNote{"Arch tag", toStringRef(Desc).str()};
case ELF::NT_FREEBSD_FEATURE_CTL: {
if (Desc.size() != 4)
return std::nullopt;
unsigned Value =
support::endian::read32<ELFT::TargetEndianness>(Desc.data());
unsigned Value = endian::read32<ELFT::Endian>(Desc.data());
std::string FlagsStr;
raw_string_ostream OS(FlagsStr);
printFlags(Value, ArrayRef(FreeBSDFeatureCtlFlags), OS);
Expand Down Expand Up @@ -6052,9 +6048,9 @@ template <class ELFT> void GNUELFDumper<ELFT>::printNotes() {
return Error::success();
} else if (Name == "CORE") {
if (Type == ELF::NT_FILE) {
DataExtractor DescExtractor(
Descriptor, ELFT::TargetEndianness == llvm::endianness::little,
sizeof(Elf_Addr));
DataExtractor DescExtractor(Descriptor,
ELFT::Endian == llvm::endianness::little,
sizeof(Elf_Addr));
if (Expected<CoreNote> NoteOrErr = readCoreNote(DescExtractor)) {
printCoreNote<ELFT>(OS, *NoteOrErr);
return Error::success();
Expand Down Expand Up @@ -7714,10 +7710,8 @@ static bool printAarch64NoteLLVMStyle(uint32_t NoteType, ArrayRef<uint8_t> Desc,
if (Desc.size() < 16)
return false;

uint64_t platform =
support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 0);
uint64_t version =
support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 8);
uint64_t platform = endian::read64<ELFT::Endian>(Desc.data() + 0);
uint64_t version = endian::read64<ELFT::Endian>(Desc.data() + 8);
W.printNumber("Platform", platform);
W.printNumber("Version", version);

Expand Down Expand Up @@ -7851,9 +7845,9 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printNotes() {
return Error::success();
} else if (Name == "CORE") {
if (Type == ELF::NT_FILE) {
DataExtractor DescExtractor(
Descriptor, ELFT::TargetEndianness == llvm::endianness::little,
sizeof(Elf_Addr));
DataExtractor DescExtractor(Descriptor,
ELFT::Endian == llvm::endianness::little,
sizeof(Elf_Addr));
if (Expected<CoreNote> N = readCoreNote(DescExtractor)) {
printCoreNoteLLVMStyle(*N, W);
return Error::success();
Expand Down