summaryrefslogtreecommitdiffstats
path: root/src/arch/x86/prefix
diff options
context:
space:
mode:
authorSimon Rettberg2022-05-11 10:41:01 +0200
committerSimon Rettberg2022-05-11 10:41:01 +0200
commita12e3c379cf2e5946c7316259ef46736cdd5f222 (patch)
tree49638dad528a4490e293ea4a0f87e39ce862a75b /src/arch/x86/prefix
parentLocal UEFI disk boot support (diff)
parent[cloud] Allow aws-import script to run on Python 3.6 (diff)
downloadipxe-a12e3c379cf2e5946c7316259ef46736cdd5f222.tar.gz
ipxe-a12e3c379cf2e5946c7316259ef46736cdd5f222.tar.xz
ipxe-a12e3c379cf2e5946c7316259ef46736cdd5f222.zip
Merge branch 'master' into openslx
Diffstat (limited to 'src/arch/x86/prefix')
-rw-r--r--src/arch/x86/prefix/libprefix.S14
-rw-r--r--src/arch/x86/prefix/romprefix.S4
2 files changed, 12 insertions, 6 deletions
diff --git a/src/arch/x86/prefix/libprefix.S b/src/arch/x86/prefix/libprefix.S
index ffb211058..d7f261957 100644
--- a/src/arch/x86/prefix/libprefix.S
+++ b/src/arch/x86/prefix/libprefix.S
@@ -380,6 +380,11 @@ process_bytes:
pushl %eax
pushl %ebp
+ /* Construct ljmp code on stack (since .prefix may not be writable) */
+ .equ LJMP_LEN, 0x06
+ pushw %cs /* "nop ; ljmp %cs, $2f" */
+ pushw $2f
+ pushw $0xea90
/* Construct GDT on stack (since .prefix may not be writable) */
.equ GDT_LEN, 0x20
.equ PM_DS, 0x18 /* Flat data segment */
@@ -410,8 +415,9 @@ process_bytes:
pushw %es
pushw %ds
pushw %ss
- pushw %cs
- pushw $2f
+ pushw %ss /* Far pointer to ljmp code on stack */
+ leaw (GDT_LEN + 1)(%bp), %ax
+ pushw %ax
cli
data32 lgdt (%bp)
movl %cr0, %eax
@@ -438,7 +444,7 @@ process_bytes:
popfw
movl %eax, %cr0
lret
-2: /* lret will ljmp to here */
+2: /* lret will ljmp to here (via constructed ljmp on stack) */
popw %ss
popw %ds
popw %es
@@ -461,7 +467,7 @@ process_bytes:
/* Restore GDT */
data32 lgdt -8(%bp)
- leaw GDT_LEN(%bp), %sp
+ leaw (GDT_LEN + LJMP_LEN)(%bp), %sp
/* Restore registers and return */
popl %ebp
diff --git a/src/arch/x86/prefix/romprefix.S b/src/arch/x86/prefix/romprefix.S
index a9934a725..4e8793c21 100644
--- a/src/arch/x86/prefix/romprefix.S
+++ b/src/arch/x86/prefix/romprefix.S
@@ -161,7 +161,7 @@ pnpheader:
/* Manufacturer string */
mfgstr:
- .asciz "http://ipxe.org"
+ .asciz "https://ipxe.org"
.size mfgstr, . - mfgstr
/* Product string
@@ -607,7 +607,7 @@ get_pmm_decompress_to:
* strings PRODUCT_NAME and PRODUCT_SHORT_NAME in config/branding.h.
*
* While nothing in the GPL prevents you from removing all references
- * to iPXE or http://ipxe.org, we prefer you not to do so.
+ * to iPXE or https://ipxe.org, we prefer you not to do so.
*
* If you have an OEM-mandated branding requirement that cannot be
* satisfied simply by defining PRODUCT_NAME and PRODUCT_SHORT_NAME,