Hi,

I've spent a bit of time debugging this, and by adding setjmp.h to 
efi/main.c
and removing the ampersand from the longjmp()/setjmp() calls (provided
a patch in #1091027), I was able to get a working EFI syslinux.

I've used the following configuration for testing:

PROMPT    1
TIMEOUT    50
DEFAULT debian

LABEL debian
     LINUX /vmlinuz
     INITRD /initrd.gz

LABEL localboot
     LINUX .localboot

The localboot option actually tests the longjmp() call in efi/main.c,
and it successfully returns me to the EFI shell in qemu with OVMF,
and I even tried it on my own computer where I added a boot entry
for EFI/syslinux/syslinux.efi, and after invoking localboot, it switched
to the next boot entry, which was grub, my primary bootloader on this 
system.

However, all of what I've mentioned above applies to the 64-bit image.
I was unable to get the 32-bit image running in qemu with OVMF. What
happens is that it writes a bunch of space characters, and then quits,
throwing me back to the EFI shell prompt.

Interestingly enough, I get the same behavior when I try to use
the pre-compiled syslinux-6.03 from kernel.org, but when I try to use
the syslinux-6.03_8.i686 package from Void Linux, that one actually
works.

Another interesting thing is that when I've enabled debugging by defining
the CORE_DEBUG and DEBUG_STDIO macros, the 32-bit image actually works too,
so perhaps it might have to do with some optimizations that cause issues,
or perhaps some race condition where the outcome is altered by debugging
messages being printed.

It's possible that this race condition also happens on the 64-bit syslinux,
because I thought I observed such behavior on the 64-bit version as well
under qemu, but I can't seem to reproduce it now.  It's also possible
that I jus got my files mixed up during testing.


Either way, I think that's a separate bug from the setjmp() bug, and I think
that one is taken care of by adding setjmp.h to efi/main.c.


Best Regards,
Marek

Reply via email to