[coreboot] Patch set updated for coreboot: bef68df Fix libpayload alloc() size and gcc pointer optimization problems.

Marc Jones (marcj303@gmail.com) gerrit at coreboot.org
Wed Mar 21 18:54:30 CET 2012


Marc Jones (marcj303 at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/804

-gerrit

commit bef68df99d84ac977dc0b990f6785080381403d4
Author: Marc Jones <marc.jones at se-eng.com>
Date:   Tue Mar 20 16:53:44 2012 -0600

    Fix libpayload alloc() size and gcc pointer optimization problems.
    
    The previous commit was incomplete and missed setting the entire
    alloc area.
    
    There are also additional problems with gcc optimizations of the
    pointer math. The "auto" casting by gcc wouldn't return warnings,
    but it was causing the optimization to be incorrect. We are now
    very explicit in the casting in the pointer math.
    
    Change-Id: I020808c8d1dda544fe862b9efb0e5345eeab5aab
    Signed-off-by: Marc Jones <marc.jones at se-eng.com>
---
 payloads/libpayload/libc/malloc.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/payloads/libpayload/libc/malloc.c b/payloads/libpayload/libc/malloc.c
index 9412cab..3c5a3fd 100644
--- a/payloads/libpayload/libc/malloc.c
+++ b/payloads/libpayload/libc/malloc.c
@@ -96,7 +96,7 @@ static void *alloc(int len)
 
 	/* Make sure the region is setup correctly. */
 	if (!HAS_MAGIC(*ptr))
-		setup(ptr, len);
+		setup(ptr, (int)((&_eheap - &_heap) - HDRSIZE));
 
 	/* Find some free space. */
 	do {
@@ -112,7 +112,7 @@ static void *alloc(int len)
 
 		if (header & FLAG_FREE) {
 			if (len <= size) {
-				hdrtype_t volatile *nptr = ptr + (HDRSIZE + len);
+				hdrtype_t volatile *nptr = (hdrtype_t volatile *)((int)ptr + HDRSIZE + len);
 				int nsize = size - (HDRSIZE + len);
 
 				/* If there is still room in this block,
@@ -131,11 +131,11 @@ static void *alloc(int len)
 					*ptr = USED_BLOCK(size);
 				}
 
-				return (void *)(ptr + HDRSIZE);
+				return (void *)((int)ptr + HDRSIZE);
 			}
 		}
 
-		ptr += HDRSIZE + size;
+		ptr = (hdrtype_t volatile *)((int)ptr + HDRSIZE + size);
 
 	} while (ptr < (hdrtype_t *) hend);
 
@@ -422,7 +422,7 @@ void print_malloc_map(void)
 
 	if (free_memory && (minimal_free > free_memory))
 		minimal_free = free_memory;
-	printf("Maximum memory consumption: %d bytes",
+	printf("Maximum memory consumption: %d bytes\n",
 		(unsigned int)(&_eheap - &_heap) - HDRSIZE - minimal_free);
 }
 #endif




More information about the coreboot mailing list