summaryrefslogtreecommitdiff
path: root/rts/linker
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2020-11-23 18:12:15 -0500
committerBen Gamari <ben@smart-cactus.org>2020-11-27 13:22:47 -0500
commit0946529c941194902e7944d54cc3571301d6bf5f (patch)
treeed2683ab90da4d39799b6d70dff023cbe9df9e10 /rts/linker
parent32a4d677e5bc3bb006bf180a5d095101485e0f21 (diff)
downloadhaskell-wip/no-assert.tar.gz
rts/linker: Replace some ASSERTs with CHECKwip/no-assert
In the past some people have confused ASSERT, which is for checking internal invariants, which CHECK, which should be used when checking things that might fail due to bad input (and therefore should be enabled even in the release compiler). Change some of these cases in the linker to use CHECK.
Diffstat (limited to 'rts/linker')
-rw-r--r--rts/linker/Elf.c42
-rw-r--r--rts/linker/MachO.c13
-rw-r--r--rts/linker/PEi386.c4
-rw-r--r--rts/linker/elf_got.c6
4 files changed, 32 insertions, 33 deletions
diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c
index a839ab68af..8a8480018c 100644
--- a/rts/linker/Elf.c
+++ b/rts/linker/Elf.c
@@ -416,7 +416,7 @@ ocVerifyImage_ELF ( ObjectCode* oc )
"\nSection header table: start %ld, n_entries %d, ent_size %d\n",
(long)ehdr->e_shoff, shnum, ehdr->e_shentsize ));
- ASSERT(ehdr->e_shentsize == sizeof(Elf_Shdr));
+ CHECK(ehdr->e_shentsize == sizeof(Elf_Shdr));
shdr = (Elf_Shdr*) (ehdrC + ehdr->e_shoff);
@@ -537,7 +537,7 @@ ocVerifyImage_ELF ( ObjectCode* oc )
#if defined(SHN_XINDEX)
/* See Note [Many ELF Sections] */
if (secno == SHN_XINDEX) {
- ASSERT(shndxTable);
+ CHECK(shndxTable);
secno = shndxTable[j];
}
#endif
@@ -864,7 +864,7 @@ ocGetNames_ELF ( ObjectCode* oc )
PROT_READ | PROT_WRITE,
MAP_ANON | MAP_PRIVATE,
-1, 0);
- ASSERT(common_mem != NULL);
+ CHECK(common_mem != NULL);
}
//TODO: we ignore local symbols anyway right? So we can use the
@@ -893,7 +893,7 @@ ocGetNames_ELF ( ObjectCode* oc )
secno = shndx;
#if defined(SHN_XINDEX)
if (shndx == SHN_XINDEX) {
- ASSERT(shndxTable);
+ CHECK(shndxTable);
secno = shndxTable[j];
}
#endif
@@ -902,11 +902,11 @@ ocGetNames_ELF ( ObjectCode* oc )
if (shndx == SHN_COMMON) {
isLocal = false;
- ASSERT(common_used < common_size);
- ASSERT(common_mem);
+ CHECK(common_used < common_size);
+ CHECK(common_mem);
symbol->addr = (void*)((uintptr_t)common_mem + common_used);
common_used += symbol->elf_sym->st_size;
- ASSERT(common_used <= common_size);
+ CHECK(common_used <= common_size);
IF_DEBUG(linker,
debugBelch("COMMON symbol, size %ld name %s allocated at %p\n",
@@ -935,7 +935,7 @@ ocGetNames_ELF ( ObjectCode* oc )
)
) {
/* Section 0 is the undefined section, hence > and not >=. */
- ASSERT(secno > 0 && secno < shnum);
+ CHECK(secno > 0 && secno < shnum);
/*
if (shdr[secno].sh_type == SHT_NOBITS) {
debugBelch(" BSS symbol, size %d off %d name %s\n",
@@ -945,7 +945,7 @@ ocGetNames_ELF ( ObjectCode* oc )
symbol->addr = (SymbolAddr*)(
(intptr_t) oc->sections[secno].start +
(intptr_t) symbol->elf_sym->st_value);
- ASSERT(symbol->addr != 0x0);
+ CHECK(symbol->addr != 0x0);
if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_LOCAL) {
isLocal = true;
isWeak = false;
@@ -962,7 +962,7 @@ ocGetNames_ELF ( ObjectCode* oc )
/* And the decision is ... */
if (symbol->addr != NULL) {
- ASSERT(nm != NULL);
+ CHECK(nm != NULL);
/* Acquire! */
if (!isLocal) {
@@ -1045,7 +1045,7 @@ do_Elf_Rel_relocations ( ObjectCode* oc, char* ehdrC,
break;
}
}
- ASSERT(stab != NULL);
+ CHECK(stab != NULL);
targ = (Elf_Word*)oc->sections[target_shndx].start;
IF_DEBUG(linker,debugBelch(
@@ -1251,7 +1251,7 @@ do_Elf_Rel_relocations ( ObjectCode* oc, char* ehdrC,
result = ((S + A) | T) - P;
result &= ~1; // Clear thumb indicator bit
- ASSERT(isInt(26, result)); /* X in range */
+ CHECK(isInt(26, result)); /* X in range */
}
// Update the branch target
@@ -1426,7 +1426,7 @@ do_Elf_Rel_relocations ( ObjectCode* oc, char* ehdrC,
case COMPAT_R_ARM_GOT_PREL: {
int32_t A = *pP;
void* GOT_S = symbol->got_addr;
- ASSERT(GOT_S);
+ CHECK(GOT_S);
*(uint32_t *)P = (uint32_t) GOT_S + A - P;
break;
}
@@ -1552,21 +1552,21 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC,
case R_SPARC_WDISP30:
w1 = *pP & 0xC0000000;
w2 = (Elf_Word)((value - P) >> 2);
- ASSERT((w2 & 0xC0000000) == 0);
+ CHECK((w2 & 0xC0000000) == 0);
w1 |= w2;
*pP = w1;
break;
case R_SPARC_HI22:
w1 = *pP & 0xFFC00000;
w2 = (Elf_Word)(value >> 10);
- ASSERT((w2 & 0xFFC00000) == 0);
+ CHECK((w2 & 0xFFC00000) == 0);
w1 |= w2;
*pP = w1;
break;
case R_SPARC_LO10:
w1 = *pP & ~0x3FF;
w2 = (Elf_Word)(value & 0x3FF);
- ASSERT((w2 & ~0x3FF) == 0);
+ CHECK((w2 & ~0x3FF) == 0);
w1 |= w2;
*pP = w1;
break;
@@ -1866,13 +1866,13 @@ ocResolve_ELF ( ObjectCode* oc )
Elf_Word secno = symbol->elf_sym->st_shndx;
#if defined(SHN_XINDEX)
if (secno == SHN_XINDEX) {
- ASSERT(shndxTable);
+ CHECK(shndxTable);
secno = shndxTable[i];
}
#endif
- ASSERT(symbol->elf_sym->st_name == 0);
- ASSERT(symbol->elf_sym->st_value == 0);
- ASSERT(0x0 != oc->sections[ secno ].start);
+ CHECK(symbol->elf_sym->st_name == 0);
+ CHECK(symbol->elf_sym->st_value == 0);
+ CHECK(0x0 != oc->sections[ secno ].start);
symbol->addr = oc->sections[ secno ].start;
}
}
@@ -1946,7 +1946,7 @@ int ocRunInit_ELF( ObjectCode *oc )
init_start = (init_t*)init_startC;
init_end = (init_t*)(init_startC + shdr[i].sh_size);
for (init = init_start; init < init_end; init++) {
- ASSERT(0x0 != *init);
+ CHECK(0x0 != *init);
(*init)(argc, argv, envv);
}
}
diff --git a/rts/linker/MachO.c b/rts/linker/MachO.c
index b513c461db..d3da3ebdcf 100644
--- a/rts/linker/MachO.c
+++ b/rts/linker/MachO.c
@@ -252,7 +252,6 @@ resolveImports(
"%s: unknown symbol `%s'", oc->fileName, symbol->name);
return 0;
}
- ASSERT(addr);
checkProddableBlock(oc,
((void**)(oc->image + sect->offset)) + i,
@@ -847,7 +846,7 @@ relocateSection(ObjectCode* oc, int curSection)
IF_DEBUG(linker, debugBelch(" : value = %p\n", (void *)symbol->nlist->n_value));
if ((symbol->nlist->n_type & N_TYPE) == N_SECT) {
- ASSERT(symbol->addr != NULL);
+ CHECK(symbol->addr != NULL);
value = (uint64_t) symbol->addr;
IF_DEBUG(linker, debugBelch("relocateSection, defined external symbol %s, relocated address %p\n",
nm, (void *)value));
@@ -949,29 +948,29 @@ relocateSection(ObjectCode* oc, int curSection)
{
if((int32_t)(value - baseValue) != (int64_t)(value - baseValue))
{
- ASSERT(reloc->r_extern);
+ CHECK(reloc->r_extern);
value = (uint64_t) &makeSymbolExtra(oc, reloc->r_symbolnum, value)
-> jumpIsland;
}
- ASSERT((int32_t)(value - baseValue) == (int64_t)(value - baseValue));
+ CHECK((int32_t)(value - baseValue) == (int64_t)(value - baseValue));
type = X86_64_RELOC_SIGNED;
}
switch(type)
{
case X86_64_RELOC_UNSIGNED:
- ASSERT(!reloc->r_pcrel);
+ CHECK(!reloc->r_pcrel);
thing += value;
break;
case X86_64_RELOC_SIGNED:
case X86_64_RELOC_SIGNED_1:
case X86_64_RELOC_SIGNED_2:
case X86_64_RELOC_SIGNED_4:
- ASSERT(reloc->r_pcrel);
+ CHECK(reloc->r_pcrel);
thing += value - baseValue;
break;
case X86_64_RELOC_SUBTRACTOR:
- ASSERT(!reloc->r_pcrel);
+ CHECK(!reloc->r_pcrel);
thing -= value;
break;
default:
diff --git a/rts/linker/PEi386.c b/rts/linker/PEi386.c
index aa841c070e..b660ceba1f 100644
--- a/rts/linker/PEi386.c
+++ b/rts/linker/PEi386.c
@@ -1594,7 +1594,7 @@ ocGetNames_PEi386 ( ObjectCode* oc )
barf ("Could not allocate any heap memory from private heap.");
}
- ASSERT(section.size == 0 || section.info->virtualSize == 0);
+ CHECK(section.size == 0 || section.info->virtualSize == 0);
sz = section.size;
if (sz < section.info->virtualSize) sz = section.info->virtualSize;
@@ -2032,7 +2032,7 @@ ocRunInit_PEi386 ( ObjectCode *oc )
getProgEnvv(&envc, &envv);
Section section = *oc->info->init;
- ASSERT(SECTIONKIND_INIT_ARRAY == section.kind);
+ CHECK(SECTIONKIND_INIT_ARRAY == section.kind);
uint8_t *init_startC = section.start;
init_t *init_start = (init_t*)init_startC;
diff --git a/rts/linker/elf_got.c b/rts/linker/elf_got.c
index bdb436ad21..1aca219f9b 100644
--- a/rts/linker/elf_got.c
+++ b/rts/linker/elf_got.c
@@ -136,10 +136,10 @@ verifyGot(ObjectCode * oc) {
for(size_t i=0; i < symTab->n_symbols; i++) {
ElfSymbol * symbol = &symTab->symbols[i];
if(symbol->got_addr) {
- ASSERT((void*)(*(void**)symbol->got_addr)
- == (void*)symbol->addr);
+ CHECK((void*)(*(void**)symbol->got_addr)
+ == (void*)symbol->addr);
}
- ASSERT(0 == ((uintptr_t)symbol->addr & 0xffff000000000000));
+ CHECK(0 == ((uintptr_t)symbol->addr & 0xffff000000000000));
}
}
return EXIT_SUCCESS;