mirror of https://github.com/ipxe/ipxe.git
[prefix] Use stack rather than %ebp as temporary storage area
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/5/head
parent
a05b89ef45
commit
6c5f1a342b
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue