From: Michael Brown Date: Thu, 18 Feb 2016 16:32:37 +0000 (+0000) Subject: [prefix] Standardise calls to prot_call() X-Git-Tag: v1.20.1~587 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df2509db9587ee0d93cdab84496cbc468db6da08;p=thirdparty%2Fipxe.git [prefix] Standardise calls to prot_call() Use the standard "pushl $function ; pushw %cs ; call prot_call" sequence everywhere that prot_call() is used. Signed-off-by: Michael Brown --- diff --git a/src/arch/x86/prefix/libprefix.S b/src/arch/x86/prefix/libprefix.S index 186f3d5b1..94c32455b 100644 --- a/src/arch/x86/prefix/libprefix.S +++ b/src/arch/x86/prefix/libprefix.S @@ -867,6 +867,15 @@ payload_death_message: movw %ax, (init_librm_vector+2) lcall *init_librm_vector + /* Prepare for return to .prefix segment */ + pushw %cs + + /* Jump to .text16 segment */ + pushw %ax + pushw $1f + lret + .section ".text16.install_prealloc", "ax", @progbits +1: /* Inhibit INT 15,e820 and INT 15,e801 if applicable */ testl %ebp, %ebp jnz 1f @@ -878,10 +887,15 @@ payload_death_message: * ready for the copy to the new location. */ progress " relocate\n" - movw %ax, (prot_call_vector+2) pushl $relocate - lcall *prot_call_vector + pushw %cs + call prot_call + /* Jump back to .prefix segment */ + pushw $1f + lret + .section ".prefix.install_prealloc", "awx", @progbits +1: /* Copy code to new location */ progress " copy\n" pushl %edi @@ -929,10 +943,6 @@ init_librm_vector: .word init_librm .word 0 .size init_librm_vector, . - init_librm_vector -prot_call_vector: - .word prot_call - .word 0 - .size prot_call_vector, . - prot_call_vector #endif close_payload_vector: .word close_payload diff --git a/src/arch/x86/prefix/undiloader.S b/src/arch/x86/prefix/undiloader.S index 952661330..0376afa88 100644 --- a/src/arch/x86/prefix/undiloader.S +++ b/src/arch/x86/prefix/undiloader.S @@ -18,13 +18,16 @@ undiloader: pushw %ds pushw %es pushw %bx + /* ROM segment address to %ds */ pushw %cs popw %ds + /* UNDI loader parameter structure address into %es:%di */ movw %sp, %bx movw %ss:22(%bx), %di movw %ss:24(%bx), %es + /* Install to specified real-mode addresses */ pushw %di movw %es:12(%di), %bx @@ -34,13 +37,18 @@ undiloader: orl $0xffffffff, %ebp /* Allow arbitrary relocation */ call install_prealloc popw %di + + /* Jump to .text16 segment */ + pushw %ax + pushw $1f + lret + .section ".text16", "ax", @progbits +1: /* Call UNDI loader C code */ pushl $pxe_loader_call pushw %cs - pushw $1f - pushw %ax - pushw $prot_call - lret + call prot_call + 1: /* Restore registers and return */ popw %bx popw %es @@ -49,4 +57,3 @@ undiloader: popl %edi popl %esi lret - .size undiloader, . - undiloader