|
@@ -661,8 +661,8 @@ install_prealloc:
|
661
|
661
|
pushw %cs
|
662
|
662
|
popw %ds
|
663
|
663
|
|
664
|
|
- /* Copy decompression temporary area physical address to %ebp */
|
665
|
|
- movl %edi, %ebp
|
|
664
|
+ /* Save decompression temporary area physical address */
|
|
665
|
+ pushl %edi
|
666
|
666
|
|
667
|
667
|
/* Install .text16.early */
|
668
|
668
|
progress " .text16.early\n"
|
|
@@ -747,6 +747,9 @@ payload_death_message:
|
747
|
747
|
/* Set up %ds for access to .data16 */
|
748
|
748
|
movw %bx, %ds
|
749
|
749
|
|
|
750
|
+ /* Restore decompression temporary area physical address */
|
|
751
|
+ popl %edi
|
|
752
|
+
|
750
|
753
|
#ifdef KEEP_IT_REAL
|
751
|
754
|
/* Initialise libkir */
|
752
|
755
|
movw %ax, (init_libkir_vector+2)
|
|
@@ -754,7 +757,7 @@ payload_death_message:
|
754
|
757
|
#else
|
755
|
758
|
/* Find a suitable decompression temporary area, if none specified */
|
756
|
759
|
pushl %eax
|
757
|
|
- testl %ebp, %ebp
|
|
760
|
+ testl %edi, %edi
|
758
|
761
|
jnz 1f
|
759
|
762
|
/* Use INT 15,88 to find the highest available address via INT
|
760
|
763
|
* 15,88. This limits us to around 64MB, which should avoid
|
|
@@ -762,14 +765,14 @@ payload_death_message:
|
762
|
765
|
*/
|
763
|
766
|
movb $0x88, %ah
|
764
|
767
|
int $0x15
|
765
|
|
- movw %ax, %bp
|
766
|
|
- addl $0x400, %ebp
|
767
|
|
- subl $_textdata_memsz_kb, %ebp
|
768
|
|
- shll $10, %ebp
|
|
768
|
+ movw %ax, %di
|
|
769
|
+ addl $0x400, %edi
|
|
770
|
+ subl $_textdata_memsz_kb, %edi
|
|
771
|
+ shll $10, %edi
|
769
|
772
|
/* Sanity check: if we have ended up below 1MB, use 1MB */
|
770
|
|
- cmpl $0x100000, %ebp
|
|
773
|
+ cmpl $0x100000, %edi
|
771
|
774
|
jae 1f
|
772
|
|
- movl $0x100000, %ebp
|
|
775
|
+ movl $0x100000, %edi
|
773
|
776
|
1: popl %eax
|
774
|
777
|
|
775
|
778
|
/* Install .text and .data to temporary area in high memory,
|
|
@@ -777,15 +780,15 @@ payload_death_message:
|
777
|
780
|
* properly.
|
778
|
781
|
*/
|
779
|
782
|
progress " .textdata\n"
|
780
|
|
- movl %ebp, %edi
|
|
783
|
+ pushl %edi
|
781
|
784
|
movl $_textdata_filesz, %ecx
|
782
|
785
|
movl $_textdata_memsz, %edx
|
783
|
786
|
call install_block
|
|
787
|
+ popl %edi
|
784
|
788
|
|
785
|
789
|
/* Initialise librm at current location */
|
786
|
790
|
progress " init_librm\n"
|
787
|
791
|
movw %ax, (init_librm_vector+2)
|
788
|
|
- movl %ebp, %edi
|
789
|
792
|
lcall *init_librm_vector
|
790
|
793
|
|
791
|
794
|
/* Skip relocation if CF was set on entry */
|