If the external heap ends up at the top of the system memory map then
leave a gap after the heap to ensure that no block ends up being
allocated with either a start or end address of zero, since this is
frequently confusing to both code and humans.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
DBGC ( &uheap, "UHEAP largest region is [%#08lx,%#08lx)\n",
start, end );
- /* Align start and end addresses */
- after = ( end & ( UHEAP_ALIGN - 1 ) );
+ /* Align start and end addresses, and prevent overflow to zero */
+ after = ( end ? ( end & ( UHEAP_ALIGN - 1 ) ) : UHEAP_ALIGN );
before = ( ( -start ) & ( UHEAP_ALIGN - 1 ) );
strip = ( before + after );
if ( strip > size )