# HG changeset patch # Parent f5febee8d7dc9cf6ba776d6a8550f87eb343f998 Bug 1542958 - fix code section adjustments in elfhack; r=glandium We were never adjusting `last` in this loop, so we were computing the wrong addresses for all sections beyond the first. Which in turn meant that we would compute the wrong size for the section data we needed to allocate. Differential Revision: https://phabricator.services.mozilla.com/D28195 diff --git a/build/unix/elfhack/elfhack.cpp b/build/unix/elfhack/elfhack.cpp --- a/build/unix/elfhack/elfhack.cpp +++ b/build/unix/elfhack/elfhack.cpp @@ -172,16 +172,17 @@ class ElfRelHackCode_Section : public El unsigned int addr = last->getShdr().sh_addr + last->getSize(); if (addr & ((*c)->getAddrAlign() - 1)) addr = (addr | ((*c)->getAddrAlign() - 1)) + 1; (*c)->getShdr().sh_addr = addr; // We need to align this section depending on the greater // alignment required by code sections. if (shdr.sh_addralign < (*c)->getAddrAlign()) shdr.sh_addralign = (*c)->getAddrAlign(); + last = *c; } shdr.sh_size = code.back()->getAddr() + code.back()->getSize(); data = static_cast(malloc(shdr.sh_size)); if (!data) { throw std::runtime_error("Could not malloc ElfSection data"); } char *buf = data; for (c = code.begin(); c != code.end(); ++c) {