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 | |
| parent | 7a5f42708b3b30bdfbc263db010832172d99a02d (diff) | |
Use a fatal error instead of assert, improve jmp tests.
| -rw-r--r-- | main.c | 6 | ||||
| -rw-r--r-- | test/test.sh | 18 |
2 files changed, 16 insertions, 8 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; diff --git a/test/test.sh b/test/test.sh index c68e469..3510fa4 100644 --- a/test/test.sh +++ b/test/test.sh @@ -160,15 +160,21 @@ conditioncodes=" o p pe po s z " -for fill in 0 1 129 +t "l:\n .fill 1, 1, 0x00 \njmp l" +t "jmp l\n .fill 1, 1, 0x00 \nl:" +for cc in $conditioncodes +do + t "l:\n .fill 1, 1, 0x00 \nj${cc} l" + t "j${cc} l\n .fill 1, 1, 0x00 \nl:" +done + +# Check boundary on jump relaxing. +for fill in 0 $(seq 120 140) do t "l:\n .fill $fill, 1, 0x00 \njmp l" t "jmp l\n .fill $fill, 1, 0x00 \nl:" - for cc in $conditioncodes - do - t "l:\n .fill $fill, 1, 0x00 \nj${cc} l" - t "j${cc} l\n .fill $fill, 1, 0x00 \nl:" - done + t "l:\n .fill $fill, 1, 0x00 \njz l" + t "jz l\n .fill $fill, 1, 0x00 \nl:" done for cc in $conditioncodes |
