diff options
| author | Andrew Chambers <[email protected]> | 2021-10-20 20:41:41 +1300 |
|---|---|---|
| committer | Andrew Chambers <[email protected]> | 2021-10-20 20:41:52 +1300 |
| commit | 98f42697409d53ee45da744d167ab875ed4fde8b (patch) | |
| tree | a8ffdb8bc7861cb21d8b52155b5df829d00b03a9 /main.c | |
| parent | 7a5f42708b3b30bdfbc263db010832172d99a02d (diff) | |
Use a fatal error instead of assert, improve jmp tests.
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -1,4 +1,3 @@ -#include <assert.h> #include "minias.h" /* Parsed assembly */ @@ -923,12 +922,15 @@ resolvereloc(Relocation *reloc) case R_X86_64_PC8: rdata = &reloc->section->data[reloc->offset]; value = sym->offset - reloc->offset + reloc->addend; - assert(value >= INT8_MIN && value <= INT8_MAX); + if (value > INT8_MAX || value < INT8_MIN) + fatal("R_X86_64_PC8 relocation overflow"); rdata[0] = value; return 1; case R_X86_64_PC32: rdata = &reloc->section->data[reloc->offset]; value = sym->offset - reloc->offset + reloc->addend; + if (value > INT32_MAX || value < INT32_MIN) + fatal("R_X86_64_PC32 relocation overflow"); rdata[0] = ((uint32_t)value & 0xff); rdata[1] = ((uint32_t)value & 0xff00) >> 8; rdata[2] = ((uint32_t)value & 0xff0000) >> 16; |
