<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Should all be fixed in r264977/r264978.<div class=""><br class=""></div><div class="">Cheers,</div><div class="">Pete<br class=""><div><blockquote type="cite" class=""><div class="">On Mar 30, 2016, at 5:18 PM, Pete Cooper via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hey Rui<div class=""><br class=""></div><div class="">Had no idea that flag existed. Thanks for pointing it out. I’ll rebuild with it now.</div><div class=""><br class=""></div><div class="">Cheers,</div><div class="">Pete<br class=""><div class=""><blockquote type="cite" class=""><div class="">On Mar 30, 2016, at 5:17 PM, Rui Ueyama <<a href="mailto:ruiu@google.com" class="">ruiu@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi Pete,<div class=""><br class=""></div><div class="">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.)</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Wed, Mar 30, 2016 at 5:08 PM, Pete Cooper via llvm-commits <span dir="ltr" class=""><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: pete<br class="">
Date: Wed Mar 30 19:08:16 2016<br class="">
New Revision: 264974<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=264974&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=264974&view=rev</a><br class="">
Log:<br class="">
Convert a few macho reader/writer helpers to new error handling. NFC.<br class="">
<br class="">
These methods were responsible for some of the few remaining calls<br class="">
to llvm::errorCodeToError. Converting them makes us have more Error's<br class="">
in the api and fewer error_code's.<br class="">
<br class="">
Modified:<br class="">
lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp<br class="">
lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp<br class="">
<br class="">
Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp?rev=264974&r1=264973&r2=264974&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp?rev=264974&r1=264973&r2=264974&view=diff</a><br class="">
==============================================================================<br class="">
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp (original)<br class="">
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp Wed Mar 30 19:08:16 2016<br class="">
@@ -53,7 +53,7 @@ namespace mach_o {<br class="">
namespace normalized {<br class="">
<br class="">
// Utility to call a lambda expression on each load command.<br class="">
-static std::error_code forEachLoadCommand(<br class="">
+static llvm::Error forEachLoadCommand(<br class="">
StringRef lcRange, unsigned lcCount, bool isBig, bool is64,<br class="">
std::function<bool(uint32_t cmd, uint32_t size, const char *lc)> func) {<br class="">
const char* p = lcRange.begin();<br class="">
@@ -67,15 +67,15 @@ static std::error_code forEachLoadComman<br class="">
slc = &lcCopy;<br class="">
}<br class="">
if ( (p + slc->cmdsize) > lcRange.end() )<br class="">
- return make_error_code(llvm::errc::executable_format_error);<br class="">
+ return llvm::make_error<GenericError>("Load command exceeds range");<br class="">
<br class="">
if (func(slc->cmd, slc->cmdsize, p))<br class="">
- return std::error_code();<br class="">
+ return llvm::Error();<br class="">
<br class="">
p += slc->cmdsize;<br class="">
}<br class="">
<br class="">
- return std::error_code();<br class="">
+ return llvm::Error();<br class="">
}<br class="">
<br class="">
static std::error_code appendRelocations(Relocations &relocs, StringRef buffer,<br class="">
@@ -257,9 +257,9 @@ readBinary(std::unique_ptr<MemoryBuffer><br class="">
// Pre-scan load commands looking for indirect symbol table.<br class="">
uint32_t indirectSymbolTableOffset = 0;<br class="">
uint32_t indirectSymbolTableCount = 0;<br class="">
- std::error_code ec = forEachLoadCommand(lcRange, lcCount, isBig, is64,<br class="">
- [&](uint32_t cmd, uint32_t size,<br class="">
- const char *lc) -> bool {<br class="">
+ auto ec = forEachLoadCommand(lcRange, lcCount, isBig, is64,<br class="">
+ [&](uint32_t cmd, uint32_t size,<br class="">
+ const char *lc) -> bool {<br class="">
if (cmd == LC_DYSYMTAB) {<br class="">
const dysymtab_command *d = reinterpret_cast<const dysymtab_command*>(lc);<br class="">
indirectSymbolTableOffset = read32(&d->indirectsymoff, isBig);<br class="">
@@ -269,7 +269,7 @@ readBinary(std::unique_ptr<MemoryBuffer><br class="">
return false;<br class="">
});<br class="">
if (ec)<br class="">
- return llvm::errorCodeToError(ec);<br class="">
+ return std::move(ec);<br class="">
<br class="">
// Walk load commands looking for segments/sections and the symbol table.<br class="">
const data_in_code_entry *dataInCode = nullptr;<br class="">
@@ -485,7 +485,7 @@ readBinary(std::unique_ptr<MemoryBuffer><br class="">
return false;<br class="">
});<br class="">
if (ec)<br class="">
- return llvm::errorCodeToError(ec);<br class="">
+ return std::move(ec);<br class="">
<br class="">
if (dataInCode) {<br class="">
// Convert on-disk data_in_code_entry array to DataInCode vector.<br class="">
<br class="">
Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp?rev=264974&r1=264973&r2=264974&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp?rev=264974&r1=264973&r2=264974&view=diff</a><br class="">
==============================================================================<br class="">
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp (original)<br class="">
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp Wed Mar 30 19:08:16 2016<br class="">
@@ -139,7 +139,7 @@ private:<br class="">
uint32_t loadCommandsSize(uint32_t &count);<br class="">
void buildFileOffsets();<br class="">
void writeMachHeader();<br class="">
- std::error_code writeLoadCommands();<br class="">
+ llvm::Error writeLoadCommands();<br class="">
void writeSectionContent();<br class="">
void writeRelocations();<br class="">
void writeSymbolTable();<br class="">
@@ -179,8 +179,8 @@ private:<br class="">
};<br class="">
<br class="">
template <typename T><br class="">
- std::error_code writeSingleSegmentLoadCommand(uint8_t *&lc);<br class="">
- template <typename T> std::error_code writeSegmentLoadCommands(uint8_t *&lc);<br class="">
+ llvm::Error writeSingleSegmentLoadCommand(uint8_t *&lc);<br class="">
+ template <typename T> llvm::Error writeSegmentLoadCommands(uint8_t *&lc);<br class="">
<br class="">
uint32_t pointerAlign(uint32_t value);<br class="">
static StringRef dyldPath();<br class="">
@@ -628,7 +628,7 @@ uint32_t MachOFileLayout::indirectSymbol<br class="">
}<br class="">
<br class="">
template <typename T><br class="">
-std::error_code MachOFileLayout::writeSingleSegmentLoadCommand(uint8_t *&lc) {<br class="">
+llvm::Error MachOFileLayout::writeSingleSegmentLoadCommand(uint8_t *&lc) {<br class="">
typename T::command* seg = reinterpret_cast<typename T::command*>(lc);<br class="">
seg->cmd = T::LC;<br class="">
seg->cmdsize = sizeof(typename T::command)<br class="">
@@ -668,11 +668,11 @@ std::error_code MachOFileLayout::writeSi<br class="">
++sout;<br class="">
}<br class="">
lc = next;<br class="">
- return std::error_code();<br class="">
+ return llvm::Error();<br class="">
}<br class="">
<br class="">
template <typename T><br class="">
-std::error_code MachOFileLayout::writeSegmentLoadCommands(uint8_t *&lc) {<br class="">
+llvm::Error MachOFileLayout::writeSegmentLoadCommands(uint8_t *&lc) {<br class="">
uint32_t indirectSymRunningIndex = 0;<br class="">
for (const Segment &seg : _file.segments) {<br class="">
// Link edit has no sections and a custom range of address, so handle it<br class="">
@@ -738,7 +738,7 @@ std::error_code MachOFileLayout::writeSe<br class="">
}<br class="">
lc = reinterpret_cast<uint8_t*>(next);<br class="">
}<br class="">
- return std::error_code();<br class="">
+ return llvm::Error();<br class="">
}<br class="">
<br class="">
static void writeVersionMinLoadCommand(const NormalizedFile &_file,<br class="">
@@ -773,15 +773,17 @@ static void writeVersionMinLoadCommand(c<br class="">
lc += sizeof(version_min_command);<br class="">
}<br class="">
<br class="">
-std::error_code MachOFileLayout::writeLoadCommands() {<br class="">
- std::error_code ec;<br class="">
+llvm::Error MachOFileLayout::writeLoadCommands() {<br class="">
uint8_t *lc = &_buffer[_startOfLoadCommands];<br class="">
if (_file.fileType == llvm::MachO::MH_OBJECT) {<br class="">
// Object files have one unnamed segment which holds all sections.<br class="">
- if (_is64)<br class="">
- ec = writeSingleSegmentLoadCommand<MachO64Trait>(lc);<br class="">
- else<br class="">
- ec = writeSingleSegmentLoadCommand<MachO32Trait>(lc);<br class="">
+ if (_is64) {<br class="">
+ if (auto ec = writeSingleSegmentLoadCommand<MachO64Trait>(lc))<br class="">
+ return std::move(ec);<br class="">
+ } else {<br class="">
+ if (auto ec = writeSingleSegmentLoadCommand<MachO32Trait>(lc))<br class="">
+ return std::move(ec);<br class="">
+ }<br class="">
// Add LC_SYMTAB with symbol table info<br class="">
symtab_command* st = reinterpret_cast<symtab_command*>(lc);<br class="">
st->cmd = LC_SYMTAB;<br class="">
@@ -824,10 +826,13 @@ std::error_code MachOFileLayout::writeLo<br class="">
}<br class="">
} else {<br class="">
// Final linked images have sections under segments.<br class="">
- if (_is64)<br class="">
- ec = writeSegmentLoadCommands<MachO64Trait>(lc);<br class="">
- else<br class="">
- ec = writeSegmentLoadCommands<MachO32Trait>(lc);<br class="">
+ if (_is64) {<br class="">
+ if (auto ec = writeSegmentLoadCommands<MachO64Trait>(lc))<br class="">
+ return std::move(ec);<br class="">
+ } else {<br class="">
+ if (auto ec = writeSegmentLoadCommands<MachO32Trait>(lc))<br class="">
+ return std::move(ec);<br class="">
+ }<br class="">
<br class="">
// Add LC_ID_DYLIB command for dynamic libraries.<br class="">
if (_file.fileType == llvm::MachO::MH_DYLIB) {<br class="">
@@ -1012,7 +1017,7 @@ std::error_code MachOFileLayout::writeLo<br class="">
lc += sizeof(linkedit_data_command);<br class="">
}<br class="">
}<br class="">
- return ec;<br class="">
+ return llvm::Error();<br class="">
}<br class="">
<br class="">
void MachOFileLayout::writeSectionContent() {<br class="">
@@ -1475,9 +1480,8 @@ llvm::Error MachOFileLayout::writeBinary<br class="">
// Write content.<br class="">
_buffer = fob->getBufferStart();<br class="">
writeMachHeader();<br class="">
- std::error_code ec = writeLoadCommands();<br class="">
- if (ec)<br class="">
- return llvm::errorCodeToError(ec);<br class="">
+ if (auto ec = writeLoadCommands())<br class="">
+ return std::move(ec);<br class="">
writeSectionContent();<br class="">
writeLinkEditContent();<br class="">
fob->commit();<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="">
</blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></div>_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></blockquote></div><br class=""></div></body></html>