[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:18:21 PDT 2016


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> 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>
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160330/c202a240/attachment.html>


More information about the llvm-commits mailing list