david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[prefix] Use stack rather than %ebp as temporary storage area

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2011-11-11 22:23:13 +00:00
parent a05b89ef45
commit 6c5f1a342b
1 changed files with 14 additions and 11 deletions

View File

@ -661,8 +661,8 @@ install_prealloc:
pushw %cs pushw %cs
popw %ds popw %ds
/* Copy decompression temporary area physical address to %ebp */ /* Save decompression temporary area physical address */
movl %edi, %ebp pushl %edi
/* Install .text16.early */ /* Install .text16.early */
progress " .text16.early\n" progress " .text16.early\n"
@ -747,6 +747,9 @@ payload_death_message:
/* Set up %ds for access to .data16 */ /* Set up %ds for access to .data16 */
movw %bx, %ds movw %bx, %ds
/* Restore decompression temporary area physical address */
popl %edi
#ifdef KEEP_IT_REAL #ifdef KEEP_IT_REAL
/* Initialise libkir */ /* Initialise libkir */
movw %ax, (init_libkir_vector+2) movw %ax, (init_libkir_vector+2)
@ -754,7 +757,7 @@ payload_death_message:
#else #else
/* Find a suitable decompression temporary area, if none specified */ /* Find a suitable decompression temporary area, if none specified */
pushl %eax pushl %eax
testl %ebp, %ebp testl %edi, %edi
jnz 1f jnz 1f
/* Use INT 15,88 to find the highest available address via INT /* Use INT 15,88 to find the highest available address via INT
* 15,88. This limits us to around 64MB, which should avoid * 15,88. This limits us to around 64MB, which should avoid
@ -762,14 +765,14 @@ payload_death_message:
*/ */
movb $0x88, %ah movb $0x88, %ah
int $0x15 int $0x15
movw %ax, %bp movw %ax, %di
addl $0x400, %ebp addl $0x400, %edi
subl $_textdata_memsz_kb, %ebp subl $_textdata_memsz_kb, %edi
shll $10, %ebp shll $10, %edi
/* Sanity check: if we have ended up below 1MB, use 1MB */ /* Sanity check: if we have ended up below 1MB, use 1MB */
cmpl $0x100000, %ebp cmpl $0x100000, %edi
jae 1f jae 1f
movl $0x100000, %ebp movl $0x100000, %edi
1: popl %eax 1: popl %eax
/* Install .text and .data to temporary area in high memory, /* Install .text and .data to temporary area in high memory,
@ -777,15 +780,15 @@ payload_death_message:
* properly. * properly.
*/ */
progress " .textdata\n" progress " .textdata\n"
movl %ebp, %edi pushl %edi
movl $_textdata_filesz, %ecx movl $_textdata_filesz, %ecx
movl $_textdata_memsz, %edx movl $_textdata_memsz, %edx
call install_block call install_block
popl %edi
/* Initialise librm at current location */ /* Initialise librm at current location */
progress " init_librm\n" progress " init_librm\n"
movw %ax, (init_librm_vector+2) movw %ax, (init_librm_vector+2)
movl %ebp, %edi
lcall *init_librm_vector lcall *init_librm_vector
/* Skip relocation if CF was set on entry */ /* Skip relocation if CF was set on entry */