]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[prefix] Standardise calls to prot_call()
authorMichael Brown <mcb30@ipxe.org>
Thu, 18 Feb 2016 16:32:37 +0000 (16:32 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 18 Feb 2016 16:42:33 +0000 (16:42 +0000)
Use the standard "pushl $function ; pushw %cs ; call prot_call"
sequence everywhere that prot_call() is used.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/prefix/libprefix.S
src/arch/x86/prefix/undiloader.S

index 186f3d5b1bd20a0d6bc8938e2cc90ff4f0d17894..94c32455be7fa57d8741869867e88bb5ab4759ee 100644 (file)
@@ -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
index 9526613300f4b71241e60a3c5c98725077e6b9dd..0376afa889a30c791b321fbaf434827711a60ce9 100644 (file)
@@ -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