[lld] r264974 - Convert a few macho reader/writer helpers to new error handling. NFC.
Pete Cooper via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 30 17:44:35 PDT 2016
Should all be fixed in r264977/r264978.
Cheers,
Pete
> On Mar 30, 2016, at 5:18 PM, Pete Cooper via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Hey Rui
>
> Had no idea that flag existed. Thanks for pointing it out. I’ll rebuild with it now.
>
> Cheers,
> Pete
>> On Mar 30, 2016, at 5:17 PM, Rui Ueyama <ruiu at google.com <mailto:ruiu at google.com>> wrote:
>>
>> Hi Pete,
>>
>> This patch is not clean in terms of -Wpessimizing-move. Can you compile with that flag? (I can do this for you, but I expect that you are going to submit more patches like this soon.)
>>
>> On Wed, Mar 30, 2016 at 5:08 PM, Pete Cooper via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
>> Author: pete
>> Date: Wed Mar 30 19:08:16 2016
>> New Revision: 264974
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=264974&view=rev <http://llvm.org/viewvc/llvm-project?rev=264974&view=rev>
>> Log:
>> Convert a few macho reader/writer helpers to new error handling. NFC.
>>
>> These methods were responsible for some of the few remaining calls
>> to llvm::errorCodeToError. Converting them makes us have more Error's
>> in the api and fewer error_code's.
>>
>> Modified:
>> lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
>> lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp
>>
>> Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp?rev=264974&r1=264973&r2=264974&view=diff <http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp?rev=264974&r1=264973&r2=264974&view=diff>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp (original)
>> +++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp Wed Mar 30 19:08:16 2016
>> @@ -53,7 +53,7 @@ namespace mach_o {
>> namespace normalized {
>>
>> // Utility to call a lambda expression on each load command.
>> -static std::error_code forEachLoadCommand(
>> +static llvm::Error forEachLoadCommand(
>> StringRef lcRange, unsigned lcCount, bool isBig, bool is64,
>> std::function<bool(uint32_t cmd, uint32_t size, const char *lc)> func) {
>> const char* p = lcRange.begin();
>> @@ -67,15 +67,15 @@ static std::error_code forEachLoadComman
>> slc = &lcCopy;
>> }
>> if ( (p + slc->cmdsize) > lcRange.end() )
>> - return make_error_code(llvm::errc::executable_format_error);
>> + return llvm::make_error<GenericError>("Load command exceeds range");
>>
>> if (func(slc->cmd, slc->cmdsize, p))
>> - return std::error_code();
>> + return llvm::Error();
>>
>> p += slc->cmdsize;
>> }
>>
>> - return std::error_code();
>> + return llvm::Error();
>> }
>>
>> static std::error_code appendRelocations(Relocations &relocs, StringRef buffer,
>> @@ -257,9 +257,9 @@ readBinary(std::unique_ptr<MemoryBuffer>
>> // Pre-scan load commands looking for indirect symbol table.
>> uint32_t indirectSymbolTableOffset = 0;
>> uint32_t indirectSymbolTableCount = 0;
>> - std::error_code ec = forEachLoadCommand(lcRange, lcCount, isBig, is64,
>> - [&](uint32_t cmd, uint32_t size,
>> - const char *lc) -> bool {
>> + auto ec = forEachLoadCommand(lcRange, lcCount, isBig, is64,
>> + [&](uint32_t cmd, uint32_t size,
>> + const char *lc) -> bool {
>> if (cmd == LC_DYSYMTAB) {
>> const dysymtab_command *d = reinterpret_cast<const dysymtab_command*>(lc);
>> indirectSymbolTableOffset = read32(&d->indirectsymoff, isBig);
>> @@ -269,7 +269,7 @@ readBinary(std::unique_ptr<MemoryBuffer>
>> return false;
>> });
>> if (ec)
>> - return llvm::errorCodeToError(ec);
>> + return std::move(ec);
>>
>> // Walk load commands looking for segments/sections and the symbol table.
>> const data_in_code_entry *dataInCode = nullptr;
>> @@ -485,7 +485,7 @@ readBinary(std::unique_ptr<MemoryBuffer>
>> return false;
>> });
>> if (ec)
>> - return llvm::errorCodeToError(ec);
>> + return std::move(ec);
>>
>> if (dataInCode) {
>> // Convert on-disk data_in_code_entry array to DataInCode vector.
>>
>> Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp?rev=264974&r1=264973&r2=264974&view=diff <http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp?rev=264974&r1=264973&r2=264974&view=diff>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp (original)
>> +++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp Wed Mar 30 19:08:16 2016
>> @@ -139,7 +139,7 @@ private:
>> uint32_t loadCommandsSize(uint32_t &count);
>> void buildFileOffsets();
>> void writeMachHeader();
>> - std::error_code writeLoadCommands();
>> + llvm::Error writeLoadCommands();
>> void writeSectionContent();
>> void writeRelocations();
>> void writeSymbolTable();
>> @@ -179,8 +179,8 @@ private:
>> };
>>
>> template <typename T>
>> - std::error_code writeSingleSegmentLoadCommand(uint8_t *&lc);
>> - template <typename T> std::error_code writeSegmentLoadCommands(uint8_t *&lc);
>> + llvm::Error writeSingleSegmentLoadCommand(uint8_t *&lc);
>> + template <typename T> llvm::Error writeSegmentLoadCommands(uint8_t *&lc);
>>
>> uint32_t pointerAlign(uint32_t value);
>> static StringRef dyldPath();
>> @@ -628,7 +628,7 @@ uint32_t MachOFileLayout::indirectSymbol
>> }
>>
>> template <typename T>
>> -std::error_code MachOFileLayout::writeSingleSegmentLoadCommand(uint8_t *&lc) {
>> +llvm::Error MachOFileLayout::writeSingleSegmentLoadCommand(uint8_t *&lc) {
>> typename T::command* seg = reinterpret_cast<typename T::command*>(lc);
>> seg->cmd = T::LC;
>> seg->cmdsize = sizeof(typename T::command)
>> @@ -668,11 +668,11 @@ std::error_code MachOFileLayout::writeSi
>> ++sout;
>> }
>> lc = next;
>> - return std::error_code();
>> + return llvm::Error();
>> }
>>
>> template <typename T>
>> -std::error_code MachOFileLayout::writeSegmentLoadCommands(uint8_t *&lc) {
>> +llvm::Error MachOFileLayout::writeSegmentLoadCommands(uint8_t *&lc) {
>> uint32_t indirectSymRunningIndex = 0;
>> for (const Segment &seg : _file.segments) {
>> // Link edit has no sections and a custom range of address, so handle it
>> @@ -738,7 +738,7 @@ std::error_code MachOFileLayout::writeSe
>> }
>> lc = reinterpret_cast<uint8_t*>(next);
>> }
>> - return std::error_code();
>> + return llvm::Error();
>> }
>>
>> static void writeVersionMinLoadCommand(const NormalizedFile &_file,
>> @@ -773,15 +773,17 @@ static void writeVersionMinLoadCommand(c
>> lc += sizeof(version_min_command);
>> }
>>
>> -std::error_code MachOFileLayout::writeLoadCommands() {
>> - std::error_code ec;
>> +llvm::Error MachOFileLayout::writeLoadCommands() {
>> uint8_t *lc = &_buffer[_startOfLoadCommands];
>> if (_file.fileType == llvm::MachO::MH_OBJECT) {
>> // Object files have one unnamed segment which holds all sections.
>> - if (_is64)
>> - ec = writeSingleSegmentLoadCommand<MachO64Trait>(lc);
>> - else
>> - ec = writeSingleSegmentLoadCommand<MachO32Trait>(lc);
>> + if (_is64) {
>> + if (auto ec = writeSingleSegmentLoadCommand<MachO64Trait>(lc))
>> + return std::move(ec);
>> + } else {
>> + if (auto ec = writeSingleSegmentLoadCommand<MachO32Trait>(lc))
>> + return std::move(ec);
>> + }
>> // Add LC_SYMTAB with symbol table info
>> symtab_command* st = reinterpret_cast<symtab_command*>(lc);
>> st->cmd = LC_SYMTAB;
>> @@ -824,10 +826,13 @@ std::error_code MachOFileLayout::writeLo
>> }
>> } else {
>> // Final linked images have sections under segments.
>> - if (_is64)
>> - ec = writeSegmentLoadCommands<MachO64Trait>(lc);
>> - else
>> - ec = writeSegmentLoadCommands<MachO32Trait>(lc);
>> + if (_is64) {
>> + if (auto ec = writeSegmentLoadCommands<MachO64Trait>(lc))
>> + return std::move(ec);
>> + } else {
>> + if (auto ec = writeSegmentLoadCommands<MachO32Trait>(lc))
>> + return std::move(ec);
>> + }
>>
>> // Add LC_ID_DYLIB command for dynamic libraries.
>> if (_file.fileType == llvm::MachO::MH_DYLIB) {
>> @@ -1012,7 +1017,7 @@ std::error_code MachOFileLayout::writeLo
>> lc += sizeof(linkedit_data_command);
>> }
>> }
>> - return ec;
>> + return llvm::Error();
>> }
>>
>> void MachOFileLayout::writeSectionContent() {
>> @@ -1475,9 +1480,8 @@ llvm::Error MachOFileLayout::writeBinary
>> // Write content.
>> _buffer = fob->getBufferStart();
>> writeMachHeader();
>> - std::error_code ec = writeLoadCommands();
>> - if (ec)
>> - return llvm::errorCodeToError(ec);
>> + if (auto ec = writeLoadCommands())
>> + return std::move(ec);
>> writeSectionContent();
>> writeLinkEditContent();
>> fob->commit();
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
>>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160330/ab210c79/attachment.html>
More information about the llvm-commits
mailing list