diff --git a/include/llvm/Support/DataExtractor.h b/include/llvm/Support/DataExtractor.h index bd337f23925..f590a1e104f 100644 --- a/include/llvm/Support/DataExtractor.h +++ b/include/llvm/Support/DataExtractor.h @@ -82,6 +82,11 @@ public: /// valid. DataExtractor(StringRef Data, bool IsLittleEndian, uint8_t AddressSize) : Data(Data), IsLittleEndian(IsLittleEndian), AddressSize(AddressSize) {} + DataExtractor(ArrayRef Data, bool IsLittleEndian, + uint8_t AddressSize) + : Data(StringRef(reinterpret_cast(Data.data()), + Data.size())), + IsLittleEndian(IsLittleEndian), AddressSize(AddressSize) {} /// Get the data pointed to by this extractor. StringRef getData() const { return Data; } diff --git a/tools/llvm-readobj/DwarfCFIEHPrinter.h b/tools/llvm-readobj/DwarfCFIEHPrinter.h index fdd01e12283..683243f8cd4 100644 --- a/tools/llvm-readobj/DwarfCFIEHPrinter.h +++ b/tools/llvm-readobj/DwarfCFIEHPrinter.h @@ -114,11 +114,9 @@ void PrinterContext::printEHFrameHdr(uint64_t EHFrameHdrOffset, W.printString("Corresponding Section", *SectionName); } - DataExtractor DE( - StringRef(reinterpret_cast(Obj->base()) + EHFrameHdrOffset, - EHFrameHdrSize), - ELFT::TargetEndianness == support::endianness::little, - ELFT::Is64Bits ? 8 : 4); + DataExtractor DE(makeArrayRef(Obj->base() + EHFrameHdrOffset, EHFrameHdrSize), + ELFT::TargetEndianness == support::endianness::little, + ELFT::Is64Bits ? 8 : 4); DictScope D(W, "Header"); uint64_t Offset = 0; diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 51e242f7db9..82d9fbb3ee7 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -4639,10 +4639,9 @@ void GNUStyle::printNotes(const ELFFile *Obj) { OS << " " << N.Type << ":\n " << N.Value << '\n'; } else if (Name == "CORE") { if (Type == ELF::NT_FILE) { - DataExtractor DescExtractor( - StringRef(reinterpret_cast(Descriptor.data()), - Descriptor.size()), - ELFT::TargetEndianness == support::little, sizeof(Elf_Addr)); + DataExtractor DescExtractor(Descriptor, + ELFT::TargetEndianness == support::little, + sizeof(Elf_Addr)); Expected Note = readCoreNote(DescExtractor); if (Note) printCoreNote(OS, *Note); @@ -4836,10 +4835,7 @@ void DumpStyle::printNonRelocatableStackSizes( const Elf_Shdr *ElfSec = Obj->getSection(Sec.getRawDataRefImpl()); ArrayRef Contents = unwrapOrError(this->FileName, EF->getSectionContents(ElfSec)); - DataExtractor Data( - StringRef(reinterpret_cast(Contents.data()), - Contents.size()), - Obj->isLittleEndian(), sizeof(Elf_Addr)); + DataExtractor Data(Contents, Obj->isLittleEndian(), sizeof(Elf_Addr)); // A .stack_sizes section header's sh_link field is supposed to point // to the section that contains the functions whose stack sizes are // described in it. @@ -4937,10 +4933,7 @@ void DumpStyle::printRelocatableStackSizes( RelocationResolver Resolver; std::tie(IsSupportedFn, Resolver) = getRelocationResolver(*Obj); auto Contents = unwrapOrError(this->FileName, StackSizesSec.getContents()); - DataExtractor Data( - StringRef(reinterpret_cast(Contents.data()), - Contents.size()), - Obj->isLittleEndian(), sizeof(Elf_Addr)); + DataExtractor Data(Contents, Obj->isLittleEndian(), sizeof(Elf_Addr)); for (const RelocationRef &Reloc : RelocSec.relocations()) { if (!IsSupportedFn(Reloc.getType())) reportError(createStringError( @@ -5831,10 +5824,9 @@ void LLVMStyle::printNotes(const ELFFile *Obj) { W.printString(N.Type, N.Value); } else if (Name == "CORE") { if (Type == ELF::NT_FILE) { - DataExtractor DescExtractor( - StringRef(reinterpret_cast(Descriptor.data()), - Descriptor.size()), - ELFT::TargetEndianness == support::little, sizeof(Elf_Addr)); + DataExtractor DescExtractor(Descriptor, + ELFT::TargetEndianness == support::little, + sizeof(Elf_Addr)); Expected Note = readCoreNote(DescExtractor); if (Note) printCoreNoteLLVMStyle(*Note, W);