]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mcheck: introduce mcheck_on_ramrelocation(.)
authorEugene Uriev <eugeneuriev@gmail.com>
Sun, 31 Mar 2024 20:03:25 +0000 (23:03 +0300)
committerTom Rini <trini@konsulko.com>
Fri, 12 Apr 2024 22:23:06 +0000 (16:23 -0600)
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>
common/board_f.c
common/mcheck_core.inc.h

index 8bada6ff2eec121aa69650bb844c8740ae12d835..039d6d712d05251d8a1d9133b6d3cda92e04ac8d 100644 (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),
index 85a34de2958576cc886c02ef613bbd0bc1ec3550..bade03598fbc085131881494c5bc7ea2edeab671 100644 (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