[syslinux] Syslinux 6.00 released

Matt Fleming matt at console-pimps.org
Thu Jun 20 13:01:36 PDT 2013

Finally, the Syslinux 6.00 release is out. This release includes support
for booting from EFI, both from disk-based media and over the network
via PXE. Thanks to everyone who has been testing this out.

There are some EFI bugs that I'm aware of,

  * booting Linux kernels without CONFIG_RELOCATABLE doesn't work
  * 64-bit syslinux.efi cannot boot 32-bit kernels and vice versa
  * displaying of Fn files messes up the console

Please do test out the release and report any regressions. I'm
particularly interested to hear about any problems with the BIOS code,
which will be a result of introducing the 'firmware' abstraction that
allows the BIOS and EFI backends to coexist.

Shortlog from 5.11-pre2 (the last 5.xx branch merged) is below,


Chandramouli Narayanan (12):
      core: Remove unused argument to init()
      efi: Actually return a character in efi_getchar()
      efi: Add Auxiliary Data Vector support
      core, efi: Return new pointer in realloc()
      efi: Turn off debugging support by default
      ansi: Improve EFI console support
      module: Define __{ctors,dtors}_end symbols
      core: Rename DEBUG macro to avoid gnu-efi library conflict
      Debug prints to core/fs/fs.c and core/fs/fat.c have been added.
      efi: Reworked EFI boot loader on several fronts.
      efi: Fix the screen setup for Graphics Output Protocol
      efi, vesa: Fix vesa initialization and video mode resolution

Matt Fleming (131):
      core: Add firmware backend support
      com32: Provide a language standard version
      Move the list of MINLIBOBJS to mk/lib.mk so that we can include it in     efi/Makefile.
      core: Do not use -mregparm
      efi: Add UEFI firmware backend
      core: Rebuild core objects for EFI
      disk: Add .disk_init() to firmware struct
      efi: Disk I/O support
      EFI: Implement malloc with {Allocate/Free}Pool()
      com32: Add firmware backend support to ansicon
      elflink: Don't statically initialise core_module.base_addr
      ldlinux: Initialise 'p' before using it.
      com32: Delete duplicate ipappend.c
      firmware: Don't include disk.h
      firmware: Add .get_config_file_name
      firmware: Add .get_serial_console_info
      com32: Remove __constructor tag from __syslinux_get_shuffer_size()
      firmware: Move firmware code into core/bios.c
      firmware: Add .ipappend_strings function pointer
      linux: Move linux_header definition to header
      com32: Move initramfs_size() into header file
      ldlinux: Handle multiple arguments to initrd=
      firmware: Add EFI linux boot support
      efi: Delete efi/wrapper in spotless make target
      Merge branch 'linux-boot' into for-hpa/elflink/firmware
      firmware, diskio: Create struct disk_private
      firmware: Fix assorted compiler warnings
      efi: Zero e_hdr_pe32p before use
      Merge remote-tracking branch 'mfleming/elflink' into for-hpa/elflink/firmware
      core: Change numIPAppends data type
      Merge remote-tracking branch 'mfleming/elflink' into for-hpa/elflink/firmware
      efi, ansi: Improve console handling even further (e.g. scrolling support)
      module: Consolidate lots of 32/64-bit code
      Create derivative-specific files
      Merge branch 'elflink' into for-hpa/elflink/firmware
      efi: We don't need two memory_map() functions
      efi: Update the correct copy of hdr
      rosh: Update default make target
      Add per-firmware object directory support
      efi: Delete unused variables
      efi: Add support for UGA devices
      efi: Forward declare 'struct screen_info'
      Makefile: Only provide one make rule for each directory
      efi: Fix warning about discarding const qualifier
      com32.h: Fix MK_PTR() for 64-bit
      initvesa.c: Delete unused variables (set but not used) and cleanup
      screencpy.c: Delete unused variables and cleanup
      i915resolution.c: cast to 64-bit sized ptr
      vesa: Change the prototype of __vesacon_init()
      Merge branch 'cleanup' into for-hpa/elflink/firmware
      Merge tag 'syslinux-5.00-pre9' into for-hpa/elflink/firmware
      NEWS, version: Now working on the 6.00 release
      libinstaller: Fixup merge botch
      Makefile: Correct the location of Makefile.private
      Makefile: Correct version.mk path
      efi: Add 'strip' make target and don't installer wrapper
      Makefile: Change default object directory
      Makefile.private: Update for new per-firmware object directories
      Makefile: Every invocation of make needs access to syslinux.mk
      Makefile: Add upload targets to $(private-targets)
      efi: Fill out writechr() implementation
      efi: Pass correct pointer to BS->CreateEvent()
      efi: Return a sensible error code to the firmware...
      efi: Set the current working directory on startup
      Merge tag 'syslinux-5.00-pre10' into for-hpa/elflink/firmware
      Makefile: Move Makefile.private inclusion to change default target
      efi: Consume unprocessed user input before loading ldlinux.c32
      sys/vesa: Modularise common vesa code
      firmware: Move memory operations into firmware
      firmware: Make disk->private an opaque type
      mk: Add -fPIC for x86_64 to embedded.mk
      efi: Add a simple script to find gnu-efi files
      efi: Add /usr/lib32 to the list of possible gnu-efi paths
      efi: Add -mno-red-zone to CFLAGS
      efi: Delete bash-isms from find-gnu-efi.sh
      Merge tag 'syslinux-5.00' into firmware
      com32: Fix merge botch
      sys/vesa: Include screencpy.o in $LIBVESA_OBJS
      vesa: Correct screencpy() prototype
      efi: Delete EFI handover protocol check
      mk/embedded.mk: Don't use -mregparm in core
      vesa: Make __vesacon_i915resolution() a stub under EFI
      Merge branch 'elflink' into firmware
      efi: Fix screen clearing and cursor position
      efi: Fix handling of "extended" keys
      efi: Enable/disable cursor like the BIOS code
      efi: Set display attributes before writing output
      efi: Lookup the Unicode encoding when writing characters
      efi: Greatly simplify the EFI Scan Code handling
      Revert "vesa: Correct screencpy() prototype"
      Merge tag 'syslinux-5.01' into firmware
      Merge tag 'syslinux-5.10-pre2' into for-hpa/elflink/firmware
      efi: Fix build with gnu-efi >= 3.0s
      Merge remote-tracking branch 'zytor/elflink' into for-hpa/elflink/firmware
      efi: Add network support
      efi: Lookup which file system we were loaded from
      efi: Fill out MS-DOS header relocs field
      Merge branch 'msdos-hdr' into for-hpa/elflink/firmware
      ldlinux: use platform filename extension
      efi: strip debug info from syslinux.so
      efi: shrink the size of syslinux.efi
      efi: install ldlinux.{e32,e64}
      txt: always rebuild necessary directories
      Merge tag 'syslinux-5.11-pre2' into firmware
      mk: reinstate -mregparm for BIOS
      efi: Mark global BIOS-only symbols as __weak
      efi: Turn on symbol export whitelist
      ansi: partially revert 937f816addb214ca4c8c1ce977e0357eafa8c617
      version: We're now in 2013
      NEWS: Add entry for EFI network support
      load_linux: return a non-void value to fix compiler warning
      com32: add prototype for get_derivative_info()
      firmware: correct the get_cursor() argument types
      ipappend: delete .ipappend_strings()
      bios: fix definition of 'bios_free_mem'
      isolinux: use parenthesis to clarify operator precedence
      isolinux: fix type declarations
      ldlinux: fix definition of 'Hidden'
      efi: include <string.h> for memcpy()
      efi: include <string.h> for memcpy()/memset()
      efi: cast to avoid compiler warning
      efi: don't compare integers of different signs
      efi: cast third argument to HandleProtocol()
      efi: forward declare 'struct semaphore'
      efi: fix prototype of efi_erase()
      efi: fix comparison between signed and unsigned types
      efi: fix a bunch of casting to different size warnings,
      efi: provide prototype for load_env32()
      efi: return a value from sem_down()
      mk: stop complaining about unused parameters
      efi: delete unused varaibles

