bits-893 released with these changes:

  • Port BITS to GRUB 2.00

    • Drop backported GRUB patches already included in 2.00.

    • Forward-port our remaining GRUB patches, fix some new bugs in 2.00, and update the patch list in README.Developers.txt accordingly.

    • Update the build process to support the new build system, based on autotools and autogen.

    • Since GRUB no longer waits for user input after running a menu entry unless an error occurred, add an explicit pause at the end of entries using the GRUB pager, and add support to our pager to not exit at the end of a file. This has the added bonus of allowing backward scrolling after hitting the end of a file.

    • Update readline and the pager for changes to GRUB's input interface. Now supports reading keys and modifiers as a unit, avoiding potential race conditions when reading them separately.

    • Various updates to C code to adapt to new GRUB interfaces.

    • Fix ACPICA portability interface for changes to GRUB.

    • Fix some new warnings that GRUB now includes the flags for.

  • Extensive additions, improvements, and bugfixes to the ACPI parsing infrastructure. In particular:

    • Add method result parsing and corresponding classes. In addition to cleaning up method handling, this paves the way for tests of methods, which the previous decode-print-and-throw-away approach did not support.

    • Automatically generate the menu of ACPI methods

    • Improve the Struct and Unpack infrastructure, and factor it out into a separate unpack module for use by other structures, such as SMBIOS.

    • Add a helper for unpacking a series of substructures. Numerous tables follow the pattern of unpacking one of several possible substructure classes repeatedly until running out of data in the unpackable. Capture that pattern in a helper function unpack_all.

    • Add parsing for the FACP

    • Handle SRAT subtables with "enabled" other than APIC and X2APIC affinity

    • Handle systems without an APIC

    • Fix wrapping of text before paging to avoid hitting 80th column. GRUB automatically wraps text at the 80th column, and that automatic wrapping breaks the pager's count of lines. However, acpi wrapped lines at 78 characters and used a two-space indent; thus, lines exactly 78 characters long, or with word lengths that resulted in a 78-character line, would end up printing an 80th character and triggering GRUB's word-wrapping. Fix by changing wrapping to 77 characters.

  • Many improvements to SMBIOS parsing and decoding; in particular:

    • Rewrite smbios to use unpack, and decode structures more thoroughly; includes contributions from Scott Lawson.

    • In type 0 (BIOS information), handle the minor version correctly. The minor version in this structure represents the digits of a decimal value, so 34 means .34, 4 means .4, and 41 means .41, so comparing the numeric value of the minor version (for instance, >= 4) does not work correctly. Compare it as a string instead.

    • When dumping SMBIOS structures, dump the string table and its memory. This helps when trying to hand-decode an unknown SMBIOS structure.

    • Decode several more SMBIOS structures, and handle parse failures more gracefully. Previously, decode failures in any SMBIOS structure would result in a complete parse failure and no data. Catch exceptions inside each structure parser, and preserve the fields decoded so far.

  • Move line-wrapping into ttypager, and use the pager for more menu options

    SMBIOS, and miscellaneous ACPI bits, now use our pager rather than GRUB's pager.

  • smp: Mark mp_worker as noreturn

    Triggers a warning with GCC 4.4.5 otherwise.