mcheck: introduce mcheck_on_ramrelocation(.)

The using of pre-reloc/malloc_simple heap is
too hard to follow after the relocation.

So lets drop it from the pedantic registry
and switch to dlmalloc, when moved.

The offset is ignored, but kept in the API
for the probable case, when that early
heap is relocated too.

Signed-off-by: Eugene Uriev <eugeneuriev@gmail.com>
This commit is contained in:
Eugene Uriev 2024-03-31 23:03:25 +03:00 committed by Tom Rini
parent 18c1bfafe0
commit 7bceb16106
2 changed files with 15 additions and 0 deletions

View File

@ -718,6 +718,7 @@ static int reloc_bloblist(void)
return 0;
}
void mcheck_on_ramrelocation(size_t offset);
static int setup_reloc(void)
{
if (!(gd->flags & GD_FLG_SKIP_RELOC)) {
@ -743,6 +744,9 @@ static int setup_reloc(void)
if (gd->flags & GD_FLG_SKIP_RELOC) {
debug("Skipping relocation due to flag\n");
} else {
#ifdef MCHECK_HEAP_PROTECTION
mcheck_on_ramrelocation(gd->reloc_off);
#endif
debug("Relocation Offset is: %08lx\n", gd->reloc_off);
debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n",
gd->relocaddr, (ulong)map_to_sysmem(gd->new_gd),

View File

@ -273,5 +273,16 @@ static void mcheck_initialize(mcheck_abortfunc_t new_func, char pedantic_flag)
mcheck_pedantic_flag = pedantic_flag;
}
void mcheck_on_ramrelocation(size_t offset)
{
char *p;
int i;
// Simple, but inaccurate strategy: drop the pre-reloc heap
for (i = 0; i < REGISTRY_SZ; ++i)
if ((p = mcheck_registry[i]) != NULL ) {
printf("mcheck, WRN: forgetting %p chunk\n", p);
mcheck_registry[i] = 0;
}
}
#endif
#endif