Shao Miller (1):
      efi: Fix a memory map buffer release

chandramouli narayanan (13):
      Patches here support 32bit and 64bit environment.
      This patch implements the setjmp/longjmp, memcpy, memmove, memset and mempcpy functions     as appropriate for the architecture. The code came from klibc. com32/lib has     i386 and x86_64 sub directories implementing the code.
      Architecture dependency in LZO data compression library in subdirectory core/lzo/     is taken care to be able to build fo i386 for x86_64.
      EFI boot loader in efi_boot_linux() now supports booting i386 and x86_64 linux kernels.     Main x86_64 changes are in a) setting up high part of EFI system table and memmap     b) loader signature c) setting up jump vector to hand off to kernel.
      The ELF module load and the utility library routines fully support lookup, resolution and relocation     of symbols for both ELF32 and ELF64 environments. With this, syslinux.efi built for i386 and x86_64     can load the respective native command modules dynamically. The architecture dependent files     are split into respective subdirectories (com32/lib/sys/module/i386 & com32/lib/sys/module/x86_64)     for the build environment to pick.
      This is a giant patch that splits the linker scripts for libraries, modules and executables into     the architecture-dependent scripts to facilitate building syslinux modules/executables     for i386 and x86_64 environments. The x86_64 linker scripts are derived from the earlier i386     counterparts.
      The make files have undergone changes to support both i386 and x86_64 platforms.     Pertinent changes are sprinkled through *.mk and Makefile in the syslinux tree.
      This patch implements architecture-dependent code in memdisk to support for i386 and x86_64.     The memcpy, memset and memmove routines originated from klibc.
      The assembler directive in memdump/code16.h is fixed for x86_64 build.
      Archicture-dependent get_cpuid in sysdump/cpuid is fixed.
      Console input initiated by com32 modules and sample programs hang on both i386 and x86_64.     The issue is traced to the implementation of get_key() underlying firmware.     For stdin file descriptor, the console read finally resolves to __rawcon_read()     implemented in com32/lib/sys/rawcon_read.c. This file is firmware-dependent and     currently has only BIOS-specific code As a temporary fix, in EFI,     __rawcon_read() is implemented using getchar(). The implementation of     getchar() in EFI is guided by the firmware structure that points to efi_getchar().     With this temporary fix, com32 command modules that wait on console input work.
      efi_getchar() should wait for the event before reading keystroke.     On an efi64 platform, it didn't work without wait. It needs further     debugging to ascertain the fix.
      This is the first cut checkin for GOP supporting the menu subsystem.     For the initial cut, all of vesa code is dropped into vesa/efi with     code buildable for EFI with a build option. There is VESA only code     that is in the efi subdirectory as well that should go away eventually.     Other files not dependent on EFI or not relevant to EFI need to be     removed as well (e.g. i915resolution.c).

Matt Fleming, Intel Open Source Technology Center

More information about the Syslinux mailing list