forked from OSchip/llvm-project
[COFF] Adjust secrel limit check
According to Microsoft's PE/COFF documentation, a SECREL relocation is "The 32-bit offset of the target from the beginning of its section". By my reading, the "from the beginning of its section" implies that the offset is unsigned. Change from an assertion to an error, since it's possible to trigger this condition normally for input files with very large sections, and we should fail gracefully for those instead of asserting. Differential Revision: https://reviews.llvm.org/D38020 llvm-svn: 313703
This commit is contained in:
parent
064cb68d18
commit
e61ca35463
|
@ -62,7 +62,10 @@ static void applySecRel(const SectionChunk *Sec, uint8_t *Off,
|
|||
fatal("SECREL relocation cannot be applied to absolute symbols");
|
||||
}
|
||||
uint64_t SecRel = S - OS->getRVA();
|
||||
assert(SecRel < INT32_MAX && "overflow in SECREL relocation");
|
||||
if (SecRel > UINT32_MAX) {
|
||||
error("overflow in SECREL relocation in section: " + Sec->getSectionName());
|
||||
return;
|
||||
}
|
||||
add32(Off, SecRel);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue