|
|
@@ -867,6 +867,15 @@ payload_death_message:
|
|
867
|
867
|
movw %ax, (init_librm_vector+2)
|
|
868
|
868
|
lcall *init_librm_vector
|
|
869
|
869
|
|
|
|
870
|
+ /* Prepare for return to .prefix segment */
|
|
|
871
|
+ pushw %cs
|
|
|
872
|
+
|
|
|
873
|
+ /* Jump to .text16 segment */
|
|
|
874
|
+ pushw %ax
|
|
|
875
|
+ pushw $1f
|
|
|
876
|
+ lret
|
|
|
877
|
+ .section ".text16.install_prealloc", "ax", @progbits
|
|
|
878
|
+1:
|
|
870
|
879
|
/* Inhibit INT 15,e820 and INT 15,e801 if applicable */
|
|
871
|
880
|
testl %ebp, %ebp
|
|
872
|
881
|
jnz 1f
|
|
|
@@ -878,10 +887,15 @@ payload_death_message:
|
|
878
|
887
|
* ready for the copy to the new location.
|
|
879
|
888
|
*/
|
|
880
|
889
|
progress " relocate\n"
|
|
881
|
|
- movw %ax, (prot_call_vector+2)
|
|
882
|
890
|
pushl $relocate
|
|
883
|
|
- lcall *prot_call_vector
|
|
|
891
|
+ pushw %cs
|
|
|
892
|
+ call prot_call
|
|
884
|
893
|
|
|
|
894
|
+ /* Jump back to .prefix segment */
|
|
|
895
|
+ pushw $1f
|
|
|
896
|
+ lret
|
|
|
897
|
+ .section ".prefix.install_prealloc", "awx", @progbits
|
|
|
898
|
+1:
|
|
885
|
899
|
/* Copy code to new location */
|
|
886
|
900
|
progress " copy\n"
|
|
887
|
901
|
pushl %edi
|
|
|
@@ -929,10 +943,6 @@ init_librm_vector:
|
|
929
|
943
|
.word init_librm
|
|
930
|
944
|
.word 0
|
|
931
|
945
|
.size init_librm_vector, . - init_librm_vector
|
|
932
|
|
-prot_call_vector:
|
|
933
|
|
- .word prot_call
|
|
934
|
|
- .word 0
|
|
935
|
|
- .size prot_call_vector, . - prot_call_vector
|
|
936
|
946
|
#endif
|
|
937
|
947
|
close_payload_vector:
|
|
938
|
948
|
.word close_payload
|