blob: 5a3a97c42578fdd37fa7b3375f1c2726d8833091 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# 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<char *>(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) {
|