Page MenuHomeFreeBSD

D12035.id32085.diff
No OneTemporary

D12035.id32085.diff

Index: head/sys/boot/efi/loader/arch/amd64/trap.c
===================================================================
--- head/sys/boot/efi/loader/arch/amd64/trap.c
+++ head/sys/boot/efi/loader/arch/amd64/trap.c
@@ -84,7 +84,11 @@
report_exc(struct trapframe *tf)
{
- /* XXX using printf */
+ /*
+ * printf() depends on loader runtime and UEFI firmware health
+ * to produce the console output, in case of exception, the
+ * loader or firmware runtime may fail to support the printf().
+ */
printf("===================================================="
"============================\n");
printf("Exception %u\n", tf->tf_trapno);
@@ -122,7 +126,13 @@
ist_use_table[fw_idt_e->gd_ist]++;
loader_idt_e->gd_looffset = my_handler;
loader_idt_e->gd_hioffset = my_handler >> 16;
- loader_idt_e->gd_selector = fw_idt_e->gd_selector; /* XXX */
+ /*
+ * We reuse uefi selector for the code segment for the exception
+ * handler code, while the reason for the fault might be the
+ * corruption of that gdt entry. On the other hand, allocating
+ * our own descriptor might be not much better, if gdt is corrupted.
+ */
+ loader_idt_e->gd_selector = fw_idt_e->gd_selector;
loader_idt_e->gd_ist = 0;
loader_idt_e->gd_type = SDT_SYSIGT;
loader_idt_e->gd_dpl = 0;

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 25, 12:18 PM (14 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32124931
Default Alt Text
D12035.id32085.diff (1 KB)

Event Timeline