Skip to content

Commit

Permalink
[prefix] Use stack rather than %ebp as temporary storage area
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Nov 11, 2011
1 parent a05b89e commit 6c5f1a3
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions src/arch/i386/prefix/libprefix.S
Expand Up @@ -661,8 +661,8 @@ install_prealloc:
pushw %cs
popw %ds

/* Copy decompression temporary area physical address to %ebp */
movl %edi, %ebp
/* Save decompression temporary area physical address */
pushl %edi

/* Install .text16.early */
progress " .text16.early\n"
Expand Down Expand Up @@ -747,45 +747,48 @@ payload_death_message:
/* Set up %ds for access to .data16 */
movw %bx, %ds

/* Restore decompression temporary area physical address */
popl %edi

#ifdef KEEP_IT_REAL
/* Initialise libkir */
movw %ax, (init_libkir_vector+2)
lcall *init_libkir_vector
#else
/* Find a suitable decompression temporary area, if none specified */
pushl %eax
testl %ebp, %ebp
testl %edi, %edi
jnz 1f
/* Use INT 15,88 to find the highest available address via INT
* 15,88. This limits us to around 64MB, which should avoid
* all of the POST-time memory map failure modes.
*/
movb $0x88, %ah
int $0x15
movw %ax, %bp
addl $0x400, %ebp
subl $_textdata_memsz_kb, %ebp
shll $10, %ebp
movw %ax, %di
addl $0x400, %edi
subl $_textdata_memsz_kb, %edi
shll $10, %edi
/* Sanity check: if we have ended up below 1MB, use 1MB */
cmpl $0x100000, %ebp
cmpl $0x100000, %edi
jae 1f
movl $0x100000, %ebp
movl $0x100000, %edi
1: popl %eax

/* Install .text and .data to temporary area in high memory,
* prior to reading the E820 memory map and relocating
* properly.
*/
progress " .textdata\n"
movl %ebp, %edi
pushl %edi
movl $_textdata_filesz, %ecx
movl $_textdata_memsz, %edx
call install_block
popl %edi

/* Initialise librm at current location */
progress " init_librm\n"
movw %ax, (init_librm_vector+2)
movl %ebp, %edi
lcall *init_librm_vector

/* Skip relocation if CF was set on entry */
Expand Down

0 comments on commit 6c5f1a3

Please sign in to comment.