diff --git a/.gitignore b/.gitignore index 65f243a11..a1976b975 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ ahci_test ascii.bitmaps ascii.h autom4te.cache -build_env.mk build-grub-gen-asciih build-grub-gen-widthspec build-grub-mkfont @@ -34,48 +33,59 @@ docs/*.info docs/stamp-vti docs/version.texi ehci_test -*.elf example_grub_script_test example_scripted_test example_unit_test *.exec +*.exec.exe fddboot_test genkernsyms.sh gensymlist.sh gentrigtables +gentrigtables.exe gettext_strings_test grub-bin2h -grub-bios-setup +/grub-bios-setup +/grub-bios-setup.exe grub_cmd_date grub_cmd_echo grub_cmd_regexp grub_cmd_set_date grub_cmd_sleep -grub-editenv +/grub-editenv +/grub-editenv.exe grub-emu grub-emu-lite +grub-emu.exe +grub-emu-lite.exe grub_emu_init.c grub_emu_init.h grub-fstest +grub-fstest.exe grub_fstest_init.c grub_fstest_init.h grub_func_test grub-install +grub-install.exe grub-kbdcomp grub-macho2img -grub-menulst2cfg +/grub-menulst2cfg +/grub-menulst2cfg.exe /grub-mk* grub-mount -grub-ofpathname -grub-pe2elf -grub-probe +/grub-ofpathname +/grub-ofpathname.exe +grub-core/build-grub-pe2elf.exe +/grub-probe +/grub-probe.exe grub_probe_init.c grub_probe_init.h -grub-reboot +/grub-reboot grub_script_blanklines grub_script_blockarg grub_script_break grub-script-check +grub-script-check.exe grub_script_check_init.c grub_script_check_init.h grub_script_comments @@ -106,17 +116,18 @@ grub_script.tab.h grub_script.yy.c grub_script.yy.h grub-set-default -grub-setup grub_setup_init.c grub_setup_init.h grub-shell grub-shell-tester grub-sparc64-setup +grub-sparc64-setup.exe gzcompress_test hddboot_test help_test *.img *.image +*.image.exe include/grub/cpu include/grub/machine install-sh @@ -183,6 +194,7 @@ grub-core/gmodule.pl grub-core/grub.chrp grub-core/modinfo.sh grub-core/*.module +grub-core/*.module.exe grub-core/*.pp util/bash-completion.d/grub grub-core/gnulib/alloca.h @@ -204,7 +216,7 @@ grub-core/gnulib/unistd.h grub-core/gnulib/warn-on-use.h grub-core/gnulib/wchar.h grub-core/gnulib/wctype.h -grub-core/rs_decoder.S +grub-core/rs_decoder.h widthspec.bin widthspec.h docs/stamp-1 @@ -218,9 +230,14 @@ include/grub/gcrypt/gcrypt.h include/grub/gcrypt/g10lib.h po/POTFILES.in po/POTFILES-shell.in -grub-glue-efi -grub-render-label +/grub-glue-efi +/grub-render-label +/grub-glue-efi.exe +/grub-render-label.exe grub-core/gnulib/locale.h grub-core/gnulib/unitypes.h grub-core/gnulib/uniwidth.h build-aux/test-driver +/garbage-gen +/garbage-gen.exe +/grub-fs-tester diff --git a/ChangeLog b/ChangeLog index 200393209..f7adf9bdf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,611 @@ +2013-12-18 Vladimir Serbinenko + + * configure.ac: Set version to 2.02~beta1. + +2013-12-18 Allen Pais +2013-12-18 Bob Picco + + * grub-core/boot/sparc64/ieee1275/boot.S: Fix order of fields. + +2013-12-18 Vladimir Serbinenko + + Make grub_zlib_decompress handle incomplete chunks. + + Fixes squash4. + +2013-12-18 Vladimir Serbinenko + + * grub-core/Makefile.am: Don't attempt to export grub_bios_interrupt + on i386-multiboot. + +2013-12-18 Aleš Nesrsta + + * grub-core/disk/usbms.c: Retry on unknown errors. + Reuse the same tag on retries. + +2013-12-18 Aleš Nesrsta + + * grub-core/bus/usb/ehci.c: Fix handling of newborn transfers. + + Avoid confusing them with already completed transfers. + +2013-12-18 Vladimir Serbinenko + + Remove xen VFB. + + Due to XEN bug it prevents Linux boot. Remove it at least, until + workaround is found. + +2013-12-18 Vladimir Serbinenko + + * po/exclude.pot: Add 2 missing excludes. + +2013-12-18 Vladimir Serbinenko + + Add missing license section in macbless.mod and macho.mod. + +2013-12-18 Vladimir Serbinenko + + Allow compilation without thumb-interwork as long as no thumb is + involved or only thumb2 is used. + +2013-12-18 Vladimir Serbinenko + + Use -Wl,--no-relax rather than -mno-relax for uniformity. + +2013-12-18 Vladimir Serbinenko + + * INSTALL: Update comment as to why sparc64 clang isn't usable. + +2013-12-18 Vladimir Serbinenko + + Add __attribute__ ((sysv_abi)) only if it's really needed. + + Some compilers don't support it. + +2013-12-18 Vladimir Serbinenko + + * grub-core/lib/syslinux_parse.c: Declare timeout unsigned. + +2013-12-18 Vladimir Serbinenko + + Remove -Wold-style-definition. + + Not very useful and interaction of it with regexp depends on GCC + version. + +2013-12-18 Vladimir Serbinenko + + Make grub_util_get_windows_path_real static. + +2013-12-18 Vladimir Serbinenko + + * grub-core/commands/fileXX.c: Silence cast-align. + * grub-core/loader/i386/xen_fileXX.c: Likewise. + +2013-12-18 Vladimir Serbinenko + + * include/grub/efi/api.h (GRUB_EFI_ERROR_CODE): Use explicit cast + rather than LL suffix. + +2013-12-18 Vladimir Serbinenko + + * include/grub/efi/api.h (PRIxGRUB_EFI_UINTN_T): Remove leftover. + +2013-12-18 Vladimir Serbinenko + + * grub-core/loader/arm/linux.c: Use common initrd functions. + +2013-12-18 Vladimir Serbinenko + + Decrease number of strings to translate. + +2013-12-18 Vladimir Serbinenko + + * grub-core/kern/arm/dl.c: Remove unnecessarry execution mode check. + +2013-12-18 Vladimir Serbinenko + + Mark strings for translation and add remaining ones to exclude list. + +2013-12-18 Vladimir Serbinenko + + * util/grub-file.c (main): Fix sizeof usage. + +2013-12-18 Vladimir Serbinenko + + Silence spurious warning. + +2013-12-18 Vladimir Serbinenko + + Remove check_nt_hiberfil as it's been superseeded by file command. + +2013-12-17 Vladimir Serbinenko + + * docs/osdetect.cfg: Add isolinux config to detected OSes. + +2013-12-17 Vladimir Serbinenko + + Implement syslinux parser. + +2013-12-17 Vladimir Serbinenko + + * grub-core/commands/legacycfg.c: Use 32-bit Linux protocol on non-BIOS. + +2013-12-17 Vladimir Serbinenko + + Support cpuid --pae. + +2013-12-17 Vladimir Serbinenko + + Use AT keyboard on Yeeloong 3A. + +2013-12-17 Vladimir Serbinenko + + Add Yeeloong 3A reboot and halt. + +2013-12-17 Vladimir Serbinenko + + Add Radeon Yeeloong 3A support. + +2013-12-17 Vladimir Serbinenko + + Add bonito 3A support. + +2013-12-17 Vladimir Serbinenko + + * grub-core/loader/machoXX.c: Fix compilation on non-i386. + +2013-12-17 Vladimir Serbinenko + + * grub-core/loader/i386/xen_fileXX.c: Silence cast-align. + +2013-12-17 Vladimir Serbinenko + + * grub-core/loader/macho.c: Fix compilation on non-i386. + +2013-12-17 Vladimir Serbinenko + + Add missing format_arg attribute to check that printf with translated + messages has proper arguments. + +2013-12-17 Vladimir Serbinenko + + Use grub_xasprintf to format translated error messages containing + 64-bit quantity. + +2013-12-17 Jon McCune + + Fix double-free introduced by commit 33d02a42d64cf06cada1c389 + +2013-12-17 Vladimir Serbinenko + + Unify message for unsupported relocation. + +2013-12-17 Vladimir Serbinenko + + Mark miscompile error for translation. + +2013-12-17 Vladimir Serbinenko + + Use %I64 and not %ll when using OS printf if compiling for windows. + +2013-12-17 Vladimir Serbinenko + + Update Mac code to match new register_efi prototype. + +2013-12-17 Vladimir Serbinenko + + Implement better integration with Mac firmware. + +2013-12-17 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c: Implement special value for + load_addr. + +2013-12-17 Vladimir Serbinenko + + Include serial module in default_payload.elf. + +2013-12-17 Vladimir Serbinenko + + Add explicit thumb interwork bx in asm files. + + Shouldn't matter for armv >= 5 but let's be safe. + +2013-12-17 Vladimir Serbinenko + + Implement Truecrypt ISO loader. + +2013-12-17 Vladimir Serbinenko + + * grub-core/lib/arg.c: Ensure at least a single space between commands. + +2013-12-17 Vladimir Serbinenko + + Implement grub_file tool and use it to implement generating of config + in separate root. + +2013-12-17 Vladimir Serbinenko + + Change to v1 xen grants. + +2013-12-17 Vladimir Serbinenko + + * grub-core/lib/i386/xen/relocator.S: Fix hypercall ABI violation. + + GRUB relied on %ebx being preserved across hypercall which isn't true. + +2013-12-17 Vladimir Serbinenko + + * grub-core/lib/x86_64/xen/relocator.S: Fix hypercall ABI violation. + + GRUB relied on %rdi being preserved across hypercall which isn't true. + +2013-12-17 Vladimir Serbinenko + + Implement XEN VFB support. + +2013-12-17 Vladimir Serbinenko + + Remove grub_bios_interrupt on coreboot. + + It's not used currently and cannot be used safely currently. + +2013-12-16 Vladimir Serbinenko + + Update exclude.pot and mark few strings for translation. + +2013-12-16 Vladimir Serbinenko + + * util/grub-mkrescue.c: Fix incorrect file usage in fallback code. + + Reported by: Jon McCune + +2013-12-16 Andrey Borzenkov + + * grub-core/osdep/linux/platform.c (grub_install_get_default_x86_platform): + Add verbose information which firmware directories were tried. + +2013-12-16 Andrey Borzenkov + + * grub-core/osdep/unix/exec.c (grub_util_exec_redirect_all): New + function to optionally redirect all three standard descriptors. + Redefine grub_util_exec, grub_util_exec_redirect and + grub_util_exec_redirect_null to use it. + * include/grub/emu/exec.h: Define it. + * include/grub/osdep/exec_unix.h: Delete, it is unused. + * grub-core/osdep/linux/platform.c (grub_install_get_default_x86_platform): + Use grub_util_exec_redirect_all to redirect error to NULL. + +2013-12-16 Vladimir Serbinenko + + * grub-core/tests/sleep_test.c: Silence spurious warning. + +2013-12-16 Vladimir Serbinenko + + Make grub_xen_hypercall on i386 cdecl rather than stdcall to avoid + linker trying to "fixup" the code. + +2013-12-16 Vladimir Serbinenko + + * grub-core/kern/x86_64/xen/startup.S: Align stack. + +2013-12-16 Vladimir Serbinenko + + Add support for converting PE+ to Elf64. + +2013-12-16 Vladimir Serbinenko + + * grub-core/commands/minicmd.c (grub_mini_cmd_dump): Handle LLP case. + +2013-12-16 Vladimir Serbinenko + + Remove practice of assigning random const pointers to device id. + + This is not required as cache code already checks driver id as well. + +2013-12-16 Vladimir Serbinenko + + * include/grub/x86_64/types.h: Define sizeof (long) as 4 when compiling + with mingw. + +2013-12-16 Vladimir Serbinenko + + * include/grub/efi/api.h: Don't use call wrappers when compiled with + mingw or cygwin as API already matches. + +2013-12-16 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/errno.h: Undefine errno before redefining. + +2013-12-16 Vladimir Serbinenko + + * include/grub/efi/api.h: Define (u)intn_t based on pointer size and + not on long. + +2013-12-16 Vladimir Serbinenko + + Handle X86_64_PC64 relocation. + + Those are generated by some cygwin compilers. + +2013-12-16 Vladimir Serbinenko + + Determine the need for mingw-related stubs at compile time rather than + using not very significant $target_os. + +2013-12-16 Vladimir Serbinenko + + * grub-core/genmod.sh.in: Strip before converting to ELF as strip + may not work with ELF. + +2013-12-16 Vladimir Serbinenko + + Use unix functions for temporary files and special files on cygwin. + +2013-12-16 Vladimir Serbinenko + + Define functions explicitly rather than using --defsym in tests + whenever possible. Respect locality in remaining cases. + +2013-12-16 Vladimir Serbinenko + + * grub-core/genmoddep.awk: Remove explicit getline < /dev/stdin. + +2013-12-15 Andrey Borzenkov + + * grub-core/osdep/windows/platform.c (grub_install_register_efi): Handle + unlikely errors when getting EFI variables and make exhaustive search + for all BootNNNN variables to find matching one. + +2013-12-15 Ian Campbell + + * grub-core/kern/uboot/init.c: Fix units of uboot timer. + +2013-12-15 Vladimir Serbinenko + + New functional test for sleep function. + + This test allows to check sleep without qemu. Keep qemu version as + well as functional test won't notice if all clocks are going too fast + or too slow. + +2013-12-15 Vladimir Serbinenko + + Add explicit sysv_abi on amd64 asm routines. + +2013-12-15 Vladimir Serbinenko + + * grub-core/commands/efi/lsefisystab.c: Use %lld to show + num_table_entries. + +2013-12-15 Vladimir Serbinenko + + * include/grub/test.h: Use gnu_printf rather than printf on GRUB + functions. + +2013-12-15 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c: Use grub_addr_t rather than long when + appropriate. + +2013-12-15 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c: Use %p rather than %lx for pointers. + +2013-12-15 Vladimir Serbinenko + + * grub-core/kern/elfXX.c: Use grub_addr_t rather than long when + appropriate. + +2013-12-15 Vladimir Serbinenko + + * grub-core/disk/loopback.c: Use sequential IDs rather than pointer. + + In case of quick removal of loopback and adding another one it may + get same ID, confusing the cache system. + +2013-12-15 Vladimir Serbinenko + + * grub-core/commands/acpi.c: Use grub_addr_t rather than long when + appropriate. + +2013-12-15 Vladimir Serbinenko + + * grub-core/kern/i386/coreboot/cbtable.c: Use char * arithmetic rather + than converting to long. + +2013-12-15 Vladimir Serbinenko + + * grub-core/disk/cryptodisk.c: Rename "n" to "last_cryptodisk_id". + +2013-12-15 Vladimir Serbinenko + + * util/grub-mkimagexx.c (relocate_addresses): Display offset rather + than almost useless pointer. + +2013-12-15 Vladimir Serbinenko + + Add gcc_struct to all packed structures when compiling with mingw. + + Just "packed" doesn't always pack the way we expect. + +2013-12-14 Vladimir Serbinenko + + * include/grub/i386/coreboot/lbio.h: Add missing attribute (packed). + +2013-12-14 Vladimir Serbinenko + + * util/grub-pe2elf.c: Fix handling of .bss. + +2013-12-14 Vladimir Serbinenko + + Implement windows flavour of EFI install routines. + +2013-12-14 Vladimir Serbinenko + + * conf/Makefile.extra-dist: Adjust path to conf/i386-cygwin-img-ld.sc. + +2013-12-14 Vladimir Serbinenko + + Change grub_install_register_efi interface to pass GRUB device. + + This allows grub_install_register_efi to request partition info + directly. + +2013-12-14 Vladimir Serbinenko + + Workaround cygwin bug when using \\?\Volume{GUID} syntax. + +2013-12-14 Vladimir Serbinenko + + Do not use TCHAR string functions as they are not available on cygwin. + +2013-12-14 Vladimir Serbinenko + + Workaround windows bug when querying EFI system partition parameters. + +2013-12-14 Vladimir Serbinenko + + * grub-core/kern/i386/qemu/init.c (resource): Decrease struct size + by using bitfields. + +2013-12-14 Vladimir Serbinenko + + * grub-core/boot/i386/qemu/boot.S: Add missing EXT_C. + +2013-12-14 Vladimir Serbinenko + + Make i386-* other than i386-pc compileable under cygwin. + +2013-12-14 Vladimir Serbinenko + + Fix definition of grub_efi_hard_drive_device_path. Take care that + existing code would work even if by some reason bogus definition is + used by EFI implementations. + +2013-12-14 Vladimir Serbinenko + + * grub-core/osdep/windows/hostdisk.c: Fix cygwin compilation. + +2013-12-14 Vladimir Serbinenko + + * grub-core/osdep/windows/blocklist.c: Add missing cast in printf + invocation. + +2013-12-14 Vladimir Serbinenko + + * util/config.c: Remove trailing newline from distributor in simple + parsing. + +2013-12-14 Vladimir Serbinenko + + * include/grub/efi/api.h: Rename protocol and interface to avoid + conflict. + +2013-12-14 Vladimir Serbinenko + + * .gitignore: Add .exe variants. Add missing files. Remove few outdated + entries. + +2013-12-14 Vladimir Serbinenko + + * grub-core/osdep/exec.c: Use unix version on cygwin. + +2013-12-13 Vladimir Serbinenko + + Implement multiboot2 EFI BS specification. + +2013-12-11 Vladimir Serbinenko + + * grub-core/normal/charset.c: Fix premature line wrap and crash. + Crash happened only in some cases like a string starting at the + half of the screen of same length. + +2013-12-11 Vladimir Serbinenko + + * include/grub/efiemu/efiemu.h: Sync configuration table declaration + with EFI counterpart. + +2013-12-11 Vladimir Serbinenko + + Propagate the EFI commits to x86-efi specific parts. + +2013-12-11 Vladimir Serbinenko + + * grub-core/commands/efi/lssal.c: Fix terminating condition. + +2013-12-11 Vladimir Serbinenko + + Introduce grub_efi_packed_guid and use it where alignment is not + guaranteed. + +2013-12-11 Vladimir Serbinenko + + * include/grub/efi/api.h (grub_efi_device_path): Define length as + unaligned u16 rather than u8[2]. + +2013-12-11 Vladimir Serbinenko + + * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Add checks + for relocation range. + +2013-12-11 Vladimir Serbinenko + + * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Handle + non-function pcrel21b relocation. It happens with .text.unlikely + section. + +2013-12-10 Leif Lindholm + + * make MAX_USABLE_ADDRESS platform-specific + * grub-core/kern/efi/mm.c: add Vladimir's new BYTES_TO_PAGES_DOWN macro. + +2013-12-10 Leif Lindholm + + * grub-core/lib/fdt.c: change memcpy => grub_memcpy + +2013-12-09 Jon McCune + + * Add --no-rs-codes flag to optionally disable reed-solomon codes + in grub-install and grub-bios-setup for x86 BIOS targets. + +2013-12-09 Vladimir Serbinenko + + Add missing compile and link options for sparc64-emu. + +2013-12-09 Vladimir Serbinenko + + Implement sparc64 trampolines (needed for sparc64-emu). + +2013-12-09 Vladimir Serbinenko + + * grub-core/kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Check + range of R_SPARC_HI22. + Implement R_SPARC_LM22. + +2013-12-09 Vladimir Serbinenko + + * grub-core/kern/powerpc/dl_helper.c (grub_arch_dl_get_tramp_got_size): + Do not explicitly check for symbol table as it's already checked in + platform-independent layer. + +2013-12-09 Vladimir Serbinenko + + * grub-core/kern/emu/cache.c [__ia64__]: Use our cache cleaning routine + on ia64 as __clear_cache is a dummy on ia64. + +2013-12-09 Vladimir Serbinenko + + * grub-core/kern/ia64/dl_helper.c (grub_ia64_dl_get_tramp_got_size): + Do not explicitly check for symbol table as it's already checked in + platform-independent layer. + +2013-12-09 Colin Watson + + * util/grub-mkconfig.in: Add missing newline to output. + 2013-12-08 Vladimir Serbinenko * grub-core/kern/ia64/efi/init.c (grub_arch_sync_caches): Move to ... diff --git a/INSTALL b/INSTALL index b91d975c3..afc957ca9 100644 --- a/INSTALL +++ b/INSTALL @@ -17,6 +17,7 @@ configuring the GRUB. much bigger binaries. earlier versions not tested Note: clang 3.2 or later works for arm + None of tested clang versions generated usable thumb code earlier versions not tested Note: clang 3.3 or later works for arm64 earlier versions have no arm64 support @@ -25,8 +26,7 @@ configuring the GRUB. fail. Note: clang 3.2 or later works for powerpc earlier versions not tested - Note: clang has no support for generating 64-bit sparc code and hence you - can't compile GRUB for sparc64 with clang + Note: clang doesn't support -mno-app-regs and so can't be used for sparc64 Note: clang has no support for ia64 and hence you can't compile GRUB for ia64 with clang * GNU Make diff --git a/Makefile.am b/Makefile.am index 0a2c0991e..b11306679 100644 --- a/Makefile.am +++ b/Makefile.am @@ -399,7 +399,7 @@ bootcheck: $(BOOTCHECKS) if COND_i386_coreboot default_payload.elf: grub-mkstandalone grub-mkimage - pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg + pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg endif windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows diff --git a/Makefile.util.def b/Makefile.util.def index 8169d22ba..a2cb493bd 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -62,6 +62,7 @@ library = { common_nodist = grub_script.tab.h; common = grub-core/commands/blocklist.c; + common = grub-core/commands/macbless.c; common = grub-core/commands/xnu_uuid.c; common = grub-core/commands/testload.c; common = grub-core/commands/ls.c; @@ -154,6 +155,7 @@ library = { common = grub-core/script/script.c; common = grub-core/script/argv.c; common = grub-core/io/gzio.c; + common = grub-core/io/xzio.c; common = grub-core/io/lzopio.c; common = grub-core/kern/ia64/dl_helper.c; common = grub-core/kern/arm/dl_helper.c; @@ -417,6 +419,21 @@ program = { ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; }; +program = { + name = grub-macbless; + installdir = sbin; + mansection = 1; + common = util/grub-macbless.c; + common = grub-core/osdep/init.c; + common = grub-core/kern/emu/argp_common.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + data = { common = util/grub.d/README; installdir = grubconf; @@ -439,49 +456,42 @@ script = { name = '10_hurd'; common = util/grub.d/10_hurd.in; installdir = grubconf; - condition = COND_HOST_HURD; }; script = { name = '10_kfreebsd'; common = util/grub.d/10_kfreebsd.in; installdir = grubconf; - condition = COND_HOST_KFREEBSD; }; script = { name = '10_illumos'; common = util/grub.d/10_illumos.in; installdir = grubconf; - condition = COND_HOST_ILLUMOS; }; script = { name = '10_netbsd'; common = util/grub.d/10_netbsd.in; installdir = grubconf; - condition = COND_HOST_NETBSD; }; script = { name = '10_linux'; common = util/grub.d/10_linux.in; installdir = grubconf; - condition = COND_HOST_LINUX; }; script = { name = '10_xnu'; common = util/grub.d/10_xnu.in; installdir = grubconf; - condition = COND_HOST_XNU; }; script = { name = '20_linux_xen'; common = util/grub.d/20_linux_xen.in; installdir = grubconf; - condition = COND_HOST_LINUX; }; script = { @@ -567,6 +577,7 @@ program = { common = grub-core/osdep/platform.c; common = grub-core/osdep/platform_unix.c; extra_dist = grub-core/osdep/linux/platform.c; + extra_dist = grub-core/osdep/windows/platform.c; extra_dist = grub-core/osdep/basic/platform.c; extra_dist = grub-core/osdep/basic/no_platform.c; extra_dist = grub-core/osdep/unix/platform.c; @@ -613,6 +624,9 @@ program = { common = grub-core/osdep/blocklist.c; common = grub-core/osdep/config.c; common = util/config.c; + common = util/render-label.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; common = util/resolve.c; enable = noemu; @@ -1244,6 +1258,24 @@ program = { ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; }; +program = { + name = grub-syslinux2cfg; + mansection = 1; + common = util/grub-syslinux2cfg.c; + common = grub-core/lib/syslinux_parse.c; + common = grub-core/lib/getline.c; + common = grub-core/osdep/init.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + common = grub-core/kern/emu/argp_common.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + program = { name = grub-glue-efi; mansection = 1; @@ -1277,3 +1309,32 @@ program = { ldadd = grub-core/gnulib/libgnu.a; ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; }; + +program = { + name = grub-file; + mansection = 1; + + common = util/grub-file.c; + common = util/render-label.c; + common = grub-core/commands/file.c; + common = grub-core/commands/file32.c; + common = grub-core/commands/file64.c; + common = grub-core/loader/i386/xen_file.c; + common = grub-core/loader/i386/xen_file32.c; + common = grub-core/loader/i386/xen_file64.c; + common = grub-core/io/offset.c; + common = grub-core/kern/elf.c; + common = grub-core/loader/lzss.c; + common = grub-core/loader/macho.c; + common = grub-core/loader/macho32.c; + common = grub-core/loader/macho64.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; diff --git a/acinclude.m4 b/acinclude.m4 index 0e867e35c..32d5477d1 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -19,6 +19,8 @@ AC_DEFUN([grub_PROG_TARGET_CC], AC_CACHE_VAL(grub_cv_prog_target_cc, [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ asm (".globl start; start:"); +void __main (void); +void __main (void) {} int main (void); ]], [[]])], [grub_cv_prog_target_cc=yes], @@ -288,7 +290,12 @@ AC_DEFUN([grub_CHECK_BSS_START_SYMBOL], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING([if __bss_start is defined by the compiler]) AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol, -[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +]], [[asm ("incl __bss_start")]])], [grub_cv_check_uscore_uscore_bss_start_symbol=yes], [grub_cv_check_uscore_uscore_bss_start_symbol=no])]) @@ -297,7 +304,11 @@ AC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol]) AC_MSG_CHECKING([if edata is defined by the compiler]) AC_CACHE_VAL(grub_cv_check_edata_symbol, -[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void);]], [[asm ("incl edata")]])], [grub_cv_check_edata_symbol=yes], [grub_cv_check_edata_symbol=no])]) @@ -306,7 +317,11 @@ AC_MSG_RESULT([$grub_cv_check_edata_symbol]) AC_MSG_CHECKING([if _edata is defined by the compiler]) AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol, -[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void);]], [[asm ("incl _edata")]])], [grub_cv_check_uscore_edata_symbol=yes], [grub_cv_check_uscore_edata_symbol=no])]) @@ -330,7 +345,11 @@ AC_DEFUN([grub_CHECK_END_SYMBOL], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING([if end is defined by the compiler]) AC_CACHE_VAL(grub_cv_check_end_symbol, -[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void);]], [[asm ("incl end")]])], [grub_cv_check_end_symbol=yes], [grub_cv_check_end_symbol=no])]) @@ -339,7 +358,11 @@ AC_MSG_RESULT([$grub_cv_check_end_symbol]) AC_MSG_CHECKING([if _end is defined by the compiler]) AC_CACHE_VAL(grub_cv_check_uscore_end_symbol, -[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void);]], [[asm ("incl _end")]])], [grub_cv_check_uscore_end_symbol=yes], [grub_cv_check_uscore_end_symbol=no])]) diff --git a/conf/Makefile.common b/conf/Makefile.common index 47f3b9a03..6128797ed 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -8,11 +8,13 @@ unexport LC_ALL # Platform specific options if COND_sparc64_ieee1275 CFLAGS_PLATFORM += -mno-app-regs - LDFLAGS_PLATFORM = -Wl,-melf64_sparc -mno-relax + LDFLAGS_PLATFORM = -Wl,-melf64_sparc -Wl,--no-relax +endif +if COND_sparc64_emu + CFLAGS_PLATFORM += -mno-app-regs + LDFLAGS_PLATFORM = -Wl,--no-relax endif if COND_arm - CFLAGS_PLATFORM += -mthumb-interwork - CCASFLAGS_PLATFORM = -mthumb-interwork if !COND_emu LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache endif @@ -44,11 +46,7 @@ CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC) CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1 CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) -if COND_CYGWIN -STRIPFLAGS_KERNEL = -F elf32-i386 -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -else -STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .note.gnu.gold-version -endif +STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist index e0c915c4c..51f08c1f9 100644 --- a/conf/Makefile.extra-dist +++ b/conf/Makefile.extra-dist @@ -15,7 +15,7 @@ EXTRA_DIST += docs/autoiso.cfg EXTRA_DIST += docs/grub.cfg EXTRA_DIST += docs/osdetect.cfg -EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc +EXTRA_DIST += conf/i386-cygwin-img-ld.sc EXTRA_DIST += grub-core/Makefile.core.def EXTRA_DIST += grub-core/Makefile.gcry.def diff --git a/conf/i386-pc-cygwin-img-ld.sc b/conf/i386-cygwin-img-ld.sc similarity index 91% rename from conf/i386-pc-cygwin-img-ld.sc rename to conf/i386-cygwin-img-ld.sc index 90866c379..3ac26fcce 100644 --- a/conf/i386-pc-cygwin-img-ld.sc +++ b/conf/i386-cygwin-img-ld.sc @@ -5,6 +5,8 @@ SECTIONS .text : { start = . ; + _start = . ; + __start = . ; *(.text) etext = . ; } @@ -33,6 +35,8 @@ SECTIONS { *(.edata) end = . ; + _end = . ; + __end = . ; } .stab : { diff --git a/configure.ac b/configure.ac index 49638d2e9..e27f33262 100644 --- a/configure.ac +++ b/configure.ac @@ -32,7 +32,7 @@ dnl type, so there is no conflict. Variables with the prefix "TARGET_" dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target dnl type. -AC_INIT([GRUB],[2.00],[bug-grub@gnu.org]) +AC_INIT([GRUB],[2.02~beta1],[bug-grub@gnu.org]) AC_CONFIG_AUX_DIR([build-aux]) @@ -69,6 +69,7 @@ grub_TRANSFORM([grub-script-check]) grub_TRANSFORM([grub-set-default]) grub_TRANSFORM([grub-sparc64-setup]) grub_TRANSFORM([grub-render-label]) +grub_TRANSFORM([grub-file]) # Optimization flag. Allow user to override. if test "x$TARGET_CFLAGS" = x; then @@ -176,6 +177,10 @@ if test x$platform != xemu ; then esac fi +if test x"$target_cpu-$platform" = xsparc64-emu ; then + target_m64=1 ; +fi + case "$target_os" in windows* | mingw32*) target_os=cygwin ;; esac @@ -345,6 +350,11 @@ AC_SYS_LARGEFILE # Identify characteristics of the host architecture. unset ac_cv_c_bigendian +if test x"$target_cpu-$platform" = xsparc64-emu ; then + CFLAGS="$CFLAGS -m64" + HOST_CFLAGS="$HOST_CFLAGS -m64" +fi + AC_C_BIGENDIAN AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(long) @@ -423,7 +433,7 @@ esac gl_INIT WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wpointer-arith -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes" -EXTRA_WARN_FLAGS="-Wold-style-definition -Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign" +EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign" HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align" @@ -505,7 +515,12 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [ grub_cv_target_cc_w_extra_flags= for x in $EXTRA_WARN_FLAGS; do CFLAGS="$TARGET_CFLAGS $x -Werror" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +]], [[]])], [flag=1], [flag=0]) if test x$flag = x1 ; then grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x" fi @@ -679,23 +694,13 @@ if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables" fi -# For platforms where ELF is not the default link format. -case "${target_os}" in - cygwin) -# FIXME: put proper test here - NEED_REGISTER_FRAME_INFO=1 - ;; - *) NEED_REGISTER_FRAME_INFO=0 ;; -esac - - AC_ARG_ENABLE([efiemu], [AS_HELP_STRING([--enable-efiemu], [build and install the efiemu runtimes (default=guessed)])]) if test x"$enable_efiemu" = xno ; then efiemu_excuse="explicitly disabled" fi -if test x"$target_os" = xcygwin ; then +if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then efiemu_excuse="not available on cygwin" fi if test x"$target_cpu" != xi386 ; then @@ -755,8 +760,11 @@ CFLAGS="$TARGET_CFLAGS" if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [ grub_cv_target_cc_link_format=unknown - for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -m${target_cpu}pe -arch,${target_cpu}; do - if test x${target_cpu} != xi386 && test x$format = x${target_cpu}pe; then + for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do + if test x${target_cpu} != xi386 && test x$format = xi386pe; then + continue + fi + if test x${target_cpu} != xx86_64 && test x$format = xi386pep; then continue fi CFLAGS="$TARGET_CFLAGS" @@ -777,9 +785,12 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then AC_MSG_ERROR([no suitable link format found]) fi TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" - if test x"$grub_cv_target_cc_link_format" = x-mi386pe; then + if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then TARGET_OBJ2ELF='./build-grub-pe2elf'; fi + if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then + TARGET_OBJ2ELF='./build-grub-pep2elf'; + fi fi if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then @@ -797,12 +808,12 @@ if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_c TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20' TARGET_IMG_BASE_LDOPT="-Wl,-image_base" TARGET_LDFLAGS_OLDMAGIC="" -elif test x$grub_cv_target_cc_link_format = x-mi386pe && test x$platform = xpc; then +elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then TARGET_APPLE_LINKER=0 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N" - TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-pc-cygwin-img-ld.sc" + TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc" TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}" - TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-pc-cygwin-img-ld.sc" + TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc" TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" TARGET_IMG_CFLAGS= else @@ -820,7 +831,7 @@ AC_SUBST(TARGET_LDFLAGS_OLDMAGIC) LDFLAGS="$TARGET_LDFLAGS" -if test "$target_cpu" = x86_64; then +if test "$target_cpu" = x86_64 || test "$target_cpu-$platform" = sparc64-emu ; then # Use large model to support 4G memory AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [ CFLAGS="$TARGET_CFLAGS -m64 -mcmodel=large" @@ -830,6 +841,8 @@ if test "$target_cpu" = x86_64; then ]) if test "x$grub_cv_cc_mcmodel" = xyes; then TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" + elif test "$target_cpu-$platform" = sparc64-emu; then + TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany" fi fi @@ -858,6 +871,29 @@ if test "x$target_cpu" = xarm; then if test "x$grub_cv_cc_mlong_calls" = xyes; then TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls" fi + AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [ + CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_mthumb_interwork=yes], + [grub_cv_cc_mthumb_interwork=no]) + ]) + if test "x$grub_cv_cc_mthumb_interwork" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork" + elif test "x$grub_cv_cc_target_clang" = xno ; then + AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork]) + else + CFLAGS="$TARGET_CFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ +#if defined (__thumb__) && !defined (__thumb2__) +#error thumb without interworking +#endif +]])], + [no_interwork_ok=yes], + [no_interwork_ok=no]) + if test x$no_interwork_ok = xno ; then + AC_MSG_ERROR([attempt to compile to thumb with no thumb interwork]) + fi + fi fi # @@ -948,7 +984,7 @@ CC="$TARGET_CC" if test "x$TARGET_APPLE_LINKER" = x1 ; then CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error" else -CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error" +CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error" fi CPPFLAGS="$TARGET_CPPFLAGS" if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then @@ -962,10 +998,11 @@ LIBS="$TARGET_LIBGCC" grub_ASM_USCORE if test "x$TARGET_APPLE_LINKER" = x0 ; then if test x$grub_cv_asm_uscore = xyes; then -CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,_abort=_main" +DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main" else -CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,abort=main" +DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main" fi +CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM" fi # Check for libgcc symbols @@ -974,7 +1011,7 @@ AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _re if test "x$TARGET_APPLE_LINKER" = x1 ; then CFLAGS="$TARGET_CFLAGS -nostdlib -static" else -CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100" +CFLAGS="$TARGET_CFLAGS -nostdlib" fi LIBS="" @@ -988,7 +1025,7 @@ if test "x$target_cpu" = xi386; then if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then if test ! -z "$TARGET_IMG_LDSCRIPT"; then # Check symbols provided by linker script. - CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000 -Wl,--defsym,___main=0x8100" + CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000" fi grub_CHECK_BSS_START_SYMBOL grub_CHECK_END_SYMBOL @@ -1607,7 +1644,6 @@ AC_SUBST(TARGET_LDFLAGS) AC_SUBST(TARGET_CPPFLAGS) AC_SUBST(TARGET_CCASFLAGS) -AC_SUBST(TARGET_IMG_LDSCRIPT) AC_SUBST(TARGET_IMG_LDFLAGS) AC_SUBST(TARGET_IMG_CFLAGS) AC_SUBST(TARGET_IMG_BASE_LDOPT) @@ -1640,6 +1676,7 @@ AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips]) AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc]) AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu]) AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel]) AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel]) @@ -1650,13 +1687,7 @@ AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi]) AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ]) AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi]) -AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd]) -AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux]) -AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd]) AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows]) -AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd]) -AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu]) -AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos]) AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x]) AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes]) @@ -1679,7 +1710,6 @@ AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1]) AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes]) AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1]) -AM_CONDITIONAL([COND_CYGWIN], [test x$target_os = xcygwin]) AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x]) AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy]) diff --git a/debian/patches/core_in_fs.patch b/debian/patches/core_in_fs.patch index ea6db6569..c40ec8c9a 100644 --- a/debian/patches/core_in_fs.patch +++ b/debian/patches/core_in_fs.patch @@ -11,7 +11,7 @@ Index: b/util/setup.c /* On SPARC this program fills in various fields inside of the 'boot' and 'core' * image files. * -@@ -577,6 +579,8 @@ +@@ -590,6 +592,8 @@ grub_free (sectors); @@ -20,7 +20,7 @@ Index: b/util/setup.c goto finish; } -@@ -619,6 +623,10 @@ +@@ -632,6 +636,10 @@ /* The core image must be put on a filesystem unfortunately. */ grub_util_info ("will leave the core image on the filesystem"); diff --git a/debian/patches/default_grub_d.patch b/debian/patches/default_grub_d.patch index 2d0f84344..b7a5f7ec9 100644 --- a/debian/patches/default_grub_d.patch +++ b/debian/patches/default_grub_d.patch @@ -2,7 +2,7 @@ Description: Read /etc/default/grub.d/*.cfg after /etc/default/grub Author: Colin Watson Bug-Ubuntu: https://bugs.launchpad.net/bugs/901600 Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/grub-core/osdep/unix/config.c =================================================================== @@ -92,7 +92,7 @@ Index: b/util/grub-mkconfig.in =================================================================== --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in -@@ -153,6 +153,11 @@ +@@ -162,6 +162,11 @@ if test -f ${sysconfdir}/default/grub ; then . ${sysconfdir}/default/grub fi diff --git a/debian/patches/dpkg_version_comparison.patch b/debian/patches/dpkg_version_comparison.patch index 3a99ba813..6a76a37c7 100644 --- a/debian/patches/dpkg_version_comparison.patch +++ b/debian/patches/dpkg_version_comparison.patch @@ -1,13 +1,13 @@ Description: Improve handling of Debian kernel version numbers Author: Robert Millan Forwarded: not-needed -Last-Update: 2011-04-21 +Last-Update: 2013-12-20 Index: b/util/grub-mkconfig_lib.in =================================================================== --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in -@@ -235,8 +235,9 @@ +@@ -238,8 +238,9 @@ version_test_gt () { @@ -19,7 +19,7 @@ Index: b/util/grub-mkconfig_lib.in version_test_gt_cmp=gt if [ "x$version_test_gt_b" = "x" ] ; then return 0 -@@ -246,7 +247,7 @@ +@@ -249,7 +250,7 @@ *.old:*) version_test_gt_a="`echo -n "$version_test_gt_a" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=gt ;; *:*.old) version_test_gt_b="`echo -n "$version_test_gt_b" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=ge ;; esac diff --git a/debian/patches/gfxpayload_dynamic.patch b/debian/patches/gfxpayload_dynamic.patch index 6da285156..858483211 100644 --- a/debian/patches/gfxpayload_dynamic.patch +++ b/debian/patches/gfxpayload_dynamic.patch @@ -5,13 +5,13 @@ Description: Add configure option to enable gfxpayload=keep dynamically Author: Evan Broder Author: Colin Watson Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/configure.ac =================================================================== --- a/configure.ac +++ b/configure.ac -@@ -1534,6 +1534,17 @@ +@@ -1571,6 +1571,17 @@ fi AC_SUBST([QUICK_BOOT]) @@ -212,7 +212,7 @@ Index: b/util/grub.d/10_linux.in . "@datadir@/@PACKAGE@/grub-mkconfig_lib" -@@ -133,9 +134,10 @@ +@@ -158,9 +159,10 @@ if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then echo " load_video" | sed "s/^/$submenu_indentation/" fi @@ -226,7 +226,7 @@ Index: b/util/grub.d/10_linux.in fi echo " insmod gzio" | sed "s/^/$submenu_indentation/" -@@ -208,6 +210,35 @@ +@@ -221,6 +223,35 @@ boot_device_id= title_correction_code= diff --git a/debian/patches/gfxpayload_keep_default.patch b/debian/patches/gfxpayload_keep_default.patch index 8a160a2d8..12ae61ce3 100644 --- a/debian/patches/gfxpayload_keep_default.patch +++ b/debian/patches/gfxpayload_keep_default.patch @@ -11,13 +11,13 @@ Description: Disable gfxpayload=keep by default Author: Colin Watson Bug-Debian: http://bugs.debian.org/567245 Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/util/grub.d/10_linux.in =================================================================== --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in -@@ -102,10 +102,6 @@ +@@ -127,10 +127,6 @@ # FIXME: We need an interface to select vesafb in case efifb can't be used. if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then echo " load_video" | sed "s/^/$submenu_indentation/" diff --git a/debian/patches/grub.cfg_400.patch b/debian/patches/grub.cfg_400.patch index ce248b396..6bb02f136 100644 --- a/debian/patches/grub.cfg_400.patch +++ b/debian/patches/grub.cfg_400.patch @@ -2,7 +2,7 @@ Index: b/util/grub-mkconfig.in =================================================================== --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in -@@ -260,6 +260,10 @@ +@@ -298,6 +298,10 @@ esac done diff --git a/debian/patches/install_efi_fallback.patch b/debian/patches/install_efi_fallback.patch index e0ef6b083..6ea88cf85 100644 --- a/debian/patches/install_efi_fallback.patch +++ b/debian/patches/install_efi_fallback.patch @@ -5,26 +5,27 @@ Description: Fall back to i386-pc if booted using EFI but -efi is missing better than returning a confusing error. Author: Colin Watson Forwarded: no -Last-Update: 2013-11-19 +Last-Update: 2013-12-20 Index: b/grub-core/osdep/linux/platform.c =================================================================== --- a/grub-core/osdep/linux/platform.c +++ b/grub-core/osdep/linux/platform.c -@@ -19,9 +19,11 @@ +@@ -19,10 +19,12 @@ #include #include +#include #include + #include #include #include +#include #include #include -@@ -73,12 +75,24 @@ - "efivars", NULL }); +@@ -76,11 +78,24 @@ + grub_util_info ("Looking for /sys/firmware/efi .."); if (is_not_empty_directory ("/sys/firmware/efi")) { + const char *pkglibdir = grub_util_get_pkglibdir (); @@ -32,11 +33,11 @@ Index: b/grub-core/osdep/linux/platform.c + char *pd; + int found; + + grub_util_info ("...found"); if (is_64_kernel ()) - return "x86_64-efi"; + platform = "x86_64-efi"; - else -- return "i386-efi"; ++ else + platform = "i386-efi"; + + pd = grub_util_path_concat (2, pkglibdir, platform); @@ -44,10 +45,9 @@ Index: b/grub-core/osdep/linux/platform.c + free (pd); + if (found) + return platform; + else +- return "i386-efi"; ++ grub_util_info ("... but %s platform not available", platform); } -- else if (is_not_empty_directory ("/proc/device-tree")) -+ -+ if (is_not_empty_directory ("/proc/device-tree")) - return "i386-ieee1275"; - else - return "i386-pc"; + + grub_util_info ("... not found. Looking for /proc/device-tree .."); diff --git a/debian/patches/install_efi_ubuntu_flavours.patch b/debian/patches/install_efi_ubuntu_flavours.patch index 37bf54abe..4a5a46231 100644 --- a/debian/patches/install_efi_ubuntu_flavours.patch +++ b/debian/patches/install_efi_ubuntu_flavours.patch @@ -5,13 +5,13 @@ Description: Cope with Kubuntu setting GRUB_DISTRIBUTOR Author: Colin Watson Bug-Ubuntu: https://bugs.launchpad.net/bugs/1242417 Forwarded: not-needed -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/util/grub-install.c =================================================================== --- a/util/grub-install.c +++ b/util/grub-install.c -@@ -950,6 +950,8 @@ +@@ -1075,6 +1075,8 @@ */ char *t; efi_distributor = bootloader_id; diff --git a/debian/patches/install_signed.patch b/debian/patches/install_signed.patch index 8387588dd..1763ecf28 100644 --- a/debian/patches/install_signed.patch +++ b/debian/patches/install_signed.patch @@ -3,32 +3,32 @@ Author: Colin Watson Author: Stéphane Graber Author: Steve Langasek Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/util/grub-install.c =================================================================== --- a/util/grub-install.c +++ b/util/grub-install.c -@@ -69,6 +69,7 @@ - static FILE * load_cfg_f = NULL; - static char *load_cfg; - static int install_bootsector = 1; +@@ -76,6 +76,7 @@ + static char *label_bgcolor; + static char *product_version; + static int add_rs_codes = 1; +static int uefi_secure_boot = 1; enum { -@@ -94,7 +95,9 @@ - OPTION_DEBUG_IMAGE, - OPTION_NO_FLOPPY, - OPTION_DISK_MODULE, -- OPTION_NO_BOOTSECTOR -+ OPTION_NO_BOOTSECTOR, +@@ -107,7 +108,9 @@ + OPTION_LABEL_FONT, + OPTION_LABEL_COLOR, + OPTION_LABEL_BGCOLOR, +- OPTION_PRODUCT_VERSION ++ OPTION_PRODUCT_VERSION, + OPTION_UEFI_SECURE_BOOT, + OPTION_NO_UEFI_SECURE_BOOT }; static int fs_probe = 1; -@@ -190,6 +193,14 @@ +@@ -231,6 +234,14 @@ bootloader_id = xstrdup (arg); return 0; @@ -43,10 +43,10 @@ Index: b/util/grub-install.c case ARGP_KEY_ARG: if (install_device) grub_util_error ("%s", _("More than one install device?")); -@@ -250,6 +261,14 @@ - N_("the ID of bootloader. This option is only available on EFI."), 2}, - {"efi-directory", OPTION_EFI_DIRECTORY, N_("DIR"), 0, - N_("use DIR as the EFI System Partition root."), 2}, +@@ -300,6 +311,14 @@ + {"label-color", OPTION_LABEL_COLOR, N_("COLOR"), 0, N_("use COLOR for label"), 2}, + {"label-bgcolor", OPTION_LABEL_BGCOLOR, N_("COLOR"), 0, N_("use COLOR for label background"), 2}, + {"product-version", OPTION_PRODUCT_VERSION, N_("STRING"), 0, N_("use STRING as product version"), 2}, + {"uefi-secure-boot", OPTION_UEFI_SECURE_BOOT, 0, 0, + N_("install an image usable with UEFI Secure Boot. " + "This option is only available on EFI and if the grub-efi-amd64-signed " @@ -58,7 +58,7 @@ Index: b/util/grub-install.c {0, 0, 0, 0, 0, 0} }; -@@ -694,7 +713,8 @@ +@@ -801,7 +820,8 @@ { int is_efi = 0; const char *efi_distributor = NULL; @@ -68,7 +68,7 @@ Index: b/util/grub-install.c char **grub_devices; grub_fs_t grub_fs; grub_device_t grub_dev = NULL; -@@ -930,6 +950,31 @@ +@@ -1055,6 +1075,31 @@ */ char *t; efi_distributor = bootloader_id; @@ -100,7 +100,7 @@ Index: b/util/grub-install.c if (removable) { /* The specification makes stricter requirements of removable -@@ -938,54 +983,16 @@ +@@ -1063,54 +1108,16 @@ must have a specific file name depending on the architecture. */ efi_distributor = "BOOT"; @@ -159,7 +159,7 @@ Index: b/util/grub-install.c } t = grub_util_path_concat (3, efidir, "EFI", efi_distributor); free (efidir); -@@ -1120,6 +1127,31 @@ +@@ -1315,6 +1322,31 @@ } } @@ -191,7 +191,7 @@ Index: b/util/grub-install.c if (!have_abstractions) { if ((disk_module && grub_strcmp (disk_module, "biosdisk") != 0) -@@ -1127,7 +1159,8 @@ +@@ -1322,7 +1354,8 @@ || (!install_drive && platform != GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275) || (install_drive && !is_same_disk (grub_drives[0], install_drive)) @@ -201,7 +201,7 @@ Index: b/util/grub-install.c { char *uuid = NULL; /* generic method (used on coreboot and ata mod). */ -@@ -1557,7 +1590,47 @@ +@@ -1843,7 +1876,47 @@ case GRUB_INSTALL_PLATFORM_IA64_EFI: { char *dst = grub_util_path_concat (2, efidir, efi_file); diff --git a/debian/patches/install_stage2_confusion.patch b/debian/patches/install_stage2_confusion.patch index 23216b0ba..187d9024f 100644 --- a/debian/patches/install_stage2_confusion.patch +++ b/debian/patches/install_stage2_confusion.patch @@ -2,24 +2,24 @@ Description: If GRUB Legacy is still around, tell packaging to ignore it Author: Colin Watson Bug-Debian: http://bugs.debian.org/586143 Forwarded: not-needed -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/util/grub-install.c =================================================================== --- a/util/grub-install.c +++ b/util/grub-install.c -@@ -41,6 +41,7 @@ - #include +@@ -42,6 +42,7 @@ #include #include + #include +#include #include -@@ -1450,6 +1451,19 @@ +@@ -1648,6 +1649,19 @@ grub_util_bios_setup (platdir, "boot.img", "core.img", install_drive, force, - fs_probe, allow_floppy); + fs_probe, allow_floppy, add_rs_codes); + + /* If vestiges of GRUB Legacy still exist, tell the Debian packaging + that they can ignore them. */ diff --git a/debian/patches/linuxefi.patch b/debian/patches/linuxefi.patch index caff8892d..f2c295a01 100644 --- a/debian/patches/linuxefi.patch +++ b/debian/patches/linuxefi.patch @@ -2,13 +2,13 @@ Description: Add "linuxefi" loader which avoids ExitBootServices Author: Matthew Garrett Origin: vendor, http://pkgs.fedoraproject.org/cgit/grub2.git/tree/grub2-linuxefi.patch Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/grub-core/Makefile.core.def =================================================================== --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def -@@ -1691,6 +1691,14 @@ +@@ -1705,6 +1705,14 @@ }; module = { @@ -27,7 +27,7 @@ Index: b/grub-core/kern/efi/mm.c =================================================================== --- a/grub-core/kern/efi/mm.c +++ b/grub-core/kern/efi/mm.c -@@ -53,6 +53,38 @@ +@@ -49,6 +49,38 @@ static grub_efi_uint32_t finish_desc_version; int grub_efi_is_finished = 0; @@ -465,6 +465,6 @@ Index: b/include/grub/i386/linux.h grub_uint64_t pref_address; grub_uint32_t init_size; + grub_uint32_t handover_offset; - } __attribute__ ((packed)); + } GRUB_PACKED; /* Boot parameters for Linux based on 2.6.12. This is used by the setup diff --git a/debian/patches/linuxefi_amd64_only.patch b/debian/patches/linuxefi_amd64_only.patch index e63477b87..440c80a8c 100644 --- a/debian/patches/linuxefi_amd64_only.patch +++ b/debian/patches/linuxefi_amd64_only.patch @@ -1,13 +1,13 @@ Description: Only build linuxefi on amd64 Author: Colin Watson Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/grub-core/Makefile.core.def =================================================================== --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def -@@ -1694,7 +1694,6 @@ +@@ -1708,7 +1708,6 @@ name = linuxefi; efi = loader/i386/efi/linux.c; efi = lib/cmdline.c; diff --git a/debian/patches/linuxefi_non_sb_fallback.patch b/debian/patches/linuxefi_non_sb_fallback.patch index 59567ad57..4958b64c2 100644 --- a/debian/patches/linuxefi_non_sb_fallback.patch +++ b/debian/patches/linuxefi_non_sb_fallback.patch @@ -2,7 +2,7 @@ Description: If running under UEFI secure boot, attempt to use linuxefi loader Author: Colin Watson Author: Steve Langasek Forwarded: no -Last-Update: 2013-11-14 +Last-Update: 2013-12-20 Index: b/grub-core/loader/i386/efi/linux.c =================================================================== @@ -30,7 +30,7 @@ Index: b/grub-core/loader/i386/linux.c static grub_efi_uintn_t efi_mmap_size; #else static const grub_size_t efi_mmap_size = 0; -@@ -688,6 +690,41 @@ +@@ -690,6 +692,41 @@ grub_dl_ref (my_mod); @@ -72,7 +72,7 @@ Index: b/grub-core/loader/i386/linux.c if (argc == 0) { grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); -@@ -1050,6 +1087,12 @@ +@@ -1052,6 +1089,12 @@ grub_err_t err; struct grub_linux_initrd_context initrd_ctx; diff --git a/debian/patches/maybe_quiet.patch b/debian/patches/maybe_quiet.patch index bf1f9c822..81f64a225 100644 --- a/debian/patches/maybe_quiet.patch +++ b/debian/patches/maybe_quiet.patch @@ -25,7 +25,7 @@ Author: Colin Watson Bug-Ubuntu: https://bugs.launchpad.net/bugs/386922 Bug-Ubuntu: https://bugs.launchpad.net/bugs/861048 Forwarded: (partial) http://lists.gnu.org/archive/html/grub-devel/2009-09/msg00056.html -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/config.h.in =================================================================== @@ -44,7 +44,7 @@ Index: b/configure.ac =================================================================== --- a/configure.ac +++ b/configure.ac -@@ -1512,6 +1512,17 @@ +@@ -1549,6 +1549,17 @@ fi AC_SUBST([UBUNTU_RECOVERY]) @@ -62,7 +62,7 @@ Index: b/configure.ac LIBS="" AC_SUBST([FONT_SOURCE]) -@@ -1767,5 +1778,10 @@ +@@ -1797,5 +1808,10 @@ else echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)" fi @@ -246,7 +246,7 @@ Index: b/grub-core/normal/main.c =================================================================== --- a/grub-core/normal/main.c +++ b/grub-core/normal/main.c -@@ -428,6 +428,15 @@ +@@ -382,6 +382,15 @@ grub_normal_read_line_real (char **line, int cont, int nested) { const char *prompt; @@ -262,7 +262,7 @@ Index: b/grub-core/normal/main.c if (cont) /* TRANSLATORS: it's command line prompt. */ -@@ -476,7 +485,9 @@ +@@ -430,7 +439,9 @@ return; } @@ -331,7 +331,7 @@ Index: b/util/grub.d/10_linux.in . "@datadir@/@PACKAGE@/grub-mkconfig_lib" -@@ -146,10 +147,12 @@ +@@ -171,10 +172,12 @@ fi printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" fi @@ -346,7 +346,7 @@ Index: b/util/grub.d/10_linux.in if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then sed "s/^/$submenu_indentation/" << EOF linux ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args} -@@ -161,9 +164,13 @@ +@@ -186,9 +189,13 @@ fi if test -n "${initrd}" ; then # TRANSLATORS: ramdisk isn't identifier. Should be translated. diff --git a/debian/patches/mkconfig_loopback.patch b/debian/patches/mkconfig_loopback.patch index ec913c9db..d6a73cb68 100644 --- a/debian/patches/mkconfig_loopback.patch +++ b/debian/patches/mkconfig_loopback.patch @@ -13,7 +13,7 @@ Index: b/util/grub-mkconfig_lib.in =================================================================== --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in -@@ -130,6 +130,21 @@ +@@ -133,6 +133,21 @@ esac done @@ -35,7 +35,7 @@ Index: b/util/grub-mkconfig_lib.in if dmsetup status $device 2>/dev/null | grep -q 'crypt[[:space:]]$'; then grub_warn \ "$device is a crypto device, which GRUB cannot read directly. Some" \ -@@ -240,6 +255,14 @@ +@@ -243,6 +258,14 @@ else return 1 fi @@ -54,7 +54,7 @@ Index: b/util/grub.d/10_linux.in =================================================================== --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in -@@ -40,6 +40,11 @@ +@@ -65,6 +65,11 @@ case ${GRUB_DEVICE} in /dev/loop/*|/dev/loop[0-9]) GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` @@ -70,7 +70,7 @@ Index: b/util/grub.d/20_linux_xen.in =================================================================== --- a/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in -@@ -40,6 +40,11 @@ +@@ -44,6 +44,11 @@ case ${GRUB_DEVICE} in /dev/loop/*|/dev/loop[0-9]) GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` diff --git a/debian/patches/mkconfig_mid_upgrade.patch b/debian/patches/mkconfig_mid_upgrade.patch index 3c58dc33e..534cf3fe8 100644 --- a/debian/patches/mkconfig_mid_upgrade.patch +++ b/debian/patches/mkconfig_mid_upgrade.patch @@ -8,13 +8,13 @@ Description: Bail out if trying to run grub-mkconfig during upgrade to 2.00 problem. Author: Colin Watson Forwarded: no -Last-Update: 2013-11-14 +Last-Update: 2013-12-20 Index: b/util/grub-mkconfig.in =================================================================== --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in -@@ -98,6 +98,13 @@ +@@ -107,6 +107,13 @@ esac done diff --git a/debian/patches/mkconfig_nonexistent_loopback.patch b/debian/patches/mkconfig_nonexistent_loopback.patch index ec77088d2..e172fd40c 100644 --- a/debian/patches/mkconfig_nonexistent_loopback.patch +++ b/debian/patches/mkconfig_nonexistent_loopback.patch @@ -2,13 +2,13 @@ Description: Avoid getting confused by inaccessible loop device backing paths Author: Colin Watson Bug-Ubuntu: https://bugs.launchpad.net/bugs/938724 Forwarded: no -Last-Update: 2013-11-26 +Last-Update: 2013-12-20 Index: b/util/grub-mkconfig_lib.in =================================================================== --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in -@@ -139,7 +139,7 @@ +@@ -142,7 +142,7 @@ /dev/*) ;; *) loop_device="${device}" diff --git a/debian/patches/mkconfig_recovery_title.patch b/debian/patches/mkconfig_recovery_title.patch index 6798ad2d2..02da0c438 100644 --- a/debian/patches/mkconfig_recovery_title.patch +++ b/debian/patches/mkconfig_recovery_title.patch @@ -3,7 +3,7 @@ Description: Add GRUB_RECOVERY_TITLE option Author: Colin Watson Bug-Ubuntu: https://bugs.launchpad.net/bugs/1240360 Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/docs/grub.texi =================================================================== @@ -25,7 +25,7 @@ Index: b/util/grub-mkconfig.in =================================================================== --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in -@@ -185,6 +185,10 @@ +@@ -194,6 +194,10 @@ if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub_editenv}" - list | sed -n '/^saved_entry=/ s,^saved_entry=,,p'`" ; fi @@ -36,7 +36,7 @@ Index: b/util/grub-mkconfig.in # These are defined in this script, export them here so that user can # override them. -@@ -236,7 +240,8 @@ +@@ -246,7 +250,8 @@ GRUB_BADRAM \ GRUB_OS_PROBER_SKIP_LIST \ GRUB_DISABLE_SUBMENU \ @@ -50,7 +50,7 @@ Index: b/util/grub.d/10_hurd.in =================================================================== --- a/util/grub.d/10_hurd.in +++ b/util/grub.d/10_hurd.in -@@ -88,8 +88,8 @@ +@@ -98,8 +98,8 @@ if [ x$type != xsimple ] ; then if [ x$type = xrecovery ] ; then @@ -65,7 +65,7 @@ Index: b/util/grub.d/10_kfreebsd.in =================================================================== --- a/util/grub.d/10_kfreebsd.in +++ b/util/grub.d/10_kfreebsd.in -@@ -76,7 +76,7 @@ +@@ -86,7 +86,7 @@ fi if [ x$type != xsimple ] ; then if [ x$type = xrecovery ] ; then @@ -78,7 +78,7 @@ Index: b/util/grub.d/10_linux.in =================================================================== --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in -@@ -114,7 +114,7 @@ +@@ -139,7 +139,7 @@ if [ x$type != xsimple ] ; then case $type in recovery) @@ -91,7 +91,7 @@ Index: b/util/grub.d/10_netbsd.in =================================================================== --- a/util/grub.d/10_netbsd.in +++ b/util/grub.d/10_netbsd.in -@@ -102,7 +102,7 @@ +@@ -110,7 +110,7 @@ if [ x$type != xsimple ] ; then if [ x$type = xrecovery ] ; then @@ -104,7 +104,7 @@ Index: b/util/grub.d/20_linux_xen.in =================================================================== --- a/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in -@@ -93,7 +93,7 @@ +@@ -97,7 +97,7 @@ fi if [ x$type != xsimple ] ; then if [ x$type = xrecovery ] ; then diff --git a/debian/patches/mkconfig_signed_kernel.patch b/debian/patches/mkconfig_signed_kernel.patch index 7e6013030..1ed8b6a33 100644 --- a/debian/patches/mkconfig_signed_kernel.patch +++ b/debian/patches/mkconfig_signed_kernel.patch @@ -1,13 +1,13 @@ Description: Generate configuration for signed UEFI kernels if available Author: Colin Watson Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/util/grub.d/10_linux.in =================================================================== --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in -@@ -149,8 +149,16 @@ +@@ -174,8 +174,16 @@ message="$(gettext_printf "Loading Linux %s ..." ${version})" sed "s/^/$submenu_indentation/" << EOF echo '$(echo "$message" | grub_quote)' @@ -24,7 +24,7 @@ Index: b/util/grub.d/10_linux.in if test -n "${initrd}" ; then # TRANSLATORS: ramdisk isn't identifier. Should be translated. message="$(gettext_printf "Loading initial ramdisk ...")" -@@ -196,6 +204,13 @@ +@@ -209,6 +217,13 @@ is_top_level=true while [ "x$list" != "x" ] ; do linux=`version_find_latest $list` diff --git a/debian/patches/mkconfig_skip_dmcrypt.patch b/debian/patches/mkconfig_skip_dmcrypt.patch index b52da7ed2..671d010ec 100644 --- a/debian/patches/mkconfig_skip_dmcrypt.patch +++ b/debian/patches/mkconfig_skip_dmcrypt.patch @@ -6,13 +6,13 @@ Author: Colin Watson Origin: other, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542165#25 Bug-Debian: http://bugs.debian.org/542165 Forwarded: no -Last-Update: 2010-06-05 +Last-Update: 2013-12-20 Index: b/util/grub-mkconfig_lib.in =================================================================== --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in -@@ -130,6 +130,15 @@ +@@ -133,6 +133,15 @@ esac done diff --git a/debian/patches/mkconfig_ubuntu_distributor.patch b/debian/patches/mkconfig_ubuntu_distributor.patch index c853a108d..cca1b9c31 100644 --- a/debian/patches/mkconfig_ubuntu_distributor.patch +++ b/debian/patches/mkconfig_ubuntu_distributor.patch @@ -4,13 +4,13 @@ Author: Mario Limonciello Author: Colin Watson Author: Harald Sitter Forwarded: not-needed -Last-Update: 2013-11-14 +Last-Update: 2013-12-20 Index: b/util/grub.d/10_linux.in =================================================================== --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in -@@ -32,7 +32,14 @@ +@@ -57,7 +57,14 @@ if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then OS=GNU/Linux else diff --git a/debian/patches/mkconfig_ubuntu_recovery.patch b/debian/patches/mkconfig_ubuntu_recovery.patch index 00366ad57..d45baa91c 100644 --- a/debian/patches/mkconfig_ubuntu_recovery.patch +++ b/debian/patches/mkconfig_ubuntu_recovery.patch @@ -6,13 +6,13 @@ Description: "single" -> "recovery" when friendly-recovery is installed Author: Colin Watson Author: Stéphane Graber Forwarded: no -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/configure.ac =================================================================== --- a/configure.ac +++ b/configure.ac -@@ -1501,6 +1501,17 @@ +@@ -1538,6 +1538,17 @@ AC_SUBST([LIBZFS]) AC_SUBST([LIBNVPAIR]) @@ -42,7 +42,7 @@ Index: b/util/grub.d/10_linux.in . "@datadir@/@PACKAGE@/grub-mkconfig_lib" -@@ -72,6 +73,15 @@ +@@ -97,6 +98,15 @@ title_correction_code= @@ -58,7 +58,7 @@ Index: b/util/grub.d/10_linux.in linux_entry () { os="$1" -@@ -111,7 +121,9 @@ +@@ -136,7 +146,9 @@ if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then echo " load_video" | sed "s/^/$submenu_indentation/" fi @@ -69,7 +69,7 @@ Index: b/util/grub.d/10_linux.in fi echo " insmod gzio" | sed "s/^/$submenu_indentation/" -@@ -239,7 +251,7 @@ +@@ -252,7 +264,7 @@ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then linux_entry "${OS}" "${version}" recovery \ diff --git a/debian/patches/mkrescue_efi_modules.patch b/debian/patches/mkrescue_efi_modules.patch index 51a29b680..4263f8ba3 100644 --- a/debian/patches/mkrescue_efi_modules.patch +++ b/debian/patches/mkrescue_efi_modules.patch @@ -3,13 +3,13 @@ Author: Mario Limonciello Author: Colin Watson Bug-Ubuntu: https://bugs.launchpad.net/bugs/677758 Forwarded: http://lists.gnu.org/archive/html/grub-devel/2011-01/msg00028.html -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/util/grub-mkrescue.c =================================================================== --- a/util/grub-mkrescue.c +++ b/util/grub-mkrescue.c -@@ -631,12 +631,18 @@ +@@ -636,12 +636,18 @@ make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_IA64_EFI, "ia64-efi", imgname); free (imgname); diff --git a/debian/patches/quick_boot.patch b/debian/patches/quick_boot.patch index f4ae136cb..05942644f 100644 --- a/debian/patches/quick_boot.patch +++ b/debian/patches/quick_boot.patch @@ -14,13 +14,13 @@ Description: Add configure option to bypass boot menu if possible Author: Colin Watson Author: Richard Laager Forwarded: no -Last-Update: 2013-12-11 +Last-Update: 2013-12-20 Index: b/configure.ac =================================================================== --- a/configure.ac +++ b/configure.ac -@@ -1523,6 +1523,17 @@ +@@ -1560,6 +1560,17 @@ fi AC_SUBST([QUIET_BOOT]) @@ -97,7 +97,7 @@ Index: b/util/grub-mkconfig.in =================================================================== --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in -@@ -235,7 +235,8 @@ +@@ -245,7 +245,8 @@ GRUB_ENABLE_CRYPTODISK \ GRUB_BADRAM \ GRUB_OS_PROBER_SKIP_LIST \ @@ -223,7 +223,7 @@ Index: b/util/grub.d/10_linux.in . "@datadir@/@PACKAGE@/grub-mkconfig_lib" -@@ -117,6 +118,9 @@ +@@ -142,6 +143,9 @@ else echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/" fi diff --git a/debian/patches/restore_mkdevicemap.patch b/debian/patches/restore_mkdevicemap.patch index 9157cb1e9..aa36a8d60 100644 --- a/debian/patches/restore_mkdevicemap.patch +++ b/debian/patches/restore_mkdevicemap.patch @@ -2,7 +2,7 @@ Index: b/Makefile.util.def =================================================================== --- a/Makefile.util.def +++ b/Makefile.util.def -@@ -311,6 +311,23 @@ +@@ -313,6 +313,23 @@ }; program = { diff --git a/debian/patches/uefi_firmware_setup.patch b/debian/patches/uefi_firmware_setup.patch index 94481f111..3b8014173 100644 --- a/debian/patches/uefi_firmware_setup.patch +++ b/debian/patches/uefi_firmware_setup.patch @@ -1,13 +1,13 @@ Description: Output a menu entry for firmware setup on UEFI FastBoot systems Author: Steve Langasek Forwarded: no -Last-Update: 2013-11-26 +Last-Update: 2013-12-20 Index: b/Makefile.util.def =================================================================== --- a/Makefile.util.def +++ b/Makefile.util.def -@@ -491,6 +491,12 @@ +@@ -501,6 +501,12 @@ }; script = { diff --git a/debian/patches/vt_handoff.patch b/debian/patches/vt_handoff.patch index d106ff9bc..108013a20 100644 --- a/debian/patches/vt_handoff.patch +++ b/debian/patches/vt_handoff.patch @@ -4,13 +4,13 @@ Description: Add configure option to use vt.handoff=7 Author: Colin Watson Author: Andy Whitcroft Forwarded: not-needed -Last-Update: 2013-12-08 +Last-Update: 2013-12-20 Index: b/configure.ac =================================================================== --- a/configure.ac +++ b/configure.ac -@@ -1545,6 +1545,17 @@ +@@ -1582,6 +1582,17 @@ fi AC_SUBST([GFXPAYLOAD_DYNAMIC]) @@ -40,7 +40,7 @@ Index: b/util/grub.d/10_linux.in . "@datadir@/@PACKAGE@/grub-mkconfig_lib" -@@ -92,6 +93,14 @@ +@@ -117,6 +118,14 @@ GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY nomodeset" fi @@ -55,7 +55,7 @@ Index: b/util/grub.d/10_linux.in linux_entry () { os="$1" -@@ -137,7 +146,7 @@ +@@ -162,7 +171,7 @@ fi if ([ "$ubuntu_recovery" = 0 ] || [ x$type != xrecovery ]) && \ ([ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 1 ]); then @@ -64,7 +64,7 @@ Index: b/util/grub.d/10_linux.in fi echo " insmod gzio" | sed "s/^/$submenu_indentation/" -@@ -210,6 +219,23 @@ +@@ -223,6 +232,23 @@ boot_device_id= title_correction_code= diff --git a/docs/grub.texi b/docs/grub.texi index 7ee65fe98..5728437e1 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -6008,8 +6008,20 @@ mounted on Recheck the device map, even if @file{/boot/grub/device.map} already exists. You should use this option whenever you add/remove a disk into/from your computer. -@end table +@item --no-rs-codes +By default on x86 BIOS systems, @command{grub-install} will use some +extra space in the bootloader embedding area for Reed-Solomon +error-correcting codes. This enables GRUB to still boot successfully +if some blocks are corrupted. The exact amount of protection offered +is dependent on available space in the embedding area. R sectors of +redundancy can tolerate up to R/2 corrupted sectors. This +redundancy may be cumbersome if attempting to cryptographically +validate the contents of the bootloader embedding area, or in more +modern systems with GPT-style partition tables (@pxref{BIOS +installation}) where GRUB does not reside in any unpartitioned space +outside of the MBR. Disable the Reed-Solomon codes with this option. +@end table @node Invoking grub-mkconfig @chapter Invoking grub-mkconfig diff --git a/docs/man/grub-file.h2m b/docs/man/grub-file.h2m new file mode 100644 index 000000000..e09bb4d31 --- /dev/null +++ b/docs/man/grub-file.h2m @@ -0,0 +1,2 @@ +[NAME] +grub-file \- check file type diff --git a/docs/man/grub-macbless.h2m b/docs/man/grub-macbless.h2m new file mode 100644 index 000000000..0197c0087 --- /dev/null +++ b/docs/man/grub-macbless.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-macbless \- bless a mac file/directory +[SEE ALSO] +.BR grub-install (1) diff --git a/docs/man/grub-syslinux2cfg.h2m b/docs/man/grub-syslinux2cfg.h2m new file mode 100644 index 000000000..ad25c8ab7 --- /dev/null +++ b/docs/man/grub-syslinux2cfg.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-syslinux2cfg \- transform syslinux config into grub.cfg +[SEE ALSO] +.BR grub-menulst2cfg (8) diff --git a/docs/osdetect.cfg b/docs/osdetect.cfg index b759c71fd..47455601d 100644 --- a/docs/osdetect.cfg +++ b/docs/osdetect.cfg @@ -178,6 +178,12 @@ for dev in (*); do # uuid: filesystem UUID probe -s uuid -u $dev + if test -f ($device)/isolinux/isolinux.cfg ; then + menuentry "ISOLINUX config (on $device)" $device { + set root=$2 + syslinux_configfile -i /isolinux/isolinux.cfg + } + fi if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then menuentry "Windows Vista bootmgr (on $device)" $device { set root=$2 diff --git a/gentpl.py b/gentpl.py index 02bf33523..bdcae1a1c 100644 --- a/gentpl.py +++ b/gentpl.py @@ -718,11 +718,14 @@ def kernel(defn, platform): """if test x$(TARGET_APPLE_LINKER) = x1; then \ $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@; \ elif test ! -z '$(TARGET_OBJ2ELF)'; then \ - cp $< $@.bin; $(TARGET_OBJ2ELF) $@.bin && cp $@.bin $@ || (rm -f $@.bin; exit 1); \ + $(TARGET_OBJ2ELF) $< $@ || (rm -f $@; exit 1); \ else cp $< $@; fi""", """if test x$(TARGET_APPLE_LINKER) = x1; then \ $(TARGET_STRIP) -S -x $(""" + cname(defn) + """) -o $@.bin $<; \ $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \ + elif test ! -z '$(TARGET_OBJ2ELF)'; then \ + """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@.bin $< && \ + $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); \ else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \ fi""")) diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 5b804c7d4..51cdcdaa4 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -26,8 +26,11 @@ CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM) CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM) +build-grub-pep2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^ + build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c - $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ # gentrigtables gentrigtables: gentrigtables.c @@ -100,7 +103,6 @@ endif if COND_i386_coreboot KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/i386/pc/int.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h @@ -110,7 +112,6 @@ endif if COND_i386_multiboot KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/i386/pc/int.h endif if COND_i386_qemu diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 46a138248..6f347155e 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -59,9 +59,7 @@ kernel = { ia64_efi_ldflags = '-Wl,-r,-d'; ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; - x86_64_xen_ldflags = '-Wl,-Ttext=0'; x86_64_xen_cppflags = '$(CPPFLAGS_XEN)'; - i386_xen_ldflags = '-Wl,-Ttext=0'; i386_xen_cppflags = '$(CPPFLAGS_XEN)'; arm_efi_ldflags = '-Wl,-r,-d'; @@ -72,15 +70,21 @@ kernel = { i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000'; - i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200'; + i386_coreboot_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_coreboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200'; + i386_multiboot_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_multiboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200'; + i386_ieee1275_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_ieee1275_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x10000'; + i386_xen_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0'; + x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)'; + x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0'; ldadd = '$(LDADD_KERNEL)'; - i386_coreboot_ldflags = '-Wl,-Ttext=0x8200'; - i386_multiboot_ldflags = '-Wl,-Ttext=0x8200'; - i386_ieee1275_ldflags = '-Wl,-Ttext=0x10000'; mips_loongson_ldflags = '-Wl,-Ttext,0x80200000'; powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000'; sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400'; @@ -241,6 +245,7 @@ kernel = { mips_loongson = video/sm712.c; mips_loongson = video/sis315pro.c; mips_loongson = video/radeon_fuloong2e.c; + mips_loongson = video/radeon_yeeloong3a.c; extra_dist = video/sm712_init.c; extra_dist = video/sis315_init.c; mips_loongson = commands/keylayouts.c; @@ -618,11 +623,6 @@ module = { enable = xen; }; -module = { - name = check_nt_hiberfil; - common = commands/i386/nthibr.c; -}; - module = { name = cmostest; common = commands/i386/cmostest.c; @@ -1452,6 +1452,11 @@ module = { common = fs/zfs/zfsinfo.c; }; +module = { + name = macbless; + common = commands/macbless.c; +}; + module = { name = pxe; i386_pc = net/drivers/i386/pc/pxe.c; @@ -1625,6 +1630,14 @@ module = { enable = i386_pc; }; + +module = { + name = truecrypt; + i386_pc = loader/i386/pc/truecrypt.c; + enable = i386_pc; +}; + + module = { name = freedos; i386_pc = loader/i386/pc/freedos.c; @@ -1661,10 +1674,6 @@ module = { name = linux; x86 = loader/i386/linux.c; xen = loader/i386/xen.c; - xen = loader/i386/xen_file.c; - xen = loader/i386/xen_file32.c; - xen = loader/i386/xen_file64.c; - extra_dist = loader/i386/xen_fileXX.c; xen_cppflags = '$(CPPFLAGS_XEN)'; i386_pc = lib/i386/pc/vesa_modes_table.c; mips = loader/mips/linux.c; @@ -1682,16 +1691,21 @@ module = { name = xnu; x86 = loader/xnu_resume.c; x86 = loader/i386/xnu.c; - x86 = loader/macho32.c; - x86 = loader/macho64.c; - x86 = loader/macho.c; x86 = loader/xnu.c; - x86 = loader/lzss.c; - extra_dist = loader/machoXX.c; enable = x86; }; +module = { + name = macho; + + common = loader/macho.c; + common = loader/macho32.c; + common = loader/macho64.c; + common = loader/lzss.c; + extra_dist = loader/machoXX.c; +}; + module = { name = appleldr; common = loader/efi/appleloader.c; @@ -1755,6 +1769,7 @@ module = { common = normal/term.c; common = normal/context.c; common = normal/charset.c; + common = lib/getline.c; common = script/main.c; common = script/script.c; @@ -1944,6 +1959,11 @@ module = { common = tests/signatures.h; }; +module = { + name = sleep_test; + common = tests/sleep_test.c; +}; + module = { name = xnu_uuid_test; common = tests/xnu_uuid_test.c; @@ -2131,6 +2151,12 @@ module = { enable = xen; }; +module = { + name = syslinuxcfg; + common = lib/syslinux_parse.c; + common = commands/syslinuxcfg.c; +}; + module = { name = test_blockarg; common = tests/test_blockarg.c; @@ -2273,3 +2299,15 @@ module = { name = progress; common = lib/progress.c; }; + +module = { + name = file; + common = commands/file.c; + common = commands/file32.c; + common = commands/file64.c; + extra_dist = commands/fileXX.c; + common = loader/i386/xen_file.c; + common = loader/i386/xen_file32.c; + common = loader/i386/xen_file64.c; + extra_dist = loader/i386/xen_fileXX.c; +}; diff --git a/grub-core/boot/i386/qemu/boot.S b/grub-core/boot/i386/qemu/boot.S index d99e2dde4..bdd68c704 100644 --- a/grub-core/boot/i386/qemu/boot.S +++ b/grub-core/boot/i386/qemu/boot.S @@ -58,7 +58,7 @@ VARIABLE(grub_core_entry_addr) orb $0x02, %al outb $0x92 1: - movl grub_core_entry_addr, %edx + movl EXT_C(grub_core_entry_addr), %edx jmp *%edx #include "../../../kern/i386/realmode.S" diff --git a/grub-core/boot/mips/loongson/fwstart.S b/grub-core/boot/mips/loongson/fwstart.S index c62b28fe9..6ae326990 100644 --- a/grub-core/boot/mips/loongson/fwstart.S +++ b/grub-core/boot/mips/loongson/fwstart.S @@ -63,18 +63,18 @@ __start: This way we don't need to sacrifice a register for it. */ retry_cs5536: /* We have only one bus (0). Function is 0. */ - lui $t0, %hi(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) - lui $t1, %hi(GRUB_MACHINE_PCI_CONFSPACE) + lui $t0, %hi(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F) + lui $t1, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F) lui $t3, %hi(GRUB_CS5536_PCIID) addiu $t3, $t3, %lo(GRUB_CS5536_PCIID) ori $t4, $zero, 1 1: - andi $t4, $t4, ((1 << GRUB_PCI_NUM_DEVICES) - 1) + andi $t4, $t4, ((1 << GRUB_PCI_NUM_DEVICES_2F) - 1) /* In case of failure try again. CS5536 may be slow to come up. */ beql $t4, $zero, retry_cs5536 nop - sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) ($t0) - lw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_PCI_REG_PCI_ID) ($t1) + sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F) ($t0) + lw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_PCI_REG_PCI_ID) ($t1) bnel $t2, $t3, 1b sll $t4, $t4, 1 @@ -86,9 +86,9 @@ retry_cs5536: move $a0, $t4 #endif - lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE) + lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F) li $t1, GRUB_CS5536_MSR_MAILBOX_CONFIG_ENABLED - sw $t1, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_CONFIG) ($t0) + sw $t1, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_CONFIG) ($t0) /* Set GPIO LBAR. */ lui $a0, %hi(GRUB_CS5536_MSR_GPIO_BAR) @@ -121,21 +121,21 @@ retry_cs5536: bal message addiu $a0, $a0, %lo(smbus_enabled) - lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS) + lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS) /* Disable SMB. */ - sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) + sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) /* Disable interrupts. */ - sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1) ($t0) + sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1) ($t0) /* Set as master. */ - sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_ADDR) ($t0) + sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_ADDR) ($t0) /* Launch SMBus controller at slowest speed possible. */ ori $t1, $zero, 0xff - sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0) - sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) + sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0) + sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) /* Yeeloong and Fuloong2f have only one memory slot. */ /* Output first byte on serial for debugging. */ @@ -237,8 +237,8 @@ other_exception: addiu $a0, $a0, %lo(unhandled_exception) gpio_init: - lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO) - addiu $t0, $t0, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO) + lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_GPIO) + addiu $t0, $t0, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_GPIO) lui $t1, %hi (gpio_dump) addiu $t1, $t1, %lo (gpio_dump) @@ -368,18 +368,18 @@ self: Clobbered: $t0 */ wrmsr: - lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE) - sw $a0, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_ADDR) ($t0) - sw $a1, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_DATA0) ($t0) + lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F) + sw $a0, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_ADDR) ($t0) + sw $a1, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_DATA0) ($t0) jr $ra - sw $a2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_DATA1) ($t0) + sw $a2, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_DATA1) ($t0) /* Wait for SMBus data or empty transmitter. */ /* In: $a0 = exception handler. Out: none. Clobbered: $t0, $t1 */ smbus_wait: 1: - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE) - lb $t0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE) ($t0) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) andi $t1, $t0, GRUB_CS5536_SMB_REG_STATUS_SDAST bne $t1, $zero, return nop @@ -401,52 +401,52 @@ read_spd: addiu $a0, $a0, %hi(read_spd_fail) /* Send START. */ - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) - lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START bal smbus_wait - sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) /* Send device address. */ - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) sll $t1, $a1, 1 bal smbus_wait - sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0) + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) /* Send ACK. */ - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) - lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_ACK - sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) /* Send byte address. */ - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) bal smbus_wait - sb $t2, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0) + sb $t2, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) /* Send START. */ - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) - lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START bal smbus_wait - sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) /* Send device address. */ - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) sll $t1, $a1, 1 ori $t1, $t1, 1 bal smbus_wait - sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0) + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) /* Send STOP. */ - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) - lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_STOP bal smbus_wait - sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) - lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) - lb $v0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0) + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $v0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) jr $t3 andi $v0, $v0, 0xff read_spd_fail: diff --git a/grub-core/boot/sparc64/ieee1275/boot.S b/grub-core/boot/sparc64/ieee1275/boot.S index efe090e0c..507367749 100644 --- a/grub-core/boot/sparc64/ieee1275/boot.S +++ b/grub-core/boot/sparc64/ieee1275/boot.S @@ -44,8 +44,8 @@ pic_base: . = _start + GRUB_BOOT_MACHINE_BOOT_DEVPATH boot_path: . = _start + GRUB_BOOT_MACHINE_KERNEL_BYTE -kernel_byte: .xword (2 << 9) boot_path_end: +kernel_byte: .xword (2 << 9) kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR #else #define boot_path (_start + 512 + SCRATCH_PAD_BOOT_SIZE) diff --git a/grub-core/bus/bonito.c b/grub-core/bus/bonito.c index 985608181..9a63f073c 100644 --- a/grub-core/bus/bonito.c +++ b/grub-core/bus/bonito.c @@ -30,8 +30,66 @@ static grub_addr_t addr_win[GRUB_MACHINE_PCI_NUM_WIN] = {GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR, GRUB_MACHINE_PCI_WIN3_ADDR}; +grub_bonito_type_t grub_bonito_type; + +static volatile void * +config_addr (grub_pci_address_t addr) +{ + if (grub_bonito_type == GRUB_BONITO_2F) + { + GRUB_MACHINE_PCI_CONF_CTRL_REG_2F = 1 << ((addr >> 11) & 0xf); + return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_2F + | (addr & 0x07ff)); + } + else + { + + if (addr >> 16) + return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_3A_EXT | addr); + else + return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_3A | addr); + } +} + +grub_uint32_t +grub_pci_read (grub_pci_address_t addr) +{ + return *(volatile grub_uint32_t *) config_addr (addr); +} + +grub_uint16_t +grub_pci_read_word (grub_pci_address_t addr) +{ + return *(volatile grub_uint16_t *) config_addr (addr); +} + +grub_uint8_t +grub_pci_read_byte (grub_pci_address_t addr) +{ + return *(volatile grub_uint8_t *) config_addr (addr); +} + +void +grub_pci_write (grub_pci_address_t addr, grub_uint32_t data) +{ + *(volatile grub_uint32_t *) config_addr (addr) = data; +} + +void +grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data) +{ + *(volatile grub_uint16_t *) config_addr (addr) = data; +} + +void +grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data) +{ + *(volatile grub_uint8_t *) config_addr (addr) = data; +} + + static inline void -write_bases (void) +write_bases_2f (void) { int i; grub_uint32_t reg = 0; @@ -39,38 +97,54 @@ write_bases (void) reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT) & GRUB_MACHINE_PCI_WIN_MASK) << (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE)); - GRUB_MACHINE_PCI_IO_CTRL_REG = reg; + GRUB_MACHINE_PCI_IO_CTRL_REG_2F = reg; } volatile void * grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)), grub_addr_t base, grub_size_t size) { - int i; - grub_addr_t newbase; + if (grub_bonito_type == GRUB_BONITO_2F) + { + int i; + grub_addr_t newbase; - /* First try already used registers. */ - for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) - if (usage_win[i] && base_win[i] <= base - && base_win[i] + sizes_win[i] > base + size) - { - usage_win[i]++; - return (void *) - (addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)); - } - /* Map new register. */ - newbase = base & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK; - for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) - if (!usage_win[i] && newbase <= base - && newbase + sizes_win[i] > base + size) - { - usage_win[i]++; - base_win[i] = newbase; - write_bases (); - return (void *) - (addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)); - } - grub_fatal ("Out of PCI windows."); + /* First try already used registers. */ + for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) + if (usage_win[i] && base_win[i] <= base + && base_win[i] + sizes_win[i] > base + size) + { + usage_win[i]++; + return (void *) + (addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)); + } + /* Map new register. */ + newbase = base & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK; + for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) + if (!usage_win[i] && newbase <= base + && newbase + sizes_win[i] > base + size) + { + usage_win[i]++; + base_win[i] = newbase; + write_bases_2f (); + return (void *) + (addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)); + } + grub_fatal ("Out of PCI windows."); + } + else + { + int region = 0; + if (base >= 0x10000000 + && base + size <= 0x18000000) + region = 1; + if (base >= 0x1c000000 + && base + size <= 0x1f000000) + region = 2; + if (region == 0) + grub_fatal ("Attempt to map out of regions"); + return (void *) (0xa0000000 | base); + } } void * @@ -86,14 +160,17 @@ grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)), volatile void *mem, grub_size_t size __attribute__ ((unused))) { - int i; - for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) - if (usage_win[i] && addr_win[i] - == (((grub_addr_t) mem | 0x20000000) - & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK)) - { - usage_win[i]--; - return; - } - grub_fatal ("Tried to unmap not mapped region"); + if (grub_bonito_type == GRUB_BONITO_2F) + { + int i; + for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) + if (usage_win[i] && addr_win[i] + == (((grub_addr_t) mem | 0x20000000) + & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK)) + { + usage_win[i]--; + return; + } + grub_fatal ("Tried to unmap not mapped region"); + } } diff --git a/grub-core/bus/usb/ehci.c b/grub-core/bus/usb/ehci.c index 593a55ac2..c0feefafe 100644 --- a/grub-core/bus/usb/ehci.c +++ b/grub-core/bus/usb/ehci.c @@ -1513,7 +1513,7 @@ grub_ehci_check_transfer (grub_usb_controller_t dev, struct grub_ehci *e = dev->data; struct grub_ehci_transfer_controller_data *cdata = transfer->controller_data; - grub_uint32_t token; + grub_uint32_t token, token_ftd; grub_dprintf ("ehci", "check_transfer: EHCI STATUS=%08x, cdata=%p, qh=%p\n", @@ -1541,13 +1541,18 @@ grub_ehci_check_transfer (grub_usb_controller_t dev, return grub_ehci_parse_notrun (dev, transfer, actual); token = grub_le_to_cpu32 (cdata->qh_virt->td_overlay.token); + /* If the transfer consist from only one TD, we should check */ + /* if the TD was really executed and deactivated - to prevent */ + /* false detection of transfer finish. */ + token_ftd = grub_le_to_cpu32 (cdata->td_first_virt->token); /* Detect QH halted */ if ((token & GRUB_EHCI_STATUS_HALTED) != 0) return grub_ehci_parse_halt (dev, transfer, actual); /* Detect QH not active - QH is not active and no next TD */ - if ((token & GRUB_EHCI_STATUS_ACTIVE) == 0) + if (token && ((token & GRUB_EHCI_STATUS_ACTIVE) == 0) + && ((token_ftd & GRUB_EHCI_STATUS_ACTIVE) == 0)) { /* It could be finish at all or short packet condition */ if ((grub_le_to_cpu32 (cdata->qh_virt->td_overlay.next_td) diff --git a/grub-core/bus/usb/ohci.c b/grub-core/bus/usb/ohci.c index 3b552d7fc..946a4ed7d 100644 --- a/grub-core/bus/usb/ohci.c +++ b/grub-core/bus/usb/ohci.c @@ -47,7 +47,7 @@ struct grub_ohci_hcca grub_uint32_t donehead; grub_uint8_t reserved[116]; -} __attribute__((packed)); +} GRUB_PACKED; /* OHCI General Transfer Descriptor */ struct grub_ohci_td @@ -64,7 +64,7 @@ struct grub_ohci_td * physical address in CPU endian */ grub_uint32_t tr_index; /* index of TD in transfer */ grub_uint8_t pad[8 - sizeof (volatile struct grub_ohci_td *)]; /* padding to 32 bytes */ -} __attribute__((packed)); +} GRUB_PACKED; /* OHCI Endpoint Descriptor. */ struct grub_ohci_ed @@ -73,7 +73,7 @@ struct grub_ohci_ed grub_uint32_t td_tail; grub_uint32_t td_head; grub_uint32_t next_ed; -} __attribute__((packed)); +} GRUB_PACKED; typedef volatile struct grub_ohci_td *grub_ohci_td_t; typedef volatile struct grub_ohci_ed *grub_ohci_ed_t; diff --git a/grub-core/bus/usb/serial/pl2303.c b/grub-core/bus/usb/serial/pl2303.c index 08095622a..d1945a2cb 100644 --- a/grub-core/bus/usb/serial/pl2303.c +++ b/grub-core/bus/usb/serial/pl2303.c @@ -55,7 +55,7 @@ struct grub_pl2303_config grub_uint8_t stop_bits; grub_uint8_t parity; grub_uint8_t word_len; -} __attribute__ ((packed)); +} GRUB_PACKED; static void real_config (struct grub_serial_port *port) diff --git a/grub-core/bus/usb/uhci.c b/grub-core/bus/usb/uhci.c index 978cb3f90..a95fdfe07 100644 --- a/grub-core/bus/usb/uhci.c +++ b/grub-core/bus/usb/uhci.c @@ -105,7 +105,7 @@ struct grub_uhci_qh /* Queue heads are aligned on 16 bytes, pad so a queue head is 16 bytes so we can store many in a 4K page. */ grub_uint8_t pad[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* UHCI Transfer Descriptor. */ struct grub_uhci_td @@ -129,7 +129,7 @@ struct grub_uhci_td /* 3 additional 32 bits words reserved for the Host Controller Driver. */ grub_uint32_t data[3]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef volatile struct grub_uhci_td *grub_uhci_td_t; typedef volatile struct grub_uhci_qh *grub_uhci_qh_t; diff --git a/grub-core/commands/acpi.c b/grub-core/commands/acpi.c index 14f639c6d..97c2cf282 100644 --- a/grub-core/commands/acpi.c +++ b/grub-core/commands/acpi.c @@ -227,7 +227,7 @@ grub_acpi_create_ebda (void) grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target); v2inebda = target; target += v2->length; - target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1); + target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1); v2 = 0; break; } @@ -246,7 +246,7 @@ grub_acpi_create_ebda (void) grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target); v1inebda = target; target += sizeof (struct grub_acpi_rsdp_v10); - target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1); + target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1); v1 = 0; break; } @@ -265,7 +265,7 @@ grub_acpi_create_ebda (void) grub_memcpy (target, v2, v2->length); v2inebda = target; target += v2->length; - target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1); + target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1); v2 = 0; break; } @@ -282,7 +282,7 @@ grub_acpi_create_ebda (void) grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10)); v1inebda = target; target += sizeof (struct grub_acpi_rsdp_v10); - target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1); + target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1); v1 = 0; break; } @@ -306,7 +306,7 @@ grub_acpi_create_ebda (void) *target = 0; grub_dprintf ("acpi", "Switching EBDA\n"); - (*((grub_uint16_t *) 0x40e)) = ((long)targetebda) >> 4; + (*((grub_uint16_t *) 0x40e)) = ((grub_addr_t) targetebda) >> 4; grub_dprintf ("acpi", "EBDA switched\n"); return GRUB_ERR_NONE; diff --git a/grub-core/commands/efi/acpi.c b/grub-core/commands/efi/acpi.c index 93a560d9c..74f8cd1a9 100644 --- a/grub-core/commands/efi/acpi.c +++ b/grub-core/commands/efi/acpi.c @@ -26,14 +26,14 @@ struct grub_acpi_rsdp_v10 * grub_machine_acpi_get_rsdpv1 (void) { unsigned i; - static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID; + static grub_efi_packed_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID; for (i = 0; i < grub_efi_system_table->num_table_entries; i++) { - grub_efi_guid_t *guid = + grub_efi_packed_guid_t *guid = &grub_efi_system_table->configuration_table[i].vendor_guid; - if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_guid_t))) + if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_packed_guid_t))) return (struct grub_acpi_rsdp_v10 *) grub_efi_system_table->configuration_table[i].vendor_table; } @@ -44,14 +44,14 @@ struct grub_acpi_rsdp_v20 * grub_machine_acpi_get_rsdpv2 (void) { unsigned i; - static grub_efi_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID; + static grub_efi_packed_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID; for (i = 0; i < grub_efi_system_table->num_table_entries; i++) { - grub_efi_guid_t *guid = + grub_efi_packed_guid_t *guid = &grub_efi_system_table->configuration_table[i].vendor_guid; - if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_guid_t))) + if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_packed_guid_t))) return (struct grub_acpi_rsdp_v20 *) grub_efi_system_table->configuration_table[i].vendor_table; } diff --git a/grub-core/commands/efi/loadbios.c b/grub-core/commands/efi/loadbios.c index 214adc3d2..132cadbc7 100644 --- a/grub-core/commands/efi/loadbios.c +++ b/grub-core/commands/efi/loadbios.c @@ -105,7 +105,7 @@ fake_bios_data (int use_rom) smbios = 0; for (i = 0; i < grub_efi_system_table->num_table_entries; i++) { - grub_efi_guid_t *guid = + grub_efi_packed_guid_t *guid = &grub_efi_system_table->configuration_table[i].vendor_guid; if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t))) diff --git a/grub-core/commands/efi/lsefi.c b/grub-core/commands/efi/lsefi.c index 8dffbdc30..d901c3892 100644 --- a/grub-core/commands/efi/lsefi.c +++ b/grub-core/commands/efi/lsefi.c @@ -95,7 +95,7 @@ grub_cmd_lsefi (grub_command_t cmd __attribute__ ((unused)), grub_efi_handle_t handle = handles[i]; grub_efi_status_t status; grub_efi_uintn_t num_protocols; - grub_efi_guid_t **protocols; + grub_efi_packed_guid_t **protocols; grub_efi_device_path_t *dp; grub_printf ("Handle %p\n", handle); diff --git a/grub-core/commands/efi/lsefisystab.c b/grub-core/commands/efi/lsefisystab.c index b2359253a..eda8c5ff3 100644 --- a/grub-core/commands/efi/lsefisystab.c +++ b/grub-core/commands/efi/lsefisystab.c @@ -71,7 +71,7 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)), grub_printf (", Version=%x\n", st->firmware_revision); - grub_printf ("%ld tables:\n", st->num_table_entries); + grub_printf ("%lld tables:\n", (long long) st->num_table_entries); t = st->configuration_table; for (i = 0; i < st->num_table_entries; i++) { diff --git a/grub-core/commands/efi/lssal.c b/grub-core/commands/efi/lssal.c index fa8005b88..5084ddd8b 100644 --- a/grub-core/commands/efi/lssal.c +++ b/grub-core/commands/efi/lssal.c @@ -32,7 +32,7 @@ disp_sal (void *table) { struct grub_efi_sal_system_table *t = table; void *desc; - grub_uint32_t len, l; + grub_uint32_t len, l, i; grub_printf ("SAL rev: %02x, signature: %x, len:%x\n", t->sal_rev, t->signature, t->total_table_len); @@ -44,7 +44,9 @@ disp_sal (void *table) desc = t->entries; len = t->total_table_len - sizeof (struct grub_efi_sal_system_table); - while (len > 0) + if (t->total_table_len <= sizeof (struct grub_efi_sal_system_table)) + return; + for (i = 0; i < t->entry_count; i++) { switch (*(grub_uint8_t *) desc) { @@ -123,6 +125,8 @@ disp_sal (void *table) return; } desc = (grub_uint8_t *)desc + l; + if (len <= l) + return; len -= l; } } @@ -135,12 +139,12 @@ grub_cmd_lssal (struct grub_command *cmd __attribute__ ((unused)), const grub_efi_system_table_t *st = grub_efi_system_table; grub_efi_configuration_table_t *t = st->configuration_table; unsigned int i; - grub_efi_guid_t guid = GRUB_EFI_SAL_TABLE_GUID; + grub_efi_packed_guid_t guid = GRUB_EFI_SAL_TABLE_GUID; for (i = 0; i < st->num_table_entries; i++) { if (grub_memcmp (&guid, &t->vendor_guid, - sizeof (grub_efi_guid_t)) == 0) + sizeof (grub_efi_packed_guid_t)) == 0) { disp_sal (t->vendor_table); return GRUB_ERR_NONE; diff --git a/grub-core/commands/file.c b/grub-core/commands/file.c new file mode 100644 index 000000000..474b3fd21 --- /dev/null +++ b/grub-core/commands/file.c @@ -0,0 +1,641 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = { + {"is-i386-xen-pae-domu", 0, 0, + N_("Check if FILE can be booted as i386 PAE xen unprivilegied guest"), + 0, 0}, + {"is-x86_64-xen-domu", 0, 0, + N_("Check if FILE can be booted as x86_64 xen unprivilegied guest"), 0, 0}, + {"is-x86-xen-dom0", 0, 0, + N_("Check if FILE can be used as xen x86 privilegied guest kernel"), 0, 0}, + {"is-x86-multiboot", 0, 0, + N_("Check if FILE can be used as x86 multiboot kernel"), 0, 0}, + {"is-x86-multiboot2", 0, 0, + N_("Check if FILE can be used as x86 multiboot2 kernel"), 0, 0}, + {"is-arm-linux", 0, 0, + N_("Check if FILE is ARM linux"), 0, 0}, + {"is-ia64-linux", 0, 0, + N_("Check if FILE is IA64 linux"), 0, 0}, + {"is-mips-linux", 0, 0, + N_("Check if FILE is MIPS linux"), 0, 0}, + {"is-mipsel-linux", 0, 0, + N_("Check if FILE is MIPSEL linux"), 0, 0}, + {"is-sparc64-linux", 0, 0, + N_("Check if FILE is SPARC64 linux"), 0, 0}, + {"is-powerpc-linux", 0, 0, + N_("Check if FILE is POWERPC linux"), 0, 0}, + {"is-x86-linux", 0, 0, + N_("Check if FILE is x86 linux"), 0, 0}, + {"is-x86-linux32", 0, 0, + N_("Check if FILE is x86 linux supporting 32-bit protocol"), 0, 0}, + {"is-x86-kfreebsd", 0, 0, + N_("Check if FILE is x86 kfreebsd"), 0, 0}, + {"is-i386-kfreebsd", 0, 0, + N_("Check if FILE is i386 kfreebsd"), 0, 0}, + {"is-x86_64-kfreebsd", 0, 0, + N_("Check if FILE is x86_64 kfreebsd"), 0, 0}, + + {"is-x86-knetbsd", 0, 0, + N_("Check if FILE is x86 knetbsd"), 0, 0}, + {"is-i386-knetbsd", 0, 0, + N_("Check if FILE is i386 knetbsd"), 0, 0}, + {"is-x86_64-knetbsd", 0, 0, + N_("Check if FILE is x86_64 knetbsd"), 0, 0}, + + {"is-i386-efi", 0, 0, + N_("Check if FILE is i386 EFI file"), 0, 0}, + {"is-x86_64-efi", 0, 0, + N_("Check if FILE is x86-64 EFI file"), 0, 0}, + {"is-ia64-efi", 0, 0, + N_("Check if FILE is IA64 EFI file"), 0, 0}, + {"is-arm-efi", 0, 0, + N_("Check if FILE is ARM EFI file"), 0, 0}, + {"is-hibernated-hiberfil", 0, 0, + N_("Check if FILE is hiberfil.sys in hibernated state"), 0, 0}, + {"is-x86_64-xnu", 0, 0, + N_("Check if FILE is x86_64 xnu (Mac OS X kernel)"), 0, 0}, + {"is-i386-xnu", 0, 0, + N_("Check if FILE is i386 xnu (Mac OS X kernel)"), 0, 0}, + {"is-xnu-hibr", 0, 0, + N_("Check if FILE is xnu (Mac OS X kernel) hibernated image"), 0, 0}, + {"is-x86-bios-bootsector", 0, 0, + N_("Check if FILE is BIOS bootsector"), 0, 0}, + {0, 0, 0, 0, 0, 0} +}; + +enum +{ + IS_PAE_DOMU, + IS_64_DOMU, + IS_DOM0, + IS_MULTIBOOT, + IS_MULTIBOOT2, + IS_ARM_LINUX, + IS_IA64_LINUX, + IS_MIPS_LINUX, + IS_MIPSEL_LINUX, + IS_SPARC64_LINUX, + IS_POWERPC_LINUX, + IS_X86_LINUX, + IS_X86_LINUX32, + IS_X86_KFREEBSD, + IS_X86_KFREEBSD32, + IS_X86_KFREEBSD64, + IS_X86_KNETBSD, + IS_X86_KNETBSD32, + IS_X86_KNETBSD64, + IS_32_EFI, + IS_64_EFI, + IS_IA_EFI, + IS_ARM_EFI, + IS_HIBERNATED, + IS_XNU64, + IS_XNU32, + IS_XNU_HIBR, + IS_BIOS_BOOTSECTOR, + OPT_TYPE_MIN = IS_PAE_DOMU, + OPT_TYPE_MAX = IS_BIOS_BOOTSECTOR +}; + + +static grub_err_t +grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args) +{ + grub_file_t file = 0; + grub_elf_t elf = 0; + grub_err_t err; + int type = -1, i; + int ret = 0; + grub_macho_t macho = 0; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + for (i = OPT_TYPE_MIN; i <= OPT_TYPE_MAX; i++) + if (ctxt->state[i].set) + { + if (type == -1) + { + type = i; + continue; + } + return grub_error (GRUB_ERR_BAD_ARGUMENT, "multiple types specified"); + } + if (type == -1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no type specified"); + + file = grub_file_open (args[0]); + if (!file) + return grub_errno; + switch (type) + { + case IS_BIOS_BOOTSECTOR: + { + grub_uint16_t sig; + if (grub_file_size (file) != 512) + break; + if (grub_file_seek (file, 510) == (grub_size_t) -1) + break; + if (grub_file_read (file, &sig, 2) != 2) + break; + if (sig != grub_cpu_to_le16_compile_time (0xaa55)) + break; + ret = 1; + break; + } + case IS_IA64_LINUX: + { + Elf64_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_ident[EI_CLASS] != ELFCLASS64 + || ehdr.e_ident[EI_DATA] != ELFDATA2LSB + || ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_IA_64)) + break; + + ret = 1; + + break; + } + + case IS_SPARC64_LINUX: + { + Elf64_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_ident[EI_CLASS] != ELFCLASS64 + || ehdr.e_ident[EI_DATA] != ELFDATA2MSB) + break; + + if (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_SPARCV9) + || ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC)) + break; + + ret = 1; + + break; + } + + case IS_POWERPC_LINUX: + { + Elf32_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB + || (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_PPC) + && ehdr.e_machine != + grub_cpu_to_le16_compile_time (EM_PPC64))) + break; + + if (ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC) + && ehdr.e_type != grub_cpu_to_be16_compile_time (ET_DYN)) + break; + + ret = 1; + + break; + } + + case IS_MIPS_LINUX: + { + Elf32_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB + || ehdr.e_machine != grub_cpu_to_be16_compile_time (EM_MIPS) + || ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC)) + break; + + ret = 1; + + break; + } + + case IS_X86_KNETBSD: + case IS_X86_KNETBSD32: + case IS_X86_KNETBSD64: + { + int is32, is64; + + elf = grub_elf_file (file, file->name); + + if (elf->ehdr.ehdr32.e_type != grub_cpu_to_le16_compile_time (ET_EXEC) + || elf->ehdr.ehdr32.e_ident[EI_DATA] != ELFDATA2LSB) + break; + + is32 = grub_elf_is_elf32 (elf); + is64 = grub_elf_is_elf64 (elf); + if (!is32 && !is64) + break; + if (!is32 && type == IS_X86_KNETBSD32) + break; + if (!is64 && type == IS_X86_KNETBSD64) + break; + if (is64) + ret = grub_file_check_netbsd64 (elf); + if (is32) + ret = grub_file_check_netbsd32 (elf); + break; + } + + case IS_X86_KFREEBSD: + case IS_X86_KFREEBSD32: + case IS_X86_KFREEBSD64: + { + Elf32_Ehdr ehdr; + int is32, is64; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_type != grub_cpu_to_le16_compile_time (ET_EXEC) + || ehdr.e_ident[EI_DATA] != ELFDATA2LSB) + break; + + if (ehdr.e_ident[EI_OSABI] != ELFOSABI_FREEBSD) + break; + + is32 = (ehdr.e_machine == grub_cpu_to_le16_compile_time (EM_386) + && ehdr.e_ident[EI_CLASS] == ELFCLASS32); + is64 = (ehdr.e_machine == grub_cpu_to_le16_compile_time (EM_X86_64) + && ehdr.e_ident[EI_CLASS] == ELFCLASS64); + if (!is32 && !is64) + break; + if (!is32 && (type == IS_X86_KFREEBSD32 || type == IS_X86_KNETBSD32)) + break; + if (!is64 && (type == IS_X86_KFREEBSD64 || type == IS_X86_KNETBSD64)) + break; + ret = 1; + + break; + } + + + case IS_MIPSEL_LINUX: + { + Elf32_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_MIPS) + || ehdr.e_type != grub_cpu_to_le16_compile_time (ET_EXEC)) + break; + + ret = 1; + + break; + } + case IS_ARM_LINUX: + { + grub_uint32_t sig; + if (grub_file_seek (file, 0x24) == (grub_size_t) -1) + break; + if (grub_file_read (file, &sig, 4) != 4) + break; + if (sig != grub_cpu_to_le32_compile_time (0x016f2818)) + break; + ret = 1; + break; + } + case IS_PAE_DOMU ... IS_DOM0: + { + struct grub_xen_file_info xen_inf; + elf = grub_xen_file (file); + if (!elf) + break; + err = grub_xen_get_info (elf, &xen_inf); + if (err) + break; + /* Unfortuntely no way to check if kernel supports dom0. */ + if (type == IS_DOM0) + ret = 1; + if (type == IS_PAE_DOMU) + ret = (xen_inf.arch == GRUB_XEN_FILE_I386_PAE + || xen_inf.arch == GRUB_XEN_FILE_I386_PAE_BIMODE); + if (type == IS_64_DOMU) + ret = (xen_inf.arch == GRUB_XEN_FILE_X86_64); + break; + } + case IS_MULTIBOOT: + case IS_MULTIBOOT2: + { + grub_uint32_t *buffer; + grub_ssize_t len; + grub_size_t search_size; + grub_uint32_t *header; + grub_uint32_t magic; + grub_size_t step; + + if (type == IS_MULTIBOOT2) + { + search_size = 32768; + magic = grub_cpu_to_le32_compile_time (0xe85250d6); + step = 2; + } + else + { + search_size = 8192; + magic = grub_cpu_to_le32_compile_time (0x1BADB002); + step = 1; + } + + buffer = grub_malloc (search_size); + if (!buffer) + break; + + len = grub_file_read (file, buffer, search_size); + if (len < 32) + { + grub_free (buffer); + break; + } + + /* Look for the multiboot header in the buffer. The header should + be at least 12 bytes and aligned on a 4-byte boundary. */ + for (header = buffer; + ((char *) header <= + (char *) buffer + len - (type == IS_MULTIBOOT2 ? 16 : 12)) + || (header = 0); header += step) + { + if (header[0] == magic + && !(grub_le_to_cpu32 (header[0]) + + grub_le_to_cpu32 (header[1]) + + grub_le_to_cpu32 (header[2]) + + (type == IS_MULTIBOOT2 + ? grub_le_to_cpu32 (header[3]) : 0))) + break; + } + + if (header != 0) + ret = 1; + grub_free (buffer); + break; + } + case IS_X86_LINUX32: + case IS_X86_LINUX: + { + struct linux_kernel_header lh; + if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) + break; + if (lh.boot_flag != grub_cpu_to_le16_compile_time (0xaa55)) + break; + + if (lh.setup_sects > GRUB_LINUX_MAX_SETUP_SECTS) + break; + + /* FIXME: some really old kernels (< 1.3.73) will fail this. */ + if (lh.header != + grub_cpu_to_le32_compile_time (GRUB_LINUX_MAGIC_SIGNATURE) + || grub_le_to_cpu16 (lh.version) < 0x0200) + break; + + if (type == IS_X86_LINUX) + { + ret = 1; + break; + } + + /* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and + still not support 32-bit boot. */ + if (lh.header != + grub_cpu_to_le32_compile_time (GRUB_LINUX_MAGIC_SIGNATURE) + || grub_le_to_cpu16 (lh.version) < 0x0203) + break; + + if (!(lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) + break; + ret = 1; + break; + } + case IS_HIBERNATED: + { + grub_uint8_t hibr_file_magic[4]; + if (grub_file_read (file, &hibr_file_magic, sizeof (hibr_file_magic)) + != sizeof (hibr_file_magic)) + break; + if (grub_memcmp ("hibr", hibr_file_magic, sizeof (hibr_file_magic)) == + 0 + || grub_memcmp ("HIBR", hibr_file_magic, + sizeof (hibr_file_magic)) == 0) + ret = 1; + break; + } + case IS_XNU64: + case IS_XNU32: + { + macho = grub_macho_open (args[0], (type == IS_XNU64)); + if (!macho) + break; + /* FIXME: more checks? */ + ret = 1; + break; + } + case IS_XNU_HIBR: + { + struct grub_xnu_hibernate_header hibhead; + if (grub_file_read (file, &hibhead, sizeof (hibhead)) + != sizeof (hibhead)) + break; + if (hibhead.magic != + grub_cpu_to_le32_compile_time (GRUB_XNU_HIBERNATE_MAGIC)) + break; + ret = 1; + break; + } + case IS_32_EFI: + case IS_64_EFI: + case IS_IA_EFI: + case IS_ARM_EFI: + { + char signature[4]; + grub_uint32_t pe_offset; + struct grub_pe32_coff_header coff_head; + + if (grub_file_read (file, signature, 2) != 2) + break; + if (signature[0] != 'M' || signature[1] != 'Z') + break; + if ((grub_ssize_t) grub_file_seek (file, 0x3c) == -1) + break; + if (grub_file_read (file, &pe_offset, 4) != 4) + break; + if ((grub_ssize_t) grub_file_seek (file, grub_le_to_cpu32 (pe_offset)) + == -1) + break; + if (grub_file_read (file, signature, 4) != 4) + break; + if (signature[0] != 'P' || signature[1] != 'E' + || signature[2] != '\0' || signature[3] != '\0') + break; + + if (grub_file_read (file, &coff_head, sizeof (coff_head)) + != sizeof (coff_head)) + break; + if (type == IS_32_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_I386)) + break; + if (type == IS_64_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_X86_64)) + break; + if (type == IS_IA_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_IA64)) + break; + if (type == IS_ARM_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARMTHUMB_MIXED)) + break; + if (type == IS_64_EFI || type == IS_64_EFI) + { + struct grub_pe64_optional_header o64; + if (grub_file_read (file, &o64, sizeof (o64)) != sizeof (o64)) + break; + if (o64.magic != + grub_cpu_to_le16_compile_time (GRUB_PE32_PE64_MAGIC)) + break; + if (o64.subsystem != + grub_cpu_to_le16_compile_time + (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION)) + break; + ret = 1; + break; + } + if (type == IS_32_EFI || type == IS_ARM_EFI) + { + struct grub_pe32_optional_header o32; + if (grub_file_read (file, &o32, sizeof (o32)) != sizeof (o32)) + break; + if (o32.magic != + grub_cpu_to_le16_compile_time (GRUB_PE32_PE32_MAGIC)) + break; + if (o32.subsystem != + grub_cpu_to_le16_compile_time + (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION)) + break; + ret = 1; + break; + } + break; + } + } + + if (elf) + grub_elf_close (elf); + else if (macho) + grub_macho_close (macho); + else if (file) + grub_file_close (file); + + if (!ret && (grub_errno == GRUB_ERR_BAD_OS || grub_errno == GRUB_ERR_NONE)) + /* TRANSLATORS: it's a standalone boolean value, + opposite of "true". */ + grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); + return grub_errno; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(file) +{ + cmd = grub_register_extcmd ("file", grub_cmd_file, 0, + N_("OPTIONS FILE"), + N_("Check if FILE is of specified type."), + options); +} + +GRUB_MOD_FINI(file) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/file32.c b/grub-core/commands/file32.c new file mode 100644 index 000000000..0861c458d --- /dev/null +++ b/grub-core/commands/file32.c @@ -0,0 +1,5 @@ +#define GRUB_TARGET_WORDSIZE 32 +#define XX 32 +#define ehdrXX ehdr32 +#define grub_file_check_netbsdXX grub_file_check_netbsd32 +#include "fileXX.c" diff --git a/grub-core/commands/file64.c b/grub-core/commands/file64.c new file mode 100644 index 000000000..90890d481 --- /dev/null +++ b/grub-core/commands/file64.c @@ -0,0 +1,5 @@ +#define GRUB_TARGET_WORDSIZE 64 +#define XX 64 +#define ehdrXX ehdr64 +#define grub_file_check_netbsdXX grub_file_check_netbsd64 +#include "fileXX.c" diff --git a/grub-core/commands/fileXX.c b/grub-core/commands/fileXX.c new file mode 100644 index 000000000..c9857ff67 --- /dev/null +++ b/grub-core/commands/fileXX.c @@ -0,0 +1,70 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#pragma GCC diagnostic ignored "-Wcast-align" + +int +grub_file_check_netbsdXX (grub_elf_t elf) +{ + Elf_Shdr *s, *s0; + + grub_size_t shnum = elf->ehdr.ehdrXX.e_shnum; + grub_size_t shentsize = elf->ehdr.ehdrXX.e_shentsize; + grub_size_t shsize = shnum * shentsize; + grub_off_t stroff; + + if (!shnum || !shentsize) + return 0; + + s0 = grub_malloc (shsize); + if (!s0) + return 0; + + if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1) + return 0; + + if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize) + return 0; + + s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize); + stroff = s->sh_offset; + + for (s = s0; s < (Elf_Shdr *) ((char *) s0 + shnum * shentsize); + s = (Elf_Shdr *) ((char *) s + shentsize)) + { + char name[sizeof(".note.netbsd.ident")]; + grub_memset (name, 0, sizeof (name)); + if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1) + return grub_errno; + + if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name)) + { + if (grub_errno) + return grub_errno; + continue; + } + if (grub_memcmp (name, ".note.netbsd.ident", + sizeof(".note.netbsd.ident")) != 0) + continue; + return 1; + } + return 0; +} diff --git a/grub-core/commands/i386/cpuid.c b/grub-core/commands/i386/cpuid.c index af753590d..42b984154 100644 --- a/grub-core/commands/i386/cpuid.c +++ b/grub-core/commands/i386/cpuid.c @@ -34,19 +34,38 @@ static const struct grub_arg_option options[] = /* TRANSLATORS: "(default)" at the end means that this option is used if no argument is specified. */ {"long-mode", 'l', 0, N_("Check if CPU supports 64-bit (long) mode (default)."), 0, 0}, + {"pae", 'p', 0, N_("Check if CPU supports Physical Address Extension."), 0, 0}, {0, 0, 0, 0, 0, 0} }; -#define bit_LM (1 << 29) +enum + { + MODE_LM = 0, + MODE_PAE = 1 + }; -unsigned char grub_cpuid_has_longmode = 0; +enum + { + bit_PAE = (1 << 6), + }; +enum + { + bit_LM = (1 << 29) + }; + +unsigned char grub_cpuid_has_longmode = 0, grub_cpuid_has_pae = 0; static grub_err_t -grub_cmd_cpuid (grub_extcmd_context_t ctxt __attribute__ ((unused)), +grub_cmd_cpuid (grub_extcmd_context_t ctxt, int argc __attribute__ ((unused)), char **args __attribute__ ((unused))) { - return grub_cpuid_has_longmode ? GRUB_ERR_NONE + int val = 0; + if (ctxt->state[MODE_PAE].set) + val = grub_cpuid_has_pae; + else + val = grub_cpuid_has_longmode; + return val ? GRUB_ERR_NONE /* TRANSLATORS: it's a standalone boolean value, opposite of "true". */ : grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); @@ -59,6 +78,7 @@ GRUB_MOD_INIT(cpuid) #ifdef __x86_64__ /* grub-emu */ grub_cpuid_has_longmode = 1; + grub_cpuid_has_pae = 1; #else unsigned int eax, ebx, ecx, edx; unsigned int max_level; @@ -79,6 +99,12 @@ GRUB_MOD_INIT(cpuid) if (max_level == 0) goto done; + if (max_level >= 1) + { + grub_cpuid (1, eax, ebx, ecx, edx); + grub_cpuid_has_pae = !!(edx & bit_PAE); + } + grub_cpuid (0x80000000, eax, ebx, ecx, edx); ext_level = eax; if (ext_level < 0x80000000) diff --git a/grub-core/commands/i386/nthibr.c b/grub-core/commands/i386/nthibr.c deleted file mode 100644 index 92ce629d9..000000000 --- a/grub-core/commands/i386/nthibr.c +++ /dev/null @@ -1,79 +0,0 @@ -/* nthibr.c - tests whether an MS Windows system partition is hibernated */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2013 Peter Lustig - * Copyright (C) 2013 Free Software Foundation, Inc. - * - * GRUB is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GRUB is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GRUB. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -GRUB_MOD_LICENSE ("GPLv3+"); - -static grub_err_t -grub_cmd_nthibr (grub_command_t cmd __attribute__ ((unused)), - int argc, char **args) -{ - grub_uint8_t hibr_file_magic[4]; - grub_file_t hibr_file = 0; - - if (argc != 1) - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); - - hibr_file = grub_file_open (args[0]); - if (!hibr_file) - return grub_errno; - - /* Try to read magic number of 'hiberfil.sys' */ - if (grub_file_read (hibr_file, hibr_file_magic, - sizeof (hibr_file_magic)) - != (grub_ssize_t) sizeof (hibr_file_magic)) - { - if (!grub_errno) - grub_error (GRUB_ERR_TEST_FAILURE, "false"); - goto exit; - } - - if (!(grub_memcmp ("hibr", hibr_file_magic, sizeof (hibr_file_magic)) == 0 - || grub_memcmp ("HIBR", hibr_file_magic, sizeof (hibr_file_magic)) == 0)) - grub_error (GRUB_ERR_TEST_FAILURE, "false"); - - exit: - grub_file_close (hibr_file); - - return grub_errno; -} - -static grub_command_t cmd; - -GRUB_MOD_INIT (check_nt_hiberfil) -{ - cmd = grub_register_command ("check_nt_hiberfil", grub_cmd_nthibr, - N_("FILE"), - N_("Test whether a hiberfil.sys is " - "in hibernated state.")); -} - -GRUB_MOD_FINI (check_nt_hiberfil) -{ - grub_unregister_command (cmd); -} diff --git a/grub-core/commands/i386/pc/drivemap.c b/grub-core/commands/i386/pc/drivemap.c index 7fbf8de87..7f7f2d41c 100644 --- a/grub-core/commands/i386/pc/drivemap.c +++ b/grub-core/commands/i386/pc/drivemap.c @@ -74,7 +74,7 @@ typedef struct drivemap_node grub_uint8_t redirto; } drivemap_node_t; -typedef struct __attribute__ ((packed)) int13map_node +typedef struct GRUB_PACKED int13map_node { grub_uint8_t disknum; grub_uint8_t mapto; diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c index f429a5d1b..e42a9d83e 100644 --- a/grub-core/commands/legacycfg.c +++ b/grub-core/commands/legacycfg.c @@ -314,7 +314,11 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)), /* First try Linux. */ if (kernel_type == GUESS_IT || kernel_type == LINUX) { +#ifdef GRUB_MACHINE_PCBIOS cmd = grub_command_find ("linux16"); +#else + cmd = grub_command_find ("linux"); +#endif if (cmd) { if (!(cmd->func) (cmd, cutargc, cutargs)) @@ -469,10 +473,19 @@ grub_cmd_legacy_initrd (struct grub_command *mycmd __attribute__ ((unused)), if (kernel_type == LINUX) { +#ifdef GRUB_MACHINE_PCBIOS cmd = grub_command_find ("initrd16"); +#else + cmd = grub_command_find ("initrd"); +#endif if (!cmd) return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"), - "initrd16"); +#ifdef GRUB_MACHINE_PCBIOS + "initrd16" +#else + "initrd" +#endif + ); return cmd->func (cmd, argc, args); } diff --git a/grub-core/commands/macbless.c b/grub-core/commands/macbless.c new file mode 100644 index 000000000..38ca353a2 --- /dev/null +++ b/grub-core/commands/macbless.c @@ -0,0 +1,236 @@ +/* hfspbless.c - set the hfs+ boot directory. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2007,2008,2009,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct find_node_context +{ + grub_uint64_t inode_found; + char *dirname; + enum + { NONE, FILE, DIR } found; +}; + +static int +find_inode (const char *filename, + const struct grub_dirhook_info *info, void *data) +{ + struct find_node_context *ctx = data; + if (!info->inodeset) + return 0; + + if ((grub_strcmp (ctx->dirname, filename) == 0 + || (info->case_insensitive + && grub_strcasecmp (ctx->dirname, filename) == 0))) + { + ctx->inode_found = info->inode; + ctx->found = info->dir ? DIR : FILE; + } + return 0; +} + +grub_err_t +grub_mac_bless_inode (grub_device_t dev, grub_uint64_t inode, int is_dir, + int intel) +{ + grub_err_t err; + union + { + struct grub_hfs_sblock hfs; + struct grub_hfsplus_volheader hfsplus; + } volheader; + grub_disk_addr_t embedded_offset; + + if (intel && is_dir) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "can't bless a directory for mactel"); + if (!intel && !is_dir) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "can't bless a file for mac PPC"); + + /* Read the bootblock. */ + err = grub_disk_read (dev->disk, GRUB_HFSPLUS_SBLOCK, 0, sizeof (volheader), + (char *) &volheader); + if (err) + return err; + + embedded_offset = 0; + if (grub_be_to_cpu16 (volheader.hfs.magic) == GRUB_HFS_MAGIC) + { + int extent_start; + int ablk_size; + int ablk_start; + + /* See if there's an embedded HFS+ filesystem. */ + if (grub_be_to_cpu16 (volheader.hfs.embed_sig) != GRUB_HFSPLUS_MAGIC) + { + if (intel) + volheader.hfs.intel_bootfile = grub_be_to_cpu32 (inode); + else + volheader.hfs.ppc_bootdir = grub_be_to_cpu32 (inode); + return GRUB_ERR_NONE; + } + + /* Calculate the offset needed to translate HFS+ sector numbers. */ + extent_start = + grub_be_to_cpu16 (volheader.hfs.embed_extent.first_block); + ablk_size = grub_be_to_cpu32 (volheader.hfs.blksz); + ablk_start = grub_be_to_cpu16 (volheader.hfs.first_block); + embedded_offset = (ablk_start + + extent_start + * (ablk_size >> GRUB_DISK_SECTOR_BITS)); + + err = + grub_disk_read (dev->disk, embedded_offset + GRUB_HFSPLUS_SBLOCK, 0, + sizeof (volheader), (char *) &volheader); + if (err) + return err; + } + + if ((grub_be_to_cpu16 (volheader.hfsplus.magic) != GRUB_HFSPLUS_MAGIC) + && (grub_be_to_cpu16 (volheader.hfsplus.magic) != GRUB_HFSPLUSX_MAGIC)) + return grub_error (GRUB_ERR_BAD_FS, "not a HFS+ filesystem"); + if (intel) + volheader.hfsplus.intel_bootfile = grub_be_to_cpu32 (inode); + else + volheader.hfsplus.ppc_bootdir = grub_be_to_cpu32 (inode); + + return grub_disk_write (dev->disk, embedded_offset + GRUB_HFSPLUS_SBLOCK, 0, + sizeof (volheader), (char *) &volheader); +} + +grub_err_t +grub_mac_bless_file (grub_device_t dev, const char *path_in, int intel) +{ + grub_fs_t fs; + + char *path, *tail; + struct find_node_context ctx; + + fs = grub_fs_probe (dev); + if (!fs || (grub_strcmp (fs->name, "hfsplus") != 0 + && grub_strcmp (fs->name, "hfs") != 0)) + return grub_error (GRUB_ERR_BAD_FS, "no suitable FS found"); + + path = grub_strdup (path_in); + if (!path) + return grub_errno; + + tail = path + grub_strlen (path) - 1; + + /* Remove trailing '/'. */ + while (tail != path && *tail == '/') + *(tail--) = 0; + + tail = grub_strrchr (path, '/'); + ctx.found = 0; + + if (tail) + { + *tail = 0; + ctx.dirname = tail + 1; + + (fs->dir) (dev, *path == 0 ? "/" : path, find_inode, &ctx); + } + else + { + ctx.dirname = path + 1; + (fs->dir) (dev, "/", find_inode, &ctx); + } + if (!ctx.found) + { + grub_free (path); + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), + path_in); + } + grub_free (path); + + return grub_mac_bless_inode (dev, ctx.inode_found, (ctx.found == DIR), + intel); +} + +static grub_err_t +grub_cmd_macbless (grub_command_t cmd, int argc, char **args) +{ + char *device_name; + char *path = 0; + grub_device_t dev; + grub_err_t err; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + device_name = grub_file_get_device_name (args[0]); + dev = grub_device_open (device_name); + + path = grub_strchr (args[0], ')'); + if (!path) + path = args[0]; + else + path = path + 1; + + if (!path || *path == 0 || !device_name) + { + if (dev) + grub_device_close (dev); + + grub_free (device_name); + grub_free (path); + + return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument"); + } + + err = grub_mac_bless_file (dev, path, cmd->name[3] == 't'); + + grub_device_close (dev); + grub_free (device_name); + return err; +} + +static grub_command_t cmd, cmd_ppc; + +GRUB_MOD_INIT(macbless) +{ + cmd = grub_register_command ("mactelbless", grub_cmd_macbless, + N_("FILE"), + N_ + ("Bless FILE of HFS or HFS+ partition for intel macs.")); + cmd_ppc = + grub_register_command ("macppcbless", grub_cmd_macbless, N_("DIR"), + N_ + ("Bless DIR of HFS or HFS+ partition for PPC macs.")); +} + +GRUB_MOD_FINI(macbless) +{ + grub_unregister_command (cmd); + grub_unregister_command (cmd_ppc); +} diff --git a/grub-core/commands/minicmd.c b/grub-core/commands/minicmd.c index 344ea7c18..a3a118241 100644 --- a/grub-core/commands/minicmd.c +++ b/grub-core/commands/minicmd.c @@ -101,12 +101,18 @@ grub_mini_cmd_dump (struct grub_command *cmd __attribute__ ((unused)), if (argc == 0) return grub_error (GRUB_ERR_BAD_ARGUMENT, "no address specified"); - addr = (grub_uint8_t *) grub_strtoul (argv[0], 0, 0); +#if GRUB_CPU_SIZEOF_VOID_P == GRUB_CPU_SIZEOF_LONG +#define grub_strtoaddr grub_strtoul +#else +#define grub_strtoaddr grub_strtoull +#endif + + addr = (grub_uint8_t *) grub_strtoaddr (argv[0], 0, 0); if (grub_errno) return grub_errno; if (argc > 1) - size = (grub_size_t) grub_strtoul (argv[1], 0, 0); + size = (grub_size_t) grub_strtoaddr (argv[1], 0, 0); while (size--) { diff --git a/grub-core/commands/syslinuxcfg.c b/grub-core/commands/syslinuxcfg.c new file mode 100644 index 000000000..da753e2cc --- /dev/null +++ b/grub-core/commands/syslinuxcfg.c @@ -0,0 +1,214 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Helper for syslinux_file. */ +static grub_err_t +syslinux_file_getline (char **line, int cont __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + *line = 0; + return GRUB_ERR_NONE; +} + +static const struct grub_arg_option options[] = + { + {"root", 'r', 0, + N_("root directory of the syslinux disk (default /)."), + N_("DIR"), ARG_TYPE_STRING}, + {"cwd", 'c', 0, + N_("home directory of the syslinux config (default directory of configfile)."), + N_("DIR"), ARG_TYPE_STRING}, + {"isolinux", 'i', 0, N_("assume isolinux."), 0, 0}, + {"pxelinux", 'p', 0, N_("assume pxelinux."), 0, 0}, + {"syslinux", 's', 0, N_("assume syslinux."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +enum + { + OPTION_ROOT, + OPTION_CWD, + OPTION_ISOLINUX, + OPTION_PXELINUX, + OPTION_SYSLINUX + }; + +static grub_err_t +syslinux_file (grub_extcmd_context_t ctxt, const char *filename) +{ + char *result; + const char *root = ctxt->state[OPTION_ROOT].set ? ctxt->state[OPTION_ROOT].arg : "/"; + const char *cwd = ctxt->state[OPTION_CWD].set ? ctxt->state[OPTION_CWD].arg : NULL; + grub_syslinux_flavour_t flav = GRUB_SYSLINUX_UNKNOWN; + char *cwdf = NULL; + grub_menu_t menu; + + if (ctxt->state[OPTION_ISOLINUX].set) + flav = GRUB_SYSLINUX_ISOLINUX; + if (ctxt->state[OPTION_PXELINUX].set) + flav = GRUB_SYSLINUX_PXELINUX; + if (ctxt->state[OPTION_SYSLINUX].set) + flav = GRUB_SYSLINUX_SYSLINUX; + + if (!cwd) + { + char *p; + cwdf = grub_strdup (filename); + if (!cwdf) + return grub_errno; + p = grub_strrchr (cwdf, '/'); + if (!p) + { + grub_free (cwdf); + cwd = "/"; + cwdf = NULL; + } + else + { + *p = '\0'; + cwd = cwdf; + } + } + + grub_dprintf ("syslinux", + "transforming syslinux config %s, root = %s, cwd = %s\n", + filename, root, cwd); + + result = grub_syslinux_config_file (root, root, cwd, cwd, filename, flav); + if (!result) + return grub_errno; + + grub_dprintf ("syslinux", "syslinux config transformed\n"); + + menu = grub_env_get_menu (); + if (! menu) + { + menu = grub_zalloc (sizeof (*menu)); + if (! menu) + return grub_errno; + + grub_env_set_menu (menu); + } + + grub_normal_parse_line (result, syslinux_file_getline, NULL); + grub_print_error (); + grub_free (result); + grub_free (cwdf); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_syslinux_source (grub_extcmd_context_t ctxt, + int argc, char **args) +{ + int new_env, extractor; + grub_err_t ret; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + extractor = (ctxt->extcmd->cmd->name[0] == 'e'); + new_env = (ctxt->extcmd->cmd->name[extractor ? (sizeof ("extract_syslinux_entries_") - 1) + : (sizeof ("syslinux_") - 1)] == 'c'); + + if (new_env) + grub_cls (); + + if (new_env && !extractor) + grub_env_context_open (); + if (extractor) + grub_env_extractor_open (!new_env); + + ret = syslinux_file (ctxt, args[0]); + + if (new_env) + { + grub_menu_t menu; + menu = grub_env_get_menu (); + if (menu && menu->size) + grub_show_menu (menu, 1, 0); + if (!extractor) + grub_env_context_close (); + } + if (extractor) + grub_env_extractor_close (!new_env); + + return ret; +} + + +static grub_extcmd_t cmd_source, cmd_configfile; +static grub_extcmd_t cmd_source_extract, cmd_configfile_extract; + +GRUB_MOD_INIT(syslinuxcfg) +{ + cmd_source + = grub_register_extcmd ("syslinux_source", + grub_cmd_syslinux_source, 0, + N_("FILE"), + /* TRANSLATORS: "syslinux config" means + "config as used by syslinux". */ + N_("Parse syslinux config in same context"), + options); + cmd_configfile + = grub_register_extcmd ("syslinux_configfile", + grub_cmd_syslinux_source, 0, + N_("FILE"), + N_("Parse syslinux config in new context"), + options); + cmd_source_extract + = grub_register_extcmd ("extract_syslinux_entries_source", + grub_cmd_syslinux_source, 0, + N_("FILE"), + N_("Parse syslinux config in same context taking only menu entries"), + options); + cmd_configfile_extract + = grub_register_extcmd ("extract_syslinux_entries_configfile", + grub_cmd_syslinux_source, 0, + N_("FILE"), + N_("Parse syslinux config in new context taking only menu entries"), + options); +} + +GRUB_MOD_FINI(syslinuxcfg) +{ + grub_unregister_extcmd (cmd_source); + grub_unregister_extcmd (cmd_configfile); + grub_unregister_extcmd (cmd_source_extract); + grub_unregister_extcmd (cmd_configfile_extract); +} diff --git a/grub-core/commands/tr.c b/grub-core/commands/tr.c index adb292b55..84ad6ff8f 100644 --- a/grub-core/commands/tr.c +++ b/grub-core/commands/tr.c @@ -29,7 +29,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); static const struct grub_arg_option options[] = { - { "set", 's', 0, N_("Variable name to update."), N_("VARNAME"), ARG_TYPE_STRING }, + { "set", 's', 0, N_("Set a variable to return value."), N_("VARNAME"), ARG_TYPE_STRING }, { "upcase", 'U', 0, N_("Translate to upper case."), 0, 0 }, { "downcase", 'D', 0, N_("Translate to lower case."), 0, 0 }, { 0, 0, 0, 0, 0, 0 } diff --git a/grub-core/commands/verify.c b/grub-core/commands/verify.c index dbe7e83c0..87c6d4f2c 100644 --- a/grub-core/commands/verify.c +++ b/grub-core/commands/verify.c @@ -133,7 +133,7 @@ struct signature_v4_header grub_uint8_t pkeyalgo; grub_uint8_t hash; grub_uint16_t hashed_sub; -} __attribute__ ((packed)); +} GRUB_PACKED; const char *hashes[] = { [0x01] = "md5", @@ -885,6 +885,7 @@ grub_pubkey_open (grub_file_t io, const char *filename) if (err) return NULL; io->device = 0; + io->name = 0; grub_file_close (io); return ret; } diff --git a/grub-core/commands/xen/lsxen.c b/grub-core/commands/xen/lsxen.c index 841549587..def8c8b40 100644 --- a/grub-core/commands/xen/lsxen.c +++ b/grub-core/commands/xen/lsxen.c @@ -77,9 +77,9 @@ static grub_command_t cmd_ls, cmd_cat; GRUB_MOD_INIT (lsxen) { - cmd_ls = grub_register_command ("xen_ls", grub_cmd_lsxen, "[DIR]", + cmd_ls = grub_register_command ("xen_ls", grub_cmd_lsxen, N_("[DIR]"), N_("List XEN storage.")); - cmd_cat = grub_register_command ("xen_cat", grub_cmd_catxen, "[DIR]", + cmd_cat = grub_register_command ("xen_cat", grub_cmd_catxen, N_("[DIR]"), N_("List XEN storage.")); } diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c index 9a4509bf0..75c6e1f91 100644 --- a/grub-core/disk/cryptodisk.c +++ b/grub-core/disk/cryptodisk.c @@ -51,7 +51,7 @@ static inline int GF_PER_SECTOR (const struct grub_cryptodisk *dev) } static grub_cryptodisk_t cryptodisk_list = NULL; -static grub_uint8_t n = 0; +static grub_uint8_t last_cryptodisk_id = 0; static void gf_mul_x (grub_uint8_t *g) @@ -707,7 +707,7 @@ grub_cryptodisk_insert (grub_cryptodisk_t newdev, const char *name, return grub_errno; } - newdev->id = n++; + newdev->id = last_cryptodisk_id++; newdev->source_id = source->id; newdev->source_dev_id = source->dev->id; newdev->next = cryptodisk_list; @@ -753,7 +753,7 @@ grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name, newdev->cheat_fd = GRUB_UTIL_FD_INVALID; newdev->source_id = source->id; newdev->source_dev_id = source->dev->id; - newdev->id = n++; + newdev->id = last_cryptodisk_id++; newdev->next = cryptodisk_list; cryptodisk_list = newdev; diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c index dc693696a..28b70c666 100644 --- a/grub-core/disk/diskfilter.c +++ b/grub-core/disk/diskfilter.c @@ -1057,7 +1057,8 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id, (unsigned long long) grub_disk_get_size (disk), array->name, diskfilter->name); #ifdef GRUB_UTIL - grub_util_info ("Inserting %s (+%lld,%lld) into %s (%s)\n", disk->name, + grub_util_info ("Inserting %s (+%" GRUB_HOST_PRIuLONG_LONG ",%" + GRUB_HOST_PRIuLONG_LONG ") into %s (%s)\n", disk->name, (unsigned long long) grub_partition_get_start (disk->partition), (unsigned long long) grub_disk_get_size (disk), array->name, diskfilter->name); diff --git a/grub-core/disk/dmraid_nvidia.c b/grub-core/disk/dmraid_nvidia.c index 4e7df4310..6e6405529 100644 --- a/grub-core/disk/dmraid_nvidia.c +++ b/grub-core/disk/dmraid_nvidia.c @@ -88,7 +88,7 @@ struct grub_nv_super char prodrev[NV_PRODREV_LEN]; /* 0x2C - 0x2F Array product revision */ grub_uint32_t unit_flags; /* 0x30 - 0x33 Flags for this disk */ struct grub_nv_array array; /* Array information */ -} __attribute__ ((packed)); +} GRUB_PACKED; static struct grub_diskfilter_vg * grub_dmraid_nv_detect (grub_disk_t disk, diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c index 3a7876329..e04203fe0 100644 --- a/grub-core/disk/efi/efidisk.c +++ b/grub-core/disk/efi/efidisk.c @@ -157,8 +157,7 @@ find_parent_device (struct grub_efidisk_data *devices, ldp = find_last_device_path (dp); ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; - ldp->length[0] = sizeof (*ldp); - ldp->length[1] = 0; + ldp->length = sizeof (*ldp); for (parent = devices; parent; parent = parent->next) { @@ -188,8 +187,7 @@ is_child (struct grub_efidisk_data *child, ldp = find_last_device_path (dp); ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; - ldp->length[0] = sizeof (*ldp); - ldp->length[1] = 0; + ldp->length = sizeof (*ldp); ret = (grub_efi_compare_device_paths (dp, parent->device_path) == 0); grub_free (dp); @@ -668,20 +666,20 @@ grub_efidisk_get_device_handle (grub_disk_t disk) devices = make_devices (); FOR_CHILDREN (c, devices) { - grub_efi_hard_drive_device_path_t hd; + grub_efi_hard_drive_device_path_t *hd; - grub_memcpy (&hd, c->last_device_path, sizeof (hd)); + hd = (grub_efi_hard_drive_device_path_t *) c->last_device_path; if ((GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE) && (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE) && (grub_partition_get_start (disk->partition) - == (hd.partition_start << (disk->log_sector_size - - GRUB_DISK_SECTOR_BITS))) + == (hd->partition_start << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS))) && (grub_partition_get_len (disk->partition) - == (hd.partition_size << (disk->log_sector_size - - GRUB_DISK_SECTOR_BITS)))) + == (hd->partition_size << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS)))) { handle = c->handle; break; @@ -747,7 +745,7 @@ get_diskname_from_path (const grub_efi_device_path_t *path, struct grub_efidisk_get_device_name_ctx { char *partition_name; - grub_efi_hard_drive_device_path_t hd; + grub_efi_hard_drive_device_path_t *hd; }; /* Helper for grub_efidisk_get_device_name. @@ -759,11 +757,11 @@ grub_efidisk_get_device_name_iter (grub_disk_t disk, struct grub_efidisk_get_device_name_ctx *ctx = data; if (grub_partition_get_start (part) - == (ctx->hd.partition_start << (disk->log_sector_size - - GRUB_DISK_SECTOR_BITS)) + == (ctx->hd->partition_start << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS)) && grub_partition_get_len (part) - == (ctx->hd.partition_size << (disk->log_sector_size - - GRUB_DISK_SECTOR_BITS))) + == (ctx->hd->partition_size << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS))) { ctx->partition_name = grub_partition_get_name (part); return 1; @@ -816,8 +814,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle) dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; - dup_ldp->length[0] = sizeof (*dup_ldp); - dup_ldp->length[1] = 0; + dup_ldp->length = sizeof (*dup_ldp); } if (!get_diskname_from_path (dup_dp, device_name)) @@ -834,10 +831,10 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle) /* Find a partition which matches the hard drive device path. */ ctx.partition_name = NULL; - grub_memcpy (&ctx.hd, ldp, sizeof (ctx.hd)); - if (ctx.hd.partition_start == 0 - && (ctx.hd.partition_size << (parent->log_sector_size - - GRUB_DISK_SECTOR_BITS)) + ctx.hd = (grub_efi_hard_drive_device_path_t *) ldp; + if (ctx.hd->partition_start == 0 + && (ctx.hd->partition_size << (parent->log_sector_size + - GRUB_DISK_SECTOR_BITS)) == grub_disk_get_size (parent)) { dev_name = grub_strdup (parent->name); diff --git a/grub-core/disk/geli.c b/grub-core/disk/geli.c index 73b325c94..9025c9d46 100644 --- a/grub-core/disk/geli.c +++ b/grub-core/disk/geli.c @@ -95,7 +95,7 @@ struct grub_geli_key grub_uint8_t iv_key[64]; grub_uint8_t cipher_key[64]; grub_uint8_t hmac[64]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_geli_phdr { @@ -111,7 +111,7 @@ struct grub_geli_phdr grub_uint32_t niter; grub_uint8_t salt[64]; struct grub_geli_key keys[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { @@ -144,7 +144,7 @@ geli_rekey (struct grub_cryptodisk *dev, grub_uint64_t zoneno) const struct { char magic[4]; grub_uint64_t zone; - } __attribute__ ((packed)) tohash + } GRUB_PACKED tohash = { {'e', 'k', 'e', 'y'}, grub_cpu_to_le64 (zoneno) }; GRUB_PROPERLY_ALIGNED_ARRAY (key, GRUB_CRYPTO_MAX_MDLEN); diff --git a/grub-core/disk/host.c b/grub-core/disk/host.c index 69b6f0ea1..76ef1afb8 100644 --- a/grub-core/disk/host.c +++ b/grub-core/disk/host.c @@ -49,7 +49,7 @@ grub_host_open (const char *name, grub_disk_t disk) return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a host disk"); disk->total_sectors = 0; - disk->id = (unsigned long) "host"; + disk->id = 0; disk->data = 0; diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c index f681eea7f..d64d0a89d 100644 --- a/grub-core/disk/ldm.c +++ b/grub-core/disk/ldm.c @@ -49,7 +49,7 @@ struct grub_ldm_vblk { grub_uint8_t type; grub_uint32_t unused2; grub_uint8_t dynamic[104]; -} __attribute__ ((packed)); +} GRUB_PACKED; #define LDM_VBLK_MAGIC "VBLK" enum @@ -83,7 +83,7 @@ struct grub_ldm_label grub_uint64_t pv_size; grub_uint64_t config_start; grub_uint64_t config_size; -} __attribute__ ((packed)); +} GRUB_PACKED; #define LDM_MAGIC "PRIVHEAD" diff --git a/grub-core/disk/loopback.c b/grub-core/disk/loopback.c index d9fa1f3c5..2d8deaeaf 100644 --- a/grub-core/disk/loopback.c +++ b/grub-core/disk/loopback.c @@ -32,9 +32,11 @@ struct grub_loopback char *devname; grub_file_t file; struct grub_loopback *next; + unsigned long id; }; static struct grub_loopback *loopback_list; +static unsigned long last_id = 0; static const struct grub_arg_option options[] = { @@ -120,6 +122,7 @@ grub_cmd_loopback (grub_extcmd_context_t ctxt, int argc, char **args) } newdev->file = file; + newdev->id = last_id++; /* Add the new entry to the list. */ newdev->next = loopback_list; @@ -171,7 +174,7 @@ grub_loopback_open (const char *name, grub_disk_t disk) disk->max_agglomerate = 1 << (29 - GRUB_DISK_SECTOR_BITS - GRUB_DISK_CACHE_BITS); - disk->id = (unsigned long) dev; + disk->id = dev->id; disk->data = dev; diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c index 46f47c2b6..250202947 100644 --- a/grub-core/disk/luks.c +++ b/grub-core/disk/luks.c @@ -56,7 +56,7 @@ struct grub_luks_phdr grub_uint32_t keyMaterialOffset; grub_uint32_t stripes; } keyblock[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_luks_phdr *grub_luks_phdr_t; diff --git a/grub-core/disk/mdraid1x_linux.c b/grub-core/disk/mdraid1x_linux.c index a0e65a8cc..7cc80d3df 100644 --- a/grub-core/disk/mdraid1x_linux.c +++ b/grub-core/disk/mdraid1x_linux.c @@ -97,7 +97,7 @@ struct grub_raid_super_1x */ grub_uint16_t dev_roles[0]; /* Role in array, or 0xffff for a spare, or 0xfffe for faulty. */ }; -/* Could be __attribute__ ((packed)), but since all members in this struct +/* Could be GRUB_PACKED, but since all members in this struct are already appropriately aligned, we can omit this and avoid suboptimal assembly in some cases. */ diff --git a/grub-core/disk/mdraid_linux.c b/grub-core/disk/mdraid_linux.c index eb679f5ce..4aa588235 100644 --- a/grub-core/disk/mdraid_linux.c +++ b/grub-core/disk/mdraid_linux.c @@ -175,7 +175,7 @@ struct grub_raid_super_09 * Active descriptor */ struct grub_raid_disk_09 this_disk; -} __attribute__ ((packed)); +} GRUB_PACKED; static struct grub_diskfilter_vg * grub_mdraid_detect (grub_disk_t disk, diff --git a/grub-core/disk/memdisk.c b/grub-core/disk/memdisk.c index 20c3f02ba..e5ffc01bf 100644 --- a/grub-core/disk/memdisk.c +++ b/grub-core/disk/memdisk.c @@ -47,7 +47,7 @@ grub_memdisk_open (const char *name, grub_disk_t disk) disk->total_sectors = memdisk_size / GRUB_DISK_SECTOR_SIZE; disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; - disk->id = (unsigned long) "mdsk"; + disk->id = 0; return GRUB_ERR_NONE; } diff --git a/grub-core/disk/usbms.c b/grub-core/disk/usbms.c index af92243d2..2b769bdd8 100644 --- a/grub-core/disk/usbms.c +++ b/grub-core/disk/usbms.c @@ -44,7 +44,7 @@ struct grub_usbms_cbw grub_uint8_t lun; grub_uint8_t length; grub_uint8_t cbwcb[16]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_usbms_csw { @@ -52,7 +52,7 @@ struct grub_usbms_csw grub_uint32_t tag; grub_uint32_t residue; grub_uint8_t status; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_usbms_dev { @@ -298,6 +298,8 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, grub_usb_err_t errCSW = GRUB_USB_ERR_NONE; int retrycnt = 3 + 1; + tag++; + retry: retrycnt--; if (retrycnt == 0) @@ -306,7 +308,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, /* Setup the request. */ grub_memset (&cbw, 0, sizeof (cbw)); cbw.signature = grub_cpu_to_le32 (0x43425355); - cbw.tag = tag++; + cbw.tag = tag; cbw.transfer_length = grub_cpu_to_le32 (size); cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT; cbw.lun = scsi->lun; /* In USB MS CBW are LUN bits on another place than in SCSI CDB, both should be set correctly. */ @@ -335,7 +337,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, grub_usb_clear_halt (dev->dev, dev->out->endp_addr); goto CheckCSW; } - return grub_error (GRUB_ERR_IO, "USB Mass Storage request failed"); + goto retry; } /* Read/write the data, (maybe) according to specification. */ diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c index 15f7d9dc6..f673897e0 100644 --- a/grub-core/fs/affs.c +++ b/grub-core/fs/affs.c @@ -36,7 +36,7 @@ struct grub_affs_bblock grub_uint8_t flags; grub_uint32_t checksum; grub_uint32_t rootblock; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Set if the filesystem is a AFFS filesystem. Otherwise this is an OFS filesystem. */ @@ -51,14 +51,14 @@ struct grub_affs_rblock grub_uint32_t unused2; grub_uint32_t checksum; grub_uint32_t hashtable[1]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_affs_time { grub_int32_t day; grub_uint32_t min; grub_uint32_t hz; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The second part of a file header block. */ struct grub_affs_file @@ -76,7 +76,7 @@ struct grub_affs_file grub_uint32_t parent; grub_uint32_t extension; grub_uint32_t type; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The location of `struct grub_affs_file' relative to the end of a file header block. */ diff --git a/grub-core/fs/bfs.c b/grub-core/fs/bfs.c index 36b01efc8..145e77186 100644 --- a/grub-core/fs/bfs.c +++ b/grub-core/fs/bfs.c @@ -73,7 +73,7 @@ struct grub_bfs_extent grub_uint32_t ag; grub_uint16_t start; grub_uint16_t len; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_bfs_superblock { @@ -89,7 +89,7 @@ struct grub_bfs_superblock grub_uint8_t unused3[32]; grub_uint32_t magic3; struct grub_bfs_extent root_dir; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_bfs_inode { @@ -118,11 +118,11 @@ struct grub_bfs_inode grub_uint64_t max_double_indirect_range; grub_uint64_t size; grub_uint32_t pad[4]; - } __attribute__ ((packed)); + } GRUB_PACKED; char inplace_link[144]; - } __attribute__ ((packed)); + } GRUB_PACKED; grub_uint8_t small_data[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { @@ -134,7 +134,7 @@ struct grub_bfs_small_data_element_header grub_uint32_t type; grub_uint16_t name_len; grub_uint16_t value_len; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_bfs_btree_header { @@ -151,7 +151,7 @@ struct grub_bfs_btree_header grub_uint64_t root; #endif grub_uint32_t unused2[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_bfs_btree_node { @@ -165,7 +165,7 @@ struct grub_bfs_btree_node grub_uint16_t count_keys; grub_uint16_t total_key_len; #endif -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_bfs_data { diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c index a60852756..89666b6fd 100644 --- a/grub-core/fs/btrfs.c +++ b/grub-core/fs/btrfs.c @@ -53,7 +53,7 @@ struct grub_btrfs_device grub_uint64_t device_id; grub_uint64_t size; grub_uint8_t dummy[0x62 - 0x10]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_superblock { @@ -71,7 +71,7 @@ struct grub_btrfs_superblock char label[0x100]; grub_uint8_t dummy4[0x100]; grub_uint8_t bootstrap_mapping[0x800]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct btrfs_header { @@ -80,7 +80,7 @@ struct btrfs_header grub_uint8_t dummy[0x30]; grub_uint32_t nitems; grub_uint8_t level; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_device_desc { @@ -122,28 +122,28 @@ struct grub_btrfs_chunk_item grub_uint8_t dummy2[0xc]; grub_uint16_t nstripes; grub_uint16_t nsubstripes; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_chunk_stripe { grub_uint64_t device_id; grub_uint64_t offset; grub_btrfs_uuid_t device_uuid; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_leaf_node { struct grub_btrfs_key key; grub_uint32_t offset; grub_uint32_t size; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_internal_node { struct grub_btrfs_key key; grub_uint64_t addr; grub_uint64_t dummy; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_dir_item { @@ -156,7 +156,7 @@ struct grub_btrfs_dir_item #define GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK 7 grub_uint8_t type; char name[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_leaf_descriptor { @@ -183,7 +183,7 @@ struct grub_btrfs_inode grub_uint64_t size; grub_uint8_t dummy2[0x70]; struct grub_btrfs_time mtime; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_extent_data { @@ -204,7 +204,7 @@ struct grub_btrfs_extent_data grub_uint64_t filled; }; }; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_BTRFS_EXTENT_INLINE 0 #define GRUB_BTRFS_EXTENT_REGULAR 1 @@ -1104,7 +1104,12 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data, - (grub_uint8_t *) data->extent), extoff, buf, csize) != (grub_ssize_t) csize) - return -1; + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + return -1; + } } else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO) { @@ -1158,7 +1163,12 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data, grub_free (tmp); if (ret != (grub_ssize_t) csize) - return -1; + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + return -1; + } break; } diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c index 93a38003e..7ad148361 100644 --- a/grub-core/fs/cbfs.c +++ b/grub-core/fs/cbfs.c @@ -291,7 +291,7 @@ grub_cbfsdisk_open (const char *name, grub_disk_t disk) disk->total_sectors = cbfsdisk_size / GRUB_DISK_SECTOR_SIZE; disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; - disk->id = (unsigned long) "cbfs"; + disk->id = 0; return GRUB_ERR_NONE; } diff --git a/grub-core/fs/cpio.c b/grub-core/fs/cpio.c index b14e190f9..dab5f9898 100644 --- a/grub-core/fs/cpio.c +++ b/grub-core/fs/cpio.c @@ -35,7 +35,7 @@ struct head grub_uint16_t mtime[2]; grub_uint16_t namesize[1]; grub_uint16_t filesize[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; static inline unsigned long long read_number (const grub_uint16_t *arr, grub_size_t size) diff --git a/grub-core/fs/cpio_be.c b/grub-core/fs/cpio_be.c index 83df8195b..846548892 100644 --- a/grub-core/fs/cpio_be.c +++ b/grub-core/fs/cpio_be.c @@ -35,7 +35,7 @@ struct head grub_uint16_t mtime[2]; grub_uint16_t namesize[1]; grub_uint16_t filesize[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; static inline unsigned long long read_number (const grub_uint16_t *arr, grub_size_t size) diff --git a/grub-core/fs/fat.c b/grub-core/fs/fat.c index e84f6c672..79fe864d7 100644 --- a/grub-core/fs/fat.c +++ b/grub-core/fs/fat.c @@ -92,7 +92,7 @@ struct grub_fat_dir_entry grub_uint8_t m_time_tenth; grub_uint8_t a_time_tenth; grub_uint8_t reserved2[9]; - } __attribute__ ((packed)) file; + } GRUB_PACKED file; struct { grub_uint8_t flags; grub_uint8_t reserved1; @@ -103,17 +103,17 @@ struct grub_fat_dir_entry grub_uint32_t reserved3; grub_uint32_t first_cluster; grub_uint64_t file_size; - } __attribute__ ((packed)) stream_extension; + } GRUB_PACKED stream_extension; struct { grub_uint8_t flags; grub_uint16_t str[15]; - } __attribute__ ((packed)) file_name; + } GRUB_PACKED file_name; struct { grub_uint8_t character_count; grub_uint16_t str[15]; - } __attribute__ ((packed)) volume_label; - } __attribute__ ((packed)) type_specific; -} __attribute__ ((packed)); + } GRUB_PACKED volume_label; + } GRUB_PACKED type_specific; +} GRUB_PACKED; struct grub_fat_dir_node { @@ -142,7 +142,7 @@ struct grub_fat_dir_entry grub_uint16_t w_date; grub_uint16_t first_cluster_low; grub_uint32_t file_size; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_fat_long_name_entry { @@ -154,7 +154,7 @@ struct grub_fat_long_name_entry grub_uint16_t name2[6]; grub_uint16_t first_cluster; grub_uint16_t name3[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_fat_dir_entry grub_fat_dir_node_t; diff --git a/grub-core/fs/hfs.c b/grub-core/fs/hfs.c index 25414a5c5..1e593059a 100644 --- a/grub-core/fs/hfs.c +++ b/grub-core/fs/hfs.c @@ -65,7 +65,7 @@ struct grub_hfs_node grub_uint8_t level; grub_uint16_t reccnt; grub_uint16_t unused; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The head of the B*-Tree. */ struct grub_hfs_treeheader @@ -81,7 +81,7 @@ struct grub_hfs_treeheader grub_uint32_t nodes; grub_uint32_t free_nodes; grub_uint8_t unused[76]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The state of a mounted HFS filesystem. */ struct grub_hfs_data @@ -112,7 +112,7 @@ struct grub_hfs_catalog_key /* Filename. */ grub_uint8_t str[31]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The key as used on disk in a extent overflow tree. Using this key the extents can be looked up using a fileid and logical start block @@ -125,7 +125,7 @@ struct grub_hfs_extent_key grub_uint8_t forktype; grub_uint32_t fileid; grub_uint16_t first_block; -} __attribute__ ((packed)); +} GRUB_PACKED; /* A directory record. This is used to find out the directory ID. */ struct grub_hfs_dirrec @@ -136,7 +136,7 @@ struct grub_hfs_dirrec grub_uint32_t dirid; grub_uint32_t ctime; grub_uint32_t mtime; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Information about a file. */ struct grub_hfs_filerec @@ -154,7 +154,7 @@ struct grub_hfs_filerec /* The first 3 extents of the file. The other extents can be found in the extent overflow file. */ grub_hfs_datarecord_t extents; -} __attribute__ ((packed)); +} GRUB_PACKED; /* A record descriptor, both key and data, used to pass to call back functions. */ @@ -712,7 +712,7 @@ grub_hfs_iterate_records (struct grub_hfs_data *data, int type, int idx, { grub_uint8_t keylen; grub_uint8_t key; - } __attribute__ ((packed)) *pnt; + } GRUB_PACKED *pnt; pnt = (struct pointer *) (grub_be_to_cpu16 (node->offsets[pos]) + node->rawnode); @@ -1229,14 +1229,18 @@ grub_hfs_dir_hook (struct grub_hfs_record *rec, void *hook_arg) { info.dir = 1; info.mtimeset = 1; + info.inodeset = 1; info.mtime = grub_be_to_cpu32 (drec->mtime) - 2082844800; + info.inode = grub_be_to_cpu32 (drec->dirid); return ctx->hook (fname, &info, ctx->hook_data); } if (frec->type == GRUB_HFS_FILETYPE_FILE) { info.dir = 0; info.mtimeset = 1; + info.inodeset = 1; info.mtime = grub_be_to_cpu32 (frec->mtime) - 2082844800; + info.inode = grub_be_to_cpu32 (frec->fileid); return ctx->hook (fname, &info, ctx->hook_data); } diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c index a119c7ace..950d8a1e1 100644 --- a/grub-core/fs/hfsplus.c +++ b/grub-core/fs/hfsplus.c @@ -34,11 +34,6 @@ GRUB_MOD_LICENSE ("GPLv3+"); -#define GRUB_HFSPLUS_MAGIC 0x482B -#define GRUB_HFSPLUSX_MAGIC 0x4858 -#define GRUB_HFSPLUS_SBLOCK 2 - - /* The type of node. */ enum grub_hfsplus_btnode_type { @@ -65,7 +60,7 @@ struct grub_hfsplus_btheader grub_uint8_t btree_type; grub_uint8_t key_compare; grub_uint32_t attributes; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_hfsplus_catfile { @@ -80,7 +75,7 @@ struct grub_hfsplus_catfile grub_uint8_t unused3[44]; struct grub_hfsplus_forkdata data; struct grub_hfsplus_forkdata resource; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Filetype information as used in inodes. */ #define GRUB_HFSPLUS_FILEMODE_MASK 0170000 @@ -919,6 +914,8 @@ grub_hfsplus_dir_iter (const char *filename, info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); info.mtimeset = 1; info.mtime = node->mtime; + info.inodeset = 1; + info.inode = node->fileid; info.case_insensitive = !! (filetype & GRUB_FSHELP_CASE_INSENSITIVE); grub_free (node); return ctx->hook (filename, &info, ctx->hook_data); diff --git a/grub-core/fs/hfspluscomp.c b/grub-core/fs/hfspluscomp.c index 59cb8cbc0..d76f3f137 100644 --- a/grub-core/fs/hfspluscomp.c +++ b/grub-core/fs/hfspluscomp.c @@ -35,19 +35,19 @@ struct grub_hfsplus_compress_header1 grub_uint32_t total_compressed_size_including_seek_blocks_and_header2; grub_uint32_t value_0x32; grub_uint8_t unused[0xf0]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* big-endian. */ struct grub_hfsplus_compress_header2 { grub_uint32_t total_compressed_size_including_seek_blocks; -} __attribute__ ((packed)); +} GRUB_PACKED; /* little-endian. */ struct grub_hfsplus_compress_header3 { grub_uint32_t num_chunks; -} __attribute__ ((packed)); +} GRUB_PACKED; /* little-endian. */ struct grub_hfsplus_compress_block_descriptor @@ -59,7 +59,7 @@ struct grub_hfsplus_compress_block_descriptor struct grub_hfsplus_compress_end_descriptor { grub_uint8_t always_the_same[50]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_hfsplus_attr_header { @@ -67,7 +67,7 @@ struct grub_hfsplus_attr_header grub_uint8_t type; grub_uint32_t unknown[1]; grub_uint64_t size; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_hfsplus_compress_attr { @@ -75,7 +75,7 @@ struct grub_hfsplus_compress_attr grub_uint32_t type; grub_uint32_t uncompressed_inline_size; grub_uint32_t always_0; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { @@ -156,8 +156,12 @@ hfsplus_read_compressed_real (struct grub_hfsplus_file *node, if (ts > node->size - (pos & ~(HFSPLUS_COMPRESS_BLOCK_SIZE))) ts = node->size - (pos & ~(HFSPLUS_COMPRESS_BLOCK_SIZE)); if (grub_zlib_decompress (tmp_buf, sz, 0, - node->cbuf, ts) < 0) + node->cbuf, ts) != (grub_ssize_t) ts) { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + grub_free (tmp_buf); return -1; } @@ -288,8 +292,14 @@ hfsplus_open_compressed_real (struct grub_hfsplus_file *node) if (grub_zlib_decompress ((char *) (cmp_head + 1), grub_cpu_to_be64 (attr_head->size) - sizeof (*cmp_head), 0, - node->cbuf, node->size) < 0) - return grub_errno; + node->cbuf, node->size) + != (grub_ssize_t) node->size) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + return grub_errno; + } node->compressed = 1; return 0; } diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c index 69e61ca02..6a6677337 100644 --- a/grub-core/fs/iso9660.c +++ b/grub-core/fs/iso9660.c @@ -54,7 +54,7 @@ struct grub_iso9660_voldesc grub_uint8_t type; grub_uint8_t magic[5]; grub_uint8_t version; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_iso9660_date2 { @@ -65,7 +65,7 @@ struct grub_iso9660_date2 grub_uint8_t minute; grub_uint8_t second; grub_uint8_t offset; -} __attribute__ ((packed)); +} GRUB_PACKED; /* A directory entry. */ struct grub_iso9660_dir @@ -81,7 +81,7 @@ struct grub_iso9660_dir grub_uint8_t unused2[6]; #define MAX_NAMELEN 255 grub_uint8_t namelen; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_iso9660_date { @@ -93,7 +93,7 @@ struct grub_iso9660_date grub_uint8_t second[2]; grub_uint8_t hundredth[2]; grub_uint8_t offset; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The primary volume descriptor. Only little endian is used. */ struct grub_iso9660_primary_voldesc @@ -112,7 +112,7 @@ struct grub_iso9660_primary_voldesc grub_uint8_t unused6[624]; struct grub_iso9660_date created; struct grub_iso9660_date modified; -} __attribute__ ((packed)); +} GRUB_PACKED; /* A single entry in the path table. */ struct grub_iso9660_path @@ -122,7 +122,7 @@ struct grub_iso9660_path grub_uint32_t first_sector; grub_uint16_t parentdir; grub_uint8_t name[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* An entry in the System Usage area of the directory entry. */ struct grub_iso9660_susp_entry @@ -131,7 +131,7 @@ struct grub_iso9660_susp_entry grub_uint8_t len; grub_uint8_t version; grub_uint8_t data[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The CE entry. This is used to describe the next block where data can be found. */ @@ -144,7 +144,7 @@ struct grub_iso9660_susp_ce grub_uint32_t off_be; grub_uint32_t len; grub_uint32_t len_be; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_iso9660_data { diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c index 3251baa6e..aab3e8c7b 100644 --- a/grub-core/fs/jfs.c +++ b/grub-core/fs/jfs.c @@ -70,7 +70,7 @@ struct grub_jfs_extent /* The physical offset of the first block on the disk. */ grub_uint8_t blk1; grub_uint32_t blk2; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_JFS_IAG_INODES_OFFSET 3072 #define GRUB_JFS_IAG_INODES_COUNT 128 @@ -79,7 +79,7 @@ struct grub_jfs_iag { grub_uint8_t unused[GRUB_JFS_IAG_INODES_OFFSET]; struct grub_jfs_extent inodes[GRUB_JFS_IAG_INODES_COUNT]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The head of the tree used to find extents. */ @@ -94,7 +94,7 @@ struct grub_jfs_treehead grub_uint16_t count; grub_uint16_t max; grub_uint8_t unused2[10]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* A node in the extent tree. */ struct grub_jfs_tree_extent @@ -107,7 +107,7 @@ struct grub_jfs_tree_extent grub_uint32_t offset2; struct grub_jfs_extent extent; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The tree of directory entries. */ struct grub_jfs_tree_dir @@ -128,7 +128,7 @@ struct grub_jfs_tree_dir /* The location of the sorted array of pointers to dirents. */ grub_uint8_t sindex; grub_uint8_t unused[10]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* An internal node in the dirents tree. */ struct grub_jfs_internal_dirent @@ -137,7 +137,7 @@ struct grub_jfs_internal_dirent grub_uint8_t next; grub_uint8_t len; grub_uint16_t namepart[11]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* A leaf node in the dirents tree. */ struct grub_jfs_leaf_dirent @@ -150,7 +150,7 @@ struct grub_jfs_leaf_dirent grub_uint8_t len; grub_uint16_t namepart[11]; grub_uint32_t index; -} __attribute__ ((packed)); +} GRUB_PACKED; /* A leaf in the dirents tree. This one is used if the previously dirent was not big enough to store the name. */ @@ -159,13 +159,13 @@ struct grub_jfs_leaf_next_dirent grub_uint8_t next; grub_uint8_t len; grub_uint16_t namepart[15]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_jfs_time { grub_int32_t sec; grub_int32_t nanosec; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_jfs_inode { @@ -185,7 +185,7 @@ struct grub_jfs_inode union { /* The tree describing the extents of the file. */ - struct __attribute__ ((packed)) + struct GRUB_PACKED { struct grub_jfs_treehead tree; struct grub_jfs_tree_extent extents[16]; @@ -206,15 +206,15 @@ struct grub_jfs_inode grub_uint8_t sorted[8]; } header; struct grub_jfs_leaf_dirent dirents[8]; - } dir __attribute__ ((packed)); + } GRUB_PACKED dir; /* Fast symlink. */ struct { grub_uint8_t unused[32]; grub_uint8_t path[256]; } symlink; - } __attribute__ ((packed)); -} __attribute__ ((packed)); + } GRUB_PACKED; +} GRUB_PACKED; struct grub_jfs_data { @@ -226,7 +226,7 @@ struct grub_jfs_data int pos; int linknest; int namecomponentlen; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_jfs_diropen { @@ -237,7 +237,7 @@ struct grub_jfs_diropen struct grub_jfs_leaf_dirent dirent[0]; struct grub_jfs_leaf_next_dirent next_dirent[0]; grub_uint8_t sorted[0]; - } *dirpage __attribute__ ((packed)); + } GRUB_PACKED *dirpage; struct grub_jfs_data *data; struct grub_jfs_inode *inode; int count; @@ -251,7 +251,7 @@ struct grub_jfs_diropen */ char name[256 * GRUB_MAX_UTF8_PER_UTF16 + 1]; grub_uint32_t ino; -} __attribute__ ((packed)); +} GRUB_PACKED; static grub_dl_t my_mod; diff --git a/grub-core/fs/newc.c b/grub-core/fs/newc.c index c7767ed3b..4fb8b2e3d 100644 --- a/grub-core/fs/newc.c +++ b/grub-core/fs/newc.c @@ -38,7 +38,7 @@ struct head char rdevminor[8]; char namesize[8]; char check[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; static inline unsigned long long read_number (const char *str, grub_size_t size) diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c index 1318f2140..388ee188e 100644 --- a/grub-core/fs/nilfs2.c +++ b/grub-core/fs/nilfs2.c @@ -143,7 +143,7 @@ struct grub_nilfs2_dir_entry char name[NILFS_NAME_LEN]; char pad; #endif -} __attribute__ ((packed)); +} GRUB_PACKED; enum { diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c index 83ba5698c..d3a91f5d7 100644 --- a/grub-core/fs/ntfs.c +++ b/grub-core/fs/ntfs.c @@ -643,7 +643,7 @@ struct symlink_descriptor grub_uint16_t len1; grub_uint16_t off2; grub_uint16_t len2; -} __attribute__ ((packed)); +} GRUB_PACKED; static char * grub_ntfs_read_symlink (grub_fshelp_node_t node) diff --git a/grub-core/fs/odc.c b/grub-core/fs/odc.c index 7b8a7220e..790000622 100644 --- a/grub-core/fs/odc.c +++ b/grub-core/fs/odc.c @@ -35,7 +35,7 @@ struct head char mtime[11]; char namesize[6]; char filesize[11]; -} __attribute__ ((packed)); +} GRUB_PACKED; static inline unsigned long long read_number (const char *str, grub_size_t size) diff --git a/grub-core/fs/proc.c b/grub-core/fs/proc.c index 770721ab9..a03469ec6 100644 --- a/grub-core/fs/proc.c +++ b/grub-core/fs/proc.c @@ -44,7 +44,7 @@ grub_procdev_open (const char *name, grub_disk_t disk) return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a procfs disk"); disk->total_sectors = 0; - disk->id = (unsigned long) "proc"; + disk->id = 0; disk->data = 0; diff --git a/grub-core/fs/reiserfs.c b/grub-core/fs/reiserfs.c index 6537377ba..ac65054d3 100644 --- a/grub-core/fs/reiserfs.c +++ b/grub-core/fs/reiserfs.c @@ -109,14 +109,14 @@ struct grub_reiserfs_superblock grub_uint8_t unused[4]; grub_uint16_t uuid[8]; char label[16]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_journal_header { grub_uint32_t last_flush_uid; grub_uint32_t unflushed_offset; grub_uint32_t mount_id; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_description_block { @@ -124,14 +124,14 @@ struct grub_reiserfs_description_block grub_uint32_t len; grub_uint32_t mount_id; grub_uint32_t real_blocks[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_commit_block { grub_uint32_t id; grub_uint32_t len; grub_uint32_t real_blocks[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_stat_item_v1 { @@ -145,7 +145,7 @@ struct grub_reiserfs_stat_item_v1 grub_uint32_t ctime; grub_uint32_t rdev; grub_uint32_t first_direct_byte; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_stat_item_v2 { @@ -160,7 +160,7 @@ struct grub_reiserfs_stat_item_v2 grub_uint32_t ctime; grub_uint32_t blocks; grub_uint32_t first_direct_byte; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_key { @@ -172,13 +172,13 @@ struct grub_reiserfs_key { grub_uint32_t offset; grub_uint32_t type; - } v1 __attribute__ ((packed)); + } GRUB_PACKED v1; struct { grub_uint64_t offset_type; - } v2 __attribute__ ((packed)); + } GRUB_PACKED v2; } u; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_item_header { @@ -187,11 +187,11 @@ struct grub_reiserfs_item_header { grub_uint16_t free_space; grub_uint16_t entry_count; - } u __attribute__ ((packed)); + } GRUB_PACKED u; grub_uint16_t item_size; grub_uint16_t item_location; grub_uint16_t version; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_block_header { @@ -200,14 +200,14 @@ struct grub_reiserfs_block_header grub_uint16_t free_space; grub_uint16_t reserved; struct grub_reiserfs_key block_right_delimiting_key; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_disk_child { grub_uint32_t block_number; grub_uint16_t size; grub_uint16_t reserved; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_reiserfs_directory_header { @@ -216,7 +216,7 @@ struct grub_reiserfs_directory_header grub_uint32_t object_id; grub_uint16_t location; grub_uint16_t state; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_fshelp_node { diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c index e7d2f72f3..6c8215048 100644 --- a/grub-core/fs/sfs.c +++ b/grub-core/fs/sfs.c @@ -35,7 +35,7 @@ struct grub_sfs_bheader grub_uint8_t magic[4]; grub_uint32_t chksum; grub_uint32_t ipointtomyself; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The sfs rootblock. */ struct grub_sfs_rblock @@ -50,7 +50,7 @@ struct grub_sfs_rblock grub_uint8_t unused3[8]; grub_uint32_t rootobject; grub_uint32_t btree; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { @@ -69,18 +69,18 @@ struct grub_sfs_obj { grub_uint32_t first_block; grub_uint32_t size; - } file __attribute__ ((packed)); + } GRUB_PACKED file; struct { grub_uint32_t hashtable; grub_uint32_t dir_objc; - } dir __attribute__ ((packed)); + } GRUB_PACKED dir; } file_dir; grub_uint32_t mtime; grub_uint8_t type; grub_uint8_t filename[1]; grub_uint8_t comment[1]; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_SFS_TYPE_DELETED 32 #define GRUB_SFS_TYPE_SYMLINK 64 @@ -95,13 +95,13 @@ struct grub_sfs_objc grub_uint32_t prev; /* The amount of objects depends on the blocksize. */ struct grub_sfs_obj objects[1]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_sfs_btree_node { grub_uint32_t key; grub_uint32_t data; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_sfs_btree_extent { @@ -109,7 +109,7 @@ struct grub_sfs_btree_extent grub_uint32_t next; grub_uint32_t prev; grub_uint16_t size; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_sfs_btree { @@ -120,7 +120,7 @@ struct grub_sfs_btree /* Normally this can be kind of node, but just extents are supported. */ struct grub_sfs_btree_node node[1]; -} __attribute__ ((packed)); +} GRUB_PACKED; diff --git a/grub-core/fs/squash4.c b/grub-core/fs/squash4.c index cb3cc3a6e..b97b34440 100644 --- a/grub-core/fs/squash4.c +++ b/grub-core/fs/squash4.c @@ -71,7 +71,7 @@ struct grub_squash_super grub_uint64_t diroffset; grub_uint64_t unk1offset; grub_uint64_t unk2offset; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Chunk-based */ struct grub_squash_inode @@ -89,7 +89,7 @@ struct grub_squash_inode grub_uint32_t offset; grub_uint32_t size; grub_uint32_t block_size[0]; - } __attribute__ ((packed)) file; + } GRUB_PACKED file; struct { grub_uint64_t chunk; grub_uint64_t size; @@ -98,13 +98,13 @@ struct grub_squash_inode grub_uint32_t offset; grub_uint32_t dummy3; grub_uint32_t block_size[0]; - } __attribute__ ((packed)) long_file; + } GRUB_PACKED long_file; struct { grub_uint32_t chunk; grub_uint32_t dummy; grub_uint16_t size; grub_uint16_t offset; - } __attribute__ ((packed)) dir; + } GRUB_PACKED dir; struct { grub_uint32_t dummy1; grub_uint32_t size; @@ -112,14 +112,14 @@ struct grub_squash_inode grub_uint32_t dummy2; grub_uint16_t dummy3; grub_uint16_t offset; - } __attribute__ ((packed)) long_dir; + } GRUB_PACKED long_dir; struct { grub_uint32_t dummy; grub_uint32_t namelen; char name[0]; - } __attribute__ ((packed)) symlink; - } __attribute__ ((packed)); -} __attribute__ ((packed)); + } GRUB_PACKED symlink; + } GRUB_PACKED; +} GRUB_PACKED; struct grub_squash_cache_inode { @@ -137,7 +137,7 @@ struct grub_squash_dirent_header grub_uint32_t nelems; grub_uint32_t ino_chunk; grub_uint32_t dummy; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_squash_dirent { @@ -147,7 +147,7 @@ struct grub_squash_dirent /* Actually the value is the length of name - 1. */ grub_uint16_t namelen; char name[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { @@ -164,7 +164,7 @@ struct grub_squash_frag_desc grub_uint64_t offset; grub_uint32_t size; grub_uint32_t dummy; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { diff --git a/grub-core/fs/tar.c b/grub-core/fs/tar.c index 7d25791e8..39bf197aa 100644 --- a/grub-core/fs/tar.c +++ b/grub-core/fs/tar.c @@ -48,7 +48,7 @@ struct head char devmajor[8]; char devminor[8]; char prefix[155]; -} __attribute__ ((packed)); +} GRUB_PACKED; static inline unsigned long long read_number (const char *str, grub_size_t size) diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c index 60ce92830..fd412830c 100644 --- a/grub-core/fs/udf.c +++ b/grub-core/fs/udf.c @@ -117,32 +117,32 @@ struct grub_udf_lb_addr { grub_uint32_t block_num; grub_uint16_t part_ref; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_short_ad { grub_uint32_t length; grub_uint32_t position; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_long_ad { grub_uint32_t length; struct grub_udf_lb_addr block; grub_uint8_t imp_use[6]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_extent_ad { grub_uint32_t length; grub_uint32_t start; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_charspec { grub_uint8_t charset_type; grub_uint8_t charset_info[63]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_timestamp { @@ -156,14 +156,14 @@ struct grub_udf_timestamp grub_uint8_t centi_seconds; grub_uint8_t hundreds_of_micro_seconds; grub_uint8_t micro_seconds; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_regid { grub_uint8_t flags; grub_uint8_t ident[23]; grub_uint8_t ident_suffix[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_tag { @@ -175,7 +175,7 @@ struct grub_udf_tag grub_uint16_t desc_crc; grub_uint16_t desc_crc_length; grub_uint32_t tag_location; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_fileset { @@ -197,7 +197,7 @@ struct grub_udf_fileset struct grub_udf_regid domain_ident; struct grub_udf_long_ad next_ext; struct grub_udf_long_ad streamdir_icb; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_icbtag { @@ -209,7 +209,7 @@ struct grub_udf_icbtag grub_uint8_t file_type; struct grub_udf_lb_addr parent_idb; grub_uint16_t flags; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_file_ident { @@ -220,7 +220,7 @@ struct grub_udf_file_ident grub_uint8_t file_ident_length; struct grub_udf_long_ad icb; grub_uint16_t imp_use_length; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_file_entry { @@ -245,7 +245,7 @@ struct grub_udf_file_entry grub_uint32_t ext_attr_length; grub_uint32_t alloc_descs_length; grub_uint8_t ext_attr[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_extended_file_entry { @@ -274,20 +274,20 @@ struct grub_udf_extended_file_entry grub_uint32_t ext_attr_length; grub_uint32_t alloc_descs_length; grub_uint8_t ext_attr[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_vrs { grub_uint8_t type; grub_uint8_t magic[5]; grub_uint8_t version; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_avdp { struct grub_udf_tag tag; struct grub_udf_extent_ad vds; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_pd { @@ -300,7 +300,7 @@ struct grub_udf_pd grub_uint32_t access_type; grub_uint32_t start; grub_uint32_t length; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_partmap { @@ -319,7 +319,7 @@ struct grub_udf_partmap grub_uint8_t ident[62]; } type2; }; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_lvd { @@ -336,14 +336,14 @@ struct grub_udf_lvd grub_uint8_t imp_use[128]; struct grub_udf_extent_ad integrity_seq_ext; grub_uint8_t part_maps[1608]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_aed { struct grub_udf_tag tag; grub_uint32_t prev_ae; grub_uint32_t ae_len; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_udf_data { diff --git a/grub-core/fs/ufs.c b/grub-core/fs/ufs.c index c9c2556d1..4a2161cc7 100644 --- a/grub-core/fs/ufs.c +++ b/grub-core/fs/ufs.c @@ -187,7 +187,7 @@ struct grub_ufs_inode }; grub_uint8_t unused[24]; -} __attribute__ ((packed)); +} GRUB_PACKED; #else /* UFS inode. */ struct grub_ufs_inode @@ -217,7 +217,7 @@ struct grub_ufs_inode grub_uint32_t gen; grub_uint32_t unused; grub_uint8_t pad[12]; -} __attribute__ ((packed)); +} GRUB_PACKED; #endif /* Directory entry. */ @@ -234,7 +234,7 @@ struct grub_ufs_dirent grub_uint8_t namelen_bsd; }; }; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Information about a "mounted" ufs filesystem. */ struct grub_ufs_data diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c index 7cd3e07bf..16ffd3f1e 100644 --- a/grub-core/fs/xfs.c +++ b/grub-core/fs/xfs.c @@ -54,7 +54,7 @@ struct grub_xfs_sblock grub_uint8_t log2_agblk; grub_uint8_t unused6[67]; grub_uint8_t log2_dirblk; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_xfs_dir_header { @@ -64,8 +64,8 @@ struct grub_xfs_dir_header { grub_uint32_t i4; grub_uint64_t i8; - } parent __attribute__ ((packed)); -} __attribute__ ((packed)); + } GRUB_PACKED parent; +} GRUB_PACKED; struct grub_xfs_dir_entry { @@ -73,13 +73,13 @@ struct grub_xfs_dir_entry grub_uint16_t offset; char name[1]; /* Inode number follows, 32 bits. */ -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_xfs_dir2_entry { grub_uint64_t inode; grub_uint8_t len; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef grub_uint32_t grub_xfs_extent[4]; @@ -91,20 +91,20 @@ struct grub_xfs_btree_node grub_uint64_t left; grub_uint64_t right; grub_uint64_t keys[1]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_xfs_btree_root { grub_uint16_t level; grub_uint16_t numrecs; grub_uint64_t keys[1]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_xfs_time { grub_uint32_t sec; grub_uint32_t nanosec; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_xfs_inode { @@ -133,14 +133,14 @@ struct grub_xfs_inode } dir; grub_xfs_extent extents[XFS_INODE_EXTENTS]; struct grub_xfs_btree_root btree; - } data __attribute__ ((packed)); -} __attribute__ ((packed)); + } GRUB_PACKED data; +} GRUB_PACKED; struct grub_xfs_dirblock_tail { grub_uint32_t leaf_count; grub_uint32_t leaf_stale; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_fshelp_node { diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c index 4d0bde4ce..cfb25c030 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -293,9 +293,13 @@ static grub_err_t zlib_decompress (void *s, void *d, grub_size_t slen, grub_size_t dlen) { - if (grub_zlib_decompress (s, slen, 0, d, dlen) < 0) - return grub_errno; - return GRUB_ERR_NONE; + if (grub_zlib_decompress (s, slen, 0, d, dlen) == (grub_ssize_t) dlen) + return GRUB_ERR_NONE; + + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + return grub_errno; } static grub_err_t diff --git a/grub-core/fs/zfs/zfs_lz4.c b/grub-core/fs/zfs/zfs_lz4.c index dde2c7195..1212a8986 100644 --- a/grub-core/fs/zfs/zfs_lz4.c +++ b/grub-core/fs/zfs/zfs_lz4.c @@ -77,13 +77,13 @@ typedef grub_size_t size_t; typedef struct _U16_S { U16 v; -} __attribute__ ((packed)) U16_S; +} GRUB_PACKED U16_S; typedef struct _U32_S { U32 v; -} __attribute__ ((packed)) U32_S; +} GRUB_PACKED U32_S; typedef struct _U64_S { U64 v; -} __attribute__ ((packed)) U64_S; +} GRUB_PACKED U64_S; #define A64(x) (((U64_S *)(x))->v) #define A32(x) (((U32_S *)(x))->v) diff --git a/grub-core/genmod.sh.in b/grub-core/genmod.sh.in index 40a3bc3e5..789732b10 100644 --- a/grub-core/genmod.sh.in +++ b/grub-core/genmod.sh.in @@ -53,9 +53,6 @@ if test x@TARGET_APPLE_LINKER@ != x1; then fi rm -f $t1 $t2 - if ! test -z "${TARGET_OBJ2ELF}"; then - "${TARGET_OBJ2ELF}" $tmpfile || exit 1 - fi if test x@platform@ != xemu; then @TARGET_STRIP@ --strip-unneeded \ -K grub_mod_init -K grub_mod_fini \ @@ -63,6 +60,9 @@ if test x@TARGET_APPLE_LINKER@ != x1; then -R .note.gnu.gold-version -R .note.GNU-stack \ -R .note -R .comment $tmpfile || exit 1 fi + if ! test -z "${TARGET_OBJ2ELF}"; then + "${TARGET_OBJ2ELF}" $tmpfile || exit 1 + fi else tmpfile2=${outfile}.tmp2 t1=${outfile}.t1.c diff --git a/grub-core/genmoddep.awk b/grub-core/genmoddep.awk index 2e6af05a7..2f32465c4 100644 --- a/grub-core/genmoddep.awk +++ b/grub-core/genmoddep.awk @@ -14,26 +14,24 @@ # Read symbols' info from stdin. BEGIN { error = 0 - lineno = 0; - while (getline <"/dev/stdin") { - lineno++; - if ($1 == "defined") { - symtab[$3] = $2; - modtab[$2] = "" modtab[$2] - } else if ($1 == "undefined") { - if ($3 in symtab) - modtab[$2] = modtab[$2] " " symtab[$3]; - else if ($3 != "__gnu_local_gp" && $3 != "_gp_disp") { - printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr"; - error++; - } - } - else { - printf "error: %u: unrecognized input format\n", lineno; +} + +{ + if ($1 == "defined") { + symtab[$3] = $2; + modtab[$2] = "" modtab[$2] + } else if ($1 == "undefined") { + if ($3 in symtab) + modtab[$2] = modtab[$2] " " symtab[$3]; + else if ($3 != "__gnu_local_gp" && $3 != "_gp_disp") { + printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr"; error++; - break; } } + else { + printf "error: %u: unrecognized input format\n", NR; + error++; + } } # Output the result. diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c index 59ad6daff..129209e37 100644 --- a/grub-core/io/gzio.c +++ b/grub-core/io/gzio.c @@ -1093,7 +1093,7 @@ inflate_window (grub_gzio_t gzio) } } - gzio->saved_offset += WSIZE; + gzio->saved_offset += gzio->wp; /* XXX do CRC calculation here! */ } @@ -1219,7 +1219,14 @@ grub_gzio_read_real (grub_gzio_t gzio, grub_off_t offset, register char *srcaddr; while (offset >= gzio->saved_offset) - inflate_window (gzio); + { + inflate_window (gzio); + if (gzio->wp == 0) + goto out; + } + + if (gzio->wp == 0) + goto out; srcaddr = (char *) ((offset & (WSIZE - 1)) + gzio->slide); size = gzio->saved_offset - offset; @@ -1234,6 +1241,7 @@ grub_gzio_read_real (grub_gzio_t gzio, grub_off_t offset, offset += size; } + out: if (grub_errno != GRUB_ERR_NONE) ret = -1; @@ -1243,7 +1251,15 @@ grub_gzio_read_real (grub_gzio_t gzio, grub_off_t offset, static grub_ssize_t grub_gzio_read (grub_file_t file, char *buf, grub_size_t len) { - return grub_gzio_read_real (file->data, file->offset, buf, len); + grub_ssize_t ret; + ret = grub_gzio_read_real (file->data, file->offset, buf, len); + + if (!grub_errno && ret != (grub_ssize_t) len) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "premature end of compressed"); + ret = -1; + } + return ret; } /* Release everything, including the underlying file object. */ @@ -1259,6 +1275,7 @@ grub_gzio_close (grub_file_t file) /* No need to close the same device twice. */ file->device = 0; + file->name = 0; return grub_errno; } @@ -1290,6 +1307,28 @@ grub_zlib_decompress (char *inbuf, grub_size_t insize, grub_off_t off, return ret; } +grub_ssize_t +grub_deflate_decompress (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t outsize) +{ + grub_gzio_t gzio = 0; + grub_ssize_t ret; + + gzio = grub_zalloc (sizeof (*gzio)); + if (! gzio) + return -1; + gzio->mem_input = (grub_uint8_t *) inbuf; + gzio->mem_input_size = insize; + gzio->mem_input_off = 0; + + initialize_tables (gzio); + + ret = grub_gzio_read_real (gzio, off, outbuf, outsize); + grub_free (gzio); + + return ret; +} + static struct grub_fs grub_gzio_fs = diff --git a/grub-core/io/lzopio.c b/grub-core/io/lzopio.c index 2895e2102..de2ea6778 100644 --- a/grub-core/io/lzopio.c +++ b/grub-core/io/lzopio.c @@ -290,7 +290,7 @@ struct lzop_header grub_uint32_t mtime_lo; grub_uint32_t mtime_hi; grub_uint8_t name_len; -} __attribute__ ((packed)); +} GRUB_PACKED; static int test_header (grub_file_t file) @@ -525,6 +525,7 @@ grub_lzopio_close (grub_file_t file) /* Device must not be closed twice. */ file->device = 0; + file->name = 0; return grub_errno; } diff --git a/grub-core/io/xzio.c b/grub-core/io/xzio.c index bcce24290..a3536ad73 100644 --- a/grub-core/io/xzio.c +++ b/grub-core/io/xzio.c @@ -74,15 +74,15 @@ static grub_ssize_t read_vli (grub_file_t file, grub_uint64_t *num) { grub_uint8_t buf[VLI_MAX_DIGITS]; - grub_ssize_t read; + grub_ssize_t read_bytes; grub_size_t dec; - read = grub_file_read (file, buf, VLI_MAX_DIGITS); - if (read < 0) + read_bytes = grub_file_read (file, buf, VLI_MAX_DIGITS); + if (read_bytes < 0) return -1; - dec = decode_vli (buf, read, num); - grub_file_seek (file, file->offset - (read - dec)); + dec = decode_vli (buf, read_bytes, num); + grub_file_seek (file, file->offset - (read_bytes - dec)); return dec; } @@ -319,6 +319,7 @@ grub_xzio_close (grub_file_t file) /* Device must not be closed twice. */ file->device = 0; + file->name = 0; return grub_errno; } diff --git a/grub-core/kern/arm/cache.S b/grub-core/kern/arm/cache.S index 2ad774d90..3763b7800 100644 --- a/grub-core/kern/arm/cache.S +++ b/grub-core/kern/arm/cache.S @@ -95,7 +95,8 @@ FUNCTION(grub_arch_sync_caches_armv7) bl clean_dcache_range pop {r0, r1} bl invalidate_icache_range - pop {r2, pc} + pop {r2, lr} + bx lr #ifdef ARMV6 FUNCTION(grub_arm_disable_caches_mmu_armv6) @@ -137,5 +138,6 @@ FUNCTION(grub_arm_disable_caches_mmu_armv7) DSB ISB - pop {r4, pc} + pop {r4, lr} + bx lr diff --git a/grub-core/kern/arm/cache_armv7.S b/grub-core/kern/arm/cache_armv7.S index aa42fad81..1ef2754af 100644 --- a/grub-core/kern/arm/cache_armv7.S +++ b/grub-core/kern/arm/cache_armv7.S @@ -120,6 +120,7 @@ clean_invalidate_dcache: @ return 6: DSB ISB - pop {r4-r12, pc} + pop {r4-r12, lr} + bx lr #include "cache.S" \ No newline at end of file diff --git a/grub-core/kern/arm/dl.c b/grub-core/kern/arm/dl.c index 26da0ac22..57cac2e75 100644 --- a/grub-core/kern/arm/dl.c +++ b/grub-core/kern/arm/dl.c @@ -210,10 +210,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, /* Thumb instructions can be 16-bit aligned */ grub_int32_t offset; - if (!(sym_addr & 1)) - return grub_error (GRUB_ERR_BAD_MODULE, - N_("Relocation targeting wrong execution state")); - sym_addr += grub_arm_thm_jump19_get_offset ((grub_uint16_t *) target); offset = sym_addr - (grub_uint32_t) target; diff --git a/grub-core/kern/arm/uboot/startup.S b/grub-core/kern/arm/uboot/startup.S index 3e1c1f2d6..0c4a5f670 100644 --- a/grub-core/kern/arm/uboot/startup.S +++ b/grub-core/kern/arm/uboot/startup.S @@ -135,14 +135,17 @@ FUNCTION(grub_uboot_syscall) ldr r8, gd_backup ldr r9, gd_backup + 4 - mov lr, pc - ldr pc, grub_uboot_syscall_ptr + bl do_syscall ldr r8, transition_space ldr lr, transition_space + 4 ldr r9, transition_space + 8 bx lr +do_syscall: + + ldr ip, grub_uboot_syscall_ptr + bx ip FUNCTION(grub_uboot_return) adr sp, entry_state_end diff --git a/grub-core/kern/arm64/dl.c b/grub-core/kern/arm64/dl.c index 07756110d..e19ba6a0d 100644 --- a/grub-core/kern/arm64/dl.c +++ b/grub-core/kern/arm64/dl.c @@ -149,7 +149,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, if (!grub_arm_64_check_xxxx26_offset (offset)) return grub_error (GRUB_ERR_BAD_MODULE, - N_("Trampoline out of range")); + "trampoline out of range"); grub_arm64_set_xxxx26_offset (place, offset); } diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c index ef9e2667c..16873cc16 100644 --- a/grub-core/kern/dl.c +++ b/grub-core/kern/dl.c @@ -229,7 +229,7 @@ grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e) unsigned i; Elf_Shdr *s; grub_size_t tsize = 0, talign = 1; -#if !defined (__i386__) && !defined (__x86_64__) && !defined (__sparc__) +#if !defined (__i386__) && !defined (__x86_64__) grub_size_t tramp; grub_size_t got; grub_err_t err; @@ -245,7 +245,7 @@ grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e) talign = s->sh_addralign; } -#if !defined (__i386__) && !defined (__x86_64__) && !defined (__sparc__) +#if !defined (__i386__) && !defined (__x86_64__) err = grub_arch_dl_get_tramp_got_size (e, &tramp, &got); if (err) return err; @@ -308,7 +308,7 @@ grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e) mod->segment = seg; } } -#if !defined (__i386__) && !defined (__x86_64__) && !defined (__sparc__) +#if !defined (__i386__) && !defined (__x86_64__) ptr = (char *) ALIGN_UP ((grub_addr_t) ptr, GRUB_ARCH_DL_TRAMP_ALIGN); mod->tramp = ptr; mod->trampptr = ptr; diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c index c36c8d445..ef09b3474 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -473,20 +473,19 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) break; case GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE: { - grub_efi_vendor_device_path_t vendor; - grub_memcpy (&vendor, dp, sizeof (vendor)); + grub_efi_vendor_device_path_t *vendor = (grub_efi_vendor_device_path_t *) dp; grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", - (unsigned) vendor.vendor_guid.data1, - (unsigned) vendor.vendor_guid.data2, - (unsigned) vendor.vendor_guid.data3, - (unsigned) vendor.vendor_guid.data4[0], - (unsigned) vendor.vendor_guid.data4[1], - (unsigned) vendor.vendor_guid.data4[2], - (unsigned) vendor.vendor_guid.data4[3], - (unsigned) vendor.vendor_guid.data4[4], - (unsigned) vendor.vendor_guid.data4[5], - (unsigned) vendor.vendor_guid.data4[6], - (unsigned) vendor.vendor_guid.data4[7]); + (unsigned) vendor->vendor_guid.data1, + (unsigned) vendor->vendor_guid.data2, + (unsigned) vendor->vendor_guid.data3, + (unsigned) vendor->vendor_guid.data4[0], + (unsigned) vendor->vendor_guid.data4[1], + (unsigned) vendor->vendor_guid.data4[2], + (unsigned) vendor->vendor_guid.data4[3], + (unsigned) vendor->vendor_guid.data4[4], + (unsigned) vendor->vendor_guid.data4[5], + (unsigned) vendor->vendor_guid.data4[6], + (unsigned) vendor->vendor_guid.data4[7]); } break; case GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE: @@ -587,7 +586,7 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) grub_memcpy (&usb, dp, len); grub_printf ("/USB(%x,%x)", (unsigned) usb.parent_port_number, - (unsigned) usb.interface); + (unsigned) usb.usb_interface); } break; case GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE: @@ -693,20 +692,20 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) break; case GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE: { - grub_efi_vendor_messaging_device_path_t vendor; - grub_memcpy (&vendor, dp, sizeof (vendor)); + grub_efi_vendor_messaging_device_path_t *vendor + = (grub_efi_vendor_messaging_device_path_t *) dp; grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", - (unsigned) vendor.vendor_guid.data1, - (unsigned) vendor.vendor_guid.data2, - (unsigned) vendor.vendor_guid.data3, - (unsigned) vendor.vendor_guid.data4[0], - (unsigned) vendor.vendor_guid.data4[1], - (unsigned) vendor.vendor_guid.data4[2], - (unsigned) vendor.vendor_guid.data4[3], - (unsigned) vendor.vendor_guid.data4[4], - (unsigned) vendor.vendor_guid.data4[5], - (unsigned) vendor.vendor_guid.data4[6], - (unsigned) vendor.vendor_guid.data4[7]); + (unsigned) vendor->vendor_guid.data1, + (unsigned) vendor->vendor_guid.data2, + (unsigned) vendor->vendor_guid.data3, + (unsigned) vendor->vendor_guid.data4[0], + (unsigned) vendor->vendor_guid.data4[1], + (unsigned) vendor->vendor_guid.data4[2], + (unsigned) vendor->vendor_guid.data4[3], + (unsigned) vendor->vendor_guid.data4[4], + (unsigned) vendor->vendor_guid.data4[5], + (unsigned) vendor->vendor_guid.data4[6], + (unsigned) vendor->vendor_guid.data4[7]); } break; default: @@ -720,22 +719,21 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) { case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE: { - grub_efi_hard_drive_device_path_t hd; - grub_memcpy (&hd, dp, len); + grub_efi_hard_drive_device_path_t *hd = (grub_efi_hard_drive_device_path_t *) dp; grub_printf ("/HD(%u,%llx,%llx,%02x%02x%02x%02x%02x%02x%02x%02x,%x,%x)", - hd.partition_number, - (unsigned long long) hd.partition_start, - (unsigned long long) hd.partition_size, - (unsigned) hd.partition_signature[0], - (unsigned) hd.partition_signature[1], - (unsigned) hd.partition_signature[2], - (unsigned) hd.partition_signature[3], - (unsigned) hd.partition_signature[4], - (unsigned) hd.partition_signature[5], - (unsigned) hd.partition_signature[6], - (unsigned) hd.partition_signature[7], - (unsigned) hd.mbr_type, - (unsigned) hd.signature_type); + hd->partition_number, + (unsigned long long) hd->partition_start, + (unsigned long long) hd->partition_size, + (unsigned) hd->partition_signature[0], + (unsigned) hd->partition_signature[1], + (unsigned) hd->partition_signature[2], + (unsigned) hd->partition_signature[3], + (unsigned) hd->partition_signature[4], + (unsigned) hd->partition_signature[5], + (unsigned) hd->partition_signature[6], + (unsigned) hd->partition_signature[7], + (unsigned) hd->partmap_type, + (unsigned) hd->signature_type); } break; case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE: @@ -750,20 +748,20 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) break; case GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE: { - grub_efi_vendor_media_device_path_t vendor; - grub_memcpy (&vendor, dp, sizeof (vendor)); + grub_efi_vendor_device_path_t *vendor = (grub_efi_vendor_device_path_t *) dp; + grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", - (unsigned) vendor.vendor_guid.data1, - (unsigned) vendor.vendor_guid.data2, - (unsigned) vendor.vendor_guid.data3, - (unsigned) vendor.vendor_guid.data4[0], - (unsigned) vendor.vendor_guid.data4[1], - (unsigned) vendor.vendor_guid.data4[2], - (unsigned) vendor.vendor_guid.data4[3], - (unsigned) vendor.vendor_guid.data4[4], - (unsigned) vendor.vendor_guid.data4[5], - (unsigned) vendor.vendor_guid.data4[6], - (unsigned) vendor.vendor_guid.data4[7]); + (unsigned) vendor->vendor_guid.data1, + (unsigned) vendor->vendor_guid.data2, + (unsigned) vendor->vendor_guid.data3, + (unsigned) vendor->vendor_guid.data4[0], + (unsigned) vendor->vendor_guid.data4[1], + (unsigned) vendor->vendor_guid.data4[2], + (unsigned) vendor->vendor_guid.data4[3], + (unsigned) vendor->vendor_guid.data4[4], + (unsigned) vendor->vendor_guid.data4[5], + (unsigned) vendor->vendor_guid.data4[6], + (unsigned) vendor->vendor_guid.data4[7]); } break; case GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE: diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c index 0b24dae8b..ddeca6073 100644 --- a/grub-core/kern/efi/mm.c +++ b/grub-core/kern/efi/mm.c @@ -21,6 +21,7 @@ #include #include #include +#include #if defined (__i386__) || defined (__x86_64__) #include @@ -30,14 +31,9 @@ ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) #define BYTES_TO_PAGES(bytes) (((bytes) + 0xfff) >> 12) +#define BYTES_TO_PAGES_DOWN(bytes) ((bytes) >> 12) #define PAGES_TO_BYTES(pages) ((pages) << 12) -#if defined (__code_model_large__) || !defined (__x86_64__) -#define MAX_USABLE_ADDRESS 0xffffffff -#else -#define MAX_USABLE_ADDRESS 0x7fffffff -#endif - /* The size of a memory map obtained from the firmware. This must be a multiplier of 4KB. */ #define MEMORY_MAP_SIZE 0x3000 @@ -96,7 +92,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address, #if 1 /* Limit the memory access to less than 4GB for 32-bit platforms. */ - if (address > MAX_USABLE_ADDRESS) + if (address > GRUB_EFI_MAX_USABLE_ADDRESS) return 0; #endif @@ -104,7 +100,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address, if (address == 0) { type = GRUB_EFI_ALLOCATE_MAX_ADDRESS; - address = MAX_USABLE_ADDRESS; + address = GRUB_EFI_MAX_USABLE_ADDRESS; } else type = GRUB_EFI_ALLOCATE_ADDRESS; @@ -124,7 +120,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address, { /* Uggh, the address 0 was allocated... This is too annoying, so reallocate another one. */ - address = MAX_USABLE_ADDRESS; + address = GRUB_EFI_MAX_USABLE_ADDRESS; status = efi_call_4 (b->allocate_pages, type, GRUB_EFI_LOADER_DATA, pages, &address); grub_efi_free_pages (0, pages); if (status != GRUB_EFI_SUCCESS) @@ -357,7 +353,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map, { if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY #if 1 - && desc->physical_start <= MAX_USABLE_ADDRESS + && desc->physical_start <= GRUB_EFI_MAX_USABLE_ADDRESS #endif && desc->physical_start + PAGES_TO_BYTES (desc->num_pages) > 0x100000 && desc->num_pages != 0) @@ -375,9 +371,9 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map, #if 1 if (BYTES_TO_PAGES (filtered_desc->physical_start) + filtered_desc->num_pages - > BYTES_TO_PAGES (MAX_USABLE_ADDRESS+1LL)) + > BYTES_TO_PAGES_DOWN (GRUB_EFI_MAX_USABLE_ADDRESS)) filtered_desc->num_pages - = (BYTES_TO_PAGES (MAX_USABLE_ADDRESS+1LL) + = (BYTES_TO_PAGES_DOWN (GRUB_EFI_MAX_USABLE_ADDRESS) - BYTES_TO_PAGES (filtered_desc->physical_start)); #endif diff --git a/grub-core/kern/elfXX.c b/grub-core/kern/elfXX.c index 2e4544919..1d0997186 100644 --- a/grub-core/kern/elfXX.c +++ b/grub-core/kern/elfXX.c @@ -141,7 +141,7 @@ grub_elfXX_load (grub_elf_t elf, const char *filename, } if (phdr->p_filesz < phdr->p_memsz) - grub_memset ((void *) (long) (load_addr + phdr->p_filesz), + grub_memset ((void *) (grub_addr_t) (load_addr + phdr->p_filesz), 0, phdr->p_memsz - phdr->p_filesz); load_size += phdr->p_memsz; diff --git a/grub-core/kern/emu/cache.c b/grub-core/kern/emu/cache.c index b6f6faca2..07be6756f 100644 --- a/grub-core/kern/emu/cache.c +++ b/grub-core/kern/emu/cache.c @@ -1,7 +1,12 @@ +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif #include -#if defined(__ia64__) || defined (__arm__) || defined (__aarch64__) +#if defined(__ia64__) +#include "../ia64/cache.c" +#elif defined (__arm__) || defined (__aarch64__) void __clear_cache (char *beg, char *end); diff --git a/grub-core/kern/emu/full.c b/grub-core/kern/emu/full.c index 03888d8ec..e8d63b1f5 100644 --- a/grub-core/kern/emu/full.c +++ b/grub-core/kern/emu/full.c @@ -49,7 +49,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, return GRUB_ERR_BAD_MODULE; } -#if !defined (__i386__) && !defined (__x86_64__) && !defined (__sparc__) +#if !defined (__i386__) && !defined (__x86_64__) grub_err_t grub_arch_dl_get_tramp_got_size (const void *ehdr __attribute__ ((unused)), grub_size_t *tramp, grub_size_t *got) diff --git a/grub-core/kern/emu/hostdisk.c b/grub-core/kern/emu/hostdisk.c index a2ff51110..e538b36e5 100644 --- a/grub-core/kern/emu/hostdisk.c +++ b/grub-core/kern/emu/hostdisk.c @@ -171,8 +171,8 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk) grub_util_fd_close (fd); - grub_util_info ("the size of %s is %" PRIuGRUB_UINT64_T, - name, disk->total_sectors); + grub_util_info ("the size of %s is %" GRUB_HOST_PRIuLONG_LONG, + name, (unsigned long long) disk->total_sectors); return GRUB_ERR_NONE; } diff --git a/grub-core/kern/i386/coreboot/cbtable.c b/grub-core/kern/i386/coreboot/cbtable.c index 6cdfc9645..e3bb7b2e0 100644 --- a/grub-core/kern/i386/coreboot/cbtable.c +++ b/grub-core/kern/i386/coreboot/cbtable.c @@ -60,12 +60,12 @@ grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t, signature_found: table_item = - (grub_linuxbios_table_item_t) ((long) table_header + - (long) table_header->header_size); - for (; table_item < (grub_linuxbios_table_item_t) ((long) table_header - + (long) table_header->header_size - + (long) table_header->table_size); - table_item = (grub_linuxbios_table_item_t) ((long) table_item + (long) table_item->size)) + (grub_linuxbios_table_item_t) ((char *) table_header + + table_header->header_size); + for (; table_item < (grub_linuxbios_table_item_t) ((char *) table_header + + table_header->header_size + + table_header->table_size); + table_item = (grub_linuxbios_table_item_t) ((char *) table_item + table_item->size)) { if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK && check_signature ((grub_linuxbios_table_header_t) (grub_addr_t) diff --git a/grub-core/kern/i386/coreboot/startup.S b/grub-core/kern/i386/coreboot/startup.S index eb3dd9460..8c3283846 100644 --- a/grub-core/kern/i386/coreboot/startup.S +++ b/grub-core/kern/i386/coreboot/startup.S @@ -66,5 +66,3 @@ multiboot_header: * only needed for BIOS gates). */ #include "../realmode.S" - -#include "../int.S" diff --git a/grub-core/kern/i386/pc/mmap.c b/grub-core/kern/i386/pc/mmap.c index b34cbad03..8009e833c 100644 --- a/grub-core/kern/i386/pc/mmap.c +++ b/grub-core/kern/i386/pc/mmap.c @@ -33,7 +33,7 @@ struct grub_machine_mmap_entry #define GRUB_MACHINE_MEMORY_NVS 4 #define GRUB_MACHINE_MEMORY_BADRAM 5 grub_uint32_t type; -} __attribute__((packed)); +} GRUB_PACKED; /* diff --git a/grub-core/kern/i386/qemu/init.c b/grub-core/kern/i386/qemu/init.c index 09da1e97f..271b6fbfa 100644 --- a/grub-core/kern/i386/qemu/init.c +++ b/grub-core/kern/i386/qemu/init.c @@ -85,9 +85,9 @@ heap_init (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type, struct resource { grub_pci_device_t dev; - int type; grub_size_t size; - int bar; + unsigned type:4; + unsigned bar:3; }; struct iterator_ctx diff --git a/grub-core/kern/i386/xen/hypercall.S b/grub-core/kern/i386/xen/hypercall.S index aa47cac2c..09d75c3a5 100644 --- a/grub-core/kern/i386/xen/hypercall.S +++ b/grub-core/kern/i386/xen/hypercall.S @@ -40,4 +40,4 @@ FUNCTION(grub_xen_hypercall) popl %edi popl %esi popl %ebp - retl $16 + ret diff --git a/grub-core/kern/ia64/dl.c b/grub-core/kern/ia64/dl.c index e623cdc81..ad79eb525 100644 --- a/grub-core/kern/ia64/dl.c +++ b/grub-core/kern/ia64/dl.c @@ -26,6 +26,7 @@ #include #define MASK19 ((1 << 19) - 1) +#define MASK20 ((1 << 20) - 1) /* Check if EHDR is a valid ELF header. */ grub_err_t @@ -76,15 +77,20 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, { case R_IA64_PCREL21B: { - grub_uint64_t noff; - struct grub_ia64_trampoline *tr = mod->trampptr; - grub_ia64_make_trampoline (tr, value); - noff = ((char *) tr - (char *) (addr & ~3)) >> 4; - mod->trampptr = tr + 1; + grub_int64_t noff; + if (ELF_ST_TYPE (sym->st_info) == STT_FUNC) + { + struct grub_ia64_trampoline *tr = mod->trampptr; + grub_ia64_make_trampoline (tr, value); + noff = ((char *) tr - (char *) (addr & ~3)) >> 4; + mod->trampptr = tr + 1; + } + else + noff = ((char *) value - (char *) (addr & ~3)) >> 4; - if (noff & ~MASK19) - return grub_error (GRUB_ERR_BAD_OS, - "trampoline offset too big (%lx)", noff); + if ((noff & ~MASK19) && ((-noff) & ~MASK19)) + return grub_error (GRUB_ERR_BAD_MODULE, + "jump offset too big (%lx)", noff); grub_ia64_add_value_to_slot_20b (addr, noff); } break; @@ -99,6 +105,10 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, *(grub_uint64_t *) addr += value - addr; break; case R_IA64_GPREL22: + if ((value - (grub_addr_t) mod->base) & ~MASK20) + return grub_error (GRUB_ERR_BAD_MODULE, + "gprel offset too big (%lx)", + value - (grub_addr_t) mod->base); grub_ia64_add_value_to_slot_21 (addr, value - (grub_addr_t) mod->base); break; @@ -110,6 +120,10 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, { grub_uint64_t *gpptr = mod->gotptr; *gpptr = value; + if (((grub_addr_t) gpptr - (grub_addr_t) mod->base) & ~MASK20) + return grub_error (GRUB_ERR_BAD_MODULE, + "gprel offset too big (%lx)", + (grub_addr_t) gpptr - (grub_addr_t) mod->base); grub_ia64_add_value_to_slot_21 (addr, (grub_addr_t) gpptr - (grub_addr_t) mod->base); mod->gotptr = gpptr + 1; break; diff --git a/grub-core/kern/ia64/dl_helper.c b/grub-core/kern/ia64/dl_helper.c index 0bebe60e0..c7e53a679 100644 --- a/grub-core/kern/ia64/dl_helper.c +++ b/grub-core/kern/ia64/dl_helper.c @@ -173,20 +173,10 @@ grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, grub_size_t *got) { const Elf64_Ehdr *e = ehdr; - grub_size_t cntt = 0, cntg = 0;; + grub_size_t cntt = 0, cntg = 0; const Elf64_Shdr *s; unsigned i; - /* Find a symbol table. */ - for (i = 0, s = (Elf64_Shdr *) ((char *) e + grub_le_to_cpu64 (e->e_shoff)); - i < grub_le_to_cpu16 (e->e_shnum); - i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize))) - if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_SYMTAB)) - break; - - if (i == grub_le_to_cpu16 (e->e_shnum)) - return GRUB_ERR_NONE; - for (i = 0, s = (Elf64_Shdr *) ((char *) e + grub_le_to_cpu64 (e->e_shoff)); i < grub_le_to_cpu16 (e->e_shnum); i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize))) diff --git a/grub-core/kern/mips/loongson/init.c b/grub-core/kern/mips/loongson/init.c index d2f579588..7b96531b9 100644 --- a/grub-core/kern/mips/loongson/init.c +++ b/grub-core/kern/mips/loongson/init.c @@ -129,12 +129,19 @@ grub_machine_init (void) /* Loongson 2E. */ case 0x6302: grub_arch_machine = GRUB_ARCH_MACHINE_FULOONG2E; + grub_bonito_type = GRUB_BONITO_2F; break; /* Loongson 2F. */ case 0x6303: if (grub_arch_machine != GRUB_ARCH_MACHINE_FULOONG2F && grub_arch_machine != GRUB_ARCH_MACHINE_YEELOONG) grub_arch_machine = GRUB_ARCH_MACHINE_YEELOONG; + grub_bonito_type = GRUB_BONITO_2F; + break; + /* Loongson 3A. */ + case 0x6305: + grub_arch_machine = GRUB_ARCH_MACHINE_YEELOONG_3A; + grub_bonito_type = GRUB_BONITO_3A; break; } @@ -203,11 +210,13 @@ grub_machine_init (void) grub_video_sm712_init (); grub_video_sis315pro_init (); grub_video_radeon_fuloong2e_init (); + grub_video_radeon_yeeloong3a_init (); grub_font_init (); grub_gfxterm_init (); grub_keylayouts_init (); - if (grub_arch_machine == GRUB_ARCH_MACHINE_YEELOONG) + if (grub_arch_machine == GRUB_ARCH_MACHINE_YEELOONG + || grub_arch_machine == GRUB_ARCH_MACHINE_YEELOONG_3A) grub_at_keyboard_init (); grub_terminfo_init (); @@ -280,6 +289,13 @@ grub_halt (void) & ~GRUB_CPU_YEELOONG_SHUTDOWN_GPIO, GRUB_CPU_LOONGSON_GPIOCFG); grub_millisleep (1500); break; + case GRUB_ARCH_MACHINE_YEELOONG_3A: + grub_millisleep (1); + grub_outb (0x4e, GRUB_MACHINE_PCI_IO_BASE_3A | 0x66); + grub_millisleep (1); + grub_outb (2, GRUB_MACHINE_PCI_IO_BASE_3A | 0x62); + grub_millisleep (5000); + break; } grub_puts_ (N_("Shutdown failed")); diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c index 05cb1faf7..54db2e125 100644 --- a/grub-core/kern/misc.c +++ b/grub-core/kern/misc.c @@ -1283,7 +1283,7 @@ grub_fatal (const char *fmt, ...) grub_abort (); } -#if NEED_REGISTER_FRAME_INFO && !defined(GRUB_UTIL) +#if (defined (__MINGW32__) || defined (__CYGWIN__)) && !defined(GRUB_UTIL) void __register_frame_info (void) { } @@ -1291,6 +1291,13 @@ void __register_frame_info (void) void __deregister_frame_info (void) { } +void ___chkstk_ms (void) +{ +} + +void __chkstk_ms (void) +{ +} #endif #if BOOT_TIME_STATS diff --git a/grub-core/kern/powerpc/dl.c b/grub-core/kern/powerpc/dl.c index ec204f35b..3a7fa3ed3 100644 --- a/grub-core/kern/powerpc/dl.c +++ b/grub-core/kern/powerpc/dl.c @@ -68,16 +68,6 @@ grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, *tramp = 0; *got = 0; - /* Find a symbol table. */ - for (i = 0, s = (const Elf_Shdr *) ((const char *) e + e->e_shoff); - i < e->e_shnum; - i++, s = (const Elf_Shdr *) ((const char *) s + e->e_shentsize)) - if (s->sh_type == SHT_SYMTAB) - break; - - if (i == e->e_shnum) - return GRUB_ERR_NONE; - for (i = 0, s = (const Elf_Shdr *) ((const char *) e + e->e_shoff); i < e->e_shnum; i++, s = (const Elf_Shdr *) ((const char *) s + e->e_shentsize)) diff --git a/grub-core/kern/sparc64/dl.c b/grub-core/kern/sparc64/dl.c index fa086ff5c..d25c15e10 100644 --- a/grub-core/kern/sparc64/dl.c +++ b/grub-core/kern/sparc64/dl.c @@ -40,6 +40,61 @@ grub_arch_dl_check_header (void *ehdr) #pragma GCC diagnostic ignored "-Wcast-align" +struct trampoline +{ + grub_uint8_t code[0x28]; + grub_uint64_t addr; +}; + +static const grub_uint8_t trampoline_code[0x28] = +{ + /* 0: */ 0x82, 0x10, 0x00, 0x0f, /* mov %o7, %g1 */ + /* 4: */ 0x40, 0x00, 0x00, 0x02, /* call 0xc */ + /* 8: */ 0x01, 0x00, 0x00, 0x00, /* nop */ + /* c: */ 0x9e, 0x1b, 0xc0, 0x01, /* xor %o7, %g1, %o7 */ + /* 10: */ 0x82, 0x18, 0x40, 0x0f, /* xor %g1, %o7, %g1 */ + /* 14: */ 0x9e, 0x1b, 0xc0, 0x01, /* xor %o7, %g1, %o7 */ + /* 18: */ 0xc2, 0x58, 0x60, 0x24, /* ldx [ %g1 + 0x24 ], %g1 */ + /* 1c: */ 0x81, 0xc0, 0x40, 0x00, /* jmp %g1 */ + /* 20: */ 0x01, 0x00, 0x00, 0x00, /* nop */ + /* 24: */ 0x01, 0x00, 0x00, 0x00, /* nop */ +}; + +grub_err_t +grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, + grub_size_t *got) +{ + const Elf_Ehdr *e = ehdr; + const Elf_Shdr *s; + unsigned i; + + *tramp = 0; + *got = 0; + + for (i = 0, s = (const Elf_Shdr *) ((grub_addr_t) e + e->e_shoff); + i < e->e_shnum; + i++, s = (const Elf_Shdr *) ((grub_addr_t) s + e->e_shentsize)) + if (s->sh_type == SHT_REL || s->sh_type == SHT_RELA) + { + const Elf_Rel *rel, *max; + + for (rel = (const Elf_Rel *) ((grub_addr_t) e + s->sh_offset), + max = rel + s->sh_size / s->sh_entsize; + rel < max; + rel = (const Elf_Rel *) ((grub_addr_t) rel + s->sh_entsize)) + switch (ELF_R_TYPE (rel->r_info)) + { + case R_SPARC_WDISP30: + { + *tramp += sizeof (struct trampoline); + break; + } + } + } + + return GRUB_ERR_NONE; +} + /* Relocate symbols. */ grub_err_t grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, @@ -74,6 +129,17 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, *addr = value; break; case R_SPARC_WDISP30: /* 7 V-disp30 */ + if (((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000) && + (((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000) + != 0xFFFFFFFF00000000)) + { + struct trampoline *tp = mod->trampptr; + mod->trampptr = tp + 1; + grub_memcpy (tp->code, trampoline_code, sizeof (tp->code)); + tp->addr = value; + value = (Elf_Addr) tp; + } + if (((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000) && (((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000) != 0xFFFFFFFF00000000)) @@ -90,6 +156,10 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, *addr = (*addr & 0xFFFFFC00) | ((value >> 32) & 0x3FF); break; case R_SPARC_HI22: /* 9 V-imm22 */ + if (value >> 32) + return grub_error (GRUB_ERR_BAD_MODULE, + "address out of 32 bits range"); + case R_SPARC_LM22: *addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF); break; case R_SPARC_LO10: /* 12 T-simm13 */ diff --git a/grub-core/kern/uboot/init.c b/grub-core/kern/uboot/init.c index 775b689e9..71bc21b8f 100644 --- a/grub-core/kern/uboot/init.c +++ b/grub-core/kern/uboot/init.c @@ -66,8 +66,7 @@ uboot_timer_ms (void) if (cur < last) high++; last = cur; - return grub_divmod64 ((((grub_uint64_t) high) << 32) | cur, - 1000, 0); + return (((grub_uint64_t) high) << 32) | cur; } void diff --git a/grub-core/kern/x86_64/dl.c b/grub-core/kern/x86_64/dl.c index e00e51d40..6cb88bfcc 100644 --- a/grub-core/kern/x86_64/dl.c +++ b/grub-core/kern/x86_64/dl.c @@ -80,6 +80,13 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, } break; + case R_X86_64_PC64: + { + *addr64 += rel->r_addend + sym->st_value - + (Elf64_Xword) seg->addr - rel->r_offset; + } + break; + case R_X86_64_32: { grub_uint64_t value = *addr32 + rel->r_addend + sym->st_value; diff --git a/grub-core/kern/x86_64/xen/startup.S b/grub-core/kern/x86_64/xen/startup.S index 7217ee57b..21a139f40 100644 --- a/grub-core/kern/x86_64/xen/startup.S +++ b/grub-core/kern/x86_64/xen/startup.S @@ -30,6 +30,7 @@ _start: leaq LOCAL(stack_end), %rsp movq %rsi, EXT_C(grub_xen_start_page_addr)(%rip) + andq $~0xf, %rsp call EXT_C(grub_main) /* Doesn't return. */ diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c index 1d8eaec1a..0559c033c 100644 --- a/grub-core/kern/xen/init.c +++ b/grub-core/kern/xen/init.c @@ -33,7 +33,7 @@ struct start_info *grub_xen_start_page_addr; volatile struct xencons_interface *grub_xen_xcons; volatile struct shared_info *grub_xen_shared_info; volatile struct xenstore_domain_interface *grub_xen_xenstore; -volatile grant_entry_v2_t *grub_xen_grant_table; +volatile grant_entry_v1_t *grub_xen_grant_table; static const grub_size_t total_grants = GRUB_XEN_PAGE_SIZE / sizeof (grub_xen_grant_table[0]); grub_size_t grub_xen_n_allocated_shared_pages; @@ -51,12 +51,12 @@ grub_xen_alloc_shared_page (domid_t dom, grub_xen_grant_t * grnum) { void *ret; grub_xen_mfn_t mfn; - volatile grant_entry_v2_t *entry; + volatile grant_entry_v1_t *entry; /* Avoid 0. */ for (entry = grub_xen_grant_table; entry < grub_xen_grant_table + total_grants; entry++) - if (!entry->hdr.flags) + if (!entry->flags) break; if (entry == grub_xen_grant_table + total_grants) @@ -68,11 +68,10 @@ grub_xen_alloc_shared_page (domid_t dom, grub_xen_grant_t * grnum) if (!ret) return NULL; mfn = grub_xen_ptr2mfn (ret); - entry->full_page.pad0 = 0; - entry->full_page.frame = mfn; - entry->full_page.hdr.domid = dom; + entry->frame = mfn; + entry->domid = dom; mb (); - entry->full_page.hdr.flags = GTF_permit_access; + entry->flags = GTF_permit_access; mb (); *grnum = entry - grub_xen_grant_table; grub_xen_n_allocated_shared_pages++; @@ -83,17 +82,17 @@ void grub_xen_free_shared_page (void *ptr) { grub_xen_mfn_t mfn; - volatile grant_entry_v2_t *entry; + volatile grant_entry_v1_t *entry; mfn = grub_xen_ptr2mfn (ptr); for (entry = grub_xen_grant_table + 1; entry < grub_xen_grant_table + total_grants; entry++) - if (entry->hdr.flags && entry->full_page.frame == mfn) + if (entry->flags && entry->frame == mfn) { mb (); - entry->hdr.flags = 0; + entry->flags = 0; mb (); - entry->full_page.frame = 0; + entry->frame = 0; mb (); } grub_xen_n_allocated_shared_pages--; @@ -368,7 +367,7 @@ map_all_pages (void) grub_memset (&gnttab_setver, 0, sizeof (gnttab_setver)); - gnttab_setver.version = 2; + gnttab_setver.version = 1; grub_xen_grant_table_op (GNTTABOP_set_version, &gnttab_setver, 1); grub_memset (&gnttab_setup, 0, sizeof (gnttab_setup)); diff --git a/grub-core/lib/arg.c b/grub-core/lib/arg.c index 8684de400..47db94979 100644 --- a/grub-core/lib/arg.c +++ b/grub-core/lib/arg.c @@ -138,7 +138,7 @@ showargs (const struct grub_arg_option *opt, } } - if (spacing < 0) + if (spacing <= 0) spacing = 3; while (spacing--) diff --git a/grub-core/lib/fdt.c b/grub-core/lib/fdt.c index 9c886fceb..9f34dc77b 100644 --- a/grub-core/lib/fdt.c +++ b/grub-core/lib/fdt.c @@ -219,8 +219,8 @@ static int rearrange_blocks (void *fdt, unsigned int clearance) grub_fdt_set_off_dt_strings (fdt, off_dt_strings); /* Copy reordered blocks back to fdt. */ - memcpy (fdt_ptr + off_mem_rsvmap, tmp_fdt + off_mem_rsvmap, - grub_fdt_get_totalsize (fdt) - off_mem_rsvmap); + grub_memcpy (fdt_ptr + off_mem_rsvmap, tmp_fdt + off_mem_rsvmap, + grub_fdt_get_totalsize (fdt) - off_mem_rsvmap); grub_free(tmp_fdt); return 0; diff --git a/grub-core/lib/getline.c b/grub-core/lib/getline.c new file mode 100644 index 000000000..edb8e9ffe --- /dev/null +++ b/grub-core/lib/getline.c @@ -0,0 +1,92 @@ +/* main.c - the normal mode main routine */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2001,2002,2003,2005,2006,2007,2008,2009,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Read a line from the file FILE. */ +char * +grub_file_getline (grub_file_t file) +{ + char c; + grub_size_t pos = 0; + char *cmdline; + int have_newline = 0; + grub_size_t max_len = 64; + + /* Initially locate some space. */ + cmdline = grub_malloc (max_len); + if (! cmdline) + return 0; + + while (1) + { + if (grub_file_read (file, &c, 1) != 1) + break; + + /* Skip all carriage returns. */ + if (c == '\r') + continue; + + + if (pos + 1 >= max_len) + { + char *old_cmdline = cmdline; + max_len = max_len * 2; + cmdline = grub_realloc (cmdline, max_len); + if (! cmdline) + { + grub_free (old_cmdline); + return 0; + } + } + + if (c == '\n') + { + have_newline = 1; + break; + } + + cmdline[pos++] = c; + } + + cmdline[pos] = '\0'; + + /* If the buffer is empty, don't return anything at all. */ + if (pos == 0 && !have_newline) + { + grub_free (cmdline); + cmdline = 0; + } + + return cmdline; +} diff --git a/grub-core/lib/i386/xen/relocator.S b/grub-core/lib/i386/xen/relocator.S index a1677db9f..694a54c85 100644 --- a/grub-core/lib/i386/xen/relocator.S +++ b/grub-core/lib/i386/xen/relocator.S @@ -38,35 +38,36 @@ VARIABLE(grub_relocator_xen_remapper_map) VARIABLE(grub_relocator_xen_remapper_map_high) .long 0 + movl %ebx, %ebp + movl $2, %esi movl $__HYPERVISOR_update_va_mapping, %eax int $0x82 + movl %ebp, %ebx addl $(LOCAL(cont) - LOCAL(base)), %ebx jmp *%ebx LOCAL(cont): - - /* mov imm32, %ecx */ - .byte 0xb9 -VARIABLE(grub_relocator_xen_paging_size) - .long 0 - - /* mov imm32, %ebx */ - .byte 0xbb -VARIABLE(grub_relocator_xen_paging_start) - .long 0 + xorl %eax, %eax + movl %eax, %ebp +1: /* mov imm32, %eax */ .byte 0xb8 VARIABLE(grub_relocator_xen_mfn_list) .long 0 - movl %eax, %edi -1: - movl %ecx, %ebp - movl 0(%edi), %ecx + movl %ebp, %eax + movl 0(%edi, %eax, 4), %ecx + + /* mov imm32, %ebx */ + .byte 0xbb +VARIABLE(grub_relocator_xen_paging_start) + .long 0 + shll $12, %eax + addl %eax, %ebx movl %ecx, %edx shll $12, %ecx shrl $20, %edx @@ -75,11 +76,14 @@ VARIABLE(grub_relocator_xen_mfn_list) movl $__HYPERVISOR_update_va_mapping, %eax int $0x82 - movl %ebp, %ecx - addl $4, %edi - addl $4096, %ebx + incl %ebp + /* mov imm32, %ecx */ + .byte 0xb9 +VARIABLE(grub_relocator_xen_paging_size) + .long 0 + cmpl %ebp, %ecx - loop 1b + ja 1b /* mov imm32, %ebx */ .byte 0xbb diff --git a/grub-core/lib/mips/loongson/reboot.c b/grub-core/lib/mips/loongson/reboot.c index d45d600e2..a20e5748b 100644 --- a/grub-core/lib/mips/loongson/reboot.c +++ b/grub-core/lib/mips/loongson/reboot.c @@ -49,6 +49,12 @@ grub_reboot (void) case GRUB_ARCH_MACHINE_YEELOONG: grub_write_ec (GRUB_MACHINE_EC_COMMAND_REBOOT); break; + case GRUB_ARCH_MACHINE_YEELOONG_3A: + grub_millisleep (1); + grub_outb (0x4e, GRUB_MACHINE_PCI_IO_BASE_3A | 0x66); + grub_millisleep (1); + grub_outb (1, GRUB_MACHINE_PCI_IO_BASE_3A | 0x62); + grub_millisleep (5000); } grub_millisleep (1500); diff --git a/grub-core/lib/posix_wrap/errno.h b/grub-core/lib/posix_wrap/errno.h index 9031722e2..ba63b2366 100644 --- a/grub-core/lib/posix_wrap/errno.h +++ b/grub-core/lib/posix_wrap/errno.h @@ -21,6 +21,7 @@ #include +#undef errno #define errno grub_errno #define EINVAL GRUB_ERR_BAD_NUMBER #define ENOMEM GRUB_ERR_OUT_OF_MEMORY diff --git a/grub-core/lib/syslinux_parse.c b/grub-core/lib/syslinux_parse.c new file mode 100644 index 000000000..21fa17504 --- /dev/null +++ b/grub-core/lib/syslinux_parse.c @@ -0,0 +1,1501 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +struct syslinux_say +{ + struct syslinux_say *next; + struct syslinux_say *prev; + char msg[0]; +}; + +struct initrd_list +{ + struct initrd_list *next; + char *file; +}; + +struct syslinux_menuentry +{ + struct syslinux_menuentry *next; + struct syslinux_menuentry *prev; + char *label; + char *extlabel; + char *kernel_file; + struct initrd_list *initrds; + struct initrd_list *initrds_last; + char *append; + char *argument; + char *help; + char *comments; + grub_size_t commentslen; + char hotkey; + int make_default; + struct syslinux_say *say; + + enum { KERNEL_NO_KERNEL, KERNEL_LINUX, KERNEL_CHAINLOADER, + KERNEL_BIN, KERNEL_PXE, KERNEL_CHAINLOADER_BPB, + KERNEL_COM32, KERNEL_COM, KERNEL_IMG, KERNEL_CONFIG, LOCALBOOT } + entry_type; +}; + +struct syslinux_menu +{ + struct syslinux_menu *parent; + struct syslinux_menuentry *entries; + char *def; + char *comments; + char *background; + const char *root_read_directory; + const char *root_target_directory; + const char *current_read_directory; + const char *current_target_directory; + const char *filename; + grub_size_t commentslen; + unsigned long timeout; + struct syslinux_say *say; + grub_syslinux_flavour_t flavour; +}; + +struct output_buffer +{ + grub_size_t alloc; + grub_size_t ptr; + char *buf; +}; + +static grub_err_t +syslinux_parse_real (struct syslinux_menu *menu); +static grub_err_t +config_file (struct output_buffer *outbuf, + const char *root, const char *target_root, + const char *cwd, const char *target_cwd, + const char *fname, struct syslinux_menu *parent, + grub_syslinux_flavour_t flav); +static grub_err_t +print_entry (struct output_buffer *outbuf, + struct syslinux_menu *menu, + const char *str); + +static grub_err_t +ensure_space (struct output_buffer *outbuf, grub_size_t len) +{ + grub_size_t newlen; + char *newbuf; + if (len < outbuf->alloc - outbuf->ptr) + return GRUB_ERR_NONE; + newlen = (outbuf->ptr + len + 10) * 2; + newbuf = grub_realloc (outbuf->buf, newlen); + if (!newbuf) + return grub_errno; + outbuf->alloc = newlen; + outbuf->buf = newbuf; + return GRUB_ERR_NONE; +} + +static grub_err_t +print (struct output_buffer *outbuf, const char *str, grub_size_t len) +{ + grub_err_t err; + err = ensure_space (outbuf, len); + if (err) + return err; + grub_memcpy (&outbuf->buf[outbuf->ptr], str, len); + outbuf->ptr += len; + return GRUB_ERR_NONE; +} + +static grub_err_t +add_comment (struct syslinux_menu *menu, const char *comment, int nl) +{ + if (menu->entries) + { + if (menu->entries->commentslen == 0 && *comment == 0) + return GRUB_ERR_NONE; + menu->entries->comments = grub_realloc (menu->entries->comments, + menu->entries->commentslen + + 2 + grub_strlen (comment)); + if (!menu->entries->comments) + return grub_errno; + menu->entries->commentslen + += grub_stpcpy (menu->entries->comments + menu->entries->commentslen, + comment) + - (menu->entries->comments + menu->entries->commentslen); + if (nl) + menu->entries->comments[menu->entries->commentslen++] = '\n'; + menu->entries->comments[menu->entries->commentslen] = '\0'; + } + else + { + if (menu->commentslen == 0 && *comment == 0) + return GRUB_ERR_NONE; + menu->comments = grub_realloc (menu->comments, menu->commentslen + + 2 + grub_strlen (comment)); + if (!menu->comments) + return grub_errno; + menu->commentslen += grub_stpcpy (menu->comments + menu->commentslen, + comment) + - (menu->comments + menu->commentslen); + if (nl) + menu->comments[menu->commentslen++] = '\n'; + menu->comments[menu->commentslen] = '\0'; + } + return GRUB_ERR_NONE; +} + + +#define print_string(x) do { err = print (outbuf, x, sizeof (x) - 1); if (err) return err; } while (0) + +static grub_err_t +print_num (struct output_buffer *outbuf, int n) +{ + char buf[20]; + grub_snprintf (buf, sizeof (buf), "%d", n); + return print (outbuf, buf, grub_strlen (buf)); +} + +static grub_err_t +label (const char *line, struct syslinux_menu *menu) +{ + struct syslinux_menuentry *entry; + + entry = grub_malloc (sizeof (*entry)); + if (!entry) + return grub_errno; + grub_memset (entry, 0, sizeof (*entry)); + entry->label = grub_strdup (line); + if (!entry->label) + { + grub_free (entry); + return grub_errno; + } + entry->next = menu->entries; + entry->prev = NULL; + if (menu->entries) + menu->entries->prev = entry; + menu->entries = entry; + return GRUB_ERR_NONE; +} + +static grub_err_t +kernel (const char *line, struct syslinux_menu *menu) +{ + const char *end = line + grub_strlen (line); + + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + + menu->entries->entry_type = KERNEL_LINUX; + + if (end - line >= 2 && grub_strcmp (end - 2, ".0") == 0) + menu->entries->entry_type = KERNEL_PXE; + + if (end - line >= 4 && grub_strcasecmp (end - 4, ".bin") == 0) + menu->entries->entry_type = KERNEL_BIN; + + if (end - line >= 3 && grub_strcasecmp (end - 3, ".bs") == 0) + menu->entries->entry_type = KERNEL_CHAINLOADER; + + if (end - line >= 4 && grub_strcasecmp (end - 4, ".bss") == 0) + menu->entries->entry_type = KERNEL_CHAINLOADER_BPB; + + if (end - line >= 4 && grub_strcasecmp (end - 4, ".c32") == 0) + menu->entries->entry_type = KERNEL_COM32; + + if (end - line >= 4 && grub_strcasecmp (end - 4, ".cbt") == 0) + menu->entries->entry_type = KERNEL_COM; + + if (end - line >= 4 && grub_strcasecmp (end - 4, ".com") == 0) + menu->entries->entry_type = KERNEL_COM; + + if (end - line >= 4 && grub_strcasecmp (end - 4, ".img") == 0) + menu->entries->entry_type = KERNEL_IMG; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_linux (const char *line, struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + menu->entries->entry_type = KERNEL_LINUX; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_boot (const char *line, struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + menu->entries->entry_type = KERNEL_CHAINLOADER; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_bss (const char *line, struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + menu->entries->entry_type = KERNEL_CHAINLOADER_BPB; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_pxe (const char *line, struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + menu->entries->entry_type = KERNEL_PXE; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_fdimage (const char *line, struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + menu->entries->entry_type = KERNEL_IMG; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_comboot (const char *line, struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + menu->entries->entry_type = KERNEL_COM; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_com32 (const char *line, struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + menu->entries->entry_type = KERNEL_COM32; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_config (const char *line, struct syslinux_menu *menu) +{ + const char *space; + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + for (space = line; *space && !grub_isspace (*space); space++); + menu->entries->kernel_file = grub_strndup (line, space - line); + if (!menu->entries->kernel_file) + return grub_errno; + for (; *space && grub_isspace (*space); space++); + if (*space) + { + menu->entries->argument = grub_strdup (space); + if (!menu->entries->argument) + return grub_errno; + } + menu->entries->entry_type = KERNEL_CONFIG; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_append (const char *line, struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->append = grub_strdup (line); + if (!menu->entries->append) + return grub_errno; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_initrd (const char *line, struct syslinux_menu *menu) +{ + struct initrd_list *ninitrd; + const char *comma; + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + while (*line) + { + for (comma = line; *comma && *comma != ','; comma++); + + ninitrd = grub_malloc (sizeof (*ninitrd)); + if (!ninitrd) + return grub_errno; + ninitrd->file = grub_strndup (line, comma - line); + if (!ninitrd->file) + { + grub_free (ninitrd); + return grub_errno; + } + ninitrd->next = NULL; + if (menu->entries->initrds_last) + menu->entries->initrds_last->next = ninitrd; + else + { + menu->entries->initrds_last = ninitrd; + menu->entries->initrds = ninitrd; + } + + line = comma; + while (*line == ',') + line++; + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_default (const char *line, struct syslinux_menu *menu) +{ + menu->def = grub_strdup (line); + if (!menu->def) + return grub_errno; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_timeout (const char *line, struct syslinux_menu *menu) +{ + menu->timeout = grub_strtoul (line, NULL, 0); + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_menudefault (const char *line __attribute__ ((unused)), + struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->make_default = 1; + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_menubackground (const char *line, + struct syslinux_menu *menu) +{ + menu->background = grub_strdup (line); + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_localboot (const char *line, + struct syslinux_menu *menu) +{ + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->kernel_file = grub_strdup (line); + if (!menu->entries->kernel_file) + return grub_errno; + menu->entries->entry_type = LOCALBOOT; + + return GRUB_ERR_NONE; +} + +static grub_err_t +cmd_extlabel (const char *line, struct syslinux_menu *menu) +{ + const char *in; + char *out; + + if (!menu->entries) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + + menu->entries->extlabel = grub_malloc (grub_strlen (line) + 1); + if (!menu->entries->extlabel) + return grub_errno; + in = line; + out = menu->entries->extlabel; + while (*in) + { + if (in[0] == '^' && in[1]) + { + menu->entries->hotkey = grub_tolower (in[1]); + in++; + } + *out++ = *in++; + } + *out = 0; + + return GRUB_ERR_NONE; +} + + +static grub_err_t +cmd_say (const char *line, struct syslinux_menu *menu) +{ + struct syslinux_say *nsay; + nsay = grub_malloc (sizeof (*nsay) + grub_strlen (line) + 1); + if (!nsay) + return grub_errno; + nsay->prev = NULL; + if (menu->entries) + { + nsay->next = menu->entries->say; + menu->entries->say = nsay; + } + else + { + nsay->next = menu->say; + menu->say = nsay; + } + + if (nsay->next) + nsay->next->prev = nsay; + + grub_memcpy (nsay->msg, line, grub_strlen (line) + 1); + return GRUB_ERR_NONE; +} + +static char * +get_read_filename (struct syslinux_menu *menu, + const char *filename) +{ + return grub_xasprintf ("%s/%s", + filename[0] == '/' ? menu->root_read_directory + : menu->current_read_directory, filename); +} + +static char * +get_target_filename (struct syslinux_menu *menu, + const char *filename) +{ + return grub_xasprintf ("%s/%s", + filename[0] == '/' ? menu->root_target_directory + : menu->current_target_directory, filename); +} + +static grub_err_t +syslinux_parse (const char *filename, + struct syslinux_menu *menu) +{ + const char *old_filename = menu->filename; + grub_err_t ret; + char *nf; + nf = get_read_filename (menu, filename); + if (!nf) + return grub_errno; + menu->filename = nf; + ret = syslinux_parse_real (menu); + if (ret == GRUB_ERR_FILE_NOT_FOUND + || ret == GRUB_ERR_BAD_FILENAME) + { + grub_errno = ret = GRUB_ERR_NONE; + add_comment (menu, "# File ", 0); + add_comment (menu, nf, 0); + add_comment (menu, " not found", 1); + } + grub_free (nf); + menu->filename = old_filename; + return ret; +} + +struct +{ + const char *name1; + const char *name2; + grub_err_t (*parse) (const char *line, struct syslinux_menu *menu); +} commands[] = { + /* FIXME: support tagname. */ + {"include", NULL, syslinux_parse}, + {"menu", "include", syslinux_parse}, + {"label", NULL, label}, + {"kernel", NULL, kernel}, + {"linux", NULL, cmd_linux}, + {"boot", NULL, cmd_boot}, + {"bss", NULL, cmd_bss}, + {"pxe", NULL, cmd_pxe}, + {"fdimage", NULL, cmd_fdimage}, + {"comboot", NULL, cmd_comboot}, + {"com32", NULL, cmd_com32}, + {"config", NULL, cmd_config}, + {"append", NULL, cmd_append}, + /* FIXME: ipappend not supported. */ + {"localboot", NULL, cmd_localboot}, + {"initrd", NULL, cmd_initrd}, + {"default", NULL, cmd_default}, + {"menu", "label", cmd_extlabel}, + /* FIXME: MENU LABEL not supported. */ + /* FIXME: MENU HIDDEN not supported. */ + /* FIXME: MENU SEPARATOR not supported. */ + /* FIXME: MENU INDENT not supported. */ + /* FIXME: MENU DISABLE not supported. */ + /* FIXME: MENU HIDE not supported. */ + {"menu", "default", cmd_menudefault}, + /* FIXME: MENU PASSWD not supported. */ + /* FIXME: MENU MASTER PASSWD not supported. */ + {"menu", "background", cmd_menubackground}, + /* FIXME: MENU BEGIN not supported. */ + /* FIXME: MENU GOTO not supported. */ + /* FIXME: MENU EXIT not supported. */ + /* FIXME: MENU QUIT not supported. */ + /* FIXME: MENU START not supported. */ + /* FIXME: MENU AUTOBOOT not supported. */ + /* FIXME: MENU TABMSG not supported. */ + /* FIXME: MENU NOTABMSG not supported. */ + /* FIXME: MENU PASSPROMPT not supported. */ + /* FIXME: MENU COLOR not supported. */ + /* FIXME: MENU MSGCOLOR not supported. */ + /* FIXME: MENU WIDTH not supported. */ + /* FIXME: MENU MARGIN not supported. */ + /* FIXME: MENU PASSWORDMARGIN not supported. */ + /* FIXME: MENU ROWS not supported. */ + /* FIXME: MENU TABMSGROW not supported. */ + /* FIXME: MENU CMDLINEROW not supported. */ + /* FIXME: MENU ENDROW not supported. */ + /* FIXME: MENU PASSWORDROW not supported. */ + /* FIXME: MENU TIMEOUTROW not supported. */ + /* FIXME: MENU HELPMSGROW not supported. */ + /* FIXME: MENU HELPMSGENDROW not supported. */ + /* FIXME: MENU HIDDENROW not supported. */ + /* FIXME: MENU HSHIFT not supported. */ + /* FIXME: MENU VSHIFT not supported. */ + {"timeout", NULL, cmd_timeout}, + /* FIXME: TOTALTIMEOUT not supported. */ + /* FIXME: ONTIMEOUT not supported. */ + /* FIXME: ONERROR not supported. */ + /* FIXME: SERIAL not supported. */ + /* FIXME: CONSOLE not supported. */ + /* FIXME: FONT not supported. */ + /* FIXME: KBDMAP not supported. */ + {"say", NULL, cmd_say}, + /* FIXME: DISPLAY not supported. */ + /* FIXME: F* not supported. */ + + /* Commands to control interface behaviour which aren't needed with GRUB. + If they are important in your environment please contact GRUB team. + */ + {"prompt", NULL, NULL}, + {"nocomplete", NULL, NULL}, + {"noescape", NULL, NULL}, + {"implicit", NULL, NULL}, + {"allowoptions", NULL, NULL} +}; + +static grub_err_t +helptext (const char *line, grub_file_t file, struct syslinux_menu *menu) +{ + char *help; + char *buf = NULL; + grub_size_t helplen, alloclen = 0; + + help = grub_strdup (line); + helplen = grub_strlen (line); + while ((grub_free (buf), buf = grub_file_getline (file))) + { + char *ptr; + grub_size_t needlen; + for (ptr = buf; *ptr && grub_isspace (*ptr); ptr++); + if (grub_strncasecmp (ptr, "endtext", sizeof ("endtext") - 1) == 0) + { + ptr += sizeof ("endtext") - 1; + for (; *ptr && (grub_isspace (*ptr) || *ptr == '\n' || *ptr == '\r'); + ptr++); + if (!*ptr) + { + menu->entries->help = help; + grub_free (buf); + return GRUB_ERR_NONE; + } + } + needlen = helplen + 1 + grub_strlen (buf); + if (alloclen < needlen) + { + alloclen = 2 * needlen; + help = grub_realloc (help, alloclen); + if (!help) + { + grub_free (buf); + return grub_errno; + } + } + helplen += grub_stpcpy (help + helplen, buf) - (help + helplen); + } + + grub_free (buf); + return grub_errno; +} + + +static grub_err_t +syslinux_parse_real (struct syslinux_menu *menu) +{ + grub_file_t file; + char *buf = NULL; + grub_err_t err = GRUB_ERR_NONE; + + file = grub_file_open (menu->filename); + if (!file) + return grub_errno; + while ((grub_free (buf), buf = grub_file_getline (file))) + { + const char *ptr1, *ptr2, *ptr3, *ptr4, *ptr5; + char *end; + unsigned i; + end = buf + grub_strlen (buf); + while (end > buf && (end[-1] == '\n' || end[-1] == '\r')) + end--; + *end = 0; + for (ptr1 = buf; *ptr1 && grub_isspace (*ptr1); ptr1++); + if (*ptr1 == '#' || *ptr1 == 0) + { + err = add_comment (menu, ptr1, 1); + if (err) + goto fail; + continue; + } + for (ptr2 = ptr1; !grub_isspace (*ptr2) && *ptr2; ptr2++); + for (ptr3 = ptr2; grub_isspace (*ptr3) && *ptr3; ptr3++); + for (ptr4 = ptr3; !grub_isspace (*ptr4) && *ptr4; ptr4++); + for (ptr5 = ptr4; grub_isspace (*ptr5) && *ptr5; ptr5++); + for (i = 0; i < sizeof (commands) / sizeof (commands[0]); i++) + if (grub_strlen (commands[i].name1) == (grub_size_t) (ptr2 - ptr1) + && grub_strncasecmp (commands[i].name1, ptr1, ptr2 - ptr1) == 0 + && (commands[i].name2 == NULL + || (grub_strlen (commands[i].name2) + == (grub_size_t) (ptr4 - ptr3) + && grub_strncasecmp (commands[i].name2, ptr3, ptr4 - ptr3) + == 0))) + break; + if (i == sizeof (commands) / sizeof (commands[0])) + { + if (sizeof ("text") - 1 == ptr2 - ptr1 + && grub_strncasecmp ("text", ptr1, ptr2 - ptr1) == 0 + && (sizeof ("help") - 1 == ptr4 - ptr3 + && grub_strncasecmp ("help", ptr3, ptr4 - ptr3) == 0)) + { + if (helptext (ptr5, file, menu)) + return 1; + continue; + } + + add_comment (menu, " # UNSUPPORTED command '", 0); + add_comment (menu, ptr1, 0); + add_comment (menu, "'", 1); + + continue; + } + if (commands[i].parse) + { + err = commands[i].parse (commands[i].name2 + ? ptr5 : ptr3, menu); + if (err) + goto fail; + } + } + fail: + grub_file_close (file); + return err; +} + +static grub_err_t +print_escaped (struct output_buffer *outbuf, + const char *from, const char *to) +{ + const char *ptr; + grub_err_t err; + if (!to) + to = from + grub_strlen (from); + err = ensure_space (outbuf, (to - from) * 4 + 2); + if (err) + return err; + outbuf->buf[outbuf->ptr++] = '\''; + for (ptr = from; *ptr; ptr++) + { + if (*ptr == '\'') + { + outbuf->buf[outbuf->ptr++] = '\''; + outbuf->buf[outbuf->ptr++] = '\\'; + outbuf->buf[outbuf->ptr++] = '\''; + outbuf->buf[outbuf->ptr++] = '\''; + } + else + outbuf->buf[outbuf->ptr++] = *ptr; + } + outbuf->buf[outbuf->ptr++] = '\''; + return GRUB_ERR_NONE; +} + +static grub_err_t +print_file (struct output_buffer *outbuf, + struct syslinux_menu *menu, const char *from, const char *to) +{ + grub_err_t err; + if (!to) + to = from + grub_strlen (from); + err = print_escaped (outbuf, from[0] == '/' + ? menu->root_target_directory + : menu->current_target_directory, NULL); + if (err) + return err; + + err = print (outbuf, "/", 1); + if (err) + return err; + return print_escaped (outbuf, from, to); +} + +static void +simplify_filename (char *str) +{ + char *iptr, *optr = str; + for (iptr = str; *iptr; iptr++) + { + if (*iptr == '/' && optr != str && optr[-1] == '/') + continue; + if (iptr[0] == '/' && iptr[1] == '.' && iptr[2] == '/') + { + iptr += 2; + continue; + } + if (iptr[0] == '/' && iptr[1] == '.' && iptr[2] == '.' + && iptr[3] == '/') + { + iptr += 3; + while (optr >= str && *optr != '/') + optr--; + if (optr < str) + { + str[0] = '/'; + optr = str; + } + optr++; + continue; + } + *optr++ = *iptr; + } + *optr = '\0'; +} + +static grub_err_t +write_entry (struct output_buffer *outbuf, + struct syslinux_menu *menu, + struct syslinux_menuentry *curentry) +{ + grub_err_t err; + if (curentry->comments) + print (outbuf, curentry->comments, grub_strlen (curentry->comments)); + { + struct syslinux_say *say; + for (say = curentry->say; say && say->next; say = say->next); + for (; say && say->prev; say = say->prev) + { + print_string ("echo "); + if (print_escaped (outbuf, say->msg, NULL)) return grub_errno; + print_string ("\n"); + } + } + + /* FIXME: support help text. */ + switch (curentry->entry_type) + { + case KERNEL_LINUX: + { + char *ptr; + char *cmdline; + char *initrd = NULL; + for (ptr = curentry->append; ptr && *ptr; ptr++) + if ((ptr == curentry->append || grub_isspace (ptr[-1])) + && grub_strncasecmp (ptr, "initrd=", sizeof ("initrd=") - 1) + == 0) + break; + if (ptr && *ptr) + { + char *ptr2; + grub_size_t totlen = grub_strlen (curentry->append); + initrd = ptr + sizeof ("initrd=") - 1; + for (ptr2 = ptr; *ptr2 && !grub_isspace (*ptr2); ptr2++); + if (*ptr2) + { + *ptr2 = 0; + ptr2++; + } + cmdline = grub_malloc (totlen + 1 - (ptr2 - ptr)); + if (!cmdline) + return grub_errno; + grub_memcpy (cmdline, curentry->append, ptr - curentry->append); + grub_memcpy (cmdline + (ptr - curentry->append), + ptr2, totlen - (ptr2 - curentry->append)); + *(cmdline + totlen - (ptr2 - ptr)) = 0; + } + else + cmdline = curentry->append; + print_string (" if test x$grub_platform = xpc; then " + "linux_suffix=16; else linux_suffix= ; fi\n"); + print_string (" linux$linux_suffix "); + print_file (outbuf, menu, curentry->kernel_file, NULL); + print_string (" "); + if (cmdline) + print (outbuf, cmdline, grub_strlen (cmdline)); + print_string ("\n"); + if (initrd || curentry->initrds) + { + struct initrd_list *lst; + print_string (" initrd$linux_suffix "); + if (initrd) + { + print_file (outbuf, menu, initrd, NULL); + print_string (" "); + } + for (lst = curentry->initrds; lst; lst = lst->next) + { + print_file (outbuf, menu, lst->file, NULL); + print_string (" "); + } + + print_string ("\n"); + } + } + break; + case KERNEL_CHAINLOADER: + print_string (" chainloader "); + print_file (outbuf, menu, curentry->kernel_file, NULL); + print_string ("\n"); + break; + case KERNEL_CHAINLOADER_BPB: + print_string (" chainloader --bpb "); + print_file (outbuf, menu, curentry->kernel_file, NULL); + print_string ("\n"); + break; + case LOCALBOOT: + /* FIXME: support -1. */ + /* FIXME: PXELINUX. */ + { + int n = grub_strtol (curentry->kernel_file, NULL, 0); + if (n >= 0 && n <= 0x02) + { + print_string (" root=fd"); + if (print_num (outbuf, n)) + return grub_errno; + print_string (";\n chainloader +1;\n"); + + break; + } + if (n >= 0x80 && n < 0x8a) + { + print_string (" root=hd"); + if (print_num (outbuf, n - 0x80)) + return grub_errno; + print_string (";\n chainloader +1;\n"); + break; + } + print_string (" # UNSUPPORTED localboot type "); + if (print_num (outbuf, n)) + return grub_errno; + print_string ("\n"); + break; + } + case KERNEL_COM32: + case KERNEL_COM: + { + char *basename = NULL; + + { + char *ptr; + for (ptr = curentry->kernel_file; *ptr; ptr++) + if (*ptr == '/' || *ptr == '\\') + basename = ptr; + } + if (!basename) + basename = curentry->kernel_file; + else + basename++; + if (grub_strcasecmp (basename, "chain.c32") == 0) + { + char *file = NULL; + int is_fd = -1, devn = 0; + int part = -1; + int swap = 0; + char *ptr; + for (ptr = curentry->append; *ptr; ) + { + while (grub_isspace (*ptr)) + ptr++; + /* FIXME: support mbr: and boot. */ + if (ptr[0] == 'h' && ptr[1] == 'd') + { + is_fd = 0; + devn = grub_strtoul (ptr + 2, &ptr, 0); + continue; + } + if (grub_strncasecmp (ptr, "file=", 5) == 0) + { + file = ptr + 5; + for (ptr = file; *ptr && !grub_isspace (*ptr); ptr++); + if (*ptr) + { + *ptr = 0; + ptr++; + } + continue; + } + if (grub_strncasecmp (ptr, "swap", sizeof ("swap") - 1) == 0) + { + swap = 1; + ptr += sizeof ("swap") - 1; + continue; + } + + if (ptr[0] == 'f' && ptr[1] == 'd') + { + is_fd = 1; + devn = grub_strtoul (ptr + 2, &ptr, 0); + continue; + } + if (grub_isdigit (ptr[0])) + { + part = grub_strtoul (ptr, &ptr, 0); + continue; + } + /* FIXME: isolinux, ntldr, cmldr, *dos, seg, hide + FIXME: sethidden. */ + print_string (" # UNSUPPORTED option "); + if (print (outbuf, ptr, grub_strlen (ptr))) + return 0; + print_string ("\n"); + break; + } + if (is_fd == -1) + { + print_string (" # no drive specified\n"); + break; + } + if (!*ptr) + { + print_string (is_fd ? " root=fd": " root=hd"); + if (print_num (outbuf, devn)) + return grub_errno; + if (part != -1) + { + print_string (","); + if (print_num (outbuf, part + 1)) + return grub_errno; + } + print_string (";\n"); + if (file) + { + print_string (" chainloader "); + print_file (outbuf, menu, file, NULL); + print_string (";\n"); + } + else + print_string (" chainloader +1;\n"); + if (swap) + print_string (" drivemap -s hd0 \"root\";\n"); + } + break; + } + + if (grub_strcasecmp (basename, "mboot.c32") == 0) + { + char *ptr; + int first = 1; + int is_kernel = 1; + for (ptr = curentry->append; *ptr; ) + { + char *ptrr = ptr; + while (*ptr && !grub_isspace (*ptr)) + ptr++; + if (ptrr + 2 == ptr && ptrr[0] == '-' && ptrr[1] == '-') + { + print_string ("\n"); + first = 1; + continue; + } + if (first) + { + if (is_kernel) + print_string (" multiboot "); + else + print_string (" module "); + first = 0; + is_kernel = 0; + if (print_file (outbuf, menu, ptrr, ptr)) + return grub_errno; + continue; + } + if (print_escaped (outbuf, ptrr, ptr)) + return grub_errno; + } + break; + } + + if (grub_strcasecmp (basename, "ifcpu64.c32") == 0) + { + char *lm, *lme, *pae = 0, *paee = 0, *i386s = 0, *i386e = 0; + char *ptr; + ptr = curentry->append; + while (grub_isspace (*ptr)) + ptr++; + lm = ptr; + while (*ptr && !grub_isspace (*ptr)) + ptr++; + lme = ptr; + while (grub_isspace (*ptr)) + ptr++; + if (ptr[0] == '-' && ptr[1] == '-') + { + ptr += 2; + while (grub_isspace (*ptr)) + ptr++; + pae = ptr; + while (*ptr && !grub_isspace (*ptr)) + ptr++; + paee = ptr; + } + while (grub_isspace (*ptr)) + ptr++; + if (ptr[0] == '-' && ptr[1] == '-') + { + ptr += 2; + while (grub_isspace (*ptr)) + ptr++; + i386s = ptr; + while (*ptr && !grub_isspace (*ptr)) + ptr++; + i386e = ptr; + } + if (lme) + *lme = '\0'; + if (paee) + *paee = '\0'; + if (i386e) + *i386e = '\0'; + if (!i386s) + { + i386s = pae; + pae = 0; + } + print_string ("if cpuid --long-mode; then true;\n"); + if (print_entry (outbuf, menu, lm)) + return grub_errno; + if (pae) + { + print_string ("elif cpuid --pae; then true;\n"); + if (print_entry (outbuf, menu, pae)) + return grub_errno; + } + print_string ("else\n"); + if (print_entry (outbuf, menu, i386s)) + return grub_errno; + print_string ("fi\n"); + break; + } + + if (grub_strcasecmp (basename, "reboot.c32") == 0) + { + print_string (" reboot\n"); + break; + } + + if (grub_strcasecmp (basename, "poweroff.com") == 0) + { + print_string (" halt\n"); + break; + } + + if (grub_strcasecmp (basename, "whichsys.c32") == 0) + { + grub_syslinux_flavour_t flavour = GRUB_SYSLINUX_ISOLINUX; + const char *flav[] = + { + [GRUB_SYSLINUX_ISOLINUX] = "iso", + [GRUB_SYSLINUX_PXELINUX] = "pxe", + [GRUB_SYSLINUX_SYSLINUX] = "sys" + }; + char *ptr; + for (ptr = curentry->append; *ptr; ) + { + char *bptr, c; + while (grub_isspace (*ptr)) + ptr++; + if (grub_strncasecmp (ptr, "-iso-", 5) == 0) + { + ptr += sizeof ("-iso-") - 1; + flavour = GRUB_SYSLINUX_ISOLINUX; + continue; + } + if (grub_strncasecmp (ptr, "-pxe-", 5) == 0) + { + ptr += sizeof ("-pxe-") - 1; + flavour = GRUB_SYSLINUX_PXELINUX; + continue; + } + if (grub_strncasecmp (ptr, "-sys-", 5) == 0) + { + ptr += sizeof ("-sys-") - 1; + flavour = GRUB_SYSLINUX_SYSLINUX; + continue; + } + bptr = ptr; + while (*ptr && !grub_isspace (*ptr)) + ptr++; + c = *ptr; + *ptr = '\0'; + if (menu->flavour == GRUB_SYSLINUX_UNKNOWN + && flavour == GRUB_SYSLINUX_ISOLINUX) + { + print_string ("if [ x$syslinux_flavour = xiso -o x$syslinux_flavour = x ]; then true;\n"); + menu->flavour = GRUB_SYSLINUX_ISOLINUX; + print_entry (outbuf, menu, bptr); + menu->flavour = GRUB_SYSLINUX_UNKNOWN; + print_string ("fi\n"); + } + else if (menu->flavour == GRUB_SYSLINUX_UNKNOWN) + { + print_string ("if [ x$syslinux_flavour = x"); + err = print (outbuf, flav[flavour], grub_strlen (flav[flavour])); + if (err) + return err; + print_string (" ]; then true;\n"); + menu->flavour = flavour; + print_entry (outbuf, menu, bptr); + menu->flavour = GRUB_SYSLINUX_UNKNOWN; + print_string ("fi\n"); + } + if (menu->flavour != GRUB_SYSLINUX_UNKNOWN + && menu->flavour == flavour) + print_entry (outbuf, menu, bptr); + *ptr = c; + } + break; + } + + /* FIXME: gdb, GFXBoot, Hdt, Ifcpu, Ifplop, Kbdmap, + FIXME: Linux, Lua, Meminfo, rosh, Sanbboot */ + + print_string (" # UNSUPPORTED com(32) "); + err = print (outbuf, basename, grub_strlen (basename)); + if (err) + return err; + print_string ("\ntrue;\n"); + break; + } + case KERNEL_CONFIG: + { + char *new_cwd, *new_target_cwd; + const char *ap; + ap = curentry->append; + if (!ap) + ap = curentry->argument; + if (!ap) + ap = ""; + new_cwd = get_read_filename (menu, ap); + if (!new_cwd) + return grub_errno; + new_target_cwd = get_target_filename (menu, ap); + if (!new_target_cwd) + return grub_errno; + + struct syslinux_menu *menuptr; + char *newname; + int depth = 0; + + newname = get_read_filename (menu, curentry->kernel_file); + if (!newname) + return grub_errno; + simplify_filename (newname); + + print_string ("#"); + print_file (outbuf, menu, curentry->kernel_file, NULL); + print_string (" "); + print (outbuf, newname, grub_strlen (newname)); + print_string (":\n"); + + for (menuptr = menu; menuptr; menuptr = menuptr->parent, depth++) + if (grub_strcmp (menuptr->filename, newname) == 0 + || depth > 20) + break; + if (menuptr) + { + print_string (" syslinux_configfile -r "); + print_file (outbuf, menu, "/", NULL); + print_string (" -c "); + print_file (outbuf, menu, ap, NULL); + print_string (" "); + print_file (outbuf, menu, curentry->kernel_file, NULL); + print_string ("\n"); + } + else + { + err = config_file (outbuf, menu->root_read_directory, + menu->root_target_directory, new_cwd, new_target_cwd, + newname, menu, menu->flavour); + if (err == GRUB_ERR_FILE_NOT_FOUND + || err == GRUB_ERR_BAD_FILENAME) + { + grub_errno = err = GRUB_ERR_NONE; + print_string ("# File "); + err = print (outbuf, newname, grub_strlen (newname)); + if (err) + return err; + print_string (" not found\n"); + } + if (err) + return err; + } + grub_free (newname); + grub_free (new_cwd); + grub_free (new_target_cwd); + } + break; + case KERNEL_NO_KERNEL: + /* FIXME: support this. */ + case KERNEL_BIN: + case KERNEL_PXE: + case KERNEL_IMG: + print_string (" # UNSUPPORTED entry type "); + if (print_num (outbuf, curentry->entry_type)) + return grub_errno; + print_string ("\ntrue;\n"); + break; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +print_entry (struct output_buffer *outbuf, + struct syslinux_menu *menu, + const char *str) +{ + struct syslinux_menuentry *curentry; + for (curentry = menu->entries; curentry; curentry = curentry->next) + if (grub_strcasecmp (curentry->label, str) == 0) + { + grub_err_t err; + err = write_entry (outbuf, menu, curentry); + if (err) + return err; + } + return GRUB_ERR_NONE; +} + +static void +free_menu (struct syslinux_menu *menu) +{ + struct syslinux_say *say, *nsay; + struct syslinux_menuentry *entry, *nentry; + + grub_free (menu->def); + grub_free (menu->comments); + grub_free (menu->background); + for (say = menu->say; say ; say = nsay) + { + nsay = say->next; + grub_free (say->msg); + grub_free (say); + } + + for (entry = menu->entries; entry ; entry = nentry) + { + nentry = entry->next; + struct initrd_list *initrd, *ninitrd; + + for (initrd = entry->initrds; initrd ; initrd = ninitrd) + { + ninitrd = initrd->next; + grub_free (initrd->file); + grub_free (initrd); + } + + grub_free (entry->comments); + grub_free (entry->kernel_file); + grub_free (entry->label); + grub_free (entry->extlabel); + grub_free (entry->append); + grub_free (entry->help); + grub_free (entry); + } +} + +static grub_err_t +config_file (struct output_buffer *outbuf, + const char *root, const char *target_root, + const char *cwd, const char *target_cwd, + const char *fname, struct syslinux_menu *parent, + grub_syslinux_flavour_t flav) +{ + grub_err_t err; + struct syslinux_menu menu; + struct syslinux_menuentry *curentry, *lentry; + struct syslinux_say *say; + + grub_memset (&menu, 0, sizeof (menu)); + menu.flavour = flav; + menu.root_read_directory = root; + menu.root_target_directory = target_root; + menu.current_read_directory = cwd; + menu.current_target_directory = target_cwd; + + menu.filename = fname; + menu.parent = parent; + err = syslinux_parse_real (&menu); + if (err) + return err; + + for (say = menu.say; say && say->next; say = say->next); + for (; say && say->prev; say = say->prev) + { + print_string ("echo "); + err = print_escaped (outbuf, say->msg, NULL); + if (err) + return err; + print_string ("\n"); + } + + if (menu.background) + { + print_string (" background_image "); + err = print_file (outbuf, &menu, menu.background, NULL); + if (err) + return err; + print_string ("\n"); + } + + if (menu.timeout == 0 && menu.entries && menu.def) + { + err = print_entry (outbuf, &menu, menu.def); + if (err) + return err; + } + else if (menu.entries) + { + for (curentry = menu.entries; curentry->next; curentry = curentry->next); + lentry = curentry; + + print_string ("set timeout='"); + err = print_num (outbuf, (menu.timeout + 9) / 10); + if (err) + return err; + print_string ("\n"); + if (menu.comments) + { + err = print (outbuf, menu.comments, grub_strlen (menu.comments)); + if (err) + return err; + } + + if (menu.def) + { + print_string (" default="); + err = print_escaped (outbuf, menu.def, NULL); + if (err) + return err; + print_string ("\n"); + } + for (curentry = lentry; curentry; curentry = curentry->prev) + { + print_string ("menuentry "); + err = print_escaped (outbuf, + curentry->extlabel ? : curentry->label, NULL); + if (err) + return err; + if (curentry->hotkey) + { + char hk[] = { curentry->hotkey, '\0' }; + print_string (" --hotkey '"); + print_string (hk); + print_string ("'"); + } + print_string (" --id "); + err = print_escaped (outbuf, curentry->label, NULL); + if (err) + return err; + print_string (" {\n"); + + err = write_entry (outbuf, &menu, curentry); + if (err) + return err; + + print_string ("}\n"); + } + } + free_menu (&menu); + return GRUB_ERR_NONE; +} + +char * +grub_syslinux_config_file (const char *base, const char *target_base, + const char *cwd, const char *target_cwd, + const char *fname, grub_syslinux_flavour_t flav) +{ + struct output_buffer outbuf = { 0, 0, 0 }; + grub_err_t err; + err = config_file (&outbuf, base, target_base, cwd, target_cwd, + fname, NULL, flav); + if (err) + return NULL; + err = print (&outbuf, "\0", 1); + if (err) + return NULL; + return outbuf.buf; +} diff --git a/grub-core/lib/x86_64/xen/relocator.S b/grub-core/lib/x86_64/xen/relocator.S index 28ad4c766..78c123350 100644 --- a/grub-core/lib/x86_64/xen/relocator.S +++ b/grub-core/lib/x86_64/xen/relocator.S @@ -30,6 +30,7 @@ VARIABLE(grub_relocator_xen_remapper_virt) .quad 0 movq %rax, %rdi + movq %rax, %rbx /* mov imm64, %rax */ .byte 0x48 @@ -43,9 +44,9 @@ VARIABLE(grub_relocator_xen_remapper_map) movq $__HYPERVISOR_update_va_mapping, %rax syscall - addq $(LOCAL(cont) - LOCAL(base)), %rdi + addq $(LOCAL(cont) - LOCAL(base)), %rbx - jmp *%rdi + jmp *%rbx LOCAL(cont): @@ -61,7 +62,7 @@ VARIABLE(grub_relocator_xen_paging_size) VARIABLE(grub_relocator_xen_paging_start) .quad 0 - movq %rax, %rdi + movq %rax, %r12 /* mov imm64, %rax */ .byte 0x48 @@ -70,7 +71,8 @@ VARIABLE(grub_relocator_xen_mfn_list) .quad 0 movq %rax, %rsi -1: +1: + movq %r12, %rdi movq %rsi, %rbx movq 0(%rsi), %rsi shlq $12, %rsi @@ -82,7 +84,7 @@ VARIABLE(grub_relocator_xen_mfn_list) movq %r9, %rcx addq $8, %rbx - addq $4096, %rdi + addq $4096, %r12 movq %rbx, %rsi loop 1b diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c index 7041743aa..14a34bfbf 100644 --- a/grub-core/loader/arm/linux.c +++ b/grub-core/loader/arm/linux.c @@ -27,6 +27,7 @@ #include #include #include +#include GRUB_MOD_LICENSE ("GPLv3+"); @@ -265,7 +266,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]) { grub_file_t file; - int size; + grub_size_t size = 0; + struct grub_linux_initrd_context initrd_ctx; if (argc == 0) return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); @@ -274,10 +276,11 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), if (!file) return grub_errno; - size = grub_file_size (file); - if (size == 0) + if (grub_initrd_init (argc, argv, &initrd_ctx)) goto fail; + size = grub_get_initrd_size (&initrd_ctx); + if (initrd_start) grub_free ((void *) initrd_start); #ifdef GRUB_MACHINE_EFI @@ -295,14 +298,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), grub_dprintf ("loader", "Loading initrd to 0x%08x\n", (grub_addr_t) initrd_start); - if (grub_file_read (file, (void *) initrd_start, size) != size) - { - initrd_start = 0; - if (!grub_errno) - grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), - argv[0]); - goto fail; - } + if (grub_initrd_load (&initrd_ctx, argv, (void *) initrd_start)) + goto fail; initrd_end = initrd_start + size; diff --git a/grub-core/loader/efi/appleloader.c b/grub-core/loader/efi/appleloader.c index 56d553885..3777c7f0b 100644 --- a/grub-core/loader/efi/appleloader.c +++ b/grub-core/loader/efi/appleloader.c @@ -76,7 +76,7 @@ struct piwg_full_device_path .header = { \ .type = GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE, \ .subtype = GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE, \ - .length = {sizeof (struct grub_efi_memory_mapped_device_path), 0} \ + .length = sizeof (struct grub_efi_memory_mapped_device_path) \ }, \ .memory_type = GRUB_EFI_MEMORY_MAPPED_IO, \ .start_address = st, \ @@ -87,7 +87,7 @@ struct piwg_full_device_path .header = { \ .type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE, \ .subtype = GRUB_EFI_PIWG_DEVICE_PATH_SUBTYPE, \ - .length = {sizeof (struct grub_efi_piwg_device_path), 0} \ + .length = sizeof (struct grub_efi_piwg_device_path) \ }, \ .guid = {0x2B0585EB, 0xD8B8, 0x49A9, {0x8B, 0x8C, 0xE2, 0x1B, \ 0x01, 0xAE, 0xF2, 0xB7}} \ @@ -96,7 +96,7 @@ struct piwg_full_device_path { \ .type = GRUB_EFI_END_DEVICE_PATH_TYPE, \ .subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE, \ - .length = {sizeof (struct grub_efi_device_path), 0} \ + .length = sizeof (struct grub_efi_device_path) \ } \ } diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c index c0fed8068..233237018 100644 --- a/grub-core/loader/efi/chainloader.c +++ b/grub-core/loader/efi/chainloader.c @@ -122,9 +122,7 @@ copy_file_path (grub_efi_file_path_device_path_t *fp, if (*p == '/') *p = '\\'; - size = size * sizeof (grub_efi_char16_t) + sizeof (*fp); - fp->header.length[0] = (grub_efi_uint8_t) (size & 0xff); - fp->header.length[1] = (grub_efi_uint8_t) (size >> 8); + fp->header.length = size * sizeof (grub_efi_char16_t) + sizeof (*fp); } static grub_efi_device_path_t * @@ -184,8 +182,7 @@ make_file_path (grub_efi_device_path_t *dp, const char *filename) d = GRUB_EFI_NEXT_DEVICE_PATH (d); d->type = GRUB_EFI_END_DEVICE_PATH_TYPE; d->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; - d->length[0] = sizeof (*d); - d->length[1] = 0; + d->length = sizeof (*d); return file_path; } diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c index 006632e56..ea0edfafe 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -276,7 +276,7 @@ struct grub_e820_mmap grub_uint64_t addr; grub_uint64_t size; grub_uint32_t type; -} __attribute__((packed)); +} GRUB_PACKED; #define GRUB_E820_RAM 1 #define GRUB_E820_RESERVED 2 #define GRUB_E820_ACPI 3 diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c index 093747f51..2380642e7 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -89,7 +89,7 @@ struct idt_descriptor { grub_uint16_t limit; void *base; -} __attribute__ ((packed)); +} GRUB_PACKED; static struct idt_descriptor idt_desc = { @@ -251,8 +251,8 @@ allocate_pages (grub_size_t prot_size, grub_size_t *align, prot_mode_target = get_physical_target_address (ch); } - grub_dprintf ("linux", "prot_mode_mem = %lx, prot_mode_target = %lx, prot_size = %x\n", - (unsigned long) prot_mode_mem, (unsigned long) prot_mode_target, + grub_dprintf ("linux", "prot_mode_mem = %p, prot_mode_target = %lx, prot_size = %x\n", + prot_mode_mem, (unsigned long) prot_mode_target, (unsigned) prot_size); return GRUB_ERR_NONE; @@ -343,9 +343,11 @@ grub_linux_setup_video (struct linux_kernel_params *params) case GRUB_VIDEO_DRIVER_CIRRUS: case GRUB_VIDEO_DRIVER_BOCHS: case GRUB_VIDEO_DRIVER_RADEON_FULOONG2E: + case GRUB_VIDEO_DRIVER_RADEON_YEELOONG3A: case GRUB_VIDEO_DRIVER_IEEE1275: case GRUB_VIDEO_DRIVER_COREBOOT: /* Make gcc happy. */ + case GRUB_VIDEO_DRIVER_XEN: case GRUB_VIDEO_DRIVER_SDL: case GRUB_VIDEO_DRIVER_NONE: case GRUB_VIDEO_ADAPTER_CAPTURE: @@ -595,8 +597,8 @@ grub_linux_boot (void) } efi_mmap_buf = (grub_uint8_t *) real_mode_mem + ctx.real_size; - grub_dprintf ("linux", "real_mode_mem = %lx\n", - (unsigned long) real_mode_mem); + grub_dprintf ("linux", "real_mode_mem = %p\n", + real_mode_mem); ctx.params = real_mode_mem; @@ -743,7 +745,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), goto fail; } - if (lh.boot_flag != grub_cpu_to_le16 (0xaa55)) + if (lh.boot_flag != grub_cpu_to_le16_compile_time (0xaa55)) { grub_error (GRUB_ERR_BAD_OS, "invalid magic number"); goto fail; @@ -888,7 +890,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), if (grub_le_to_cpu16 (linux_params.version) >= 0x0208) { linux_params.v0208.efi_signature = GRUB_LINUX_EFI_SIGNATURE; - linux_params.v0208.efi_system_table = (grub_uint32_t) (unsigned long) grub_efi_system_table; + linux_params.v0208.efi_system_table = (grub_uint32_t) (grub_addr_t) grub_efi_system_table; #ifdef __x86_64__ linux_params.v0208.efi_system_table_hi = (grub_uint32_t) ((grub_uint64_t) grub_efi_system_table >> 32); #endif @@ -896,12 +898,12 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), else if (grub_le_to_cpu16 (linux_params.version) >= 0x0206) { linux_params.v0206.efi_signature = GRUB_LINUX_EFI_SIGNATURE; - linux_params.v0206.efi_system_table = (grub_uint32_t) (unsigned long) grub_efi_system_table; + linux_params.v0206.efi_system_table = (grub_uint32_t) (grub_addr_t) grub_efi_system_table; } else if (grub_le_to_cpu16 (linux_params.version) >= 0x0204) { linux_params.v0204.efi_signature = GRUB_LINUX_EFI_SIGNATURE_0204; - linux_params.v0204.efi_system_table = (grub_uint32_t) (unsigned long) grub_efi_system_table; + linux_params.v0204.efi_system_table = (grub_uint32_t) (grub_addr_t) grub_efi_system_table; } #endif diff --git a/grub-core/loader/i386/pc/truecrypt.c b/grub-core/loader/i386/pc/truecrypt.c new file mode 100644 index 000000000..159eab1a7 --- /dev/null +++ b/grub-core/loader/i386/pc/truecrypt.c @@ -0,0 +1,233 @@ +/* chainloader.c - boot another boot loader */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2004,2007,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_dl_t my_mod; +static struct grub_relocator *rel; +static grub_uint32_t edx = 0xffffffff; +static grub_uint16_t sp; +static grub_uint32_t destaddr; + +#define GRUB_TRUECRYPT_SEGMENT 0x2000 + +static grub_err_t +grub_truecrypt_boot (void) +{ + grub_uint16_t segment = destaddr >> 4; + struct grub_relocator16_state state = { + .cs = segment, + .ds = segment, + .es = segment, + .fs = segment, + .gs = segment, + .ss = segment, + .ip = 0x100, + .sp = sp, + .edx = edx, + .a20 = 1 + }; + grub_video_set_mode ("text", 0, 0); + + return grub_relocator16_boot (rel, state); +} + +static grub_err_t +grub_truecrypt_unload (void) +{ + grub_relocator_unload (rel); + rel = NULL; + grub_dl_unref (my_mod); + return GRUB_ERR_NONE; +} + +/* Information on protocol supplied by Attila Lendvai. */ +#define MAGIC "\0CD001\1EL TORITO SPECIFICATION" + +static grub_err_t +grub_cmd_truecrypt (grub_command_t cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + grub_file_t file = 0; + grub_err_t err; + void *truecrypt; + grub_size_t truecryptsize; + const grub_size_t truecryptmemsize = 42 * 1024; + grub_uint8_t dh; + grub_uint32_t catalog, rba; + grub_uint8_t buf[128]; + char *compressed = NULL; + char *uncompressed = NULL; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + rel = NULL; + + grub_dl_ref (my_mod); + + file = grub_file_open (argv[0]); + if (! file) + goto fail; + + if (grub_file_seek (file, 17 * 2048) == (grub_size_t) -1) + goto fail; + + if (grub_file_read (file, buf, sizeof (buf)) + != sizeof (buf)) + goto fail; + + if (grub_memcmp (buf, MAGIC, sizeof (MAGIC)) != 0) + { + grub_error (GRUB_ERR_BAD_OS, "invalid eltorito signature"); + goto fail; + } + + catalog = grub_get_unaligned32 (buf + 0x47); + + if (grub_file_seek (file, catalog * 2048) == (grub_size_t)-1) + goto fail; + + if (grub_file_read (file, buf, sizeof (buf)) + != sizeof (buf)) + goto fail; + + if (buf[0] != 1 || buf[1] != 0 || buf[0x1e] != 0x55 + || buf[0x1f] != 0xaa || buf[0x20] != 0x88 + || buf[0x26] != 1 || buf[0x27] != 0) + { + grub_error (GRUB_ERR_BAD_OS, "invalid eltorito catalog"); + goto fail; + } + + rba = grub_get_unaligned32 (buf + 0x28); + + if (grub_file_seek (file, rba * 2048 + 0x1b7) == (grub_size_t) -1) + goto fail; + + if (grub_file_read (file, &dh, 1) + != 1) + goto fail; + + if (grub_file_seek (file, rba * 2048 + 512 + 2048) == (grub_size_t) -1) + goto fail; + + compressed = grub_malloc (57 * 512); + if (!compressed) + goto fail; + + if (grub_file_read (file, compressed, 57 * 512) + != 57 * 512) + goto fail; + + uncompressed = grub_malloc (truecryptmemsize); + if (!uncompressed) + goto fail; + + /* It's actually gzip but our gzip decompressor isn't able to handle + trailing garbage, hence let's use raw decompressor. */ + truecryptsize = grub_deflate_decompress (compressed + 10, 57 * 512 - 10, + 0, uncompressed, truecryptmemsize); + if ((grub_ssize_t) truecryptsize < 0) + goto fail; + + if (truecryptmemsize <= truecryptsize + 0x100) + { + grub_error (GRUB_ERR_BAD_OS, "file is too big"); + goto fail; + } + + rel = grub_relocator_new (); + if (!rel) + goto fail; + + edx = (dh << 8) | grub_get_root_biosnumber (); + + destaddr = ALIGN_DOWN (grub_min (0x90000, grub_mmap_get_lower ()) + - truecryptmemsize, 64 * 1024); + + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (rel, &ch, destaddr, + truecryptmemsize); + if (err) + goto fail; + truecrypt = get_virtual_current_address (ch); + } + + grub_memset (truecrypt, 0, 0x100); + grub_memcpy ((char *) truecrypt + 0x100, uncompressed, truecryptsize); + + grub_memset ((char *) truecrypt + truecryptsize + 0x100, + 0, truecryptmemsize - truecryptsize - 0x100); + sp = truecryptmemsize - 4; + + grub_loader_set (grub_truecrypt_boot, grub_truecrypt_unload, 1); + + grub_free (uncompressed); + grub_free (compressed); + + return GRUB_ERR_NONE; + + fail: + + if (!grub_errno) + return grub_error (GRUB_ERR_BAD_OS, "bad truecrypt ISO"); + + if (file) + grub_file_close (file); + + grub_truecrypt_unload (); + + grub_free (uncompressed); + grub_free (compressed); + + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(truecrypt) +{ + cmd = grub_register_command ("truecrypt", grub_cmd_truecrypt, + 0, N_("Load Truecrypt ISO.")); + my_mod = mod; +} + +GRUB_MOD_FINI(truecrypt) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c index 91b66f8f5..c16b4b249 100644 --- a/grub-core/loader/i386/xen.c +++ b/grub-core/loader/i386/xen.c @@ -693,9 +693,9 @@ static grub_command_t cmd_xen, cmd_initrd, cmd_module, cmd_multiboot; GRUB_MOD_INIT (xen) { cmd_xen = grub_register_command ("linux", grub_cmd_xen, - 0, N_("Load linux.")); + 0, N_("Load Linux.")); cmd_multiboot = grub_register_command ("multiboot", grub_cmd_xen, - 0, N_("Load linux.")); + 0, N_("Load Linux.")); cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd, 0, N_("Load initrd.")); cmd_module = grub_register_command ("module", grub_cmd_module, diff --git a/grub-core/loader/i386/xen_file.c b/grub-core/loader/i386/xen_file.c index fb7f692b2..ebbf6aa11 100644 --- a/grub-core/loader/i386/xen_file.c +++ b/grub-core/loader/i386/xen_file.c @@ -77,12 +77,17 @@ grub_xen_get_info (grub_elf_t elf, struct grub_xen_file_info * xi) { grub_memset (xi, 0, sizeof (*xi)); - if (grub_elf_is_elf64 (elf)) + if (grub_elf_is_elf64 (elf) + && elf->ehdr.ehdr64.e_machine + == grub_cpu_to_le16_compile_time (EM_X86_64) + && elf->ehdr.ehdr64.e_ident[EI_DATA] == ELFDATA2LSB) { xi->arch = GRUB_XEN_FILE_X86_64; return grub_xen_get_info64 (elf, xi); } - if (grub_elf_is_elf32 (elf)) + if (grub_elf_is_elf32 (elf) + && elf->ehdr.ehdr32.e_machine == grub_cpu_to_le16_compile_time (EM_386) + && elf->ehdr.ehdr32.e_ident[EI_DATA] == ELFDATA2LSB) { xi->arch = GRUB_XEN_FILE_I386; return grub_xen_get_info32 (elf, xi); diff --git a/grub-core/loader/i386/xen_fileXX.c b/grub-core/loader/i386/xen_fileXX.c index ea0656c09..6df001576 100644 --- a/grub-core/loader/i386/xen_fileXX.c +++ b/grub-core/loader/i386/xen_fileXX.c @@ -156,6 +156,8 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi, return GRUB_ERR_NONE; } +#pragma GCC diagnostic ignored "-Wcast-align" + static grub_err_t parse_note (grub_elf_t elf, struct grub_xen_file_info *xi, grub_off_t off, grub_size_t sz) diff --git a/grub-core/loader/i386/xnu.c b/grub-core/loader/i386/xnu.c index 1b22bed9e..e83e1e972 100644 --- a/grub-core/loader/i386/xnu.c +++ b/grub-core/loader/i386/xnu.c @@ -671,7 +671,7 @@ grub_cpu_xnu_fill_devicetree (grub_uint64_t *fsbfreq_out) { void *ptr; struct grub_xnu_devtree_key *curkey; - grub_efi_guid_t guid; + grub_efi_packed_guid_t guid; char guidbuf[64]; /* Retrieve current key. */ diff --git a/grub-core/loader/linux.c b/grub-core/loader/linux.c index af067a5a4..117232f0c 100644 --- a/grub-core/loader/linux.c +++ b/grub-core/loader/linux.c @@ -21,7 +21,7 @@ struct newc_head char rdevminor[8]; char namesize[8]; char check[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_linux_initrd_component { diff --git a/grub-core/loader/macho.c b/grub-core/loader/macho.c index bf0bf74f7..59b195e27 100644 --- a/grub-core/loader/macho.c +++ b/grub-core/loader/macho.c @@ -23,12 +23,14 @@ #include #include -#include #include #include #include #include #include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); grub_err_t grub_macho_close (grub_macho_t macho) @@ -85,7 +87,7 @@ grub_macho_file (grub_file_t file, const char *filename, int is_64bit) } /* Is it a fat file? */ - if (filestart.fat.magic == grub_be_to_cpu32 (GRUB_MACHO_FAT_MAGIC)) + if (filestart.fat.magic == grub_cpu_to_be32_compile_time (GRUB_MACHO_FAT_MAGIC)) { struct grub_macho_fat_arch *archs; int i, narchs; @@ -111,15 +113,17 @@ grub_macho_file (grub_file_t file, const char *filename, int is_64bit) for (i = 0; i < narchs; i++) { - if (GRUB_MACHO_CPUTYPE_IS_HOST32 - (grub_be_to_cpu32 (archs[i].cputype)) && !is_64bit) + if ((archs[i].cputype + == grub_cpu_to_be32_compile_time (GRUB_MACHO_CPUTYPE_IA32)) + && !is_64bit) { macho->offset32 = grub_be_to_cpu32 (archs[i].offset); macho->end32 = grub_be_to_cpu32 (archs[i].offset) + grub_be_to_cpu32 (archs[i].size); } - if (GRUB_MACHO_CPUTYPE_IS_HOST64 - (grub_be_to_cpu32 (archs[i].cputype)) && is_64bit) + if ((archs[i].cputype + == grub_cpu_to_be32_compile_time (GRUB_MACHO_CPUTYPE_AMD64)) + && is_64bit) { macho->offset64 = grub_be_to_cpu32 (archs[i].offset); macho->end64 = grub_be_to_cpu32 (archs[i].offset) diff --git a/grub-core/loader/macho32.c b/grub-core/loader/macho32.c index eda8d9ed7..2de3a5c6f 100644 --- a/grub-core/loader/macho32.c +++ b/grub-core/loader/macho32.c @@ -1,4 +1,4 @@ -#include +#include #include #define SUFFIX(x) x ## 32 diff --git a/grub-core/loader/macho64.c b/grub-core/loader/macho64.c index 417a4a83d..0affceb77 100644 --- a/grub-core/loader/macho64.c +++ b/grub-core/loader/macho64.c @@ -1,4 +1,4 @@ -#include +#include #include #define SUFFIX(x) x ## 64 diff --git a/grub-core/loader/multiboot.c b/grub-core/loader/multiboot.c index 54e4d2408..4b71f3363 100644 --- a/grub-core/loader/multiboot.c +++ b/grub-core/loader/multiboot.c @@ -344,7 +344,7 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)), err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, lowest_addr, (0xffffffff - size) + 1, size, MULTIBOOT_MOD_ALIGN, - GRUB_RELOCATOR_PREFERENCE_NONE, 0); + GRUB_RELOCATOR_PREFERENCE_NONE, 1); if (err) { grub_file_close (file); diff --git a/grub-core/loader/multiboot_mbi2.c b/grub-core/loader/multiboot_mbi2.c index 951988fb9..83e8919fa 100644 --- a/grub-core/loader/multiboot_mbi2.c +++ b/grub-core/loader/multiboot_mbi2.c @@ -67,6 +67,7 @@ static grub_uint32_t biosdev, slice, part; static grub_size_t elf_sec_num, elf_sec_entsize; static unsigned elf_sec_shstrndx; static void *elf_sections; +static int keep_bs = 0; void grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize, @@ -127,6 +128,8 @@ grub_multiboot_load (grub_file_t file, const char *filename) COMPILE_TIME_ASSERT (MULTIBOOT_TAG_ALIGN % 4 == 0); + keep_bs = 0; + for (tag = (struct multiboot_header_tag *) (header + 1); tag->type != MULTIBOOT_TAG_TYPE_END; tag = (struct multiboot_header_tag *) ((grub_uint32_t *) tag + ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN) / 4)) @@ -160,6 +163,7 @@ grub_multiboot_load (grub_file_t file, const char *filename) case MULTIBOOT_TAG_TYPE_ACPI_NEW: case MULTIBOOT_TAG_TYPE_NETWORK: case MULTIBOOT_TAG_TYPE_EFI_MMAP: + case MULTIBOOT_TAG_TYPE_EFI_BS: break; default: @@ -198,6 +202,10 @@ grub_multiboot_load (grub_file_t file, const char *filename) case MULTIBOOT_HEADER_TAG_MODULE_ALIGN: break; + case MULTIBOOT_HEADER_TAG_EFI_BS: + keep_bs = 1; + break; + default: if (! (tag->flags & MULTIBOOT_HEADER_TAG_OPTIONAL)) { @@ -217,8 +225,11 @@ grub_multiboot_load (grub_file_t file, const char *filename) if (addr_tag) { + grub_uint64_t load_addr = (addr_tag->load_addr + 1) + ? addr_tag->load_addr : (addr_tag->header_addr + - ((char *) header - (char *) buffer)); int offset = ((char *) header - (char *) buffer - - (addr_tag->header_addr - addr_tag->load_addr)); + (addr_tag->header_addr - load_addr)); int load_size = ((addr_tag->load_end_addr == 0) ? file->size - offset : addr_tag->load_end_addr - addr_tag->load_addr); grub_size_t code_size; @@ -226,12 +237,12 @@ grub_multiboot_load (grub_file_t file, const char *filename) grub_relocator_chunk_t ch; if (addr_tag->bss_end_addr) - code_size = (addr_tag->bss_end_addr - addr_tag->load_addr); + code_size = (addr_tag->bss_end_addr - load_addr); else code_size = load_size; err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, - &ch, addr_tag->load_addr, + &ch, load_addr, code_size); if (err) { @@ -256,7 +267,7 @@ grub_multiboot_load (grub_file_t file, const char *filename) if (addr_tag->bss_end_addr) grub_memset ((grub_uint8_t *) source + load_size, 0, - addr_tag->bss_end_addr - addr_tag->load_addr - load_size); + addr_tag->bss_end_addr - load_addr - load_size); } else { @@ -362,6 +373,7 @@ grub_multiboot_get_mbi_size (void) find_efi_mmap_size (); #endif return 2 * sizeof (grub_uint32_t) + sizeof (struct multiboot_tag) + + sizeof (struct multiboot_tag) + (sizeof (struct multiboot_tag_string) + ALIGN_UP (cmdline_size, MULTIBOOT_TAG_ALIGN)) + (sizeof (struct multiboot_tag_string) @@ -637,7 +649,7 @@ grub_multiboot_make_mbi (grub_uint32_t *target) err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, 0, 0xffffffff - bufsize, bufsize, MULTIBOOT_TAG_ALIGN, - GRUB_RELOCATOR_PREFERENCE_NONE, 0); + GRUB_RELOCATOR_PREFERENCE_NONE, 1); if (err) return err; @@ -853,8 +865,16 @@ grub_multiboot_make_mbi (grub_uint32_t *target) tag->type = MULTIBOOT_TAG_TYPE_EFI_MMAP; tag->size = sizeof (*tag) + efi_mmap_size; - err = grub_efi_finish_boot_services (&efi_mmap_size, tag->efi_mmap, NULL, - &efi_desc_size, &efi_desc_version); + if (!keep_bs) + err = grub_efi_finish_boot_services (&efi_mmap_size, tag->efi_mmap, NULL, + &efi_desc_size, &efi_desc_version); + else + { + if (grub_efi_get_memory_map (&efi_mmap_size, (void *) tag->efi_mmap, + NULL, + &efi_desc_size, &efi_desc_version) <= 0) + err = grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); + } if (err) return err; tag->descr_size = efi_desc_size; @@ -864,6 +884,15 @@ grub_multiboot_make_mbi (grub_uint32_t *target) ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN) / sizeof (grub_properly_aligned_t); } + + if (keep_bs) + { + struct multiboot_tag *tag = (struct multiboot_tag *) ptrorig; + tag->type = MULTIBOOT_TAG_TYPE_EFI_BS; + tag->size = sizeof (struct multiboot_tag); + ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN) + / sizeof (grub_properly_aligned_t); + } #endif { diff --git a/grub-core/mmap/i386/pc/mmap.c b/grub-core/mmap/i386/pc/mmap.c index 983e220be..609994516 100644 --- a/grub-core/mmap/i386/pc/mmap.c +++ b/grub-core/mmap/i386/pc/mmap.c @@ -47,7 +47,7 @@ struct grub_e820_mmap_entry grub_uint64_t addr; grub_uint64_t len; grub_uint32_t type; -} __attribute__((packed)); +} GRUB_PACKED; /* Helper for preboot. */ diff --git a/grub-core/net/arp.c b/grub-core/net/arp.c index 81ce9c3f2..e92c7e7da 100644 --- a/grub-core/net/arp.c +++ b/grub-core/net/arp.c @@ -43,7 +43,7 @@ struct arphdr { grub_uint8_t hln; grub_uint8_t pln; grub_uint16_t op; -} __attribute__ ((packed)); +} GRUB_PACKED; static int have_pending; static grub_uint32_t pending_req; diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c index 5524af936..0b771fb10 100644 --- a/grub-core/net/dns.c +++ b/grub-core/net/dns.c @@ -86,7 +86,7 @@ struct dns_header grub_uint16_t ancount; grub_uint16_t nscount; grub_uint16_t arcount; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { @@ -673,19 +673,19 @@ grub_cmd_list_dns (struct grub_command *cmd __attribute__ ((unused)), switch (dns_servers[i].option) { case DNS_OPTION_IPV4: - strtype = "only ipv4"; + strtype = _("only ipv4"); break; case DNS_OPTION_IPV6: - strtype = "only ipv6"; + strtype = _("only ipv6"); break; case DNS_OPTION_PREFER_IPV4: - strtype = "prefer ipv4"; + strtype = _("prefer ipv4"); break; case DNS_OPTION_PREFER_IPV6: - strtype = "prefer ipv6"; + strtype = _("prefer ipv6"); break; } diff --git a/grub-core/net/drivers/i386/pc/pxe.c b/grub-core/net/drivers/i386/pc/pxe.c index 3e75b2e13..e8c0b22e2 100644 --- a/grub-core/net/drivers/i386/pc/pxe.c +++ b/grub-core/net/drivers/i386/pc/pxe.c @@ -45,7 +45,7 @@ struct grub_pxe_undi_open grub_uint16_t pkt_filter; grub_uint16_t mcast_count; grub_uint8_t mcast[8][6]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxe_undi_info { @@ -60,7 +60,7 @@ struct grub_pxe_undi_info grub_uint32_t romaddr; grub_uint16_t rxbufct; grub_uint16_t txbufct; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxe_undi_isr @@ -73,7 +73,7 @@ struct grub_pxe_undi_isr grub_uint32_t buffer; grub_uint8_t prot_type; grub_uint8_t pkt_type; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { @@ -104,7 +104,7 @@ struct grub_pxe_undi_transmit grub_uint32_t dest; grub_uint32_t tbd; grub_uint32_t reserved[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxe_undi_tbd { @@ -118,7 +118,7 @@ struct grub_pxe_undi_tbd grub_uint16_t len; grub_uint32_t ptr; } blocks[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxe_bangpxe *grub_pxe_pxenv; static grub_uint32_t pxe_rm_entry = 0; diff --git a/grub-core/net/ethernet.c b/grub-core/net/ethernet.c index b38e2c83e..c397b1b34 100644 --- a/grub-core/net/ethernet.c +++ b/grub-core/net/ethernet.c @@ -33,20 +33,20 @@ struct etherhdr grub_uint8_t dst[6]; grub_uint8_t src[6]; grub_uint16_t type; -} __attribute__ ((packed)); +} GRUB_PACKED; struct llchdr { grub_uint8_t dsap; grub_uint8_t ssap; grub_uint8_t ctrl; -} __attribute__ ((packed)); +} GRUB_PACKED; struct snaphdr { grub_uint8_t oui[3]; grub_uint16_t type; -} __attribute__ ((packed)); +} GRUB_PACKED; grub_err_t send_ethernet_packet (struct grub_net_network_level_interface *inf, diff --git a/grub-core/net/icmp.c b/grub-core/net/icmp.c index e55a0d86a..28d825ba0 100644 --- a/grub-core/net/icmp.c +++ b/grub-core/net/icmp.c @@ -25,13 +25,13 @@ struct icmp_header grub_uint8_t type; grub_uint8_t code; grub_uint16_t checksum; -} __attribute__ ((packed)); +} GRUB_PACKED; struct ping_header { grub_uint16_t id; grub_uint16_t seq; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { diff --git a/grub-core/net/icmp6.c b/grub-core/net/icmp6.c index a1bd0782c..2741e6f11 100644 --- a/grub-core/net/icmp6.c +++ b/grub-core/net/icmp6.c @@ -25,13 +25,13 @@ struct icmp_header grub_uint8_t type; grub_uint8_t code; grub_uint16_t checksum; -} __attribute__ ((packed)); +} GRUB_PACKED; struct ping_header { grub_uint16_t id; grub_uint16_t seq; -} __attribute__ ((packed)); +} GRUB_PACKED; struct router_adv { @@ -41,13 +41,13 @@ struct router_adv grub_uint32_t reachable_time; grub_uint32_t retrans_timer; grub_uint8_t options[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct option_header { grub_uint8_t type; grub_uint8_t len; -} __attribute__ ((packed)); +} GRUB_PACKED; struct prefix_option { @@ -58,19 +58,19 @@ struct prefix_option grub_uint32_t preferred_lifetime; grub_uint32_t reserved; grub_uint64_t prefix[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct neighbour_solicit { grub_uint32_t reserved; grub_uint64_t target[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct neighbour_advertise { grub_uint32_t flags; grub_uint64_t target[2]; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { diff --git a/grub-core/net/ip.c b/grub-core/net/ip.c index 08f225515..c6971f9fc 100644 --- a/grub-core/net/ip.c +++ b/grub-core/net/ip.c @@ -38,7 +38,7 @@ struct iphdr { grub_uint16_t chksum; grub_uint32_t src; grub_uint32_t dest; -} __attribute__ ((packed)) ; +} GRUB_PACKED ; enum { @@ -56,7 +56,7 @@ struct ip6hdr { grub_uint8_t ttl; ip6addr src; ip6addr dest; -} __attribute__ ((packed)) ; +} GRUB_PACKED ; static int cmp (const void *a__, const void *b__) diff --git a/grub-core/net/tcp.c b/grub-core/net/tcp.c index 89bc4cc72..2077f5519 100644 --- a/grub-core/net/tcp.c +++ b/grub-core/net/tcp.c @@ -104,7 +104,7 @@ struct tcphdr grub_uint16_t window; grub_uint16_t checksum; grub_uint16_t urgent; -} __attribute__ ((packed)); +} GRUB_PACKED; struct tcp_pseudohdr { @@ -113,7 +113,7 @@ struct tcp_pseudohdr grub_uint8_t zero; grub_uint8_t proto; grub_uint16_t tcp_length; -} __attribute__ ((packed)); +} GRUB_PACKED; struct tcp6_pseudohdr { @@ -122,7 +122,7 @@ struct tcp6_pseudohdr grub_uint32_t tcp_length; grub_uint8_t zero[3]; grub_uint8_t proto; -} __attribute__ ((packed)); +} GRUB_PACKED; static struct grub_net_tcp_socket *tcp_sockets; static struct grub_net_tcp_listen *tcp_listens; diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c index 97217d23d..9c489f1fc 100644 --- a/grub-core/net/tftp.c +++ b/grub-core/net/tftp.c @@ -94,7 +94,7 @@ struct tftphdr { grub_int8_t data[TFTP_DEFAULTSIZE_PACKET+2]; } oack; } u; -} __attribute__ ((packed)) ; +} GRUB_PACKED ; typedef struct tftp_data diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c index 05e42e6c7..3e4c337da 100644 --- a/grub-core/normal/charset.c +++ b/grub-core/normal/charset.c @@ -564,7 +564,7 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, { struct grub_unicode_glyph *outptr = visual_out; unsigned line_start = 0; - grub_ssize_t line_width = startwidth; + grub_ssize_t line_width; unsigned k; grub_ssize_t last_space = -1; grub_ssize_t last_space_width = 0; @@ -573,10 +573,25 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, if (!visual_len) return 0; + if (startwidth >= maxwidth && (grub_ssize_t) maxwidth > 0) + { + if (contchar) + { + grub_memset (outptr, 0, sizeof (visual[0])); + outptr->base = contchar; + outptr++; + } + grub_memset (outptr, 0, sizeof (visual[0])); + outptr->base = '\n'; + outptr++; + startwidth = 0; + } + + line_width = startwidth; + for (k = 0; k <= visual_len; k++) { grub_ssize_t last_width = 0; - if (pos && k != visual_len) { @@ -608,23 +623,28 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, { unsigned min_odd_level = 0xffffffff; unsigned max_level = 0; + unsigned kk = k; lines++; if (k != visual_len && last_space > (signed) line_start) - k = last_space; - else if (k != visual_len && line_start == 0 && startwidth != 0 - && !primitive_wrap) { - k = 0; - last_space_width = startwidth; + kk = last_space; + line_width -= last_space_width; + } + else if (k != visual_len && line_start == 0 && startwidth != 0 + && !primitive_wrap && lines == 1 + && line_width - startwidth < maxwidth) + { + kk = 0; + line_width -= startwidth; } else - last_space_width = line_width - last_width; + line_width = last_width; { unsigned i; - for (i = line_start; i < k; i++) + for (i = line_start; i < kk; i++) { if (visual[i].bidi_level > max_level) max_level = visual[i].bidi_level; @@ -640,12 +660,12 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, { unsigned in = line_start; unsigned i; - for (i = line_start; i < k; i++) + for (i = line_start; i < kk; i++) { if (i != line_start && visual[i].bidi_level >= j && visual[i-1].bidi_level < j) in = i; - if (visual[i].bidi_level >= j && (i + 1 == k + if (visual[i].bidi_level >= j && (i + 1 == kk || visual[i+1].bidi_level < j)) revert (visual, pos, in, i); } @@ -654,7 +674,7 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, { unsigned i; - for (i = line_start; i < k; i++) + for (i = line_start; i < kk; i++) { if (is_mirrored (visual[i].base) && visual[i].bidi_level) visual[i].attributes |= GRUB_UNICODE_GLYPH_ATTRIBUTE_MIRROR; @@ -679,7 +699,7 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, { int left_join = 0; unsigned i; - for (i = line_start; i < k; i++) + for (i = line_start; i < kk; i++) { enum grub_join_type join_type = get_join_type (visual[i].base); if (!(visual[i].attributes @@ -707,7 +727,7 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, { int right_join = 0; signed i; - for (i = k - 1; i >= 0 && (unsigned) i + 1 > line_start; + for (i = kk - 1; i >= 0 && (unsigned) i + 1 > line_start; i--) { enum grub_join_type join_type = get_join_type (visual[i].base); @@ -734,9 +754,9 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, } grub_memcpy (outptr, &visual[line_start], - (k - line_start) * sizeof (visual[0])); - outptr += k - line_start; - if (k != visual_len) + (kk - line_start) * sizeof (visual[0])); + outptr += kk - line_start; + if (kk != visual_len) { if (contchar) { @@ -749,15 +769,14 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, outptr++; } - if ((signed) k == last_space) - k++; + if ((signed) kk == last_space) + kk++; - line_start = k; - line_width -= last_space_width; - if (pos && k != visual_len) + line_start = kk; + if (pos && kk != visual_len) { - pos[visual[k].orig_pos].x = 0; - pos[visual[k].orig_pos].y = lines; + pos[visual[kk].orig_pos].x = 0; + pos[visual[kk].orig_pos].y = lines; } } } @@ -1136,7 +1155,7 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical, const grub_uint32_t *line_start = logical, *ptr; struct grub_unicode_glyph *visual_ptr; *visual_out = visual_ptr = grub_malloc (3 * sizeof (visual_ptr[0]) - * logical_len); + * (logical_len + 2)); if (!visual_ptr) return -1; for (ptr = logical; ptr <= logical + logical_len; ptr++) diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c index c24d04541..dd73bb7d8 100644 --- a/grub-core/normal/main.c +++ b/grub-core/normal/main.c @@ -40,64 +40,6 @@ GRUB_MOD_LICENSE ("GPLv3+"); static int nested_level = 0; int grub_normal_exit_level = 0; -/* Read a line from the file FILE. */ -char * -grub_file_getline (grub_file_t file) -{ - char c; - grub_size_t pos = 0; - char *cmdline; - int have_newline = 0; - grub_size_t max_len = 64; - - /* Initially locate some space. */ - cmdline = grub_malloc (max_len); - if (! cmdline) - return 0; - - while (1) - { - if (grub_file_read (file, &c, 1) != 1) - break; - - /* Skip all carriage returns. */ - if (c == '\r') - continue; - - - if (pos + 1 >= max_len) - { - char *old_cmdline = cmdline; - max_len = max_len * 2; - cmdline = grub_realloc (cmdline, max_len); - if (! cmdline) - { - grub_free (old_cmdline); - return 0; - } - } - - if (c == '\n') - { - have_newline = 1; - break; - } - - cmdline[pos++] = c; - } - - cmdline[pos] = '\0'; - - /* If the buffer is empty, don't return anything at all. */ - if (pos == 0 && !have_newline) - { - grub_free (cmdline); - cmdline = 0; - } - - return cmdline; -} - void grub_normal_free_menu (grub_menu_t menu) { @@ -190,14 +132,26 @@ read_config_file (const char *config) ctmp = grub_env_get ("config_directory"); if (ctmp) old_dir = grub_strdup (ctmp); - grub_env_set ("config_file", config); - config_dir = grub_strdup (config); + if (*config == '(') + { + grub_env_set ("config_file", config); + config_dir = grub_strdup (config); + } + else + { + /* $root is guranteed to be defined, otherwise open above would fail */ + config_dir = grub_xasprintf ("(%s)%s", grub_env_get ("root"), config); + if (config_dir) + grub_env_set ("config_file", config_dir); + } if (config_dir) - ptr = grub_strrchr (config_dir, '/'); - if (ptr) - *ptr = 0; - grub_env_set ("config_directory", config_dir); - grub_free (config_dir); + { + ptr = grub_strrchr (config_dir, '/'); + if (ptr) + *ptr = 0; + grub_env_set ("config_directory", config_dir); + grub_free (config_dir); + } grub_env_export ("config_file"); grub_env_export ("config_directory"); diff --git a/grub-core/osdep/basic/compress.c b/grub-core/osdep/basic/compress.c index 463ce4242..9794640e8 100644 --- a/grub-core/osdep/basic/compress.c +++ b/grub-core/osdep/basic/compress.c @@ -5,17 +5,17 @@ int grub_install_compress_gzip (const char *src, const char *dest) { - grub_util_error ("no compression is available for your platform"); + grub_util_error (_("no compression is available for your platform")); } int grub_install_compress_xz (const char *src, const char *dest) { - grub_util_error ("no compression is available for your platform"); + grub_util_error (_("no compression is available for your platform")); } int grub_install_compress_lzop (const char *src, const char *dest) { - grub_util_error ("no compression is available for your platform"); + grub_util_error (_("no compression is available for your platform")); } diff --git a/grub-core/osdep/basic/no_platform.c b/grub-core/osdep/basic/no_platform.c index 32be5e8e3..d76c34c14 100644 --- a/grub-core/osdep/basic/no_platform.c +++ b/grub-core/osdep/basic/no_platform.c @@ -27,20 +27,20 @@ void grub_install_register_ieee1275 (int is_prep, const char *install_device, int partno, const char *relpath) { - grub_util_error ("%s", "no IEEE1275 routines are available for your platform"); + grub_util_error ("%s", _("no IEEE1275 routines are available for your platform")); } void -grub_install_register_efi (const char *efidir_disk, int efidir_part, +grub_install_register_efi (grub_device_t efidir_grub_dev, const char *efifile_path, const char *efi_distributor) { - grub_util_error ("%s", "no EFI routines are available for your platform"); + grub_util_error ("%s", _("no EFI routines are available for your platform")); } void grub_install_sgi_setup (const char *install_device, const char *imgfile, const char *destname) { - grub_util_error ("%s", "no SGI routines are available for your platform"); + grub_util_error ("%s", _("no SGI routines are available for your platform")); } diff --git a/grub-core/osdep/exec.c b/grub-core/osdep/exec.c index b5f532a3e..9dcd926c1 100644 --- a/grub-core/osdep/exec.c +++ b/grub-core/osdep/exec.c @@ -1,3 +1,3 @@ -#if !defined (__MINGW32__) && !defined (__CYGWIN__) && !defined (__AROS__) +#if (!defined (__MINGW32__) || defined (__CYGWIN__)) && !defined (__AROS__) #include "unix/exec.c" #endif diff --git a/grub-core/osdep/linux/platform.c b/grub-core/osdep/linux/platform.c index a0854480a..175da72bc 100644 --- a/grub-core/osdep/linux/platform.c +++ b/grub-core/osdep/linux/platform.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -71,8 +72,10 @@ grub_install_get_default_x86_platform (void) anyway later. So it should be safe to try to load it here. */ - grub_util_exec ((const char * []){ "modprobe", "-q", - "efivars", NULL }); + grub_util_exec_redirect_all ((const char * []){ "modprobe", "efivars", NULL }, + NULL, NULL, "/dev/null"); + + grub_util_info ("Looking for /sys/firmware/efi .."); if (is_not_empty_directory ("/sys/firmware/efi")) { const char *pkglibdir = grub_util_get_pkglibdir (); @@ -80,6 +83,7 @@ grub_install_get_default_x86_platform (void) char *pd; int found; + grub_util_info ("...found"); if (is_64_kernel ()) platform = "x86_64-efi"; else @@ -90,10 +94,17 @@ grub_install_get_default_x86_platform (void) free (pd); if (found) return platform; + else + grub_util_info ("... but %s platform not available", platform); } + grub_util_info ("... not found. Looking for /proc/device-tree .."); if (is_not_empty_directory ("/proc/device-tree")) - return "i386-ieee1275"; - else - return "i386-pc"; + { + grub_util_info ("...found"); + return "i386-ieee1275"; + } + + grub_util_info ("... not found"); + return "i386-pc"; } diff --git a/grub-core/osdep/platform.c b/grub-core/osdep/platform.c index f7202642f..441d152d2 100644 --- a/grub-core/osdep/platform.c +++ b/grub-core/osdep/platform.c @@ -1,5 +1,7 @@ #ifdef __linux__ #include "linux/platform.c" +#elif defined (__MINGW32__) || defined (__CYGWIN__) +#include "windows/platform.c" #elif defined (__MINGW32__) || defined (__CYGWIN__) || defined (__AROS__) #include "basic/no_platform.c" #else diff --git a/grub-core/osdep/unix/exec.c b/grub-core/osdep/unix/exec.c index d4865f617..935ff120e 100644 --- a/grub-core/osdep/unix/exec.c +++ b/grub-core/osdep/unix/exec.c @@ -34,7 +34,8 @@ #include int -grub_util_exec (const char *const *argv) +grub_util_exec_redirect_all (const char *const *argv, const char *stdin_file, + const char *stdout_file, const char *stderr_file) { pid_t pid; int status = -1; @@ -43,15 +44,39 @@ grub_util_exec (const char *const *argv) grub_size_t strl = 0; for (ptr = argv; *ptr; ptr++) strl += grub_strlen (*ptr) + 1; + if (stdin_file) + strl += grub_strlen (stdin_file) + 2; + if (stdout_file) + strl += grub_strlen (stdout_file) + 2; + if (stderr_file) + strl += grub_strlen (stderr_file) + 3; + pstr = str = xmalloc (strl); for (ptr = argv; *ptr; ptr++) { pstr = grub_stpcpy (pstr, *ptr); *pstr++ = ' '; } - if (pstr > str) - pstr--; - *pstr = '\0'; + if (stdin_file) + { + *pstr++ = '<'; + pstr = grub_stpcpy (pstr, stdin_file); + *pstr++ = ' '; + } + if (stdout_file) + { + *pstr++ = '>'; + pstr = grub_stpcpy (pstr, stdout_file); + *pstr++ = ' '; + } + if (stderr_file) + { + *pstr++ = '2'; + *pstr++ = '>'; + pstr = grub_stpcpy (pstr, stderr_file); + pstr++; + } + *--pstr = '\0'; grub_util_info ("executing %s", str); grub_free (str); @@ -61,63 +86,7 @@ grub_util_exec (const char *const *argv) grub_util_error (_("Unable to fork: %s"), strerror (errno)); else if (pid == 0) { - /* Child. */ - - /* Close fd's. */ -#ifdef GRUB_UTIL - grub_util_devmapper_cleanup (); - grub_diskfilter_fini (); -#endif - - /* Ensure child is not localised. */ - setenv ("LC_ALL", "C", 1); - - execvp ((char *) argv[0], (char **) argv); - exit (127); - } - - waitpid (pid, &status, 0); - if (!WIFEXITED (status)) - return -1; - return WEXITSTATUS (status); -} - -int -grub_util_exec_redirect (const char *const *argv, const char *stdin_file, - const char *stdout_file) -{ - pid_t pid; - int status = -1; - char *str, *pstr; - const char *const *ptr; - grub_size_t strl = 0; - for (ptr = argv; *ptr; ptr++) - strl += grub_strlen (*ptr) + 1; - strl += grub_strlen (stdin_file) + 2; - strl += grub_strlen (stdout_file) + 2; - - pstr = str = xmalloc (strl); - for (ptr = argv; *ptr; ptr++) - { - pstr = grub_stpcpy (pstr, *ptr); - *pstr++ = ' '; - } - *pstr++ = '<'; - pstr = grub_stpcpy (pstr, stdin_file); - *pstr++ = ' '; - *pstr++ = '>'; - pstr = grub_stpcpy (pstr, stdout_file); - *pstr = '\0'; - - grub_util_info ("executing %s", str); - grub_free (str); - - pid = fork (); - if (pid < 0) - grub_util_error (_("Unable to fork: %s"), strerror (errno)); - else if (pid == 0) - { - int in, out; + int fd; /* Child. */ /* Close fd's. */ @@ -126,18 +95,32 @@ grub_util_exec_redirect (const char *const *argv, const char *stdin_file, grub_diskfilter_fini (); #endif - in = open (stdin_file, O_RDONLY); - if (in < 0) - exit (127); - dup2 (in, STDIN_FILENO); - close (in); + if (stdin_file) + { + fd = open (stdin_file, O_RDONLY); + if (fd < 0) + exit (127); + dup2 (fd, STDIN_FILENO); + close (fd); + } - out = open (stdout_file, O_WRONLY | O_CREAT, 0700); - dup2 (out, STDOUT_FILENO); - close (out); + if (stdout_file) + { + fd = open (stdout_file, O_WRONLY | O_CREAT, 0700); + if (fd < 0) + exit (127); + dup2 (fd, STDOUT_FILENO); + close (fd); + } - if (out < 0) - exit (127); + if (stderr_file) + { + fd = open (stderr_file, O_WRONLY | O_CREAT, 0700); + if (fd < 0) + exit (127); + dup2 (fd, STDERR_FILENO); + close (fd); + } /* Ensure child is not localised. */ setenv ("LC_ALL", "C", 1); @@ -151,10 +134,23 @@ grub_util_exec_redirect (const char *const *argv, const char *stdin_file, return WEXITSTATUS (status); } +int +grub_util_exec (const char *const *argv) +{ + return grub_util_exec_redirect_all (argv, NULL, NULL, NULL); +} + +int +grub_util_exec_redirect (const char *const *argv, const char *stdin_file, + const char *stdout_file) +{ + return grub_util_exec_redirect_all (argv, stdin_file, stdout_file, NULL); +} + int grub_util_exec_redirect_null (const char *const *argv) { - return grub_util_exec_redirect (argv, "/dev/null", "/dev/null"); + return grub_util_exec_redirect_all (argv, "/dev/null", "/dev/null", NULL); } pid_t diff --git a/grub-core/osdep/unix/hostdisk.c b/grub-core/osdep/unix/hostdisk.c index 309562af4..fa83f26e2 100644 --- a/grub-core/osdep/unix/hostdisk.c +++ b/grub-core/osdep/unix/hostdisk.c @@ -275,6 +275,10 @@ grub_util_get_mtime (const char *path) return st.st_mtime; } +#endif + +#if defined (__CYGWIN__) || (!defined (__MINGW32__) && !defined (__AROS__)) + int grub_util_is_special_file (const char *path) { diff --git a/grub-core/osdep/unix/platform.c b/grub-core/osdep/unix/platform.c index dc296c98b..a6dc07093 100644 --- a/grub-core/osdep/unix/platform.c +++ b/grub-core/osdep/unix/platform.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -129,10 +130,15 @@ grub_install_remove_efi_entries_by_distributor (const char *efi_distributor) } void -grub_install_register_efi (const char *efidir_disk, int efidir_part, +grub_install_register_efi (grub_device_t efidir_grub_dev, const char *efifile_path, const char *efi_distributor) { + const char * efidir_disk; + int efidir_part; + efidir_disk = grub_util_biosdisk_get_osdev (efidir_grub_dev->disk); + efidir_part = efidir_grub_dev->disk->partition ? efidir_grub_dev->disk->partition->number + 1 : 1; + if (grub_util_exec_redirect_null ((const char * []){ "efibootmgr", "--version", NULL })) { /* TRANSLATORS: This message is shown when required executable `%s' @@ -210,7 +216,7 @@ grub_install_register_ieee1275 (int is_prep, const char *install_device, boot_device, NULL })) { char *cmd = xasprintf ("setenv boot-device %s", boot_device); - grub_util_error ("`nvsetenv' failed. \nYou will have to set `boot-device' variable manually. At the IEEE1275 prompt, type:\n %s\n", + grub_util_error (_("`nvsetenv' failed. \nYou will have to set `boot-device' variable manually. At the IEEE1275 prompt, type:\n %s\n"), cmd); free (cmd); } diff --git a/grub-core/osdep/windows/blocklist.c b/grub-core/osdep/windows/blocklist.c index b9119ec3e..6d0809a48 100644 --- a/grub-core/osdep/windows/blocklist.c +++ b/grub-core/osdep/windows/blocklist.c @@ -81,10 +81,13 @@ grub_install_get_blocklist (grub_device_t root_dev, else if (grub_strcmp (fs->name, "udf") == 0) first_lcn = grub_udf_get_cluster_sector (root_dev->disk, &sec_per_lcn); else - grub_util_error ("unsupported fs for blocklist under windows: %s", + grub_util_error ("unsupported fs for blocklist on windows: %s", fs->name); - grub_util_info ("sec_per_lcn = %lld, first_lcn=%lld", sec_per_lcn, first_lcn); + grub_util_info ("sec_per_lcn = %" GRUB_HOST_PRIuLONG_LONG + ", first_lcn=%" GRUB_HOST_PRIuLONG_LONG, + (unsigned long long) sec_per_lcn, + (unsigned long long) first_lcn); first_lcn += grub_partition_get_start (root_dev->disk->partition); diff --git a/grub-core/osdep/windows/dl.c b/grub-core/osdep/windows/dl.c index b18a4a009..eec6a24ad 100644 --- a/grub-core/osdep/windows/dl.c +++ b/grub-core/osdep/windows/dl.c @@ -32,7 +32,7 @@ grub_osdep_dl_memalign (grub_size_t align, grub_size_t size) void *ret; if (align > 4096) { - grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, N_("too large alignment")); + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "too large alignment"); return NULL; } diff --git a/grub-core/osdep/windows/getroot.c b/grub-core/osdep/windows/getroot.c index 160e8c92c..661d95461 100644 --- a/grub-core/osdep/windows/getroot.c +++ b/grub-core/osdep/windows/getroot.c @@ -49,11 +49,57 @@ #include #include -#if SIZEOF_TCHAR == 1 -#define tcsnicmp strncasecmp -#elif SIZEOF_TCHAR == 2 -#define tcsnicmp wcsnicmp -#endif +TCHAR * +grub_get_mount_point (const TCHAR *path) +{ + const TCHAR *ptr; + TCHAR *out; + TCHAR letter = 0; + size_t allocsize; + + for (ptr = path; *ptr; ptr++); + allocsize = (ptr - path + 10) * 2; + out = xmalloc (allocsize * sizeof (out[0])); + + /* When pointing to EFI system partition GetVolumePathName fails + for ESP root and returns abberant information for everything + else. Since GetVolumePathName shouldn't fail for any valid + //?/X: we use it as indicator. */ + if ((path[0] == '/' || path[0] == '\\') + && (path[1] == '/' || path[1] == '\\') + && (path[2] == '?' || path[2] == '.') + && (path[3] == '/' || path[3] == '\\') + && path[4] + && (path[5] == ':')) + letter = path[4]; + if (path[0] && path[1] == ':') + letter = path[0]; + if (letter) + { + TCHAR letterpath[10] = TEXT("\\\\?\\#:"); + letterpath[4] = letter; + if (!GetVolumePathName (letterpath, out, allocsize)) + { + if (path[1] == ':') + { + out[0] = path[0]; + out[1] = ':'; + out[2] = '\0'; + return out; + } + memcpy (out, path, sizeof (out[0]) * 6); + out[6] = '\0'; + return out; + } + } + + if (!GetVolumePathName (path, out, allocsize)) + { + free (out); + return NULL; + } + return out; +} char ** grub_guess_root_devices (const char *dir) @@ -62,21 +108,17 @@ grub_guess_root_devices (const char *dir) TCHAR *dirwindows, *mntpointwindows; TCHAR *ptr; TCHAR volumename[100]; - size_t mntpointwindows_sz; dirwindows = grub_util_get_windows_path (dir); if (!dirwindows) return 0; - mntpointwindows_sz = strlen (dir) * 2 + 1; - mntpointwindows = xmalloc ((mntpointwindows_sz + 1) * sizeof (mntpointwindows[0])); + mntpointwindows = grub_get_mount_point (dirwindows); - if (!GetVolumePathName (dirwindows, - mntpointwindows, - mntpointwindows_sz)) + if (!mntpointwindows) { free (dirwindows); - free (mntpointwindows); + grub_util_info ("can't get volume path name: %d", (int) GetLastError ()); return 0; } @@ -98,9 +140,29 @@ grub_guess_root_devices (const char *dir) volumename, ARRAY_SIZE (volumename))) { - free (dirwindows); - free (mntpointwindows); - return 0; + TCHAR letter = 0; + if ((mntpointwindows[0] == '/' || mntpointwindows[0] == '\\') + && (mntpointwindows[1] == '/' || mntpointwindows[1] == '\\') + && (mntpointwindows[2] == '?' || mntpointwindows[2] == '.') + && (mntpointwindows[3] == '/' || mntpointwindows[3] == '\\') + && mntpointwindows[4] + && (mntpointwindows[5] == ':')) + letter = mntpointwindows[4]; + if (mntpointwindows[0] && mntpointwindows[1] == ':') + letter = mntpointwindows[0]; + if (!letter) + { + free (dirwindows); + free (mntpointwindows); + return 0; + } + volumename[0] = '\\'; + volumename[1] = '\\'; + volumename[2] = '?'; + volumename[3] = '\\'; + volumename[4] = letter; + volumename[5] = ':'; + volumename[6] = '\0'; } os_dev = xmalloc (2 * sizeof (os_dev[0])); @@ -123,6 +185,31 @@ grub_guess_root_devices (const char *dir) return os_dev; } +static int tcharncasecmp (LPCTSTR a, const char *b, size_t sz) +{ + for (; sz; sz--, a++, b++) + { + char ac, bc; + if(*a >= 0x80) + return +1; + if (*b & 0x80) + return -1; + if (*a == '\0' && *b == '\0') + return 0; + ac = *a; + bc = *b; + if (ac >= 'A' && ac <= 'Z') + ac -= 'A' - 'a'; + if (bc >= 'A' && bc <= 'Z') + bc -= 'A' - 'a'; + if (ac > bc) + return +1; + if (ac < bc) + return -1; + } + return 0; +} + char * grub_util_part_to_disk (const char *os_dev, struct stat *st __attribute__ ((unused)), @@ -138,8 +225,8 @@ grub_util_part_to_disk (const char *os_dev, ((name[1] == '/') || (name[1] == '\\')) && ((name[2] == '.') || (name[2] == '?')) && ((name[3] == '/') || (name[3] == '\\')) - && (tcsnicmp (name + 4, TEXT("PhysicalDrive"), sizeof ("PhysicalDrive") - 1) == 0 - || tcsnicmp (name + 4, TEXT("Harddisk"), sizeof ("Harddisk") - 1) == 0 + && (tcharncasecmp (name + 4, "PhysicalDrive", sizeof ("PhysicalDrive") - 1) == 0 + || tcharncasecmp (name + 4, "Harddisk", sizeof ("Harddisk") - 1) == 0 || ((name[4] == 'A' || name[4] == 'a' || name[4] == 'B' || name[4] == 'b') && name[5] == ':' && name[6] == '\0'))) { @@ -209,8 +296,8 @@ grub_util_find_partition_start_os (const char *os_dev) ((name[1] == '/') || (name[1] == '\\')) && ((name[2] == '.') || (name[2] == '?')) && ((name[3] == '/') || (name[3] == '\\')) - && (tcsnicmp (name + 4, TEXT("PhysicalDrive"), sizeof ("PhysicalDrive") - 1) == 0 - || tcsnicmp (name + 4, TEXT("Harddisk"), sizeof ("Harddisk") - 1) == 0 + && (tcharncasecmp (name + 4, "PhysicalDrive", sizeof ("PhysicalDrive") - 1) == 0 + || tcharncasecmp (name + 4, "Harddisk", sizeof ("Harddisk") - 1) == 0 || ((name[4] == 'A' || name[4] == 'a' || name[4] == 'B' || name[4] == 'b') && name[5] == ':' && name[6] == '\0'))) { diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c index 41ab318c0..d390b25fc 100644 --- a/grub-core/osdep/windows/hostdisk.c +++ b/grub-core/osdep/windows/hostdisk.c @@ -48,6 +48,10 @@ #include #include +#ifdef __CYGWIN__ +#include +#endif + #if SIZEOF_TCHAR == 1 LPTSTR @@ -93,12 +97,54 @@ grub_util_tchar_to_utf8 (LPCTSTR in) #error "Unsupported TCHAR size" #endif + +static LPTSTR +grub_util_get_windows_path_real (const char *path) +{ + LPTSTR fpa; + LPTSTR tpath; + size_t alloc, len; + + tpath = grub_util_utf8_to_tchar (path); + + alloc = PATH_MAX; + + while (1) + { + fpa = xmalloc (alloc * sizeof (fpa[0])); + + len = GetFullPathName (tpath, alloc, fpa, NULL); + if (len >= alloc) + { + free (fpa); + alloc = 2 * (len + 2); + continue; + } + if (len == 0) + { + free (fpa); + return tpath; + } + + free (tpath); + return fpa; + } +} + #ifdef __CYGWIN__ LPTSTR grub_util_get_windows_path (const char *path) { LPTSTR winpath; + /* Workaround cygwin bugs with //?/. */ + if ((path[0] == '\\' || path[0] == '/') + && (path[1] == '\\' || path[1] == '/') + && (path[2] == '?' || path[2] == '.') + && (path[3] == '\\' || path[3] == '/')) + return grub_util_get_windows_path_real (path); + winpath = xmalloc (sizeof (winpath[0]) * PATH_MAX); + memset (winpath, 0, sizeof (winpath[0]) * PATH_MAX); if (cygwin_conv_path ((sizeof (winpath[0]) == 1 ? CCP_POSIX_TO_WIN_A : CCP_POSIX_TO_WIN_W) | CCP_ABSOLUTE, path, winpath, sizeof (winpath[0]) * PATH_MAX)) @@ -109,20 +155,7 @@ grub_util_get_windows_path (const char *path) LPTSTR grub_util_get_windows_path (const char *path) { - LPTSTR fpa; - LPTSTR tpath; - - tpath = grub_util_utf8_to_tchar (path); - - fpa = xmalloc (PATH_MAX * sizeof (fpa[0])); - if (!_wfullpath (fpa, tpath, PATH_MAX)) - { - free (fpa); - return tpath; - } - - free (tpath); - return fpa; + return grub_util_get_windows_path_real (path); } #endif @@ -434,6 +467,8 @@ grub_util_rmdir (const char *name) return ret; } +#ifndef __CYGWIN__ + static char * get_temp_name (void) { @@ -441,7 +476,6 @@ get_temp_name (void) TCHAR *ptr; HCRYPTPROV hCryptProv; grub_uint8_t rnd[5]; - const size_t sz = sizeof (rnd) * GRUB_CHAR_BIT / 5; int i; GetTempPath (ARRAY_SIZE (rt) - 100, rt); @@ -504,6 +538,8 @@ grub_util_make_temporary_dir (void) return ret; } +#endif + int grub_util_is_directory (const char *name) { @@ -614,20 +650,19 @@ grub_util_is_special_file (const char *name) #else +void +grub_util_file_sync (FILE *f) +{ + fflush (f); + if (!allow_fd_syncs) + return; + fsync (fileno (f)); +} + FILE * grub_util_fopen (const char *path, const char *mode) { return fopen (path, mode); } -int -grub_util_is_special_file (const char *path) -{ - struct stat st; - - if (lstat (destnew, &st) == -1) - return 1; - return (!S_ISREG (st.st_mode) && !S_ISDIR (st.st_mode)); -} - #endif diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c new file mode 100644 index 000000000..1046a6ca3 --- /dev/null +++ b/grub-core/osdep/windows/platform.c @@ -0,0 +1,424 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include +#include + +#define GRUB_EFI_GLOBAL_VARIABLE_GUID_WINDOWS_STR L"{8be4df61-93ca-11d2-aa0d-00e098032b8c}" + +static enum { PLAT_UNK, PLAT_BIOS, PLAT_EFI } platform; +static DWORD (WINAPI * func_GetFirmwareEnvironmentVariableW) (LPCWSTR lpName, + LPCWSTR lpGuid, + PVOID pBuffer, + DWORD nSize); +static BOOL (WINAPI * func_SetFirmwareEnvironmentVariableW) (LPCWSTR lpName, + LPCWSTR lpGuid, + PVOID pBuffer, + DWORD nSize); +static void (WINAPI * func_GetNativeSystemInfo) (LPSYSTEM_INFO lpSystemInfo); + +static int +get_efi_privilegies (void) +{ + int ret = 1; + HANDLE hSelf; + TOKEN_PRIVILEGES tkp; + + if (!OpenProcessToken (GetCurrentProcess(), + TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hSelf)) + return 0; + + LookupPrivilegeValue (NULL, SE_SYSTEM_ENVIRONMENT_NAME, + &tkp.Privileges[0].Luid); + tkp.PrivilegeCount = 1; + tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + if (!AdjustTokenPrivileges (hSelf, FALSE, &tkp, 0, NULL, 0)) + ret = 0; + if (GetLastError () != ERROR_SUCCESS) + ret = 0; + CloseHandle (hSelf); + return 1; +} + +static void +get_platform (void) +{ + HMODULE kernel32; + char buffer[256]; + + if (platform != PLAT_UNK) + return; + + kernel32 = GetModuleHandle(TEXT("kernel32.dll")); + if (!kernel32) + { + platform = PLAT_BIOS; + return; + } + + func_GetFirmwareEnvironmentVariableW = (void *) + GetProcAddress (kernel32, "GetFirmwareEnvironmentVariableW"); + func_SetFirmwareEnvironmentVariableW = (void *) + GetProcAddress (kernel32, "SetFirmwareEnvironmentVariableW"); + func_GetNativeSystemInfo = (void *) + GetProcAddress (kernel32, "GetNativeSystemInfo"); + if (!func_GetNativeSystemInfo) + func_GetNativeSystemInfo = GetSystemInfo; + if (!func_GetFirmwareEnvironmentVariableW + || !func_SetFirmwareEnvironmentVariableW) + { + platform = PLAT_BIOS; + return; + } + + if (!get_efi_privilegies ()) + { + grub_util_warn (_("Insufficient privilegies to access firmware, assuming BIOS")); + platform = PLAT_BIOS; + } + + if (!func_GetFirmwareEnvironmentVariableW (L"BootOrder", GRUB_EFI_GLOBAL_VARIABLE_GUID_WINDOWS_STR, + buffer, sizeof (buffer)) + && GetLastError () != ERROR_INVALID_FUNCTION) + { + platform = PLAT_BIOS; + return; + } + platform = PLAT_EFI; + return; +} + +const char * +grub_install_get_default_x86_platform (void) +{ + SYSTEM_INFO si; + + get_platform (); + if (platform != PLAT_EFI) + return "i386-pc"; + + /* EFI */ + /* Assume 64-bit in case of failure. */ + si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64; + func_GetNativeSystemInfo (&si); + if (si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_INTEL) + return "x86_64-efi"; + else + return "i386-efi"; +} + +static void * +get_efi_variable (const wchar_t *varname, ssize_t *len) +{ + void *ret = NULL; + size_t alloc_size = 256, read_size; + get_platform (); + while (1) + { + DWORD err; + ret = xmalloc (alloc_size); + read_size = func_GetFirmwareEnvironmentVariableW (varname, GRUB_EFI_GLOBAL_VARIABLE_GUID_WINDOWS_STR, + ret, alloc_size); + err = GetLastError (); + if (read_size) + { + *len = read_size; + return ret; + } + if (err == ERROR_INSUFFICIENT_BUFFER + && alloc_size * 2 != 0) + { + alloc_size *= 2; + free (ret); + continue; + } + if (err == ERROR_ENVVAR_NOT_FOUND) + { + *len = -1; + return NULL; + } + *len = -2; + return NULL; + } +} + +static void +set_efi_variable (const wchar_t *varname, void *in, grub_size_t len) +{ + get_platform (); + func_SetFirmwareEnvironmentVariableW (varname, GRUB_EFI_GLOBAL_VARIABLE_GUID_WINDOWS_STR, + in, len); +} + +static char +bin2hex (int v) +{ + if (v < 10) + return '0' + v; + return 'A' + v - 10; +} + +static void * +get_efi_variable_bootn (grub_uint16_t n, ssize_t *len) +{ + wchar_t varname[20] = L"Boot0000"; + varname[7] = bin2hex (n & 0xf); + varname[6] = bin2hex ((n >> 4) & 0xf); + varname[5] = bin2hex ((n >> 8) & 0xf); + varname[4] = bin2hex ((n >> 12) & 0xf); + return get_efi_variable (varname, len); +} + +static void +set_efi_variable_bootn (grub_uint16_t n, void *in, grub_size_t len) +{ + wchar_t varname[20] = L"Boot0000"; + varname[7] = bin2hex (n & 0xf); + varname[6] = bin2hex ((n >> 4) & 0xf); + varname[5] = bin2hex ((n >> 8) & 0xf); + varname[4] = bin2hex ((n >> 12) & 0xf); + set_efi_variable (varname, in, len); +} + +void +grub_install_register_efi (grub_device_t efidir_grub_dev, + const char *efifile_path, + const char *efi_distributor) +{ + grub_uint16_t *boot_order, *new_boot_order; + grub_uint16_t *distributor16; + grub_uint8_t *entry; + grub_size_t distrib8_len, distrib16_len, path16_len, path8_len; + ssize_t boot_order_len, new_boot_order_len; + grub_uint16_t order_num = 0; + int have_order_num = 0; + grub_size_t max_path_length; + grub_uint8_t *path; + void *pathptr; + struct grub_efi_hard_drive_device_path *hddp; + struct grub_efi_file_path_device_path *filep; + struct grub_efi_device_path *endp; + + get_platform (); + if (platform != PLAT_EFI) + grub_util_error ("%s", _("no EFI routines are available when running in BIOS mode")); + + distrib8_len = grub_strlen (efi_distributor); + distributor16 = xmalloc ((distrib8_len + 1) * GRUB_MAX_UTF16_PER_UTF8 + * sizeof (grub_uint16_t)); + distrib16_len = grub_utf8_to_utf16 (distributor16, distrib8_len * GRUB_MAX_UTF16_PER_UTF8, + (const grub_uint8_t *) efi_distributor, + distrib8_len, 0); + distributor16[distrib16_len] = 0; + + /* Windows doesn't allow to list variables so first look for bootorder to + find if there is an entry from the same distributor. If not try sequentially + until we find same distributor or empty spot. */ + boot_order = get_efi_variable (L"BootOrder", &boot_order_len); + if (boot_order_len < -1) + grub_util_error ("%s", _("unexpected EFI error")); + if (boot_order_len > 0) + { + size_t i; + for (i = 0; i < boot_order_len / 2; i++) + { + void *current = NULL; + ssize_t current_len; + current = get_efi_variable_bootn (i, ¤t_len); + if (current_len < 0) + continue; /* FIXME Should we abort on error? */ + if (current_len < (distrib16_len + 1) * sizeof (grub_uint16_t) + + 6) + { + grub_free (current); + continue; + } + if (grub_memcmp ((grub_uint16_t *) current + 3, + distributor16, + (distrib16_len + 1) * sizeof (grub_uint16_t)) != 0) + { + grub_free (current); + continue; + } + order_num = i; + have_order_num = 1; + grub_util_info ("Found matching distributor at Boot%04x", + order_num); + grub_free (current); + break; + } + } + if (!have_order_num) + { + size_t i; + for (i = 0; i < 0x10000; i++) + { + void *current = NULL; + ssize_t current_len; + current = get_efi_variable_bootn (i, ¤t_len); + if (current_len < -1) + continue; /* FIXME Should we abort on error? */ + if (current_len == -1) + { + if (!have_order_num) + { + order_num = i; + have_order_num = 1; + grub_util_info ("Creating new entry at Boot%04x", + order_num); + } + continue; + } + if (current_len < (distrib16_len + 1) * sizeof (grub_uint16_t) + + 6) + { + grub_free (current); + continue; + } + if (grub_memcmp ((grub_uint16_t *) current + 3, + distributor16, + (distrib16_len + 1) * sizeof (grub_uint16_t)) != 0) + { + grub_free (current); + continue; + } + order_num = i; + have_order_num = 1; + grub_util_info ("Found matching distributor at Boot%04x", + order_num); + grub_free (current); + break; + } + } + if (!have_order_num) + grub_util_error ("%s", _("Couldn't find a free BootNNNN slot")); + path8_len = grub_strlen (efifile_path); + max_path_length = sizeof (*hddp) + sizeof (*filep) + (path8_len * GRUB_MAX_UTF16_PER_UTF8 + 1) * sizeof (grub_uint16_t) + sizeof (*endp); + entry = xmalloc (6 + (distrib16_len + 1) * sizeof (grub_uint16_t) + max_path_length); + /* attributes: active. */ + entry[0] = 1; + entry[1] = 0; + entry[2] = 0; + entry[3] = 0; + grub_memcpy (entry + 6, + distributor16, + (distrib16_len + 1) * sizeof (grub_uint16_t)); + + path = entry + 6 + (distrib16_len + 1) * sizeof (grub_uint16_t); + pathptr = path; + + hddp = pathptr; + grub_memset (hddp, 0, sizeof (*hddp)); + hddp->header.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE; + hddp->header.subtype = GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE; + hddp->header.length = sizeof (*hddp); + hddp->partition_number = efidir_grub_dev->disk->partition ? efidir_grub_dev->disk->partition->number + 1 : 1; + if (efidir_grub_dev->disk->partition + && grub_strcmp (efidir_grub_dev->disk->partition->partmap->name, "msdos") == 0) + { + grub_partition_t p; + + p = efidir_grub_dev->disk->partition; + efidir_grub_dev->disk->partition = p->parent; + if (grub_disk_read (efidir_grub_dev->disk, 0, 440, + 4, hddp->partition_signature)) + grub_util_error ("%s", grub_errmsg); + efidir_grub_dev->disk->partition = p; + + hddp->partmap_type = 1; + hddp->signature_type = 1; + } + else if (efidir_grub_dev->disk->partition + && grub_strcmp (efidir_grub_dev->disk->partition->partmap->name, "gpt") == 0) + { + struct grub_gpt_partentry gptdata; + grub_partition_t p; + + p = efidir_grub_dev->disk->partition; + efidir_grub_dev->disk->partition = p->parent; + if (grub_disk_read (efidir_grub_dev->disk, + p->offset, p->index, + sizeof (gptdata), &gptdata)) + grub_util_error ("%s", grub_errmsg); + efidir_grub_dev->disk->partition = p; + grub_memcpy (hddp->partition_signature, + gptdata.guid, 16); + + hddp->partmap_type = 2; + hddp->signature_type = 2; + } + + hddp->partition_start = grub_partition_get_start (efidir_grub_dev->disk->partition) + << (efidir_grub_dev->disk->log_sector_size - GRUB_DISK_SECTOR_BITS); + hddp->partition_size = grub_disk_get_size (efidir_grub_dev->disk) + << (efidir_grub_dev->disk->log_sector_size - GRUB_DISK_SECTOR_BITS); + + pathptr = hddp + 1; + filep = pathptr; + filep->header.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE; + filep->header.subtype = GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE; + + path16_len = grub_utf8_to_utf16 (filep->path_name, + path8_len * GRUB_MAX_UTF16_PER_UTF8, + (const grub_uint8_t *) efifile_path, + path8_len, 0); + filep->path_name[path16_len] = 0; + filep->header.length = sizeof (*filep) + (path16_len + 1) * sizeof (grub_uint16_t); + pathptr = &filep->path_name[path16_len + 1]; + endp = pathptr; + endp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; + endp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; + endp->length = sizeof (*endp); + pathptr = endp + 1; + + entry[4] = (grub_uint8_t *) pathptr - path; + entry[5] = ((grub_uint8_t *) pathptr - path) >> 8; + + new_boot_order = xmalloc ((boot_order_len > 0 ? boot_order_len : 0) + 2); + new_boot_order[0] = order_num; + new_boot_order_len = 1; + { + ssize_t i; + for (i = 0; i < boot_order_len / 2; i++) + if (boot_order[i] != order_num) + new_boot_order[new_boot_order_len++] = boot_order[i]; + } + + set_efi_variable_bootn (order_num, entry, (grub_uint8_t *) pathptr - entry); + set_efi_variable (L"BootOrder", new_boot_order, new_boot_order_len * sizeof (grub_uint16_t)); +} + +void +grub_install_register_ieee1275 (int is_prep, const char *install_device, + int partno, const char *relpath) +{ + grub_util_error ("%s", _("no IEEE1275 routines are available for your platform")); +} + +void +grub_install_sgi_setup (const char *install_device, + const char *imgfile, const char *destname) +{ + grub_util_error ("%s", _("no SGI routines are available for your platform")); +} diff --git a/grub-core/osdep/windows/relpath.c b/grub-core/osdep/windows/relpath.c index 731cd0ca6..cb0861744 100644 --- a/grub-core/osdep/windows/relpath.c +++ b/grub-core/osdep/windows/relpath.c @@ -33,19 +33,20 @@ #include #include -#if SIZEOF_TCHAR == 1 -#define tclen strlen -#elif SIZEOF_TCHAR == 2 -#define tclen wcslen -#endif +static size_t +tclen (const TCHAR *s) +{ + const TCHAR *s0 = s; + while (*s) + s++; + return s - s0; +} char * grub_make_system_path_relative_to_its_root (const char *path) { TCHAR *dirwindows, *mntpointwindows; TCHAR *ptr; - TCHAR volumename[100]; - size_t mntpointwindows_sz; size_t offset, flen; TCHAR *ret; char *cret; @@ -54,12 +55,9 @@ grub_make_system_path_relative_to_its_root (const char *path) if (!dirwindows) return xstrdup (path); - mntpointwindows_sz = strlen (path) * 2 + 1; - mntpointwindows = xmalloc ((mntpointwindows_sz + 1) * sizeof (mntpointwindows[0])); + mntpointwindows = grub_get_mount_point (dirwindows); - if (!GetVolumePathName (dirwindows, - mntpointwindows, - mntpointwindows_sz)) + if (!mntpointwindows) { offset = 0; if (dirwindows[0] && dirwindows[1] == ':') diff --git a/grub-core/partmap/acorn.c b/grub-core/partmap/acorn.c index 4d7f5008b..7bb93d9be 100644 --- a/grub-core/partmap/acorn.c +++ b/grub-core/partmap/acorn.c @@ -43,10 +43,10 @@ struct grub_acorn_boot_block grub_uint8_t flags; grub_uint16_t start_cylinder; grub_uint8_t checksum; - } __attribute__ ((packed, aligned)); + } GRUB_PACKED; grub_uint8_t bin[0x200]; }; -} __attribute__ ((packed, aligned)); +} GRUB_PACKED; struct linux_part { diff --git a/grub-core/partmap/amiga.c b/grub-core/partmap/amiga.c index 97f71600f..13034f15c 100644 --- a/grub-core/partmap/amiga.c +++ b/grub-core/partmap/amiga.c @@ -42,7 +42,7 @@ struct grub_amiga_rdsk grub_uint32_t fslst; grub_uint32_t unused[AMIGA_CHECKSUM_WORDS - 9]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_amiga_partition { @@ -70,7 +70,7 @@ struct grub_amiga_partition grub_uint32_t firstcyl; grub_uint32_t unused[AMIGA_CHECKSUM_WORDS - 44]; -} __attribute__ ((packed)); +} GRUB_PACKED; static struct grub_partition_map grub_amiga_partition_map; diff --git a/grub-core/partmap/dvh.c b/grub-core/partmap/dvh.c index 5b464dae7..95c96186c 100644 --- a/grub-core/partmap/dvh.c +++ b/grub-core/partmap/dvh.c @@ -34,7 +34,7 @@ struct grub_dvh_partition_descriptor grub_uint32_t length; grub_uint32_t start; grub_uint32_t type; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_dvh_block { @@ -43,7 +43,7 @@ struct grub_dvh_block struct grub_dvh_partition_descriptor parts[16]; grub_uint32_t checksum; grub_uint32_t unused2; -} __attribute__ ((packed)); +} GRUB_PACKED; static struct grub_partition_map grub_dvh_partition_map; diff --git a/grub-core/partmap/sun.c b/grub-core/partmap/sun.c index cff09ae25..dae360269 100644 --- a/grub-core/partmap/sun.c +++ b/grub-core/partmap/sun.c @@ -38,13 +38,13 @@ struct grub_sun_partition_info grub_uint8_t id; grub_uint8_t spare2; grub_uint8_t flags; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_sun_partition_descriptor { grub_uint32_t start_cylinder; grub_uint32_t num_sectors; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_sun_block { @@ -65,7 +65,7 @@ struct grub_sun_block struct grub_sun_partition_descriptor partitions[8]; grub_uint16_t magic; /* Magic number. */ grub_uint16_t csum; /* Label xor'd checksum. */ -} __attribute__ ((packed)); +} GRUB_PACKED; static struct grub_partition_map grub_sun_partition_map; diff --git a/grub-core/partmap/sunpc.c b/grub-core/partmap/sunpc.c index 7034272c7..442763ee5 100644 --- a/grub-core/partmap/sunpc.c +++ b/grub-core/partmap/sunpc.c @@ -38,7 +38,7 @@ struct grub_sun_pc_partition_descriptor grub_uint16_t unused; grub_uint32_t start_sector; grub_uint32_t num_sectors; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_sun_pc_block { @@ -47,7 +47,7 @@ struct grub_sun_pc_block grub_uint8_t unused2[244]; grub_uint16_t magic; /* Magic number. */ grub_uint16_t csum; /* Label xor'd checksum. */ -} __attribute__ ((packed)); +} GRUB_PACKED; static struct grub_partition_map grub_sun_pc_partition_map; diff --git a/grub-core/tests/checksums.h b/grub-core/tests/checksums.h index 65d34a1c5..c9807a0dc 100644 --- a/grub-core/tests/checksums.h +++ b/grub-core/tests/checksums.h @@ -1,437 +1,437 @@ - { "cmdline_cat", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7dbff368, 0x7dbff368, 0x5a5bdc8d, 0x5a5bdc8d, 0x79753177, 0x79753177, 0xd01ede5b, 0xd01ede5b, 0x13708a73, 0x13708a73, 0x90186de3, 0x90186de3, 0xe63d02a2, 0xe63d02a2, 0x2c9dc262, 0x2c9dc262, 0x3eebd7b, 0x3eebd7b, 0xe8f3a5d8, 0xe8f3a5d8, 0xd38ecfe3, 0xd38ecfe3, 0x51878485, 0x51878485, 0xcbdb6d67, 0xcbdb6d67, 0xca25582, 0xca25582, 0x5bea0484, 0x5bea0484, 0x9ec5f71d, 0x9ec5f71d, 0x3f0bd7bc, 0x3f0bd7bc, 0xdbb0a5d2, 0xdbb0a5d2, 0xea710e2f, 0xea710e2f, 0xd14933fe, 0xd14933fe, 0x4906b783, 0xad94ffeb, 0xf31c9259, 0xf31c9259, }, 45 }, - { "cmdline_cat", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xfeea303f, 0xfeea303f, 0x9a6d5200, 0x9a6d5200, 0x784f6e43, 0x784f6e43, 0xc3973f40, 0xc3973f40, 0x954a7cb1, 0x954a7cb1, 0x8b7c607f, 0x8b7c607f, 0x290bf4b3, 0x290bf4b3, 0x5d67148d, 0x5d67148d, 0x37008df4, 0x37008df4, 0xce9d51c7, 0xce9d51c7, 0xe29b4663, 0xe29b4663, 0xefb7cd59, 0xefb7cd59, 0xe12cc621, 0xe12cc621, 0xd6d4461f, 0xd6d4461f, 0x4d4490ef, 0x4d4490ef, 0x6ce4a360, 0x6ce4a360, 0x812e6359, 0x812e6359, 0xe2f82bc9, 0xe2f82bc9, 0x9621917d, 0x9621917d, 0xbbe37c69, 0xbbe37c69, 0x719d9b99, 0xe95c1cc3, 0xe0476ad0, 0xe0476ad0, }, 45 }, - { "cmdline_cat", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x50b82239, 0x50b82239, 0x82c36c12, 0x82c36c12, 0x6311208d, 0x6311208d, 0x816bd4b3, 0x816bd4b3, 0xc9281fd0, 0xc9281fd0, 0x75767bac, 0x75767bac, 0x52edeac, 0x52edeac, 0xfdb551f7, 0xfdb551f7, 0xba21cd3, 0xba21cd3, 0xf2b3468a, 0xf2b3468a, 0xd5560323, 0xd5560323, 0x12c650f6, 0x12c650f6, 0x3d6c5861, 0x3d6c5861, 0x50062423, 0x50062423, 0x2ce22983, 0x2ce22983, 0x4996bc4d, 0x4996bc4d, 0x50450525, 0x50450525, 0xe1c94312, 0xe1c94312, 0x21224aac, 0x21224aac, 0x94cbe214, 0x94cbe214, 0x4578c664, 0xcb360887, 0x5a749f1d, 0x5a749f1d, }, 45 }, - { "cmdline_cat", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xbb687653, 0xbb687653, 0xa81427a7, 0xa81427a7, 0x71d7f3b, 0x71d7f3b, 0x25fea6ca, 0x25fea6ca, 0x17c19d74, 0x17c19d74, 0x4779bf48, 0x4779bf48, 0xe424e759, 0xe424e759, 0xb57fb5ae, 0xb57fb5ae, 0xd877002b, 0xd877002b, 0xdd8d7442, 0xdd8d7442, 0xe2536fde, 0xe2536fde, 0x1ebba341, 0x1ebba341, 0xef042176, 0xef042176, 0x6137f228, 0x6137f228, 0xf04a8558, 0xf04a8558, 0xff72172d, 0xff72172d, 0x5f26278f, 0x5f26278f, 0x3ed777c, 0x3ed777c, 0xb1d686e, 0xb1d686e, 0x5cead249, 0x5cead249, 0x271487f6, 0x3b9ece9a, 0xccc3db5e, 0xccc3db5e, }, 45 }, - { "cmdline_cat", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xd594219a, 0xd594219a, 0x254fa44c, 0x254fa44c, 0x30177d61, 0x30177d61, 0x1a576e20, 0x1a576e20, 0xe439395f, 0xe439395f, 0xb289a26f, 0xb289a26f, 0xc9eaceca, 0xc9eaceca, 0x9e76037b, 0x9e76037b, 0xfa098eb4, 0xfa098eb4, 0x5881d993, 0x5881d993, 0x3a4ac117, 0x3a4ac117, 0x203e9716, 0x203e9716, 0x67aed713, 0x67aed713, 0xb740eccb, 0xb740eccb, 0xd50247da, 0xd50247da, 0xe0c382bf, 0xe0c382bf, 0x95d81f9d, 0x95d81f9d, 0x1051b5ac, 0x1051b5ac, 0x71f00e30, 0x71f00e30, 0xe35fe082, 0xe35fe082, 0xeda25a7a, 0xc4543b1e, 0x4725b91c, 0x4725b91c, }, 45 }, - { "cmdline_cat", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd803b53b, 0xd803b53b, 0x70b7ae8b, 0x70b7ae8b, 0xa20d9a15, 0xa20d9a15, 0x6113d33b, 0x6113d33b, 0xfd38d301, 0xfd38d301, 0x8b04db4, 0x8b04db4, 0xdae859df, 0xdae859df, 0x80cf138b, 0x80cf138b, 0xdfa6ef9, 0xdfa6ef9, 0x856adaf0, 0x856adaf0, 0x7023cc2d, 0x7023cc2d, 0xad7e7d54, 0xad7e7d54, 0xde8eff49, 0xde8eff49, 0x34355cc3, 0x34355cc3, 0x25adccda, 0x25adccda, 0x6d6c350d, 0x6d6c350d, 0x1c49b499, 0x1c49b499, 0x8188f1b4, 0x8188f1b4, 0x5556dc0c, 0x5556dc0c, 0xbd9ef1f5, 0xbd9ef1f5, 0x5176575b, 0xd3e2f7f1, 0xccda996c, 0xccda996c, }, 45 }, - { "cmdline_cat", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xed7d2809, 0xed7d2809, 0x52c14224, 0x52c14224, 0xec52d912, 0xec52d912, 0x63276ae2, 0x63276ae2, 0xeeb4bfa4, 0xeeb4bfa4, 0xdf0f1ff0, 0xdf0f1ff0, 0xe2021708, 0xe2021708, 0x67c17085, 0x67c17085, 0x646e4d78, 0x646e4d78, 0x3b15f4b6, 0x3b15f4b6, 0xf4945ac5, 0xf4945ac5, 0x6cf60c00, 0x6cf60c00, 0x126648cd, 0x126648cd, 0xe7b8e348, 0xe7b8e348, 0x1626e35f, 0x1626e35f, 0x8022976c, 0x8022976c, 0xbc7e6d22, 0xbc7e6d22, 0xa2d50ad6, 0xa2d50ad6, 0x5072fea, 0x5072fea, 0x8481a563, 0x8481a563, 0x60a95143, 0x17d55ce2, 0xcdd6f8c3, 0xcdd6f8c3, }, 45 }, - { "cmdline_cat", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x7dbff368, 0x7dbff368, 0x5a5bdc8d, 0x5a5bdc8d, 0x79753177, 0x79753177, 0xd01ede5b, 0xd01ede5b, 0x13708a73, 0x13708a73, 0x90186de3, 0x90186de3, 0xe63d02a2, 0xe63d02a2, 0x2c9dc262, 0x2c9dc262, 0x3eebd7b, 0x3eebd7b, 0xe8f3a5d8, 0xe8f3a5d8, 0xd38ecfe3, 0xd38ecfe3, 0x51878485, 0x51878485, 0xcbdb6d67, 0xcbdb6d67, 0xca25582, 0xca25582, 0x5bea0484, 0x5bea0484, 0x9ec5f71d, 0x9ec5f71d, 0x3f0bd7bc, 0x3f0bd7bc, 0xdbb0a5d2, 0xdbb0a5d2, 0xea710e2f, 0xea710e2f, 0xd14933fe, 0xd14933fe, 0x4906b783, 0xad94ffeb, 0xf31c9259, 0xf31c9259, }, 45 }, - { "cmdline_cat", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xfeea303f, 0xfeea303f, 0x9a6d5200, 0x9a6d5200, 0x784f6e43, 0x784f6e43, 0xc3973f40, 0xc3973f40, 0x954a7cb1, 0x954a7cb1, 0x8b7c607f, 0x8b7c607f, 0x290bf4b3, 0x290bf4b3, 0x5d67148d, 0x5d67148d, 0x37008df4, 0x37008df4, 0xce9d51c7, 0xce9d51c7, 0xe29b4663, 0xe29b4663, 0xefb7cd59, 0xefb7cd59, 0xe12cc621, 0xe12cc621, 0xd6d4461f, 0xd6d4461f, 0x4d4490ef, 0x4d4490ef, 0x6ce4a360, 0x6ce4a360, 0x812e6359, 0x812e6359, 0xe2f82bc9, 0xe2f82bc9, 0x9621917d, 0x9621917d, 0xbbe37c69, 0xbbe37c69, 0x719d9b99, 0xe95c1cc3, 0xe0476ad0, 0xe0476ad0, }, 45 }, - { "cmdline_cat", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x50b82239, 0x50b82239, 0x82c36c12, 0x82c36c12, 0x6311208d, 0x6311208d, 0x816bd4b3, 0x816bd4b3, 0xc9281fd0, 0xc9281fd0, 0x75767bac, 0x75767bac, 0x52edeac, 0x52edeac, 0xfdb551f7, 0xfdb551f7, 0xba21cd3, 0xba21cd3, 0xf2b3468a, 0xf2b3468a, 0xd5560323, 0xd5560323, 0x12c650f6, 0x12c650f6, 0x3d6c5861, 0x3d6c5861, 0x50062423, 0x50062423, 0x2ce22983, 0x2ce22983, 0x4996bc4d, 0x4996bc4d, 0x50450525, 0x50450525, 0xe1c94312, 0xe1c94312, 0x21224aac, 0x21224aac, 0x94cbe214, 0x94cbe214, 0x4578c664, 0xcb360887, 0x5a749f1d, 0x5a749f1d, }, 45 }, - { "cmdline_cat", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x93fbd3a3, 0x93fbd3a3, 0x1617bee0, 0x1617bee0, 0x4bfbae7f, 0x4bfbae7f, 0xa3558248, 0xa3558248, 0xaf468a11, 0xaf468a11, 0x68ac5986, 0x68ac5986, 0xd8065600, 0xd8065600, 0xef6c6222, 0xef6c6222, 0x1a04371, 0x1a04371, 0xc92981b6, 0xc92981b6, 0x53f9bfc8, 0x53f9bfc8, 0xfef01300, 0xfef01300, 0xce753805, 0xce753805, 0x858f6540, 0x858f6540, 0x6429dae4, 0x6429dae4, 0x19222aa5, 0x19222aa5, 0x3f9a0303, 0x3f9a0303, 0x978a47da, 0x978a47da, 0x6bf7f199, 0x6bf7f199, 0x97dab6d, 0x97dab6d, 0xeb643dbd, 0x550f5f8f, 0xe193f4d2, 0xe193f4d2, }, 45 }, - { "cmdline_cat", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x76ccc774, 0x76ccc774, 0x98fe3b7, 0x98fe3b7, 0xca4fb383, 0xca4fb383, 0x7c96c0b0, 0x7c96c0b0, 0x2e247de1, 0x2e247de1, 0x13eba5d3, 0x13eba5d3, 0xb8eee962, 0xb8eee962, 0xc9e8c791, 0xc9e8c791, 0x42ab69c2, 0x42ab69c2, 0x564457bc, 0x564457bc, 0xcb44a632, 0xcb44a632, 0x9f213022, 0x9f213022, 0xc0a90c8a, 0xc0a90c8a, 0x501e7270, 0x501e7270, 0x1f3d02b1, 0x1f3d02b1, 0x384f7a25, 0x384f7a25, 0xd927326, 0xd927326, 0xd53f190e, 0xd53f190e, 0x14580b31, 0x14580b31, 0xab958892, 0xab958892, 0xea73f407, 0xb83e8860, 0xd809749b, 0xd809749b, }, 45 }, - { "cmdline_cat", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xccbd401, 0xccbd401, 0x35859629, 0x35859629, 0x269f013b, 0x269f013b, 0xe8c8196, 0xe8c8196, 0x95e2849c, 0x95e2849c, 0xb2019543, 0xb2019543, 0xf739b6c9, 0xf739b6c9, 0xd8227519, 0xd8227519, 0x6b1ae8cf, 0x6b1ae8cf, 0x84fbe9b2, 0x84fbe9b2, 0xed69a305, 0xed69a305, 0x15f4f0cf, 0x15f4f0cf, 0x57ce0973, 0x57ce0973, 0x3f5b0b97, 0x3f5b0b97, 0xc3e87bef, 0xc3e87bef, 0x3ac7584b, 0x3ac7584b, 0xdb95f2c7, 0xdb95f2c7, 0xc1942d4c, 0xc1942d4c, 0x17e9634e, 0x17e9634e, 0xd8dd41a3, 0xd8dd41a3, 0x927a8a2f, 0x93601438, 0x99734c52, 0x99734c52, }, 45 }, - { "cmdline_cat", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xa06498a0, 0xa06498a0, 0xd1336ad7, 0xd1336ad7, 0x68c888e0, 0x68c888e0, 0xf01fb74, 0xf01fb74, 0x6b743235, 0x6b743235, 0xe7b71a49, 0xe7b71a49, 0x798da4d7, 0x798da4d7, 0x5398f44b, 0x5398f44b, 0x4794ee5e, 0x4794ee5e, 0x61c2cb0d, 0x61c2cb0d, 0xad3fcef3, 0xad3fcef3, 0xd9b6f291, 0xd9b6f291, 0xbaf0962d, 0xbaf0962d, 0x11848b9e, 0x11848b9e, 0xb8f3d2bf, 0xb8f3d2bf, 0x3f9978, 0x3f9978, 0xafd76c24, 0xafd76c24, 0xee0b9b9e, 0xee0b9b9e, 0x1f80451e, 0x1f80451e, 0x817e030a, 0x817e030a, 0x64ee9a5d, 0x30cb16a0, 0x9f133607, 0x9f133607, }, 45 }, - { "cmdline_cat", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8004336f, 0x8004336f, 0xad06caa7, 0xad06caa7, 0xe5239f6d, 0xe5239f6d, 0xd1a80f62, 0xd1a80f62, 0x9b64514c, 0x9b64514c, 0xd21e6b10, 0xd21e6b10, 0x7ab967ae, 0x7ab967ae, 0x7d706a4a, 0x7d706a4a, 0xf2b0f702, 0xf2b0f702, 0x9696e0f7, 0x9696e0f7, 0x77e0f417, 0x77e0f417, 0xf45e418d, 0xf45e418d, 0x2e5b6a0a, 0x2e5b6a0a, 0x1be1c567, 0x1be1c567, 0xf8c9e2fa, 0xf8c9e2fa, 0xd574e688, 0xd574e688, 0x3092ce78, 0x3092ce78, 0x265dd1a4, 0x265dd1a4, 0x62543ca1, 0x62543ca1, 0xcabbab6d, 0xcabbab6d, 0xc600820f, 0xd923e667, 0xafaf4e69, 0xafaf4e69, }, 45 }, - { "cmdline_cat", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x698515fa, 0x698515fa, 0xc313ebe6, 0xc313ebe6, 0x32b9228f, 0x32b9228f, 0xa58d78e8, 0xa58d78e8, 0xf41d5153, 0xf41d5153, 0xdfa3af16, 0xdfa3af16, 0xd4a68422, 0xd4a68422, 0xa7ea67e0, 0xa7ea67e0, 0xaee4c8f6, 0xaee4c8f6, 0x78ddd8aa, 0x78ddd8aa, 0xe662b827, 0xe662b827, 0x190ab892, 0x190ab892, 0x7c1e04ab, 0x7c1e04ab, 0xae4e2ed2, 0xae4e2ed2, 0x9ac52f8d, 0x9ac52f8d, 0x7e7b6776, 0x7e7b6776, 0x21c37700, 0x21c37700, 0x4fc11e7c, 0x4fc11e7c, 0x612a17d, 0x612a17d, 0x1f549440, 0x1f549440, 0xd6ce5af0, 0x224035b9, 0x44f3a671, 0x44f3a671, }, 45 }, - { "cmdline_cat", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x7a06e04b, 0x7a06e04b, 0x122f59ab, 0x122f59ab, 0x993a50b9, 0x993a50b9, 0x5545f8f, 0x5545f8f, 0xcdd2b587, 0xcdd2b587, 0x18bec138, 0x18bec138, 0xa9b4345d, 0xa9b4345d, 0x92c6eb1c, 0x92c6eb1c, 0x2aa44d63, 0x2aa44d63, 0xc9e7b549, 0xc9e7b549, 0x24732d85, 0x24732d85, 0xeedce06, 0xeedce06, 0x69a732a1, 0x69a732a1, 0xc53906e5, 0xc53906e5, 0x306e0f4b, 0x306e0f4b, 0x895e6f09, 0x895e6f09, 0x27f1c24e, 0x27f1c24e, 0x76a2b606, 0x76a2b606, 0x9fdd1ff3, 0x9fdd1ff3, 0x408d0a19, 0x408d0a19, 0xc9b3f877, 0xc61012d1, 0x84f4c7c7, 0x84f4c7c7, }, 45 }, - { "cmdline_cat", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xc75a4c6f, 0xc75a4c6f, 0xf155d437, 0xf155d437, 0x5c0c9c6d, 0x5c0c9c6d, 0x32b70f0b, 0x32b70f0b, 0x15b49b81, 0x15b49b81, 0xe0ac73bd, 0xe0ac73bd, 0xc1f20b9b, 0xc1f20b9b, 0xf123f819, 0xf123f819, 0xb9d31c70, 0xb9d31c70, 0x1af8bb11, 0x1af8bb11, 0xde51611e, 0xde51611e, 0x555bf1a9, 0x555bf1a9, 0x7fc1c1ac, 0x7fc1c1ac, 0x10f80e90, 0x10f80e90, 0xdf2c47d, 0xdf2c47d, 0x2b0b3367, 0x2b0b3367, 0x10e958fb, 0x10e958fb, 0x84fa0fc1, 0x84fa0fc1, 0x17e0c3af, 0x17e0c3af, 0xfb8ccf09, 0xfb8ccf09, 0xcb360cda, 0xc99cbad4, 0x83b5c166, 0x83b5c166, }, 45 }, - { "cmdline_cat", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x7d9b5dd7, 0x7d9b5dd7, 0x42e1176a, 0x42e1176a, 0x7e2da576, 0x7e2da576, 0xd5a8afa, 0xd5a8afa, 0x3eb2146b, 0x3eb2146b, 0x60d9b3, 0x60d9b3, 0xb893f5ca, 0xb893f5ca, 0xd431b2bf, 0xd431b2bf, 0x8ea1b6a6, 0x8ea1b6a6, 0x4d730ad0, 0x4d730ad0, 0x28d1888b, 0x28d1888b, 0x6d8c3672, 0x6d8c3672, 0x65dec2dd, 0x65dec2dd, 0x9d7c6d99, 0x9d7c6d99, 0xdfcd1eba, 0xdfcd1eba, 0xed4fb650, 0xed4fb650, 0xd9f1574c, 0xd9f1574c, 0x2b05a17e, 0x2b05a17e, 0x64e652f5, 0x64e652f5, 0x5f83fdb1, 0x5f83fdb1, 0x7918b180, 0xa6808ee8, 0xb1a2407c, 0xb1a2407c, }, 45 }, - { "cmdline_cat", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x93fbd3a3, 0x93fbd3a3, 0x1617bee0, 0x1617bee0, 0x4bfbae7f, 0x4bfbae7f, 0xa3558248, 0xa3558248, 0xaf468a11, 0xaf468a11, 0x68ac5986, 0x68ac5986, 0xd8065600, 0xd8065600, 0xef6c6222, 0xef6c6222, 0x1a04371, 0x1a04371, 0xc92981b6, 0xc92981b6, 0x53f9bfc8, 0x53f9bfc8, 0xfef01300, 0xfef01300, 0xce753805, 0xce753805, 0x858f6540, 0x858f6540, 0x6429dae4, 0x6429dae4, 0x19222aa5, 0x19222aa5, 0x3f9a0303, 0x3f9a0303, 0x978a47da, 0x978a47da, 0x6bf7f199, 0x6bf7f199, 0x97dab6d, 0x97dab6d, 0xeb643dbd, 0x550f5f8f, 0xe193f4d2, 0xe193f4d2, }, 45 }, - { "cmdline_cat", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x76ccc774, 0x76ccc774, 0x98fe3b7, 0x98fe3b7, 0xca4fb383, 0xca4fb383, 0x7c96c0b0, 0x7c96c0b0, 0x2e247de1, 0x2e247de1, 0x13eba5d3, 0x13eba5d3, 0xb8eee962, 0xb8eee962, 0xc9e8c791, 0xc9e8c791, 0x42ab69c2, 0x42ab69c2, 0x564457bc, 0x564457bc, 0xcb44a632, 0xcb44a632, 0x9f213022, 0x9f213022, 0xc0a90c8a, 0xc0a90c8a, 0x501e7270, 0x501e7270, 0x1f3d02b1, 0x1f3d02b1, 0x384f7a25, 0x384f7a25, 0xd927326, 0xd927326, 0xd53f190e, 0xd53f190e, 0x14580b31, 0x14580b31, 0xab958892, 0xab958892, 0xea73f407, 0xb83e8860, 0xd809749b, 0xd809749b, }, 45 }, - { "cmdline_cat", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xccbd401, 0xccbd401, 0x35859629, 0x35859629, 0x269f013b, 0x269f013b, 0xe8c8196, 0xe8c8196, 0x95e2849c, 0x95e2849c, 0xb2019543, 0xb2019543, 0xf739b6c9, 0xf739b6c9, 0xd8227519, 0xd8227519, 0x6b1ae8cf, 0x6b1ae8cf, 0x84fbe9b2, 0x84fbe9b2, 0xed69a305, 0xed69a305, 0x15f4f0cf, 0x15f4f0cf, 0x57ce0973, 0x57ce0973, 0x3f5b0b97, 0x3f5b0b97, 0xc3e87bef, 0xc3e87bef, 0x3ac7584b, 0x3ac7584b, 0xdb95f2c7, 0xdb95f2c7, 0xc1942d4c, 0xc1942d4c, 0x17e9634e, 0x17e9634e, 0xd8dd41a3, 0xd8dd41a3, 0x927a8a2f, 0x93601438, 0x99734c52, 0x99734c52, }, 45 }, - { "cmdline_cat", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xa06498a0, 0xa06498a0, 0xd1336ad7, 0xd1336ad7, 0x68c888e0, 0x68c888e0, 0xf01fb74, 0xf01fb74, 0x6b743235, 0x6b743235, 0xe7b71a49, 0xe7b71a49, 0x798da4d7, 0x798da4d7, 0x5398f44b, 0x5398f44b, 0x4794ee5e, 0x4794ee5e, 0x61c2cb0d, 0x61c2cb0d, 0xad3fcef3, 0xad3fcef3, 0xd9b6f291, 0xd9b6f291, 0xbaf0962d, 0xbaf0962d, 0x11848b9e, 0x11848b9e, 0xb8f3d2bf, 0xb8f3d2bf, 0x3f9978, 0x3f9978, 0xafd76c24, 0xafd76c24, 0xee0b9b9e, 0xee0b9b9e, 0x1f80451e, 0x1f80451e, 0x817e030a, 0x817e030a, 0x64ee9a5d, 0x30cb16a0, 0x9f133607, 0x9f133607, }, 45 }, - { "cmdline_cat", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8004336f, 0x8004336f, 0xad06caa7, 0xad06caa7, 0xe5239f6d, 0xe5239f6d, 0xd1a80f62, 0xd1a80f62, 0x9b64514c, 0x9b64514c, 0xd21e6b10, 0xd21e6b10, 0x7ab967ae, 0x7ab967ae, 0x7d706a4a, 0x7d706a4a, 0xf2b0f702, 0xf2b0f702, 0x9696e0f7, 0x9696e0f7, 0x77e0f417, 0x77e0f417, 0xf45e418d, 0xf45e418d, 0x2e5b6a0a, 0x2e5b6a0a, 0x1be1c567, 0x1be1c567, 0xf8c9e2fa, 0xf8c9e2fa, 0xd574e688, 0xd574e688, 0x3092ce78, 0x3092ce78, 0x265dd1a4, 0x265dd1a4, 0x62543ca1, 0x62543ca1, 0xcabbab6d, 0xcabbab6d, 0xc600820f, 0xd923e667, 0xafaf4e69, 0xafaf4e69, }, 45 }, - { "cmdline_cat", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x698515fa, 0x698515fa, 0xc313ebe6, 0xc313ebe6, 0x32b9228f, 0x32b9228f, 0xa58d78e8, 0xa58d78e8, 0xf41d5153, 0xf41d5153, 0xdfa3af16, 0xdfa3af16, 0xd4a68422, 0xd4a68422, 0xa7ea67e0, 0xa7ea67e0, 0xaee4c8f6, 0xaee4c8f6, 0x78ddd8aa, 0x78ddd8aa, 0xe662b827, 0xe662b827, 0x190ab892, 0x190ab892, 0x7c1e04ab, 0x7c1e04ab, 0xae4e2ed2, 0xae4e2ed2, 0x9ac52f8d, 0x9ac52f8d, 0x7e7b6776, 0x7e7b6776, 0x21c37700, 0x21c37700, 0x4fc11e7c, 0x4fc11e7c, 0x612a17d, 0x612a17d, 0x1f549440, 0x1f549440, 0xd6ce5af0, 0x224035b9, 0x44f3a671, 0x44f3a671, }, 45 }, - { "cmdline_cat", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x7a06e04b, 0x7a06e04b, 0x122f59ab, 0x122f59ab, 0x993a50b9, 0x993a50b9, 0x5545f8f, 0x5545f8f, 0xcdd2b587, 0xcdd2b587, 0x18bec138, 0x18bec138, 0xa9b4345d, 0xa9b4345d, 0x92c6eb1c, 0x92c6eb1c, 0x2aa44d63, 0x2aa44d63, 0xc9e7b549, 0xc9e7b549, 0x24732d85, 0x24732d85, 0xeedce06, 0xeedce06, 0x69a732a1, 0x69a732a1, 0xc53906e5, 0xc53906e5, 0x306e0f4b, 0x306e0f4b, 0x895e6f09, 0x895e6f09, 0x27f1c24e, 0x27f1c24e, 0x76a2b606, 0x76a2b606, 0x9fdd1ff3, 0x9fdd1ff3, 0x408d0a19, 0x408d0a19, 0xc9b3f877, 0xc61012d1, 0x84f4c7c7, 0x84f4c7c7, }, 45 }, - { "cmdline_cat", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xc75a4c6f, 0xc75a4c6f, 0xf155d437, 0xf155d437, 0x5c0c9c6d, 0x5c0c9c6d, 0x32b70f0b, 0x32b70f0b, 0x15b49b81, 0x15b49b81, 0xe0ac73bd, 0xe0ac73bd, 0xc1f20b9b, 0xc1f20b9b, 0xf123f819, 0xf123f819, 0xb9d31c70, 0xb9d31c70, 0x1af8bb11, 0x1af8bb11, 0xde51611e, 0xde51611e, 0x555bf1a9, 0x555bf1a9, 0x7fc1c1ac, 0x7fc1c1ac, 0x10f80e90, 0x10f80e90, 0xdf2c47d, 0xdf2c47d, 0x2b0b3367, 0x2b0b3367, 0x10e958fb, 0x10e958fb, 0x84fa0fc1, 0x84fa0fc1, 0x17e0c3af, 0x17e0c3af, 0xfb8ccf09, 0xfb8ccf09, 0xcb360cda, 0xc99cbad4, 0x83b5c166, 0x83b5c166, }, 45 }, - { "cmdline_cat", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x7d9b5dd7, 0x7d9b5dd7, 0x42e1176a, 0x42e1176a, 0x7e2da576, 0x7e2da576, 0xd5a8afa, 0xd5a8afa, 0x3eb2146b, 0x3eb2146b, 0x60d9b3, 0x60d9b3, 0xb893f5ca, 0xb893f5ca, 0xd431b2bf, 0xd431b2bf, 0x8ea1b6a6, 0x8ea1b6a6, 0x4d730ad0, 0x4d730ad0, 0x28d1888b, 0x28d1888b, 0x6d8c3672, 0x6d8c3672, 0x65dec2dd, 0x65dec2dd, 0x9d7c6d99, 0x9d7c6d99, 0xdfcd1eba, 0xdfcd1eba, 0xed4fb650, 0xed4fb650, 0xd9f1574c, 0xd9f1574c, 0x2b05a17e, 0x2b05a17e, 0x64e652f5, 0x64e652f5, 0x5f83fdb1, 0x5f83fdb1, 0x7918b180, 0xa6808ee8, 0xb1a2407c, 0xb1a2407c, }, 45 }, - { "cmdline_cat", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xbb687653, 0xbb687653, 0xa81427a7, 0xa81427a7, 0x71d7f3b, 0x71d7f3b, 0x25fea6ca, 0x25fea6ca, 0x17c19d74, 0x17c19d74, 0x4779bf48, 0x4779bf48, 0xe424e759, 0xe424e759, 0xb57fb5ae, 0xb57fb5ae, 0xd877002b, 0xd877002b, 0xdd8d7442, 0xdd8d7442, 0xe2536fde, 0xe2536fde, 0x1ebba341, 0x1ebba341, 0xef042176, 0xef042176, 0x6137f228, 0x6137f228, 0xf04a8558, 0xf04a8558, 0xff72172d, 0xff72172d, 0x5f26278f, 0x5f26278f, 0x3ed777c, 0x3ed777c, 0xb1d686e, 0xb1d686e, 0x5cead249, 0x5cead249, 0x271487f6, 0x3b9ece9a, 0xccc3db5e, 0xccc3db5e, }, 45 }, - { "cmdline_cat", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xd594219a, 0xd594219a, 0x254fa44c, 0x254fa44c, 0x30177d61, 0x30177d61, 0x1a576e20, 0x1a576e20, 0xe439395f, 0xe439395f, 0xb289a26f, 0xb289a26f, 0xc9eaceca, 0xc9eaceca, 0x9e76037b, 0x9e76037b, 0xfa098eb4, 0xfa098eb4, 0x5881d993, 0x5881d993, 0x3a4ac117, 0x3a4ac117, 0x203e9716, 0x203e9716, 0x67aed713, 0x67aed713, 0xb740eccb, 0xb740eccb, 0xd50247da, 0xd50247da, 0xe0c382bf, 0xe0c382bf, 0x95d81f9d, 0x95d81f9d, 0x1051b5ac, 0x1051b5ac, 0x71f00e30, 0x71f00e30, 0xe35fe082, 0xe35fe082, 0xeda25a7a, 0xc4543b1e, 0x4725b91c, 0x4725b91c, }, 45 }, - { "cmdline_cat", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd803b53b, 0xd803b53b, 0x70b7ae8b, 0x70b7ae8b, 0xa20d9a15, 0xa20d9a15, 0x6113d33b, 0x6113d33b, 0xfd38d301, 0xfd38d301, 0x8b04db4, 0x8b04db4, 0xdae859df, 0xdae859df, 0x80cf138b, 0x80cf138b, 0xdfa6ef9, 0xdfa6ef9, 0x856adaf0, 0x856adaf0, 0x7023cc2d, 0x7023cc2d, 0xad7e7d54, 0xad7e7d54, 0xde8eff49, 0xde8eff49, 0x34355cc3, 0x34355cc3, 0x25adccda, 0x25adccda, 0x6d6c350d, 0x6d6c350d, 0x1c49b499, 0x1c49b499, 0x8188f1b4, 0x8188f1b4, 0x5556dc0c, 0x5556dc0c, 0xbd9ef1f5, 0xbd9ef1f5, 0x5176575b, 0xd3e2f7f1, 0xccda996c, 0xccda996c, }, 45 }, - { "gfxterm_menu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x25243020, 0xed3ce9f7, 0x25243020, 0xd57a2224, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0xd57a2224, 0xd57a2224, 0x59c36f00, }, 20 }, - { "gfxterm_menu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x9e32a220, 0x89ad19b9, 0x9e32a220, 0x795f1aca, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x795f1aca, 0x795f1aca, 0xaa4593fe, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x11e11a4c, 0xfd572460, 0x11e11a4c, 0x198b75, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x198b75, 0x198b75, 0xc9cbf769, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x9a418b1d, 0x6fb2a19a, 0x9a418b1d, 0x3c3e7993, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x3c3e7993, 0x3c3e7993, 0x9813a416, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x66cb2267, 0xb90e9f13, 0x66cb2267, 0x79874749, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x79874749, 0x79874749, 0x5fcf013d, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd3d2838d, 0x3c2e7a96, 0xd3d2838d, 0x993b0962, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x993b0962, 0x993b0962, 0xdd28f52b, }, 20 }, - { "gfxterm_menu", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x9f8f359d, 0x93189e6, 0x9f8f359d, 0xcc233c83, 0x43d1f34, 0x43d1f34, 0x8c5a6902, 0x8c5a6902, 0x8c5a6902, 0x58950884, 0x58950884, 0x58950884, 0x4facdedc, 0x4facdedc, 0x4facdedc, 0x43d1f34, 0xcc233c83, 0xcc233c83, 0x43d1f34, }, 20 }, - { "gfxterm_menu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x25243020, 0xed3ce9f7, 0x25243020, 0xd57a2224, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0xd57a2224, 0xd57a2224, 0x59c36f00, }, 20 }, - { "gfxterm_menu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x9e32a220, 0x89ad19b9, 0x9e32a220, 0x795f1aca, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x795f1aca, 0x795f1aca, 0xaa4593fe, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x11e11a4c, 0xfd572460, 0x11e11a4c, 0x198b75, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x198b75, 0x198b75, 0xc9cbf769, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xce16a2fb, 0x9eac7351, 0xce16a2fb, 0xbea374ca, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0xbea374ca, 0xbea374ca, 0x5387d57f, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x978ea174, 0x929fce7c, 0x978ea174, 0x84cb51c9, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x84cb51c9, 0x84cb51c9, 0xf83ee7aa, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x28b0c05b, 0x32d290d2, 0x28b0c05b, 0xb92ef4c6, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0xb92ef4c6, 0xb92ef4c6, 0x724366e5, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xcbe03110, 0x535dc43a, 0xcbe03110, 0xb8c87995, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0xb8c87995, 0xb8c87995, 0x5387d57f, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbad8adf, 0x3388b781, 0xbad8adf, 0xd1863a2f, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0xd1863a2f, 0xd1863a2f, 0xf83ee7aa, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x45d03c1b, 0xd4eddf86, 0x45d03c1b, 0x22ab0b9f, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0x22ab0b9f, 0x22ab0b9f, 0x724366e5, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xb6b65234, 0xec122b66, 0xb6b65234, 0x706c3177, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0x706c3177, 0x706c3177, 0x1c955882, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4a693032, 0xa69acbf3, 0x4a693032, 0xbfcd9a65, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0xbfcd9a65, 0xbfcd9a65, 0x4d266f7a, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x1329653a, 0x103645b9, 0x1329653a, 0x668d01b5, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0x668d01b5, 0x668d01b5, 0x1ed9d731, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xce16a2fb, 0x9eac7351, 0xce16a2fb, 0xbea374ca, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0xbea374ca, 0xbea374ca, 0x5387d57f, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x978ea174, 0x929fce7c, 0x978ea174, 0x84cb51c9, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x84cb51c9, 0x84cb51c9, 0xf83ee7aa, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x28b0c05b, 0x32d290d2, 0x28b0c05b, 0xb92ef4c6, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0xb92ef4c6, 0xb92ef4c6, 0x724366e5, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xcbe03110, 0x535dc43a, 0xcbe03110, 0xb8c87995, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0xb8c87995, 0xb8c87995, 0x5387d57f, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbad8adf, 0x3388b781, 0xbad8adf, 0xd1863a2f, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0xd1863a2f, 0xd1863a2f, 0xf83ee7aa, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x45d03c1b, 0xd4eddf86, 0x45d03c1b, 0x22ab0b9f, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0x22ab0b9f, 0x22ab0b9f, 0x724366e5, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xb6b65234, 0xec122b66, 0xb6b65234, 0x706c3177, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0x706c3177, 0x706c3177, 0x1c955882, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4a693032, 0xa69acbf3, 0x4a693032, 0xbfcd9a65, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0xbfcd9a65, 0xbfcd9a65, 0x4d266f7a, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x1329653a, 0x103645b9, 0x1329653a, 0x668d01b5, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0x668d01b5, 0x668d01b5, 0x1ed9d731, }, 20 }, - { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x9a418b1d, 0x6fb2a19a, 0x9a418b1d, 0x3c3e7993, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x3c3e7993, 0x3c3e7993, 0x9813a416, }, 20 }, - { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x66cb2267, 0xb90e9f13, 0x66cb2267, 0x79874749, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x79874749, 0x79874749, 0x5fcf013d, }, 20 }, - { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd3d2838d, 0x3c2e7a96, 0xd3d2838d, 0x993b0962, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x993b0962, 0x993b0962, 0xdd28f52b, }, 20 }, - { "gfxmenu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x28e6b07d, 0xf54b3d6a, 0x28e6b07d, 0x7d0bdbfb, 0x9a2e0d26, 0xbef55ac6, 0xbef55ac6, 0xbef55ac6, 0x18012606, 0x18012606, 0x18012606, 0xe4507cda, 0xe4507cda, 0xe4507cda, 0x59c36f00, 0x7d0bdbfb, 0x7d0bdbfb, }, 18 }, - { "gfxmenu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x15bb581c, 0x7da084c6, 0x15bb581c, 0xcedba42f, 0xbc06c96d, 0x364f887, 0x364f887, 0x364f887, 0xb5a9f9fd, 0xb5a9f9fd, 0xb5a9f9fd, 0x18a57fae, 0x18a57fae, 0x18a57fae, 0xaa4593fe, 0xcedba42f, 0xcedba42f, }, 18 }, - { "gfxmenu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x817e5fe2, 0x134e87ff, 0x817e5fe2, 0xb83ddd98, 0xdcd8c986, 0xc41035b1, 0xc41035b1, 0xc41035b1, 0xf1a1bb53, 0xf1a1bb53, 0xf1a1bb53, 0x484edfc1, 0x484edfc1, 0x484edfc1, 0xc9cbf769, 0xb83ddd98, 0xb83ddd98, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x95048302, 0x9f5bac7c, 0x95048302, 0x28413b7c, 0x740d78cf, 0x5ff06c85, 0x5ff06c85, 0x5ff06c85, 0xf43025ce, 0xf43025ce, 0xf43025ce, 0x6665df93, 0x6665df93, 0x6665df93, 0x1c3742c9, 0x28413b7c, 0x28413b7c, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x6cf38a7e, 0x35fcd6e8, 0x6cf38a7e, 0x618c203c, 0xe925e70d, 0x2c610bd8, 0x2c610bd8, 0x2c610bd8, 0xa2ef6169, 0xa2ef6169, 0xa2ef6169, 0xd321285f, 0xd321285f, 0xd321285f, 0xcc5a7bed, 0x618c203c, 0x618c203c, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xef4a3312, 0xd610d630, 0x98774981, 0xd610d630, 0x4469957c, 0x9869130b, 0x5c4c70f2, 0x5c4c70f2, 0x5c4c70f2, 0xf06ea314, 0xf06ea314, 0xf06ea314, 0xaf278d15, 0xaf278d15, 0xaf278d15, 0xef4a3312, 0x4469957c, 0x4469957c, }, 18 }, - { "gfxmenu", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x54e48d80, 0xf5c7a904, 0xaf9e8139, 0xf5c7a904, 0xf108ef6b, 0x91c7d0fe, 0x23efe417, 0x23efe417, 0x23efe417, 0x7cde20f0, 0x7cde20f0, 0x7cde20f0, 0x2dd69865, 0x2dd69865, 0x2dd69865, 0x54e48d80, 0xf108ef6b, 0xf108ef6b, }, 18 }, - { "gfxmenu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xff8ab96b, 0x72a93e7f, 0xff8ab96b, 0x47d54a82, 0x42b837cf, 0x6663602f, 0x6663602f, 0x6663602f, 0xc0971cef, 0xc0971cef, 0xc0971cef, 0x3cc64633, 0x3cc64633, 0x3cc64633, 0x59c36f00, 0x47d54a82, 0x47d54a82, }, 18 }, - { "gfxmenu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x73ad05f, 0x8434d91c, 0x73ad05f, 0x5316d3c6, 0xd7e75590, 0x6885647a, 0x6885647a, 0x6885647a, 0xde486500, 0xde486500, 0xde486500, 0x7344e353, 0x7344e353, 0x7344e353, 0xaa4593fe, 0x5316d3c6, 0x5316d3c6, }, 18 }, - { "gfxmenu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x83e29007, 0xd4329e28, 0x83e29007, 0x8c37fac6, 0x97d4f246, 0x8f1c0e71, 0x8f1c0e71, 0x8f1c0e71, 0xbaad8093, 0xbaad8093, 0xbaad8093, 0x342e401, 0x342e401, 0x342e401, 0xc9cbf769, 0x8c37fac6, 0x8c37fac6, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe535f843, 0x39fb9c6c, 0xe535f843, 0x2fbd1b9, 0x7c892c8d, 0xe4a3b497, 0xe4a3b497, 0xe4a3b497, 0xf839b5ce, 0xf839b5ce, 0xf839b5ce, 0xcef38b56, 0xcef38b56, 0xcef38b56, 0x5387d57f, 0x2fbd1b9, 0x2fbd1b9, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8f8338d3, 0xdcad6ccd, 0x8f8338d3, 0x30c612d8, 0x36353d2b, 0x54eb5fa9, 0x54eb5fa9, 0x54eb5fa9, 0x7598e512, 0x7598e512, 0x7598e512, 0x75ac2d95, 0x75ac2d95, 0x75ac2d95, 0xf83ee7aa, 0x30c612d8, 0x30c612d8, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xb7a13882, 0x68141e3a, 0xb7a13882, 0x65f6d15, 0x3101c32f, 0x71819147, 0x71819147, 0x71819147, 0x937cae67, 0x937cae67, 0x937cae67, 0x5f98a12c, 0x5f98a12c, 0x5f98a12c, 0x724366e5, 0x65f6d15, 0x65f6d15, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x88a3c3aa, 0x8eade265, 0x88a3c3aa, 0xa5bf47d6, 0x9f8ae196, 0x124b1168, 0x124b1168, 0x124b1168, 0x3098734c, 0x3098734c, 0x3098734c, 0x49a4dc55, 0x49a4dc55, 0x49a4dc55, 0x5387d57f, 0xa5bf47d6, 0xa5bf47d6, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8452c39c, 0x65759f4c, 0x8452c39c, 0x7459c042, 0xf9023dca, 0xe318794e, 0xe318794e, 0xe318794e, 0x33f458a5, 0x33f458a5, 0x33f458a5, 0x5aad1cff, 0x5aad1cff, 0x5aad1cff, 0xf83ee7aa, 0x7459c042, 0x7459c042, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x938d42a2, 0x709bc8ab, 0x938d42a2, 0x4db0e2de, 0xd710f4c, 0x87e95949, 0x87e95949, 0x87e95949, 0x85e2ee32, 0x85e2ee32, 0x85e2ee32, 0x21eb46f8, 0x21eb46f8, 0x21eb46f8, 0x724366e5, 0x4db0e2de, 0x4db0e2de, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xc060102b, 0x960bef0c, 0xc060102b, 0x1589677a, 0xe97d0978, 0x182cf280, 0x182cf280, 0x182cf280, 0x6ac29d31, 0x6ac29d31, 0x6ac29d31, 0xf1873cf0, 0xf1873cf0, 0xf1873cf0, 0x1c955882, 0x1589677a, 0x1589677a, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x6a4b2b8d, 0x274440b, 0x6a4b2b8d, 0xdef115d2, 0xed0808ad, 0x2cd02aaf, 0x2cd02aaf, 0x2cd02aaf, 0xc0ea7cc4, 0xc0ea7cc4, 0xc0ea7cc4, 0x32d39755, 0x32d39755, 0x32d39755, 0x4d266f7a, 0xdef115d2, 0xdef115d2, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xdb8085be, 0x51d897c7, 0xdb8085be, 0xa3ce0221, 0x30fbd5f9, 0x251832a3, 0x251832a3, 0x251832a3, 0x2fc77bf, 0x2fc77bf, 0x2fc77bf, 0x9ecd025b, 0x9ecd025b, 0x9ecd025b, 0x1ed9d731, 0xa3ce0221, 0xa3ce0221, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x475beaa4, 0xa62db977, 0x475beaa4, 0x3a62be0, 0x311b5810, 0xa931c00a, 0xa931c00a, 0xa931c00a, 0xb5abc153, 0xb5abc153, 0xb5abc153, 0x8361ffcb, 0x8361ffcb, 0x8361ffcb, 0x5387d57f, 0x3a62be0, 0x3a62be0, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x5788a7ac, 0xd4336209, 0x5788a7ac, 0x354678e9, 0x783d77de, 0x1ae3155c, 0x1ae3155c, 0x1ae3155c, 0x3b90afe7, 0x3b90afe7, 0x3b90afe7, 0x3ba46760, 0x3ba46760, 0x3ba46760, 0xf83ee7aa, 0x354678e9, 0x354678e9, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xd1f64ea0, 0x4abd595a, 0xd1f64ea0, 0x97a6bea1, 0xf22a4cdb, 0xb2aa1eb3, 0xb2aa1eb3, 0xb2aa1eb3, 0x50572193, 0x50572193, 0x50572193, 0x9cb32ed8, 0x9cb32ed8, 0x9cb32ed8, 0x724366e5, 0x97a6bea1, 0x97a6bea1, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xfcd5f4bb, 0x36d1826d, 0xfcd5f4bb, 0x43d7de40, 0x84467c83, 0x9878c7d, 0x9878c7d, 0x9878c7d, 0x2b54ee59, 0x2b54ee59, 0x2b54ee59, 0x52684140, 0x52684140, 0x52684140, 0x5387d57f, 0x43d7de40, 0x43d7de40, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x21e820a3, 0x2f9bf273, 0x21e820a3, 0xaa229449, 0x61b241cd, 0x7ba80549, 0x7ba80549, 0x7ba80549, 0xab4424a2, 0xab4424a2, 0xab4424a2, 0xc21d60f8, 0xc21d60f8, 0xc21d60f8, 0xf83ee7aa, 0xaa229449, 0xaa229449, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x6fe66840, 0x64229598, 0x6fe66840, 0xedc02d98, 0x7131f7aa, 0xfba9a1af, 0xfba9a1af, 0xfba9a1af, 0xf9a216d4, 0xf9a216d4, 0xf9a216d4, 0x5dabbe1e, 0x5dabbe1e, 0x5dabbe1e, 0x724366e5, 0xedc02d98, 0xedc02d98, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xdb159e45, 0x9b1475c9, 0xdb159e45, 0xaee6597b, 0x573454, 0xf106cfac, 0xf106cfac, 0xf106cfac, 0x83e8a01d, 0x83e8a01d, 0x83e8a01d, 0x18ad01dc, 0x18ad01dc, 0x18ad01dc, 0x1c955882, 0xaee6597b, 0xaee6597b, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x9a43dfc6, 0x67153087, 0x9a43dfc6, 0xe9bd482c, 0xe763cddd, 0x26bbefdf, 0x26bbefdf, 0x26bbefdf, 0xca81b9b4, 0xca81b9b4, 0xca81b9b4, 0x38b85225, 0x38b85225, 0x38b85225, 0x4d266f7a, 0xe9bd482c, 0xe9bd482c, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x78bf287, 0x8e68ddb4, 0x78bf287, 0xb2b0d4a4, 0xcb49fd6e, 0xdeaa1a34, 0xdeaa1a34, 0xdeaa1a34, 0xf94e5f28, 0xf94e5f28, 0xf94e5f28, 0x657f2acc, 0x657f2acc, 0x657f2acc, 0x1ed9d731, 0xb2b0d4a4, 0xb2b0d4a4, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x1c3742c9, 0xb7ccf7ca, 0xfe517937, 0xb7ccf7ca, 0xfa1f93fd, 0x83d93b90, 0xa8242fda, 0xa8242fda, 0xa8242fda, 0x3e46691, 0x3e46691, 0x3e46691, 0x91b19ccc, 0x91b19ccc, 0x91b19ccc, 0x1c3742c9, 0xfa1f93fd, 0xfa1f93fd, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x663d292a, 0xa008c39, 0x663d292a, 0xcd82113f, 0x1c0b0f02, 0xd94fe3d7, 0xd94fe3d7, 0xd94fe3d7, 0x57c18966, 0x57c18966, 0x57c18966, 0x260fc050, 0x260fc050, 0x260fc050, 0xcc5a7bed, 0xcd82113f, 0xcd82113f, }, 18 }, - { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xef4a3312, 0xfc2f0ab1, 0x6861f25e, 0xfc2f0ab1, 0x11b6b6f7, 0xcd618f3f, 0x944ecc6, 0x944ecc6, 0x944ecc6, 0xa5663f20, 0xa5663f20, 0xa5663f20, 0xfa2f1121, 0xfa2f1121, 0xfa2f1121, 0xef4a3312, 0x11b6b6f7, 0x11b6b6f7, }, 18 }, - { "gfxterm_ar", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x3458f737, 0x9f683632, 0x3458f737, 0xc406e533, 0x59c36f00, 0x59c36f00, 0x487ab5e4, 0x487ab5e4, 0x487ab5e4, 0x7fd259c4, 0x7fd259c4, 0x7fd259c4, 0x9e9c916, 0x9e9c916, 0x9e9c916, 0x59c36f00, 0xc406e533, 0xc406e533, 0x59c36f00, }, 20 }, - { "gfxterm_ar", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xf69b4ddf, 0xe4bbd034, 0xf69b4ddf, 0x11f6f535, 0xaa4593fe, 0xaa4593fe, 0x5f72cd5e, 0x5f72cd5e, 0x5f72cd5e, 0x2d53a3c0, 0x2d53a3c0, 0x2d53a3c0, 0xc354a564, 0xc354a564, 0xc354a564, 0xaa4593fe, 0x11f6f535, 0x11f6f535, 0xaa4593fe, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x5d3f71ce, 0x125d4470, 0x5d3f71ce, 0x4cc7e0f7, 0xc9cbf769, 0xc9cbf769, 0x5cd2badc, 0x5cd2badc, 0x5cd2badc, 0xec33730a, 0xec33730a, 0xec33730a, 0x1a030f57, 0x1a030f57, 0x1a030f57, 0xc9cbf769, 0x4cc7e0f7, 0x4cc7e0f7, 0xc9cbf769, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x5009815a, 0xb5594cfe, 0x5009815a, 0xf67673d4, 0x9813a416, 0x9813a416, 0xafb29c6f, 0xafb29c6f, 0xafb29c6f, 0x9d60948b, 0x9d60948b, 0x9d60948b, 0xaee74ff6, 0xaee74ff6, 0xaee74ff6, 0x9813a416, 0xf67673d4, 0xf67673d4, 0x9813a416, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xb5a104fb, 0x4685e7e5, 0xb5a104fb, 0xaaed61d5, 0x5fcf013d, 0x5fcf013d, 0xc329daff, 0xc329daff, 0xc329daff, 0xbabb3557, 0xbabb3557, 0xbabb3557, 0x7b5d8710, 0x7b5d8710, 0x7b5d8710, 0x5fcf013d, 0xaaed61d5, 0xaaed61d5, 0x5fcf013d, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x702a2fbf, 0x137ca34, 0x702a2fbf, 0x3ac3a550, 0xdd28f52b, 0xdd28f52b, 0x75c4e836, 0x75c4e836, 0x75c4e836, 0x1f5655c1, 0x1f5655c1, 0x1f5655c1, 0xc94c0214, 0xc94c0214, 0xc94c0214, 0xdd28f52b, 0x3ac3a550, 0x3ac3a550, 0xdd28f52b, }, 20 }, - { "gfxterm_ar", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x59ff218d, 0x2ea2ce54, 0x59ff218d, 0xa532893, 0x43d1f34, 0x43d1f34, 0x5ce2fccc, 0x5ce2fccc, 0x5ce2fccc, 0x882d9d4a, 0x882d9d4a, 0x882d9d4a, 0x9f144b12, 0x9f144b12, 0x9f144b12, 0x43d1f34, 0xa532893, 0xa532893, 0x43d1f34, }, 20 }, - { "gfxterm_ar", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x3458f737, 0x9f683632, 0x3458f737, 0xc406e533, 0x59c36f00, 0x59c36f00, 0x487ab5e4, 0x487ab5e4, 0x487ab5e4, 0x7fd259c4, 0x7fd259c4, 0x7fd259c4, 0x9e9c916, 0x9e9c916, 0x9e9c916, 0x59c36f00, 0xc406e533, 0xc406e533, 0x59c36f00, }, 20 }, - { "gfxterm_ar", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xf69b4ddf, 0xe4bbd034, 0xf69b4ddf, 0x11f6f535, 0xaa4593fe, 0xaa4593fe, 0x5f72cd5e, 0x5f72cd5e, 0x5f72cd5e, 0x2d53a3c0, 0x2d53a3c0, 0x2d53a3c0, 0xc354a564, 0xc354a564, 0xc354a564, 0xaa4593fe, 0x11f6f535, 0x11f6f535, 0xaa4593fe, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x5d3f71ce, 0x125d4470, 0x5d3f71ce, 0x4cc7e0f7, 0xc9cbf769, 0xc9cbf769, 0x5cd2badc, 0x5cd2badc, 0x5cd2badc, 0xec33730a, 0xec33730a, 0xec33730a, 0x1a030f57, 0x1a030f57, 0x1a030f57, 0xc9cbf769, 0x4cc7e0f7, 0x4cc7e0f7, 0xc9cbf769, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x25a5c60d, 0x710e9f28, 0x25a5c60d, 0x5510103c, 0x5387d57f, 0x5387d57f, 0x56907307, 0x56907307, 0x56907307, 0x3dfe4b30, 0x3dfe4b30, 0x3dfe4b30, 0xd7730474, 0xd7730474, 0xd7730474, 0x5387d57f, 0x5510103c, 0x5510103c, 0x5387d57f, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xdebdd7f3, 0x33db1e37, 0xdebdd7f3, 0xcdf8274e, 0xf83ee7aa, 0xf83ee7aa, 0x84173ffc, 0x84173ffc, 0x84173ffc, 0x8b00f39f, 0x8b00f39f, 0x8b00f39f, 0x26a20d25, 0x26a20d25, 0x26a20d25, 0xf83ee7aa, 0xcdf8274e, 0xcdf8274e, 0xf83ee7aa, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x60bd92a4, 0xc1a5291, 0x60bd92a4, 0xf123a639, 0x724366e5, 0x724366e5, 0xae152dbb, 0xae152dbb, 0xae152dbb, 0x10937a63, 0x10937a63, 0x10937a63, 0x90096d6b, 0x90096d6b, 0x90096d6b, 0x724366e5, 0xf123a639, 0xf123a639, 0x724366e5, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x86a31ce8, 0xb11aeda2, 0x86a31ce8, 0xf58b546d, 0x5387d57f, 0x5387d57f, 0xf6282a9d, 0xf6282a9d, 0xf6282a9d, 0xcbf551f5, 0xcbf551f5, 0xcbf551f5, 0xf019c753, 0xf019c753, 0xf019c753, 0x5387d57f, 0xf58b546d, 0xf58b546d, 0x5387d57f, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1a630045, 0x98571c45, 0x1a630045, 0xc048b0b5, 0xf83ee7aa, 0xf83ee7aa, 0xacc07607, 0xacc07607, 0xacc07607, 0xc9f589d6, 0xc9f589d6, 0xc9f589d6, 0x70e1b560, 0x70e1b560, 0x70e1b560, 0xf83ee7aa, 0xc048b0b5, 0xc048b0b5, 0xf83ee7aa, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xd4525d7b, 0xa87ca8e, 0xd4525d7b, 0xb3296aff, 0x724366e5, 0x724366e5, 0x8733800b, 0x8733800b, 0x8733800b, 0x3aab0496, 0x3aab0496, 0x3aab0496, 0x9e644025, 0x9e644025, 0x9e644025, 0x724366e5, 0xb3296aff, 0xb3296aff, 0x724366e5, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x7e77dcd0, 0x311e2b82, 0x7e77dcd0, 0xb8adbf93, 0x1c955882, 0x1c955882, 0x68965652, 0x68965652, 0x68965652, 0x5a808c66, 0x5a808c66, 0x5a808c66, 0x7714bef6, 0x7714bef6, 0x7714bef6, 0x1c955882, 0xb8adbf93, 0xb8adbf93, 0x1c955882, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x5f3e70fc, 0x869b02b8, 0x5f3e70fc, 0xaa9adaab, 0x4d266f7a, 0x4d266f7a, 0x8c12bf3a, 0x8c12bf3a, 0x8c12bf3a, 0x677c6119, 0x677c6119, 0x677c6119, 0x551f417c, 0x551f417c, 0x551f417c, 0x4d266f7a, 0xaa9adaab, 0xaa9adaab, 0x4d266f7a, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe61938bc, 0x6ace17ff, 0xe61938bc, 0x93bd5c33, 0x1ed9d731, 0x1ed9d731, 0x3b4b0d2d, 0x3b4b0d2d, 0x3b4b0d2d, 0x53ebfbfe, 0x53ebfbfe, 0x53ebfbfe, 0xdf47124f, 0xdf47124f, 0xdf47124f, 0x1ed9d731, 0x93bd5c33, 0x93bd5c33, 0x1ed9d731, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x25a5c60d, 0x710e9f28, 0x25a5c60d, 0x5510103c, 0x5387d57f, 0x5387d57f, 0x56907307, 0x56907307, 0x56907307, 0x3dfe4b30, 0x3dfe4b30, 0x3dfe4b30, 0xd7730474, 0xd7730474, 0xd7730474, 0x5387d57f, 0x5510103c, 0x5510103c, 0x5387d57f, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xdebdd7f3, 0x33db1e37, 0xdebdd7f3, 0xcdf8274e, 0xf83ee7aa, 0xf83ee7aa, 0x84173ffc, 0x84173ffc, 0x84173ffc, 0x8b00f39f, 0x8b00f39f, 0x8b00f39f, 0x26a20d25, 0x26a20d25, 0x26a20d25, 0xf83ee7aa, 0xcdf8274e, 0xcdf8274e, 0xf83ee7aa, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x60bd92a4, 0xc1a5291, 0x60bd92a4, 0xf123a639, 0x724366e5, 0x724366e5, 0xae152dbb, 0xae152dbb, 0xae152dbb, 0x10937a63, 0x10937a63, 0x10937a63, 0x90096d6b, 0x90096d6b, 0x90096d6b, 0x724366e5, 0xf123a639, 0xf123a639, 0x724366e5, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x86a31ce8, 0xb11aeda2, 0x86a31ce8, 0xf58b546d, 0x5387d57f, 0x5387d57f, 0xf6282a9d, 0xf6282a9d, 0xf6282a9d, 0xcbf551f5, 0xcbf551f5, 0xcbf551f5, 0xf019c753, 0xf019c753, 0xf019c753, 0x5387d57f, 0xf58b546d, 0xf58b546d, 0x5387d57f, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1a630045, 0x98571c45, 0x1a630045, 0xc048b0b5, 0xf83ee7aa, 0xf83ee7aa, 0xacc07607, 0xacc07607, 0xacc07607, 0xc9f589d6, 0xc9f589d6, 0xc9f589d6, 0x70e1b560, 0x70e1b560, 0x70e1b560, 0xf83ee7aa, 0xc048b0b5, 0xc048b0b5, 0xf83ee7aa, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xd4525d7b, 0xa87ca8e, 0xd4525d7b, 0xb3296aff, 0x724366e5, 0x724366e5, 0x8733800b, 0x8733800b, 0x8733800b, 0x3aab0496, 0x3aab0496, 0x3aab0496, 0x9e644025, 0x9e644025, 0x9e644025, 0x724366e5, 0xb3296aff, 0xb3296aff, 0x724366e5, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x7e77dcd0, 0x311e2b82, 0x7e77dcd0, 0xb8adbf93, 0x1c955882, 0x1c955882, 0x68965652, 0x68965652, 0x68965652, 0x5a808c66, 0x5a808c66, 0x5a808c66, 0x7714bef6, 0x7714bef6, 0x7714bef6, 0x1c955882, 0xb8adbf93, 0xb8adbf93, 0x1c955882, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x5f3e70fc, 0x869b02b8, 0x5f3e70fc, 0xaa9adaab, 0x4d266f7a, 0x4d266f7a, 0x8c12bf3a, 0x8c12bf3a, 0x8c12bf3a, 0x677c6119, 0x677c6119, 0x677c6119, 0x551f417c, 0x551f417c, 0x551f417c, 0x4d266f7a, 0xaa9adaab, 0xaa9adaab, 0x4d266f7a, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe61938bc, 0x6ace17ff, 0xe61938bc, 0x93bd5c33, 0x1ed9d731, 0x1ed9d731, 0x3b4b0d2d, 0x3b4b0d2d, 0x3b4b0d2d, 0x53ebfbfe, 0x53ebfbfe, 0x53ebfbfe, 0xdf47124f, 0xdf47124f, 0xdf47124f, 0x1ed9d731, 0x93bd5c33, 0x93bd5c33, 0x1ed9d731, }, 20 }, - { "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x5009815a, 0xb5594cfe, 0x5009815a, 0xf67673d4, 0x9813a416, 0x9813a416, 0xafb29c6f, 0xafb29c6f, 0xafb29c6f, 0x9d60948b, 0x9d60948b, 0x9d60948b, 0xaee74ff6, 0xaee74ff6, 0xaee74ff6, 0x9813a416, 0xf67673d4, 0xf67673d4, 0x9813a416, }, 20 }, - { "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xb5a104fb, 0x4685e7e5, 0xb5a104fb, 0xaaed61d5, 0x5fcf013d, 0x5fcf013d, 0xc329daff, 0xc329daff, 0xc329daff, 0xbabb3557, 0xbabb3557, 0xbabb3557, 0x7b5d8710, 0x7b5d8710, 0x7b5d8710, 0x5fcf013d, 0xaaed61d5, 0xaaed61d5, 0x5fcf013d, }, 20 }, - { "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x702a2fbf, 0x137ca34, 0x702a2fbf, 0x3ac3a550, 0xdd28f52b, 0xdd28f52b, 0x75c4e836, 0x75c4e836, 0x75c4e836, 0x1f5655c1, 0x1f5655c1, 0x1f5655c1, 0xc94c0214, 0xc94c0214, 0xc94c0214, 0xdd28f52b, 0x3ac3a550, 0x3ac3a550, 0xdd28f52b, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xf8b931ce, 0x5d102c8a, 0xf8b931ce, 0x8e723ca, 0x59c36f00, 0x59c36f00, 0xbbcc22eb, 0xbbcc22eb, 0xbbcc22eb, 0x8c64cecb, 0x8c64cecb, 0x8c64cecb, 0xfa5f5e19, 0xfa5f5e19, 0xfa5f5e19, 0x59c36f00, 0x8e723ca, 0x8e723ca, 0x59c36f00, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x4a1d3222, 0xd3f0a2f6, 0x4a1d3222, 0xad708ac8, 0xaa4593fe, 0xaa4593fe, 0x9097e33f, 0x9097e33f, 0x9097e33f, 0xe2b68da1, 0xe2b68da1, 0xe2b68da1, 0xcb18b05, 0xcb18b05, 0xcb18b05, 0xaa4593fe, 0xad708ac8, 0xad708ac8, 0xaa4593fe, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x11c27ef8, 0x12ef425b, 0x11c27ef8, 0x3aefc1, 0xc9cbf769, 0xc9cbf769, 0x154ce430, 0x154ce430, 0x154ce430, 0xa5ad2de6, 0xa5ad2de6, 0xa5ad2de6, 0x539d51bb, 0x539d51bb, 0x539d51bb, 0xc9cbf769, 0x3aefc1, 0x3aefc1, 0xc9cbf769, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xb841ae4f, 0xb7a7d822, 0xb841ae4f, 0x1e3e5cc1, 0x9813a416, 0x9813a416, 0x8d8bbafc, 0x8d8bbafc, 0x8d8bbafc, 0xbf59b218, 0xbf59b218, 0xbf59b218, 0x8cde6965, 0x8cde6965, 0x8cde6965, 0x9813a416, 0x1e3e5cc1, 0x1e3e5cc1, 0x9813a416, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x4eee063f, 0x14c47610, 0x4eee063f, 0x51a26311, 0x5fcf013d, 0x5fcf013d, 0x315129ac, 0x315129ac, 0x315129ac, 0x48c3c604, 0x48c3c604, 0x48c3c604, 0x89257443, 0x89257443, 0x89257443, 0x5fcf013d, 0x51a26311, 0x51a26311, 0x5fcf013d, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xcf32bbc4, 0x59af6391, 0xcf32bbc4, 0x85db312b, 0xdd28f52b, 0xdd28f52b, 0xf0818ff6, 0xf0818ff6, 0xf0818ff6, 0x9a133201, 0x9a133201, 0x9a133201, 0x4c0965d4, 0x4c0965d4, 0x4c0965d4, 0xdd28f52b, 0x85db312b, 0x85db312b, 0xdd28f52b, }, 20 }, - { "gfxterm_cyr", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x5778d6ff, 0xcf85670e, 0x5778d6ff, 0x4d4dfe1, 0x43d1f34, 0x43d1f34, 0x79c347f3, 0x79c347f3, 0x79c347f3, 0xad0c2675, 0xad0c2675, 0xad0c2675, 0xba35f02d, 0xba35f02d, 0xba35f02d, 0x43d1f34, 0x4d4dfe1, 0x4d4dfe1, 0x43d1f34, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xf8b931ce, 0x5d102c8a, 0xf8b931ce, 0x8e723ca, 0x59c36f00, 0x59c36f00, 0xbbcc22eb, 0xbbcc22eb, 0xbbcc22eb, 0x8c64cecb, 0x8c64cecb, 0x8c64cecb, 0xfa5f5e19, 0xfa5f5e19, 0xfa5f5e19, 0x59c36f00, 0x8e723ca, 0x8e723ca, 0x59c36f00, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x4a1d3222, 0xd3f0a2f6, 0x4a1d3222, 0xad708ac8, 0xaa4593fe, 0xaa4593fe, 0x9097e33f, 0x9097e33f, 0x9097e33f, 0xe2b68da1, 0xe2b68da1, 0xe2b68da1, 0xcb18b05, 0xcb18b05, 0xcb18b05, 0xaa4593fe, 0xad708ac8, 0xad708ac8, 0xaa4593fe, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x11c27ef8, 0x12ef425b, 0x11c27ef8, 0x3aefc1, 0xc9cbf769, 0xc9cbf769, 0x154ce430, 0x154ce430, 0x154ce430, 0xa5ad2de6, 0xa5ad2de6, 0xa5ad2de6, 0x539d51bb, 0x539d51bb, 0x539d51bb, 0xc9cbf769, 0x3aefc1, 0x3aefc1, 0xc9cbf769, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x1a771028, 0xe94b2b44, 0x1a771028, 0x6ac2c619, 0x5387d57f, 0x5387d57f, 0x74845744, 0x74845744, 0x74845744, 0x1fea6f73, 0x1fea6f73, 0x1fea6f73, 0xf5672037, 0xf5672037, 0xf5672037, 0x5387d57f, 0x6ac2c619, 0x6ac2c619, 0x5387d57f, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xdf1ece5a, 0xa6fdd748, 0xdf1ece5a, 0xcc5b3ee7, 0xf83ee7aa, 0xf83ee7aa, 0x1e3f7378, 0x1e3f7378, 0x1e3f7378, 0x1128bf1b, 0x1128bf1b, 0x1128bf1b, 0xbc8a41a1, 0xbc8a41a1, 0xbc8a41a1, 0xf83ee7aa, 0xcc5b3ee7, 0xcc5b3ee7, 0xf83ee7aa, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xb1cd1a5a, 0xac7574de, 0xb1cd1a5a, 0x20532ec7, 0x724366e5, 0x724366e5, 0x6dc4c04, 0x6dc4c04, 0x6dc4c04, 0xb85a1bdc, 0xb85a1bdc, 0xb85a1bdc, 0x38c00cd4, 0x38c00cd4, 0x38c00cd4, 0x724366e5, 0x20532ec7, 0x20532ec7, 0x724366e5, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x78a02a32, 0x6ab778cc, 0x78a02a32, 0xb8862b7, 0x5387d57f, 0x5387d57f, 0x5a2a46f3, 0x5a2a46f3, 0x5a2a46f3, 0x67f73d9b, 0x67f73d9b, 0x67f73d9b, 0x5c1bab3d, 0x5c1bab3d, 0x5c1bab3d, 0x5387d57f, 0xb8862b7, 0xb8862b7, 0x5387d57f, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x780e644b, 0x887d4bc5, 0x780e644b, 0xa225d4bb, 0xf83ee7aa, 0xf83ee7aa, 0xd1685b5a, 0xd1685b5a, 0xd1685b5a, 0xb45da48b, 0xb45da48b, 0xb45da48b, 0xd49983d, 0xd49983d, 0xd49983d, 0xf83ee7aa, 0xa225d4bb, 0xa225d4bb, 0xf83ee7aa, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x88442d18, 0xf84114b9, 0x88442d18, 0xef3f1a9c, 0x724366e5, 0x724366e5, 0x4605d5f9, 0x4605d5f9, 0x4605d5f9, 0xfb9d5164, 0xfb9d5164, 0xfb9d5164, 0x5f5215d7, 0x5f5215d7, 0x5f5215d7, 0x724366e5, 0xef3f1a9c, 0xef3f1a9c, 0x724366e5, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x33c566c9, 0x12974e4e, 0x33c566c9, 0xf51f058a, 0x1c955882, 0x1c955882, 0xdae7571c, 0xdae7571c, 0xdae7571c, 0xe8f18d28, 0xe8f18d28, 0xe8f18d28, 0xc565bfb8, 0xc565bfb8, 0xc565bfb8, 0x1c955882, 0xf51f058a, 0xf51f058a, 0x1c955882, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x48ab65a4, 0x99e0071a, 0x48ab65a4, 0xbd0fcff3, 0x4d266f7a, 0x4d266f7a, 0xb98c42f4, 0xb98c42f4, 0xb98c42f4, 0x52e29cd7, 0x52e29cd7, 0x52e29cd7, 0x6081bcb2, 0x6081bcb2, 0x6081bcb2, 0x4d266f7a, 0xbd0fcff3, 0xbd0fcff3, 0x4d266f7a, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb2b56df5, 0x3d357f10, 0xb2b56df5, 0xc711097a, 0x1ed9d731, 0x1ed9d731, 0x280ecefd, 0x280ecefd, 0x280ecefd, 0x40ae382e, 0x40ae382e, 0x40ae382e, 0xcc02d19f, 0xcc02d19f, 0xcc02d19f, 0x1ed9d731, 0xc711097a, 0xc711097a, 0x1ed9d731, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x1a771028, 0xe94b2b44, 0x1a771028, 0x6ac2c619, 0x5387d57f, 0x5387d57f, 0x74845744, 0x74845744, 0x74845744, 0x1fea6f73, 0x1fea6f73, 0x1fea6f73, 0xf5672037, 0xf5672037, 0xf5672037, 0x5387d57f, 0x6ac2c619, 0x6ac2c619, 0x5387d57f, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xdf1ece5a, 0xa6fdd748, 0xdf1ece5a, 0xcc5b3ee7, 0xf83ee7aa, 0xf83ee7aa, 0x1e3f7378, 0x1e3f7378, 0x1e3f7378, 0x1128bf1b, 0x1128bf1b, 0x1128bf1b, 0xbc8a41a1, 0xbc8a41a1, 0xbc8a41a1, 0xf83ee7aa, 0xcc5b3ee7, 0xcc5b3ee7, 0xf83ee7aa, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xb1cd1a5a, 0xac7574de, 0xb1cd1a5a, 0x20532ec7, 0x724366e5, 0x724366e5, 0x6dc4c04, 0x6dc4c04, 0x6dc4c04, 0xb85a1bdc, 0xb85a1bdc, 0xb85a1bdc, 0x38c00cd4, 0x38c00cd4, 0x38c00cd4, 0x724366e5, 0x20532ec7, 0x20532ec7, 0x724366e5, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x78a02a32, 0x6ab778cc, 0x78a02a32, 0xb8862b7, 0x5387d57f, 0x5387d57f, 0x5a2a46f3, 0x5a2a46f3, 0x5a2a46f3, 0x67f73d9b, 0x67f73d9b, 0x67f73d9b, 0x5c1bab3d, 0x5c1bab3d, 0x5c1bab3d, 0x5387d57f, 0xb8862b7, 0xb8862b7, 0x5387d57f, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x780e644b, 0x887d4bc5, 0x780e644b, 0xa225d4bb, 0xf83ee7aa, 0xf83ee7aa, 0xd1685b5a, 0xd1685b5a, 0xd1685b5a, 0xb45da48b, 0xb45da48b, 0xb45da48b, 0xd49983d, 0xd49983d, 0xd49983d, 0xf83ee7aa, 0xa225d4bb, 0xa225d4bb, 0xf83ee7aa, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x88442d18, 0xf84114b9, 0x88442d18, 0xef3f1a9c, 0x724366e5, 0x724366e5, 0x4605d5f9, 0x4605d5f9, 0x4605d5f9, 0xfb9d5164, 0xfb9d5164, 0xfb9d5164, 0x5f5215d7, 0x5f5215d7, 0x5f5215d7, 0x724366e5, 0xef3f1a9c, 0xef3f1a9c, 0x724366e5, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x33c566c9, 0x12974e4e, 0x33c566c9, 0xf51f058a, 0x1c955882, 0x1c955882, 0xdae7571c, 0xdae7571c, 0xdae7571c, 0xe8f18d28, 0xe8f18d28, 0xe8f18d28, 0xc565bfb8, 0xc565bfb8, 0xc565bfb8, 0x1c955882, 0xf51f058a, 0xf51f058a, 0x1c955882, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x48ab65a4, 0x99e0071a, 0x48ab65a4, 0xbd0fcff3, 0x4d266f7a, 0x4d266f7a, 0xb98c42f4, 0xb98c42f4, 0xb98c42f4, 0x52e29cd7, 0x52e29cd7, 0x52e29cd7, 0x6081bcb2, 0x6081bcb2, 0x6081bcb2, 0x4d266f7a, 0xbd0fcff3, 0xbd0fcff3, 0x4d266f7a, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb2b56df5, 0x3d357f10, 0xb2b56df5, 0xc711097a, 0x1ed9d731, 0x1ed9d731, 0x280ecefd, 0x280ecefd, 0x280ecefd, 0x40ae382e, 0x40ae382e, 0x40ae382e, 0xcc02d19f, 0xcc02d19f, 0xcc02d19f, 0x1ed9d731, 0xc711097a, 0xc711097a, 0x1ed9d731, }, 20 }, - { "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xb841ae4f, 0xb7a7d822, 0xb841ae4f, 0x1e3e5cc1, 0x9813a416, 0x9813a416, 0x8d8bbafc, 0x8d8bbafc, 0x8d8bbafc, 0xbf59b218, 0xbf59b218, 0xbf59b218, 0x8cde6965, 0x8cde6965, 0x8cde6965, 0x9813a416, 0x1e3e5cc1, 0x1e3e5cc1, 0x9813a416, }, 20 }, - { "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x4eee063f, 0x14c47610, 0x4eee063f, 0x51a26311, 0x5fcf013d, 0x5fcf013d, 0x315129ac, 0x315129ac, 0x315129ac, 0x48c3c604, 0x48c3c604, 0x48c3c604, 0x89257443, 0x89257443, 0x89257443, 0x5fcf013d, 0x51a26311, 0x51a26311, 0x5fcf013d, }, 20 }, - { "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xcf32bbc4, 0x59af6391, 0xcf32bbc4, 0x85db312b, 0xdd28f52b, 0xdd28f52b, 0xf0818ff6, 0xf0818ff6, 0xf0818ff6, 0x9a133201, 0x9a133201, 0x9a133201, 0x4c0965d4, 0x4c0965d4, 0x4c0965d4, 0xdd28f52b, 0x85db312b, 0x85db312b, 0xdd28f52b, }, 20 }, - { "gfxterm_heb", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xeeece42, 0xd32ac62d, 0xeeece42, 0xfeb0dc46, 0x59c36f00, 0x59c36f00, 0xb87b7d77, 0xb87b7d77, 0xb87b7d77, 0x8fd39157, 0x8fd39157, 0x8fd39157, 0xf9e80185, 0xf9e80185, 0xf9e80185, 0x59c36f00, 0xfeb0dc46, 0xfeb0dc46, 0x59c36f00, }, 20 }, - { "gfxterm_heb", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x74926bc5, 0x46811cb4, 0x74926bc5, 0x93ffd32f, 0xaa4593fe, 0xaa4593fe, 0x1577dcdd, 0x1577dcdd, 0x1577dcdd, 0x6756b243, 0x6756b243, 0x6756b243, 0x8951b4e7, 0x8951b4e7, 0x8951b4e7, 0xaa4593fe, 0x93ffd32f, 0x93ffd32f, 0xaa4593fe, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x8e4764e5, 0xb94cb40c, 0x8e4764e5, 0x9fbff5dc, 0xc9cbf769, 0xc9cbf769, 0x49324147, 0x49324147, 0x49324147, 0xf9d38891, 0xf9d38891, 0xf9d38891, 0xfe3f4cc, 0xfe3f4cc, 0xfe3f4cc, 0xc9cbf769, 0x9fbff5dc, 0x9fbff5dc, 0xc9cbf769, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xf61aa867, 0xa8efbede, 0xf61aa867, 0x50655ae9, 0x9813a416, 0x9813a416, 0x284e60ab, 0x284e60ab, 0x284e60ab, 0x1a9c684f, 0x1a9c684f, 0x1a9c684f, 0x291bb332, 0x291bb332, 0x291bb332, 0x9813a416, 0x50655ae9, 0x50655ae9, 0x9813a416, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x37948987, 0xe8b2e546, 0x37948987, 0x28d8eca9, 0x5fcf013d, 0x5fcf013d, 0xa253c90f, 0xa253c90f, 0xa253c90f, 0xdbc126a7, 0xdbc126a7, 0xdbc126a7, 0x1a2794e0, 0x1a2794e0, 0x1a2794e0, 0x5fcf013d, 0x28d8eca9, 0x28d8eca9, 0x5fcf013d, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xde8ea380, 0x3146c4d0, 0xde8ea380, 0x9467296f, 0xdd28f52b, 0xdd28f52b, 0x28df5b61, 0x28df5b61, 0x28df5b61, 0x424de696, 0x424de696, 0x424de696, 0x9457b143, 0x9457b143, 0x9457b143, 0xdd28f52b, 0x9467296f, 0x9467296f, 0xdd28f52b, }, 20 }, - { "gfxterm_heb", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x645ee4a4, 0xe5d79128, 0x645ee4a4, 0x37f2edba, 0x43d1f34, 0x43d1f34, 0x414cd43a, 0x414cd43a, 0x414cd43a, 0x9583b5bc, 0x9583b5bc, 0x9583b5bc, 0x82ba63e4, 0x82ba63e4, 0x82ba63e4, 0x43d1f34, 0x37f2edba, 0x37f2edba, 0x43d1f34, }, 20 }, - { "gfxterm_heb", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xeeece42, 0xd32ac62d, 0xeeece42, 0xfeb0dc46, 0x59c36f00, 0x59c36f00, 0xb87b7d77, 0xb87b7d77, 0xb87b7d77, 0x8fd39157, 0x8fd39157, 0x8fd39157, 0xf9e80185, 0xf9e80185, 0xf9e80185, 0x59c36f00, 0xfeb0dc46, 0xfeb0dc46, 0x59c36f00, }, 20 }, - { "gfxterm_heb", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x74926bc5, 0x46811cb4, 0x74926bc5, 0x93ffd32f, 0xaa4593fe, 0xaa4593fe, 0x1577dcdd, 0x1577dcdd, 0x1577dcdd, 0x6756b243, 0x6756b243, 0x6756b243, 0x8951b4e7, 0x8951b4e7, 0x8951b4e7, 0xaa4593fe, 0x93ffd32f, 0x93ffd32f, 0xaa4593fe, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x8e4764e5, 0xb94cb40c, 0x8e4764e5, 0x9fbff5dc, 0xc9cbf769, 0xc9cbf769, 0x49324147, 0x49324147, 0x49324147, 0xf9d38891, 0xf9d38891, 0xf9d38891, 0xfe3f4cc, 0xfe3f4cc, 0xfe3f4cc, 0xc9cbf769, 0x9fbff5dc, 0x9fbff5dc, 0xc9cbf769, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x4bb8bd52, 0xd1c595e2, 0x4bb8bd52, 0x3b0d6b63, 0x5387d57f, 0x5387d57f, 0xa166c9ac, 0xa166c9ac, 0xa166c9ac, 0xca08f19b, 0xca08f19b, 0xca08f19b, 0x2085bedf, 0x2085bedf, 0x2085bedf, 0x5387d57f, 0x3b0d6b63, 0x3b0d6b63, 0x5387d57f, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x97462a28, 0x6e289d48, 0x97462a28, 0x8403da95, 0xf83ee7aa, 0xf83ee7aa, 0x1a6f8010, 0x1a6f8010, 0x1a6f8010, 0x15784c73, 0x15784c73, 0x15784c73, 0xb8dab2c9, 0xb8dab2c9, 0xb8dab2c9, 0xf83ee7aa, 0x8403da95, 0x8403da95, 0xf83ee7aa, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xbfd6acef, 0x8b7171c0, 0xbfd6acef, 0x2e489872, 0x724366e5, 0x724366e5, 0xfc86ebe7, 0xfc86ebe7, 0xfc86ebe7, 0x4200bc3f, 0x4200bc3f, 0x4200bc3f, 0xc29aab37, 0xc29aab37, 0xc29aab37, 0x724366e5, 0x2e489872, 0x2e489872, 0x724366e5, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc72519d6, 0x84db4689, 0xc72519d6, 0xb40d5153, 0x5387d57f, 0x5387d57f, 0x5b19d18d, 0x5b19d18d, 0x5b19d18d, 0x66c4aae5, 0x66c4aae5, 0x66c4aae5, 0x5d283c43, 0x5d283c43, 0x5d283c43, 0x5387d57f, 0xb40d5153, 0xb40d5153, 0x5387d57f, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xcf88f071, 0x5b1f9a14, 0xcf88f071, 0x15a34081, 0xf83ee7aa, 0xf83ee7aa, 0xac05dae3, 0xac05dae3, 0xac05dae3, 0xc9302532, 0xc9302532, 0xc9302532, 0x70241984, 0x70241984, 0x70241984, 0xf83ee7aa, 0x15a34081, 0x15a34081, 0xf83ee7aa, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x876ef22b, 0x3b8025e3, 0x876ef22b, 0xe015c5af, 0x724366e5, 0x724366e5, 0xe6ef3c30, 0xe6ef3c30, 0xe6ef3c30, 0x5b77b8ad, 0x5b77b8ad, 0x5b77b8ad, 0xffb8fc1e, 0xffb8fc1e, 0xffb8fc1e, 0x724366e5, 0xe015c5af, 0xe015c5af, 0x724366e5, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x483c4536, 0x36149342, 0x483c4536, 0x8ee62675, 0x1c955882, 0x1c955882, 0xd0692bee, 0xd0692bee, 0xd0692bee, 0xe27ff1da, 0xe27ff1da, 0xe27ff1da, 0xcfebc34a, 0xcfebc34a, 0xcfebc34a, 0x1c955882, 0x8ee62675, 0x8ee62675, 0x1c955882, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xdc350b32, 0x9b9d7abf, 0xdc350b32, 0x2991a165, 0x4d266f7a, 0x4d266f7a, 0x12ea18e7, 0x12ea18e7, 0x12ea18e7, 0xf984c6c4, 0xf984c6c4, 0xf984c6c4, 0xcbe7e6a1, 0xcbe7e6a1, 0xcbe7e6a1, 0x4d266f7a, 0x2991a165, 0x2991a165, 0x4d266f7a, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x1ae35856, 0x4d2d0bba, 0x1ae35856, 0x6f473cd9, 0x1ed9d731, 0x1ed9d731, 0x8b94f0c0, 0x8b94f0c0, 0x8b94f0c0, 0xe3340613, 0xe3340613, 0xe3340613, 0x6f98efa2, 0x6f98efa2, 0x6f98efa2, 0x1ed9d731, 0x6f473cd9, 0x6f473cd9, 0x1ed9d731, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x4bb8bd52, 0xd1c595e2, 0x4bb8bd52, 0x3b0d6b63, 0x5387d57f, 0x5387d57f, 0xa166c9ac, 0xa166c9ac, 0xa166c9ac, 0xca08f19b, 0xca08f19b, 0xca08f19b, 0x2085bedf, 0x2085bedf, 0x2085bedf, 0x5387d57f, 0x3b0d6b63, 0x3b0d6b63, 0x5387d57f, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x97462a28, 0x6e289d48, 0x97462a28, 0x8403da95, 0xf83ee7aa, 0xf83ee7aa, 0x1a6f8010, 0x1a6f8010, 0x1a6f8010, 0x15784c73, 0x15784c73, 0x15784c73, 0xb8dab2c9, 0xb8dab2c9, 0xb8dab2c9, 0xf83ee7aa, 0x8403da95, 0x8403da95, 0xf83ee7aa, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xbfd6acef, 0x8b7171c0, 0xbfd6acef, 0x2e489872, 0x724366e5, 0x724366e5, 0xfc86ebe7, 0xfc86ebe7, 0xfc86ebe7, 0x4200bc3f, 0x4200bc3f, 0x4200bc3f, 0xc29aab37, 0xc29aab37, 0xc29aab37, 0x724366e5, 0x2e489872, 0x2e489872, 0x724366e5, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc72519d6, 0x84db4689, 0xc72519d6, 0xb40d5153, 0x5387d57f, 0x5387d57f, 0x5b19d18d, 0x5b19d18d, 0x5b19d18d, 0x66c4aae5, 0x66c4aae5, 0x66c4aae5, 0x5d283c43, 0x5d283c43, 0x5d283c43, 0x5387d57f, 0xb40d5153, 0xb40d5153, 0x5387d57f, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xcf88f071, 0x5b1f9a14, 0xcf88f071, 0x15a34081, 0xf83ee7aa, 0xf83ee7aa, 0xac05dae3, 0xac05dae3, 0xac05dae3, 0xc9302532, 0xc9302532, 0xc9302532, 0x70241984, 0x70241984, 0x70241984, 0xf83ee7aa, 0x15a34081, 0x15a34081, 0xf83ee7aa, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x876ef22b, 0x3b8025e3, 0x876ef22b, 0xe015c5af, 0x724366e5, 0x724366e5, 0xe6ef3c30, 0xe6ef3c30, 0xe6ef3c30, 0x5b77b8ad, 0x5b77b8ad, 0x5b77b8ad, 0xffb8fc1e, 0xffb8fc1e, 0xffb8fc1e, 0x724366e5, 0xe015c5af, 0xe015c5af, 0x724366e5, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x483c4536, 0x36149342, 0x483c4536, 0x8ee62675, 0x1c955882, 0x1c955882, 0xd0692bee, 0xd0692bee, 0xd0692bee, 0xe27ff1da, 0xe27ff1da, 0xe27ff1da, 0xcfebc34a, 0xcfebc34a, 0xcfebc34a, 0x1c955882, 0x8ee62675, 0x8ee62675, 0x1c955882, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xdc350b32, 0x9b9d7abf, 0xdc350b32, 0x2991a165, 0x4d266f7a, 0x4d266f7a, 0x12ea18e7, 0x12ea18e7, 0x12ea18e7, 0xf984c6c4, 0xf984c6c4, 0xf984c6c4, 0xcbe7e6a1, 0xcbe7e6a1, 0xcbe7e6a1, 0x4d266f7a, 0x2991a165, 0x2991a165, 0x4d266f7a, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x1ae35856, 0x4d2d0bba, 0x1ae35856, 0x6f473cd9, 0x1ed9d731, 0x1ed9d731, 0x8b94f0c0, 0x8b94f0c0, 0x8b94f0c0, 0xe3340613, 0xe3340613, 0xe3340613, 0x6f98efa2, 0x6f98efa2, 0x6f98efa2, 0x1ed9d731, 0x6f473cd9, 0x6f473cd9, 0x1ed9d731, }, 20 }, - { "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xf61aa867, 0xa8efbede, 0xf61aa867, 0x50655ae9, 0x9813a416, 0x9813a416, 0x284e60ab, 0x284e60ab, 0x284e60ab, 0x1a9c684f, 0x1a9c684f, 0x1a9c684f, 0x291bb332, 0x291bb332, 0x291bb332, 0x9813a416, 0x50655ae9, 0x50655ae9, 0x9813a416, }, 20 }, - { "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x37948987, 0xe8b2e546, 0x37948987, 0x28d8eca9, 0x5fcf013d, 0x5fcf013d, 0xa253c90f, 0xa253c90f, 0xa253c90f, 0xdbc126a7, 0xdbc126a7, 0xdbc126a7, 0x1a2794e0, 0x1a2794e0, 0x1a2794e0, 0x5fcf013d, 0x28d8eca9, 0x28d8eca9, 0x5fcf013d, }, 20 }, - { "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xde8ea380, 0x3146c4d0, 0xde8ea380, 0x9467296f, 0xdd28f52b, 0xdd28f52b, 0x28df5b61, 0x28df5b61, 0x28df5b61, 0x424de696, 0x424de696, 0x424de696, 0x9457b143, 0x9457b143, 0x9457b143, 0xdd28f52b, 0x9467296f, 0x9467296f, 0xdd28f52b, }, 20 }, - { "gfxterm_gre", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x8ee79de, 0x26b051ae, 0x8ee79de, 0xf8b06bda, 0x59c36f00, 0x59c36f00, 0x3f1c338c, 0x3f1c338c, 0x3f1c338c, 0x8b4dfac, 0x8b4dfac, 0x8b4dfac, 0x7e8f4f7e, 0x7e8f4f7e, 0x7e8f4f7e, 0x59c36f00, 0xf8b06bda, 0xf8b06bda, 0x59c36f00, }, 20 }, - { "gfxterm_gre", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xef5d784d, 0xf9f3df7f, 0xef5d784d, 0x830c0a7, 0xaa4593fe, 0xaa4593fe, 0x6ab2cc09, 0x6ab2cc09, 0x6ab2cc09, 0x1893a297, 0x1893a297, 0x1893a297, 0xf694a433, 0xf694a433, 0xf694a433, 0xaa4593fe, 0x830c0a7, 0x830c0a7, 0xaa4593fe, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xd4e0e978, 0x3ecbb91a, 0xd4e0e978, 0xc5187841, 0xc9cbf769, 0xc9cbf769, 0x1dcde94e, 0x1dcde94e, 0x1dcde94e, 0xad2c2098, 0xad2c2098, 0xad2c2098, 0x5b1c5cc5, 0x5b1c5cc5, 0x5b1c5cc5, 0xc9cbf769, 0xc5187841, 0xc5187841, 0xc9cbf769, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xe2593717, 0x2640bf65, 0xe2593717, 0x4426c599, 0x9813a416, 0x9813a416, 0x5ede2f49, 0x5ede2f49, 0x5ede2f49, 0x6c0c27ad, 0x6c0c27ad, 0x6c0c27ad, 0x5f8bfcd0, 0x5f8bfcd0, 0x5f8bfcd0, 0x9813a416, 0x4426c599, 0x4426c599, 0x9813a416, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xcde83267, 0x22a53484, 0xcde83267, 0xd2a45749, 0x5fcf013d, 0x5fcf013d, 0x1e7ff7d9, 0x1e7ff7d9, 0x1e7ff7d9, 0x67ed1871, 0x67ed1871, 0x67ed1871, 0xa60baa36, 0xa60baa36, 0xa60baa36, 0x5fcf013d, 0xd2a45749, 0xd2a45749, 0x5fcf013d, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7f78b019, 0x80a05ce1, 0x7f78b019, 0x35913af6, 0xdd28f52b, 0xdd28f52b, 0xe66c0535, 0xe66c0535, 0xe66c0535, 0x8cfeb8c2, 0x8cfeb8c2, 0x8cfeb8c2, 0x5ae4ef17, 0x5ae4ef17, 0x5ae4ef17, 0xdd28f52b, 0x35913af6, 0x35913af6, 0xdd28f52b, }, 20 }, - { "gfxterm_gre", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xe56445f6, 0xbfa1493, 0xe56445f6, 0xb6c84ce8, 0x43d1f34, 0x43d1f34, 0x34071c55, 0x34071c55, 0x34071c55, 0xe0c87dd3, 0xe0c87dd3, 0xe0c87dd3, 0xf7f1ab8b, 0xf7f1ab8b, 0xf7f1ab8b, 0x43d1f34, 0xb6c84ce8, 0xb6c84ce8, 0x43d1f34, }, 20 }, - { "gfxterm_gre", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x8ee79de, 0x26b051ae, 0x8ee79de, 0xf8b06bda, 0x59c36f00, 0x59c36f00, 0x3f1c338c, 0x3f1c338c, 0x3f1c338c, 0x8b4dfac, 0x8b4dfac, 0x8b4dfac, 0x7e8f4f7e, 0x7e8f4f7e, 0x7e8f4f7e, 0x59c36f00, 0xf8b06bda, 0xf8b06bda, 0x59c36f00, }, 20 }, - { "gfxterm_gre", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xef5d784d, 0xf9f3df7f, 0xef5d784d, 0x830c0a7, 0xaa4593fe, 0xaa4593fe, 0x6ab2cc09, 0x6ab2cc09, 0x6ab2cc09, 0x1893a297, 0x1893a297, 0x1893a297, 0xf694a433, 0xf694a433, 0xf694a433, 0xaa4593fe, 0x830c0a7, 0x830c0a7, 0xaa4593fe, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xd4e0e978, 0x3ecbb91a, 0xd4e0e978, 0xc5187841, 0xc9cbf769, 0xc9cbf769, 0x1dcde94e, 0x1dcde94e, 0x1dcde94e, 0xad2c2098, 0xad2c2098, 0xad2c2098, 0x5b1c5cc5, 0x5b1c5cc5, 0x5b1c5cc5, 0xc9cbf769, 0xc5187841, 0xc5187841, 0xc9cbf769, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xaf56168d, 0x52310b7d, 0xaf56168d, 0xdfe3c0bc, 0x5387d57f, 0x5387d57f, 0xe220439e, 0xe220439e, 0xe220439e, 0x894e7ba9, 0x894e7ba9, 0x894e7ba9, 0x63c334ed, 0x63c334ed, 0x63c334ed, 0x5387d57f, 0xdfe3c0bc, 0xdfe3c0bc, 0x5387d57f, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x3e770d13, 0x12c714b1, 0x3e770d13, 0x2d32fdae, 0xf83ee7aa, 0xf83ee7aa, 0x9772bab3, 0x9772bab3, 0x9772bab3, 0x986576d0, 0x986576d0, 0x986576d0, 0x35c7886a, 0x35c7886a, 0x35c7886a, 0xf83ee7aa, 0x2d32fdae, 0x2d32fdae, 0xf83ee7aa, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x9d87c56c, 0x3ba3fdf4, 0x9d87c56c, 0xc19f1f1, 0x724366e5, 0x724366e5, 0xf5b081d4, 0xf5b081d4, 0xf5b081d4, 0x4b36d60c, 0x4b36d60c, 0x4b36d60c, 0xcbacc104, 0xcbacc104, 0xcbacc104, 0x724366e5, 0xc19f1f1, 0xc19f1f1, 0x724366e5, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x7205f0bb, 0x153a6d72, 0x7205f0bb, 0x12db83e, 0x5387d57f, 0x5387d57f, 0x18972377, 0x18972377, 0x18972377, 0x254a581f, 0x254a581f, 0x254a581f, 0x1ea6ceb9, 0x1ea6ceb9, 0x1ea6ceb9, 0x5387d57f, 0x12db83e, 0x12db83e, 0x5387d57f, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x5088632b, 0x6b3eb456, 0x5088632b, 0x8aa3d3db, 0xf83ee7aa, 0xf83ee7aa, 0x760f7b46, 0x760f7b46, 0x760f7b46, 0x133a8497, 0x133a8497, 0x133a8497, 0xaa2eb821, 0xaa2eb821, 0xaa2eb821, 0xf83ee7aa, 0x8aa3d3db, 0x8aa3d3db, 0xf83ee7aa, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x42dae97e, 0x14545eb7, 0x42dae97e, 0x25a1defa, 0x724366e5, 0x724366e5, 0xe0fc7f88, 0xe0fc7f88, 0xe0fc7f88, 0x5d64fb15, 0x5d64fb15, 0x5d64fb15, 0xf9abbfa6, 0xf9abbfa6, 0xf9abbfa6, 0x724366e5, 0x25a1defa, 0x25a1defa, 0x724366e5, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x2430e081, 0x242aac55, 0x2430e081, 0xe2ea83c2, 0x1c955882, 0x1c955882, 0xbc41ae45, 0xbc41ae45, 0xbc41ae45, 0x8e577471, 0x8e577471, 0x8e577471, 0xa3c346e1, 0xa3c346e1, 0xa3c346e1, 0x1c955882, 0xe2ea83c2, 0xe2ea83c2, 0x1c955882, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xfca08617, 0x3fa61e54, 0xfca08617, 0x9042c40, 0x4d266f7a, 0x4d266f7a, 0x68a0b7be, 0x68a0b7be, 0x68a0b7be, 0x83ce699d, 0x83ce699d, 0x83ce699d, 0xb1ad49f8, 0xb1ad49f8, 0xb1ad49f8, 0x4d266f7a, 0x9042c40, 0x9042c40, 0x4d266f7a, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x36cffaf4, 0x3b414926, 0x36cffaf4, 0x436b9e7b, 0x1ed9d731, 0x1ed9d731, 0x64aaad8f, 0x64aaad8f, 0x64aaad8f, 0xc0a5b5c, 0xc0a5b5c, 0xc0a5b5c, 0x80a6b2ed, 0x80a6b2ed, 0x80a6b2ed, 0x1ed9d731, 0x436b9e7b, 0x436b9e7b, 0x1ed9d731, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xaf56168d, 0x52310b7d, 0xaf56168d, 0xdfe3c0bc, 0x5387d57f, 0x5387d57f, 0xe220439e, 0xe220439e, 0xe220439e, 0x894e7ba9, 0x894e7ba9, 0x894e7ba9, 0x63c334ed, 0x63c334ed, 0x63c334ed, 0x5387d57f, 0xdfe3c0bc, 0xdfe3c0bc, 0x5387d57f, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x3e770d13, 0x12c714b1, 0x3e770d13, 0x2d32fdae, 0xf83ee7aa, 0xf83ee7aa, 0x9772bab3, 0x9772bab3, 0x9772bab3, 0x986576d0, 0x986576d0, 0x986576d0, 0x35c7886a, 0x35c7886a, 0x35c7886a, 0xf83ee7aa, 0x2d32fdae, 0x2d32fdae, 0xf83ee7aa, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x9d87c56c, 0x3ba3fdf4, 0x9d87c56c, 0xc19f1f1, 0x724366e5, 0x724366e5, 0xf5b081d4, 0xf5b081d4, 0xf5b081d4, 0x4b36d60c, 0x4b36d60c, 0x4b36d60c, 0xcbacc104, 0xcbacc104, 0xcbacc104, 0x724366e5, 0xc19f1f1, 0xc19f1f1, 0x724366e5, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x7205f0bb, 0x153a6d72, 0x7205f0bb, 0x12db83e, 0x5387d57f, 0x5387d57f, 0x18972377, 0x18972377, 0x18972377, 0x254a581f, 0x254a581f, 0x254a581f, 0x1ea6ceb9, 0x1ea6ceb9, 0x1ea6ceb9, 0x5387d57f, 0x12db83e, 0x12db83e, 0x5387d57f, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x5088632b, 0x6b3eb456, 0x5088632b, 0x8aa3d3db, 0xf83ee7aa, 0xf83ee7aa, 0x760f7b46, 0x760f7b46, 0x760f7b46, 0x133a8497, 0x133a8497, 0x133a8497, 0xaa2eb821, 0xaa2eb821, 0xaa2eb821, 0xf83ee7aa, 0x8aa3d3db, 0x8aa3d3db, 0xf83ee7aa, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x42dae97e, 0x14545eb7, 0x42dae97e, 0x25a1defa, 0x724366e5, 0x724366e5, 0xe0fc7f88, 0xe0fc7f88, 0xe0fc7f88, 0x5d64fb15, 0x5d64fb15, 0x5d64fb15, 0xf9abbfa6, 0xf9abbfa6, 0xf9abbfa6, 0x724366e5, 0x25a1defa, 0x25a1defa, 0x724366e5, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x2430e081, 0x242aac55, 0x2430e081, 0xe2ea83c2, 0x1c955882, 0x1c955882, 0xbc41ae45, 0xbc41ae45, 0xbc41ae45, 0x8e577471, 0x8e577471, 0x8e577471, 0xa3c346e1, 0xa3c346e1, 0xa3c346e1, 0x1c955882, 0xe2ea83c2, 0xe2ea83c2, 0x1c955882, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xfca08617, 0x3fa61e54, 0xfca08617, 0x9042c40, 0x4d266f7a, 0x4d266f7a, 0x68a0b7be, 0x68a0b7be, 0x68a0b7be, 0x83ce699d, 0x83ce699d, 0x83ce699d, 0xb1ad49f8, 0xb1ad49f8, 0xb1ad49f8, 0x4d266f7a, 0x9042c40, 0x9042c40, 0x4d266f7a, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x36cffaf4, 0x3b414926, 0x36cffaf4, 0x436b9e7b, 0x1ed9d731, 0x1ed9d731, 0x64aaad8f, 0x64aaad8f, 0x64aaad8f, 0xc0a5b5c, 0xc0a5b5c, 0xc0a5b5c, 0x80a6b2ed, 0x80a6b2ed, 0x80a6b2ed, 0x1ed9d731, 0x436b9e7b, 0x436b9e7b, 0x1ed9d731, }, 20 }, - { "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xe2593717, 0x2640bf65, 0xe2593717, 0x4426c599, 0x9813a416, 0x9813a416, 0x5ede2f49, 0x5ede2f49, 0x5ede2f49, 0x6c0c27ad, 0x6c0c27ad, 0x6c0c27ad, 0x5f8bfcd0, 0x5f8bfcd0, 0x5f8bfcd0, 0x9813a416, 0x4426c599, 0x4426c599, 0x9813a416, }, 20 }, - { "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xcde83267, 0x22a53484, 0xcde83267, 0xd2a45749, 0x5fcf013d, 0x5fcf013d, 0x1e7ff7d9, 0x1e7ff7d9, 0x1e7ff7d9, 0x67ed1871, 0x67ed1871, 0x67ed1871, 0xa60baa36, 0xa60baa36, 0xa60baa36, 0x5fcf013d, 0xd2a45749, 0xd2a45749, 0x5fcf013d, }, 20 }, - { "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7f78b019, 0x80a05ce1, 0x7f78b019, 0x35913af6, 0xdd28f52b, 0xdd28f52b, 0xe66c0535, 0xe66c0535, 0xe66c0535, 0x8cfeb8c2, 0x8cfeb8c2, 0x8cfeb8c2, 0x5ae4ef17, 0x5ae4ef17, 0x5ae4ef17, 0xdd28f52b, 0x35913af6, 0x35913af6, 0xdd28f52b, }, 20 }, - { "gfxterm_ru", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x5f9aad54, 0x4c443805, 0x5f9aad54, 0xafc4bf50, 0x59c36f00, 0x59c36f00, 0x58db3668, 0x58db3668, 0x58db3668, 0x6f73da48, 0x6f73da48, 0x6f73da48, 0x19484a9a, 0x19484a9a, 0x19484a9a, 0x59c36f00, 0xafc4bf50, 0xafc4bf50, 0x59c36f00, }, 20 }, - { "gfxterm_ru", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x5f32e9dd, 0xe616882b, 0x5f32e9dd, 0xb85f5137, 0xaa4593fe, 0xaa4593fe, 0x9d0a5b06, 0x9d0a5b06, 0x9d0a5b06, 0xef2b3598, 0xef2b3598, 0xef2b3598, 0x12c333c, 0x12c333c, 0x12c333c, 0xaa4593fe, 0xb85f5137, 0xb85f5137, 0xaa4593fe, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xa5bb82, 0xefc18d9, 0xa5bb82, 0x115d2abb, 0xc9cbf769, 0xc9cbf769, 0xd0be0d24, 0xd0be0d24, 0xd0be0d24, 0x605fc4f2, 0x605fc4f2, 0x605fc4f2, 0x966fb8af, 0x966fb8af, 0x966fb8af, 0xc9cbf769, 0x115d2abb, 0x115d2abb, 0xc9cbf769, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xb948b0d6, 0xd4da4a61, 0xb948b0d6, 0x1f374258, 0x9813a416, 0x9813a416, 0x67ee54be, 0x67ee54be, 0x67ee54be, 0x553c5c5a, 0x553c5c5a, 0x553c5c5a, 0x66bb8727, 0x66bb8727, 0x66bb8727, 0x9813a416, 0x1f374258, 0x1f374258, 0x9813a416, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x1c4bab46, 0x1633fefe, 0x1c4bab46, 0x307ce68, 0x5fcf013d, 0x5fcf013d, 0xabae9d40, 0xabae9d40, 0xabae9d40, 0xd23c72e8, 0xd23c72e8, 0xd23c72e8, 0x13dac0af, 0x13dac0af, 0x13dac0af, 0x5fcf013d, 0x307ce68, 0x307ce68, 0x5fcf013d, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x601d59d6, 0x1b985f84, 0x601d59d6, 0x2af4d339, 0xdd28f52b, 0xdd28f52b, 0x467ca6f5, 0x467ca6f5, 0x467ca6f5, 0x2cee1b02, 0x2cee1b02, 0x2cee1b02, 0xfaf44cd7, 0xfaf44cd7, 0xfaf44cd7, 0xdd28f52b, 0x2af4d339, 0x2af4d339, 0xdd28f52b, }, 20 }, - { "gfxterm_ru", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x38f289a0, 0x5ba4709f, 0x38f289a0, 0x6b5e80be, 0x43d1f34, 0x43d1f34, 0xe5b3f183, 0xe5b3f183, 0xe5b3f183, 0x317c9005, 0x317c9005, 0x317c9005, 0x2645465d, 0x2645465d, 0x2645465d, 0x43d1f34, 0x6b5e80be, 0x6b5e80be, 0x43d1f34, }, 20 }, - { "gfxterm_ru", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x5f9aad54, 0x4c443805, 0x5f9aad54, 0xafc4bf50, 0x59c36f00, 0x59c36f00, 0x58db3668, 0x58db3668, 0x58db3668, 0x6f73da48, 0x6f73da48, 0x6f73da48, 0x19484a9a, 0x19484a9a, 0x19484a9a, 0x59c36f00, 0xafc4bf50, 0xafc4bf50, 0x59c36f00, }, 20 }, - { "gfxterm_ru", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x5f32e9dd, 0xe616882b, 0x5f32e9dd, 0xb85f5137, 0xaa4593fe, 0xaa4593fe, 0x9d0a5b06, 0x9d0a5b06, 0x9d0a5b06, 0xef2b3598, 0xef2b3598, 0xef2b3598, 0x12c333c, 0x12c333c, 0x12c333c, 0xaa4593fe, 0xb85f5137, 0xb85f5137, 0xaa4593fe, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xa5bb82, 0xefc18d9, 0xa5bb82, 0x115d2abb, 0xc9cbf769, 0xc9cbf769, 0xd0be0d24, 0xd0be0d24, 0xd0be0d24, 0x605fc4f2, 0x605fc4f2, 0x605fc4f2, 0x966fb8af, 0x966fb8af, 0x966fb8af, 0xc9cbf769, 0x115d2abb, 0x115d2abb, 0xc9cbf769, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe2b498f9, 0xdd416a91, 0xe2b498f9, 0x92014ec8, 0x5387d57f, 0x5387d57f, 0xe42b0a50, 0xe42b0a50, 0xe42b0a50, 0x8f453267, 0x8f453267, 0x8f453267, 0x65c87d23, 0x65c87d23, 0x65c87d23, 0x5387d57f, 0x92014ec8, 0x92014ec8, 0x5387d57f, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc36b80c7, 0x806de216, 0xc36b80c7, 0xd02e707a, 0xf83ee7aa, 0xf83ee7aa, 0x8f1478d, 0x8f1478d, 0x8f1478d, 0x7e68bee, 0x7e68bee, 0x7e68bee, 0xaa447554, 0xaa447554, 0xaa447554, 0xf83ee7aa, 0xd02e707a, 0xd02e707a, 0xf83ee7aa, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x4758874e, 0xe7a130c, 0x4758874e, 0xd6c6b3d3, 0x724366e5, 0x724366e5, 0x1d8d26d5, 0x1d8d26d5, 0x1d8d26d5, 0xa30b710d, 0xa30b710d, 0xa30b710d, 0x23916605, 0x23916605, 0x23916605, 0x724366e5, 0xd6c6b3d3, 0xd6c6b3d3, 0x724366e5, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc76cdc3, 0xe20cbda0, 0xc76cdc3, 0x7f5e8546, 0x5387d57f, 0x5387d57f, 0xee60e67a, 0xee60e67a, 0xee60e67a, 0xd3bd9d12, 0xd3bd9d12, 0xd3bd9d12, 0xe8510bb4, 0xe8510bb4, 0xe8510bb4, 0x5387d57f, 0x7f5e8546, 0x7f5e8546, 0x5387d57f, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x7fe6a55c, 0x206a8726, 0x7fe6a55c, 0xa5cd15ac, 0xf83ee7aa, 0xf83ee7aa, 0xc47340ba, 0xc47340ba, 0xc47340ba, 0xa146bf6b, 0xa146bf6b, 0xa146bf6b, 0x185283dd, 0x185283dd, 0x185283dd, 0xf83ee7aa, 0xa5cd15ac, 0xa5cd15ac, 0xf83ee7aa, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xb1a1e81, 0xbec61ffd, 0xb1a1e81, 0x6c612905, 0x724366e5, 0x724366e5, 0x90acf3d2, 0x90acf3d2, 0x90acf3d2, 0x2d34774f, 0x2d34774f, 0x2d34774f, 0x89fb33fc, 0x89fb33fc, 0x89fb33fc, 0x724366e5, 0x6c612905, 0x6c612905, 0x724366e5, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x189ee5dc, 0x66e2ba99, 0x189ee5dc, 0xde44869f, 0x1c955882, 0x1c955882, 0x904c8647, 0x904c8647, 0x904c8647, 0xa25a5c73, 0xa25a5c73, 0xa25a5c73, 0x8fce6ee3, 0x8fce6ee3, 0x8fce6ee3, 0x1c955882, 0xde44869f, 0xde44869f, 0x1c955882, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4c144f16, 0x9c90ee08, 0x4c144f16, 0xb9b0e541, 0x4d266f7a, 0x4d266f7a, 0x4d7fce8d, 0x4d7fce8d, 0x4d7fce8d, 0xa61110ae, 0xa61110ae, 0xa61110ae, 0x947230cb, 0x947230cb, 0x947230cb, 0x4d266f7a, 0xb9b0e541, 0xb9b0e541, 0x4d266f7a, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x5dd20b45, 0x44c3e87f, 0x5dd20b45, 0x28766fca, 0x1ed9d731, 0x1ed9d731, 0x82e9ffad, 0x82e9ffad, 0x82e9ffad, 0xea49097e, 0xea49097e, 0xea49097e, 0x66e5e0cf, 0x66e5e0cf, 0x66e5e0cf, 0x1ed9d731, 0x28766fca, 0x28766fca, 0x1ed9d731, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe2b498f9, 0xdd416a91, 0xe2b498f9, 0x92014ec8, 0x5387d57f, 0x5387d57f, 0xe42b0a50, 0xe42b0a50, 0xe42b0a50, 0x8f453267, 0x8f453267, 0x8f453267, 0x65c87d23, 0x65c87d23, 0x65c87d23, 0x5387d57f, 0x92014ec8, 0x92014ec8, 0x5387d57f, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc36b80c7, 0x806de216, 0xc36b80c7, 0xd02e707a, 0xf83ee7aa, 0xf83ee7aa, 0x8f1478d, 0x8f1478d, 0x8f1478d, 0x7e68bee, 0x7e68bee, 0x7e68bee, 0xaa447554, 0xaa447554, 0xaa447554, 0xf83ee7aa, 0xd02e707a, 0xd02e707a, 0xf83ee7aa, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x4758874e, 0xe7a130c, 0x4758874e, 0xd6c6b3d3, 0x724366e5, 0x724366e5, 0x1d8d26d5, 0x1d8d26d5, 0x1d8d26d5, 0xa30b710d, 0xa30b710d, 0xa30b710d, 0x23916605, 0x23916605, 0x23916605, 0x724366e5, 0xd6c6b3d3, 0xd6c6b3d3, 0x724366e5, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc76cdc3, 0xe20cbda0, 0xc76cdc3, 0x7f5e8546, 0x5387d57f, 0x5387d57f, 0xee60e67a, 0xee60e67a, 0xee60e67a, 0xd3bd9d12, 0xd3bd9d12, 0xd3bd9d12, 0xe8510bb4, 0xe8510bb4, 0xe8510bb4, 0x5387d57f, 0x7f5e8546, 0x7f5e8546, 0x5387d57f, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x7fe6a55c, 0x206a8726, 0x7fe6a55c, 0xa5cd15ac, 0xf83ee7aa, 0xf83ee7aa, 0xc47340ba, 0xc47340ba, 0xc47340ba, 0xa146bf6b, 0xa146bf6b, 0xa146bf6b, 0x185283dd, 0x185283dd, 0x185283dd, 0xf83ee7aa, 0xa5cd15ac, 0xa5cd15ac, 0xf83ee7aa, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xb1a1e81, 0xbec61ffd, 0xb1a1e81, 0x6c612905, 0x724366e5, 0x724366e5, 0x90acf3d2, 0x90acf3d2, 0x90acf3d2, 0x2d34774f, 0x2d34774f, 0x2d34774f, 0x89fb33fc, 0x89fb33fc, 0x89fb33fc, 0x724366e5, 0x6c612905, 0x6c612905, 0x724366e5, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x189ee5dc, 0x66e2ba99, 0x189ee5dc, 0xde44869f, 0x1c955882, 0x1c955882, 0x904c8647, 0x904c8647, 0x904c8647, 0xa25a5c73, 0xa25a5c73, 0xa25a5c73, 0x8fce6ee3, 0x8fce6ee3, 0x8fce6ee3, 0x1c955882, 0xde44869f, 0xde44869f, 0x1c955882, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x4c144f16, 0x9c90ee08, 0x4c144f16, 0xb9b0e541, 0x4d266f7a, 0x4d266f7a, 0x4d7fce8d, 0x4d7fce8d, 0x4d7fce8d, 0xa61110ae, 0xa61110ae, 0xa61110ae, 0x947230cb, 0x947230cb, 0x947230cb, 0x4d266f7a, 0xb9b0e541, 0xb9b0e541, 0x4d266f7a, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x5dd20b45, 0x44c3e87f, 0x5dd20b45, 0x28766fca, 0x1ed9d731, 0x1ed9d731, 0x82e9ffad, 0x82e9ffad, 0x82e9ffad, 0xea49097e, 0xea49097e, 0xea49097e, 0x66e5e0cf, 0x66e5e0cf, 0x66e5e0cf, 0x1ed9d731, 0x28766fca, 0x28766fca, 0x1ed9d731, }, 20 }, - { "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xb948b0d6, 0xd4da4a61, 0xb948b0d6, 0x1f374258, 0x9813a416, 0x9813a416, 0x67ee54be, 0x67ee54be, 0x67ee54be, 0x553c5c5a, 0x553c5c5a, 0x553c5c5a, 0x66bb8727, 0x66bb8727, 0x66bb8727, 0x9813a416, 0x1f374258, 0x1f374258, 0x9813a416, }, 20 }, - { "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x1c4bab46, 0x1633fefe, 0x1c4bab46, 0x307ce68, 0x5fcf013d, 0x5fcf013d, 0xabae9d40, 0xabae9d40, 0xabae9d40, 0xd23c72e8, 0xd23c72e8, 0xd23c72e8, 0x13dac0af, 0x13dac0af, 0x13dac0af, 0x5fcf013d, 0x307ce68, 0x307ce68, 0x5fcf013d, }, 20 }, - { "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x601d59d6, 0x1b985f84, 0x601d59d6, 0x2af4d339, 0xdd28f52b, 0xdd28f52b, 0x467ca6f5, 0x467ca6f5, 0x467ca6f5, 0x2cee1b02, 0x2cee1b02, 0x2cee1b02, 0xfaf44cd7, 0xfaf44cd7, 0xfaf44cd7, 0xdd28f52b, 0x2af4d339, 0x2af4d339, 0xdd28f52b, }, 20 }, - { "gfxterm_fr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xfcdcbc9a, 0xd12d4f6d, 0xfcdcbc9a, 0xc82ae9e, 0x59c36f00, 0x59c36f00, 0x34c2f3cf, 0x34c2f3cf, 0x34c2f3cf, 0x36a1fef, 0x36a1fef, 0x36a1fef, 0x75518f3d, 0x75518f3d, 0x75518f3d, 0x59c36f00, 0xc82ae9e, 0xc82ae9e, 0x59c36f00, }, 20 }, - { "gfxterm_fr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x35079acb, 0xd943bd14, 0x35079acb, 0xd26a2221, 0xaa4593fe, 0xaa4593fe, 0xab774321, 0xab774321, 0xab774321, 0xd9562dbf, 0xd9562dbf, 0xd9562dbf, 0x37512b1b, 0x37512b1b, 0x37512b1b, 0xaa4593fe, 0xd26a2221, 0xd26a2221, 0xaa4593fe, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x46e5237a, 0x2b235d4b, 0x46e5237a, 0x571db243, 0xc9cbf769, 0xc9cbf769, 0x8dd0396b, 0x8dd0396b, 0x8dd0396b, 0x3d31f0bd, 0x3d31f0bd, 0x3d31f0bd, 0xcb018ce0, 0xcb018ce0, 0xcb018ce0, 0xc9cbf769, 0x571db243, 0x571db243, 0xc9cbf769, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x6bb50287, 0xe1f958bc, 0x6bb50287, 0xcdcaf009, 0x9813a416, 0x9813a416, 0xcf94a159, 0xcf94a159, 0xcf94a159, 0xfd46a9bd, 0xfd46a9bd, 0xfd46a9bd, 0xcec172c0, 0xcec172c0, 0xcec172c0, 0x9813a416, 0xcdcaf009, 0xcdcaf009, 0x9813a416, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xbb628833, 0xcc675871, 0xbb628833, 0xa42eed1d, 0x5fcf013d, 0x5fcf013d, 0x7c345edf, 0x7c345edf, 0x7c345edf, 0x5a6b177, 0x5a6b177, 0x5a6b177, 0xc4400330, 0xc4400330, 0xc4400330, 0x5fcf013d, 0xa42eed1d, 0xa42eed1d, 0x5fcf013d, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x3f145e6c, 0xaa2877c9, 0x3f145e6c, 0x75fdd483, 0xdd28f52b, 0xdd28f52b, 0xe8ba34e1, 0xe8ba34e1, 0xe8ba34e1, 0x82288916, 0x82288916, 0x82288916, 0x5432dec3, 0x5432dec3, 0x5432dec3, 0xdd28f52b, 0x75fdd483, 0x75fdd483, 0xdd28f52b, }, 20 }, - { "gfxterm_fr", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xd79e4368, 0x58ea56e2, 0xd79e4368, 0x84324a76, 0x43d1f34, 0x43d1f34, 0x6b00c52c, 0x6b00c52c, 0x6b00c52c, 0xbfcfa4aa, 0xbfcfa4aa, 0xbfcfa4aa, 0xa8f672f2, 0xa8f672f2, 0xa8f672f2, 0x43d1f34, 0x84324a76, 0x84324a76, 0x43d1f34, }, 20 }, - { "gfxterm_fr", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xfcdcbc9a, 0xd12d4f6d, 0xfcdcbc9a, 0xc82ae9e, 0x59c36f00, 0x59c36f00, 0x34c2f3cf, 0x34c2f3cf, 0x34c2f3cf, 0x36a1fef, 0x36a1fef, 0x36a1fef, 0x75518f3d, 0x75518f3d, 0x75518f3d, 0x59c36f00, 0xc82ae9e, 0xc82ae9e, 0x59c36f00, }, 20 }, - { "gfxterm_fr", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x35079acb, 0xd943bd14, 0x35079acb, 0xd26a2221, 0xaa4593fe, 0xaa4593fe, 0xab774321, 0xab774321, 0xab774321, 0xd9562dbf, 0xd9562dbf, 0xd9562dbf, 0x37512b1b, 0x37512b1b, 0x37512b1b, 0xaa4593fe, 0xd26a2221, 0xd26a2221, 0xaa4593fe, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x46e5237a, 0x2b235d4b, 0x46e5237a, 0x571db243, 0xc9cbf769, 0xc9cbf769, 0x8dd0396b, 0x8dd0396b, 0x8dd0396b, 0x3d31f0bd, 0x3d31f0bd, 0x3d31f0bd, 0xcb018ce0, 0xcb018ce0, 0xcb018ce0, 0xc9cbf769, 0x571db243, 0x571db243, 0xc9cbf769, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe22102, 0x4e2353b3, 0xe22102, 0x7057f733, 0x5387d57f, 0x5387d57f, 0xb2299ec3, 0xb2299ec3, 0xb2299ec3, 0xd947a6f4, 0xd947a6f4, 0xd947a6f4, 0x33cae9b0, 0x33cae9b0, 0x33cae9b0, 0x5387d57f, 0x7057f733, 0x7057f733, 0x5387d57f, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb0bc18a8, 0xdcba5754, 0xb0bc18a8, 0xa3f9e815, 0xf83ee7aa, 0xf83ee7aa, 0x2e9d34a, 0x2e9d34a, 0x2e9d34a, 0xdfe1f29, 0xdfe1f29, 0xdfe1f29, 0xa05ce193, 0xa05ce193, 0xa05ce193, 0xf83ee7aa, 0xa3f9e815, 0xa3f9e815, 0xf83ee7aa, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x3edf55a1, 0x33430c4, 0x3edf55a1, 0xaf41613c, 0x724366e5, 0x724366e5, 0x3385a58, 0x3385a58, 0x3385a58, 0xbdbe0d80, 0xbdbe0d80, 0xbdbe0d80, 0x3d241a88, 0x3d241a88, 0x3d241a88, 0x724366e5, 0xaf41613c, 0xaf41613c, 0x724366e5, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x7962e0b6, 0x815387c6, 0x7962e0b6, 0xa4aa833, 0x5387d57f, 0x5387d57f, 0x2fc1a074, 0x2fc1a074, 0x2fc1a074, 0x121cdb1c, 0x121cdb1c, 0x121cdb1c, 0x29f04dba, 0x29f04dba, 0x29f04dba, 0x5387d57f, 0xa4aa833, 0xa4aa833, 0x5387d57f, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc563f0b8, 0x83a415d9, 0xc563f0b8, 0x1f484048, 0xf83ee7aa, 0xf83ee7aa, 0xb408c313, 0xb408c313, 0xb408c313, 0xd13d3cc2, 0xd13d3cc2, 0xd13d3cc2, 0x68290074, 0x68290074, 0x68290074, 0xf83ee7aa, 0x1f484048, 0x1f484048, 0xf83ee7aa, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x155ac5b, 0xe529c7f1, 0x155ac5b, 0x662e9bdf, 0x724366e5, 0x724366e5, 0xbf93765f, 0xbf93765f, 0xbf93765f, 0x20bf2c2, 0x20bf2c2, 0x20bf2c2, 0xa6c4b671, 0xa6c4b671, 0xa6c4b671, 0x724366e5, 0x662e9bdf, 0x662e9bdf, 0x724366e5, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x3c57c9a3, 0x64709f28, 0x3c57c9a3, 0xfa8daae0, 0x1c955882, 0x1c955882, 0xfe112969, 0xfe112969, 0xfe112969, 0xcc07f35d, 0xcc07f35d, 0xcc07f35d, 0xe193c1cd, 0xe193c1cd, 0xe193c1cd, 0x1c955882, 0xfa8daae0, 0xfa8daae0, 0x1c955882, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xa004c3fc, 0xdf87f97c, 0xa004c3fc, 0x55a069ab, 0x4d266f7a, 0x4d266f7a, 0xe3f465a3, 0xe3f465a3, 0xe3f465a3, 0x89abb80, 0x89abb80, 0x89abb80, 0x3af99be5, 0x3af99be5, 0x3af99be5, 0x4d266f7a, 0x55a069ab, 0x55a069ab, 0x4d266f7a, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb9a2989, 0x6bf23b20, 0xb9a2989, 0x7e3e4d06, 0x1ed9d731, 0x1ed9d731, 0x13680b3e, 0x13680b3e, 0x13680b3e, 0x7bc8fded, 0x7bc8fded, 0x7bc8fded, 0xf764145c, 0xf764145c, 0xf764145c, 0x1ed9d731, 0x7e3e4d06, 0x7e3e4d06, 0x1ed9d731, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe22102, 0x4e2353b3, 0xe22102, 0x7057f733, 0x5387d57f, 0x5387d57f, 0xb2299ec3, 0xb2299ec3, 0xb2299ec3, 0xd947a6f4, 0xd947a6f4, 0xd947a6f4, 0x33cae9b0, 0x33cae9b0, 0x33cae9b0, 0x5387d57f, 0x7057f733, 0x7057f733, 0x5387d57f, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb0bc18a8, 0xdcba5754, 0xb0bc18a8, 0xa3f9e815, 0xf83ee7aa, 0xf83ee7aa, 0x2e9d34a, 0x2e9d34a, 0x2e9d34a, 0xdfe1f29, 0xdfe1f29, 0xdfe1f29, 0xa05ce193, 0xa05ce193, 0xa05ce193, 0xf83ee7aa, 0xa3f9e815, 0xa3f9e815, 0xf83ee7aa, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x3edf55a1, 0x33430c4, 0x3edf55a1, 0xaf41613c, 0x724366e5, 0x724366e5, 0x3385a58, 0x3385a58, 0x3385a58, 0xbdbe0d80, 0xbdbe0d80, 0xbdbe0d80, 0x3d241a88, 0x3d241a88, 0x3d241a88, 0x724366e5, 0xaf41613c, 0xaf41613c, 0x724366e5, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x7962e0b6, 0x815387c6, 0x7962e0b6, 0xa4aa833, 0x5387d57f, 0x5387d57f, 0x2fc1a074, 0x2fc1a074, 0x2fc1a074, 0x121cdb1c, 0x121cdb1c, 0x121cdb1c, 0x29f04dba, 0x29f04dba, 0x29f04dba, 0x5387d57f, 0xa4aa833, 0xa4aa833, 0x5387d57f, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc563f0b8, 0x83a415d9, 0xc563f0b8, 0x1f484048, 0xf83ee7aa, 0xf83ee7aa, 0xb408c313, 0xb408c313, 0xb408c313, 0xd13d3cc2, 0xd13d3cc2, 0xd13d3cc2, 0x68290074, 0x68290074, 0x68290074, 0xf83ee7aa, 0x1f484048, 0x1f484048, 0xf83ee7aa, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x155ac5b, 0xe529c7f1, 0x155ac5b, 0x662e9bdf, 0x724366e5, 0x724366e5, 0xbf93765f, 0xbf93765f, 0xbf93765f, 0x20bf2c2, 0x20bf2c2, 0x20bf2c2, 0xa6c4b671, 0xa6c4b671, 0xa6c4b671, 0x724366e5, 0x662e9bdf, 0x662e9bdf, 0x724366e5, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x3c57c9a3, 0x64709f28, 0x3c57c9a3, 0xfa8daae0, 0x1c955882, 0x1c955882, 0xfe112969, 0xfe112969, 0xfe112969, 0xcc07f35d, 0xcc07f35d, 0xcc07f35d, 0xe193c1cd, 0xe193c1cd, 0xe193c1cd, 0x1c955882, 0xfa8daae0, 0xfa8daae0, 0x1c955882, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xa004c3fc, 0xdf87f97c, 0xa004c3fc, 0x55a069ab, 0x4d266f7a, 0x4d266f7a, 0xe3f465a3, 0xe3f465a3, 0xe3f465a3, 0x89abb80, 0x89abb80, 0x89abb80, 0x3af99be5, 0x3af99be5, 0x3af99be5, 0x4d266f7a, 0x55a069ab, 0x55a069ab, 0x4d266f7a, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb9a2989, 0x6bf23b20, 0xb9a2989, 0x7e3e4d06, 0x1ed9d731, 0x1ed9d731, 0x13680b3e, 0x13680b3e, 0x13680b3e, 0x7bc8fded, 0x7bc8fded, 0x7bc8fded, 0xf764145c, 0xf764145c, 0xf764145c, 0x1ed9d731, 0x7e3e4d06, 0x7e3e4d06, 0x1ed9d731, }, 20 }, - { "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x6bb50287, 0xe1f958bc, 0x6bb50287, 0xcdcaf009, 0x9813a416, 0x9813a416, 0xcf94a159, 0xcf94a159, 0xcf94a159, 0xfd46a9bd, 0xfd46a9bd, 0xfd46a9bd, 0xcec172c0, 0xcec172c0, 0xcec172c0, 0x9813a416, 0xcdcaf009, 0xcdcaf009, 0x9813a416, }, 20 }, - { "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xbb628833, 0xcc675871, 0xbb628833, 0xa42eed1d, 0x5fcf013d, 0x5fcf013d, 0x7c345edf, 0x7c345edf, 0x7c345edf, 0x5a6b177, 0x5a6b177, 0x5a6b177, 0xc4400330, 0xc4400330, 0xc4400330, 0x5fcf013d, 0xa42eed1d, 0xa42eed1d, 0x5fcf013d, }, 20 }, - { "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x3f145e6c, 0xaa2877c9, 0x3f145e6c, 0x75fdd483, 0xdd28f52b, 0xdd28f52b, 0xe8ba34e1, 0xe8ba34e1, 0xe8ba34e1, 0x82288916, 0x82288916, 0x82288916, 0x5432dec3, 0x5432dec3, 0x5432dec3, 0xdd28f52b, 0x75fdd483, 0x75fdd483, 0xdd28f52b, }, 20 }, - { "gfxterm_quot", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x664743b6, 0xae5f9a61, 0x664743b6, 0x961951b2, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0x961951b2, 0x961951b2, 0x59c36f00, }, 20 }, - { "gfxterm_quot", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xbbf1ef7e, 0xac6e54e7, 0xbbf1ef7e, 0x5c9c5794, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x5c9c5794, 0x5c9c5794, 0xaa4593fe, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x221271bb, 0xcea44f97, 0x221271bb, 0x33eae082, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x33eae082, 0x33eae082, 0xc9cbf769, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x3b9687f8, 0xce65ad7f, 0x3b9687f8, 0x9de97576, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x9de97576, 0x9de97576, 0x9813a416, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x8f32cb1, 0xd73691c5, 0x8f32cb1, 0x17bf499f, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x17bf499f, 0x17bf499f, 0x5fcf013d, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x5a20c4be, 0xb5dc3da5, 0x5a20c4be, 0x10c94e51, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x10c94e51, 0x10c94e51, 0xdd28f52b, }, 20 }, - { "gfxterm_quot", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xf2a7a5a6, 0x641919dd, 0xf2a7a5a6, 0xa10bacb8, 0x43d1f34, 0x43d1f34, 0x8c5a6902, 0x8c5a6902, 0x8c5a6902, 0x58950884, 0x58950884, 0x58950884, 0x4facdedc, 0x4facdedc, 0x4facdedc, 0x43d1f34, 0xa10bacb8, 0xa10bacb8, 0x43d1f34, }, 20 }, - { "gfxterm_quot", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x664743b6, 0xae5f9a61, 0x664743b6, 0x961951b2, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0x961951b2, 0x961951b2, 0x59c36f00, }, 20 }, - { "gfxterm_quot", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xbbf1ef7e, 0xac6e54e7, 0xbbf1ef7e, 0x5c9c5794, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x5c9c5794, 0x5c9c5794, 0xaa4593fe, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x221271bb, 0xcea44f97, 0x221271bb, 0x33eae082, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x33eae082, 0x33eae082, 0xc9cbf769, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x77626aa4, 0x27d8bb0e, 0x77626aa4, 0x7d7bc95, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0x7d7bc95, 0x7d7bc95, 0x5387d57f, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8d2042df, 0x88312dd7, 0x8d2042df, 0x9e65b262, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x9e65b262, 0x9e65b262, 0xf83ee7aa, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xd203bd0, 0x17426b59, 0xd203bd0, 0x9cbe0f4d, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0x9cbe0f4d, 0x9cbe0f4d, 0x724366e5, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x3d7c81ff, 0xa5c174d5, 0x3d7c81ff, 0x4e54c97a, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0x4e54c97a, 0x4e54c97a, 0x5387d57f, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe73e3728, 0xdf1b0a76, 0xe73e3728, 0x3d1587d8, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0x3d1587d8, 0x3d1587d8, 0xf83ee7aa, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xd1da1d01, 0x40e7fe9c, 0xd1da1d01, 0xb6a12a85, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0xb6a12a85, 0xb6a12a85, 0x724366e5, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x603d4cb4, 0x3a9935e6, 0x603d4cb4, 0xa6e72ff7, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0xa6e72ff7, 0xa6e72ff7, 0x1c955882, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xab55c43c, 0x47a63ffd, 0xab55c43c, 0x5ef16e6b, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0x5ef16e6b, 0x5ef16e6b, 0x4d266f7a, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd5eb9850, 0xd6f4b8d3, 0xd5eb9850, 0xa04ffcdf, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0xa04ffcdf, 0xa04ffcdf, 0x1ed9d731, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x77626aa4, 0x27d8bb0e, 0x77626aa4, 0x7d7bc95, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0x7d7bc95, 0x7d7bc95, 0x5387d57f, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8d2042df, 0x88312dd7, 0x8d2042df, 0x9e65b262, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x9e65b262, 0x9e65b262, 0xf83ee7aa, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xd203bd0, 0x17426b59, 0xd203bd0, 0x9cbe0f4d, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0x9cbe0f4d, 0x9cbe0f4d, 0x724366e5, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x3d7c81ff, 0xa5c174d5, 0x3d7c81ff, 0x4e54c97a, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0x4e54c97a, 0x4e54c97a, 0x5387d57f, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe73e3728, 0xdf1b0a76, 0xe73e3728, 0x3d1587d8, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0x3d1587d8, 0x3d1587d8, 0xf83ee7aa, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xd1da1d01, 0x40e7fe9c, 0xd1da1d01, 0xb6a12a85, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0xb6a12a85, 0xb6a12a85, 0x724366e5, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x603d4cb4, 0x3a9935e6, 0x603d4cb4, 0xa6e72ff7, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0xa6e72ff7, 0xa6e72ff7, 0x1c955882, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xab55c43c, 0x47a63ffd, 0xab55c43c, 0x5ef16e6b, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0x5ef16e6b, 0x5ef16e6b, 0x4d266f7a, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd5eb9850, 0xd6f4b8d3, 0xd5eb9850, 0xa04ffcdf, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0xa04ffcdf, 0xa04ffcdf, 0x1ed9d731, }, 20 }, - { "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x3b9687f8, 0xce65ad7f, 0x3b9687f8, 0x9de97576, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x9de97576, 0x9de97576, 0x9813a416, }, 20 }, - { "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x8f32cb1, 0xd73691c5, 0x8f32cb1, 0x17bf499f, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x17bf499f, 0x17bf499f, 0x5fcf013d, }, 20 }, - { "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x5a20c4be, 0xb5dc3da5, 0x5a20c4be, 0x10c94e51, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x10c94e51, 0x10c94e51, 0xdd28f52b, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x2a7e97c3, 0x3be15c68, 0x2a7e97c3, 0xda2085c7, 0x59c36f00, 0x59c36f00, 0x1839c826, 0x1839c826, 0x1839c826, 0x2f912406, 0x2f912406, 0x2f912406, 0x59aab4d4, 0x59aab4d4, 0x59aab4d4, 0x59c36f00, 0xda2085c7, 0xda2085c7, 0x59c36f00, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xc6029ded, 0x52d25b27, 0xc6029ded, 0x216f2507, 0xaa4593fe, 0xaa4593fe, 0x22985aea, 0x22985aea, 0x22985aea, 0x50b93474, 0x50b93474, 0x50b93474, 0xbebe32d0, 0xbebe32d0, 0xbebe32d0, 0xaa4593fe, 0x216f2507, 0x216f2507, 0xaa4593fe, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xcbff61aa, 0xa9ca8a15, 0xcbff61aa, 0xda07f093, 0xc9cbf769, 0xc9cbf769, 0x47ca6cff, 0x47ca6cff, 0x47ca6cff, 0xf72ba529, 0xf72ba529, 0xf72ba529, 0x11bd974, 0x11bd974, 0x11bd974, 0xc9cbf769, 0xda07f093, 0xda07f093, 0xc9cbf769, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x2df13f91, 0x3dc68f3d, 0x2df13f91, 0x8b8ecd1f, 0x9813a416, 0x9813a416, 0x4d501c22, 0x4d501c22, 0x4d501c22, 0x7f8214c6, 0x7f8214c6, 0x7f8214c6, 0x4c05cfbb, 0x4c05cfbb, 0x4c05cfbb, 0x9813a416, 0x8b8ecd1f, 0x8b8ecd1f, 0x9813a416, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x27757486, 0x9c300eca, 0x27757486, 0x383911a8, 0x5fcf013d, 0x5fcf013d, 0xc4765255, 0xc4765255, 0xc4765255, 0xbde4bdfd, 0xbde4bdfd, 0xbde4bdfd, 0x7c020fba, 0x7c020fba, 0x7c020fba, 0x5fcf013d, 0x383911a8, 0x383911a8, 0x5fcf013d, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x79973d2, 0xb499914b, 0x79973d2, 0x4d70f93d, 0xdd28f52b, 0xdd28f52b, 0x1f44d5b9, 0x1f44d5b9, 0x1f44d5b9, 0x75d6684e, 0x75d6684e, 0x75d6684e, 0xa3cc3f9b, 0xa3cc3f9b, 0xa3cc3f9b, 0xdd28f52b, 0x4d70f93d, 0x4d70f93d, 0xdd28f52b, }, 20 }, - { "gfxterm_piglatin", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x3adb38c1, 0x5f829ffe, 0x3adb38c1, 0x697731df, 0x43d1f34, 0x43d1f34, 0xe16c92e4, 0xe16c92e4, 0xe16c92e4, 0x35a3f362, 0x35a3f362, 0x35a3f362, 0x229a253a, 0x229a253a, 0x229a253a, 0x43d1f34, 0x697731df, 0x697731df, 0x43d1f34, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x2a7e97c3, 0x3be15c68, 0x2a7e97c3, 0xda2085c7, 0x59c36f00, 0x59c36f00, 0x1839c826, 0x1839c826, 0x1839c826, 0x2f912406, 0x2f912406, 0x2f912406, 0x59aab4d4, 0x59aab4d4, 0x59aab4d4, 0x59c36f00, 0xda2085c7, 0xda2085c7, 0x59c36f00, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xc6029ded, 0x52d25b27, 0xc6029ded, 0x216f2507, 0xaa4593fe, 0xaa4593fe, 0x22985aea, 0x22985aea, 0x22985aea, 0x50b93474, 0x50b93474, 0x50b93474, 0xbebe32d0, 0xbebe32d0, 0xbebe32d0, 0xaa4593fe, 0x216f2507, 0x216f2507, 0xaa4593fe, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xcbff61aa, 0xa9ca8a15, 0xcbff61aa, 0xda07f093, 0xc9cbf769, 0xc9cbf769, 0x47ca6cff, 0x47ca6cff, 0x47ca6cff, 0xf72ba529, 0xf72ba529, 0xf72ba529, 0x11bd974, 0x11bd974, 0x11bd974, 0xc9cbf769, 0xda07f093, 0xda07f093, 0xc9cbf769, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x183a9c7b, 0xd0cb89f6, 0x183a9c7b, 0x688f4a4a, 0x5387d57f, 0x5387d57f, 0xf73e8d51, 0xf73e8d51, 0xf73e8d51, 0x9c50b566, 0x9c50b566, 0x9c50b566, 0x76ddfa22, 0x76ddfa22, 0x76ddfa22, 0x5387d57f, 0x688f4a4a, 0x688f4a4a, 0x5387d57f, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd4947854, 0x6a891549, 0xd4947854, 0xc7d188e9, 0xf83ee7aa, 0xf83ee7aa, 0x25ace02f, 0x25ace02f, 0x25ace02f, 0x2abb2c4c, 0x2abb2c4c, 0x2abb2c4c, 0x8719d2f6, 0x8719d2f6, 0x8719d2f6, 0xf83ee7aa, 0xc7d188e9, 0xc7d188e9, 0xf83ee7aa, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xc052007a, 0xb13719bf, 0xc052007a, 0x51cc34e7, 0x724366e5, 0x724366e5, 0x93a5ae77, 0x93a5ae77, 0x93a5ae77, 0x2d23f9af, 0x2d23f9af, 0x2d23f9af, 0xadb9eea7, 0xadb9eea7, 0xadb9eea7, 0x724366e5, 0x51cc34e7, 0x51cc34e7, 0x724366e5, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x2c8b0bd8, 0xe2601f4, 0x2c8b0bd8, 0x5fa3435d, 0x5387d57f, 0x5387d57f, 0x8e1f6970, 0x8e1f6970, 0x8e1f6970, 0xb3c21218, 0xb3c21218, 0xb3c21218, 0x882e84be, 0x882e84be, 0x882e84be, 0x5387d57f, 0x5fa3435d, 0x5fa3435d, 0x5387d57f, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe0188390, 0x3aed411b, 0xe0188390, 0x3a333360, 0xf83ee7aa, 0xf83ee7aa, 0xd8e98449, 0xd8e98449, 0xd8e98449, 0xbddc7b98, 0xbddc7b98, 0xbddc7b98, 0x4c8472e, 0x4c8472e, 0x4c8472e, 0xf83ee7aa, 0x3a333360, 0x3a333360, 0xf83ee7aa, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x10b6bc80, 0x2aac1924, 0x10b6bc80, 0x77cd8b04, 0x724366e5, 0x724366e5, 0x8260df58, 0x8260df58, 0x8260df58, 0x3ff85bc5, 0x3ff85bc5, 0x3ff85bc5, 0x9b371f76, 0x9b371f76, 0x9b371f76, 0x724366e5, 0x77cd8b04, 0x77cd8b04, 0x724366e5, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x8c72313f, 0x4cfced12, 0x8c72313f, 0x4aa8527c, 0x1c955882, 0x1c955882, 0x9c0f3299, 0x9c0f3299, 0x9c0f3299, 0xae19e8ad, 0xae19e8ad, 0xae19e8ad, 0x838dda3d, 0x838dda3d, 0x838dda3d, 0x1c955882, 0x4aa8527c, 0x4aa8527c, 0x1c955882, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x2e321f11, 0xef4c7336, 0x2e321f11, 0xdb96b546, 0x4d266f7a, 0x4d266f7a, 0x826f10eb, 0x826f10eb, 0x826f10eb, 0x6901cec8, 0x6901cec8, 0x6901cec8, 0x5b62eead, 0x5b62eead, 0x5b62eead, 0x4d266f7a, 0xdb96b546, 0xdb96b546, 0x4d266f7a, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x5e6477a3, 0x7ad01a93, 0x5e6477a3, 0x2bc0132c, 0x1ed9d731, 0x1ed9d731, 0xfa679063, 0xfa679063, 0xfa679063, 0x92c766b0, 0x92c766b0, 0x92c766b0, 0x1e6b8f01, 0x1e6b8f01, 0x1e6b8f01, 0x1ed9d731, 0x2bc0132c, 0x2bc0132c, 0x1ed9d731, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x183a9c7b, 0xd0cb89f6, 0x183a9c7b, 0x688f4a4a, 0x5387d57f, 0x5387d57f, 0xf73e8d51, 0xf73e8d51, 0xf73e8d51, 0x9c50b566, 0x9c50b566, 0x9c50b566, 0x76ddfa22, 0x76ddfa22, 0x76ddfa22, 0x5387d57f, 0x688f4a4a, 0x688f4a4a, 0x5387d57f, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd4947854, 0x6a891549, 0xd4947854, 0xc7d188e9, 0xf83ee7aa, 0xf83ee7aa, 0x25ace02f, 0x25ace02f, 0x25ace02f, 0x2abb2c4c, 0x2abb2c4c, 0x2abb2c4c, 0x8719d2f6, 0x8719d2f6, 0x8719d2f6, 0xf83ee7aa, 0xc7d188e9, 0xc7d188e9, 0xf83ee7aa, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xc052007a, 0xb13719bf, 0xc052007a, 0x51cc34e7, 0x724366e5, 0x724366e5, 0x93a5ae77, 0x93a5ae77, 0x93a5ae77, 0x2d23f9af, 0x2d23f9af, 0x2d23f9af, 0xadb9eea7, 0xadb9eea7, 0xadb9eea7, 0x724366e5, 0x51cc34e7, 0x51cc34e7, 0x724366e5, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x2c8b0bd8, 0xe2601f4, 0x2c8b0bd8, 0x5fa3435d, 0x5387d57f, 0x5387d57f, 0x8e1f6970, 0x8e1f6970, 0x8e1f6970, 0xb3c21218, 0xb3c21218, 0xb3c21218, 0x882e84be, 0x882e84be, 0x882e84be, 0x5387d57f, 0x5fa3435d, 0x5fa3435d, 0x5387d57f, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe0188390, 0x3aed411b, 0xe0188390, 0x3a333360, 0xf83ee7aa, 0xf83ee7aa, 0xd8e98449, 0xd8e98449, 0xd8e98449, 0xbddc7b98, 0xbddc7b98, 0xbddc7b98, 0x4c8472e, 0x4c8472e, 0x4c8472e, 0xf83ee7aa, 0x3a333360, 0x3a333360, 0xf83ee7aa, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x10b6bc80, 0x2aac1924, 0x10b6bc80, 0x77cd8b04, 0x724366e5, 0x724366e5, 0x8260df58, 0x8260df58, 0x8260df58, 0x3ff85bc5, 0x3ff85bc5, 0x3ff85bc5, 0x9b371f76, 0x9b371f76, 0x9b371f76, 0x724366e5, 0x77cd8b04, 0x77cd8b04, 0x724366e5, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x8c72313f, 0x4cfced12, 0x8c72313f, 0x4aa8527c, 0x1c955882, 0x1c955882, 0x9c0f3299, 0x9c0f3299, 0x9c0f3299, 0xae19e8ad, 0xae19e8ad, 0xae19e8ad, 0x838dda3d, 0x838dda3d, 0x838dda3d, 0x1c955882, 0x4aa8527c, 0x4aa8527c, 0x1c955882, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x2e321f11, 0xef4c7336, 0x2e321f11, 0xdb96b546, 0x4d266f7a, 0x4d266f7a, 0x826f10eb, 0x826f10eb, 0x826f10eb, 0x6901cec8, 0x6901cec8, 0x6901cec8, 0x5b62eead, 0x5b62eead, 0x5b62eead, 0x4d266f7a, 0xdb96b546, 0xdb96b546, 0x4d266f7a, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x5e6477a3, 0x7ad01a93, 0x5e6477a3, 0x2bc0132c, 0x1ed9d731, 0x1ed9d731, 0xfa679063, 0xfa679063, 0xfa679063, 0x92c766b0, 0x92c766b0, 0x92c766b0, 0x1e6b8f01, 0x1e6b8f01, 0x1e6b8f01, 0x1ed9d731, 0x2bc0132c, 0x2bc0132c, 0x1ed9d731, }, 20 }, - { "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x2df13f91, 0x3dc68f3d, 0x2df13f91, 0x8b8ecd1f, 0x9813a416, 0x9813a416, 0x4d501c22, 0x4d501c22, 0x4d501c22, 0x7f8214c6, 0x7f8214c6, 0x7f8214c6, 0x4c05cfbb, 0x4c05cfbb, 0x4c05cfbb, 0x9813a416, 0x8b8ecd1f, 0x8b8ecd1f, 0x9813a416, }, 20 }, - { "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x27757486, 0x9c300eca, 0x27757486, 0x383911a8, 0x5fcf013d, 0x5fcf013d, 0xc4765255, 0xc4765255, 0xc4765255, 0xbde4bdfd, 0xbde4bdfd, 0xbde4bdfd, 0x7c020fba, 0x7c020fba, 0x7c020fba, 0x5fcf013d, 0x383911a8, 0x383911a8, 0x5fcf013d, }, 20 }, - { "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x79973d2, 0xb499914b, 0x79973d2, 0x4d70f93d, 0xdd28f52b, 0xdd28f52b, 0x1f44d5b9, 0x1f44d5b9, 0x1f44d5b9, 0x75d6684e, 0x75d6684e, 0x75d6684e, 0xa3cc3f9b, 0xa3cc3f9b, 0xa3cc3f9b, 0xdd28f52b, 0x4d70f93d, 0x4d70f93d, 0xdd28f52b, }, 20 }, - { "gfxterm_ch", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x3ebe5332, 0x95dd4fe5, 0x3ebe5332, 0xcee04136, 0x59c36f00, 0x59c36f00, 0xb957d5b9, 0xb957d5b9, 0xb957d5b9, 0x8eff3999, 0x8eff3999, 0x8eff3999, 0xf8c4a94b, 0xf8c4a94b, 0xf8c4a94b, 0x59c36f00, 0xcee04136, 0xcee04136, 0x59c36f00, }, 20 }, - { "gfxterm_ch", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x5802d7d7, 0xc519b826, 0x5802d7d7, 0xbf6f6f3d, 0xaa4593fe, 0xaa4593fe, 0xcd49e37f, 0xcd49e37f, 0xcd49e37f, 0xbf688de1, 0xbf688de1, 0xbf688de1, 0x516f8b45, 0x516f8b45, 0x516f8b45, 0xaa4593fe, 0xbf6f6f3d, 0xbf6f6f3d, 0xaa4593fe, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x1aa55709, 0x7267c865, 0x1aa55709, 0xb5dc630, 0xc9cbf769, 0xc9cbf769, 0x3e493cbb, 0x3e493cbb, 0x3e493cbb, 0x8ea8f56d, 0x8ea8f56d, 0x8ea8f56d, 0x78988930, 0x78988930, 0x78988930, 0xc9cbf769, 0xb5dc630, 0xb5dc630, 0xc9cbf769, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x40ebd791, 0xd6b59841, 0x40ebd791, 0xe694251f, 0x9813a416, 0x9813a416, 0x3d47c16c, 0x3d47c16c, 0x3d47c16c, 0xf95c988, 0xf95c988, 0xf95c988, 0x3c1212f5, 0x3c1212f5, 0x3c1212f5, 0x9813a416, 0xe694251f, 0xe694251f, 0x9813a416, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x9d9917d5, 0x3f781d89, 0x9d9917d5, 0x82d572fb, 0x5fcf013d, 0x5fcf013d, 0x949218b2, 0x949218b2, 0x949218b2, 0xed00f71a, 0xed00f71a, 0xed00f71a, 0x2ce6455d, 0x2ce6455d, 0x2ce6455d, 0x5fcf013d, 0x82d572fb, 0x82d572fb, 0x5fcf013d, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x48fc6a36, 0x150cb76a, 0x48fc6a36, 0x215e0d9, 0xdd28f52b, 0xdd28f52b, 0x2f5fc562, 0x2f5fc562, 0x2f5fc562, 0x45cd7895, 0x45cd7895, 0x45cd7895, 0x93d72f40, 0x93d72f40, 0x93d72f40, 0xdd28f52b, 0x215e0d9, 0x215e0d9, 0xdd28f52b, }, 20 }, - { "gfxterm_ch", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xfae4dc0d, 0x27a05926, 0xfae4dc0d, 0xa948d513, 0x43d1f34, 0x43d1f34, 0x68d4a2d2, 0x68d4a2d2, 0x68d4a2d2, 0xbc1bc354, 0xbc1bc354, 0xbc1bc354, 0xab22150c, 0xab22150c, 0xab22150c, 0x43d1f34, 0xa948d513, 0xa948d513, 0x43d1f34, }, 20 }, - { "gfxterm_ch", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x3ebe5332, 0x95dd4fe5, 0x3ebe5332, 0xcee04136, 0x59c36f00, 0x59c36f00, 0xb957d5b9, 0xb957d5b9, 0xb957d5b9, 0x8eff3999, 0x8eff3999, 0x8eff3999, 0xf8c4a94b, 0xf8c4a94b, 0xf8c4a94b, 0x59c36f00, 0xcee04136, 0xcee04136, 0x59c36f00, }, 20 }, - { "gfxterm_ch", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x5802d7d7, 0xc519b826, 0x5802d7d7, 0xbf6f6f3d, 0xaa4593fe, 0xaa4593fe, 0xcd49e37f, 0xcd49e37f, 0xcd49e37f, 0xbf688de1, 0xbf688de1, 0xbf688de1, 0x516f8b45, 0x516f8b45, 0x516f8b45, 0xaa4593fe, 0xbf6f6f3d, 0xbf6f6f3d, 0xaa4593fe, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x1aa55709, 0x7267c865, 0x1aa55709, 0xb5dc630, 0xc9cbf769, 0xc9cbf769, 0x3e493cbb, 0x3e493cbb, 0x3e493cbb, 0x8ea8f56d, 0x8ea8f56d, 0x8ea8f56d, 0x78988930, 0x78988930, 0x78988930, 0xc9cbf769, 0xb5dc630, 0xb5dc630, 0xc9cbf769, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xed078d92, 0xe65b3e84, 0xed078d92, 0x9db25ba3, 0x5387d57f, 0x5387d57f, 0x91373fca, 0x91373fca, 0x91373fca, 0xfa5907fd, 0xfa5907fd, 0xfa5907fd, 0x10d448b9, 0x10d448b9, 0x10d448b9, 0x5387d57f, 0x9db25ba3, 0x9db25ba3, 0x5387d57f, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x13536212, 0x8f3d6029, 0x13536212, 0x1692af, 0xf83ee7aa, 0xf83ee7aa, 0xeed262ab, 0xeed262ab, 0xeed262ab, 0xe1c5aec8, 0xe1c5aec8, 0xe1c5aec8, 0x4c675072, 0x4c675072, 0x4c675072, 0xf83ee7aa, 0x1692af, 0x1692af, 0xf83ee7aa, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xd1d07f0a, 0x7aba9822, 0xd1d07f0a, 0x404e4b97, 0x724366e5, 0x724366e5, 0x7414f60a, 0x7414f60a, 0x7414f60a, 0xca92a1d2, 0xca92a1d2, 0xca92a1d2, 0x4a08b6da, 0x4a08b6da, 0x4a08b6da, 0x724366e5, 0x404e4b97, 0x404e4b97, 0x724366e5, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xf3cab74b, 0xddafefd5, 0xf3cab74b, 0x80e2ffce, 0x5387d57f, 0x5387d57f, 0x6c9bf0a7, 0x6c9bf0a7, 0x6c9bf0a7, 0x51468bcf, 0x51468bcf, 0x51468bcf, 0x6aaa1d69, 0x6aaa1d69, 0x6aaa1d69, 0x5387d57f, 0x80e2ffce, 0x80e2ffce, 0x5387d57f, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbdea979c, 0x585500b9, 0xbdea979c, 0x67c1276c, 0xf83ee7aa, 0xf83ee7aa, 0x1fe3ed7b, 0x1fe3ed7b, 0x1fe3ed7b, 0x7ad612aa, 0x7ad612aa, 0x7ad612aa, 0xc3c22e1c, 0xc3c22e1c, 0xc3c22e1c, 0xf83ee7aa, 0x67c1276c, 0x67c1276c, 0xf83ee7aa, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x5bca5fab, 0xf069ea4, 0x5bca5fab, 0x3cb1682f, 0x724366e5, 0x724366e5, 0x1008b3e0, 0x1008b3e0, 0x1008b3e0, 0xad90377d, 0xad90377d, 0xad90377d, 0x95f73ce, 0x95f73ce, 0x95f73ce, 0x724366e5, 0x3cb1682f, 0x3cb1682f, 0x724366e5, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x3a299523, 0x61b936c7, 0x3a299523, 0xfcf3f660, 0x1c955882, 0x1c955882, 0xc105930d, 0xc105930d, 0xc105930d, 0xf3134939, 0xf3134939, 0xf3134939, 0xde877ba9, 0xde877ba9, 0xde877ba9, 0x1c955882, 0xfcf3f660, 0xfcf3f660, 0x1c955882, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x3bc7f0a6, 0xe271a46, 0x3bc7f0a6, 0xce635af1, 0x4d266f7a, 0x4d266f7a, 0x609f331e, 0x609f331e, 0x609f331e, 0x8bf1ed3d, 0x8bf1ed3d, 0x8bf1ed3d, 0xb992cd58, 0xb992cd58, 0xb992cd58, 0x4d266f7a, 0xce635af1, 0xce635af1, 0x4d266f7a, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe8477fbf, 0x258bfb15, 0xe8477fbf, 0x9de31b30, 0x1ed9d731, 0x1ed9d731, 0xd6093f89, 0xd6093f89, 0xd6093f89, 0xbea9c95a, 0xbea9c95a, 0xbea9c95a, 0x320520eb, 0x320520eb, 0x320520eb, 0x1ed9d731, 0x9de31b30, 0x9de31b30, 0x1ed9d731, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xed078d92, 0xe65b3e84, 0xed078d92, 0x9db25ba3, 0x5387d57f, 0x5387d57f, 0x91373fca, 0x91373fca, 0x91373fca, 0xfa5907fd, 0xfa5907fd, 0xfa5907fd, 0x10d448b9, 0x10d448b9, 0x10d448b9, 0x5387d57f, 0x9db25ba3, 0x9db25ba3, 0x5387d57f, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x13536212, 0x8f3d6029, 0x13536212, 0x1692af, 0xf83ee7aa, 0xf83ee7aa, 0xeed262ab, 0xeed262ab, 0xeed262ab, 0xe1c5aec8, 0xe1c5aec8, 0xe1c5aec8, 0x4c675072, 0x4c675072, 0x4c675072, 0xf83ee7aa, 0x1692af, 0x1692af, 0xf83ee7aa, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xd1d07f0a, 0x7aba9822, 0xd1d07f0a, 0x404e4b97, 0x724366e5, 0x724366e5, 0x7414f60a, 0x7414f60a, 0x7414f60a, 0xca92a1d2, 0xca92a1d2, 0xca92a1d2, 0x4a08b6da, 0x4a08b6da, 0x4a08b6da, 0x724366e5, 0x404e4b97, 0x404e4b97, 0x724366e5, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xf3cab74b, 0xddafefd5, 0xf3cab74b, 0x80e2ffce, 0x5387d57f, 0x5387d57f, 0x6c9bf0a7, 0x6c9bf0a7, 0x6c9bf0a7, 0x51468bcf, 0x51468bcf, 0x51468bcf, 0x6aaa1d69, 0x6aaa1d69, 0x6aaa1d69, 0x5387d57f, 0x80e2ffce, 0x80e2ffce, 0x5387d57f, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbdea979c, 0x585500b9, 0xbdea979c, 0x67c1276c, 0xf83ee7aa, 0xf83ee7aa, 0x1fe3ed7b, 0x1fe3ed7b, 0x1fe3ed7b, 0x7ad612aa, 0x7ad612aa, 0x7ad612aa, 0xc3c22e1c, 0xc3c22e1c, 0xc3c22e1c, 0xf83ee7aa, 0x67c1276c, 0x67c1276c, 0xf83ee7aa, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x5bca5fab, 0xf069ea4, 0x5bca5fab, 0x3cb1682f, 0x724366e5, 0x724366e5, 0x1008b3e0, 0x1008b3e0, 0x1008b3e0, 0xad90377d, 0xad90377d, 0xad90377d, 0x95f73ce, 0x95f73ce, 0x95f73ce, 0x724366e5, 0x3cb1682f, 0x3cb1682f, 0x724366e5, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x3a299523, 0x61b936c7, 0x3a299523, 0xfcf3f660, 0x1c955882, 0x1c955882, 0xc105930d, 0xc105930d, 0xc105930d, 0xf3134939, 0xf3134939, 0xf3134939, 0xde877ba9, 0xde877ba9, 0xde877ba9, 0x1c955882, 0xfcf3f660, 0xfcf3f660, 0x1c955882, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x3bc7f0a6, 0xe271a46, 0x3bc7f0a6, 0xce635af1, 0x4d266f7a, 0x4d266f7a, 0x609f331e, 0x609f331e, 0x609f331e, 0x8bf1ed3d, 0x8bf1ed3d, 0x8bf1ed3d, 0xb992cd58, 0xb992cd58, 0xb992cd58, 0x4d266f7a, 0xce635af1, 0xce635af1, 0x4d266f7a, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe8477fbf, 0x258bfb15, 0xe8477fbf, 0x9de31b30, 0x1ed9d731, 0x1ed9d731, 0xd6093f89, 0xd6093f89, 0xd6093f89, 0xbea9c95a, 0xbea9c95a, 0xbea9c95a, 0x320520eb, 0x320520eb, 0x320520eb, 0x1ed9d731, 0x9de31b30, 0x9de31b30, 0x1ed9d731, }, 20 }, - { "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x40ebd791, 0xd6b59841, 0x40ebd791, 0xe694251f, 0x9813a416, 0x9813a416, 0x3d47c16c, 0x3d47c16c, 0x3d47c16c, 0xf95c988, 0xf95c988, 0xf95c988, 0x3c1212f5, 0x3c1212f5, 0x3c1212f5, 0x9813a416, 0xe694251f, 0xe694251f, 0x9813a416, }, 20 }, - { "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x9d9917d5, 0x3f781d89, 0x9d9917d5, 0x82d572fb, 0x5fcf013d, 0x5fcf013d, 0x949218b2, 0x949218b2, 0x949218b2, 0xed00f71a, 0xed00f71a, 0xed00f71a, 0x2ce6455d, 0x2ce6455d, 0x2ce6455d, 0x5fcf013d, 0x82d572fb, 0x82d572fb, 0x5fcf013d, }, 20 }, - { "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x48fc6a36, 0x150cb76a, 0x48fc6a36, 0x215e0d9, 0xdd28f52b, 0xdd28f52b, 0x2f5fc562, 0x2f5fc562, 0x2f5fc562, 0x45cd7895, 0x45cd7895, 0x45cd7895, 0x93d72f40, 0x93d72f40, 0x93d72f40, 0xdd28f52b, 0x215e0d9, 0x215e0d9, 0xdd28f52b, }, 20 }, - { "gfxterm_red", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x5ada9562, 0x92c24cb5, 0x5ada9562, 0xa87078ee, 0x59c36f00, 0x59c36f00, 0xa3fd4fe2, 0xa3fd4fe2, 0xa3fd4fe2, 0x9455a3c2, 0x9455a3c2, 0x9455a3c2, 0xe26e3310, 0xe26e3310, 0xe26e3310, 0x59c36f00, 0xa87078ee, 0xa87078ee, 0x59c36f00, }, 20 }, - { "gfxterm_red", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x91306ec6, 0x86afd55f, 0x91306ec6, 0xb0176694, 0xaa4593fe, 0xaa4593fe, 0x7382c9ba, 0x7382c9ba, 0x7382c9ba, 0x1a3a724, 0x1a3a724, 0x1a3a724, 0xefa4a180, 0xefa4a180, 0xefa4a180, 0xaa4593fe, 0xb0176694, 0xb0176694, 0xaa4593fe, }, 20 }, - { "gfxterm_red", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x48e9c7c, 0xe838a250, 0x48e9c7c, 0xa076757e, 0xc9cbf769, 0xc9cbf769, 0x3c2c18d0, 0x3c2c18d0, 0x3c2c18d0, 0x8ccdd106, 0x8ccdd106, 0x8ccdd106, 0x7afdad5b, 0x7afdad5b, 0x7afdad5b, 0xc9cbf769, 0xa076757e, 0xa076757e, 0xc9cbf769, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x5bf4143b, 0xae073ebc, 0x5bf4143b, 0x9ceeeaa, 0x9813a416, 0x9813a416, 0xa85652ac, 0xa85652ac, 0xa85652ac, 0x9a845a48, 0x9a845a48, 0x9a845a48, 0xa9038135, 0xa9038135, 0xa9038135, 0x9813a416, 0x9ceeeaa, 0x9ceeeaa, 0x9813a416, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xbd34a4fd, 0x62f11989, 0xbd34a4fd, 0x2f699dd0, 0x5fcf013d, 0x5fcf013d, 0xeedf78d6, 0xeedf78d6, 0xeedf78d6, 0x974d977e, 0x974d977e, 0x974d977e, 0x56ab2539, 0x56ab2539, 0x56ab2539, 0x5fcf013d, 0x2f699dd0, 0x2f699dd0, 0x5fcf013d, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x45d0878, 0xeba1f163, 0x45d0878, 0xec51a5d6, 0xdd28f52b, 0xdd28f52b, 0x9515070, 0x9515070, 0x9515070, 0x63c3ed87, 0x63c3ed87, 0x63c3ed87, 0xb5d9ba52, 0xb5d9ba52, 0xb5d9ba52, 0xdd28f52b, 0xec51a5d6, 0xec51a5d6, 0xdd28f52b, }, 20 }, - { "gfxterm_red", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x7576a502, 0xe3c81979, 0x7576a502, 0xe4a8704c, 0x43d1f34, 0x43d1f34, 0x631860c3, 0x631860c3, 0x631860c3, 0xb7d70145, 0xb7d70145, 0xb7d70145, 0xa0eed71d, 0xa0eed71d, 0xa0eed71d, 0x43d1f34, 0xe4a8704c, 0xe4a8704c, 0x43d1f34, }, 20 }, - { "gfxterm_red", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x5ada9562, 0x92c24cb5, 0x5ada9562, 0xa87078ee, 0x59c36f00, 0x59c36f00, 0xa3fd4fe2, 0xa3fd4fe2, 0xa3fd4fe2, 0x9455a3c2, 0x9455a3c2, 0x9455a3c2, 0xe26e3310, 0xe26e3310, 0xe26e3310, 0x59c36f00, 0xa87078ee, 0xa87078ee, 0x59c36f00, }, 20 }, - { "gfxterm_red", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x91306ec6, 0x86afd55f, 0x91306ec6, 0xb0176694, 0xaa4593fe, 0xaa4593fe, 0x7382c9ba, 0x7382c9ba, 0x7382c9ba, 0x1a3a724, 0x1a3a724, 0x1a3a724, 0xefa4a180, 0xefa4a180, 0xefa4a180, 0xaa4593fe, 0xb0176694, 0xb0176694, 0xaa4593fe, }, 20 }, - { "gfxterm_red", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x48e9c7c, 0xe838a250, 0x48e9c7c, 0xa076757e, 0xc9cbf769, 0xc9cbf769, 0x3c2c18d0, 0x3c2c18d0, 0x3c2c18d0, 0x8ccdd106, 0x8ccdd106, 0x8ccdd106, 0x7afdad5b, 0x7afdad5b, 0x7afdad5b, 0xc9cbf769, 0xa076757e, 0xa076757e, 0xc9cbf769, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x9120de67, 0xc19a0fcd, 0x9120de67, 0x44c1dda9, 0x5387d57f, 0x5387d57f, 0xfdf685d8, 0xfdf685d8, 0xfdf685d8, 0x9698bdef, 0x9698bdef, 0x9698bdef, 0x7c15f2ab, 0x7c15f2ab, 0x7c15f2ab, 0x5387d57f, 0x44c1dda9, 0x44c1dda9, 0x5387d57f, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x184154d1, 0x1d503bd9, 0x184154d1, 0x4b75ac8d, 0xf83ee7aa, 0xf83ee7aa, 0xae5d776f, 0xae5d776f, 0xae5d776f, 0xa14abb0c, 0xa14abb0c, 0xa14abb0c, 0xce845b6, 0xce845b6, 0xce845b6, 0xf83ee7aa, 0x4b75ac8d, 0x4b75ac8d, 0xf83ee7aa, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xe87666b4, 0xf214363d, 0xe87666b4, 0xd5c94cc1, 0x724366e5, 0x724366e5, 0xb8d9e8e3, 0xb8d9e8e3, 0xb8d9e8e3, 0x65fbf3b, 0x65fbf3b, 0x65fbf3b, 0x86c5a833, 0x86c5a833, 0x86c5a833, 0x724366e5, 0xd5c94cc1, 0xd5c94cc1, 0x724366e5, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x25455801, 0xbdf8ad2b, 0x25455801, 0xeb922c1b, 0x5387d57f, 0x5387d57f, 0x465fd2d6, 0x465fd2d6, 0x465fd2d6, 0x7b82a9be, 0x7b82a9be, 0x7b82a9be, 0x406e3f18, 0x406e3f18, 0x406e3f18, 0x5387d57f, 0xeb922c1b, 0xeb922c1b, 0x5387d57f, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb6d1d565, 0x8ef4e83b, 0xb6d1d565, 0x5ebcf5f6, 0xf83ee7aa, 0xf83ee7aa, 0xd7a503f5, 0xd7a503f5, 0xd7a503f5, 0xb290fc24, 0xb290fc24, 0xb290fc24, 0xb84c092, 0xb84c092, 0xb84c092, 0xf83ee7aa, 0x5ebcf5f6, 0x5ebcf5f6, 0xf83ee7aa, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xc87b28a8, 0x5946cb35, 0xc87b28a8, 0x88a5fd57, 0x724366e5, 0x724366e5, 0x2b90fc8e, 0x2b90fc8e, 0x2b90fc8e, 0x96087813, 0x96087813, 0x96087813, 0x32c73ca0, 0x32c73ca0, 0x32c73ca0, 0x724366e5, 0x88a5fd57, 0x88a5fd57, 0x724366e5, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xa8076777, 0xf2a31e25, 0xa8076777, 0xbf35b130, 0x1c955882, 0x1c955882, 0xb36b5cb2, 0xb36b5cb2, 0xb36b5cb2, 0x817d8686, 0x817d8686, 0x817d8686, 0xace9b416, 0xace9b416, 0xace9b416, 0x1c955882, 0xbf35b130, 0xbf35b130, 0x1c955882, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xde4259da, 0x32b1a21b, 0xde4259da, 0x9c5d04b9, 0x4d266f7a, 0x4d266f7a, 0xea54a927, 0xea54a927, 0xea54a927, 0x13a7704, 0x13a7704, 0x13a7704, 0x33595761, 0x33595761, 0x33595761, 0x4d266f7a, 0x9c5d04b9, 0x9c5d04b9, 0x4d266f7a, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x9fc03765, 0x9cdf17e6, 0x9fc03765, 0x5f01fbae, 0x1ed9d731, 0x1ed9d731, 0x9bc2d37f, 0x9bc2d37f, 0x9bc2d37f, 0xf36225ac, 0xf36225ac, 0xf36225ac, 0x7fcecc1d, 0x7fcecc1d, 0x7fcecc1d, 0x1ed9d731, 0x5f01fbae, 0x5f01fbae, 0x1ed9d731, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x127281ce, 0x42c85064, 0x127281ce, 0xd1aa3cd6, 0x5387d57f, 0x5387d57f, 0x54b2ad21, 0x54b2ad21, 0x54b2ad21, 0x3fdc9516, 0x3fdc9516, 0x3fdc9516, 0xd551da52, 0xd551da52, 0xd551da52, 0x5387d57f, 0xd1aa3cd6, 0xd1aa3cd6, 0x5387d57f, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf2b9b5f0, 0xf7a8daf8, 0xf2b9b5f0, 0xb9206400, 0xf83ee7aa, 0xf83ee7aa, 0x63cb3448, 0x63cb3448, 0x63cb3448, 0x6cdcf82b, 0x6cdcf82b, 0x6cdcf82b, 0xc17e0691, 0xc17e0691, 0xc17e0691, 0xf83ee7aa, 0xb9206400, 0xb9206400, 0xf83ee7aa, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x994b78e5, 0x8329286c, 0x994b78e5, 0x82441b7c, 0x724366e5, 0x724366e5, 0x2083c3c9, 0x2083c3c9, 0x2083c3c9, 0x9e059411, 0x9e059411, 0x9e059411, 0x1e9f8319, 0x1e9f8319, 0x1e9f8319, 0x724366e5, 0x82441b7c, 0x82441b7c, 0x724366e5, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x6873f3d4, 0xf0ce06fe, 0x6873f3d4, 0xca743ccf, 0x5387d57f, 0x5387d57f, 0x1f34f497, 0x1f34f497, 0x1f34f497, 0x22e98fff, 0x22e98fff, 0x22e98fff, 0x19051959, 0x19051959, 0x19051959, 0x5387d57f, 0xca743ccf, 0xca743ccf, 0x5387d57f, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x640a3cdf, 0x5c2f0181, 0x640a3cdf, 0xbcb04bc6, 0xf83ee7aa, 0xf83ee7aa, 0x8a8d8123, 0x8a8d8123, 0x8a8d8123, 0xefb87ef2, 0xefb87ef2, 0xefb87ef2, 0x56ac4244, 0x56ac4244, 0x56ac4244, 0xf83ee7aa, 0xbcb04bc6, 0xbcb04bc6, 0xf83ee7aa, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xaf28bcb6, 0x3e155f2b, 0xaf28bcb6, 0x1ad2ad3c, 0x724366e5, 0x724366e5, 0x23329590, 0x23329590, 0x23329590, 0x9eaa110d, 0x9eaa110d, 0x9eaa110d, 0x3a6555be, 0x3a6555be, 0x3a6555be, 0x724366e5, 0x1ad2ad3c, 0x1ad2ad3c, 0x724366e5, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xf8a8cc62, 0xa20cb530, 0xf8a8cc62, 0x8eaf041b, 0x1c955882, 0x1c955882, 0x86072f57, 0x86072f57, 0x86072f57, 0xb411f563, 0xb411f563, 0xb411f563, 0x9985c7f3, 0x9985c7f3, 0x9985c7f3, 0x1c955882, 0x8eaf041b, 0x8eaf041b, 0x1c955882, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x9036a827, 0x7cc553e6, 0x9036a827, 0xc550ea8d, 0x4d266f7a, 0x4d266f7a, 0x103e2373, 0x103e2373, 0x103e2373, 0xfb50fd50, 0xfb50fd50, 0xfb50fd50, 0xc933dd35, 0xc933dd35, 0xc933dd35, 0x4d266f7a, 0xc550ea8d, 0xc550ea8d, 0x4d266f7a, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xddfc793c, 0xdee359bf, 0xddfc793c, 0xb0605af0, 0x1ed9d731, 0x1ed9d731, 0xb81f75e2, 0xb81f75e2, 0xb81f75e2, 0xd0bf8331, 0xd0bf8331, 0xd0bf8331, 0x5c136a80, 0x5c136a80, 0x5c136a80, 0x1ed9d731, 0xb0605af0, 0xb0605af0, 0x1ed9d731, }, 20 }, - { "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x5077b270, 0xa58498f7, 0x5077b270, 0xf29d394a, 0x9813a416, 0x9813a416, 0xc07edf73, 0xc07edf73, 0xc07edf73, 0xf2acd797, 0xf2acd797, 0xf2acd797, 0xc12b0cea, 0xc12b0cea, 0xc12b0cea, 0x9813a416, 0xf29d394a, 0xf29d394a, 0x9813a416, }, 20 }, - { "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x8e57eb03, 0x51925677, 0x8e57eb03, 0xd8a275cd, 0x5fcf013d, 0x5fcf013d, 0xaa4efae1, 0xaa4efae1, 0xaa4efae1, 0xd3dc1549, 0xd3dc1549, 0xd3dc1549, 0x123aa70e, 0x123aa70e, 0x123aa70e, 0x5fcf013d, 0xd8a275cd, 0xd8a275cd, 0x5fcf013d, }, 20 }, - { "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xc7a54f9b, 0x2859b680, 0xc7a54f9b, 0xc9b13f25, 0xdd28f52b, 0xdd28f52b, 0x64978e18, 0x64978e18, 0x64978e18, 0xe0533ef, 0xe0533ef, 0xe0533ef, 0xd81f643a, 0xd81f643a, 0xd81f643a, 0xdd28f52b, 0xc9b13f25, 0xc9b13f25, 0xdd28f52b, }, 20 }, - { "gfxterm_high", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7c405813, 0xb45881c4, 0x7c405813, 0xd2257bc8, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0xd2257bc8, 0xd2257bc8, 0x59c36f00, }, 20 }, - { "gfxterm_high", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x8a5abcca, 0x9dc50753, 0x8a5abcca, 0x11349bd4, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x11349bd4, 0x11349bd4, 0xaa4593fe, }, 20 }, - { "gfxterm_high", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xf12c93f6, 0x1d9aadda, 0xf12c93f6, 0x4b7b64da, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x4b7b64da, 0x4b7b64da, 0xc9cbf769, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xac0bec02, 0x59f8c685, 0xac0bec02, 0x887af3a3, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x887af3a3, 0x887af3a3, 0x9813a416, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x79766a45, 0xa6b3d731, 0x79766a45, 0xbfa0e337, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0xbfa0e337, 0xbfa0e337, 0x5fcf013d, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xe66acd38, 0x9963423, 0xe66acd38, 0x36683ffa, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x36683ffa, 0x36683ffa, 0xdd28f52b, }, 20 }, - { "gfxterm_high", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x6e065da8, 0xf8b8e1d3, 0x6e065da8, 0xbc1b4277, 0x43d1f34, 0x43d1f34, 0x8c5a6902, 0x8c5a6902, 0x8c5a6902, 0x58950884, 0x58950884, 0x58950884, 0x4facdedc, 0x4facdedc, 0x4facdedc, 0x43d1f34, 0xbc1b4277, 0xbc1b4277, 0x43d1f34, }, 20 }, - { "gfxterm_high", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x7c405813, 0xb45881c4, 0x7c405813, 0xd2257bc8, 0x59c36f00, 0x59c36f00, 0x385870f8, 0x385870f8, 0x385870f8, 0xff09cd8, 0xff09cd8, 0xff09cd8, 0x79cb0c0a, 0x79cb0c0a, 0x79cb0c0a, 0x59c36f00, 0xd2257bc8, 0xd2257bc8, 0x59c36f00, }, 20 }, - { "gfxterm_high", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x8a5abcca, 0x9dc50753, 0x8a5abcca, 0x11349bd4, 0xaa4593fe, 0xaa4593fe, 0xe5def7f5, 0xe5def7f5, 0xe5def7f5, 0x97ff996b, 0x97ff996b, 0x97ff996b, 0x79f89fcf, 0x79f89fcf, 0x79f89fcf, 0xaa4593fe, 0x11349bd4, 0x11349bd4, 0xaa4593fe, }, 20 }, - { "gfxterm_high", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xf12c93f6, 0x1d9aadda, 0xf12c93f6, 0x4b7b64da, 0xc9cbf769, 0xc9cbf769, 0x3a85d6d2, 0x3a85d6d2, 0x3a85d6d2, 0x8a641f04, 0x8a641f04, 0x8a641f04, 0x7c546359, 0x7c546359, 0x7c546359, 0xc9cbf769, 0x4b7b64da, 0x4b7b64da, 0xc9cbf769, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x777a27c3, 0x27c0f669, 0x777a27c3, 0x2d17f90b, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0x2d17f90b, 0x2d17f90b, 0x5387d57f, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x41be488, 0x10a8b80, 0x41be488, 0x8ef5079, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0x8ef5079, 0x8ef5079, 0xf83ee7aa, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x829e1c0b, 0x98fc4c82, 0x829e1c0b, 0xe851600f, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0xe851600f, 0xe851600f, 0x724366e5, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x988bff89, 0x360aa3, 0x988bff89, 0xb969ebc8, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0xb969ebc8, 0xb969ebc8, 0x5387d57f, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x1af0e1a7, 0x22d5dcf9, 0x1af0e1a7, 0xb14bdac7, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0xb14bdac7, 0xb14bdac7, 0xf83ee7aa, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x215221e5, 0xb06fc278, 0x215221e5, 0x5efe916d, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0x5efe916d, 0x5efe916d, 0x724366e5, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xe11a4694, 0xbbbe3fc6, 0xe11a4694, 0x1b4fe3cd, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0x1b4fe3cd, 0x1b4fe3cd, 0x1c955882, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xefbaabe7, 0x3495026, 0xefbaabe7, 0xcd72e5e5, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0xcd72e5e5, 0xcd72e5e5, 0x4d266f7a, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x3c0ef702, 0x3f11d781, 0x3c0ef702, 0xa76922cf, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0xa76922cf, 0xa76922cf, 0x1ed9d731, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x77cd4576, 0x277794dc, 0x77cd4576, 0x3b992568, 0x5387d57f, 0x5387d57f, 0x7006da7b, 0x7006da7b, 0x7006da7b, 0x1b68e24c, 0x1b68e24c, 0x1b68e24c, 0xf1e5ad08, 0xf1e5ad08, 0xf1e5ad08, 0x5387d57f, 0x3b992568, 0x3b992568, 0x5387d57f, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc3dd5340, 0xc6cc3c48, 0xc3dd5340, 0xd784ce1d, 0xf83ee7aa, 0xf83ee7aa, 0x2878254f, 0x2878254f, 0x2878254f, 0x276fe92c, 0x276fe92c, 0x276fe92c, 0x8acd1796, 0x8acd1796, 0x8acd1796, 0xf83ee7aa, 0xd784ce1d, 0xd784ce1d, 0xf83ee7aa, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xe7d07de8, 0xfdb22d61, 0xe7d07de8, 0xabaf4800, 0x724366e5, 0x724366e5, 0xcf3b3ce5, 0xcf3b3ce5, 0xcf3b3ce5, 0x71bd6b3d, 0x71bd6b3d, 0x71bd6b3d, 0xf1277c35, 0xf1277c35, 0xf1277c35, 0x724366e5, 0xabaf4800, 0xabaf4800, 0x724366e5, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x95de900c, 0xd636526, 0x95de900c, 0xd8ec3f4c, 0x5387d57f, 0x5387d57f, 0x34eb1f93, 0x34eb1f93, 0x34eb1f93, 0x93664fb, 0x93664fb, 0x93664fb, 0x32daf25d, 0x32daf25d, 0x32daf25d, 0x5387d57f, 0xd8ec3f4c, 0xd8ec3f4c, 0x5387d57f, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x30b67eb, 0x3b2e5ab5, 0x30b67eb, 0x98670b01, 0xf83ee7aa, 0xf83ee7aa, 0xaf036644, 0xaf036644, 0xaf036644, 0xca369995, 0xca369995, 0xca369995, 0x7322a523, 0x7322a523, 0x7322a523, 0xf83ee7aa, 0x98670b01, 0x98670b01, 0xf83ee7aa, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xd983e2ac, 0x48be0131, 0xd983e2ac, 0x530b9651, 0x724366e5, 0x724366e5, 0xc5ba9481, 0xc5ba9481, 0xc5ba9481, 0x7822101c, 0x7822101c, 0x7822101c, 0xdced54af, 0xdced54af, 0xdced54af, 0x724366e5, 0x530b9651, 0x530b9651, 0x724366e5, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x9a81713b, 0xc0250869, 0x9a81713b, 0x1e1ca5c, 0x1c955882, 0x1c955882, 0x91e2ab2e, 0x91e2ab2e, 0x91e2ab2e, 0xa3f4711a, 0xa3f4711a, 0xa3f4711a, 0x8e60438a, 0x8e60438a, 0x8e60438a, 0x1c955882, 0x1e1ca5c, 0x1e1ca5c, 0x1c955882, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x96e0b961, 0x7a1342a0, 0x96e0b961, 0xa351e8aa, 0x4d266f7a, 0x4d266f7a, 0x72a19422, 0x72a19422, 0x72a19422, 0x99cf4a01, 0x99cf4a01, 0x99cf4a01, 0xabac6a64, 0xabac6a64, 0xabac6a64, 0x4d266f7a, 0xa351e8aa, 0xa351e8aa, 0x4d266f7a, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe8167345, 0xeb0953c6, 0xe8167345, 0xde2c498f, 0x1ed9d731, 0x1ed9d731, 0x3e6ebbaf, 0x3e6ebbaf, 0x3e6ebbaf, 0x56ce4d7c, 0x56ce4d7c, 0x56ce4d7c, 0xda62a4cd, 0xda62a4cd, 0xda62a4cd, 0x1ed9d731, 0xde2c498f, 0xde2c498f, 0x1ed9d731, }, 20 }, - { "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x4dffe2bf, 0xb80cc838, 0x4dffe2bf, 0x995e8cb5, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x995e8cb5, 0x995e8cb5, 0x9813a416, }, 20 }, - { "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xdfa7599b, 0x62e4ef, 0xdfa7599b, 0xddd9770a, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0xddd9770a, 0xddd9770a, 0x5fcf013d, }, 20 }, - { "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd0b32d83, 0x3f4fd498, 0xd0b32d83, 0xe6a90251, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0xe6a90251, 0xe6a90251, 0xdd28f52b, }, 20 }, + { "cmdline_cat", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7dbff368, 0x7dbff368, 0x5a5bdc8d, 0x5a5bdc8d, 0x79753177, 0x79753177, 0xd01ede5b, 0xd01ede5b, 0x13708a73, 0x13708a73, 0x90186de3, 0x90186de3, 0xe63d02a2, 0xe63d02a2, 0x2c9dc262, 0x2c9dc262, 0x3eebd7b, 0x3eebd7b, 0xe8f3a5d8, 0xe8f3a5d8, 0xd38ecfe3, 0xd38ecfe3, 0x51878485, 0x51878485, 0xcbdb6d67, 0xcbdb6d67, 0xca25582, 0xca25582, 0x5bea0484, 0x5bea0484, 0x9ec5f71d, 0x9ec5f71d, 0x3f0bd7bc, 0x3f0bd7bc, 0xdbb0a5d2, 0xdbb0a5d2, 0xea710e2f, 0xea710e2f, 0xd14933fe, 0xd14933fe, 0x4906b783, 0xffd1d04b, 0xa159bdf9, 0xa159bdf9, }, 45 }, + { "cmdline_cat", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xf1546749, 0xf1546749, 0x95d30576, 0x95d30576, 0x77f13935, 0x77f13935, 0xcc296836, 0xcc296836, 0x9af42bc7, 0x9af42bc7, 0x84c23709, 0x84c23709, 0x26b5a3c5, 0x26b5a3c5, 0x52d943fb, 0x52d943fb, 0x38beda82, 0x38beda82, 0xc12306b1, 0xc12306b1, 0xed251115, 0xed251115, 0xe0099a2f, 0xe0099a2f, 0xee929157, 0xee929157, 0xd96a1169, 0xd96a1169, 0x42fac799, 0x42fac799, 0x635af416, 0x635af416, 0x8e90342f, 0x8e90342f, 0xed467cbf, 0xed467cbf, 0x999fc60b, 0x999fc60b, 0xb45d2b1f, 0xb45d2b1f, 0x7e23ccef, 0x8e988beb, 0x8783fdf8, 0x8783fdf8, }, 45 }, + { "cmdline_cat", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x50b82239, 0x50b82239, 0x82c36c12, 0x82c36c12, 0x6311208d, 0x6311208d, 0x816bd4b3, 0x816bd4b3, 0xc9281fd0, 0xc9281fd0, 0x75767bac, 0x75767bac, 0x52edeac, 0x52edeac, 0xfdb551f7, 0xfdb551f7, 0xba21cd3, 0xba21cd3, 0xf2b3468a, 0xf2b3468a, 0xd5560323, 0xd5560323, 0x12c650f6, 0x12c650f6, 0x3d6c5861, 0x3d6c5861, 0x50062423, 0x50062423, 0x2ce22983, 0x2ce22983, 0x4996bc4d, 0x4996bc4d, 0x50450525, 0x50450525, 0xe1c94312, 0xe1c94312, 0x21224aac, 0x21224aac, 0x94cbe214, 0x94cbe214, 0x4578c664, 0x38a9dbd2, 0xa9eb4c48, 0xa9eb4c48, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xbb687653, 0xbb687653, 0xa81427a7, 0xa81427a7, 0x71d7f3b, 0x71d7f3b, 0x25fea6ca, 0x25fea6ca, 0x17c19d74, 0x17c19d74, 0x4779bf48, 0x4779bf48, 0xe424e759, 0xe424e759, 0xb57fb5ae, 0xb57fb5ae, 0xd877002b, 0xd877002b, 0xdd8d7442, 0xdd8d7442, 0xe2536fde, 0xe2536fde, 0x1ebba341, 0x1ebba341, 0xef042176, 0xef042176, 0x6137f228, 0x6137f228, 0xf04a8558, 0xf04a8558, 0xff72172d, 0xff72172d, 0x5f26278f, 0x5f26278f, 0x3ed777c, 0x3ed777c, 0xb1d686e, 0xb1d686e, 0x5cead249, 0x5cead249, 0x271487f6, 0x9b7201b9, 0x6c2f147d, 0x6c2f147d, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x378dc141, 0x378dc141, 0xc7564497, 0xc7564497, 0xd20e9dba, 0xd20e9dba, 0xf84e8efb, 0xf84e8efb, 0x620d984, 0x620d984, 0x509042b4, 0x509042b4, 0x2bf32e11, 0x2bf32e11, 0x7c6fe3a0, 0x7c6fe3a0, 0x18106e6f, 0x18106e6f, 0xba983948, 0xba983948, 0xd85321cc, 0xd85321cc, 0xc22777cd, 0xc22777cd, 0x85b737c8, 0x85b737c8, 0x55590c10, 0x55590c10, 0x371ba701, 0x371ba701, 0x2da6264, 0x2da6264, 0x77c1ff46, 0x77c1ff46, 0xf2485577, 0xf2485577, 0x93e9eeeb, 0x93e9eeeb, 0x1460059, 0x1460059, 0xfbbbaa1, 0xa03c490a, 0x234dcb08, 0x234dcb08, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd803b53b, 0xd803b53b, 0x70b7ae8b, 0x70b7ae8b, 0xa20d9a15, 0xa20d9a15, 0x6113d33b, 0x6113d33b, 0xfd38d301, 0xfd38d301, 0x8b04db4, 0x8b04db4, 0xdae859df, 0xdae859df, 0x80cf138b, 0x80cf138b, 0xdfa6ef9, 0xdfa6ef9, 0x856adaf0, 0x856adaf0, 0x7023cc2d, 0x7023cc2d, 0xad7e7d54, 0xad7e7d54, 0xde8eff49, 0xde8eff49, 0x34355cc3, 0x34355cc3, 0x25adccda, 0x25adccda, 0x6d6c350d, 0x6d6c350d, 0x1c49b499, 0x1c49b499, 0x8188f1b4, 0x8188f1b4, 0x5556dc0c, 0x5556dc0c, 0xbd9ef1f5, 0xbd9ef1f5, 0x5176575b, 0x19da9ee1, 0x6e2f07c, 0x6e2f07c, }, 45 }, + { "cmdline_cat", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xed7d2809, 0xed7d2809, 0x52c14224, 0x52c14224, 0xec52d912, 0xec52d912, 0x63276ae2, 0x63276ae2, 0xeeb4bfa4, 0xeeb4bfa4, 0xdf0f1ff0, 0xdf0f1ff0, 0xe2021708, 0xe2021708, 0x67c17085, 0x67c17085, 0x646e4d78, 0x646e4d78, 0x3b15f4b6, 0x3b15f4b6, 0xf4945ac5, 0xf4945ac5, 0x6cf60c00, 0x6cf60c00, 0x126648cd, 0x126648cd, 0xe7b8e348, 0xe7b8e348, 0x1626e35f, 0x1626e35f, 0x8022976c, 0x8022976c, 0xbc7e6d22, 0xbc7e6d22, 0xa2d50ad6, 0xa2d50ad6, 0x5072fea, 0x5072fea, 0x8481a563, 0x8481a563, 0x60a95143, 0x12fda168, 0xc8fe0549, 0xc8fe0549, }, 45 }, + { "cmdline_cat", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x7dbff368, 0x7dbff368, 0x5a5bdc8d, 0x5a5bdc8d, 0x79753177, 0x79753177, 0xd01ede5b, 0xd01ede5b, 0x13708a73, 0x13708a73, 0x90186de3, 0x90186de3, 0xe63d02a2, 0xe63d02a2, 0x2c9dc262, 0x2c9dc262, 0x3eebd7b, 0x3eebd7b, 0xe8f3a5d8, 0xe8f3a5d8, 0xd38ecfe3, 0xd38ecfe3, 0x51878485, 0x51878485, 0xcbdb6d67, 0xcbdb6d67, 0xca25582, 0xca25582, 0x5bea0484, 0x5bea0484, 0x9ec5f71d, 0x9ec5f71d, 0x3f0bd7bc, 0x3f0bd7bc, 0xdbb0a5d2, 0xdbb0a5d2, 0xea710e2f, 0xea710e2f, 0xd14933fe, 0xd14933fe, 0x4906b783, 0xffd1d04b, 0xa159bdf9, 0xa159bdf9, }, 45 }, + { "cmdline_cat", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xf1546749, 0xf1546749, 0x95d30576, 0x95d30576, 0x77f13935, 0x77f13935, 0xcc296836, 0xcc296836, 0x9af42bc7, 0x9af42bc7, 0x84c23709, 0x84c23709, 0x26b5a3c5, 0x26b5a3c5, 0x52d943fb, 0x52d943fb, 0x38beda82, 0x38beda82, 0xc12306b1, 0xc12306b1, 0xed251115, 0xed251115, 0xe0099a2f, 0xe0099a2f, 0xee929157, 0xee929157, 0xd96a1169, 0xd96a1169, 0x42fac799, 0x42fac799, 0x635af416, 0x635af416, 0x8e90342f, 0x8e90342f, 0xed467cbf, 0xed467cbf, 0x999fc60b, 0x999fc60b, 0xb45d2b1f, 0xb45d2b1f, 0x7e23ccef, 0x8e988beb, 0x8783fdf8, 0x8783fdf8, }, 45 }, + { "cmdline_cat", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x50b82239, 0x50b82239, 0x82c36c12, 0x82c36c12, 0x6311208d, 0x6311208d, 0x816bd4b3, 0x816bd4b3, 0xc9281fd0, 0xc9281fd0, 0x75767bac, 0x75767bac, 0x52edeac, 0x52edeac, 0xfdb551f7, 0xfdb551f7, 0xba21cd3, 0xba21cd3, 0xf2b3468a, 0xf2b3468a, 0xd5560323, 0xd5560323, 0x12c650f6, 0x12c650f6, 0x3d6c5861, 0x3d6c5861, 0x50062423, 0x50062423, 0x2ce22983, 0x2ce22983, 0x4996bc4d, 0x4996bc4d, 0x50450525, 0x50450525, 0xe1c94312, 0xe1c94312, 0x21224aac, 0x21224aac, 0x94cbe214, 0x94cbe214, 0x4578c664, 0x38a9dbd2, 0xa9eb4c48, 0xa9eb4c48, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x93fbd3a3, 0x93fbd3a3, 0x1617bee0, 0x1617bee0, 0x4bfbae7f, 0x4bfbae7f, 0xa3558248, 0xa3558248, 0xaf468a11, 0xaf468a11, 0x68ac5986, 0x68ac5986, 0xd8065600, 0xd8065600, 0xef6c6222, 0xef6c6222, 0x1a04371, 0x1a04371, 0xc92981b6, 0xc92981b6, 0x53f9bfc8, 0x53f9bfc8, 0xfef01300, 0xfef01300, 0xce753805, 0xce753805, 0x858f6540, 0x858f6540, 0x6429dae4, 0x6429dae4, 0x19222aa5, 0x19222aa5, 0x3f9a0303, 0x3f9a0303, 0x978a47da, 0x978a47da, 0x6bf7f199, 0x6bf7f199, 0x97dab6d, 0x97dab6d, 0xeb643dbd, 0x9fe6a006, 0x2b7a0b5b, 0x2b7a0b5b, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe8381636, 0xe8381636, 0x977b32f5, 0x977b32f5, 0x54bb62c1, 0x54bb62c1, 0xe26211f2, 0xe26211f2, 0xb0d0aca3, 0xb0d0aca3, 0x8d1f7491, 0x8d1f7491, 0x261a3820, 0x261a3820, 0x571c16d3, 0x571c16d3, 0xdc5fb880, 0xdc5fb880, 0xc8b086fe, 0xc8b086fe, 0x55b07770, 0x55b07770, 0x1d5e160, 0x1d5e160, 0x5e5dddc8, 0x5e5dddc8, 0xceeaa332, 0xceeaa332, 0x81c9d3f3, 0x81c9d3f3, 0xa6bbab67, 0xa6bbab67, 0x9366a264, 0x9366a264, 0x4bcbc84c, 0x4bcbc84c, 0x8aacda73, 0x8aacda73, 0x356159d0, 0x356159d0, 0x74872545, 0x5a28a86f, 0x3a1f5494, 0x3a1f5494, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xccbd401, 0xccbd401, 0x35859629, 0x35859629, 0x269f013b, 0x269f013b, 0xe8c8196, 0xe8c8196, 0x95e2849c, 0x95e2849c, 0xb2019543, 0xb2019543, 0xf739b6c9, 0xf739b6c9, 0xd8227519, 0xd8227519, 0x6b1ae8cf, 0x6b1ae8cf, 0x84fbe9b2, 0x84fbe9b2, 0xed69a305, 0xed69a305, 0x15f4f0cf, 0x15f4f0cf, 0x57ce0973, 0x57ce0973, 0x3f5b0b97, 0x3f5b0b97, 0xc3e87bef, 0xc3e87bef, 0x3ac7584b, 0x3ac7584b, 0xdb95f2c7, 0xdb95f2c7, 0xc1942d4c, 0xc1942d4c, 0x17e9634e, 0x17e9634e, 0xd8dd41a3, 0xd8dd41a3, 0x927a8a2f, 0x339d3240, 0x398e6a2a, 0x398e6a2a, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xa06498a0, 0xa06498a0, 0xd1336ad7, 0xd1336ad7, 0x68c888e0, 0x68c888e0, 0xf01fb74, 0xf01fb74, 0x6b743235, 0x6b743235, 0xe7b71a49, 0xe7b71a49, 0x798da4d7, 0x798da4d7, 0x5398f44b, 0x5398f44b, 0x4794ee5e, 0x4794ee5e, 0x61c2cb0d, 0x61c2cb0d, 0xad3fcef3, 0xad3fcef3, 0xd9b6f291, 0xd9b6f291, 0xbaf0962d, 0xbaf0962d, 0x11848b9e, 0x11848b9e, 0xb8f3d2bf, 0xb8f3d2bf, 0x3f9978, 0x3f9978, 0xafd76c24, 0xafd76c24, 0xee0b9b9e, 0xee0b9b9e, 0x1f80451e, 0x1f80451e, 0x817e030a, 0x817e030a, 0x64ee9a5d, 0x1d187aed, 0xb2c05a4a, 0xb2c05a4a, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x95c83b7d, 0x95c83b7d, 0xb8cac2b5, 0xb8cac2b5, 0xf0ef977f, 0xf0ef977f, 0xc4640770, 0xc4640770, 0x8ea8595e, 0x8ea8595e, 0xc7d26302, 0xc7d26302, 0x6f756fbc, 0x6f756fbc, 0x68bc6258, 0x68bc6258, 0xe77cff10, 0xe77cff10, 0x835ae8e5, 0x835ae8e5, 0x622cfc05, 0x622cfc05, 0xe192499f, 0xe192499f, 0x3b976218, 0x3b976218, 0xe2dcd75, 0xe2dcd75, 0xed05eae8, 0xed05eae8, 0xc0b8ee9a, 0xc0b8ee9a, 0x255ec66a, 0x255ec66a, 0x3391d9b6, 0x3391d9b6, 0x779834b3, 0x779834b3, 0xdf77a37f, 0xdf77a37f, 0xd3cc8a1d, 0xfec30b6e, 0x884fa360, 0x884fa360, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x698515fa, 0x698515fa, 0xc313ebe6, 0xc313ebe6, 0x32b9228f, 0x32b9228f, 0xa58d78e8, 0xa58d78e8, 0xf41d5153, 0xf41d5153, 0xdfa3af16, 0xdfa3af16, 0xd4a68422, 0xd4a68422, 0xa7ea67e0, 0xa7ea67e0, 0xaee4c8f6, 0xaee4c8f6, 0x78ddd8aa, 0x78ddd8aa, 0xe662b827, 0xe662b827, 0x190ab892, 0x190ab892, 0x7c1e04ab, 0x7c1e04ab, 0xae4e2ed2, 0xae4e2ed2, 0x9ac52f8d, 0x9ac52f8d, 0x7e7b6776, 0x7e7b6776, 0x21c37700, 0x21c37700, 0x4fc11e7c, 0x4fc11e7c, 0x612a17d, 0x612a17d, 0x1f549440, 0x1f549440, 0xd6ce5af0, 0x2751d45f, 0x41e24797, 0x41e24797, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x7a06e04b, 0x7a06e04b, 0x122f59ab, 0x122f59ab, 0x993a50b9, 0x993a50b9, 0x5545f8f, 0x5545f8f, 0xcdd2b587, 0xcdd2b587, 0x18bec138, 0x18bec138, 0xa9b4345d, 0xa9b4345d, 0x92c6eb1c, 0x92c6eb1c, 0x2aa44d63, 0x2aa44d63, 0xc9e7b549, 0xc9e7b549, 0x24732d85, 0x24732d85, 0xeedce06, 0xeedce06, 0x69a732a1, 0x69a732a1, 0xc53906e5, 0xc53906e5, 0x306e0f4b, 0x306e0f4b, 0x895e6f09, 0x895e6f09, 0x27f1c24e, 0x27f1c24e, 0x76a2b606, 0x76a2b606, 0x9fdd1ff3, 0x9fdd1ff3, 0x408d0a19, 0x408d0a19, 0xc9b3f877, 0xce19a637, 0x8cfd7321, 0x8cfd7321, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x9fa21cbe, 0x9fa21cbe, 0xa9ad84e6, 0xa9ad84e6, 0x4f4ccbc, 0x4f4ccbc, 0x6a4f5fda, 0x6a4f5fda, 0x4d4ccb50, 0x4d4ccb50, 0xb854236c, 0xb854236c, 0x990a5b4a, 0x990a5b4a, 0xa9dba8c8, 0xa9dba8c8, 0xe12b4ca1, 0xe12b4ca1, 0x4200ebc0, 0x4200ebc0, 0x86a931cf, 0x86a931cf, 0xda3a178, 0xda3a178, 0x2739917d, 0x2739917d, 0x48005e41, 0x48005e41, 0x550a94ac, 0x550a94ac, 0x73f363b6, 0x73f363b6, 0x4811082a, 0x4811082a, 0xdc025f10, 0xdc025f10, 0x4f18937e, 0x4f18937e, 0xa3749fd8, 0xa3749fd8, 0x93ce5c0b, 0xdddd4de6, 0x97f43654, 0x97f43654, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x7d9b5dd7, 0x7d9b5dd7, 0x42e1176a, 0x42e1176a, 0x7e2da576, 0x7e2da576, 0xd5a8afa, 0xd5a8afa, 0x3eb2146b, 0x3eb2146b, 0x60d9b3, 0x60d9b3, 0xb893f5ca, 0xb893f5ca, 0xd431b2bf, 0xd431b2bf, 0x8ea1b6a6, 0x8ea1b6a6, 0x4d730ad0, 0x4d730ad0, 0x28d1888b, 0x28d1888b, 0x6d8c3672, 0x6d8c3672, 0x65dec2dd, 0x65dec2dd, 0x9d7c6d99, 0x9d7c6d99, 0xdfcd1eba, 0xdfcd1eba, 0xed4fb650, 0xed4fb650, 0xd9f1574c, 0xd9f1574c, 0x2b05a17e, 0x2b05a17e, 0x64e652f5, 0x64e652f5, 0x5f83fdb1, 0x5f83fdb1, 0x7918b180, 0xf54e3c4a, 0xe26cf2de, 0xe26cf2de, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x93fbd3a3, 0x93fbd3a3, 0x1617bee0, 0x1617bee0, 0x4bfbae7f, 0x4bfbae7f, 0xa3558248, 0xa3558248, 0xaf468a11, 0xaf468a11, 0x68ac5986, 0x68ac5986, 0xd8065600, 0xd8065600, 0xef6c6222, 0xef6c6222, 0x1a04371, 0x1a04371, 0xc92981b6, 0xc92981b6, 0x53f9bfc8, 0x53f9bfc8, 0xfef01300, 0xfef01300, 0xce753805, 0xce753805, 0x858f6540, 0x858f6540, 0x6429dae4, 0x6429dae4, 0x19222aa5, 0x19222aa5, 0x3f9a0303, 0x3f9a0303, 0x978a47da, 0x978a47da, 0x6bf7f199, 0x6bf7f199, 0x97dab6d, 0x97dab6d, 0xeb643dbd, 0x9fe6a006, 0x2b7a0b5b, 0x2b7a0b5b, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xe8381636, 0xe8381636, 0x977b32f5, 0x977b32f5, 0x54bb62c1, 0x54bb62c1, 0xe26211f2, 0xe26211f2, 0xb0d0aca3, 0xb0d0aca3, 0x8d1f7491, 0x8d1f7491, 0x261a3820, 0x261a3820, 0x571c16d3, 0x571c16d3, 0xdc5fb880, 0xdc5fb880, 0xc8b086fe, 0xc8b086fe, 0x55b07770, 0x55b07770, 0x1d5e160, 0x1d5e160, 0x5e5dddc8, 0x5e5dddc8, 0xceeaa332, 0xceeaa332, 0x81c9d3f3, 0x81c9d3f3, 0xa6bbab67, 0xa6bbab67, 0x9366a264, 0x9366a264, 0x4bcbc84c, 0x4bcbc84c, 0x8aacda73, 0x8aacda73, 0x356159d0, 0x356159d0, 0x74872545, 0x5a28a86f, 0x3a1f5494, 0x3a1f5494, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xccbd401, 0xccbd401, 0x35859629, 0x35859629, 0x269f013b, 0x269f013b, 0xe8c8196, 0xe8c8196, 0x95e2849c, 0x95e2849c, 0xb2019543, 0xb2019543, 0xf739b6c9, 0xf739b6c9, 0xd8227519, 0xd8227519, 0x6b1ae8cf, 0x6b1ae8cf, 0x84fbe9b2, 0x84fbe9b2, 0xed69a305, 0xed69a305, 0x15f4f0cf, 0x15f4f0cf, 0x57ce0973, 0x57ce0973, 0x3f5b0b97, 0x3f5b0b97, 0xc3e87bef, 0xc3e87bef, 0x3ac7584b, 0x3ac7584b, 0xdb95f2c7, 0xdb95f2c7, 0xc1942d4c, 0xc1942d4c, 0x17e9634e, 0x17e9634e, 0xd8dd41a3, 0xd8dd41a3, 0x927a8a2f, 0x339d3240, 0x398e6a2a, 0x398e6a2a, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xa06498a0, 0xa06498a0, 0xd1336ad7, 0xd1336ad7, 0x68c888e0, 0x68c888e0, 0xf01fb74, 0xf01fb74, 0x6b743235, 0x6b743235, 0xe7b71a49, 0xe7b71a49, 0x798da4d7, 0x798da4d7, 0x5398f44b, 0x5398f44b, 0x4794ee5e, 0x4794ee5e, 0x61c2cb0d, 0x61c2cb0d, 0xad3fcef3, 0xad3fcef3, 0xd9b6f291, 0xd9b6f291, 0xbaf0962d, 0xbaf0962d, 0x11848b9e, 0x11848b9e, 0xb8f3d2bf, 0xb8f3d2bf, 0x3f9978, 0x3f9978, 0xafd76c24, 0xafd76c24, 0xee0b9b9e, 0xee0b9b9e, 0x1f80451e, 0x1f80451e, 0x817e030a, 0x817e030a, 0x64ee9a5d, 0x1d187aed, 0xb2c05a4a, 0xb2c05a4a, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x95c83b7d, 0x95c83b7d, 0xb8cac2b5, 0xb8cac2b5, 0xf0ef977f, 0xf0ef977f, 0xc4640770, 0xc4640770, 0x8ea8595e, 0x8ea8595e, 0xc7d26302, 0xc7d26302, 0x6f756fbc, 0x6f756fbc, 0x68bc6258, 0x68bc6258, 0xe77cff10, 0xe77cff10, 0x835ae8e5, 0x835ae8e5, 0x622cfc05, 0x622cfc05, 0xe192499f, 0xe192499f, 0x3b976218, 0x3b976218, 0xe2dcd75, 0xe2dcd75, 0xed05eae8, 0xed05eae8, 0xc0b8ee9a, 0xc0b8ee9a, 0x255ec66a, 0x255ec66a, 0x3391d9b6, 0x3391d9b6, 0x779834b3, 0x779834b3, 0xdf77a37f, 0xdf77a37f, 0xd3cc8a1d, 0xfec30b6e, 0x884fa360, 0x884fa360, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x698515fa, 0x698515fa, 0xc313ebe6, 0xc313ebe6, 0x32b9228f, 0x32b9228f, 0xa58d78e8, 0xa58d78e8, 0xf41d5153, 0xf41d5153, 0xdfa3af16, 0xdfa3af16, 0xd4a68422, 0xd4a68422, 0xa7ea67e0, 0xa7ea67e0, 0xaee4c8f6, 0xaee4c8f6, 0x78ddd8aa, 0x78ddd8aa, 0xe662b827, 0xe662b827, 0x190ab892, 0x190ab892, 0x7c1e04ab, 0x7c1e04ab, 0xae4e2ed2, 0xae4e2ed2, 0x9ac52f8d, 0x9ac52f8d, 0x7e7b6776, 0x7e7b6776, 0x21c37700, 0x21c37700, 0x4fc11e7c, 0x4fc11e7c, 0x612a17d, 0x612a17d, 0x1f549440, 0x1f549440, 0xd6ce5af0, 0x2751d45f, 0x41e24797, 0x41e24797, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x7a06e04b, 0x7a06e04b, 0x122f59ab, 0x122f59ab, 0x993a50b9, 0x993a50b9, 0x5545f8f, 0x5545f8f, 0xcdd2b587, 0xcdd2b587, 0x18bec138, 0x18bec138, 0xa9b4345d, 0xa9b4345d, 0x92c6eb1c, 0x92c6eb1c, 0x2aa44d63, 0x2aa44d63, 0xc9e7b549, 0xc9e7b549, 0x24732d85, 0x24732d85, 0xeedce06, 0xeedce06, 0x69a732a1, 0x69a732a1, 0xc53906e5, 0xc53906e5, 0x306e0f4b, 0x306e0f4b, 0x895e6f09, 0x895e6f09, 0x27f1c24e, 0x27f1c24e, 0x76a2b606, 0x76a2b606, 0x9fdd1ff3, 0x9fdd1ff3, 0x408d0a19, 0x408d0a19, 0xc9b3f877, 0xce19a637, 0x8cfd7321, 0x8cfd7321, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x9fa21cbe, 0x9fa21cbe, 0xa9ad84e6, 0xa9ad84e6, 0x4f4ccbc, 0x4f4ccbc, 0x6a4f5fda, 0x6a4f5fda, 0x4d4ccb50, 0x4d4ccb50, 0xb854236c, 0xb854236c, 0x990a5b4a, 0x990a5b4a, 0xa9dba8c8, 0xa9dba8c8, 0xe12b4ca1, 0xe12b4ca1, 0x4200ebc0, 0x4200ebc0, 0x86a931cf, 0x86a931cf, 0xda3a178, 0xda3a178, 0x2739917d, 0x2739917d, 0x48005e41, 0x48005e41, 0x550a94ac, 0x550a94ac, 0x73f363b6, 0x73f363b6, 0x4811082a, 0x4811082a, 0xdc025f10, 0xdc025f10, 0x4f18937e, 0x4f18937e, 0xa3749fd8, 0xa3749fd8, 0x93ce5c0b, 0xdddd4de6, 0x97f43654, 0x97f43654, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x7d9b5dd7, 0x7d9b5dd7, 0x42e1176a, 0x42e1176a, 0x7e2da576, 0x7e2da576, 0xd5a8afa, 0xd5a8afa, 0x3eb2146b, 0x3eb2146b, 0x60d9b3, 0x60d9b3, 0xb893f5ca, 0xb893f5ca, 0xd431b2bf, 0xd431b2bf, 0x8ea1b6a6, 0x8ea1b6a6, 0x4d730ad0, 0x4d730ad0, 0x28d1888b, 0x28d1888b, 0x6d8c3672, 0x6d8c3672, 0x65dec2dd, 0x65dec2dd, 0x9d7c6d99, 0x9d7c6d99, 0xdfcd1eba, 0xdfcd1eba, 0xed4fb650, 0xed4fb650, 0xd9f1574c, 0xd9f1574c, 0x2b05a17e, 0x2b05a17e, 0x64e652f5, 0x64e652f5, 0x5f83fdb1, 0x5f83fdb1, 0x7918b180, 0xf54e3c4a, 0xe26cf2de, 0xe26cf2de, }, 45 }, + { "cmdline_cat", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xbb687653, 0xbb687653, 0xa81427a7, 0xa81427a7, 0x71d7f3b, 0x71d7f3b, 0x25fea6ca, 0x25fea6ca, 0x17c19d74, 0x17c19d74, 0x4779bf48, 0x4779bf48, 0xe424e759, 0xe424e759, 0xb57fb5ae, 0xb57fb5ae, 0xd877002b, 0xd877002b, 0xdd8d7442, 0xdd8d7442, 0xe2536fde, 0xe2536fde, 0x1ebba341, 0x1ebba341, 0xef042176, 0xef042176, 0x6137f228, 0x6137f228, 0xf04a8558, 0xf04a8558, 0xff72172d, 0xff72172d, 0x5f26278f, 0x5f26278f, 0x3ed777c, 0x3ed777c, 0xb1d686e, 0xb1d686e, 0x5cead249, 0x5cead249, 0x271487f6, 0x9b7201b9, 0x6c2f147d, 0x6c2f147d, }, 45 }, + { "cmdline_cat", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x378dc141, 0x378dc141, 0xc7564497, 0xc7564497, 0xd20e9dba, 0xd20e9dba, 0xf84e8efb, 0xf84e8efb, 0x620d984, 0x620d984, 0x509042b4, 0x509042b4, 0x2bf32e11, 0x2bf32e11, 0x7c6fe3a0, 0x7c6fe3a0, 0x18106e6f, 0x18106e6f, 0xba983948, 0xba983948, 0xd85321cc, 0xd85321cc, 0xc22777cd, 0xc22777cd, 0x85b737c8, 0x85b737c8, 0x55590c10, 0x55590c10, 0x371ba701, 0x371ba701, 0x2da6264, 0x2da6264, 0x77c1ff46, 0x77c1ff46, 0xf2485577, 0xf2485577, 0x93e9eeeb, 0x93e9eeeb, 0x1460059, 0x1460059, 0xfbbbaa1, 0xa03c490a, 0x234dcb08, 0x234dcb08, }, 45 }, + { "cmdline_cat", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd803b53b, 0xd803b53b, 0x70b7ae8b, 0x70b7ae8b, 0xa20d9a15, 0xa20d9a15, 0x6113d33b, 0x6113d33b, 0xfd38d301, 0xfd38d301, 0x8b04db4, 0x8b04db4, 0xdae859df, 0xdae859df, 0x80cf138b, 0x80cf138b, 0xdfa6ef9, 0xdfa6ef9, 0x856adaf0, 0x856adaf0, 0x7023cc2d, 0x7023cc2d, 0xad7e7d54, 0xad7e7d54, 0xde8eff49, 0xde8eff49, 0x34355cc3, 0x34355cc3, 0x25adccda, 0x25adccda, 0x6d6c350d, 0x6d6c350d, 0x1c49b499, 0x1c49b499, 0x8188f1b4, 0x8188f1b4, 0x5556dc0c, 0x5556dc0c, 0xbd9ef1f5, 0xbd9ef1f5, 0x5176575b, 0x19da9ee1, 0x6e2f07c, 0x6e2f07c, }, 45 }, + { "gfxterm_menu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xc5faf369, 0x64eb297a, 0xc5faf369, 0x860c3e2e, 0x59c36f00, 0x59c36f00, 0xc8b88a82, 0xc8b88a82, 0xc8b88a82, 0xb638e7e4, 0xb638e7e4, 0xb638e7e4, 0x751ada29, 0x751ada29, 0x751ada29, 0x59c36f00, 0x860c3e2e, 0x860c3e2e, 0x59c36f00, }, 20 }, + { "gfxterm_menu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xd50b0276, 0x23b87c98, 0xd50b0276, 0xfb0e8709, 0xaa4593fe, 0xaa4593fe, 0x8b63f19d, 0x8b63f19d, 0x8b63f19d, 0x2d96fcfa, 0x2d96fcfa, 0x2d96fcfa, 0xaf311e91, 0xaf311e91, 0xaf311e91, 0xaa4593fe, 0xfb0e8709, 0xfb0e8709, 0xaa4593fe, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x353bd15d, 0x79836ff2, 0x353bd15d, 0x682cbcd9, 0xc9cbf769, 0xc9cbf769, 0xec23555f, 0xec23555f, 0xec23555f, 0x12fb9493, 0x12fb9493, 0x12fb9493, 0xfaad3b9f, 0xfaad3b9f, 0xfaad3b9f, 0xc9cbf769, 0x682cbcd9, 0x682cbcd9, 0xc9cbf769, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x22bcc2fc, 0xc6c23ab4, 0x22bcc2fc, 0x72a46652, 0x9813a416, 0x9813a416, 0xc10419e0, 0xc10419e0, 0xc10419e0, 0x50df9fd3, 0x50df9fd3, 0x50df9fd3, 0xccaa6a11, 0xccaa6a11, 0xccaa6a11, 0x9813a416, 0x72a46652, 0x72a46652, 0x9813a416, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x3afb9165, 0x767dd6a7, 0x3afb9165, 0x31409f, 0x5fcf013d, 0x5fcf013d, 0x77ba65ab, 0x77ba65ab, 0x77ba65ab, 0xa5aa7ddd, 0xa5aa7ddd, 0xa5aa7ddd, 0xba81fc20, 0xba81fc20, 0xba81fc20, 0x5fcf013d, 0x31409f, 0x31409f, 0x5fcf013d, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xe13f0039, 0xb5783cd1, 0xe13f0039, 0x814ca453, 0xdd28f52b, 0xdd28f52b, 0xbc36f156, 0xbc36f156, 0xbc36f156, 0x9d0a08b2, 0x9d0a08b2, 0x9d0a08b2, 0x877b6b23, 0x877b6b23, 0x877b6b23, 0xdd28f52b, 0x814ca453, 0x814ca453, 0xdd28f52b, }, 20 }, + { "gfxterm_menu", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x154ac813, 0x5c191673, 0x154ac813, 0xeb0cc57e, 0x43d1f34, 0x43d1f34, 0xd204ac75, 0xd204ac75, 0xd204ac75, 0xad0e05dd, 0xad0e05dd, 0xad0e05dd, 0x452e3cf4, 0x452e3cf4, 0x452e3cf4, 0x43d1f34, 0xeb0cc57e, 0xeb0cc57e, 0x43d1f34, }, 20 }, + { "gfxterm_menu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xc5faf369, 0x64eb297a, 0xc5faf369, 0x860c3e2e, 0x59c36f00, 0x59c36f00, 0xc8b88a82, 0xc8b88a82, 0xc8b88a82, 0xb638e7e4, 0xb638e7e4, 0xb638e7e4, 0x751ada29, 0x751ada29, 0x751ada29, 0x59c36f00, 0x860c3e2e, 0x860c3e2e, 0x59c36f00, }, 20 }, + { "gfxterm_menu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xd50b0276, 0x23b87c98, 0xd50b0276, 0xfb0e8709, 0xaa4593fe, 0xaa4593fe, 0x8b63f19d, 0x8b63f19d, 0x8b63f19d, 0x2d96fcfa, 0x2d96fcfa, 0x2d96fcfa, 0xaf311e91, 0xaf311e91, 0xaf311e91, 0xaa4593fe, 0xfb0e8709, 0xfb0e8709, 0xaa4593fe, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x353bd15d, 0x79836ff2, 0x353bd15d, 0x682cbcd9, 0xc9cbf769, 0xc9cbf769, 0xec23555f, 0xec23555f, 0xec23555f, 0x12fb9493, 0x12fb9493, 0x12fb9493, 0xfaad3b9f, 0xfaad3b9f, 0xfaad3b9f, 0xc9cbf769, 0x682cbcd9, 0x682cbcd9, 0xc9cbf769, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe967dfb6, 0x7fedccee, 0xe967dfb6, 0xad6c250a, 0x5387d57f, 0x5387d57f, 0x71381c6, 0x71381c6, 0x71381c6, 0xc74aed0a, 0xc74aed0a, 0xc74aed0a, 0x20946f9c, 0x20946f9c, 0x20946f9c, 0x5387d57f, 0xad6c250a, 0xad6c250a, 0x5387d57f, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x985bd9b5, 0xd5604814, 0x985bd9b5, 0x2233942a, 0xf83ee7aa, 0xf83ee7aa, 0x610deea9, 0x610deea9, 0x610deea9, 0xfd743e5a, 0xfd743e5a, 0xfd743e5a, 0xc5c795f2, 0xc5c795f2, 0xc5c795f2, 0xf83ee7aa, 0x2233942a, 0x2233942a, 0xf83ee7aa, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x928c0a8e, 0xd25dcf03, 0x928c0a8e, 0x83f9bfdb, 0x724366e5, 0x724366e5, 0xdbb2f05a, 0xdbb2f05a, 0xdbb2f05a, 0x9c8bb2a0, 0x9c8bb2a0, 0x9c8bb2a0, 0xf1a595ea, 0xf1a595ea, 0xf1a595ea, 0x724366e5, 0x83f9bfdb, 0x83f9bfdb, 0x724366e5, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x116c0258, 0xed7d4786, 0x116c0258, 0xfef8bf61, 0x5387d57f, 0x5387d57f, 0x23c74007, 0x23c74007, 0x23c74007, 0xfd090fda, 0xfd090fda, 0xfd090fda, 0x6e8a9dc4, 0x6e8a9dc4, 0x6e8a9dc4, 0x5387d57f, 0xfef8bf61, 0xfef8bf61, 0x5387d57f, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd49b1c35, 0x37f70b09, 0xd49b1c35, 0xa55122d9, 0xf83ee7aa, 0xf83ee7aa, 0xa5fd8afa, 0xa5fd8afa, 0xa5fd8afa, 0xd72799ca, 0xd72799ca, 0xd72799ca, 0xe6b2c80c, 0xe6b2c80c, 0xe6b2c80c, 0xf83ee7aa, 0xa55122d9, 0xa55122d9, 0xf83ee7aa, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x2b3f0273, 0x6da0f134, 0x2b3f0273, 0xd9ed8903, 0x724366e5, 0x724366e5, 0xd0002838, 0xd0002838, 0xd0002838, 0x8990db68, 0x8990db68, 0x8990db68, 0x4127b52a, 0x4127b52a, 0x4127b52a, 0x724366e5, 0xd9ed8903, 0xd9ed8903, 0x724366e5, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x1e6b0284, 0x18f0ad39, 0x1e6b0284, 0x1e0bba22, 0x1c955882, 0x1c955882, 0x727420bf, 0x727420bf, 0x727420bf, 0xbd836d28, 0xbd836d28, 0xbd836d28, 0x43ea613d, 0x43ea613d, 0x43ea613d, 0x1c955882, 0x1e0bba22, 0x1e0bba22, 0x1c955882, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x1f279ca1, 0x976cb6e3, 0x1f279ca1, 0xdb3505a5, 0x4d266f7a, 0x4d266f7a, 0xc23ec599, 0xc23ec599, 0xc23ec599, 0x2449de26, 0x2449de26, 0x2449de26, 0xbc708ab6, 0xbc708ab6, 0xbc708ab6, 0x4d266f7a, 0xdb3505a5, 0xdb3505a5, 0x4d266f7a, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x21235dde, 0x13b8b442, 0x21235dde, 0xbdd75c39, 0x1ed9d731, 0x1ed9d731, 0x6ea8026e, 0x6ea8026e, 0x6ea8026e, 0xc0cc1cab, 0xc0cc1cab, 0xc0cc1cab, 0xe3a50d1d, 0xe3a50d1d, 0xe3a50d1d, 0x1ed9d731, 0xbdd75c39, 0xbdd75c39, 0x1ed9d731, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe967dfb6, 0x7fedccee, 0xe967dfb6, 0xad6c250a, 0x5387d57f, 0x5387d57f, 0x71381c6, 0x71381c6, 0x71381c6, 0xc74aed0a, 0xc74aed0a, 0xc74aed0a, 0x20946f9c, 0x20946f9c, 0x20946f9c, 0x5387d57f, 0xad6c250a, 0xad6c250a, 0x5387d57f, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x985bd9b5, 0xd5604814, 0x985bd9b5, 0x2233942a, 0xf83ee7aa, 0xf83ee7aa, 0x610deea9, 0x610deea9, 0x610deea9, 0xfd743e5a, 0xfd743e5a, 0xfd743e5a, 0xc5c795f2, 0xc5c795f2, 0xc5c795f2, 0xf83ee7aa, 0x2233942a, 0x2233942a, 0xf83ee7aa, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x928c0a8e, 0xd25dcf03, 0x928c0a8e, 0x83f9bfdb, 0x724366e5, 0x724366e5, 0xdbb2f05a, 0xdbb2f05a, 0xdbb2f05a, 0x9c8bb2a0, 0x9c8bb2a0, 0x9c8bb2a0, 0xf1a595ea, 0xf1a595ea, 0xf1a595ea, 0x724366e5, 0x83f9bfdb, 0x83f9bfdb, 0x724366e5, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x116c0258, 0xed7d4786, 0x116c0258, 0xfef8bf61, 0x5387d57f, 0x5387d57f, 0x23c74007, 0x23c74007, 0x23c74007, 0xfd090fda, 0xfd090fda, 0xfd090fda, 0x6e8a9dc4, 0x6e8a9dc4, 0x6e8a9dc4, 0x5387d57f, 0xfef8bf61, 0xfef8bf61, 0x5387d57f, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xd49b1c35, 0x37f70b09, 0xd49b1c35, 0xa55122d9, 0xf83ee7aa, 0xf83ee7aa, 0xa5fd8afa, 0xa5fd8afa, 0xa5fd8afa, 0xd72799ca, 0xd72799ca, 0xd72799ca, 0xe6b2c80c, 0xe6b2c80c, 0xe6b2c80c, 0xf83ee7aa, 0xa55122d9, 0xa55122d9, 0xf83ee7aa, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x2b3f0273, 0x6da0f134, 0x2b3f0273, 0xd9ed8903, 0x724366e5, 0x724366e5, 0xd0002838, 0xd0002838, 0xd0002838, 0x8990db68, 0x8990db68, 0x8990db68, 0x4127b52a, 0x4127b52a, 0x4127b52a, 0x724366e5, 0xd9ed8903, 0xd9ed8903, 0x724366e5, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x1e6b0284, 0x18f0ad39, 0x1e6b0284, 0x1e0bba22, 0x1c955882, 0x1c955882, 0x727420bf, 0x727420bf, 0x727420bf, 0xbd836d28, 0xbd836d28, 0xbd836d28, 0x43ea613d, 0x43ea613d, 0x43ea613d, 0x1c955882, 0x1e0bba22, 0x1e0bba22, 0x1c955882, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x1f279ca1, 0x976cb6e3, 0x1f279ca1, 0xdb3505a5, 0x4d266f7a, 0x4d266f7a, 0xc23ec599, 0xc23ec599, 0xc23ec599, 0x2449de26, 0x2449de26, 0x2449de26, 0xbc708ab6, 0xbc708ab6, 0xbc708ab6, 0x4d266f7a, 0xdb3505a5, 0xdb3505a5, 0x4d266f7a, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x21235dde, 0x13b8b442, 0x21235dde, 0xbdd75c39, 0x1ed9d731, 0x1ed9d731, 0x6ea8026e, 0x6ea8026e, 0x6ea8026e, 0xc0cc1cab, 0xc0cc1cab, 0xc0cc1cab, 0xe3a50d1d, 0xe3a50d1d, 0xe3a50d1d, 0x1ed9d731, 0xbdd75c39, 0xbdd75c39, 0x1ed9d731, }, 20 }, + { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x22bcc2fc, 0xc6c23ab4, 0x22bcc2fc, 0x72a46652, 0x9813a416, 0x9813a416, 0xc10419e0, 0xc10419e0, 0xc10419e0, 0x50df9fd3, 0x50df9fd3, 0x50df9fd3, 0xccaa6a11, 0xccaa6a11, 0xccaa6a11, 0x9813a416, 0x72a46652, 0x72a46652, 0x9813a416, }, 20 }, + { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x3afb9165, 0x767dd6a7, 0x3afb9165, 0x31409f, 0x5fcf013d, 0x5fcf013d, 0x77ba65ab, 0x77ba65ab, 0x77ba65ab, 0xa5aa7ddd, 0xa5aa7ddd, 0xa5aa7ddd, 0xba81fc20, 0xba81fc20, 0xba81fc20, 0x5fcf013d, 0x31409f, 0x31409f, 0x5fcf013d, }, 20 }, + { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xe13f0039, 0xb5783cd1, 0xe13f0039, 0x814ca453, 0xdd28f52b, 0xdd28f52b, 0xbc36f156, 0xbc36f156, 0xbc36f156, 0x9d0a08b2, 0x9d0a08b2, 0x9d0a08b2, 0x877b6b23, 0x877b6b23, 0x877b6b23, 0xdd28f52b, 0x814ca453, 0x814ca453, 0xdd28f52b, }, 20 }, + { "gfxmenu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x28e6b07d, 0xf54b3d6a, 0x28e6b07d, 0x7d0bdbfb, 0x9a2e0d26, 0xb22b0963, 0xb22b0963, 0xb22b0963, 0xeef3ffa3, 0xeef3ffa3, 0xeef3ffa3, 0x36f73b6, 0x36f73b6, 0x36f73b6, 0x59c36f00, 0x7d0bdbfb, 0x7d0bdbfb, }, 18 }, + { "gfxmenu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x15bb581c, 0x7da084c6, 0x15bb581c, 0xcedba42f, 0xbc06c96d, 0xb3a8a15b, 0xb3a8a15b, 0xb3a8a15b, 0xe6f70b51, 0xe6f70b51, 0xe6f70b51, 0x8ce38109, 0x8ce38109, 0x8ce38109, 0xaa4593fe, 0xcedba42f, 0xcedba42f, }, 18 }, + { "gfxmenu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x817e5fe2, 0x134e87ff, 0x817e5fe2, 0xb83ddd98, 0xdcd8c986, 0x79244533, 0x79244533, 0x79244533, 0x69ae3a7, 0x69ae3a7, 0x69ae3a7, 0xfc10b74f, 0xfc10b74f, 0xfc10b74f, 0xc9cbf769, 0xb83ddd98, 0xb83ddd98, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x95048302, 0x9f5bac7c, 0x95048302, 0x28413b7c, 0x740d78cf, 0x620e8524, 0x620e8524, 0x620e8524, 0x89ab6f58, 0x89ab6f58, 0x89ab6f58, 0x90218e3d, 0x90218e3d, 0x90218e3d, 0x1c3742c9, 0x28413b7c, 0x28413b7c, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x6cf38a7e, 0x35fcd6e8, 0x6cf38a7e, 0x618c203c, 0xe925e70d, 0xff9c8a81, 0xff9c8a81, 0xff9c8a81, 0x90d55690, 0x90d55690, 0x90d55690, 0xd3df13a0, 0xd3df13a0, 0xd3df13a0, 0xcc5a7bed, 0x618c203c, 0x618c203c, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xef4a3312, 0xd610d630, 0x98774981, 0xd610d630, 0x4469957c, 0x9869130b, 0xfb592a0d, 0xfb592a0d, 0xfb592a0d, 0x3deb6e13, 0x3deb6e13, 0x3deb6e13, 0xeaf96ec4, 0xeaf96ec4, 0xeaf96ec4, 0xef4a3312, 0x4469957c, 0x4469957c, }, 18 }, + { "gfxmenu", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x54e48d80, 0xf5c7a904, 0xaf9e8139, 0xf5c7a904, 0xf108ef6b, 0x91c7d0fe, 0xb57ab567, 0xb57ab567, 0xb57ab567, 0x348943b6, 0x348943b6, 0x348943b6, 0x9b076791, 0x9b076791, 0x9b076791, 0x54e48d80, 0xf108ef6b, 0xf108ef6b, }, 18 }, + { "gfxmenu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xff8ab96b, 0x72a93e7f, 0xff8ab96b, 0x47d54a82, 0x42b837cf, 0x6abd338a, 0x6abd338a, 0x6abd338a, 0x3665c54a, 0x3665c54a, 0x3665c54a, 0xdbf9495f, 0xdbf9495f, 0xdbf9495f, 0x59c36f00, 0x47d54a82, 0x47d54a82, }, 18 }, + { "gfxmenu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x73ad05f, 0x8434d91c, 0x73ad05f, 0x5316d3c6, 0xd7e75590, 0xd8493da6, 0xd8493da6, 0xd8493da6, 0x8d1697ac, 0x8d1697ac, 0x8d1697ac, 0xe7021df4, 0xe7021df4, 0xe7021df4, 0xaa4593fe, 0x5316d3c6, 0x5316d3c6, }, 18 }, + { "gfxmenu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x83e29007, 0xd4329e28, 0x83e29007, 0x8c37fac6, 0x97d4f246, 0x32287ef3, 0x32287ef3, 0x32287ef3, 0x4d96d867, 0x4d96d867, 0x4d96d867, 0xb71c8c8f, 0xb71c8c8f, 0xb71c8c8f, 0xc9cbf769, 0x8c37fac6, 0x8c37fac6, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe535f843, 0x39fb9c6c, 0xe535f843, 0x2fbd1b9, 0x7c892c8d, 0x3a8a1482, 0x3a8a1482, 0x3a8a1482, 0x2d7a2495, 0x2d7a2495, 0x2d7a2495, 0x84d821d, 0x84d821d, 0x84d821d, 0x5387d57f, 0x2fbd1b9, 0x2fbd1b9, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8f8338d3, 0xdcad6ccd, 0x8f8338d3, 0x30c612d8, 0x36353d2b, 0xa9546353, 0xa9546353, 0xa9546353, 0x960ace5a, 0x960ace5a, 0x960ace5a, 0x62e43bb9, 0x62e43bb9, 0x62e43bb9, 0xf83ee7aa, 0x30c612d8, 0x30c612d8, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xb7a13882, 0x68141e3a, 0xb7a13882, 0x65f6d15, 0x3101c32f, 0xc2b93e36, 0xc2b93e36, 0xc2b93e36, 0x1bee651a, 0x1bee651a, 0x1bee651a, 0xf7d3f08f, 0xf7d3f08f, 0xf7d3f08f, 0x724366e5, 0x65f6d15, 0x65f6d15, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x88a3c3aa, 0x8eade265, 0x88a3c3aa, 0xa5bf47d6, 0x9f8ae196, 0x56e34121, 0x56e34121, 0x56e34121, 0x2ccef01f, 0x2ccef01f, 0x2ccef01f, 0x7d1eee3b, 0x7d1eee3b, 0x7d1eee3b, 0x5387d57f, 0xa5bf47d6, 0xa5bf47d6, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8452c39c, 0x65759f4c, 0x8452c39c, 0x7459c042, 0xf9023dca, 0xe78b8902, 0xe78b8902, 0xe78b8902, 0xf0960107, 0xf0960107, 0xf0960107, 0xd52b2285, 0xd52b2285, 0xd52b2285, 0xf83ee7aa, 0x7459c042, 0x7459c042, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x938d42a2, 0x709bc8ab, 0x938d42a2, 0x4db0e2de, 0xd710f4c, 0x4e9cc80d, 0x4e9cc80d, 0x4e9cc80d, 0x9bc8a372, 0x9bc8a372, 0x9bc8a372, 0xbac90ac7, 0xbac90ac7, 0xbac90ac7, 0x724366e5, 0x4db0e2de, 0x4db0e2de, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xc060102b, 0x960bef0c, 0xc060102b, 0x1589677a, 0xe97d0978, 0xc795e31, 0xc795e31, 0xc795e31, 0xab33090, 0xab33090, 0xab33090, 0xbeea3971, 0xbeea3971, 0xbeea3971, 0x1c955882, 0x1589677a, 0x1589677a, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x6a4b2b8d, 0x274440b, 0x6a4b2b8d, 0xdef115d2, 0xed0808ad, 0x8d8ebcbb, 0x8d8ebcbb, 0x8d8ebcbb, 0x2b9b5d26, 0x2b9b5d26, 0x2b9b5d26, 0x790e10e2, 0x790e10e2, 0x790e10e2, 0x4d266f7a, 0xdef115d2, 0xdef115d2, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xdb8085be, 0x51d897c7, 0xdb8085be, 0xa3ce0221, 0x30fbd5f9, 0x12d25f5, 0x12d25f5, 0x12d25f5, 0xa4a480cb, 0xa4a480cb, 0xa4a480cb, 0xf3adca34, 0xf3adca34, 0xf3adca34, 0x1ed9d731, 0xa3ce0221, 0xa3ce0221, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x475beaa4, 0xa62db977, 0x475beaa4, 0x3a62be0, 0x311b5810, 0x7718601f, 0x7718601f, 0x7718601f, 0x60e85008, 0x60e85008, 0x60e85008, 0x45dff680, 0x45dff680, 0x45dff680, 0x5387d57f, 0x3a62be0, 0x3a62be0, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x5788a7ac, 0xd4336209, 0x5788a7ac, 0x354678e9, 0x783d77de, 0xe75c29a6, 0xe75c29a6, 0xe75c29a6, 0xd80284af, 0xd80284af, 0xd80284af, 0x2cec714c, 0x2cec714c, 0x2cec714c, 0xf83ee7aa, 0x354678e9, 0x354678e9, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xd1f64ea0, 0x4abd595a, 0xd1f64ea0, 0x97a6bea1, 0xf22a4cdb, 0x192b1c2, 0x192b1c2, 0x192b1c2, 0xd8c5eaee, 0xd8c5eaee, 0xd8c5eaee, 0x34f87f7b, 0x34f87f7b, 0x34f87f7b, 0x724366e5, 0x97a6bea1, 0x97a6bea1, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xfcd5f4bb, 0x36d1826d, 0xfcd5f4bb, 0x43d7de40, 0x84467c83, 0x4d2fdc34, 0x4d2fdc34, 0x4d2fdc34, 0x37026d0a, 0x37026d0a, 0x37026d0a, 0x66d2732e, 0x66d2732e, 0x66d2732e, 0x5387d57f, 0x43d7de40, 0x43d7de40, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x21e820a3, 0x2f9bf273, 0x21e820a3, 0xaa229449, 0x61b241cd, 0x7f3bf505, 0x7f3bf505, 0x7f3bf505, 0x68267d00, 0x68267d00, 0x68267d00, 0x4d9b5e82, 0x4d9b5e82, 0x4d9b5e82, 0xf83ee7aa, 0xaa229449, 0xaa229449, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x6fe66840, 0x64229598, 0x6fe66840, 0xedc02d98, 0x7131f7aa, 0x32dc30eb, 0x32dc30eb, 0x32dc30eb, 0xe7885b94, 0xe7885b94, 0xe7885b94, 0xc689f221, 0xc689f221, 0xc689f221, 0x724366e5, 0xedc02d98, 0xedc02d98, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xdb159e45, 0x9b1475c9, 0xdb159e45, 0xaee6597b, 0x573454, 0xe553631d, 0xe553631d, 0xe553631d, 0xe3990dbc, 0xe3990dbc, 0xe3990dbc, 0x57c0045d, 0x57c0045d, 0x57c0045d, 0x1c955882, 0xaee6597b, 0xaee6597b, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x9a43dfc6, 0x67153087, 0x9a43dfc6, 0xe9bd482c, 0xe763cddd, 0x87e579cb, 0x87e579cb, 0x87e579cb, 0x21f09856, 0x21f09856, 0x21f09856, 0x7365d592, 0x7365d592, 0x7365d592, 0x4d266f7a, 0xe9bd482c, 0xe9bd482c, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x78bf287, 0x8e68ddb4, 0x78bf287, 0xb2b0d4a4, 0xcb49fd6e, 0xfa9f0d62, 0xfa9f0d62, 0xfa9f0d62, 0x5f16a85c, 0x5f16a85c, 0x5f16a85c, 0x81fe2a3, 0x81fe2a3, 0x81fe2a3, 0x1ed9d731, 0xb2b0d4a4, 0xb2b0d4a4, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x1c3742c9, 0xb7ccf7ca, 0xfe517937, 0xb7ccf7ca, 0xfa1f93fd, 0x83d93b90, 0x95dac67b, 0x95dac67b, 0x95dac67b, 0x7e7f2c07, 0x7e7f2c07, 0x7e7f2c07, 0x67f5cd62, 0x67f5cd62, 0x67f5cd62, 0x1c3742c9, 0xfa1f93fd, 0xfa1f93fd, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x663d292a, 0xa008c39, 0x663d292a, 0xcd82113f, 0x1c0b0f02, 0xab2628e, 0xab2628e, 0xab2628e, 0x65fbbe9f, 0x65fbbe9f, 0x65fbbe9f, 0x26f1fbaf, 0x26f1fbaf, 0x26f1fbaf, 0xcc5a7bed, 0xcd82113f, 0xcd82113f, }, 18 }, + { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xef4a3312, 0xfc2f0ab1, 0x6861f25e, 0xfc2f0ab1, 0x11b6b6f7, 0xcd618f3f, 0xae51b639, 0xae51b639, 0xae51b639, 0x68e3f227, 0x68e3f227, 0x68e3f227, 0xbff1f2f0, 0xbff1f2f0, 0xbff1f2f0, 0xef4a3312, 0x11b6b6f7, 0x11b6b6f7, }, 18 }, + { "gfxterm_ar", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xe0b5a23e, 0xee551fa6, 0xe0b5a23e, 0xa3436f79, 0x59c36f00, 0x59c36f00, 0x5e67c1f2, 0x5e67c1f2, 0x5e67c1f2, 0x20e7ac94, 0x20e7ac94, 0x20e7ac94, 0xe3c59159, 0xe3c59159, 0xe3c59159, 0x59c36f00, 0xa3436f79, 0xa3436f79, 0x59c36f00, }, 20 }, + { "gfxterm_ar", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x2bb3c18d, 0xdfae36a1, 0x2bb3c18d, 0x5b644f2, 0xaa4593fe, 0xaa4593fe, 0xccb764da, 0xccb764da, 0xccb764da, 0x6a4269bd, 0x6a4269bd, 0x6a4269bd, 0xe8e58bd6, 0xe8e58bd6, 0xe8e58bd6, 0xaa4593fe, 0x5b644f2, 0x5b644f2, 0xaa4593fe, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xdae90963, 0xc865b2ee, 0xdae90963, 0x87fe64e7, 0xc9cbf769, 0xc9cbf769, 0xbdb21287, 0xbdb21287, 0xbdb21287, 0x436ad34b, 0x436ad34b, 0x436ad34b, 0xab3c7c47, 0xab3c7c47, 0xab3c7c47, 0xc9cbf769, 0x87fe64e7, 0x87fe64e7, 0xc9cbf769, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xd5ca4355, 0xc8fbf114, 0xd5ca4355, 0x85d2e7fb, 0x9813a416, 0x9813a416, 0x4a1e101b, 0x4a1e101b, 0x4a1e101b, 0xdbc59628, 0xdbc59628, 0xdbc59628, 0x47b063ea, 0x47b063ea, 0x47b063ea, 0x9813a416, 0x85d2e7fb, 0x85d2e7fb, 0x9813a416, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x722a297e, 0xb34f27df, 0x722a297e, 0x48e0f884, 0x5fcf013d, 0x5fcf013d, 0xee9e0d69, 0xee9e0d69, 0xee9e0d69, 0x3c8e151f, 0x3c8e151f, 0x3c8e151f, 0x23a594e2, 0x23a594e2, 0x23a594e2, 0x5fcf013d, 0x48e0f884, 0x48e0f884, 0x5fcf013d, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x87be67c4, 0x484106d9, 0x87be67c4, 0xe7cdc3ae, 0xdd28f52b, 0xdd28f52b, 0x2063d7c8, 0x2063d7c8, 0x2063d7c8, 0x15f2e2c, 0x15f2e2c, 0x15f2e2c, 0x1b2e4dbd, 0x1b2e4dbd, 0x1b2e4dbd, 0xdd28f52b, 0xe7cdc3ae, 0xe7cdc3ae, 0xdd28f52b, }, 20 }, + { "gfxterm_ar", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xbf799219, 0xcec61405, 0xbf799219, 0x413f9f74, 0x43d1f34, 0x43d1f34, 0x9dc6a6fb, 0x9dc6a6fb, 0x9dc6a6fb, 0xe2cc0f53, 0xe2cc0f53, 0xe2cc0f53, 0xaec367a, 0xaec367a, 0xaec367a, 0x43d1f34, 0x413f9f74, 0x413f9f74, 0x43d1f34, }, 20 }, + { "gfxterm_ar", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xe0b5a23e, 0xee551fa6, 0xe0b5a23e, 0xa3436f79, 0x59c36f00, 0x59c36f00, 0x5e67c1f2, 0x5e67c1f2, 0x5e67c1f2, 0x20e7ac94, 0x20e7ac94, 0x20e7ac94, 0xe3c59159, 0xe3c59159, 0xe3c59159, 0x59c36f00, 0xa3436f79, 0xa3436f79, 0x59c36f00, }, 20 }, + { "gfxterm_ar", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x2bb3c18d, 0xdfae36a1, 0x2bb3c18d, 0x5b644f2, 0xaa4593fe, 0xaa4593fe, 0xccb764da, 0xccb764da, 0xccb764da, 0x6a4269bd, 0x6a4269bd, 0x6a4269bd, 0xe8e58bd6, 0xe8e58bd6, 0xe8e58bd6, 0xaa4593fe, 0x5b644f2, 0x5b644f2, 0xaa4593fe, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xdae90963, 0xc865b2ee, 0xdae90963, 0x87fe64e7, 0xc9cbf769, 0xc9cbf769, 0xbdb21287, 0xbdb21287, 0xbdb21287, 0x436ad34b, 0x436ad34b, 0x436ad34b, 0xab3c7c47, 0xab3c7c47, 0xab3c7c47, 0xc9cbf769, 0x87fe64e7, 0x87fe64e7, 0xc9cbf769, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x3b1768ca, 0xf9e5eedd, 0x3b1768ca, 0x7f1c9276, 0x5387d57f, 0x5387d57f, 0x927c1c5d, 0x927c1c5d, 0x927c1c5d, 0x52257091, 0x52257091, 0x52257091, 0xb5fbf207, 0xb5fbf207, 0xb5fbf207, 0x5387d57f, 0x7f1c9276, 0x7f1c9276, 0x5387d57f, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x54190c0f, 0xb6b42319, 0x54190c0f, 0xee714190, 0xf83ee7aa, 0xf83ee7aa, 0x1cbd869f, 0x1cbd869f, 0x1cbd869f, 0x80c4566c, 0x80c4566c, 0x80c4566c, 0xb877fdc4, 0xb877fdc4, 0xb877fdc4, 0xf83ee7aa, 0xee714190, 0xee714190, 0xf83ee7aa, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x25774ca3, 0x3d74e13a, 0x25774ca3, 0x3402f9f6, 0x724366e5, 0x724366e5, 0x447ccdbb, 0x447ccdbb, 0x447ccdbb, 0x3458f41, 0x3458f41, 0x3458f41, 0x6e6ba80b, 0x6e6ba80b, 0x6e6ba80b, 0x724366e5, 0x3402f9f6, 0x3402f9f6, 0x724366e5, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x9143e2a6, 0x6e596cd4, 0x9143e2a6, 0x7ed75f9f, 0x5387d57f, 0x5387d57f, 0x86a0aae, 0x86a0aae, 0x86a0aae, 0xd6a44573, 0xd6a44573, 0xd6a44573, 0x4527d76d, 0x4527d76d, 0x4527d76d, 0x5387d57f, 0x7ed75f9f, 0x7ed75f9f, 0x5387d57f, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf943d873, 0xced7704, 0xf943d873, 0x8889e69f, 0xf83ee7aa, 0xf83ee7aa, 0x82576edb, 0x82576edb, 0x82576edb, 0xf08d7deb, 0xf08d7deb, 0xf08d7deb, 0xc1182c2d, 0xc1182c2d, 0xc1182c2d, 0xf83ee7aa, 0x8889e69f, 0x8889e69f, 0xf83ee7aa, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x63bd59d2, 0xf34f52d5, 0x63bd59d2, 0x916fd2a2, 0x724366e5, 0x724366e5, 0x11262bd6, 0x11262bd6, 0x11262bd6, 0x48b6d886, 0x48b6d886, 0x48b6d886, 0x8001b6c4, 0x8001b6c4, 0x8001b6c4, 0x724366e5, 0x916fd2a2, 0x916fd2a2, 0x724366e5, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xed6af547, 0x9ff43eec, 0xed6af547, 0xed0a4de1, 0x1c955882, 0x1c955882, 0xa9dce4cb, 0xa9dce4cb, 0xa9dce4cb, 0x662ba95c, 0x662ba95c, 0x662ba95c, 0x9842a549, 0x9842a549, 0x9842a549, 0x1c955882, 0xed0a4de1, 0xed0a4de1, 0x1c955882, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xbda49d55, 0xf5b57989, 0xbda49d55, 0x79b60451, 0x4d266f7a, 0x4d266f7a, 0xeb1807b5, 0xeb1807b5, 0xeb1807b5, 0xd6f1c0a, 0xd6f1c0a, 0xd6f1c0a, 0x9556489a, 0x9556489a, 0x9556489a, 0x4d266f7a, 0x79b60451, 0x79b60451, 0x4d266f7a, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x90b1e6bc, 0xabcab9fe, 0x90b1e6bc, 0xc45e75b, 0x1ed9d731, 0x1ed9d731, 0xa6ac3ed0, 0xa6ac3ed0, 0xa6ac3ed0, 0x8c82015, 0x8c82015, 0x8c82015, 0x2ba131a3, 0x2ba131a3, 0x2ba131a3, 0x1ed9d731, 0xc45e75b, 0xc45e75b, 0x1ed9d731, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x3b1768ca, 0xf9e5eedd, 0x3b1768ca, 0x7f1c9276, 0x5387d57f, 0x5387d57f, 0x927c1c5d, 0x927c1c5d, 0x927c1c5d, 0x52257091, 0x52257091, 0x52257091, 0xb5fbf207, 0xb5fbf207, 0xb5fbf207, 0x5387d57f, 0x7f1c9276, 0x7f1c9276, 0x5387d57f, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x54190c0f, 0xb6b42319, 0x54190c0f, 0xee714190, 0xf83ee7aa, 0xf83ee7aa, 0x1cbd869f, 0x1cbd869f, 0x1cbd869f, 0x80c4566c, 0x80c4566c, 0x80c4566c, 0xb877fdc4, 0xb877fdc4, 0xb877fdc4, 0xf83ee7aa, 0xee714190, 0xee714190, 0xf83ee7aa, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x25774ca3, 0x3d74e13a, 0x25774ca3, 0x3402f9f6, 0x724366e5, 0x724366e5, 0x447ccdbb, 0x447ccdbb, 0x447ccdbb, 0x3458f41, 0x3458f41, 0x3458f41, 0x6e6ba80b, 0x6e6ba80b, 0x6e6ba80b, 0x724366e5, 0x3402f9f6, 0x3402f9f6, 0x724366e5, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x9143e2a6, 0x6e596cd4, 0x9143e2a6, 0x7ed75f9f, 0x5387d57f, 0x5387d57f, 0x86a0aae, 0x86a0aae, 0x86a0aae, 0xd6a44573, 0xd6a44573, 0xd6a44573, 0x4527d76d, 0x4527d76d, 0x4527d76d, 0x5387d57f, 0x7ed75f9f, 0x7ed75f9f, 0x5387d57f, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf943d873, 0xced7704, 0xf943d873, 0x8889e69f, 0xf83ee7aa, 0xf83ee7aa, 0x82576edb, 0x82576edb, 0x82576edb, 0xf08d7deb, 0xf08d7deb, 0xf08d7deb, 0xc1182c2d, 0xc1182c2d, 0xc1182c2d, 0xf83ee7aa, 0x8889e69f, 0x8889e69f, 0xf83ee7aa, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x63bd59d2, 0xf34f52d5, 0x63bd59d2, 0x916fd2a2, 0x724366e5, 0x724366e5, 0x11262bd6, 0x11262bd6, 0x11262bd6, 0x48b6d886, 0x48b6d886, 0x48b6d886, 0x8001b6c4, 0x8001b6c4, 0x8001b6c4, 0x724366e5, 0x916fd2a2, 0x916fd2a2, 0x724366e5, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xed6af547, 0x9ff43eec, 0xed6af547, 0xed0a4de1, 0x1c955882, 0x1c955882, 0xa9dce4cb, 0xa9dce4cb, 0xa9dce4cb, 0x662ba95c, 0x662ba95c, 0x662ba95c, 0x9842a549, 0x9842a549, 0x9842a549, 0x1c955882, 0xed0a4de1, 0xed0a4de1, 0x1c955882, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xbda49d55, 0xf5b57989, 0xbda49d55, 0x79b60451, 0x4d266f7a, 0x4d266f7a, 0xeb1807b5, 0xeb1807b5, 0xeb1807b5, 0xd6f1c0a, 0xd6f1c0a, 0xd6f1c0a, 0x9556489a, 0x9556489a, 0x9556489a, 0x4d266f7a, 0x79b60451, 0x79b60451, 0x4d266f7a, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x90b1e6bc, 0xabcab9fe, 0x90b1e6bc, 0xc45e75b, 0x1ed9d731, 0x1ed9d731, 0xa6ac3ed0, 0xa6ac3ed0, 0xa6ac3ed0, 0x8c82015, 0x8c82015, 0x8c82015, 0x2ba131a3, 0x2ba131a3, 0x2ba131a3, 0x1ed9d731, 0xc45e75b, 0xc45e75b, 0x1ed9d731, }, 20 }, + { "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xd5ca4355, 0xc8fbf114, 0xd5ca4355, 0x85d2e7fb, 0x9813a416, 0x9813a416, 0x4a1e101b, 0x4a1e101b, 0x4a1e101b, 0xdbc59628, 0xdbc59628, 0xdbc59628, 0x47b063ea, 0x47b063ea, 0x47b063ea, 0x9813a416, 0x85d2e7fb, 0x85d2e7fb, 0x9813a416, }, 20 }, + { "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x722a297e, 0xb34f27df, 0x722a297e, 0x48e0f884, 0x5fcf013d, 0x5fcf013d, 0xee9e0d69, 0xee9e0d69, 0xee9e0d69, 0x3c8e151f, 0x3c8e151f, 0x3c8e151f, 0x23a594e2, 0x23a594e2, 0x23a594e2, 0x5fcf013d, 0x48e0f884, 0x48e0f884, 0x5fcf013d, }, 20 }, + { "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x87be67c4, 0x484106d9, 0x87be67c4, 0xe7cdc3ae, 0xdd28f52b, 0xdd28f52b, 0x2063d7c8, 0x2063d7c8, 0x2063d7c8, 0x15f2e2c, 0x15f2e2c, 0x15f2e2c, 0x1b2e4dbd, 0x1b2e4dbd, 0x1b2e4dbd, 0xdd28f52b, 0xe7cdc3ae, 0xe7cdc3ae, 0xdd28f52b, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x36622078, 0x979da8f3, 0x36622078, 0x7594ed3f, 0x59c36f00, 0x59c36f00, 0xe5e5cf13, 0xe5e5cf13, 0xe5e5cf13, 0x9b65a275, 0x9b65a275, 0x9b65a275, 0x58479fb8, 0x58479fb8, 0x58479fb8, 0x59c36f00, 0x7594ed3f, 0x7594ed3f, 0x59c36f00, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x48ee0ceb, 0xc6eb6d53, 0x48ee0ceb, 0x66eb8994, 0xaa4593fe, 0xaa4593fe, 0x86ac5984, 0x86ac5984, 0x86ac5984, 0x205954e3, 0x205954e3, 0x205954e3, 0xa2feb688, 0xa2feb688, 0xa2feb688, 0xaa4593fe, 0x66eb8994, 0x66eb8994, 0xaa4593fe, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xfa53f185, 0xaf8fa3eb, 0xfa53f185, 0xa7449c01, 0xc9cbf769, 0xc9cbf769, 0x50b94b47, 0x50b94b47, 0x50b94b47, 0xae618a8b, 0xae618a8b, 0xae618a8b, 0x46372587, 0x46372587, 0x46372587, 0xc9cbf769, 0xa7449c01, 0xa7449c01, 0xc9cbf769, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xc6eb6e6e, 0xc5217d5b, 0xc6eb6e6e, 0x96f3cac0, 0x9813a416, 0x9813a416, 0x5752c3fe, 0x5752c3fe, 0x5752c3fe, 0xc68945cd, 0xc68945cd, 0xc68945cd, 0x5afcb00f, 0x5afcb00f, 0x5afcb00f, 0x9813a416, 0x96f3cac0, 0x96f3cac0, 0x9813a416, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x7fd1def2, 0x98a2e53a, 0x7fd1def2, 0x451b0f08, 0x5fcf013d, 0x5fcf013d, 0x9f19ac09, 0x9f19ac09, 0x9f19ac09, 0x4d09b47f, 0x4d09b47f, 0x4d09b47f, 0x52223582, 0x52223582, 0x52223582, 0x5fcf013d, 0x451b0f08, 0x451b0f08, 0x5fcf013d, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xaac2ae55, 0x3e7a25f, 0xaac2ae55, 0xcab10a3f, 0xdd28f52b, 0xdd28f52b, 0x5f2b8179, 0x5f2b8179, 0x5f2b8179, 0x7e17789d, 0x7e17789d, 0x7e17789d, 0x64661b0c, 0x64661b0c, 0x64661b0c, 0xdd28f52b, 0xcab10a3f, 0xcab10a3f, 0xdd28f52b, }, 20 }, + { "gfxterm_cyr", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xfbdee88, 0x812f047f, 0xfbdee88, 0xf1fbe3e5, 0x43d1f34, 0x43d1f34, 0x6694d5e, 0x6694d5e, 0x6694d5e, 0x7963e4f6, 0x7963e4f6, 0x7963e4f6, 0x9143dddf, 0x9143dddf, 0x9143dddf, 0x43d1f34, 0xf1fbe3e5, 0xf1fbe3e5, 0x43d1f34, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x36622078, 0x979da8f3, 0x36622078, 0x7594ed3f, 0x59c36f00, 0x59c36f00, 0xe5e5cf13, 0xe5e5cf13, 0xe5e5cf13, 0x9b65a275, 0x9b65a275, 0x9b65a275, 0x58479fb8, 0x58479fb8, 0x58479fb8, 0x59c36f00, 0x7594ed3f, 0x7594ed3f, 0x59c36f00, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x48ee0ceb, 0xc6eb6d53, 0x48ee0ceb, 0x66eb8994, 0xaa4593fe, 0xaa4593fe, 0x86ac5984, 0x86ac5984, 0x86ac5984, 0x205954e3, 0x205954e3, 0x205954e3, 0xa2feb688, 0xa2feb688, 0xa2feb688, 0xaa4593fe, 0x66eb8994, 0x66eb8994, 0xaa4593fe, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xfa53f185, 0xaf8fa3eb, 0xfa53f185, 0xa7449c01, 0xc9cbf769, 0xc9cbf769, 0x50b94b47, 0x50b94b47, 0x50b94b47, 0xae618a8b, 0xae618a8b, 0xae618a8b, 0x46372587, 0x46372587, 0x46372587, 0xc9cbf769, 0xa7449c01, 0xa7449c01, 0xc9cbf769, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xd8d870b3, 0x9128b01a, 0xd8d870b3, 0x9cd38a0f, 0x5387d57f, 0x5387d57f, 0x136cad2, 0x136cad2, 0x136cad2, 0xc16fa61e, 0xc16fa61e, 0xc16fa61e, 0x26b12488, 0x26b12488, 0x26b12488, 0x5387d57f, 0x9cd38a0f, 0x9cd38a0f, 0x5387d57f, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xeaeda16f, 0x36d21de0, 0xeaeda16f, 0x5085ecf0, 0xf83ee7aa, 0xf83ee7aa, 0x3eac591b, 0x3eac591b, 0x3eac591b, 0xa2d589e8, 0xa2d589e8, 0xa2d589e8, 0x9a662240, 0x9a662240, 0x9a662240, 0xf83ee7aa, 0x5085ecf0, 0x5085ecf0, 0xf83ee7aa, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x333a0d08, 0x47d0c238, 0x333a0d08, 0x224fb85d, 0x724366e5, 0x724366e5, 0xf4044671, 0xf4044671, 0xf4044671, 0xb33d048b, 0xb33d048b, 0xb33d048b, 0xde1323c1, 0xde1323c1, 0xde1323c1, 0x724366e5, 0x224fb85d, 0x224fb85d, 0x724366e5, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x4a43c1c8, 0xe019a943, 0x4a43c1c8, 0xa5d77cf1, 0x5387d57f, 0x5387d57f, 0x8171a604, 0x8171a604, 0x8171a604, 0x5fbfe9d9, 0x5fbfe9d9, 0x5fbfe9d9, 0xcc3c7bc7, 0xcc3c7bc7, 0xcc3c7bc7, 0x5387d57f, 0xa5d77cf1, 0xa5d77cf1, 0x5387d57f, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb770c3fe, 0x50b21ef7, 0xb770c3fe, 0xc6bafd12, 0xf83ee7aa, 0xf83ee7aa, 0x8df53a5d, 0x8df53a5d, 0x8df53a5d, 0xff2f296d, 0xff2f296d, 0xff2f296d, 0xceba78ab, 0xceba78ab, 0xceba78ab, 0xf83ee7aa, 0xc6bafd12, 0xc6bafd12, 0xf83ee7aa, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xe8f75cfb, 0x402c0692, 0xe8f75cfb, 0x1a25d78b, 0x724366e5, 0x724366e5, 0xaf01e304, 0xaf01e304, 0xaf01e304, 0xf6911054, 0xf6911054, 0xf6911054, 0x3e267e16, 0x3e267e16, 0x3e267e16, 0x724366e5, 0x1a25d78b, 0x1a25d78b, 0x724366e5, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x89f843d3, 0xc27ae37d, 0x89f843d3, 0x8998fb75, 0x1c955882, 0x1c955882, 0x698caa77, 0x698caa77, 0x698caa77, 0xa67be7e0, 0xa67be7e0, 0xa67be7e0, 0x5812ebf5, 0x5812ebf5, 0x5812ebf5, 0x1c955882, 0x8998fb75, 0x8998fb75, 0x1c955882, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xa10c24e6, 0x12eeef09, 0xa10c24e6, 0x651ebde2, 0x4d266f7a, 0x4d266f7a, 0x8ed47731, 0x8ed47731, 0x8ed47731, 0x68a36c8e, 0x68a36c8e, 0x68a36c8e, 0xf09a381e, 0xf09a381e, 0xf09a381e, 0x4d266f7a, 0x651ebde2, 0x651ebde2, 0x4d266f7a, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x85a30869, 0xbaa08e30, 0x85a30869, 0x1957098e, 0x1ed9d731, 0x1ed9d731, 0x4ffc007b, 0x4ffc007b, 0x4ffc007b, 0xe1981ebe, 0xe1981ebe, 0xe1981ebe, 0xc2f10f08, 0xc2f10f08, 0xc2f10f08, 0x1ed9d731, 0x1957098e, 0x1957098e, 0x1ed9d731, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xd8d870b3, 0x9128b01a, 0xd8d870b3, 0x9cd38a0f, 0x5387d57f, 0x5387d57f, 0x136cad2, 0x136cad2, 0x136cad2, 0xc16fa61e, 0xc16fa61e, 0xc16fa61e, 0x26b12488, 0x26b12488, 0x26b12488, 0x5387d57f, 0x9cd38a0f, 0x9cd38a0f, 0x5387d57f, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xeaeda16f, 0x36d21de0, 0xeaeda16f, 0x5085ecf0, 0xf83ee7aa, 0xf83ee7aa, 0x3eac591b, 0x3eac591b, 0x3eac591b, 0xa2d589e8, 0xa2d589e8, 0xa2d589e8, 0x9a662240, 0x9a662240, 0x9a662240, 0xf83ee7aa, 0x5085ecf0, 0x5085ecf0, 0xf83ee7aa, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x333a0d08, 0x47d0c238, 0x333a0d08, 0x224fb85d, 0x724366e5, 0x724366e5, 0xf4044671, 0xf4044671, 0xf4044671, 0xb33d048b, 0xb33d048b, 0xb33d048b, 0xde1323c1, 0xde1323c1, 0xde1323c1, 0x724366e5, 0x224fb85d, 0x224fb85d, 0x724366e5, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x4a43c1c8, 0xe019a943, 0x4a43c1c8, 0xa5d77cf1, 0x5387d57f, 0x5387d57f, 0x8171a604, 0x8171a604, 0x8171a604, 0x5fbfe9d9, 0x5fbfe9d9, 0x5fbfe9d9, 0xcc3c7bc7, 0xcc3c7bc7, 0xcc3c7bc7, 0x5387d57f, 0xa5d77cf1, 0xa5d77cf1, 0x5387d57f, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb770c3fe, 0x50b21ef7, 0xb770c3fe, 0xc6bafd12, 0xf83ee7aa, 0xf83ee7aa, 0x8df53a5d, 0x8df53a5d, 0x8df53a5d, 0xff2f296d, 0xff2f296d, 0xff2f296d, 0xceba78ab, 0xceba78ab, 0xceba78ab, 0xf83ee7aa, 0xc6bafd12, 0xc6bafd12, 0xf83ee7aa, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xe8f75cfb, 0x402c0692, 0xe8f75cfb, 0x1a25d78b, 0x724366e5, 0x724366e5, 0xaf01e304, 0xaf01e304, 0xaf01e304, 0xf6911054, 0xf6911054, 0xf6911054, 0x3e267e16, 0x3e267e16, 0x3e267e16, 0x724366e5, 0x1a25d78b, 0x1a25d78b, 0x724366e5, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x89f843d3, 0xc27ae37d, 0x89f843d3, 0x8998fb75, 0x1c955882, 0x1c955882, 0x698caa77, 0x698caa77, 0x698caa77, 0xa67be7e0, 0xa67be7e0, 0xa67be7e0, 0x5812ebf5, 0x5812ebf5, 0x5812ebf5, 0x1c955882, 0x8998fb75, 0x8998fb75, 0x1c955882, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xa10c24e6, 0x12eeef09, 0xa10c24e6, 0x651ebde2, 0x4d266f7a, 0x4d266f7a, 0x8ed47731, 0x8ed47731, 0x8ed47731, 0x68a36c8e, 0x68a36c8e, 0x68a36c8e, 0xf09a381e, 0xf09a381e, 0xf09a381e, 0x4d266f7a, 0x651ebde2, 0x651ebde2, 0x4d266f7a, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x85a30869, 0xbaa08e30, 0x85a30869, 0x1957098e, 0x1ed9d731, 0x1ed9d731, 0x4ffc007b, 0x4ffc007b, 0x4ffc007b, 0xe1981ebe, 0xe1981ebe, 0xe1981ebe, 0xc2f10f08, 0xc2f10f08, 0xc2f10f08, 0x1ed9d731, 0x1957098e, 0x1957098e, 0x1ed9d731, }, 20 }, + { "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xc6eb6e6e, 0xc5217d5b, 0xc6eb6e6e, 0x96f3cac0, 0x9813a416, 0x9813a416, 0x5752c3fe, 0x5752c3fe, 0x5752c3fe, 0xc68945cd, 0xc68945cd, 0xc68945cd, 0x5afcb00f, 0x5afcb00f, 0x5afcb00f, 0x9813a416, 0x96f3cac0, 0x96f3cac0, 0x9813a416, }, 20 }, + { "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x7fd1def2, 0x98a2e53a, 0x7fd1def2, 0x451b0f08, 0x5fcf013d, 0x5fcf013d, 0x9f19ac09, 0x9f19ac09, 0x9f19ac09, 0x4d09b47f, 0x4d09b47f, 0x4d09b47f, 0x52223582, 0x52223582, 0x52223582, 0x5fcf013d, 0x451b0f08, 0x451b0f08, 0x5fcf013d, }, 20 }, + { "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xaac2ae55, 0x3e7a25f, 0xaac2ae55, 0xcab10a3f, 0xdd28f52b, 0xdd28f52b, 0x5f2b8179, 0x5f2b8179, 0x5f2b8179, 0x7e17789d, 0x7e17789d, 0x7e17789d, 0x64661b0c, 0x64661b0c, 0x64661b0c, 0xdd28f52b, 0xcab10a3f, 0xcab10a3f, 0xdd28f52b, }, 20 }, + { "gfxterm_heb", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x99e53699, 0x9b30b9b8, 0x99e53699, 0xda13fbde, 0x59c36f00, 0x59c36f00, 0xc6c80006, 0xc6c80006, 0xc6c80006, 0xb8486d60, 0xb8486d60, 0xb8486d60, 0x7b6a50ad, 0x7b6a50ad, 0x7b6a50ad, 0x59c36f00, 0xda13fbde, 0xda13fbde, 0x59c36f00, }, 20 }, + { "gfxterm_heb", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x5596d8c4, 0xe6c08467, 0x5596d8c4, 0x7b935dbb, 0xaa4593fe, 0xaa4593fe, 0xb2094db6, 0xb2094db6, 0xb2094db6, 0x14fc40d1, 0x14fc40d1, 0x14fc40d1, 0x965ba2ba, 0x965ba2ba, 0x965ba2ba, 0xaa4593fe, 0x7b935dbb, 0x7b935dbb, 0xaa4593fe, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x8b963803, 0x3a329278, 0x8b963803, 0xd6815587, 0xc9cbf769, 0xc9cbf769, 0x85733bd7, 0x85733bd7, 0x85733bd7, 0x7babfa1b, 0x7babfa1b, 0x7babfa1b, 0x93fd5517, 0x93fd5517, 0x93fd5517, 0xc9cbf769, 0xd6815587, 0xd6815587, 0xc9cbf769, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x27813091, 0xd32064ba, 0x27813091, 0x7799943f, 0x9813a416, 0x9813a416, 0x5cfa5159, 0x5cfa5159, 0x5cfa5159, 0xcd21d76a, 0xcd21d76a, 0xcd21d76a, 0x515422a8, 0x515422a8, 0x515422a8, 0x9813a416, 0x7799943f, 0x7799943f, 0x9813a416, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xf107273d, 0xd1d8f23b, 0xf107273d, 0xcbcdf6c7, 0x5fcf013d, 0x5fcf013d, 0x164d5584, 0x164d5584, 0x164d5584, 0xc45d4df2, 0xc45d4df2, 0xc45d4df2, 0xdb76cc0f, 0xdb76cc0f, 0xdb76cc0f, 0x5fcf013d, 0xcbcdf6c7, 0xcbcdf6c7, 0x5fcf013d, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xa54fb200, 0x92d6596f, 0xa54fb200, 0xc53c166a, 0xdd28f52b, 0xdd28f52b, 0x97b266c9, 0x97b266c9, 0x97b266c9, 0xb68e9f2d, 0xb68e9f2d, 0xb68e9f2d, 0xacfffcbc, 0xacfffcbc, 0xacfffcbc, 0xdd28f52b, 0xc53c166a, 0xc53c166a, 0xdd28f52b, }, 20 }, + { "gfxterm_heb", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x6d1ede55, 0x4bb31527, 0x6d1ede55, 0x9358d338, 0x43d1f34, 0x43d1f34, 0xa3f91b32, 0xa3f91b32, 0xa3f91b32, 0xdcf3b29a, 0xdcf3b29a, 0xdcf3b29a, 0x34d38bb3, 0x34d38bb3, 0x34d38bb3, 0x43d1f34, 0x9358d338, 0x9358d338, 0x43d1f34, }, 20 }, + { "gfxterm_heb", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x99e53699, 0x9b30b9b8, 0x99e53699, 0xda13fbde, 0x59c36f00, 0x59c36f00, 0xc6c80006, 0xc6c80006, 0xc6c80006, 0xb8486d60, 0xb8486d60, 0xb8486d60, 0x7b6a50ad, 0x7b6a50ad, 0x7b6a50ad, 0x59c36f00, 0xda13fbde, 0xda13fbde, 0x59c36f00, }, 20 }, + { "gfxterm_heb", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x5596d8c4, 0xe6c08467, 0x5596d8c4, 0x7b935dbb, 0xaa4593fe, 0xaa4593fe, 0xb2094db6, 0xb2094db6, 0xb2094db6, 0x14fc40d1, 0x14fc40d1, 0x14fc40d1, 0x965ba2ba, 0x965ba2ba, 0x965ba2ba, 0xaa4593fe, 0x7b935dbb, 0x7b935dbb, 0xaa4593fe, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x8b963803, 0x3a329278, 0x8b963803, 0xd6815587, 0xc9cbf769, 0xc9cbf769, 0x85733bd7, 0x85733bd7, 0x85733bd7, 0x7babfa1b, 0x7babfa1b, 0x7babfa1b, 0x93fd5517, 0x93fd5517, 0x93fd5517, 0xc9cbf769, 0xd6815587, 0xd6815587, 0xc9cbf769, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xeada5358, 0xa5081c9c, 0xeada5358, 0xaed1a9e4, 0x5387d57f, 0x5387d57f, 0xe7380617, 0xe7380617, 0xe7380617, 0x27616adb, 0x27616adb, 0x27616adb, 0xc0bfe84d, 0xc0bfe84d, 0xc0bfe84d, 0x5387d57f, 0xaed1a9e4, 0xaed1a9e4, 0x5387d57f, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x167e9ac0, 0xc5a57b5f, 0x167e9ac0, 0xac16d75f, 0xf83ee7aa, 0xf83ee7aa, 0xb47ab0cb, 0xb47ab0cb, 0xb47ab0cb, 0x28036038, 0x28036038, 0x28036038, 0x10b0cb90, 0x10b0cb90, 0x10b0cb90, 0xf83ee7aa, 0xac16d75f, 0xac16d75f, 0xf83ee7aa, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xfd0449a3, 0xb946b16a, 0xfd0449a3, 0xec71fcf6, 0x724366e5, 0x724366e5, 0xab4d15ce, 0xab4d15ce, 0xab4d15ce, 0xec745734, 0xec745734, 0xec745734, 0x815a707e, 0x815a707e, 0x815a707e, 0x724366e5, 0xec71fcf6, 0xec71fcf6, 0x724366e5, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x1eb746a, 0x74afe43, 0x1eb746a, 0xee7fc953, 0x5387d57f, 0x5387d57f, 0x704981d6, 0x704981d6, 0x704981d6, 0xae87ce0b, 0xae87ce0b, 0xae87ce0b, 0x3d045c15, 0x3d045c15, 0x3d045c15, 0x5387d57f, 0xee7fc953, 0xee7fc953, 0x5387d57f, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb9fa44c, 0xff4e04c7, 0xb9fa44c, 0x7a559aa0, 0xf83ee7aa, 0xf83ee7aa, 0xfccbce43, 0xfccbce43, 0xfccbce43, 0x8e11dd73, 0x8e11dd73, 0x8e11dd73, 0xbf848cb5, 0xbf848cb5, 0xbf848cb5, 0xf83ee7aa, 0x7a559aa0, 0x7a559aa0, 0xf83ee7aa, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xcc83dbb8, 0x7fa3d9db, 0xcc83dbb8, 0x3e5150c8, 0x724366e5, 0x724366e5, 0x3d838d1c, 0x3d838d1c, 0x3d838d1c, 0x64137e4c, 0x64137e4c, 0x64137e4c, 0xaca4100e, 0xaca4100e, 0xaca4100e, 0x724366e5, 0x3e5150c8, 0x3e5150c8, 0x724366e5, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x2a9a3393, 0xc249bea, 0x2a9a3393, 0x2afa8b35, 0x1c955882, 0x1c955882, 0x9c6441e2, 0x9c6441e2, 0x9c6441e2, 0x53930c75, 0x53930c75, 0x53930c75, 0xadfa0060, 0xadfa0060, 0xadfa0060, 0x1c955882, 0x2afa8b35, 0x2afa8b35, 0x1c955882, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xcf807eaa, 0x4af8ad98, 0xcf807eaa, 0xb92e7ae, 0x4d266f7a, 0x4d266f7a, 0x15d955c1, 0x15d955c1, 0x15d955c1, 0xf3ae4e7e, 0xf3ae4e7e, 0xf3ae4e7e, 0x6b971aee, 0x6b971aee, 0x6b971aee, 0x4d266f7a, 0xb92e7ae, 0xb92e7ae, 0x4d266f7a, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x98e40974, 0xf0ed7ac2, 0x98e40974, 0x4100893, 0x1ed9d731, 0x1ed9d731, 0x7d102c2f, 0x7d102c2f, 0x7d102c2f, 0xd37432ea, 0xd37432ea, 0xd37432ea, 0xf01d235c, 0xf01d235c, 0xf01d235c, 0x1ed9d731, 0x4100893, 0x4100893, 0x1ed9d731, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xeada5358, 0xa5081c9c, 0xeada5358, 0xaed1a9e4, 0x5387d57f, 0x5387d57f, 0xe7380617, 0xe7380617, 0xe7380617, 0x27616adb, 0x27616adb, 0x27616adb, 0xc0bfe84d, 0xc0bfe84d, 0xc0bfe84d, 0x5387d57f, 0xaed1a9e4, 0xaed1a9e4, 0x5387d57f, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x167e9ac0, 0xc5a57b5f, 0x167e9ac0, 0xac16d75f, 0xf83ee7aa, 0xf83ee7aa, 0xb47ab0cb, 0xb47ab0cb, 0xb47ab0cb, 0x28036038, 0x28036038, 0x28036038, 0x10b0cb90, 0x10b0cb90, 0x10b0cb90, 0xf83ee7aa, 0xac16d75f, 0xac16d75f, 0xf83ee7aa, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xfd0449a3, 0xb946b16a, 0xfd0449a3, 0xec71fcf6, 0x724366e5, 0x724366e5, 0xab4d15ce, 0xab4d15ce, 0xab4d15ce, 0xec745734, 0xec745734, 0xec745734, 0x815a707e, 0x815a707e, 0x815a707e, 0x724366e5, 0xec71fcf6, 0xec71fcf6, 0x724366e5, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x1eb746a, 0x74afe43, 0x1eb746a, 0xee7fc953, 0x5387d57f, 0x5387d57f, 0x704981d6, 0x704981d6, 0x704981d6, 0xae87ce0b, 0xae87ce0b, 0xae87ce0b, 0x3d045c15, 0x3d045c15, 0x3d045c15, 0x5387d57f, 0xee7fc953, 0xee7fc953, 0x5387d57f, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xb9fa44c, 0xff4e04c7, 0xb9fa44c, 0x7a559aa0, 0xf83ee7aa, 0xf83ee7aa, 0xfccbce43, 0xfccbce43, 0xfccbce43, 0x8e11dd73, 0x8e11dd73, 0x8e11dd73, 0xbf848cb5, 0xbf848cb5, 0xbf848cb5, 0xf83ee7aa, 0x7a559aa0, 0x7a559aa0, 0xf83ee7aa, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xcc83dbb8, 0x7fa3d9db, 0xcc83dbb8, 0x3e5150c8, 0x724366e5, 0x724366e5, 0x3d838d1c, 0x3d838d1c, 0x3d838d1c, 0x64137e4c, 0x64137e4c, 0x64137e4c, 0xaca4100e, 0xaca4100e, 0xaca4100e, 0x724366e5, 0x3e5150c8, 0x3e5150c8, 0x724366e5, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x2a9a3393, 0xc249bea, 0x2a9a3393, 0x2afa8b35, 0x1c955882, 0x1c955882, 0x9c6441e2, 0x9c6441e2, 0x9c6441e2, 0x53930c75, 0x53930c75, 0x53930c75, 0xadfa0060, 0xadfa0060, 0xadfa0060, 0x1c955882, 0x2afa8b35, 0x2afa8b35, 0x1c955882, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xcf807eaa, 0x4af8ad98, 0xcf807eaa, 0xb92e7ae, 0x4d266f7a, 0x4d266f7a, 0x15d955c1, 0x15d955c1, 0x15d955c1, 0xf3ae4e7e, 0xf3ae4e7e, 0xf3ae4e7e, 0x6b971aee, 0x6b971aee, 0x6b971aee, 0x4d266f7a, 0xb92e7ae, 0xb92e7ae, 0x4d266f7a, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x98e40974, 0xf0ed7ac2, 0x98e40974, 0x4100893, 0x1ed9d731, 0x1ed9d731, 0x7d102c2f, 0x7d102c2f, 0x7d102c2f, 0xd37432ea, 0xd37432ea, 0xd37432ea, 0xf01d235c, 0xf01d235c, 0xf01d235c, 0x1ed9d731, 0x4100893, 0x4100893, 0x1ed9d731, }, 20 }, + { "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x27813091, 0xd32064ba, 0x27813091, 0x7799943f, 0x9813a416, 0x9813a416, 0x5cfa5159, 0x5cfa5159, 0x5cfa5159, 0xcd21d76a, 0xcd21d76a, 0xcd21d76a, 0x515422a8, 0x515422a8, 0x515422a8, 0x9813a416, 0x7799943f, 0x7799943f, 0x9813a416, }, 20 }, + { "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xf107273d, 0xd1d8f23b, 0xf107273d, 0xcbcdf6c7, 0x5fcf013d, 0x5fcf013d, 0x164d5584, 0x164d5584, 0x164d5584, 0xc45d4df2, 0xc45d4df2, 0xc45d4df2, 0xdb76cc0f, 0xdb76cc0f, 0xdb76cc0f, 0x5fcf013d, 0xcbcdf6c7, 0xcbcdf6c7, 0x5fcf013d, }, 20 }, + { "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xa54fb200, 0x92d6596f, 0xa54fb200, 0xc53c166a, 0xdd28f52b, 0xdd28f52b, 0x97b266c9, 0x97b266c9, 0x97b266c9, 0xb68e9f2d, 0xb68e9f2d, 0xb68e9f2d, 0xacfffcbc, 0xacfffcbc, 0xacfffcbc, 0xdd28f52b, 0xc53c166a, 0xc53c166a, 0xdd28f52b, }, 20 }, + { "gfxterm_gre", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xfe511789, 0x421405b3, 0xfe511789, 0xbda7dace, 0x59c36f00, 0x59c36f00, 0x2a367884, 0x2a367884, 0x2a367884, 0x54b615e2, 0x54b615e2, 0x54b615e2, 0x9794282f, 0x9794282f, 0x9794282f, 0x59c36f00, 0xbda7dace, 0xbda7dace, 0x59c36f00, }, 20 }, + { "gfxterm_gre", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x2616eaaf, 0xd0263182, 0x2616eaaf, 0x8136fd0, 0xaa4593fe, 0xaa4593fe, 0x5b85b7a8, 0x5b85b7a8, 0x5b85b7a8, 0xfd70bacf, 0xfd70bacf, 0xfd70bacf, 0x7fd758a4, 0x7fd758a4, 0x7fd758a4, 0xaa4593fe, 0x8136fd0, 0x8136fd0, 0xaa4593fe, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x9214e205, 0x211e70db, 0x9214e205, 0xcf038f81, 0xc9cbf769, 0xc9cbf769, 0x5a304c, 0x5a304c, 0x5a304c, 0xfe82f180, 0xfe82f180, 0xfe82f180, 0x16d45e8c, 0x16d45e8c, 0x16d45e8c, 0xc9cbf769, 0xcf038f81, 0xcf038f81, 0xc9cbf769, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x8bbe1e38, 0xfef8974b, 0x8bbe1e38, 0xdba6ba96, 0x9813a416, 0x9813a416, 0xdf1a19a3, 0xdf1a19a3, 0xdf1a19a3, 0x4ec19f90, 0x4ec19f90, 0x4ec19f90, 0xd2b46a52, 0xd2b46a52, 0xd2b46a52, 0x9813a416, 0xdba6ba96, 0xdba6ba96, 0x9813a416, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xda045c37, 0xb8ae26e3, 0xda045c37, 0xe0ce8dcd, 0x5fcf013d, 0x5fcf013d, 0xee7a1c7, 0xee7a1c7, 0xee7a1c7, 0xdcf7b9b1, 0xdcf7b9b1, 0xdcf7b9b1, 0xc3dc384c, 0xc3dc384c, 0xc3dc384c, 0x5fcf013d, 0xe0ce8dcd, 0xe0ce8dcd, 0x5fcf013d, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x2e35339d, 0x798918b, 0x2e35339d, 0x4e4697f7, 0xdd28f52b, 0xdd28f52b, 0x92c68d60, 0x92c68d60, 0x92c68d60, 0xb3fa7484, 0xb3fa7484, 0xb3fa7484, 0xa98b1715, 0xa98b1715, 0xa98b1715, 0xdd28f52b, 0x4e4697f7, 0x4e4697f7, 0xdd28f52b, }, 20 }, + { "gfxterm_gre", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xb5c5482e, 0xeec9616, 0xb5c5482e, 0x4b834543, 0x43d1f34, 0x43d1f34, 0xd4fadab2, 0xd4fadab2, 0xd4fadab2, 0xabf0731a, 0xabf0731a, 0xabf0731a, 0x43d04a33, 0x43d04a33, 0x43d04a33, 0x43d1f34, 0x4b834543, 0x4b834543, 0x43d1f34, }, 20 }, + { "gfxterm_gre", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xfe511789, 0x421405b3, 0xfe511789, 0xbda7dace, 0x59c36f00, 0x59c36f00, 0x2a367884, 0x2a367884, 0x2a367884, 0x54b615e2, 0x54b615e2, 0x54b615e2, 0x9794282f, 0x9794282f, 0x9794282f, 0x59c36f00, 0xbda7dace, 0xbda7dace, 0x59c36f00, }, 20 }, + { "gfxterm_gre", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x2616eaaf, 0xd0263182, 0x2616eaaf, 0x8136fd0, 0xaa4593fe, 0xaa4593fe, 0x5b85b7a8, 0x5b85b7a8, 0x5b85b7a8, 0xfd70bacf, 0xfd70bacf, 0xfd70bacf, 0x7fd758a4, 0x7fd758a4, 0x7fd758a4, 0xaa4593fe, 0x8136fd0, 0x8136fd0, 0xaa4593fe, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x9214e205, 0x211e70db, 0x9214e205, 0xcf038f81, 0xc9cbf769, 0xc9cbf769, 0x5a304c, 0x5a304c, 0x5a304c, 0xfe82f180, 0xfe82f180, 0xfe82f180, 0x16d45e8c, 0x16d45e8c, 0x16d45e8c, 0xc9cbf769, 0xcf038f81, 0xcf038f81, 0xc9cbf769, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xa841a245, 0x7c4a37aa, 0xa841a245, 0xec4a58f9, 0x5387d57f, 0x5387d57f, 0x8670fc38, 0x8670fc38, 0x8670fc38, 0x462990f4, 0x462990f4, 0x462990f4, 0xa1f71262, 0xa1f71262, 0xa1f71262, 0x5387d57f, 0xec4a58f9, 0xec4a58f9, 0x5387d57f, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc589c63a, 0xda1b2d71, 0xc589c63a, 0x7fe18ba5, 0xf83ee7aa, 0xf83ee7aa, 0x74883fe5, 0x74883fe5, 0x74883fe5, 0xe8f1ef16, 0xe8f1ef16, 0xe8f1ef16, 0xd04244be, 0xd04244be, 0xd04244be, 0xf83ee7aa, 0x7fe18ba5, 0x7fe18ba5, 0xf83ee7aa, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x5df86da, 0x97465d78, 0x5df86da, 0x14aa338f, 0x724366e5, 0x724366e5, 0x60829227, 0x60829227, 0x60829227, 0x27bbd0dd, 0x27bbd0dd, 0x27bbd0dd, 0x4a95f797, 0x4a95f797, 0x4a95f797, 0x724366e5, 0x14aa338f, 0x14aa338f, 0x724366e5, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xebf6bdc1, 0xaf2c370b, 0xebf6bdc1, 0x46200f8, 0x5387d57f, 0x5387d57f, 0x81cd0740, 0x81cd0740, 0x81cd0740, 0x5f03489d, 0x5f03489d, 0x5f03489d, 0xcc80da83, 0xcc80da83, 0xcc80da83, 0x5387d57f, 0x46200f8, 0x46200f8, 0x5387d57f, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x5455b923, 0x93681ea, 0x5455b923, 0x259f87cf, 0xf83ee7aa, 0xf83ee7aa, 0xf5cd3d43, 0xf5cd3d43, 0xf5cd3d43, 0x87172e73, 0x87172e73, 0x87172e73, 0xb6827fb5, 0xb6827fb5, 0xb6827fb5, 0xf83ee7aa, 0x259f87cf, 0x259f87cf, 0xf83ee7aa, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xec9a1f85, 0x74e0a22a, 0xec9a1f85, 0x1e4894f5, 0x724366e5, 0x724366e5, 0xa74db0e6, 0xa74db0e6, 0xa74db0e6, 0xfedd43b6, 0xfedd43b6, 0xfedd43b6, 0x366a2df4, 0x366a2df4, 0x366a2df4, 0x724366e5, 0x1e4894f5, 0x1e4894f5, 0x724366e5, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x8cac1ee1, 0x7824cfba, 0x8cac1ee1, 0x8ccca647, 0x1c955882, 0x1c955882, 0xec40c88e, 0xec40c88e, 0xec40c88e, 0x23b78519, 0x23b78519, 0x23b78519, 0xddde890c, 0xddde890c, 0xddde890c, 0x1c955882, 0x8ccca647, 0x8ccca647, 0x1c955882, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xccb8f998, 0x89af656f, 0xccb8f998, 0x8aa609c, 0x4d266f7a, 0x4d266f7a, 0x863eb372, 0x863eb372, 0x863eb372, 0x6049a8cd, 0x6049a8cd, 0x6049a8cd, 0xf870fc5d, 0xf870fc5d, 0xf870fc5d, 0x4d266f7a, 0x8aa609c, 0x8aa609c, 0x4d266f7a, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xa3bd882a, 0x5adc164, 0xa3bd882a, 0x3f4989cd, 0x1ed9d731, 0x1ed9d731, 0x46a1472c, 0x46a1472c, 0x46a1472c, 0xe8c559e9, 0xe8c559e9, 0xe8c559e9, 0xcbac485f, 0xcbac485f, 0xcbac485f, 0x1ed9d731, 0x3f4989cd, 0x3f4989cd, 0x1ed9d731, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xa841a245, 0x7c4a37aa, 0xa841a245, 0xec4a58f9, 0x5387d57f, 0x5387d57f, 0x8670fc38, 0x8670fc38, 0x8670fc38, 0x462990f4, 0x462990f4, 0x462990f4, 0xa1f71262, 0xa1f71262, 0xa1f71262, 0x5387d57f, 0xec4a58f9, 0xec4a58f9, 0x5387d57f, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc589c63a, 0xda1b2d71, 0xc589c63a, 0x7fe18ba5, 0xf83ee7aa, 0xf83ee7aa, 0x74883fe5, 0x74883fe5, 0x74883fe5, 0xe8f1ef16, 0xe8f1ef16, 0xe8f1ef16, 0xd04244be, 0xd04244be, 0xd04244be, 0xf83ee7aa, 0x7fe18ba5, 0x7fe18ba5, 0xf83ee7aa, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x5df86da, 0x97465d78, 0x5df86da, 0x14aa338f, 0x724366e5, 0x724366e5, 0x60829227, 0x60829227, 0x60829227, 0x27bbd0dd, 0x27bbd0dd, 0x27bbd0dd, 0x4a95f797, 0x4a95f797, 0x4a95f797, 0x724366e5, 0x14aa338f, 0x14aa338f, 0x724366e5, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xebf6bdc1, 0xaf2c370b, 0xebf6bdc1, 0x46200f8, 0x5387d57f, 0x5387d57f, 0x81cd0740, 0x81cd0740, 0x81cd0740, 0x5f03489d, 0x5f03489d, 0x5f03489d, 0xcc80da83, 0xcc80da83, 0xcc80da83, 0x5387d57f, 0x46200f8, 0x46200f8, 0x5387d57f, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x5455b923, 0x93681ea, 0x5455b923, 0x259f87cf, 0xf83ee7aa, 0xf83ee7aa, 0xf5cd3d43, 0xf5cd3d43, 0xf5cd3d43, 0x87172e73, 0x87172e73, 0x87172e73, 0xb6827fb5, 0xb6827fb5, 0xb6827fb5, 0xf83ee7aa, 0x259f87cf, 0x259f87cf, 0xf83ee7aa, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xec9a1f85, 0x74e0a22a, 0xec9a1f85, 0x1e4894f5, 0x724366e5, 0x724366e5, 0xa74db0e6, 0xa74db0e6, 0xa74db0e6, 0xfedd43b6, 0xfedd43b6, 0xfedd43b6, 0x366a2df4, 0x366a2df4, 0x366a2df4, 0x724366e5, 0x1e4894f5, 0x1e4894f5, 0x724366e5, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x8cac1ee1, 0x7824cfba, 0x8cac1ee1, 0x8ccca647, 0x1c955882, 0x1c955882, 0xec40c88e, 0xec40c88e, 0xec40c88e, 0x23b78519, 0x23b78519, 0x23b78519, 0xddde890c, 0xddde890c, 0xddde890c, 0x1c955882, 0x8ccca647, 0x8ccca647, 0x1c955882, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xccb8f998, 0x89af656f, 0xccb8f998, 0x8aa609c, 0x4d266f7a, 0x4d266f7a, 0x863eb372, 0x863eb372, 0x863eb372, 0x6049a8cd, 0x6049a8cd, 0x6049a8cd, 0xf870fc5d, 0xf870fc5d, 0xf870fc5d, 0x4d266f7a, 0x8aa609c, 0x8aa609c, 0x4d266f7a, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xa3bd882a, 0x5adc164, 0xa3bd882a, 0x3f4989cd, 0x1ed9d731, 0x1ed9d731, 0x46a1472c, 0x46a1472c, 0x46a1472c, 0xe8c559e9, 0xe8c559e9, 0xe8c559e9, 0xcbac485f, 0xcbac485f, 0xcbac485f, 0x1ed9d731, 0x3f4989cd, 0x3f4989cd, 0x1ed9d731, }, 20 }, + { "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x8bbe1e38, 0xfef8974b, 0x8bbe1e38, 0xdba6ba96, 0x9813a416, 0x9813a416, 0xdf1a19a3, 0xdf1a19a3, 0xdf1a19a3, 0x4ec19f90, 0x4ec19f90, 0x4ec19f90, 0xd2b46a52, 0xd2b46a52, 0xd2b46a52, 0x9813a416, 0xdba6ba96, 0xdba6ba96, 0x9813a416, }, 20 }, + { "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xda045c37, 0xb8ae26e3, 0xda045c37, 0xe0ce8dcd, 0x5fcf013d, 0x5fcf013d, 0xee7a1c7, 0xee7a1c7, 0xee7a1c7, 0xdcf7b9b1, 0xdcf7b9b1, 0xdcf7b9b1, 0xc3dc384c, 0xc3dc384c, 0xc3dc384c, 0x5fcf013d, 0xe0ce8dcd, 0xe0ce8dcd, 0x5fcf013d, }, 20 }, + { "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x2e35339d, 0x798918b, 0x2e35339d, 0x4e4697f7, 0xdd28f52b, 0xdd28f52b, 0x92c68d60, 0x92c68d60, 0x92c68d60, 0xb3fa7484, 0xb3fa7484, 0xb3fa7484, 0xa98b1715, 0xa98b1715, 0xa98b1715, 0xdd28f52b, 0x4e4697f7, 0x4e4697f7, 0xdd28f52b, }, 20 }, + { "gfxterm_ru", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xef4073b7, 0x7c0ec717, 0xef4073b7, 0xacb6bef0, 0x59c36f00, 0x59c36f00, 0x1b206d14, 0x1b206d14, 0x1b206d14, 0x65a00072, 0x65a00072, 0x65a00072, 0xa6823dbf, 0xa6823dbf, 0xa6823dbf, 0x59c36f00, 0xacb6bef0, 0xacb6bef0, 0x59c36f00, }, 20 }, + { "gfxterm_ru", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x439c3f9c, 0xb979a570, 0x439c3f9c, 0x6d99bae3, 0xaa4593fe, 0xaa4593fe, 0x7c7873ca, 0x7c7873ca, 0x7c7873ca, 0xda8d7ead, 0xda8d7ead, 0xda8d7ead, 0x582a9cc6, 0x582a9cc6, 0x582a9cc6, 0xaa4593fe, 0x6d99bae3, 0x6d99bae3, 0xaa4593fe, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x5ba2c945, 0x8734093, 0x5ba2c945, 0x6b5a4c1, 0xc9cbf769, 0xc9cbf769, 0xa3843a5a, 0xa3843a5a, 0xa3843a5a, 0x5d5cfb96, 0x5d5cfb96, 0x5d5cfb96, 0xb50a549a, 0xb50a549a, 0xb50a549a, 0xc9cbf769, 0x6b5a4c1, 0x6b5a4c1, 0xc9cbf769, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x1d557c7b, 0x8d172abd, 0x1d557c7b, 0x4d4dd8d5, 0x9813a416, 0x9813a416, 0xae45df54, 0xae45df54, 0xae45df54, 0x3f9e5967, 0x3f9e5967, 0x3f9e5967, 0xa3ebaca5, 0xa3ebaca5, 0xa3ebaca5, 0x9813a416, 0x4d4dd8d5, 0x4d4dd8d5, 0x9813a416, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x75e8bbc6, 0x79f972a, 0x75e8bbc6, 0x4f226a3c, 0x5fcf013d, 0x5fcf013d, 0xe1849dd3, 0xe1849dd3, 0xe1849dd3, 0x339485a5, 0x339485a5, 0x339485a5, 0x2cbf0458, 0x2cbf0458, 0x2cbf0458, 0x5fcf013d, 0x4f226a3c, 0x4f226a3c, 0x5fcf013d, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7391ddfb, 0x7d352e1, 0x7391ddfb, 0x13e27991, 0xdd28f52b, 0xdd28f52b, 0x25591550, 0x25591550, 0x25591550, 0x465ecb4, 0x465ecb4, 0x465ecb4, 0x1e148f25, 0x1e148f25, 0x1e148f25, 0xdd28f52b, 0x13e27991, 0x13e27991, 0xdd28f52b, }, 20 }, + { "gfxterm_ru", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xc009461b, 0xbaf1821c, 0xc009461b, 0x3e4f4b76, 0x43d1f34, 0x43d1f34, 0x19165017, 0x19165017, 0x19165017, 0x661cf9bf, 0x661cf9bf, 0x661cf9bf, 0x8e3cc096, 0x8e3cc096, 0x8e3cc096, 0x43d1f34, 0x3e4f4b76, 0x3e4f4b76, 0x43d1f34, }, 20 }, + { "gfxterm_ru", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xef4073b7, 0x7c0ec717, 0xef4073b7, 0xacb6bef0, 0x59c36f00, 0x59c36f00, 0x1b206d14, 0x1b206d14, 0x1b206d14, 0x65a00072, 0x65a00072, 0x65a00072, 0xa6823dbf, 0xa6823dbf, 0xa6823dbf, 0x59c36f00, 0xacb6bef0, 0xacb6bef0, 0x59c36f00, }, 20 }, + { "gfxterm_ru", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x439c3f9c, 0xb979a570, 0x439c3f9c, 0x6d99bae3, 0xaa4593fe, 0xaa4593fe, 0x7c7873ca, 0x7c7873ca, 0x7c7873ca, 0xda8d7ead, 0xda8d7ead, 0xda8d7ead, 0x582a9cc6, 0x582a9cc6, 0x582a9cc6, 0xaa4593fe, 0x6d99bae3, 0x6d99bae3, 0xaa4593fe, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x5ba2c945, 0x8734093, 0x5ba2c945, 0x6b5a4c1, 0xc9cbf769, 0xc9cbf769, 0xa3843a5a, 0xa3843a5a, 0xa3843a5a, 0x5d5cfb96, 0x5d5cfb96, 0x5d5cfb96, 0xb50a549a, 0xb50a549a, 0xb50a549a, 0xc9cbf769, 0x6b5a4c1, 0x6b5a4c1, 0xc9cbf769, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xb36b0c97, 0x8089853c, 0xb36b0c97, 0xf760f62b, 0x5387d57f, 0x5387d57f, 0x26a49a0, 0x26a49a0, 0x26a49a0, 0xc233256c, 0xc233256c, 0xc233256c, 0x25eda7fa, 0x25eda7fa, 0x25eda7fa, 0x5387d57f, 0xf760f62b, 0xf760f62b, 0x5387d57f, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x73036285, 0xc9508972, 0x73036285, 0xc96b2f1a, 0xf83ee7aa, 0xf83ee7aa, 0xd1a3be96, 0xd1a3be96, 0xd1a3be96, 0x4dda6e65, 0x4dda6e65, 0x4dda6e65, 0x7569c5cd, 0x7569c5cd, 0x7569c5cd, 0xf83ee7aa, 0xc96b2f1a, 0xc96b2f1a, 0xf83ee7aa, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x2f903fa3, 0xb074c7d0, 0x2f903fa3, 0x3ee58af6, 0x724366e5, 0x724366e5, 0xd7d194f8, 0xd7d194f8, 0xd7d194f8, 0x90e8d602, 0x90e8d602, 0x90e8d602, 0xfdc6f148, 0xfdc6f148, 0xfdc6f148, 0x724366e5, 0x3ee58af6, 0x3ee58af6, 0x724366e5, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xa54ffd19, 0xf7cc7ac2, 0xa54ffd19, 0x4adb4020, 0x5387d57f, 0x5387d57f, 0x5dbc1d5, 0x5dbc1d5, 0x5dbc1d5, 0xdb158e08, 0xdb158e08, 0xdb158e08, 0x48961c16, 0x48961c16, 0x48961c16, 0x5387d57f, 0x4adb4020, 0x4adb4020, 0x5387d57f, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc66fad35, 0x8aac8190, 0xc66fad35, 0xb7a593d9, 0xf83ee7aa, 0xf83ee7aa, 0xb36d8105, 0xb36d8105, 0xb36d8105, 0xc1b79235, 0xc1b79235, 0xc1b79235, 0xf022c3f3, 0xf022c3f3, 0xf022c3f3, 0xf83ee7aa, 0xb7a593d9, 0xb7a593d9, 0xf83ee7aa, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x7f916214, 0x1c80967c, 0x7f916214, 0x8d43e964, 0x724366e5, 0x724366e5, 0xe456696, 0xe456696, 0xe456696, 0x57d595c6, 0x57d595c6, 0x57d595c6, 0x9f62fb84, 0x9f62fb84, 0x9f62fb84, 0x724366e5, 0x8d43e964, 0x8d43e964, 0x724366e5, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x4aeca683, 0xffbbb38e, 0x4aeca683, 0x4a8c1e25, 0x1c955882, 0x1c955882, 0xa0d2f3f6, 0xa0d2f3f6, 0xa0d2f3f6, 0x6f25be61, 0x6f25be61, 0x6f25be61, 0x914cb274, 0x914cb274, 0x914cb274, 0x1c955882, 0x4a8c1e25, 0x4a8c1e25, 0x1c955882, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xb44532a7, 0x73b09a92, 0xb44532a7, 0x7057aba3, 0x4d266f7a, 0x4d266f7a, 0x83606d88, 0x83606d88, 0x83606d88, 0x65177637, 0x65177637, 0x65177637, 0xfd2e22a7, 0xfd2e22a7, 0xfd2e22a7, 0x4d266f7a, 0x7057aba3, 0x7057aba3, 0x4d266f7a, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x62257381, 0xd5d910, 0x62257381, 0xfed17266, 0x1ed9d731, 0x1ed9d731, 0x12670373, 0x12670373, 0x12670373, 0xbc031db6, 0xbc031db6, 0xbc031db6, 0x9f6a0c00, 0x9f6a0c00, 0x9f6a0c00, 0x1ed9d731, 0xfed17266, 0xfed17266, 0x1ed9d731, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xb36b0c97, 0x8089853c, 0xb36b0c97, 0xf760f62b, 0x5387d57f, 0x5387d57f, 0x26a49a0, 0x26a49a0, 0x26a49a0, 0xc233256c, 0xc233256c, 0xc233256c, 0x25eda7fa, 0x25eda7fa, 0x25eda7fa, 0x5387d57f, 0xf760f62b, 0xf760f62b, 0x5387d57f, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x73036285, 0xc9508972, 0x73036285, 0xc96b2f1a, 0xf83ee7aa, 0xf83ee7aa, 0xd1a3be96, 0xd1a3be96, 0xd1a3be96, 0x4dda6e65, 0x4dda6e65, 0x4dda6e65, 0x7569c5cd, 0x7569c5cd, 0x7569c5cd, 0xf83ee7aa, 0xc96b2f1a, 0xc96b2f1a, 0xf83ee7aa, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x2f903fa3, 0xb074c7d0, 0x2f903fa3, 0x3ee58af6, 0x724366e5, 0x724366e5, 0xd7d194f8, 0xd7d194f8, 0xd7d194f8, 0x90e8d602, 0x90e8d602, 0x90e8d602, 0xfdc6f148, 0xfdc6f148, 0xfdc6f148, 0x724366e5, 0x3ee58af6, 0x3ee58af6, 0x724366e5, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xa54ffd19, 0xf7cc7ac2, 0xa54ffd19, 0x4adb4020, 0x5387d57f, 0x5387d57f, 0x5dbc1d5, 0x5dbc1d5, 0x5dbc1d5, 0xdb158e08, 0xdb158e08, 0xdb158e08, 0x48961c16, 0x48961c16, 0x48961c16, 0x5387d57f, 0x4adb4020, 0x4adb4020, 0x5387d57f, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc66fad35, 0x8aac8190, 0xc66fad35, 0xb7a593d9, 0xf83ee7aa, 0xf83ee7aa, 0xb36d8105, 0xb36d8105, 0xb36d8105, 0xc1b79235, 0xc1b79235, 0xc1b79235, 0xf022c3f3, 0xf022c3f3, 0xf022c3f3, 0xf83ee7aa, 0xb7a593d9, 0xb7a593d9, 0xf83ee7aa, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x7f916214, 0x1c80967c, 0x7f916214, 0x8d43e964, 0x724366e5, 0x724366e5, 0xe456696, 0xe456696, 0xe456696, 0x57d595c6, 0x57d595c6, 0x57d595c6, 0x9f62fb84, 0x9f62fb84, 0x9f62fb84, 0x724366e5, 0x8d43e964, 0x8d43e964, 0x724366e5, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x4aeca683, 0xffbbb38e, 0x4aeca683, 0x4a8c1e25, 0x1c955882, 0x1c955882, 0xa0d2f3f6, 0xa0d2f3f6, 0xa0d2f3f6, 0x6f25be61, 0x6f25be61, 0x6f25be61, 0x914cb274, 0x914cb274, 0x914cb274, 0x1c955882, 0x4a8c1e25, 0x4a8c1e25, 0x1c955882, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xb44532a7, 0x73b09a92, 0xb44532a7, 0x7057aba3, 0x4d266f7a, 0x4d266f7a, 0x83606d88, 0x83606d88, 0x83606d88, 0x65177637, 0x65177637, 0x65177637, 0xfd2e22a7, 0xfd2e22a7, 0xfd2e22a7, 0x4d266f7a, 0x7057aba3, 0x7057aba3, 0x4d266f7a, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x62257381, 0xd5d910, 0x62257381, 0xfed17266, 0x1ed9d731, 0x1ed9d731, 0x12670373, 0x12670373, 0x12670373, 0xbc031db6, 0xbc031db6, 0xbc031db6, 0x9f6a0c00, 0x9f6a0c00, 0x9f6a0c00, 0x1ed9d731, 0xfed17266, 0xfed17266, 0x1ed9d731, }, 20 }, + { "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x1d557c7b, 0x8d172abd, 0x1d557c7b, 0x4d4dd8d5, 0x9813a416, 0x9813a416, 0xae45df54, 0xae45df54, 0xae45df54, 0x3f9e5967, 0x3f9e5967, 0x3f9e5967, 0xa3ebaca5, 0xa3ebaca5, 0xa3ebaca5, 0x9813a416, 0x4d4dd8d5, 0x4d4dd8d5, 0x9813a416, }, 20 }, + { "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x75e8bbc6, 0x79f972a, 0x75e8bbc6, 0x4f226a3c, 0x5fcf013d, 0x5fcf013d, 0xe1849dd3, 0xe1849dd3, 0xe1849dd3, 0x339485a5, 0x339485a5, 0x339485a5, 0x2cbf0458, 0x2cbf0458, 0x2cbf0458, 0x5fcf013d, 0x4f226a3c, 0x4f226a3c, 0x5fcf013d, }, 20 }, + { "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7391ddfb, 0x7d352e1, 0x7391ddfb, 0x13e27991, 0xdd28f52b, 0xdd28f52b, 0x25591550, 0x25591550, 0x25591550, 0x465ecb4, 0x465ecb4, 0x465ecb4, 0x1e148f25, 0x1e148f25, 0x1e148f25, 0xdd28f52b, 0x13e27991, 0x13e27991, 0xdd28f52b, }, 20 }, + { "gfxterm_fr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x371337c9, 0x8aa416bc, 0x371337c9, 0x74e5fa8e, 0x59c36f00, 0x59c36f00, 0xb169e11b, 0xb169e11b, 0xb169e11b, 0xcfe98c7d, 0xcfe98c7d, 0xcfe98c7d, 0xccbb1b0, 0xccbb1b0, 0xccbb1b0, 0x59c36f00, 0x74e5fa8e, 0x74e5fa8e, 0x59c36f00, }, 20 }, + { "gfxterm_fr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x38692869, 0xefb9c2f4, 0x38692869, 0x166cad16, 0xaa4593fe, 0xaa4593fe, 0xe4f03f82, 0xe4f03f82, 0xe4f03f82, 0x420532e5, 0x420532e5, 0x420532e5, 0xc0a2d08e, 0xc0a2d08e, 0xc0a2d08e, 0xaa4593fe, 0x166cad16, 0x166cad16, 0xaa4593fe, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x7eb7ddfd, 0x19db9bb1, 0x7eb7ddfd, 0x23a0b079, 0xc9cbf769, 0xc9cbf769, 0x4500ac91, 0x4500ac91, 0x4500ac91, 0xbbd86d5d, 0xbbd86d5d, 0xbbd86d5d, 0x538ec251, 0x538ec251, 0x538ec251, 0xc9cbf769, 0x23a0b079, 0x23a0b079, 0xc9cbf769, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x35512c6d, 0xe29deaf0, 0x35512c6d, 0x654988c3, 0x9813a416, 0x9813a416, 0xc6920c94, 0xc6920c94, 0xc6920c94, 0x57498aa7, 0x57498aa7, 0x57498aa7, 0xcb3c7f65, 0xcb3c7f65, 0xcb3c7f65, 0x9813a416, 0x654988c3, 0x654988c3, 0x9813a416, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x73ff9071, 0x72b83f24, 0x73ff9071, 0x4935418b, 0x5fcf013d, 0x5fcf013d, 0x9963ff63, 0x9963ff63, 0x9963ff63, 0x4b73e715, 0x4b73e715, 0x4b73e715, 0x545866e8, 0x545866e8, 0x545866e8, 0x5fcf013d, 0x4935418b, 0x4935418b, 0x5fcf013d, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x46811b4e, 0xa463f7aa, 0x46811b4e, 0x26f2bf24, 0xdd28f52b, 0xdd28f52b, 0x452cf740, 0x452cf740, 0x452cf740, 0x64100ea4, 0x64100ea4, 0x64100ea4, 0x7e616d35, 0x7e616d35, 0x7e616d35, 0xdd28f52b, 0x26f2bf24, 0x26f2bf24, 0xdd28f52b, }, 20 }, + { "gfxterm_fr", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xd89b7256, 0xe60a4e85, 0xd89b7256, 0x26dd7f3b, 0x43d1f34, 0x43d1f34, 0x55b946c0, 0x55b946c0, 0x55b946c0, 0x2ab3ef68, 0x2ab3ef68, 0x2ab3ef68, 0xc293d641, 0xc293d641, 0xc293d641, 0x43d1f34, 0x26dd7f3b, 0x26dd7f3b, 0x43d1f34, }, 20 }, + { "gfxterm_fr", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x371337c9, 0x8aa416bc, 0x371337c9, 0x74e5fa8e, 0x59c36f00, 0x59c36f00, 0xb169e11b, 0xb169e11b, 0xb169e11b, 0xcfe98c7d, 0xcfe98c7d, 0xcfe98c7d, 0xccbb1b0, 0xccbb1b0, 0xccbb1b0, 0x59c36f00, 0x74e5fa8e, 0x74e5fa8e, 0x59c36f00, }, 20 }, + { "gfxterm_fr", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x38692869, 0xefb9c2f4, 0x38692869, 0x166cad16, 0xaa4593fe, 0xaa4593fe, 0xe4f03f82, 0xe4f03f82, 0xe4f03f82, 0x420532e5, 0x420532e5, 0x420532e5, 0xc0a2d08e, 0xc0a2d08e, 0xc0a2d08e, 0xaa4593fe, 0x166cad16, 0x166cad16, 0xaa4593fe, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x7eb7ddfd, 0x19db9bb1, 0x7eb7ddfd, 0x23a0b079, 0xc9cbf769, 0xc9cbf769, 0x4500ac91, 0x4500ac91, 0x4500ac91, 0xbbd86d5d, 0xbbd86d5d, 0xbbd86d5d, 0x538ec251, 0x538ec251, 0x538ec251, 0xc9cbf769, 0x23a0b079, 0x23a0b079, 0xc9cbf769, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x60f63dde, 0xcb069f7a, 0x60f63dde, 0x24fdc762, 0x5387d57f, 0x5387d57f, 0xf5998b00, 0xf5998b00, 0xf5998b00, 0x35c0e7cc, 0x35c0e7cc, 0x35c0e7cc, 0xd21e655a, 0xd21e655a, 0xd21e655a, 0x5387d57f, 0x24fdc762, 0x24fdc762, 0x5387d57f, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8fa5f86d, 0xed066d2c, 0x8fa5f86d, 0x35cdb5f2, 0xf83ee7aa, 0xf83ee7aa, 0x26e9dc45, 0x26e9dc45, 0x26e9dc45, 0xba900cb6, 0xba900cb6, 0xba900cb6, 0x8223a71e, 0x8223a71e, 0x8223a71e, 0xf83ee7aa, 0x35cdb5f2, 0x35cdb5f2, 0xf83ee7aa, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xf3ebce27, 0x64821e83, 0xf3ebce27, 0xe29e7b72, 0x724366e5, 0x724366e5, 0xf2920fc5, 0xf2920fc5, 0xf2920fc5, 0xb5ab4d3f, 0xb5ab4d3f, 0xb5ab4d3f, 0xd8856a75, 0xd8856a75, 0xd8856a75, 0x724366e5, 0xe29e7b72, 0xe29e7b72, 0x724366e5, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xda2165d2, 0x5f811c6d, 0xda2165d2, 0x35b5d8eb, 0x5387d57f, 0x5387d57f, 0xe5a2fdfd, 0xe5a2fdfd, 0xe5a2fdfd, 0x3b6cb220, 0x3b6cb220, 0x3b6cb220, 0xa8ef203e, 0xa8ef203e, 0xa8ef203e, 0x5387d57f, 0x35b5d8eb, 0x35b5d8eb, 0x5387d57f, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf52ba155, 0x4866b5cd, 0xf52ba155, 0x84e19fb9, 0xf83ee7aa, 0xf83ee7aa, 0xc1a44e99, 0xc1a44e99, 0xc1a44e99, 0xb37e5da9, 0xb37e5da9, 0xb37e5da9, 0x82eb0c6f, 0x82eb0c6f, 0x82eb0c6f, 0xf83ee7aa, 0x84e19fb9, 0x84e19fb9, 0xf83ee7aa, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x16d37834, 0x72eb8d00, 0x16d37834, 0xe401f344, 0x724366e5, 0x724366e5, 0xc80f0332, 0xc80f0332, 0xc80f0332, 0x919ff062, 0x919ff062, 0x919ff062, 0x59289e20, 0x59289e20, 0x59289e20, 0x724366e5, 0xe401f344, 0xe401f344, 0x724366e5, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x501ed137, 0x3eb913d3, 0x501ed137, 0x507e6991, 0x1c955882, 0x1c955882, 0xc988465d, 0xc988465d, 0xc988465d, 0x67f0bca, 0x67f0bca, 0x67f0bca, 0xf81607df, 0xf81607df, 0xf81607df, 0x1c955882, 0x507e6991, 0x507e6991, 0x1c955882, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xdbf45ff0, 0x4b12f903, 0xdbf45ff0, 0x1fe6c6f4, 0x4d266f7a, 0x4d266f7a, 0xee77b36d, 0xee77b36d, 0xee77b36d, 0x800a8d2, 0x800a8d2, 0x800a8d2, 0x9039fc42, 0x9039fc42, 0x9039fc42, 0x4d266f7a, 0x1fe6c6f4, 0x1fe6c6f4, 0x4d266f7a, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x6c3a9814, 0xaa19882a, 0x6c3a9814, 0xf0ce99f3, 0x1ed9d731, 0x1ed9d731, 0x5819ad52, 0x5819ad52, 0x5819ad52, 0xf67db397, 0xf67db397, 0xf67db397, 0xd514a221, 0xd514a221, 0xd514a221, 0x1ed9d731, 0xf0ce99f3, 0xf0ce99f3, 0x1ed9d731, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x60f63dde, 0xcb069f7a, 0x60f63dde, 0x24fdc762, 0x5387d57f, 0x5387d57f, 0xf5998b00, 0xf5998b00, 0xf5998b00, 0x35c0e7cc, 0x35c0e7cc, 0x35c0e7cc, 0xd21e655a, 0xd21e655a, 0xd21e655a, 0x5387d57f, 0x24fdc762, 0x24fdc762, 0x5387d57f, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8fa5f86d, 0xed066d2c, 0x8fa5f86d, 0x35cdb5f2, 0xf83ee7aa, 0xf83ee7aa, 0x26e9dc45, 0x26e9dc45, 0x26e9dc45, 0xba900cb6, 0xba900cb6, 0xba900cb6, 0x8223a71e, 0x8223a71e, 0x8223a71e, 0xf83ee7aa, 0x35cdb5f2, 0x35cdb5f2, 0xf83ee7aa, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xf3ebce27, 0x64821e83, 0xf3ebce27, 0xe29e7b72, 0x724366e5, 0x724366e5, 0xf2920fc5, 0xf2920fc5, 0xf2920fc5, 0xb5ab4d3f, 0xb5ab4d3f, 0xb5ab4d3f, 0xd8856a75, 0xd8856a75, 0xd8856a75, 0x724366e5, 0xe29e7b72, 0xe29e7b72, 0x724366e5, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xda2165d2, 0x5f811c6d, 0xda2165d2, 0x35b5d8eb, 0x5387d57f, 0x5387d57f, 0xe5a2fdfd, 0xe5a2fdfd, 0xe5a2fdfd, 0x3b6cb220, 0x3b6cb220, 0x3b6cb220, 0xa8ef203e, 0xa8ef203e, 0xa8ef203e, 0x5387d57f, 0x35b5d8eb, 0x35b5d8eb, 0x5387d57f, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf52ba155, 0x4866b5cd, 0xf52ba155, 0x84e19fb9, 0xf83ee7aa, 0xf83ee7aa, 0xc1a44e99, 0xc1a44e99, 0xc1a44e99, 0xb37e5da9, 0xb37e5da9, 0xb37e5da9, 0x82eb0c6f, 0x82eb0c6f, 0x82eb0c6f, 0xf83ee7aa, 0x84e19fb9, 0x84e19fb9, 0xf83ee7aa, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x16d37834, 0x72eb8d00, 0x16d37834, 0xe401f344, 0x724366e5, 0x724366e5, 0xc80f0332, 0xc80f0332, 0xc80f0332, 0x919ff062, 0x919ff062, 0x919ff062, 0x59289e20, 0x59289e20, 0x59289e20, 0x724366e5, 0xe401f344, 0xe401f344, 0x724366e5, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x501ed137, 0x3eb913d3, 0x501ed137, 0x507e6991, 0x1c955882, 0x1c955882, 0xc988465d, 0xc988465d, 0xc988465d, 0x67f0bca, 0x67f0bca, 0x67f0bca, 0xf81607df, 0xf81607df, 0xf81607df, 0x1c955882, 0x507e6991, 0x507e6991, 0x1c955882, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xdbf45ff0, 0x4b12f903, 0xdbf45ff0, 0x1fe6c6f4, 0x4d266f7a, 0x4d266f7a, 0xee77b36d, 0xee77b36d, 0xee77b36d, 0x800a8d2, 0x800a8d2, 0x800a8d2, 0x9039fc42, 0x9039fc42, 0x9039fc42, 0x4d266f7a, 0x1fe6c6f4, 0x1fe6c6f4, 0x4d266f7a, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x6c3a9814, 0xaa19882a, 0x6c3a9814, 0xf0ce99f3, 0x1ed9d731, 0x1ed9d731, 0x5819ad52, 0x5819ad52, 0x5819ad52, 0xf67db397, 0xf67db397, 0xf67db397, 0xd514a221, 0xd514a221, 0xd514a221, 0x1ed9d731, 0xf0ce99f3, 0xf0ce99f3, 0x1ed9d731, }, 20 }, + { "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x35512c6d, 0xe29deaf0, 0x35512c6d, 0x654988c3, 0x9813a416, 0x9813a416, 0xc6920c94, 0xc6920c94, 0xc6920c94, 0x57498aa7, 0x57498aa7, 0x57498aa7, 0xcb3c7f65, 0xcb3c7f65, 0xcb3c7f65, 0x9813a416, 0x654988c3, 0x654988c3, 0x9813a416, }, 20 }, + { "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x73ff9071, 0x72b83f24, 0x73ff9071, 0x4935418b, 0x5fcf013d, 0x5fcf013d, 0x9963ff63, 0x9963ff63, 0x9963ff63, 0x4b73e715, 0x4b73e715, 0x4b73e715, 0x545866e8, 0x545866e8, 0x545866e8, 0x5fcf013d, 0x4935418b, 0x4935418b, 0x5fcf013d, }, 20 }, + { "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x46811b4e, 0xa463f7aa, 0x46811b4e, 0x26f2bf24, 0xdd28f52b, 0xdd28f52b, 0x452cf740, 0x452cf740, 0x452cf740, 0x64100ea4, 0x64100ea4, 0x64100ea4, 0x7e616d35, 0x7e616d35, 0x7e616d35, 0xdd28f52b, 0x26f2bf24, 0x26f2bf24, 0xdd28f52b, }, 20 }, + { "gfxterm_quot", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x791b97c6, 0xd80a4dd5, 0x791b97c6, 0x3aed5a81, 0x59c36f00, 0x59c36f00, 0xc8b88a82, 0xc8b88a82, 0xc8b88a82, 0xb638e7e4, 0xb638e7e4, 0xb638e7e4, 0x751ada29, 0x751ada29, 0x751ada29, 0x59c36f00, 0x3aed5a81, 0x3aed5a81, 0x59c36f00, }, 20 }, + { "gfxterm_quot", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x6c6b27f2, 0x9ad8591c, 0x6c6b27f2, 0x426ea28d, 0xaa4593fe, 0xaa4593fe, 0x8b63f19d, 0x8b63f19d, 0x8b63f19d, 0x2d96fcfa, 0x2d96fcfa, 0x2d96fcfa, 0xaf311e91, 0xaf311e91, 0xaf311e91, 0xaa4593fe, 0x426ea28d, 0x426ea28d, 0xaa4593fe, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xb553210b, 0xf9eb9fa4, 0xb553210b, 0xe8444c8f, 0xc9cbf769, 0xc9cbf769, 0xec23555f, 0xec23555f, 0xec23555f, 0x12fb9493, 0x12fb9493, 0x12fb9493, 0xfaad3b9f, 0xfaad3b9f, 0xfaad3b9f, 0xc9cbf769, 0xe8444c8f, 0xe8444c8f, 0xc9cbf769, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x979d71de, 0x73e38996, 0x979d71de, 0xc785d570, 0x9813a416, 0x9813a416, 0xc10419e0, 0xc10419e0, 0xc10419e0, 0x50df9fd3, 0x50df9fd3, 0x50df9fd3, 0xccaa6a11, 0xccaa6a11, 0xccaa6a11, 0x9813a416, 0xc785d570, 0xc785d570, 0x9813a416, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x78d87f9d, 0x345e385f, 0x78d87f9d, 0x4212ae67, 0x5fcf013d, 0x5fcf013d, 0x77ba65ab, 0x77ba65ab, 0x77ba65ab, 0xa5aa7ddd, 0xa5aa7ddd, 0xa5aa7ddd, 0xba81fc20, 0xba81fc20, 0xba81fc20, 0x5fcf013d, 0x4212ae67, 0x4212ae67, 0x5fcf013d, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x750f8146, 0x2148bdae, 0x750f8146, 0x157c252c, 0xdd28f52b, 0xdd28f52b, 0xbc36f156, 0xbc36f156, 0xbc36f156, 0x9d0a08b2, 0x9d0a08b2, 0x9d0a08b2, 0x877b6b23, 0x877b6b23, 0x877b6b23, 0xdd28f52b, 0x157c252c, 0x157c252c, 0xdd28f52b, }, 20 }, + { "gfxterm_quot", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x58828a1e, 0x11d1547e, 0x58828a1e, 0xa6c48773, 0x43d1f34, 0x43d1f34, 0xd204ac75, 0xd204ac75, 0xd204ac75, 0xad0e05dd, 0xad0e05dd, 0xad0e05dd, 0x452e3cf4, 0x452e3cf4, 0x452e3cf4, 0x43d1f34, 0xa6c48773, 0xa6c48773, 0x43d1f34, }, 20 }, + { "gfxterm_quot", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x791b97c6, 0xd80a4dd5, 0x791b97c6, 0x3aed5a81, 0x59c36f00, 0x59c36f00, 0xc8b88a82, 0xc8b88a82, 0xc8b88a82, 0xb638e7e4, 0xb638e7e4, 0xb638e7e4, 0x751ada29, 0x751ada29, 0x751ada29, 0x59c36f00, 0x3aed5a81, 0x3aed5a81, 0x59c36f00, }, 20 }, + { "gfxterm_quot", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x6c6b27f2, 0x9ad8591c, 0x6c6b27f2, 0x426ea28d, 0xaa4593fe, 0xaa4593fe, 0x8b63f19d, 0x8b63f19d, 0x8b63f19d, 0x2d96fcfa, 0x2d96fcfa, 0x2d96fcfa, 0xaf311e91, 0xaf311e91, 0xaf311e91, 0xaa4593fe, 0x426ea28d, 0x426ea28d, 0xaa4593fe, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xb553210b, 0xf9eb9fa4, 0xb553210b, 0xe8444c8f, 0xc9cbf769, 0xc9cbf769, 0xec23555f, 0xec23555f, 0xec23555f, 0x12fb9493, 0x12fb9493, 0x12fb9493, 0xfaad3b9f, 0xfaad3b9f, 0xfaad3b9f, 0xc9cbf769, 0xe8444c8f, 0xe8444c8f, 0xc9cbf769, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe0300e88, 0x76ba1dd0, 0xe0300e88, 0xa43bf434, 0x5387d57f, 0x5387d57f, 0x71381c6, 0x71381c6, 0x71381c6, 0xc74aed0a, 0xc74aed0a, 0xc74aed0a, 0x20946f9c, 0x20946f9c, 0x20946f9c, 0x5387d57f, 0xa43bf434, 0xa43bf434, 0x5387d57f, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa26081d9, 0xef5b1078, 0xa26081d9, 0x1808cc46, 0xf83ee7aa, 0xf83ee7aa, 0x610deea9, 0x610deea9, 0x610deea9, 0xfd743e5a, 0xfd743e5a, 0xfd743e5a, 0xc5c795f2, 0xc5c795f2, 0xc5c795f2, 0xf83ee7aa, 0x1808cc46, 0x1808cc46, 0xf83ee7aa, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x6f16d50f, 0x2fc71082, 0x6f16d50f, 0x7e63605a, 0x724366e5, 0x724366e5, 0xdbb2f05a, 0xdbb2f05a, 0xdbb2f05a, 0x9c8bb2a0, 0x9c8bb2a0, 0x9c8bb2a0, 0xf1a595ea, 0xf1a595ea, 0xf1a595ea, 0x724366e5, 0x7e63605a, 0x7e63605a, 0x724366e5, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc959920b, 0x3548d7d5, 0xc959920b, 0x26cd2f32, 0x5387d57f, 0x5387d57f, 0x23c74007, 0x23c74007, 0x23c74007, 0xfd090fda, 0xfd090fda, 0xfd090fda, 0x6e8a9dc4, 0x6e8a9dc4, 0x6e8a9dc4, 0x5387d57f, 0x26cd2f32, 0x26cd2f32, 0x5387d57f, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x93c26040, 0x70ae777c, 0x93c26040, 0xe2085eac, 0xf83ee7aa, 0xf83ee7aa, 0xa5fd8afa, 0xa5fd8afa, 0xa5fd8afa, 0xd72799ca, 0xd72799ca, 0xd72799ca, 0xe6b2c80c, 0xe6b2c80c, 0xe6b2c80c, 0xf83ee7aa, 0xe2085eac, 0xe2085eac, 0xf83ee7aa, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x73b37a76, 0x352c8931, 0x73b37a76, 0x8161f106, 0x724366e5, 0x724366e5, 0xd0002838, 0xd0002838, 0xd0002838, 0x8990db68, 0x8990db68, 0x8990db68, 0x4127b52a, 0x4127b52a, 0x4127b52a, 0x724366e5, 0x8161f106, 0x8161f106, 0x724366e5, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xe12eaf27, 0xe7b5009a, 0xe12eaf27, 0xe14e1781, 0x1c955882, 0x1c955882, 0x727420bf, 0x727420bf, 0x727420bf, 0xbd836d28, 0xbd836d28, 0xbd836d28, 0x43ea613d, 0x43ea613d, 0x43ea613d, 0x1c955882, 0xe14e1781, 0xe14e1781, 0x1c955882, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x5a376c04, 0xd27c4646, 0x5a376c04, 0x9e25f500, 0x4d266f7a, 0x4d266f7a, 0xc23ec599, 0xc23ec599, 0xc23ec599, 0x2449de26, 0x2449de26, 0x2449de26, 0xbc708ab6, 0xbc708ab6, 0xbc708ab6, 0x4d266f7a, 0x9e25f500, 0x9e25f500, 0x4d266f7a, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x3f02033b, 0xd99eaa7, 0x3f02033b, 0xa3f602dc, 0x1ed9d731, 0x1ed9d731, 0x6ea8026e, 0x6ea8026e, 0x6ea8026e, 0xc0cc1cab, 0xc0cc1cab, 0xc0cc1cab, 0xe3a50d1d, 0xe3a50d1d, 0xe3a50d1d, 0x1ed9d731, 0xa3f602dc, 0xa3f602dc, 0x1ed9d731, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xe0300e88, 0x76ba1dd0, 0xe0300e88, 0xa43bf434, 0x5387d57f, 0x5387d57f, 0x71381c6, 0x71381c6, 0x71381c6, 0xc74aed0a, 0xc74aed0a, 0xc74aed0a, 0x20946f9c, 0x20946f9c, 0x20946f9c, 0x5387d57f, 0xa43bf434, 0xa43bf434, 0x5387d57f, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa26081d9, 0xef5b1078, 0xa26081d9, 0x1808cc46, 0xf83ee7aa, 0xf83ee7aa, 0x610deea9, 0x610deea9, 0x610deea9, 0xfd743e5a, 0xfd743e5a, 0xfd743e5a, 0xc5c795f2, 0xc5c795f2, 0xc5c795f2, 0xf83ee7aa, 0x1808cc46, 0x1808cc46, 0xf83ee7aa, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x6f16d50f, 0x2fc71082, 0x6f16d50f, 0x7e63605a, 0x724366e5, 0x724366e5, 0xdbb2f05a, 0xdbb2f05a, 0xdbb2f05a, 0x9c8bb2a0, 0x9c8bb2a0, 0x9c8bb2a0, 0xf1a595ea, 0xf1a595ea, 0xf1a595ea, 0x724366e5, 0x7e63605a, 0x7e63605a, 0x724366e5, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xc959920b, 0x3548d7d5, 0xc959920b, 0x26cd2f32, 0x5387d57f, 0x5387d57f, 0x23c74007, 0x23c74007, 0x23c74007, 0xfd090fda, 0xfd090fda, 0xfd090fda, 0x6e8a9dc4, 0x6e8a9dc4, 0x6e8a9dc4, 0x5387d57f, 0x26cd2f32, 0x26cd2f32, 0x5387d57f, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x93c26040, 0x70ae777c, 0x93c26040, 0xe2085eac, 0xf83ee7aa, 0xf83ee7aa, 0xa5fd8afa, 0xa5fd8afa, 0xa5fd8afa, 0xd72799ca, 0xd72799ca, 0xd72799ca, 0xe6b2c80c, 0xe6b2c80c, 0xe6b2c80c, 0xf83ee7aa, 0xe2085eac, 0xe2085eac, 0xf83ee7aa, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x73b37a76, 0x352c8931, 0x73b37a76, 0x8161f106, 0x724366e5, 0x724366e5, 0xd0002838, 0xd0002838, 0xd0002838, 0x8990db68, 0x8990db68, 0x8990db68, 0x4127b52a, 0x4127b52a, 0x4127b52a, 0x724366e5, 0x8161f106, 0x8161f106, 0x724366e5, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xe12eaf27, 0xe7b5009a, 0xe12eaf27, 0xe14e1781, 0x1c955882, 0x1c955882, 0x727420bf, 0x727420bf, 0x727420bf, 0xbd836d28, 0xbd836d28, 0xbd836d28, 0x43ea613d, 0x43ea613d, 0x43ea613d, 0x1c955882, 0xe14e1781, 0xe14e1781, 0x1c955882, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x5a376c04, 0xd27c4646, 0x5a376c04, 0x9e25f500, 0x4d266f7a, 0x4d266f7a, 0xc23ec599, 0xc23ec599, 0xc23ec599, 0x2449de26, 0x2449de26, 0x2449de26, 0xbc708ab6, 0xbc708ab6, 0xbc708ab6, 0x4d266f7a, 0x9e25f500, 0x9e25f500, 0x4d266f7a, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x3f02033b, 0xd99eaa7, 0x3f02033b, 0xa3f602dc, 0x1ed9d731, 0x1ed9d731, 0x6ea8026e, 0x6ea8026e, 0x6ea8026e, 0xc0cc1cab, 0xc0cc1cab, 0xc0cc1cab, 0xe3a50d1d, 0xe3a50d1d, 0xe3a50d1d, 0x1ed9d731, 0xa3f602dc, 0xa3f602dc, 0x1ed9d731, }, 20 }, + { "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x979d71de, 0x73e38996, 0x979d71de, 0xc785d570, 0x9813a416, 0x9813a416, 0xc10419e0, 0xc10419e0, 0xc10419e0, 0x50df9fd3, 0x50df9fd3, 0x50df9fd3, 0xccaa6a11, 0xccaa6a11, 0xccaa6a11, 0x9813a416, 0xc785d570, 0xc785d570, 0x9813a416, }, 20 }, + { "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x78d87f9d, 0x345e385f, 0x78d87f9d, 0x4212ae67, 0x5fcf013d, 0x5fcf013d, 0x77ba65ab, 0x77ba65ab, 0x77ba65ab, 0xa5aa7ddd, 0xa5aa7ddd, 0xa5aa7ddd, 0xba81fc20, 0xba81fc20, 0xba81fc20, 0x5fcf013d, 0x4212ae67, 0x4212ae67, 0x5fcf013d, }, 20 }, + { "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x750f8146, 0x2148bdae, 0x750f8146, 0x157c252c, 0xdd28f52b, 0xdd28f52b, 0xbc36f156, 0xbc36f156, 0xbc36f156, 0x9d0a08b2, 0x9d0a08b2, 0x9d0a08b2, 0x877b6b23, 0x877b6b23, 0x877b6b23, 0xdd28f52b, 0x157c252c, 0x157c252c, 0xdd28f52b, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xaabbbcdc, 0x5f5dabb0, 0xaabbbcdc, 0xe94d719b, 0x59c36f00, 0x59c36f00, 0x18f47430, 0x18f47430, 0x18f47430, 0x66741956, 0x66741956, 0x66741956, 0xa556249b, 0xa556249b, 0xa556249b, 0x59c36f00, 0xe94d719b, 0xe94d719b, 0x59c36f00, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xb6fa31f0, 0xc274fbe9, 0xb6fa31f0, 0x98ffb48f, 0xaa4593fe, 0xaa4593fe, 0x4fb2120a, 0x4fb2120a, 0x4fb2120a, 0xe9471f6d, 0xe9471f6d, 0xe9471f6d, 0x6be0fd06, 0x6be0fd06, 0x6be0fd06, 0xaa4593fe, 0x98ffb48f, 0x98ffb48f, 0xaa4593fe, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x9c83aa67, 0x67876bdc, 0x9c83aa67, 0xc194c7e3, 0xc9cbf769, 0xc9cbf769, 0xd6fd9f4a, 0xd6fd9f4a, 0xd6fd9f4a, 0x28255e86, 0x28255e86, 0x28255e86, 0xc073f18a, 0xc073f18a, 0xc073f18a, 0xc9cbf769, 0xc194c7e3, 0xc194c7e3, 0xc9cbf769, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x4878468, 0x58d7f660, 0x4878468, 0x549f20c6, 0x9813a416, 0x9813a416, 0x7c4d228e, 0x7c4d228e, 0x7c4d228e, 0xed96a4bd, 0xed96a4bd, 0xed96a4bd, 0x71e3517f, 0x71e3517f, 0x71e3517f, 0x9813a416, 0x549f20c6, 0x549f20c6, 0x9813a416, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xc24f3617, 0xe92e5f60, 0xc24f3617, 0xf885e7ed, 0x5fcf013d, 0x5fcf013d, 0x9a58adbf, 0x9a58adbf, 0x9a58adbf, 0x4848b5c9, 0x4848b5c9, 0x4848b5c9, 0x57633434, 0x57633434, 0x57633434, 0x5fcf013d, 0xf885e7ed, 0xf885e7ed, 0x5fcf013d, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xe0056f23, 0xe723a6de, 0xe0056f23, 0x8076cb49, 0xdd28f52b, 0xdd28f52b, 0x7cf3620d, 0x7cf3620d, 0x7cf3620d, 0x5dcf9be9, 0x5dcf9be9, 0x5dcf9be9, 0x47bef878, 0x47bef878, 0x47bef878, 0xdd28f52b, 0x8076cb49, 0x8076cb49, 0xdd28f52b, }, 20 }, + { "gfxterm_piglatin", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x74a1734e, 0x3152f141, 0x74a1734e, 0x8ae77e23, 0x43d1f34, 0x43d1f34, 0x83c19830, 0x83c19830, 0x83c19830, 0xfccb3198, 0xfccb3198, 0xfccb3198, 0x14eb08b1, 0x14eb08b1, 0x14eb08b1, 0x43d1f34, 0x8ae77e23, 0x8ae77e23, 0x43d1f34, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xaabbbcdc, 0x5f5dabb0, 0xaabbbcdc, 0xe94d719b, 0x59c36f00, 0x59c36f00, 0x18f47430, 0x18f47430, 0x18f47430, 0x66741956, 0x66741956, 0x66741956, 0xa556249b, 0xa556249b, 0xa556249b, 0x59c36f00, 0xe94d719b, 0xe94d719b, 0x59c36f00, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xb6fa31f0, 0xc274fbe9, 0xb6fa31f0, 0x98ffb48f, 0xaa4593fe, 0xaa4593fe, 0x4fb2120a, 0x4fb2120a, 0x4fb2120a, 0xe9471f6d, 0xe9471f6d, 0xe9471f6d, 0x6be0fd06, 0x6be0fd06, 0x6be0fd06, 0xaa4593fe, 0x98ffb48f, 0x98ffb48f, 0xaa4593fe, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x9c83aa67, 0x67876bdc, 0x9c83aa67, 0xc194c7e3, 0xc9cbf769, 0xc9cbf769, 0xd6fd9f4a, 0xd6fd9f4a, 0xd6fd9f4a, 0x28255e86, 0x28255e86, 0x28255e86, 0xc073f18a, 0xc073f18a, 0xc073f18a, 0xc9cbf769, 0xc194c7e3, 0xc194c7e3, 0xc9cbf769, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xd63f83a3, 0x3dc5a0b4, 0xd63f83a3, 0x9234791f, 0x5387d57f, 0x5387d57f, 0x4cb03e4e, 0x4cb03e4e, 0x4cb03e4e, 0x8ce95282, 0x8ce95282, 0x8ce95282, 0x6b37d014, 0x6b37d014, 0x6b37d014, 0x5387d57f, 0x9234791f, 0x9234791f, 0x5387d57f, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x89626ffa, 0xb4d6175c, 0x89626ffa, 0x330a2265, 0xf83ee7aa, 0xf83ee7aa, 0xbbfb89b5, 0xbbfb89b5, 0xbbfb89b5, 0x27825946, 0x27825946, 0x27825946, 0x1f31f2ee, 0x1f31f2ee, 0x1f31f2ee, 0xf83ee7aa, 0x330a2265, 0x330a2265, 0xf83ee7aa, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x3df87fc2, 0x8c55d02c, 0x3df87fc2, 0x2c8dca97, 0x724366e5, 0x724366e5, 0x3f06ba55, 0x3f06ba55, 0x3f06ba55, 0x783ff8af, 0x783ff8af, 0x783ff8af, 0x1511dfe5, 0x1511dfe5, 0x1511dfe5, 0x724366e5, 0x2c8dca97, 0x2c8dca97, 0x724366e5, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xe39cde76, 0x443930df, 0xe39cde76, 0xc08634f, 0x5387d57f, 0x5387d57f, 0x44754e5f, 0x44754e5f, 0x44754e5f, 0x9abb0182, 0x9abb0182, 0x9abb0182, 0x938939c, 0x938939c, 0x938939c, 0x5387d57f, 0xc08634f, 0xc08634f, 0x5387d57f, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa0b7c23d, 0x8cd3be29, 0xa0b7c23d, 0xd17dfcd1, 0xf83ee7aa, 0xf83ee7aa, 0x5feda75, 0x5feda75, 0x5feda75, 0x7724c945, 0x7724c945, 0x7724c945, 0x46b19883, 0x46b19883, 0x46b19883, 0xf83ee7aa, 0xd17dfcd1, 0xd17dfcd1, 0xf83ee7aa, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xa994524d, 0xc1900d08, 0xa994524d, 0x5b46d93d, 0x724366e5, 0x724366e5, 0x6d0a4799, 0x6d0a4799, 0x6d0a4799, 0x349ab4c9, 0x349ab4c9, 0x349ab4c9, 0xfc2dda8b, 0xfc2dda8b, 0xfc2dda8b, 0x724366e5, 0x5b46d93d, 0x5b46d93d, 0x724366e5, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x41755bc6, 0xf207b232, 0x41755bc6, 0x4115e360, 0x1c955882, 0x1c955882, 0x428d20f6, 0x428d20f6, 0x428d20f6, 0x8d7a6d61, 0x8d7a6d61, 0x8d7a6d61, 0x73136174, 0x73136174, 0x73136174, 0x1c955882, 0x4115e360, 0x4115e360, 0x1c955882, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xe47ded44, 0x862f2131, 0xe47ded44, 0x206f7440, 0x4d266f7a, 0x4d266f7a, 0x95d7f079, 0x95d7f079, 0x95d7f079, 0x73a0ebc6, 0x73a0ebc6, 0x73a0ebc6, 0xeb99bf56, 0xeb99bf56, 0xeb99bf56, 0x4d266f7a, 0x206f7440, 0x206f7440, 0x4d266f7a, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x946b2f62, 0x30dad54, 0x946b2f62, 0x89f2e85, 0x1ed9d731, 0x1ed9d731, 0xf20ee132, 0xf20ee132, 0xf20ee132, 0x5c6afff7, 0x5c6afff7, 0x5c6afff7, 0x7f03ee41, 0x7f03ee41, 0x7f03ee41, 0x1ed9d731, 0x89f2e85, 0x89f2e85, 0x1ed9d731, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xd63f83a3, 0x3dc5a0b4, 0xd63f83a3, 0x9234791f, 0x5387d57f, 0x5387d57f, 0x4cb03e4e, 0x4cb03e4e, 0x4cb03e4e, 0x8ce95282, 0x8ce95282, 0x8ce95282, 0x6b37d014, 0x6b37d014, 0x6b37d014, 0x5387d57f, 0x9234791f, 0x9234791f, 0x5387d57f, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x89626ffa, 0xb4d6175c, 0x89626ffa, 0x330a2265, 0xf83ee7aa, 0xf83ee7aa, 0xbbfb89b5, 0xbbfb89b5, 0xbbfb89b5, 0x27825946, 0x27825946, 0x27825946, 0x1f31f2ee, 0x1f31f2ee, 0x1f31f2ee, 0xf83ee7aa, 0x330a2265, 0x330a2265, 0xf83ee7aa, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x3df87fc2, 0x8c55d02c, 0x3df87fc2, 0x2c8dca97, 0x724366e5, 0x724366e5, 0x3f06ba55, 0x3f06ba55, 0x3f06ba55, 0x783ff8af, 0x783ff8af, 0x783ff8af, 0x1511dfe5, 0x1511dfe5, 0x1511dfe5, 0x724366e5, 0x2c8dca97, 0x2c8dca97, 0x724366e5, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xe39cde76, 0x443930df, 0xe39cde76, 0xc08634f, 0x5387d57f, 0x5387d57f, 0x44754e5f, 0x44754e5f, 0x44754e5f, 0x9abb0182, 0x9abb0182, 0x9abb0182, 0x938939c, 0x938939c, 0x938939c, 0x5387d57f, 0xc08634f, 0xc08634f, 0x5387d57f, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xa0b7c23d, 0x8cd3be29, 0xa0b7c23d, 0xd17dfcd1, 0xf83ee7aa, 0xf83ee7aa, 0x5feda75, 0x5feda75, 0x5feda75, 0x7724c945, 0x7724c945, 0x7724c945, 0x46b19883, 0x46b19883, 0x46b19883, 0xf83ee7aa, 0xd17dfcd1, 0xd17dfcd1, 0xf83ee7aa, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0xa994524d, 0xc1900d08, 0xa994524d, 0x5b46d93d, 0x724366e5, 0x724366e5, 0x6d0a4799, 0x6d0a4799, 0x6d0a4799, 0x349ab4c9, 0x349ab4c9, 0x349ab4c9, 0xfc2dda8b, 0xfc2dda8b, 0xfc2dda8b, 0x724366e5, 0x5b46d93d, 0x5b46d93d, 0x724366e5, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x41755bc6, 0xf207b232, 0x41755bc6, 0x4115e360, 0x1c955882, 0x1c955882, 0x428d20f6, 0x428d20f6, 0x428d20f6, 0x8d7a6d61, 0x8d7a6d61, 0x8d7a6d61, 0x73136174, 0x73136174, 0x73136174, 0x1c955882, 0x4115e360, 0x4115e360, 0x1c955882, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xe47ded44, 0x862f2131, 0xe47ded44, 0x206f7440, 0x4d266f7a, 0x4d266f7a, 0x95d7f079, 0x95d7f079, 0x95d7f079, 0x73a0ebc6, 0x73a0ebc6, 0x73a0ebc6, 0xeb99bf56, 0xeb99bf56, 0xeb99bf56, 0x4d266f7a, 0x206f7440, 0x206f7440, 0x4d266f7a, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x946b2f62, 0x30dad54, 0x946b2f62, 0x89f2e85, 0x1ed9d731, 0x1ed9d731, 0xf20ee132, 0xf20ee132, 0xf20ee132, 0x5c6afff7, 0x5c6afff7, 0x5c6afff7, 0x7f03ee41, 0x7f03ee41, 0x7f03ee41, 0x1ed9d731, 0x89f2e85, 0x89f2e85, 0x1ed9d731, }, 20 }, + { "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x4878468, 0x58d7f660, 0x4878468, 0x549f20c6, 0x9813a416, 0x9813a416, 0x7c4d228e, 0x7c4d228e, 0x7c4d228e, 0xed96a4bd, 0xed96a4bd, 0xed96a4bd, 0x71e3517f, 0x71e3517f, 0x71e3517f, 0x9813a416, 0x549f20c6, 0x549f20c6, 0x9813a416, }, 20 }, + { "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xc24f3617, 0xe92e5f60, 0xc24f3617, 0xf885e7ed, 0x5fcf013d, 0x5fcf013d, 0x9a58adbf, 0x9a58adbf, 0x9a58adbf, 0x4848b5c9, 0x4848b5c9, 0x4848b5c9, 0x57633434, 0x57633434, 0x57633434, 0x5fcf013d, 0xf885e7ed, 0xf885e7ed, 0x5fcf013d, }, 20 }, + { "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xe0056f23, 0xe723a6de, 0xe0056f23, 0x8076cb49, 0xdd28f52b, 0xdd28f52b, 0x7cf3620d, 0x7cf3620d, 0x7cf3620d, 0x5dcf9be9, 0x5dcf9be9, 0x5dcf9be9, 0x47bef878, 0x47bef878, 0x47bef878, 0xdd28f52b, 0x8076cb49, 0x8076cb49, 0xdd28f52b, }, 20 }, + { "gfxterm_ch", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x5ee30ef2, 0xcb34e9e1, 0x5ee30ef2, 0x1d15c3b5, 0x59c36f00, 0x59c36f00, 0x201d9661, 0x201d9661, 0x201d9661, 0x5e9dfb07, 0x5e9dfb07, 0x5e9dfb07, 0x9dbfc6ca, 0x9dbfc6ca, 0x9dbfc6ca, 0x59c36f00, 0x1d15c3b5, 0x1d15c3b5, 0x59c36f00, }, 20 }, + { "gfxterm_ch", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x8f30caea, 0xabe72645, 0x8f30caea, 0xa1354f95, 0xaa4593fe, 0xaa4593fe, 0xe17bf494, 0xe17bf494, 0xe17bf494, 0x478ef9f3, 0x478ef9f3, 0x478ef9f3, 0xc5291b98, 0xc5291b98, 0xc5291b98, 0xaa4593fe, 0xa1354f95, 0xa1354f95, 0xaa4593fe, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x3a734c3, 0x18bd52c, 0x3a734c3, 0x5eb05947, 0xc9cbf769, 0xc9cbf769, 0x128d62c1, 0x128d62c1, 0x128d62c1, 0xec55a30d, 0xec55a30d, 0xec55a30d, 0x4030c01, 0x4030c01, 0x4030c01, 0xc9cbf769, 0x5eb05947, 0x5eb05947, 0xc9cbf769, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x34a86f24, 0xfae0384, 0x34a86f24, 0x64b0cb8a, 0x9813a416, 0x9813a416, 0x13b7fe00, 0x13b7fe00, 0x13b7fe00, 0x826c7833, 0x826c7833, 0x826c7833, 0x1e198df1, 0x1e198df1, 0x1e198df1, 0x9813a416, 0x64b0cb8a, 0x64b0cb8a, 0x9813a416, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x7cf1a92b, 0x413f2fa3, 0x7cf1a92b, 0x463b78d1, 0x5fcf013d, 0x5fcf013d, 0x4f98bcd5, 0x4f98bcd5, 0x4f98bcd5, 0x9d88a4a3, 0x9d88a4a3, 0x9d88a4a3, 0x82a3255e, 0x82a3255e, 0x82a3255e, 0x5fcf013d, 0x463b78d1, 0x463b78d1, 0x5fcf013d, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7d24f50c, 0x85834892, 0x7d24f50c, 0x1d575166, 0xdd28f52b, 0xdd28f52b, 0x167fd4de, 0x167fd4de, 0x167fd4de, 0x37432d3a, 0x37432d3a, 0x37432d3a, 0x2d324eab, 0x2d324eab, 0x2d324eab, 0xdd28f52b, 0x1d575166, 0x1d575166, 0xdd28f52b, }, 20 }, + { "gfxterm_ch", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x505523f2, 0x24d00e51, 0x505523f2, 0xae132e9f, 0x43d1f34, 0x43d1f34, 0xcaaadc5e, 0xcaaadc5e, 0xcaaadc5e, 0xb5a075f6, 0xb5a075f6, 0xb5a075f6, 0x5d804cdf, 0x5d804cdf, 0x5d804cdf, 0x43d1f34, 0xae132e9f, 0xae132e9f, 0x43d1f34, }, 20 }, + { "gfxterm_ch", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x5ee30ef2, 0xcb34e9e1, 0x5ee30ef2, 0x1d15c3b5, 0x59c36f00, 0x59c36f00, 0x201d9661, 0x201d9661, 0x201d9661, 0x5e9dfb07, 0x5e9dfb07, 0x5e9dfb07, 0x9dbfc6ca, 0x9dbfc6ca, 0x9dbfc6ca, 0x59c36f00, 0x1d15c3b5, 0x1d15c3b5, 0x59c36f00, }, 20 }, + { "gfxterm_ch", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x8f30caea, 0xabe72645, 0x8f30caea, 0xa1354f95, 0xaa4593fe, 0xaa4593fe, 0xe17bf494, 0xe17bf494, 0xe17bf494, 0x478ef9f3, 0x478ef9f3, 0x478ef9f3, 0xc5291b98, 0xc5291b98, 0xc5291b98, 0xaa4593fe, 0xa1354f95, 0xa1354f95, 0xaa4593fe, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x3a734c3, 0x18bd52c, 0x3a734c3, 0x5eb05947, 0xc9cbf769, 0xc9cbf769, 0x128d62c1, 0x128d62c1, 0x128d62c1, 0xec55a30d, 0xec55a30d, 0xec55a30d, 0x4030c01, 0x4030c01, 0x4030c01, 0xc9cbf769, 0x5eb05947, 0x5eb05947, 0xc9cbf769, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xeba6cfbb, 0xcfb5c41c, 0xeba6cfbb, 0xafad3507, 0x5387d57f, 0x5387d57f, 0x71f3f018, 0x71f3f018, 0x71f3f018, 0xb1aa9cd4, 0xb1aa9cd4, 0xb1aa9cd4, 0x56741e42, 0x56741e42, 0x56741e42, 0x5387d57f, 0xafad3507, 0xafad3507, 0x5387d57f, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x9003ad29, 0xb92d2c38, 0x9003ad29, 0x2a6be0b6, 0xf83ee7aa, 0xf83ee7aa, 0x49d26800, 0x49d26800, 0x49d26800, 0xd5abb8f3, 0xd5abb8f3, 0xd5abb8f3, 0xed18135b, 0xed18135b, 0xed18135b, 0xf83ee7aa, 0x2a6be0b6, 0x2a6be0b6, 0xf83ee7aa, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x238c7b12, 0x2eefc892, 0x238c7b12, 0x32f9ce47, 0x724366e5, 0x724366e5, 0x3d1942f9, 0x3d1942f9, 0x3d1942f9, 0x7a200003, 0x7a200003, 0x7a200003, 0x170e2749, 0x170e2749, 0x170e2749, 0x724366e5, 0x32f9ce47, 0x32f9ce47, 0x724366e5, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x9e1c123, 0xa92b0ab6, 0x9e1c123, 0xe6757c1a, 0x5387d57f, 0x5387d57f, 0xa443a74a, 0xa443a74a, 0xa443a74a, 0x7a8de897, 0x7a8de897, 0x7a8de897, 0xe90e7a89, 0xe90e7a89, 0xe90e7a89, 0x5387d57f, 0xe6757c1a, 0xe6757c1a, 0x5387d57f, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xabb151dd, 0xfa21aa13, 0xabb151dd, 0xda7b6f31, 0xf83ee7aa, 0xf83ee7aa, 0x9d6ae4fd, 0x9d6ae4fd, 0x9d6ae4fd, 0xefb0f7cd, 0xefb0f7cd, 0xefb0f7cd, 0xde25a60b, 0xde25a60b, 0xde25a60b, 0xf83ee7aa, 0xda7b6f31, 0xda7b6f31, 0xf83ee7aa, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x6dd9406d, 0xde872977, 0x6dd9406d, 0x9f0bcb1d, 0x724366e5, 0x724366e5, 0x8b3051ad, 0x8b3051ad, 0x8b3051ad, 0xd2a0a2fd, 0xd2a0a2fd, 0xd2a0a2fd, 0x1a17ccbf, 0x1a17ccbf, 0x1a17ccbf, 0x724366e5, 0x9f0bcb1d, 0x9f0bcb1d, 0x724366e5, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x397d3da2, 0xeb896cf, 0x397d3da2, 0x391d8504, 0x1c955882, 0x1c955882, 0x16aa0778, 0x16aa0778, 0x16aa0778, 0xd95d4aef, 0xd95d4aef, 0xd95d4aef, 0x273446fa, 0x273446fa, 0x273446fa, 0x1c955882, 0x391d8504, 0x391d8504, 0x1c955882, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xb4b2e2fa, 0x74314de8, 0xb4b2e2fa, 0x70a07bfe, 0x4d266f7a, 0x4d266f7a, 0xe69c42f4, 0xe69c42f4, 0xe69c42f4, 0xeb594b, 0xeb594b, 0xeb594b, 0x98d20ddb, 0x98d20ddb, 0x98d20ddb, 0x4d266f7a, 0x70a07bfe, 0x70a07bfe, 0x4d266f7a, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd2db665c, 0xcb12d20c, 0xd2db665c, 0x4e2f67bb, 0x1ed9d731, 0x1ed9d731, 0x1952ab15, 0x1952ab15, 0x1952ab15, 0xb736b5d0, 0xb736b5d0, 0xb736b5d0, 0x945fa466, 0x945fa466, 0x945fa466, 0x1ed9d731, 0x4e2f67bb, 0x4e2f67bb, 0x1ed9d731, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xeba6cfbb, 0xcfb5c41c, 0xeba6cfbb, 0xafad3507, 0x5387d57f, 0x5387d57f, 0x71f3f018, 0x71f3f018, 0x71f3f018, 0xb1aa9cd4, 0xb1aa9cd4, 0xb1aa9cd4, 0x56741e42, 0x56741e42, 0x56741e42, 0x5387d57f, 0xafad3507, 0xafad3507, 0x5387d57f, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x9003ad29, 0xb92d2c38, 0x9003ad29, 0x2a6be0b6, 0xf83ee7aa, 0xf83ee7aa, 0x49d26800, 0x49d26800, 0x49d26800, 0xd5abb8f3, 0xd5abb8f3, 0xd5abb8f3, 0xed18135b, 0xed18135b, 0xed18135b, 0xf83ee7aa, 0x2a6be0b6, 0x2a6be0b6, 0xf83ee7aa, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x238c7b12, 0x2eefc892, 0x238c7b12, 0x32f9ce47, 0x724366e5, 0x724366e5, 0x3d1942f9, 0x3d1942f9, 0x3d1942f9, 0x7a200003, 0x7a200003, 0x7a200003, 0x170e2749, 0x170e2749, 0x170e2749, 0x724366e5, 0x32f9ce47, 0x32f9ce47, 0x724366e5, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x9e1c123, 0xa92b0ab6, 0x9e1c123, 0xe6757c1a, 0x5387d57f, 0x5387d57f, 0xa443a74a, 0xa443a74a, 0xa443a74a, 0x7a8de897, 0x7a8de897, 0x7a8de897, 0xe90e7a89, 0xe90e7a89, 0xe90e7a89, 0x5387d57f, 0xe6757c1a, 0xe6757c1a, 0x5387d57f, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xabb151dd, 0xfa21aa13, 0xabb151dd, 0xda7b6f31, 0xf83ee7aa, 0xf83ee7aa, 0x9d6ae4fd, 0x9d6ae4fd, 0x9d6ae4fd, 0xefb0f7cd, 0xefb0f7cd, 0xefb0f7cd, 0xde25a60b, 0xde25a60b, 0xde25a60b, 0xf83ee7aa, 0xda7b6f31, 0xda7b6f31, 0xf83ee7aa, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x6dd9406d, 0xde872977, 0x6dd9406d, 0x9f0bcb1d, 0x724366e5, 0x724366e5, 0x8b3051ad, 0x8b3051ad, 0x8b3051ad, 0xd2a0a2fd, 0xd2a0a2fd, 0xd2a0a2fd, 0x1a17ccbf, 0x1a17ccbf, 0x1a17ccbf, 0x724366e5, 0x9f0bcb1d, 0x9f0bcb1d, 0x724366e5, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x397d3da2, 0xeb896cf, 0x397d3da2, 0x391d8504, 0x1c955882, 0x1c955882, 0x16aa0778, 0x16aa0778, 0x16aa0778, 0xd95d4aef, 0xd95d4aef, 0xd95d4aef, 0x273446fa, 0x273446fa, 0x273446fa, 0x1c955882, 0x391d8504, 0x391d8504, 0x1c955882, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xb4b2e2fa, 0x74314de8, 0xb4b2e2fa, 0x70a07bfe, 0x4d266f7a, 0x4d266f7a, 0xe69c42f4, 0xe69c42f4, 0xe69c42f4, 0xeb594b, 0xeb594b, 0xeb594b, 0x98d20ddb, 0x98d20ddb, 0x98d20ddb, 0x4d266f7a, 0x70a07bfe, 0x70a07bfe, 0x4d266f7a, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xd2db665c, 0xcb12d20c, 0xd2db665c, 0x4e2f67bb, 0x1ed9d731, 0x1ed9d731, 0x1952ab15, 0x1952ab15, 0x1952ab15, 0xb736b5d0, 0xb736b5d0, 0xb736b5d0, 0x945fa466, 0x945fa466, 0x945fa466, 0x1ed9d731, 0x4e2f67bb, 0x4e2f67bb, 0x1ed9d731, }, 20 }, + { "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x34a86f24, 0xfae0384, 0x34a86f24, 0x64b0cb8a, 0x9813a416, 0x9813a416, 0x13b7fe00, 0x13b7fe00, 0x13b7fe00, 0x826c7833, 0x826c7833, 0x826c7833, 0x1e198df1, 0x1e198df1, 0x1e198df1, 0x9813a416, 0x64b0cb8a, 0x64b0cb8a, 0x9813a416, }, 20 }, + { "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x7cf1a92b, 0x413f2fa3, 0x7cf1a92b, 0x463b78d1, 0x5fcf013d, 0x5fcf013d, 0x4f98bcd5, 0x4f98bcd5, 0x4f98bcd5, 0x9d88a4a3, 0x9d88a4a3, 0x9d88a4a3, 0x82a3255e, 0x82a3255e, 0x82a3255e, 0x5fcf013d, 0x463b78d1, 0x463b78d1, 0x5fcf013d, }, 20 }, + { "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x7d24f50c, 0x85834892, 0x7d24f50c, 0x1d575166, 0xdd28f52b, 0xdd28f52b, 0x167fd4de, 0x167fd4de, 0x167fd4de, 0x37432d3a, 0x37432d3a, 0x37432d3a, 0x2d324eab, 0x2d324eab, 0x2d324eab, 0xdd28f52b, 0x1d575166, 0x1d575166, 0xdd28f52b, }, 20 }, + { "gfxterm_red", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xa64abc46, 0x75b6655, 0xa64abc46, 0x8ab5be58, 0x59c36f00, 0x59c36f00, 0xa119c4f4, 0xa119c4f4, 0xa119c4f4, 0xdf99a992, 0xdf99a992, 0xdf99a992, 0x1cbb945f, 0x1cbb945f, 0x1cbb945f, 0x59c36f00, 0x8ab5be58, 0x8ab5be58, 0x59c36f00, }, 20 }, + { "gfxterm_red", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x58be41e7, 0xae0d3f09, 0x58be41e7, 0xda7a6cbf, 0xaa4593fe, 0xaa4593fe, 0x794b67, 0x794b67, 0x794b67, 0xa68c4600, 0xa68c4600, 0xa68c4600, 0x242ba46b, 0x242ba46b, 0x242ba46b, 0xaa4593fe, 0xda7a6cbf, 0xda7a6cbf, 0xaa4593fe, }, 20 }, + { "gfxterm_red", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xaaa4d3ad, 0xe61c6d02, 0xaaa4d3ad, 0xff557024, 0xc9cbf769, 0xc9cbf769, 0x780542e8, 0x780542e8, 0x780542e8, 0x86dd8324, 0x86dd8324, 0x86dd8324, 0x6e8b2c28, 0x6e8b2c28, 0x6e8b2c28, 0xc9cbf769, 0xff557024, 0xff557024, 0xc9cbf769, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xf168f0ba, 0x151608f2, 0xf168f0ba, 0x1f8e266b, 0x9813a416, 0x9813a416, 0x358d1fb0, 0x358d1fb0, 0x358d1fb0, 0xa4569983, 0xa4569983, 0xa4569983, 0x38236c41, 0x38236c41, 0x38236c41, 0x9813a416, 0x1f8e266b, 0x1f8e266b, 0x9813a416, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x927c4cf9, 0xdefa0b3b, 0x927c4cf9, 0x64636a93, 0x5fcf013d, 0x5fcf013d, 0xae2ee3eb, 0xae2ee3eb, 0xae2ee3eb, 0x7c3efb9d, 0x7c3efb9d, 0x7c3efb9d, 0x63157a60, 0x63157a60, 0x63157a60, 0x5fcf013d, 0x64636a93, 0x64636a93, 0x5fcf013d, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x2d254926, 0x796275ce, 0x2d254926, 0x17c0c9cb, 0xdd28f52b, 0xdd28f52b, 0x79439443, 0x79439443, 0x79439443, 0x587f6da7, 0x587f6da7, 0x587f6da7, 0x420e0e36, 0x420e0e36, 0x420e0e36, 0xdd28f52b, 0x17c0c9cb, 0x17c0c9cb, 0xdd28f52b, }, 20 }, + { "gfxterm_red", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x755377f, 0x4e06e91f, 0x755377f, 0xe42f3a5, 0x43d1f34, 0x43d1f34, 0x3ac2d7b5, 0x3ac2d7b5, 0x3ac2d7b5, 0x45c87e1d, 0x45c87e1d, 0x45c87e1d, 0xade84734, 0xade84734, 0xade84734, 0x43d1f34, 0xe42f3a5, 0xe42f3a5, 0x43d1f34, }, 20 }, + { "gfxterm_red", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xa64abc46, 0x75b6655, 0xa64abc46, 0x8ab5be58, 0x59c36f00, 0x59c36f00, 0xa119c4f4, 0xa119c4f4, 0xa119c4f4, 0xdf99a992, 0xdf99a992, 0xdf99a992, 0x1cbb945f, 0x1cbb945f, 0x1cbb945f, 0x59c36f00, 0x8ab5be58, 0x8ab5be58, 0x59c36f00, }, 20 }, + { "gfxterm_red", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x58be41e7, 0xae0d3f09, 0x58be41e7, 0xda7a6cbf, 0xaa4593fe, 0xaa4593fe, 0x794b67, 0x794b67, 0x794b67, 0xa68c4600, 0xa68c4600, 0xa68c4600, 0x242ba46b, 0x242ba46b, 0x242ba46b, 0xaa4593fe, 0xda7a6cbf, 0xda7a6cbf, 0xaa4593fe, }, 20 }, + { "gfxterm_red", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0xaaa4d3ad, 0xe61c6d02, 0xaaa4d3ad, 0xff557024, 0xc9cbf769, 0xc9cbf769, 0x780542e8, 0x780542e8, 0x780542e8, 0x86dd8324, 0x86dd8324, 0x86dd8324, 0x6e8b2c28, 0x6e8b2c28, 0x6e8b2c28, 0xc9cbf769, 0xff557024, 0xff557024, 0xc9cbf769, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xcffd463e, 0x59775566, 0xcffd463e, 0xb4e87140, 0x5387d57f, 0x5387d57f, 0xc2a27e06, 0xc2a27e06, 0xc2a27e06, 0x2fb12ca, 0x2fb12ca, 0x2fb12ca, 0xe525905c, 0xe525905c, 0xe525905c, 0x5387d57f, 0xb4e87140, 0xb4e87140, 0x5387d57f, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x91d12daf, 0xdceabc0e, 0x91d12daf, 0xf372b81f, 0xf83ee7aa, 0xf83ee7aa, 0x85a69692, 0x85a69692, 0x85a69692, 0x19df4661, 0x19df4661, 0x19df4661, 0x216cedc9, 0x216cedc9, 0x216cedc9, 0xf83ee7aa, 0xf372b81f, 0xf372b81f, 0xf83ee7aa, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x5f5953b3, 0x1f88963e, 0x5f5953b3, 0x6aeb9112, 0x724366e5, 0x724366e5, 0xc5da2432, 0xc5da2432, 0xc5da2432, 0x82e366c8, 0x82e366c8, 0x82e366c8, 0xefcd4182, 0xefcd4182, 0xefcd4182, 0x724366e5, 0x6aeb9112, 0x6aeb9112, 0x724366e5, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x1227533e, 0xee3616e0, 0x1227533e, 0xc32db32e, 0x5387d57f, 0x5387d57f, 0xa347c834, 0xa347c834, 0xa347c834, 0x7d8987e9, 0x7d8987e9, 0x7d8987e9, 0xee0a15f7, 0xee0a15f7, 0xee0a15f7, 0x5387d57f, 0xc32db32e, 0xc32db32e, 0x5387d57f, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0xc548a908, 0x2624be34, 0xc548a908, 0x1745599, 0xf83ee7aa, 0xf83ee7aa, 0xaaaf7e14, 0xaaaf7e14, 0xaaaf7e14, 0xd8756d24, 0xd8756d24, 0xd8756d24, 0xe9e03ce2, 0xe9e03ce2, 0xe9e03ce2, 0xf83ee7aa, 0x1745599, 0x1745599, 0xf83ee7aa, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x30506e44, 0x76cf9d03, 0x30506e44, 0x33485d71, 0x724366e5, 0x724366e5, 0xd12bc953, 0xd12bc953, 0xd12bc953, 0x88bb3a03, 0x88bb3a03, 0x88bb3a03, 0x400c5441, 0x400c5441, 0x400c5441, 0x724366e5, 0x33485d71, 0x33485d71, 0x724366e5, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xa3238023, 0xa5b82f9e, 0xa3238023, 0x93f8a252, 0x1c955882, 0x1c955882, 0x205b041f, 0x205b041f, 0x205b041f, 0xefac4988, 0xefac4988, 0xefac4988, 0x11c5459d, 0x11c5459d, 0x11c5459d, 0x1c955882, 0x93f8a252, 0x93f8a252, 0x1c955882, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xf651c995, 0x7e1ae3d7, 0xf651c995, 0xdab860af, 0x4d266f7a, 0x4d266f7a, 0x6272be10, 0x6272be10, 0x6272be10, 0x8405a5af, 0x8405a5af, 0x8405a5af, 0x1c3cf13f, 0x1c3cf13f, 0x1c3cf13f, 0x4d266f7a, 0xdab860af, 0xdab860af, 0x4d266f7a, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x2fa6119, 0x30618885, 0x2fa6119, 0xbfbe1b6a, 0x1ed9d731, 0x1ed9d731, 0x11353cf5, 0x11353cf5, 0x11353cf5, 0xbf512230, 0xbf512230, 0xbf512230, 0x9c383386, 0x9c383386, 0x9c383386, 0x1ed9d731, 0xbfbe1b6a, 0xbfbe1b6a, 0x1ed9d731, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0x4caf1997, 0xda250acf, 0x4caf1997, 0x2183903f, 0x5387d57f, 0x5387d57f, 0x6be656ff, 0x6be656ff, 0x6be656ff, 0xabbf3a33, 0xabbf3a33, 0xabbf3a33, 0x4c61b8a5, 0x4c61b8a5, 0x4c61b8a5, 0x5387d57f, 0x2183903f, 0x2183903f, 0x5387d57f, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x7b29cc8e, 0x36125d2f, 0x7b29cc8e, 0x1277092, 0xf83ee7aa, 0xf83ee7aa, 0x4830d5b5, 0x4830d5b5, 0x4830d5b5, 0xd4490546, 0xd4490546, 0xd4490546, 0xecfaaeee, 0xecfaaeee, 0xecfaaeee, 0xf83ee7aa, 0x1277092, 0x1277092, 0xf83ee7aa, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0x2e644de2, 0x6eb5886f, 0x2e644de2, 0x3d66c6af, 0x724366e5, 0x724366e5, 0x5d800f18, 0x5d800f18, 0x5d800f18, 0x1ab94de2, 0x1ab94de2, 0x1ab94de2, 0x77976aa8, 0x77976aa8, 0x77976aa8, 0x724366e5, 0x3d66c6af, 0x3d66c6af, 0x724366e5, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x5f11f8eb, 0xa300bd35, 0x5f11f8eb, 0xe2cba3fa, 0x5387d57f, 0x5387d57f, 0xfa2cee75, 0xfa2cee75, 0xfa2cee75, 0x24e2a1a8, 0x24e2a1a8, 0x24e2a1a8, 0xb76133b6, 0xb76133b6, 0xb76133b6, 0x5387d57f, 0xe2cba3fa, 0xe2cba3fa, 0x5387d57f, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x179340b2, 0xf4ff578e, 0x179340b2, 0xe378eba9, 0xf83ee7aa, 0xf83ee7aa, 0xf787fcc2, 0xf787fcc2, 0xf787fcc2, 0x855deff2, 0x855deff2, 0x855deff2, 0xb4c8be34, 0xb4c8be34, 0xb4c8be34, 0xf83ee7aa, 0xe378eba9, 0xe378eba9, 0xf83ee7aa, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x5703fa5a, 0x119c091d, 0x5703fa5a, 0xa13f0d1a, 0x724366e5, 0x724366e5, 0xd989a04d, 0xd989a04d, 0xd989a04d, 0x8019531d, 0x8019531d, 0x8019531d, 0x48ae3d5f, 0x48ae3d5f, 0x48ae3d5f, 0x724366e5, 0xa13f0d1a, 0xa13f0d1a, 0x724366e5, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xf38c2b36, 0xf517848b, 0xf38c2b36, 0xa2621779, 0x1c955882, 0x1c955882, 0x153777fa, 0x153777fa, 0x153777fa, 0xdac03a6d, 0xdac03a6d, 0xdac03a6d, 0x24a93678, 0x24a93678, 0x24a93678, 0x1c955882, 0xa2621779, 0xa2621779, 0x1c955882, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xb8253868, 0x306e122a, 0xb8253868, 0x83b58e9b, 0x4d266f7a, 0x4d266f7a, 0x98183444, 0x98183444, 0x98183444, 0x7e6f2ffb, 0x7e6f2ffb, 0x7e6f2ffb, 0xe6567b6b, 0xe6567b6b, 0xe6567b6b, 0x4d266f7a, 0x83b58e9b, 0x83b58e9b, 0x4d266f7a, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x40c62f40, 0x725dc6dc, 0x40c62f40, 0x50dfba34, 0x1ed9d731, 0x1ed9d731, 0x32e89a68, 0x32e89a68, 0x32e89a68, 0x9c8c84ad, 0x9c8c84ad, 0x9c8c84ad, 0xbfe5951b, 0xbfe5951b, 0xbfe5951b, 0x1ed9d731, 0x50dfba34, 0x50dfba34, 0x1ed9d731, }, 20 }, + { "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xfaeb56f1, 0x1e95aeb9, 0xfaeb56f1, 0xe4ddf18b, 0x9813a416, 0x9813a416, 0x5da5926f, 0x5da5926f, 0x5da5926f, 0xcc7e145c, 0xcc7e145c, 0xcc7e145c, 0x500be19e, 0x500be19e, 0x500be19e, 0x9813a416, 0xe4ddf18b, 0xe4ddf18b, 0x9813a416, }, 20 }, + { "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xa11f0307, 0xed9944c5, 0xa11f0307, 0x93a8828e, 0x5fcf013d, 0x5fcf013d, 0xeabf61dc, 0xeabf61dc, 0xeabf61dc, 0x38af79aa, 0x38af79aa, 0x38af79aa, 0x2784f857, 0x2784f857, 0x2784f857, 0x5fcf013d, 0x93a8828e, 0x93a8828e, 0x5fcf013d, }, 20 }, + { "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xeedd0ec5, 0xba9a322d, 0xeedd0ec5, 0x32205338, 0xdd28f52b, 0xdd28f52b, 0x14854a2b, 0x14854a2b, 0x14854a2b, 0x35b9b3cf, 0x35b9b3cf, 0x35b9b3cf, 0x2fc8d05e, 0x2fc8d05e, 0x2fc8d05e, 0xdd28f52b, 0x32205338, 0x32205338, 0xdd28f52b, }, 20 }, + { "gfxterm_high", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xe7baf88f, 0x46ab229c, 0xe7baf88f, 0x2422eb85, 0x59c36f00, 0x59c36f00, 0xc8b88a82, 0xc8b88a82, 0xc8b88a82, 0xb638e7e4, 0xb638e7e4, 0xb638e7e4, 0x751ada29, 0x751ada29, 0x751ada29, 0x59c36f00, 0x2422eb85, 0x2422eb85, 0x59c36f00, }, 20 }, + { "gfxterm_high", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x86184b5, 0xfed2fa5b, 0x86184b5, 0xf984bb34, 0xaa4593fe, 0xaa4593fe, 0x8b63f19d, 0x8b63f19d, 0x8b63f19d, 0x2d96fcfa, 0x2d96fcfa, 0x2d96fcfa, 0xaf311e91, 0xaf311e91, 0xaf311e91, 0xaa4593fe, 0xf984bb34, 0xf984bb34, 0xaa4593fe, }, 20 }, + { "gfxterm_high", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x2dda8793, 0x6162393c, 0x2dda8793, 0x2a6bc689, 0xc9cbf769, 0xc9cbf769, 0xec23555f, 0xec23555f, 0xec23555f, 0x12fb9493, 0x12fb9493, 0x12fb9493, 0xfaad3b9f, 0xfaad3b9f, 0xfaad3b9f, 0xc9cbf769, 0x2a6bc689, 0x2a6bc689, 0xc9cbf769, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xf2b1715, 0xeb55ef5d, 0xf2b1715, 0x61e172d4, 0x9813a416, 0x9813a416, 0xc10419e0, 0xc10419e0, 0xc10419e0, 0x50df9fd3, 0x50df9fd3, 0x50df9fd3, 0xccaa6a11, 0xccaa6a11, 0xccaa6a11, 0x9813a416, 0x61e172d4, 0x61e172d4, 0x9813a416, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x2a517b4, 0x4e235076, 0x2a517b4, 0x85b73555, 0x5fcf013d, 0x5fcf013d, 0x77ba65ab, 0x77ba65ab, 0x77ba65ab, 0xa5aa7ddd, 0xa5aa7ddd, 0xa5aa7ddd, 0xba81fc20, 0xba81fc20, 0xba81fc20, 0x5fcf013d, 0x85b73555, 0x85b73555, 0x5fcf013d, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x53e34b0f, 0x7a477e7, 0x53e34b0f, 0x7b92ba0b, 0xdd28f52b, 0xdd28f52b, 0xbc36f156, 0xbc36f156, 0xbc36f156, 0x9d0a08b2, 0x9d0a08b2, 0x9d0a08b2, 0x877b6b23, 0x877b6b23, 0x877b6b23, 0xdd28f52b, 0x7b92ba0b, 0x7b92ba0b, 0xdd28f52b, }, 20 }, + { "gfxterm_high", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xcccbb8c0, 0x859866a0, 0xcccbb8c0, 0x2bf5b2f8, 0x43d1f34, 0x43d1f34, 0xd204ac75, 0xd204ac75, 0xd204ac75, 0xad0e05dd, 0xad0e05dd, 0xad0e05dd, 0x452e3cf4, 0x452e3cf4, 0x452e3cf4, 0x43d1f34, 0x2bf5b2f8, 0x2bf5b2f8, 0x43d1f34, }, 20 }, + { "gfxterm_high", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0xe7baf88f, 0x46ab229c, 0xe7baf88f, 0x2422eb85, 0x59c36f00, 0x59c36f00, 0xc8b88a82, 0xc8b88a82, 0xc8b88a82, 0xb638e7e4, 0xb638e7e4, 0xb638e7e4, 0x751ada29, 0x751ada29, 0x751ada29, 0x59c36f00, 0x2422eb85, 0x2422eb85, 0x59c36f00, }, 20 }, + { "gfxterm_high", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0x86184b5, 0xfed2fa5b, 0x86184b5, 0xf984bb34, 0xaa4593fe, 0xaa4593fe, 0x8b63f19d, 0x8b63f19d, 0x8b63f19d, 0x2d96fcfa, 0x2d96fcfa, 0x2d96fcfa, 0xaf311e91, 0xaf311e91, 0xaf311e91, 0xaa4593fe, 0xf984bb34, 0xf984bb34, 0xaa4593fe, }, 20 }, + { "gfxterm_high", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x2dda8793, 0x6162393c, 0x2dda8793, 0x2a6bc689, 0xc9cbf769, 0xc9cbf769, 0xec23555f, 0xec23555f, 0xec23555f, 0x12fb9493, 0x12fb9493, 0x12fb9493, 0xfaad3b9f, 0xfaad3b9f, 0xfaad3b9f, 0xc9cbf769, 0x2a6bc689, 0x2a6bc689, 0xc9cbf769, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0xc2dae336, 0x5450f06e, 0xc2dae336, 0x2fd25c3, 0x5387d57f, 0x5387d57f, 0x71381c6, 0x71381c6, 0x71381c6, 0xc74aed0a, 0xc74aed0a, 0xc74aed0a, 0x20946f9c, 0x20946f9c, 0x20946f9c, 0x5387d57f, 0x2fd25c3, 0x2fd25c3, 0x5387d57f, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xf910eb1d, 0xb42b7abc, 0xf910eb1d, 0x6d5e8f22, 0xf83ee7aa, 0xf83ee7aa, 0x610deea9, 0x610deea9, 0x610deea9, 0xfd743e5a, 0xfd743e5a, 0xfd743e5a, 0xc5c795f2, 0xc5c795f2, 0xc5c795f2, 0xf83ee7aa, 0x6d5e8f22, 0x6d5e8f22, 0xf83ee7aa, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0xa038bbb4, 0xe0e97e39, 0xa038bbb4, 0x4211aeac, 0x724366e5, 0x724366e5, 0xdbb2f05a, 0xdbb2f05a, 0xdbb2f05a, 0x9c8bb2a0, 0x9c8bb2a0, 0x9c8bb2a0, 0xf1a595ea, 0xf1a595ea, 0xf1a595ea, 0x724366e5, 0x4211aeac, 0x4211aeac, 0x724366e5, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0x4a2dd1b7, 0xb63c9469, 0x4a2dd1b7, 0xe8aea440, 0x5387d57f, 0x5387d57f, 0x23c74007, 0x23c74007, 0x23c74007, 0xfd090fda, 0xfd090fda, 0xfd090fda, 0x6e8a9dc4, 0x6e8a9dc4, 0x6e8a9dc4, 0x5387d57f, 0xe8aea440, 0xe8aea440, 0x5387d57f, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x8597e648, 0x66fbf174, 0x8597e648, 0xa99c8f36, 0xf83ee7aa, 0xf83ee7aa, 0xa5fd8afa, 0xa5fd8afa, 0xa5fd8afa, 0xd72799ca, 0xd72799ca, 0xd72799ca, 0xe6b2c80c, 0xe6b2c80c, 0xe6b2c80c, 0xf83ee7aa, 0xa99c8f36, 0xa99c8f36, 0xf83ee7aa, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0x7c1b6088, 0x3a8493cf, 0x7c1b6088, 0xd5d88a3e, 0x724366e5, 0x724366e5, 0xd0002838, 0xd0002838, 0xd0002838, 0x8990db68, 0x8990db68, 0x8990db68, 0x4127b52a, 0x4127b52a, 0x4127b52a, 0x724366e5, 0xd5d88a3e, 0xd5d88a3e, 0x724366e5, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0x9f45f149, 0x99de5ef4, 0x9f45f149, 0x84437bc3, 0x1c955882, 0x1c955882, 0x727420bf, 0x727420bf, 0x727420bf, 0xbd836d28, 0xbd836d28, 0xbd836d28, 0x43ea613d, 0x43ea613d, 0x43ea613d, 0x1c955882, 0x84437bc3, 0x84437bc3, 0x1c955882, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x60f3276d, 0xe8b80d2f, 0x60f3276d, 0x1d7bae65, 0x4d266f7a, 0x4d266f7a, 0xc23ec599, 0xc23ec599, 0xc23ec599, 0x2449de26, 0x2449de26, 0x2449de26, 0xbc708ab6, 0xbc708ab6, 0xbc708ab6, 0x4d266f7a, 0x1d7bae65, 0x1d7bae65, 0x4d266f7a, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x66a98ee6, 0x5432677a, 0x66a98ee6, 0x691b88fb, 0x1ed9d731, 0x1ed9d731, 0x6ea8026e, 0x6ea8026e, 0x6ea8026e, 0xc0cc1cab, 0xc0cc1cab, 0xc0cc1cab, 0xe3a50d1d, 0xe3a50d1d, 0xe3a50d1d, 0x1ed9d731, 0x691b88fb, 0x691b88fb, 0x1ed9d731, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xc26d8183, 0x54e792db, 0xc26d8183, 0x1473f9a0, 0x5387d57f, 0x5387d57f, 0x71381c6, 0x71381c6, 0x71381c6, 0xc74aed0a, 0xc74aed0a, 0xc74aed0a, 0x20946f9c, 0x20946f9c, 0x20946f9c, 0x5387d57f, 0x1473f9a0, 0x1473f9a0, 0x5387d57f, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0x3ed65cd5, 0x73edcd74, 0x3ed65cd5, 0xb2351146, 0xf83ee7aa, 0xf83ee7aa, 0x610deea9, 0x610deea9, 0x610deea9, 0xfd743e5a, 0xfd743e5a, 0xfd743e5a, 0xc5c795f2, 0xc5c795f2, 0xc5c795f2, 0xf83ee7aa, 0xb2351146, 0xb2351146, 0xf83ee7aa, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xc576da57, 0x85a71fda, 0xc576da57, 0x1ef86a3, 0x724366e5, 0x724366e5, 0xdbb2f05a, 0xdbb2f05a, 0xdbb2f05a, 0x9c8bb2a0, 0x9c8bb2a0, 0x9c8bb2a0, 0xf1a595ea, 0xf1a595ea, 0xf1a595ea, 0x724366e5, 0x1ef86a3, 0x1ef86a3, 0x724366e5, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0x4778be32, 0xbb69fbec, 0x4778be32, 0x892b70c4, 0x5387d57f, 0x5387d57f, 0x23c74007, 0x23c74007, 0x23c74007, 0xfd090fda, 0xfd090fda, 0xfd090fda, 0x6e8a9dc4, 0x6e8a9dc4, 0x6e8a9dc4, 0x5387d57f, 0x892b70c4, 0x892b70c4, 0x5387d57f, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x9c6c6004, 0x7f007738, 0x9c6c6004, 0x80b05ef0, 0xf83ee7aa, 0xf83ee7aa, 0xa5fd8afa, 0xa5fd8afa, 0xa5fd8afa, 0xd72799ca, 0xd72799ca, 0xd72799ca, 0xe6b2c80c, 0xe6b2c80c, 0xe6b2c80c, 0xf83ee7aa, 0x80b05ef0, 0x80b05ef0, 0xf83ee7aa, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x84caa3c1, 0xc2555086, 0x84caa3c1, 0xd82d8d02, 0x724366e5, 0x724366e5, 0xd0002838, 0xd0002838, 0xd0002838, 0x8990db68, 0x8990db68, 0x8990db68, 0x4127b52a, 0x4127b52a, 0x4127b52a, 0x724366e5, 0xd82d8d02, 0xd82d8d02, 0x724366e5, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0xe4dec6e6, 0xe245695b, 0xe4dec6e6, 0x9eed5252, 0x1c955882, 0x1c955882, 0x727420bf, 0x727420bf, 0x727420bf, 0xbd836d28, 0xbd836d28, 0xbd836d28, 0x43ea613d, 0x43ea613d, 0x43ea613d, 0x1c955882, 0x9eed5252, 0x9eed5252, 0x1c955882, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x19a935eb, 0x91e21fa9, 0x19a935eb, 0x7358a32a, 0x4d266f7a, 0x4d266f7a, 0xc23ec599, 0xc23ec599, 0xc23ec599, 0x2449de26, 0x2449de26, 0x2449de26, 0xbc708ab6, 0xbc708ab6, 0xbc708ab6, 0x4d266f7a, 0x7358a32a, 0x7358a32a, 0x4d266f7a, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xb2b10aa1, 0x802ae33d, 0xb2b10aa1, 0x105ee3bb, 0x1ed9d731, 0x1ed9d731, 0x6ea8026e, 0x6ea8026e, 0x6ea8026e, 0xc0cc1cab, 0xc0cc1cab, 0xc0cc1cab, 0xe3a50d1d, 0xe3a50d1d, 0xe3a50d1d, 0x1ed9d731, 0x105ee3bb, 0x105ee3bb, 0x1ed9d731, }, 20 }, + { "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0xeedf19a8, 0xaa1e1e0, 0xeedf19a8, 0x70c50dc2, 0x9813a416, 0x9813a416, 0xc10419e0, 0xc10419e0, 0xc10419e0, 0x50df9fd3, 0x50df9fd3, 0x50df9fd3, 0xccaa6a11, 0xccaa6a11, 0xccaa6a11, 0x9813a416, 0x70c50dc2, 0x70c50dc2, 0x9813a416, }, 20 }, + { "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xa474246a, 0xe8f263a8, 0xa474246a, 0xe7cea168, 0x5fcf013d, 0x5fcf013d, 0x77ba65ab, 0x77ba65ab, 0x77ba65ab, 0xa5aa7ddd, 0xa5aa7ddd, 0xa5aa7ddd, 0xba81fc20, 0xba81fc20, 0xba81fc20, 0x5fcf013d, 0xe7cea168, 0xe7cea168, 0x5fcf013d, }, 20 }, + { "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x653aabb4, 0x317d975c, 0x653aabb4, 0xab5387a0, 0xdd28f52b, 0xdd28f52b, 0xbc36f156, 0xbc36f156, 0xbc36f156, 0x9d0a08b2, 0x9d0a08b2, 0x9d0a08b2, 0x877b6b23, 0x877b6b23, 0x877b6b23, 0xdd28f52b, 0xab5387a0, 0xab5387a0, 0xdd28f52b, }, 20 }, { "videotest", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x7f1853ba, 0x7f1853ba, 0x7f1853ba, 0x7f1853ba, 0x7f1853ba, }, 5 }, { "videotest", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xff1957f0, 0xff1957f0, 0xff1957f0, 0xff1957f0, 0xff1957f0, }, 5 }, { "videotest", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xcb45d8c5, 0xcb45d8c5, 0xcb45d8c5, 0xcb45d8c5, 0xcb45d8c5, }, 5 }, diff --git a/grub-core/tests/lib/functional_test.c b/grub-core/tests/lib/functional_test.c index b99cb5f68..5be7a58e5 100644 --- a/grub-core/tests/lib/functional_test.c +++ b/grub-core/tests/lib/functional_test.c @@ -64,6 +64,7 @@ grub_functional_all_tests (grub_extcmd_context_t ctxt __attribute__ ((unused)), grub_dl_load ("xnu_uuid_test"); grub_dl_load ("pbkdf2_test"); grub_dl_load ("signature_test"); + grub_dl_load ("sleep_test"); FOR_LIST_ELEMENTS (test, grub_test_list) ok = !grub_test_run (test) && ok; diff --git a/grub-core/tests/sleep_test.c b/grub-core/tests/sleep_test.c new file mode 100644 index 000000000..3dda30312 --- /dev/null +++ b/grub-core/tests/sleep_test.c @@ -0,0 +1,45 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static void +sleep_test (void) +{ + struct grub_datetime st, en; + grub_int32_t stu = 0, enu = 0; + grub_test_assert (!grub_get_datetime (&st), "Couldn't retrieve start time"); + grub_millisleep (10000); + grub_test_assert (!grub_get_datetime (&en), "Couldn't retrieve end time"); + grub_test_assert (grub_datetime2unixtime (&st, &stu), "Invalid date"); + grub_test_assert (grub_datetime2unixtime (&en, &enu), "Invalid date"); + grub_test_assert (enu - stu >= 9 && enu - stu <= 11, "Interval out of range: %d", enu-stu); + +} + +GRUB_FUNCTIONAL_TEST (sleep_test, sleep_test); diff --git a/grub-core/tests/video_checksum.c b/grub-core/tests/video_checksum.c index f8927555f..491bc5573 100644 --- a/grub-core/tests/video_checksum.c +++ b/grub-core/tests/video_checksum.c @@ -264,7 +264,7 @@ struct bmp_header grub_uint16_t height; grub_uint16_t planes; grub_uint16_t bpp; -} __attribute__ ((packed)); +} GRUB_PACKED; static void grub_video_capture_write_bmp (const char *fname, diff --git a/grub-core/video/radeon_yeeloong3a.c b/grub-core/video/radeon_yeeloong3a.c new file mode 100644 index 000000000..52614feb6 --- /dev/null +++ b/grub-core/video/radeon_yeeloong3a.c @@ -0,0 +1,237 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009,2010,2011,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define grub_video_render_target grub_video_fbrender_target + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GRUB_RADEON_YEELOONG3A_TOTAL_MEMORY_SPACE 1048576 + +static struct +{ + struct grub_video_mode_info mode_info; + struct grub_video_render_target *render_target; + + grub_uint8_t *ptr; + int mapped; + grub_uint32_t base; + grub_pci_device_t dev; +} framebuffer; + +static grub_err_t +grub_video_radeon_yeeloong3a_video_init (void) +{ + /* Reset frame buffer. */ + grub_memset (&framebuffer, 0, sizeof(framebuffer)); + + return grub_video_fb_init (); +} + +static grub_err_t +grub_video_radeon_yeeloong3a_video_fini (void) +{ + if (framebuffer.mapped) + grub_pci_device_unmap_range (framebuffer.dev, framebuffer.ptr, + GRUB_RADEON_YEELOONG3A_TOTAL_MEMORY_SPACE); + return grub_video_fb_fini (); +} + +#ifndef TEST +/* Helper for grub_video_radeon_yeeloong3a_setup. */ +static int +find_card (grub_pci_device_t dev, grub_pci_id_t pciid, void *data) +{ + int *found = data; + grub_pci_address_t addr; + grub_uint32_t class; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + class = grub_pci_read (addr); + + if (((class >> 16) & 0xffff) != GRUB_PCI_CLASS_SUBCLASS_VGA + || pciid != 0x96151002) + return 0; + + *found = 1; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0); + framebuffer.base = grub_pci_read (addr); + framebuffer.dev = dev; + + return 1; +} +#endif + +static grub_err_t +grub_video_radeon_yeeloong3a_setup (unsigned int width, unsigned int height, + unsigned int mode_type, unsigned int mode_mask __attribute__ ((unused))) +{ + int depth; + grub_err_t err; + int found = 0; + +#ifndef TEST + /* Decode depth from mode_type. If it is zero, then autodetect. */ + depth = (mode_type & GRUB_VIDEO_MODE_TYPE_DEPTH_MASK) + >> GRUB_VIDEO_MODE_TYPE_DEPTH_POS; + + if ((width != 800 && width != 0) || (height != 600 && height != 0) + || (depth != 16 && depth != 0)) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "Only 640x480x16 is supported"); + + grub_pci_iterate (find_card, &found); + if (!found) + return grub_error (GRUB_ERR_IO, "Couldn't find graphics card"); +#endif + /* Fill mode info details. */ + framebuffer.mode_info.width = 800; + framebuffer.mode_info.height = 600; + framebuffer.mode_info.mode_type = GRUB_VIDEO_MODE_TYPE_RGB; + framebuffer.mode_info.bpp = 16; + framebuffer.mode_info.bytes_per_pixel = 2; + framebuffer.mode_info.pitch = 800 * 2; + framebuffer.mode_info.number_of_colors = 256; + framebuffer.mode_info.red_mask_size = 5; + framebuffer.mode_info.red_field_pos = 11; + framebuffer.mode_info.green_mask_size = 6; + framebuffer.mode_info.green_field_pos = 5; + framebuffer.mode_info.blue_mask_size = 5; + framebuffer.mode_info.blue_field_pos = 0; + framebuffer.mode_info.reserved_mask_size = 0; + framebuffer.mode_info.reserved_field_pos = 0; +#ifndef TEST + framebuffer.mode_info.blit_format + = grub_video_get_blit_format (&framebuffer.mode_info); +#endif + + /* We can safely discard volatile attribute. */ +#ifndef TEST + framebuffer.ptr = (void *) grub_pci_device_map_range (framebuffer.dev, + framebuffer.base, + GRUB_RADEON_YEELOONG3A_TOTAL_MEMORY_SPACE); + framebuffer.mapped = 1; +#endif + + /* Prevent garbage from appearing on the screen. */ + grub_memset (framebuffer.ptr, 0, + framebuffer.mode_info.height * framebuffer.mode_info.pitch); + +#ifndef TEST + err = grub_video_fb_create_render_target_from_pointer (&framebuffer + .render_target, + &framebuffer.mode_info, + framebuffer.ptr); + + if (err) + return err; + + err = grub_video_fb_set_active_render_target (framebuffer.render_target); + + if (err) + return err; + + /* Copy default palette to initialize emulated palette. */ + err = grub_video_fb_set_palette (0, GRUB_VIDEO_FBSTD_NUMCOLORS, + grub_video_fbstd_colors); +#endif + return err; +} + +static grub_err_t +grub_video_radeon_yeeloong3a_swap_buffers (void) +{ + /* TODO: Implement buffer swapping. */ + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_video_radeon_yeeloong3a_set_active_render_target (struct grub_video_render_target *target) +{ + if (target == GRUB_VIDEO_RENDER_TARGET_DISPLAY) + target = framebuffer.render_target; + + return grub_video_fb_set_active_render_target (target); +} + +static grub_err_t +grub_video_radeon_yeeloong3a_get_info_and_fini (struct grub_video_mode_info *mode_info, + void **framebuf) +{ + grub_memcpy (mode_info, &(framebuffer.mode_info), sizeof (*mode_info)); + *framebuf = (char *) framebuffer.ptr; + + grub_video_fb_fini (); + + return GRUB_ERR_NONE; +} + +static struct grub_video_adapter grub_video_radeon_yeeloong3a_adapter = + { + .name = "RADEON (Yeeloong3a) Video Driver", + .id = GRUB_VIDEO_DRIVER_RADEON_YEELOONG3A, + + .prio = GRUB_VIDEO_ADAPTER_PRIO_NATIVE, + + .init = grub_video_radeon_yeeloong3a_video_init, + .fini = grub_video_radeon_yeeloong3a_video_fini, + .setup = grub_video_radeon_yeeloong3a_setup, + .get_info = grub_video_fb_get_info, + .get_info_and_fini = grub_video_radeon_yeeloong3a_get_info_and_fini, + .set_palette = grub_video_fb_set_palette, + .get_palette = grub_video_fb_get_palette, + .set_viewport = grub_video_fb_set_viewport, + .get_viewport = grub_video_fb_get_viewport, + .set_region = grub_video_fb_set_region, + .get_region = grub_video_fb_get_region, + .set_area_status = grub_video_fb_set_area_status, + .get_area_status = grub_video_fb_get_area_status, + .map_color = grub_video_fb_map_color, + .map_rgb = grub_video_fb_map_rgb, + .map_rgba = grub_video_fb_map_rgba, + .unmap_color = grub_video_fb_unmap_color, + .fill_rect = grub_video_fb_fill_rect, + .blit_bitmap = grub_video_fb_blit_bitmap, + .blit_render_target = grub_video_fb_blit_render_target, + .scroll = grub_video_fb_scroll, + .swap_buffers = grub_video_radeon_yeeloong3a_swap_buffers, + .create_render_target = grub_video_fb_create_render_target, + .delete_render_target = grub_video_fb_delete_render_target, + .set_active_render_target = grub_video_radeon_yeeloong3a_set_active_render_target, + .get_active_render_target = grub_video_fb_get_active_render_target, + + .next = 0 + }; + +GRUB_MOD_INIT(video_radeon_yeeloong3a) +{ + grub_video_register (&grub_video_radeon_yeeloong3a_adapter); +} + +GRUB_MOD_FINI(video_radeon_yeeloong3a) +{ + grub_video_unregister (&grub_video_radeon_yeeloong3a_adapter); +} diff --git a/grub-core/video/readers/tga.c b/grub-core/video/readers/tga.c index 6295a5d2a..c7a16fa9c 100644 --- a/grub-core/video/readers/tga.c +++ b/grub-core/video/readers/tga.c @@ -75,7 +75,7 @@ struct grub_tga_header grub_uint16_t image_height; grub_uint8_t image_bpp; grub_uint8_t image_descriptor; -} __attribute__ ((packed)); +} GRUB_PACKED; struct tga_data { diff --git a/include/grub/acpi.h b/include/grub/acpi.h index 32bb95ca8..2ac2bd6fd 100644 --- a/include/grub/acpi.h +++ b/include/grub/acpi.h @@ -34,7 +34,7 @@ struct grub_acpi_rsdp_v10 grub_uint8_t oemid[6]; grub_uint8_t revision; grub_uint32_t rsdt_addr; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_acpi_rsdp_v20 { @@ -43,7 +43,7 @@ struct grub_acpi_rsdp_v20 grub_uint64_t xsdt_addr; grub_uint8_t checksum; grub_uint8_t reserved[3]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_acpi_table_header { @@ -56,7 +56,7 @@ struct grub_acpi_table_header grub_uint32_t oemrev; grub_uint8_t creator_id[4]; grub_uint32_t creator_rev; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_ACPI_FADT_SIGNATURE "FACP" @@ -71,7 +71,7 @@ struct grub_acpi_fadt grub_uint64_t facs_xaddr; grub_uint64_t dsdt_xaddr; grub_uint8_t somefields3[96]; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_ACPI_MADT_SIGNATURE "APIC" @@ -124,7 +124,7 @@ struct grub_acpi_madt_entry_interrupt_override grub_uint8_t source; grub_uint32_t global_sys_interrupt; grub_uint16_t flags; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_acpi_madt_entry_lapic_nmi @@ -133,7 +133,7 @@ struct grub_acpi_madt_entry_lapic_nmi grub_uint8_t acpiid; grub_uint16_t flags; grub_uint8_t lint; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_acpi_madt_entry_sapic { diff --git a/include/grub/arm/efi/memory.h b/include/grub/arm/efi/memory.h index c9a61bb77..2c64918e3 100644 --- a/include/grub/arm/efi/memory.h +++ b/include/grub/arm/efi/memory.h @@ -1 +1,6 @@ +#ifndef GRUB_MEMORY_CPU_HEADER #include + +#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffff + +#endif /* ! GRUB_MEMORY_CPU_HEADER */ diff --git a/include/grub/arm64/efi/memory.h b/include/grub/arm64/efi/memory.h index c9a61bb77..c6cb32417 100644 --- a/include/grub/arm64/efi/memory.h +++ b/include/grub/arm64/efi/memory.h @@ -1 +1,6 @@ +#ifndef GRUB_MEMORY_CPU_HEADER #include + +#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffffffffULL + +#endif /* ! GRUB_MEMORY_CPU_HEADER */ diff --git a/include/grub/bsdlabel.h b/include/grub/bsdlabel.h index 8f241dfd8..83e7b8b5a 100644 --- a/include/grub/bsdlabel.h +++ b/include/grub/bsdlabel.h @@ -86,7 +86,7 @@ struct grub_partition_bsd_entry grub_uint8_t fs_type; grub_uint8_t fs_fragments; grub_uint16_t fs_cylinders; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The BSD disk label. Only define members useful for GRUB. */ struct grub_partition_bsd_disk_label @@ -101,6 +101,6 @@ struct grub_partition_bsd_disk_label grub_uint16_t num_partitions; grub_uint32_t boot_size; grub_uint32_t superblock_size; -} __attribute__ ((packed)); +} GRUB_PACKED; #endif /* ! GRUB_PC_PARTITION_HEADER */ diff --git a/include/grub/btrfs.h b/include/grub/btrfs.h index 77531d105..9d93fb6c1 100644 --- a/include/grub/btrfs.h +++ b/include/grub/btrfs.h @@ -50,7 +50,7 @@ struct grub_btrfs_key grub_uint64_t object_id; grub_uint8_t type; grub_uint64_t offset; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_btrfs_root_backref diff --git a/include/grub/cbfs_core.h b/include/grub/cbfs_core.h index 5067b6ef7..98112fb67 100644 --- a/include/grub/cbfs_core.h +++ b/include/grub/cbfs_core.h @@ -98,7 +98,7 @@ struct cbfs_header { grub_uint32_t offset; grub_uint32_t architecture; grub_uint32_t pad[1]; -} __attribute__((packed)); +} GRUB_PACKED; /* "Unknown" refers to CBFS headers version 1, * before the architecture was defined (i.e., x86 only). @@ -130,7 +130,7 @@ struct cbfs_file { grub_uint32_t type; grub_uint32_t checksum; grub_uint32_t offset; -} __attribute__((packed)); +} GRUB_PACKED; /*** Component sub-headers ***/ @@ -146,7 +146,7 @@ struct cbfs_stage { grub_uint64_t load; /** Where to load in memory */ grub_uint32_t len; /** length of data to load */ grub_uint32_t memlen; /** total length of object in memory */ -} __attribute__((packed)); +} GRUB_PACKED; /** this is the sub-header for payload components. Payloads are loaded by coreboot at the end of the boot process */ @@ -158,7 +158,7 @@ struct cbfs_payload_segment { grub_uint64_t load_addr; grub_uint32_t len; grub_uint32_t mem_len; -} __attribute__((packed)); +} GRUB_PACKED; struct cbfs_payload { struct cbfs_payload_segment segments; @@ -173,6 +173,6 @@ struct cbfs_payload { struct cbfs_optionrom { grub_uint32_t compression; grub_uint32_t len; -} __attribute__((packed)); +} GRUB_PACKED; #endif diff --git a/include/grub/deflate.h b/include/grub/deflate.h index 6ec4eaa99..c87c62f6c 100644 --- a/include/grub/deflate.h +++ b/include/grub/deflate.h @@ -23,4 +23,8 @@ grub_ssize_t grub_zlib_decompress (char *inbuf, grub_size_t insize, grub_off_t off, char *outbuf, grub_size_t outsize); +grub_ssize_t +grub_deflate_decompress (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t outsize); + #endif diff --git a/include/grub/dl.h b/include/grub/dl.h index 58b636f16..d29a899f5 100644 --- a/include/grub/dl.h +++ b/include/grub/dl.h @@ -180,7 +180,7 @@ struct grub_dl grub_size_t symsize; void (*init) (struct grub_dl *mod); void (*fini) (void); -#if !defined (__i386__) && !defined (__x86_64__) && !defined (__sparc__) +#if !defined (__i386__) && !defined (__x86_64__) void *got; void *gotptr; void *tramp; @@ -278,7 +278,7 @@ grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, #define GRUB_ARCH_DL_GOT_ALIGN 4 #endif -#if defined (__aarch64__) +#if defined (__aarch64__) || defined (__sparc__) #define GRUB_ARCH_DL_TRAMP_ALIGN 8 #define GRUB_ARCH_DL_GOT_ALIGN 8 #endif diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h index 3af09111a..5ebdd9f42 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -449,8 +449,13 @@ typedef enum grub_efi_reset_type grub_efi_reset_type_t; /* Types. */ typedef char grub_efi_boolean_t; -typedef long grub_efi_intn_t; -typedef unsigned long grub_efi_uintn_t; +#if GRUB_CPU_SIZEOF_VOID_P == 8 +typedef grub_int64_t grub_efi_intn_t; +typedef grub_uint64_t grub_efi_uintn_t; +#else +typedef grub_int32_t grub_efi_intn_t; +typedef grub_uint32_t grub_efi_uintn_t; +#endif typedef grub_int8_t grub_efi_int8_t; typedef grub_uint8_t grub_efi_uint8_t; typedef grub_int16_t grub_efi_int16_t; @@ -462,12 +467,10 @@ typedef grub_uint64_t grub_efi_uint64_t; typedef grub_uint8_t grub_efi_char8_t; typedef grub_uint16_t grub_efi_char16_t; -#define PRIxGRUB_EFI_UINTN_T "lx" - typedef grub_efi_intn_t grub_efi_status_t; #define GRUB_EFI_ERROR_CODE(value) \ - ((1L << (sizeof (grub_efi_status_t) * 8 - 1)) | (value)) + ((((grub_efi_status_t) 1) << (sizeof (grub_efi_status_t) * 8 - 1)) | (value)) #define GRUB_EFI_WARNING_CODE(value) (value) @@ -526,6 +529,15 @@ struct grub_efi_guid } __attribute__ ((aligned(8))); typedef struct grub_efi_guid grub_efi_guid_t; +struct grub_efi_packed_guid +{ + grub_uint32_t data1; + grub_uint16_t data2; + grub_uint16_t data3; + grub_uint8_t data4[8]; +} GRUB_PACKED; +typedef struct grub_efi_packed_guid grub_efi_packed_guid_t; + /* XXX although the spec does not specify the padding, this actually must have the padding! */ struct grub_efi_memory_descriptor @@ -536,7 +548,7 @@ struct grub_efi_memory_descriptor grub_efi_virtual_address_t virtual_start; grub_efi_uint64_t num_pages; grub_efi_uint64_t attribute; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_memory_descriptor grub_efi_memory_descriptor_t; /* Device Path definitions. */ @@ -544,8 +556,8 @@ struct grub_efi_device_path { grub_efi_uint8_t type; grub_efi_uint8_t subtype; - grub_efi_uint8_t length[2]; -}; + grub_efi_uint16_t length; +} GRUB_PACKED; typedef struct grub_efi_device_path grub_efi_device_path_t; /* XXX EFI does not define EFI_DEVICE_PATH_PROTOCOL but uses it. It seems to be identical to EFI_DEVICE_PATH. */ @@ -553,7 +565,7 @@ typedef struct grub_efi_device_path grub_efi_device_path_protocol_t; #define GRUB_EFI_DEVICE_PATH_TYPE(dp) ((dp)->type & 0x7f) #define GRUB_EFI_DEVICE_PATH_SUBTYPE(dp) ((dp)->subtype) -#define GRUB_EFI_DEVICE_PATH_LENGTH(dp) (grub_get_unaligned16 ((dp)->length)) +#define GRUB_EFI_DEVICE_PATH_LENGTH(dp) ((dp)->length) /* The End of Device Path nodes. */ #define GRUB_EFI_END_DEVICE_PATH_TYPE (0xff & 0x7f) @@ -580,7 +592,7 @@ struct grub_efi_pci_device_path grub_efi_device_path_t header; grub_efi_uint8_t function; grub_efi_uint8_t device; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_pci_device_path grub_efi_pci_device_path_t; #define GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE 2 @@ -589,7 +601,7 @@ struct grub_efi_pccard_device_path { grub_efi_device_path_t header; grub_efi_uint8_t function; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_pccard_device_path grub_efi_pccard_device_path_t; #define GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE 3 @@ -600,7 +612,7 @@ struct grub_efi_memory_mapped_device_path grub_efi_uint32_t memory_type; grub_efi_physical_address_t start_address; grub_efi_physical_address_t end_address; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_memory_mapped_device_path grub_efi_memory_mapped_device_path_t; #define GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE 4 @@ -608,9 +620,9 @@ typedef struct grub_efi_memory_mapped_device_path grub_efi_memory_mapped_device_ struct grub_efi_vendor_device_path { grub_efi_device_path_t header; - grub_efi_guid_t vendor_guid; + grub_efi_packed_guid_t vendor_guid; grub_efi_uint8_t vendor_defined_data[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_vendor_device_path grub_efi_vendor_device_path_t; #define GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE 5 @@ -619,7 +631,7 @@ struct grub_efi_controller_device_path { grub_efi_device_path_t header; grub_efi_uint32_t controller_number; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_controller_device_path grub_efi_controller_device_path_t; /* ACPI Device Path. */ @@ -632,7 +644,7 @@ struct grub_efi_acpi_device_path grub_efi_device_path_t header; grub_efi_uint32_t hid; grub_efi_uint32_t uid; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_acpi_device_path grub_efi_acpi_device_path_t; #define GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE 2 @@ -644,7 +656,7 @@ struct grub_efi_expanded_acpi_device_path grub_efi_uint32_t uid; grub_efi_uint32_t cid; char hidstr[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_expanded_acpi_device_path grub_efi_expanded_acpi_device_path_t; #define GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp) \ @@ -667,7 +679,7 @@ struct grub_efi_atapi_device_path grub_efi_uint8_t primary_secondary; grub_efi_uint8_t slave_master; grub_efi_uint16_t lun; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_atapi_device_path grub_efi_atapi_device_path_t; #define GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE 2 @@ -677,7 +689,7 @@ struct grub_efi_scsi_device_path grub_efi_device_path_t header; grub_efi_uint16_t pun; grub_efi_uint16_t lun; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_scsi_device_path grub_efi_scsi_device_path_t; #define GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE 3 @@ -688,7 +700,7 @@ struct grub_efi_fibre_channel_device_path grub_efi_uint32_t reserved; grub_efi_uint64_t wwn; grub_efi_uint64_t lun; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_fibre_channel_device_path grub_efi_fibre_channel_device_path_t; #define GRUB_EFI_1394_DEVICE_PATH_SUBTYPE 4 @@ -698,7 +710,7 @@ struct grub_efi_1394_device_path grub_efi_device_path_t header; grub_efi_uint32_t reserved; grub_efi_uint64_t guid; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_1394_device_path grub_efi_1394_device_path_t; #define GRUB_EFI_USB_DEVICE_PATH_SUBTYPE 5 @@ -707,8 +719,8 @@ struct grub_efi_usb_device_path { grub_efi_device_path_t header; grub_efi_uint8_t parent_port_number; - grub_efi_uint8_t interface; -} __attribute__ ((packed)); + grub_efi_uint8_t usb_interface; +} GRUB_PACKED; typedef struct grub_efi_usb_device_path grub_efi_usb_device_path_t; #define GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE 15 @@ -721,7 +733,7 @@ struct grub_efi_usb_class_device_path grub_efi_uint8_t device_class; grub_efi_uint8_t device_subclass; grub_efi_uint8_t device_protocol; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_usb_class_device_path grub_efi_usb_class_device_path_t; #define GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE 6 @@ -730,7 +742,7 @@ struct grub_efi_i2o_device_path { grub_efi_device_path_t header; grub_efi_uint32_t tid; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_i2o_device_path grub_efi_i2o_device_path_t; #define GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE 11 @@ -740,7 +752,7 @@ struct grub_efi_mac_address_device_path grub_efi_device_path_t header; grub_efi_mac_address_t mac_address; grub_efi_uint8_t if_type; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_mac_address_device_path grub_efi_mac_address_device_path_t; #define GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE 12 @@ -754,7 +766,7 @@ struct grub_efi_ipv4_device_path grub_efi_uint16_t remote_port; grub_efi_uint16_t protocol; grub_efi_uint8_t static_ip_address; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_ipv4_device_path grub_efi_ipv4_device_path_t; #define GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE 13 @@ -768,7 +780,7 @@ struct grub_efi_ipv6_device_path grub_efi_uint16_t remote_port; grub_efi_uint16_t protocol; grub_efi_uint8_t static_ip_address; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_ipv6_device_path grub_efi_ipv6_device_path_t; #define GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE 9 @@ -781,7 +793,7 @@ struct grub_efi_infiniband_device_path grub_efi_uint64_t remote_id; grub_efi_uint64_t target_port_id; grub_efi_uint64_t device_id; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_infiniband_device_path grub_efi_infiniband_device_path_t; #define GRUB_EFI_UART_DEVICE_PATH_SUBTYPE 14 @@ -794,7 +806,7 @@ struct grub_efi_uart_device_path grub_efi_uint8_t data_bits; grub_efi_uint8_t parity; grub_efi_uint8_t stop_bits; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_uart_device_path grub_efi_uart_device_path_t; #define GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE 10 @@ -802,9 +814,9 @@ typedef struct grub_efi_uart_device_path grub_efi_uart_device_path_t; struct grub_efi_vendor_messaging_device_path { grub_efi_device_path_t header; - grub_efi_guid_t vendor_guid; + grub_efi_packed_guid_t vendor_guid; grub_efi_uint8_t vendor_defined_data[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_vendor_messaging_device_path grub_efi_vendor_messaging_device_path_t; /* Media Device Path. */ @@ -818,10 +830,10 @@ struct grub_efi_hard_drive_device_path grub_efi_uint32_t partition_number; grub_efi_lba_t partition_start; grub_efi_lba_t partition_size; - grub_efi_uint8_t partition_signature[8]; - grub_efi_uint8_t mbr_type; + grub_efi_uint8_t partition_signature[16]; + grub_efi_uint8_t partmap_type; grub_efi_uint8_t signature_type; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_hard_drive_device_path grub_efi_hard_drive_device_path_t; #define GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE 2 @@ -832,7 +844,7 @@ struct grub_efi_cdrom_device_path grub_efi_uint32_t boot_entry; grub_efi_lba_t partition_start; grub_efi_lba_t partition_size; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_cdrom_device_path grub_efi_cdrom_device_path_t; #define GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE 3 @@ -840,9 +852,9 @@ typedef struct grub_efi_cdrom_device_path grub_efi_cdrom_device_path_t; struct grub_efi_vendor_media_device_path { grub_efi_device_path_t header; - grub_efi_guid_t vendor_guid; + grub_efi_packed_guid_t vendor_guid; grub_efi_uint8_t vendor_defined_data[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_vendor_media_device_path grub_efi_vendor_media_device_path_t; #define GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE 4 @@ -851,7 +863,7 @@ struct grub_efi_file_path_device_path { grub_efi_device_path_t header; grub_efi_char16_t path_name[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_file_path_device_path grub_efi_file_path_device_path_t; #define GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE 5 @@ -859,8 +871,8 @@ typedef struct grub_efi_file_path_device_path grub_efi_file_path_device_path_t; struct grub_efi_protocol_device_path { grub_efi_device_path_t header; - grub_efi_guid_t guid; -} __attribute__ ((packed)); + grub_efi_packed_guid_t guid; +} GRUB_PACKED; typedef struct grub_efi_protocol_device_path grub_efi_protocol_device_path_t; #define GRUB_EFI_PIWG_DEVICE_PATH_SUBTYPE 6 @@ -868,8 +880,8 @@ typedef struct grub_efi_protocol_device_path grub_efi_protocol_device_path_t; struct grub_efi_piwg_device_path { grub_efi_device_path_t header; - grub_efi_guid_t guid __attribute__ ((packed)); -} __attribute__ ((packed)); + grub_efi_packed_guid_t guid; +} GRUB_PACKED; typedef struct grub_efi_piwg_device_path grub_efi_piwg_device_path_t; @@ -884,7 +896,7 @@ struct grub_efi_bios_device_path grub_efi_uint16_t device_type; grub_efi_uint16_t status_flags; char description[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_bios_device_path grub_efi_bios_device_path_t; struct grub_efi_open_protocol_information_entry @@ -909,7 +921,7 @@ struct grub_efi_time grub_efi_int16_t time_zone; grub_efi_uint8_t daylight; grub_efi_uint8_t pad2; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_time grub_efi_time_t; struct grub_efi_time_capabilities @@ -1014,8 +1026,8 @@ struct grub_efi_boot_services grub_efi_status_t (*install_protocol_interface) (grub_efi_handle_t *handle, grub_efi_guid_t *protocol, - grub_efi_interface_type_t interface_type, - void *interface); + grub_efi_interface_type_t protocol_interface_type, + void *protocol_interface); grub_efi_status_t (*reinstall_protocol_interface) (grub_efi_handle_t handle, @@ -1026,12 +1038,12 @@ struct grub_efi_boot_services grub_efi_status_t (*uninstall_protocol_interface) (grub_efi_handle_t handle, grub_efi_guid_t *protocol, - void *interface); + void *protocol_interface); grub_efi_status_t (*handle_protocol) (grub_efi_handle_t handle, grub_efi_guid_t *protocol, - void **interface); + void **protocol_interface); void *reserved; @@ -1107,7 +1119,7 @@ struct grub_efi_boot_services grub_efi_status_t (*open_protocol) (grub_efi_handle_t handle, grub_efi_guid_t *protocol, - void **interface, + void **protocol_interface, grub_efi_handle_t agent_handle, grub_efi_handle_t controller_handle, grub_efi_uint32_t attributes); @@ -1126,7 +1138,7 @@ struct grub_efi_boot_services grub_efi_status_t (*protocols_per_handle) (grub_efi_handle_t handle, - grub_efi_guid_t ***protocol_buffer, + grub_efi_packed_guid_t ***protocol_buffer, grub_efi_uintn_t *protocol_buffer_count); grub_efi_status_t @@ -1139,7 +1151,7 @@ struct grub_efi_boot_services grub_efi_status_t (*locate_protocol) (grub_efi_guid_t *protocol, void *registration, - void **interface); + void **protocol_interface); grub_efi_status_t (*install_multiple_protocol_interfaces) (grub_efi_handle_t *handle, ...); @@ -1225,9 +1237,9 @@ typedef struct grub_efi_runtime_services grub_efi_runtime_services_t; struct grub_efi_configuration_table { - grub_efi_guid_t vendor_guid; + grub_efi_packed_guid_t vendor_guid; void *vendor_table; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_configuration_table grub_efi_configuration_table_t; #define GRUB_EFIEMU_SYSTEM_TABLE_SIGNATURE 0x5453595320494249LL @@ -1535,7 +1547,7 @@ struct grub_efi_block_io typedef struct grub_efi_block_io grub_efi_block_io_t; #if (GRUB_TARGET_SIZEOF_VOID_P == 4) || defined (__ia64__) \ - || defined (__aarch64__) + || defined (__aarch64__) || defined (__MINGW64__) || defined (__CYGWIN__) #define efi_call_0(func) func() #define efi_call_1(func, a) func(a) diff --git a/include/grub/efi/pe32.h b/include/grub/efi/pe32.h index 4adea603b..f79c36c02 100644 --- a/include/grub/efi/pe32.h +++ b/include/grub/efi/pe32.h @@ -299,7 +299,7 @@ struct grub_pe32_symbol grub_uint16_t type; grub_uint8_t storage_class; grub_uint8_t num_aux; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_PE32_SYM_CLASS_EXTERNAL 2 #define GRUB_PE32_SYM_CLASS_STATIC 3 @@ -312,7 +312,7 @@ struct grub_pe32_reloc grub_uint32_t offset; grub_uint32_t symtab_index; grub_uint16_t type; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_PE32_REL_I386_DIR32 0x6 #define GRUB_PE32_REL_I386_REL32 0x14 diff --git a/include/grub/efiemu/efiemu.h b/include/grub/efiemu/efiemu.h index f241e7574..5325e5839 100644 --- a/include/grub/efiemu/efiemu.h +++ b/include/grub/efiemu/efiemu.h @@ -41,7 +41,7 @@ struct grub_efi_system_table32 grub_efi_uint32_t boot_services; grub_efi_uint32_t num_table_entries; grub_efi_uint32_t configuration_table; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_system_table32 grub_efi_system_table32_t; struct grub_efi_system_table64 @@ -60,7 +60,7 @@ struct grub_efi_system_table64 grub_efi_uint64_t boot_services; grub_efi_uint64_t num_table_entries; grub_efi_uint64_t configuration_table; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_system_table64 grub_efi_system_table64_t; struct grub_efiemu_runtime_services32 @@ -77,7 +77,7 @@ struct grub_efiemu_runtime_services32 grub_efi_uint32_t set_variable; grub_efi_uint32_t get_next_high_monotonic_count; grub_efi_uint32_t reset_system; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efiemu_runtime_services32 grub_efiemu_runtime_services32_t; struct grub_efiemu_runtime_services64 @@ -94,7 +94,7 @@ struct grub_efiemu_runtime_services64 grub_efi_uint64_t set_variable; grub_efi_uint64_t get_next_high_monotonic_count; grub_efi_uint64_t reset_system; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efiemu_runtime_services64 grub_efiemu_runtime_services64_t; extern grub_efi_system_table32_t *grub_efiemu_system_table32; @@ -183,15 +183,15 @@ struct grub_efiemu_configuration_table }; struct grub_efiemu_configuration_table32 { - grub_efi_guid_t vendor_guid; + grub_efi_packed_guid_t vendor_guid; grub_efi_uint32_t vendor_table; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efiemu_configuration_table32 grub_efiemu_configuration_table32_t; struct grub_efiemu_configuration_table64 { - grub_efi_guid_t vendor_guid; + grub_efi_packed_guid_t vendor_guid; grub_efi_uint64_t vendor_table; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efiemu_configuration_table64 grub_efiemu_configuration_table64_t; grub_err_t grub_efiemu_unregister_configuration_table (grub_efi_guid_t guid); grub_err_t diff --git a/include/grub/efiemu/runtime.h b/include/grub/efiemu/runtime.h index 1eb474a5d..9b6b729f4 100644 --- a/include/grub/efiemu/runtime.h +++ b/include/grub/efiemu/runtime.h @@ -25,7 +25,7 @@ struct grub_efiemu_ptv_rel grub_efi_memory_type_t plustype; grub_efi_memory_type_t minustype; grub_uint32_t size; -} __attribute__ ((packed)); +} GRUB_PACKED; struct efi_variable { @@ -33,5 +33,5 @@ struct efi_variable grub_uint32_t namelen; grub_uint32_t size; grub_efi_uint32_t attributes; -} __attribute__ ((packed)); +} GRUB_PACKED; #endif /* ! GRUB_EFI_EMU_RUNTIME_HEADER */ diff --git a/include/grub/elf.h b/include/grub/elf.h index 140d24d02..caa796390 100644 --- a/include/grub/elf.h +++ b/include/grub/elf.h @@ -1132,6 +1132,7 @@ typedef struct #define R_X86_64_PC16 13 #define R_X86_64_8 14 #define R_X86_64_PC8 15 +#define R_X86_64_PC64 24 /* Legal values for ST_TYPE subfield of st_info (symbol type). */ @@ -2466,7 +2467,7 @@ typedef Elf32_Addr Elf32_Conflict; #define R_X86_64_NUM 24 -#ifndef GRUB_UTIL +#ifdef GRUB_TARGET_WORDSIZE #if GRUB_TARGET_WORDSIZE == 32 typedef Elf32_Addr Elf_Addr; diff --git a/include/grub/emu/exec.h b/include/grub/emu/exec.h index ecc3adc30..d1073ef86 100644 --- a/include/grub/emu/exec.h +++ b/include/grub/emu/exec.h @@ -28,6 +28,9 @@ grub_util_exec_pipe (const char *const *argv, int *fd); pid_t grub_util_exec_pipe_stderr (const char *const *argv, int *fd); +int +grub_util_exec_redirect_all (const char *const *argv, const char *stdin_file, + const char *stdout_file, const char *stderr_file); int grub_util_exec (const char *const *argv); int diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h index 4f708cf10..dde48c192 100644 --- a/include/grub/emu/misc.h +++ b/include/grub/emu/misc.h @@ -42,6 +42,14 @@ char *grub_make_system_path_relative_to_its_root (const char *path) int grub_util_device_is_mapped (const char *dev); +#ifdef __MINGW32__ +#define GRUB_HOST_PRIuLONG_LONG "I64u" +#define GRUB_HOST_PRIxLONG_LONG "I64x" +#else +#define GRUB_HOST_PRIuLONG_LONG "llu" +#define GRUB_HOST_PRIxLONG_LONG "llx" +#endif + void * EXPORT_FUNC(xmalloc) (grub_size_t size) WARN_UNUSED_RESULT; void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size) WARN_UNUSED_RESULT; char * EXPORT_FUNC(xstrdup) (const char *str) WARN_UNUSED_RESULT; diff --git a/include/grub/exfat.h b/include/grub/exfat.h index e5cb82d79..2b8009cee 100644 --- a/include/grub/exfat.h +++ b/include/grub/exfat.h @@ -41,7 +41,7 @@ struct grub_exfat_bpb grub_uint8_t num_fats; grub_uint8_t num_ph_drive; grub_uint8_t reserved[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; #ifdef GRUB_UTIL #include diff --git a/include/grub/fat.h b/include/grub/fat.h index ae352c6d6..4a5aab793 100644 --- a/include/grub/fat.h +++ b/include/grub/fat.h @@ -52,7 +52,7 @@ struct grub_fat_bpb grub_uint32_t num_serial; grub_uint8_t label[11]; grub_uint8_t fstype[8]; - } __attribute__ ((packed)) fat12_or_fat16; + } GRUB_PACKED fat12_or_fat16; struct { grub_uint32_t sectors_per_fat_32; @@ -68,9 +68,9 @@ struct grub_fat_bpb grub_uint32_t num_serial; grub_uint8_t label[11]; grub_uint8_t fstype[8]; - } __attribute__ ((packed)) fat32; - } __attribute__ ((packed)) version_specific; -} __attribute__ ((packed)); + } GRUB_PACKED fat32; + } GRUB_PACKED version_specific; +} GRUB_PACKED; #ifdef GRUB_UTIL #include diff --git a/include/grub/osdep/exec_unix.h b/include/grub/fileid.h similarity index 62% rename from include/grub/osdep/exec_unix.h rename to include/grub/fileid.h index ecc3adc30..ae75b6912 100644 --- a/include/grub/osdep/exec_unix.h +++ b/include/grub/fileid.h @@ -16,24 +16,14 @@ * along with GRUB. If not, see . */ -#ifndef GRUB_EMU_EXEC_H -#define GRUB_EMU_EXEC_H 1 +#ifndef GRUB_FILEID_HEADER +#define GRUB_FILEID_HEADER 1 -#include -#include - -#include -pid_t -grub_util_exec_pipe (const char *const *argv, int *fd); -pid_t -grub_util_exec_pipe_stderr (const char *const *argv, int *fd); +#include int -grub_util_exec (const char *const *argv); +grub_file_check_netbsd32 (grub_elf_t elf); int -grub_util_exec_redirect (const char *const *argv, const char *stdin_file, - const char *stdout_file); -int -grub_util_exec_redirect_null (const char *const *argv); +grub_file_check_netbsd64 (grub_elf_t elf); #endif diff --git a/include/grub/fs.h b/include/grub/fs.h index e4517972b..5678c60c2 100644 --- a/include/grub/fs.h +++ b/include/grub/fs.h @@ -38,7 +38,9 @@ struct grub_dirhook_info unsigned dir:1; unsigned mtimeset:1; unsigned case_insensitive:1; + unsigned inodeset:1; grub_int32_t mtime; + grub_uint64_t inode; }; typedef int (*grub_fs_dir_hook_t) (const char *filename, diff --git a/include/grub/gpt_partition.h b/include/grub/gpt_partition.h index 4aaf1c4e7..1b32f6725 100644 --- a/include/grub/gpt_partition.h +++ b/include/grub/gpt_partition.h @@ -66,7 +66,7 @@ struct grub_gpt_header grub_uint32_t maxpart; grub_uint32_t partentry_size; grub_uint32_t partentry_crc32; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_gpt_partentry { @@ -76,7 +76,7 @@ struct grub_gpt_partentry grub_uint64_t end; grub_uint64_t attrib; char name[72]; -} __attribute__ ((packed)); +} GRUB_PACKED; grub_err_t grub_gpt_partition_map_iterate (grub_disk_t disk, diff --git a/include/grub/hfs.h b/include/grub/hfs.h index bf98610d9..d935f5005 100644 --- a/include/grub/hfs.h +++ b/include/grub/hfs.h @@ -50,14 +50,23 @@ struct grub_hfs_sblock /* A pascal style string that holds the volumename. */ grub_uint8_t volname[28]; - grub_uint8_t unused5[52]; + grub_uint8_t unused5[28]; + + grub_uint32_t ppc_bootdir; + grub_uint32_t intel_bootfile; + /* Folder opened when disk is mounted. Unused by GRUB. */ + grub_uint32_t showfolder; + grub_uint32_t os9folder; + grub_uint8_t unused6[4]; + grub_uint32_t osxfolder; + grub_uint64_t num_serial; grub_uint16_t embed_sig; struct grub_hfs_extent embed_extent; - grub_uint8_t unused6[4]; + grub_uint8_t unused7[4]; grub_hfs_datarecord_t extent_recs; grub_uint32_t catalog_size; grub_hfs_datarecord_t catalog_recs; -} __attribute__ ((packed)); +} GRUB_PACKED; #endif /* ! GRUB_HFS_HEADER */ diff --git a/include/grub/hfsplus.h b/include/grub/hfsplus.h index 842554e04..75c9d18a3 100644 --- a/include/grub/hfsplus.h +++ b/include/grub/hfsplus.h @@ -1,7 +1,28 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ #include #include +#define GRUB_HFSPLUS_MAGIC 0x482B +#define GRUB_HFSPLUSX_MAGIC 0x4858 +#define GRUB_HFSPLUS_SBLOCK 2 + /* A HFS+ extent. */ struct grub_hfsplus_extent { @@ -9,7 +30,7 @@ struct grub_hfsplus_extent grub_uint32_t start; /* The amount of blocks described by this extent. */ grub_uint32_t count; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The descriptor of a fork. */ struct grub_hfsplus_forkdata @@ -18,7 +39,7 @@ struct grub_hfsplus_forkdata grub_uint32_t clumpsize; grub_uint32_t blocks; struct grub_hfsplus_extent extents[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The HFS+ Volume Header. */ struct grub_hfsplus_volheader @@ -30,14 +51,23 @@ struct grub_hfsplus_volheader grub_uint32_t utime; grub_uint8_t unused2[16]; grub_uint32_t blksize; - grub_uint8_t unused3[60]; + grub_uint8_t unused3[36]; + + grub_uint32_t ppc_bootdir; + grub_uint32_t intel_bootfile; + /* Folder opened when disk is mounted. Unused by GRUB. */ + grub_uint32_t showfolder; + grub_uint32_t os9folder; + grub_uint8_t unused4[4]; + grub_uint32_t osxfolder; + grub_uint64_t num_serial; struct grub_hfsplus_forkdata allocations_file; struct grub_hfsplus_forkdata extents_file; struct grub_hfsplus_forkdata catalog_file; struct grub_hfsplus_forkdata attr_file; struct grub_hfsplus_forkdata startup_file; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_hfsplus_compress_index { @@ -116,7 +146,7 @@ struct grub_hfsplus_attrkey grub_uint16_t unknown2[2]; grub_uint16_t namelen; grub_uint16_t name[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_hfsplus_attrkey_internal { @@ -142,7 +172,7 @@ struct grub_hfsplus_catkey grub_uint32_t parent; grub_uint16_t namelen; grub_uint16_t name[30]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The on disk layout of an extent overflow file key. */ struct grub_hfsplus_extkey @@ -152,7 +182,7 @@ struct grub_hfsplus_extkey grub_uint8_t unused; grub_uint32_t fileid; grub_uint32_t start; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_hfsplus_key { @@ -163,7 +193,7 @@ struct grub_hfsplus_key struct grub_hfsplus_attrkey attrkey; grub_uint16_t keylen; }; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_hfsplus_btnode { @@ -173,7 +203,7 @@ struct grub_hfsplus_btnode grub_uint8_t height; grub_uint16_t count; grub_uint16_t unused; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Return the offset of the record with the index INDEX, in the node NODE which is part of the B+ tree BTREE. */ @@ -216,3 +246,8 @@ grub_hfsplus_btree_search (struct grub_hfsplus_btree *btree, struct grub_hfsplus_key_internal *keyb), struct grub_hfsplus_btnode **matchnode, grub_off_t *keyoffset); +grub_err_t +grub_mac_bless_inode (grub_device_t dev, grub_uint64_t inode, int is_dir, + int intel); +grub_err_t +grub_mac_bless_file (grub_device_t dev, const char *path_in, int intel); diff --git a/include/grub/i18n.h b/include/grub/i18n.h index a91d73346..468602d92 100644 --- a/include/grub/i18n.h +++ b/include/grub/i18n.h @@ -25,7 +25,7 @@ /* NLS can be disabled through the configure --disable-nls option. */ #if (defined(ENABLE_NLS) && ENABLE_NLS) || !defined (GRUB_UTIL) -extern const char *(*EXPORT_VAR(grub_gettext)) (const char *s); +extern const char *(*EXPORT_VAR(grub_gettext)) (const char *s) __attribute__ ((format_arg (1))); # ifdef GRUB_UTIL @@ -41,7 +41,7 @@ extern const char *(*EXPORT_VAR(grub_gettext)) (const char *s); for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ -static inline const char * __attribute__ ((always_inline)) +static inline const char * __attribute__ ((always_inline,format_arg (1))) gettext (const char *str) { return str; @@ -50,13 +50,13 @@ gettext (const char *str) #endif /* (defined(ENABLE_NLS) && ENABLE_NLS) */ #ifdef GRUB_UTIL -static inline const char * __attribute__ ((always_inline)) +static inline const char * __attribute__ ((always_inline,format_arg (1))) _ (const char *str) { return gettext(str); } #else -static inline const char * __attribute__ ((always_inline)) +static inline const char * __attribute__ ((always_inline,format_arg (1))) _ (const char *str) { return grub_gettext(str); diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index 665248d03..524d47a1f 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -64,7 +64,7 @@ struct grub_freebsd_bootinfo grub_uint32_t kern_end; grub_uint32_t environment; grub_uint32_t tags; -} __attribute__ ((packed)); +} GRUB_PACKED; struct freebsd_tag_header { diff --git a/include/grub/i386/coreboot/lbio.h b/include/grub/i386/coreboot/lbio.h index 9a9304625..1c3fa6f19 100644 --- a/include/grub/i386/coreboot/lbio.h +++ b/include/grub/i386/coreboot/lbio.h @@ -35,7 +35,7 @@ struct grub_linuxbios_timestamp_entry { grub_uint32_t id; grub_uint64_t tsc; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_linuxbios_timestamp_table { @@ -43,7 +43,7 @@ struct grub_linuxbios_timestamp_table grub_uint32_t capacity; grub_uint32_t used; struct grub_linuxbios_timestamp_entry entries[0]; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_linuxbios_mainboard { @@ -86,7 +86,7 @@ struct grub_linuxbios_table_framebuffer { grub_uint8_t blue_mask_size; grub_uint8_t reserved_field_pos; grub_uint8_t reserved_mask_size; -}; +} GRUB_PACKED; struct grub_linuxbios_mem_region { @@ -94,7 +94,7 @@ struct grub_linuxbios_mem_region grub_uint64_t size; #define GRUB_MACHINE_MEMORY_AVAILABLE 1 grub_uint32_t type; -}; +} GRUB_PACKED; typedef struct grub_linuxbios_mem_region *mem_region_t; grub_err_t diff --git a/include/grub/i386/cpuid.h b/include/grub/i386/cpuid.h index fc5522bd6..f7ae4b0a4 100644 --- a/include/grub/i386/cpuid.h +++ b/include/grub/i386/cpuid.h @@ -20,6 +20,7 @@ #define GRUB_CPU_CPUID_HEADER 1 extern unsigned char grub_cpuid_has_longmode; +extern unsigned char grub_cpuid_has_pae; #ifdef __x86_64__ diff --git a/include/grub/i386/efi/memory.h b/include/grub/i386/efi/memory.h index c9a61bb77..2c64918e3 100644 --- a/include/grub/i386/efi/memory.h +++ b/include/grub/i386/efi/memory.h @@ -1 +1,6 @@ +#ifndef GRUB_MEMORY_CPU_HEADER #include + +#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffff + +#endif /* ! GRUB_MEMORY_CPU_HEADER */ diff --git a/include/grub/i386/gdb.h b/include/grub/i386/gdb.h index 070bb82da..92d2dacda 100644 --- a/include/grub/i386/gdb.h +++ b/include/grub/i386/gdb.h @@ -60,13 +60,13 @@ struct grub_cpu_interrupt_gate grub_uint8_t unused; grub_uint8_t gate; grub_uint16_t offset_hi; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_cpu_idt_descriptor { grub_uint16_t limit; grub_uint32_t base; -} __attribute__ ((packed)); +} GRUB_PACKED; extern void (*grub_gdb_trapvec[]) (void); void grub_gdb_idtinit (void); diff --git a/include/grub/i386/linux.h b/include/grub/i386/linux.h index c29c5afbb..fc36bdaf3 100644 --- a/include/grub/i386/linux.h +++ b/include/grub/i386/linux.h @@ -74,7 +74,7 @@ struct grub_e820_mmap grub_uint64_t addr; grub_uint64_t size; grub_uint32_t type; -} __attribute__((packed)); +} GRUB_PACKED; enum { @@ -140,7 +140,7 @@ struct linux_kernel_header grub_uint64_t pref_address; grub_uint32_t init_size; grub_uint32_t handover_offset; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Boot parameters for Linux based on 2.6.12. This is used by the setup sectors of Linux, and must be simulated by GRUB on EFI, because @@ -310,7 +310,7 @@ struct linux_kernel_params grub_uint8_t pad2[120]; /* 258 */ struct grub_e820_mmap e820_map[(0x400 - 0x2d0) / 20]; /* 2d0 */ -} __attribute__ ((packed)); +} GRUB_PACKED; #endif /* ! ASM_FILE */ #endif /* ! GRUB_LINUX_MACHINE_HEADER */ diff --git a/include/grub/i386/macho.h b/include/grub/i386/macho.h index 437fa038f..e15167a50 100644 --- a/include/grub/i386/macho.h +++ b/include/grub/i386/macho.h @@ -29,23 +29,4 @@ #define GRUB_MACHO_CPUTYPE_IS_HOST_CURRENT(x) ((x) == GRUB_MACHO_CPUTYPE_IA32) #endif -struct grub_macho_thread32 -{ - grub_uint32_t cmd; - grub_uint32_t cmdsize; - grub_uint8_t unknown1[48]; - grub_uint32_t entry_point; - grub_uint8_t unknown2[20]; -} __attribute__ ((packed)); - - -struct grub_macho_thread64 -{ - grub_uint32_t cmd; - grub_uint32_t cmdsize; - grub_uint8_t unknown1[0x88]; - grub_uint64_t entry_point; - grub_uint8_t unknown2[0x20]; -} __attribute__ ((packed)); - #endif diff --git a/include/grub/i386/netbsd_bootinfo.h b/include/grub/i386/netbsd_bootinfo.h index 24e145b01..e48c19b40 100644 --- a/include/grub/i386/netbsd_bootinfo.h +++ b/include/grub/i386/netbsd_bootinfo.h @@ -92,7 +92,7 @@ struct grub_netbsd_btinfo_bootwedge { grub_disk_addr_t matchblk; grub_uint64_t matchnblks; grub_uint8_t matchhash[16]; /* MD5 hash */ -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_netbsd_btinfo_symtab { diff --git a/include/grub/i386/openbsd_bootarg.h b/include/grub/i386/openbsd_bootarg.h index 75bb9fb88..01ca4868b 100644 --- a/include/grub/i386/openbsd_bootarg.h +++ b/include/grub/i386/openbsd_bootarg.h @@ -69,7 +69,7 @@ struct grub_openbsd_bootargs grub_uint32_t ba_type; grub_uint32_t ba_size; grub_uint32_t ba_next; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_openbsd_bootarg_console { diff --git a/include/grub/i386/pc/biosdisk.h b/include/grub/i386/pc/biosdisk.h index 71748cebd..3d8071684 100644 --- a/include/grub/i386/pc/biosdisk.h +++ b/include/grub/i386/pc/biosdisk.h @@ -77,7 +77,7 @@ struct grub_biosdisk_drp writes a garbage to the tail of drive parameters, regardless of a size specified in a caller. */ grub_uint8_t dummy[16]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_biosdisk_cdrp { @@ -94,7 +94,7 @@ struct grub_biosdisk_cdrp grub_uint8_t sectors; grub_uint8_t heads; grub_uint8_t dummy[16]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Disk Address Packet. */ struct grub_biosdisk_dap @@ -104,6 +104,6 @@ struct grub_biosdisk_dap grub_uint16_t blocks; grub_uint32_t buffer; grub_uint64_t block; -} __attribute__ ((packed)); +} GRUB_PACKED; #endif /* ! GRUB_BIOSDISK_MACHINE_HEADER */ diff --git a/include/grub/i386/pc/int.h b/include/grub/i386/pc/int.h index fae2e877c..16a53e4fe 100644 --- a/include/grub/i386/pc/int.h +++ b/include/grub/i386/pc/int.h @@ -58,7 +58,7 @@ struct grub_i386_idt { grub_uint16_t limit; grub_uint32_t base; -} __attribute__ ((packed)); +} GRUB_PACKED; #ifdef GRUB_MACHINE_PCBIOS extern struct grub_i386_idt *EXPORT_VAR(grub_realidt); diff --git a/include/grub/i386/pc/pxe.h b/include/grub/i386/pc/pxe.h index 7794379ee..66002bcd2 100644 --- a/include/grub/i386/pc/pxe.h +++ b/include/grub/i386/pc/pxe.h @@ -185,7 +185,7 @@ struct grub_pxenv grub_uint16_t undi_code_seg; /* UNDI Code segment address. */ grub_uint16_t undi_code_size; /* UNDI Code segment size (bytes). */ grub_uint32_t pxe_ptr; /* SEG:OFF to !PXE struct. */ -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxe_bangpxe { @@ -198,7 +198,7 @@ struct grub_pxe_bangpxe grub_uint32_t undiromid; grub_uint32_t baseromid; grub_uint32_t rm_entry; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_get_cached_info { @@ -207,7 +207,7 @@ struct grub_pxenv_get_cached_info grub_uint16_t buffer_size; grub_uint32_t buffer; grub_uint16_t buffer_limit; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_tftp_open { @@ -217,12 +217,12 @@ struct grub_pxenv_tftp_open grub_uint8_t filename[128]; grub_uint16_t tftp_port; grub_uint16_t packet_size; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_tftp_close { grub_uint16_t status; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_tftp_read { @@ -230,7 +230,7 @@ struct grub_pxenv_tftp_read grub_uint16_t packet_number; grub_uint16_t buffer_size; grub_uint32_t buffer; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_tftp_get_fsize { @@ -239,18 +239,18 @@ struct grub_pxenv_tftp_get_fsize grub_uint32_t gateway_ip; grub_uint8_t filename[128]; grub_uint32_t file_size; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_udp_open { grub_uint16_t status; grub_uint32_t src_ip; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_udp_close { grub_uint16_t status; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_udp_write { @@ -261,7 +261,7 @@ struct grub_pxenv_udp_write grub_uint16_t dst_port; grub_uint16_t buffer_size; grub_uint32_t buffer; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_udp_read { @@ -272,13 +272,13 @@ struct grub_pxenv_udp_read grub_uint16_t dst_port; grub_uint16_t buffer_size; grub_uint32_t buffer; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_pxenv_unload_stack { grub_uint16_t status; grub_uint8_t reserved[10]; -} __attribute__ ((packed)); +} GRUB_PACKED; int EXPORT_FUNC(grub_pxe_call) (int func, void * data, grub_uint32_t pxe_rm_entry) __attribute__ ((regparm(3))); diff --git a/include/grub/i386/pc/vbe.h b/include/grub/i386/pc/vbe.h index 570bb0fa6..f349b5c2b 100644 --- a/include/grub/i386/pc/vbe.h +++ b/include/grub/i386/pc/vbe.h @@ -84,7 +84,7 @@ struct grub_vbe_info_block grub_uint8_t reserved[222]; grub_uint8_t oem_data[256]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_vbe_mode_info_block { @@ -147,7 +147,7 @@ struct grub_vbe_mode_info_block that doesn't make structure to be 256 bytes. So additional one is added here. */ grub_uint8_t reserved4[189 + 1]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_vbe_crtc_info_block { @@ -161,7 +161,7 @@ struct grub_vbe_crtc_info_block grub_uint32_t pixel_clock; grub_uint16_t refresh_rate; grub_uint8_t reserved[40]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_vbe_palette_data { @@ -169,7 +169,7 @@ struct grub_vbe_palette_data grub_uint8_t green; grub_uint8_t red; grub_uint8_t alignment; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_vbe_flat_panel_info { @@ -184,7 +184,7 @@ struct grub_vbe_flat_panel_info grub_vbe_farptr_t reserved_offscreen_mem_ptr; grub_uint8_t reserved[14]; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Prototypes for helper functions. */ /* Call VESA BIOS 0x4f00 to get VBE Controller Information, return status. */ diff --git a/include/grub/i386/xen/hypercall.h b/include/grub/i386/xen/hypercall.h index 0152b2b2f..198ee94af 100644 --- a/include/grub/i386/xen/hypercall.h +++ b/include/grub/i386/xen/hypercall.h @@ -26,7 +26,7 @@ EXPORT_FUNC (grub_xen_hypercall) (grub_uint32_t callno, grub_uint32_t a0, grub_uint32_t a1, grub_uint32_t a2, grub_uint32_t a3, grub_uint32_t a4, grub_uint32_t a5) -__attribute__ ((regparm (3), stdcall)); +__attribute__ ((regparm (3), cdecl)); static inline int grub_xen_sched_op (int cmd, void *arg) diff --git a/include/grub/i386/xnu.h b/include/grub/i386/xnu.h index 12b1e60bc..a076b8a97 100644 --- a/include/grub/i386/xnu.h +++ b/include/grub/i386/xnu.h @@ -61,7 +61,7 @@ struct grub_xnu_boot_params_common grub_uint32_t efi_runtime_first_page; /* First memory page containing runtime code or data minus previous value. */ grub_uint32_t efi_runtime_npages; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_xnu_boot_params_v1 { @@ -72,7 +72,7 @@ struct grub_xnu_boot_params_v1 grub_uint32_t efi_system_table; /* Size of grub_efi_uintn_t in bits. */ grub_uint8_t efi_uintnbits; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_XNU_BOOTARGSV1_VERMINOR 5 #define GRUB_XNU_BOOTARGSV1_VERMAJOR 1 @@ -92,7 +92,7 @@ struct grub_xnu_boot_params_v2 grub_uint32_t unused2[11]; grub_uint64_t fsbfreq; grub_uint32_t unused3[734]; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_XNU_BOOTARGSV2_VERMINOR 0 #define GRUB_XNU_BOOTARGSV2_VERMAJOR 2 diff --git a/include/grub/ia64/efi/memory.h b/include/grub/ia64/efi/memory.h index c9a61bb77..2c64918e3 100644 --- a/include/grub/ia64/efi/memory.h +++ b/include/grub/ia64/efi/memory.h @@ -1 +1,6 @@ +#ifndef GRUB_MEMORY_CPU_HEADER #include + +#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffff + +#endif /* ! GRUB_MEMORY_CPU_HEADER */ diff --git a/include/grub/lvm.h b/include/grub/lvm.h index 2d4ab6ff3..30a609c20 100644 --- a/include/grub/lvm.h +++ b/include/grub/lvm.h @@ -41,13 +41,13 @@ struct grub_lvm_label_header { grub_uint32_t crc_xl; /* From next field to end of sector */ grub_uint32_t offset_xl; /* Offset from start of struct to contents */ grub_int8_t type[8]; /* LVM2 001 */ -} __attribute__ ((packed)); +} GRUB_PACKED; /* On disk */ struct grub_lvm_disk_locn { grub_uint64_t offset; /* Offset in bytes to start sector */ grub_uint64_t size; /* Bytes */ -} __attribute__ ((packed)); +} GRUB_PACKED; /* Fields with the suffix _xl should be xlate'd wherever they appear */ /* On disk */ @@ -60,7 +60,7 @@ struct grub_lvm_pv_header { /* NULL-terminated list of data areas followed by */ /* NULL-terminated list of metadata area headers */ struct grub_lvm_disk_locn disk_areas_xl[0]; /* Two lists */ -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_LVM_FMTT_MAGIC "\040\114\126\115\062\040\170\133\065\101\045\162\060\116\052\076" #define GRUB_LVM_FMTT_VERSION 1 @@ -72,7 +72,7 @@ struct grub_lvm_raw_locn { grub_uint64_t size; /* Bytes */ grub_uint32_t checksum; grub_uint32_t filler; -} __attribute__ ((packed)); +} GRUB_PACKED; /* On disk */ /* Structure size limited to one sector */ @@ -84,7 +84,7 @@ struct grub_lvm_mda_header { grub_uint64_t size; /* Size of metadata area */ struct grub_lvm_raw_locn raw_locns[0]; /* NULL-terminated list */ -} __attribute__ ((packed)); +} GRUB_PACKED; #endif /* ! GRUB_LVM_H */ diff --git a/include/grub/macho.h b/include/grub/macho.h index 2bfc30f1a..2dea625f1 100644 --- a/include/grub/macho.h +++ b/include/grub/macho.h @@ -25,7 +25,7 @@ struct grub_macho_fat_header { grub_uint32_t magic; grub_uint32_t nfat_arch; -} __attribute__ ((packed)); +} GRUB_PACKED; enum { @@ -47,7 +47,7 @@ struct grub_macho_fat_arch grub_uint32_t offset; grub_uint32_t size; grub_uint32_t align; -} __attribute__ ((packed)); +} GRUB_PACKED; /* File header for 32-bit. Always in native-endian. */ struct grub_macho_header32 @@ -60,7 +60,7 @@ struct grub_macho_header32 grub_uint32_t ncmds; grub_uint32_t sizeofcmds; grub_uint32_t flags; -} __attribute__ ((packed)); +} GRUB_PACKED; /* File header for 64-bit. Always in native-endian. */ struct grub_macho_header64 @@ -74,14 +74,14 @@ struct grub_macho_header64 grub_uint32_t sizeofcmds; grub_uint32_t flags; grub_uint32_t reserved; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Common header of Mach-O commands. */ struct grub_macho_cmd { grub_uint32_t cmd; grub_uint32_t cmdsize; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef grub_uint32_t grub_macho_vmprot_t; @@ -100,7 +100,7 @@ struct grub_macho_segment32 grub_macho_vmprot_t initprot; grub_uint32_t nsects; grub_uint32_t flags; -} __attribute__ ((packed)); +} GRUB_PACKED; /* 64-bit segment command. */ struct grub_macho_segment64 @@ -117,7 +117,7 @@ struct grub_macho_segment64 grub_macho_vmprot_t initprot; grub_uint32_t nsects; grub_uint32_t flags; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_MACHO_CMD_THREAD 5 @@ -137,7 +137,25 @@ union grub_macho_filestart struct grub_macho_header32 thin32; struct grub_macho_header64 thin64; struct grub_macho_lzss_header lzss; -} __attribute__ ((packed)); +} GRUB_PACKED; + +struct grub_macho_thread32 +{ + grub_uint32_t cmd; + grub_uint32_t cmdsize; + grub_uint8_t unknown1[48]; + grub_uint32_t entry_point; + grub_uint8_t unknown2[20]; +} GRUB_PACKED; + +struct grub_macho_thread64 +{ + grub_uint32_t cmd; + grub_uint32_t cmdsize; + grub_uint8_t unknown1[0x88]; + grub_uint64_t entry_point; + grub_uint8_t unknown2[0x20]; +} GRUB_PACKED; #define GRUB_MACHO_LZSS_OFFSET 0x180 diff --git a/include/grub/mips/loongson/at_keyboard.h b/include/grub/mips/loongson/at_keyboard.h index f279ac86d..8e58cfb17 100644 --- a/include/grub/mips/loongson/at_keyboard.h +++ b/include/grub/mips/loongson/at_keyboard.h @@ -19,7 +19,9 @@ #ifndef GRUB_MACHINE_AT_KEYBOARD_HEADER #define GRUB_MACHINE_AT_KEYBOARD_HEADER 1 -#define KEYBOARD_REG_DATA 0xbfd00060 -#define KEYBOARD_REG_STATUS 0xbfd00064 +#include + +#define KEYBOARD_REG_DATA (GRUB_MACHINE_PCI_IO_BASE | 0x60) +#define KEYBOARD_REG_STATUS (GRUB_MACHINE_PCI_IO_BASE | 0x64) #endif diff --git a/include/grub/mips/loongson/kernel.h b/include/grub/mips/loongson/kernel.h index 5e6e6fdfb..05871910b 100644 --- a/include/grub/mips/loongson/kernel.h +++ b/include/grub/mips/loongson/kernel.h @@ -25,6 +25,7 @@ #define GRUB_ARCH_MACHINE_YEELOONG 0 #define GRUB_ARCH_MACHINE_FULOONG2F 1 #define GRUB_ARCH_MACHINE_FULOONG2E 2 +#define GRUB_ARCH_MACHINE_YEELOONG_3A 3 #ifndef ASM_FILE diff --git a/include/grub/mips/loongson/pci.h b/include/grub/mips/loongson/pci.h index a81f7d75d..b3272e922 100644 --- a/include/grub/mips/loongson/pci.h +++ b/include/grub/mips/loongson/pci.h @@ -27,19 +27,36 @@ #define GRUB_LOONGSON_OHCI_PCIID 0x00351033 #define GRUB_LOONGSON_EHCI_PCIID 0x00e01033 -#define GRUB_PCI_NUM_BUS 1 -#define GRUB_PCI_NUM_DEVICES 16 - -#define GRUB_MACHINE_PCI_IO_BASE 0xbfd00000 -#define GRUB_MACHINE_PCI_CONFSPACE 0xbfe80000 +#define GRUB_MACHINE_PCI_IO_BASE_2F 0xbfd00000 +#define GRUB_MACHINE_PCI_IO_BASE_3A 0xb8000000 +#define GRUB_MACHINE_PCI_CONFSPACE_2F 0xbfe80000 +#define GRUB_MACHINE_PCI_CONFSPACE_3A 0xba000000 +#define GRUB_MACHINE_PCI_CONFSPACE_3A_EXT 0xbb000000 #define GRUB_MACHINE_PCI_CONTROLLER_HEADER 0xbfe00000 -#define GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR 0xbfe00118 +#define GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F 0xbfe00118 + +#define GRUB_PCI_NUM_DEVICES_2F 16 #ifndef ASM_FILE -#define GRUB_MACHINE_PCI_CONF_CTRL_REG (*(volatile grub_uint32_t *) \ - GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) -#define GRUB_MACHINE_PCI_IO_CTRL_REG (*(volatile grub_uint32_t *) 0xbfe00110) + +typedef enum { GRUB_BONITO_2F, GRUB_BONITO_3A } grub_bonito_type_t; +extern grub_bonito_type_t EXPORT_VAR (grub_bonito_type); + +#define GRUB_PCI_NUM_DEVICES (grub_bonito_type ? 32 \ + : GRUB_PCI_NUM_DEVICES_2F) +#define GRUB_PCI_NUM_BUS (grub_bonito_type ? 256 : 1) + +#define GRUB_MACHINE_PCI_IO_BASE (grub_bonito_type \ + ? GRUB_MACHINE_PCI_IO_BASE_3A \ + : GRUB_MACHINE_PCI_IO_BASE_2F) + +#define GRUB_MACHINE_PCI_CONF_CTRL_REG_2F (*(volatile grub_uint32_t *) \ + GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F) +#define GRUB_MACHINE_PCI_IO_CTRL_REG_2F (*(volatile grub_uint32_t *) 0xbfe00110) +#define GRUB_MACHINE_PCI_CONF_CTRL_REG_3A (*(volatile grub_uint32_t *) \ + 0xbfe00118) + #endif #define GRUB_MACHINE_PCI_WIN_MASK_SIZE 6 #define GRUB_MACHINE_PCI_WIN_MASK ((1 << GRUB_MACHINE_PCI_WIN_MASK_SIZE) - 1) @@ -59,53 +76,23 @@ #define GRUB_MACHINE_PCI_WIN3_ADDR 0xb8000000 #ifndef ASM_FILE -static inline grub_uint32_t -grub_pci_read (grub_pci_address_t addr) -{ - GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); - return *(volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONFSPACE - | (addr & 0x07ff)); -} +grub_uint32_t +EXPORT_FUNC (grub_pci_read) (grub_pci_address_t addr); -static inline grub_uint16_t -grub_pci_read_word (grub_pci_address_t addr) -{ - GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); - return *(volatile grub_uint16_t *) (GRUB_MACHINE_PCI_CONFSPACE - | (addr & 0x07ff)); -} +grub_uint16_t +EXPORT_FUNC (grub_pci_read_word) (grub_pci_address_t addr); -static inline grub_uint8_t -grub_pci_read_byte (grub_pci_address_t addr) -{ - GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); - return *(volatile grub_uint8_t *) (GRUB_MACHINE_PCI_CONFSPACE - | (addr & 0x07ff)); -} +grub_uint8_t +EXPORT_FUNC (grub_pci_read_byte) (grub_pci_address_t addr); -static inline void -grub_pci_write (grub_pci_address_t addr, grub_uint32_t data) -{ - GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); - *(volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONFSPACE - | (addr & 0x07ff)) = data; -} +void +EXPORT_FUNC (grub_pci_write) (grub_pci_address_t addr, grub_uint32_t data); -static inline void -grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data) -{ - GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); - *(volatile grub_uint16_t *) (GRUB_MACHINE_PCI_CONFSPACE - | (addr & 0x07ff)) = data; -} +void +EXPORT_FUNC (grub_pci_write_word) (grub_pci_address_t addr, grub_uint16_t data); -static inline void -grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data) -{ - GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); - *(volatile grub_uint8_t *) (GRUB_MACHINE_PCI_CONFSPACE - | (addr & 0x07ff)) = data; -} +void +EXPORT_FUNC (grub_pci_write_byte) (grub_pci_address_t addr, grub_uint8_t data); volatile void * EXPORT_FUNC (grub_pci_device_map_range) (grub_pci_device_t dev, diff --git a/include/grub/misc.h b/include/grub/misc.h index be74d9082..af8e40480 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -104,6 +104,14 @@ grub_memcpy (void *dest, const void *src, grub_size_t n) #define GRUB_BUILTIN_ATTR #endif +#if defined(__x86_64__) && !defined (GRUB_UTIL) +#if defined (__MINGW32__) || defined (__CYGWIN__) || defined (__MINGW64__) +#define GRUB_ASM_ATTR __attribute__ ((sysv_abi)) +#else +#define GRUB_ASM_ATTR +#endif +#endif + /* Prototypes for aliases. */ #ifndef GRUB_UTIL int GRUB_BUILTIN_ATTR EXPORT_FUNC(memcmp) (const void *s1, const void *s2, grub_size_t n); @@ -377,9 +385,11 @@ grub_uint64_t EXPORT_FUNC(grub_divmod64) (grub_uint64_t n, grub_uint64_t d, grub_uint64_t *r); -#if !defined(GRUB_UTIL) && NEED_REGISTER_FRAME_INFO +#if (defined (__MINGW32__) || defined (__CYGWIN__)) && !defined(GRUB_UTIL) void EXPORT_FUNC (__register_frame_info) (void); void EXPORT_FUNC (__deregister_frame_info) (void); +void EXPORT_FUNC (___chkstk_ms) (void); +void EXPORT_FUNC (__chkstk_ms) (void); #endif /* Inline functions. */ diff --git a/include/grub/msdos_partition.h b/include/grub/msdos_partition.h index 92f853982..fdc2904d3 100644 --- a/include/grub/msdos_partition.h +++ b/include/grub/msdos_partition.h @@ -88,7 +88,7 @@ struct grub_msdos_partition_entry /* The length in sector units. */ grub_uint32_t length; -} __attribute__ ((packed)); +} GRUB_PACKED; /* The structure of MBR. */ struct grub_msdos_partition_mbr @@ -101,7 +101,7 @@ struct grub_msdos_partition_mbr /* The signature 0xaa55. */ grub_uint16_t signature; -} __attribute__ ((packed)); +} GRUB_PACKED; diff --git a/include/grub/net.h b/include/grub/net.h index 788516a2d..de6259ee1 100644 --- a/include/grub/net.h +++ b/include/grub/net.h @@ -416,7 +416,7 @@ struct grub_net_bootp_packet char server_name[64]; char boot_file[128]; grub_uint8_t vendor[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_NET_BOOTP_RFC1048_MAGIC_0 0x63 #define GRUB_NET_BOOTP_RFC1048_MAGIC_1 0x82 diff --git a/include/grub/net/udp.h b/include/grub/net/udp.h index 1a7efa777..17f38cfa0 100644 --- a/include/grub/net/udp.h +++ b/include/grub/net/udp.h @@ -27,7 +27,7 @@ struct udphdr grub_uint16_t dst; grub_uint16_t len; grub_uint16_t chksum; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_net_udp_socket; typedef struct grub_net_udp_socket *grub_net_udp_socket_t; diff --git a/include/grub/ntfs.h b/include/grub/ntfs.h index af3f4b05d..d1a6af696 100644 --- a/include/grub/ntfs.h +++ b/include/grub/ntfs.h @@ -125,7 +125,7 @@ struct grub_ntfs_bpb grub_int8_t reserved_6[3]; grub_uint64_t num_serial; grub_uint32_t checksum; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_ntfs_attr { diff --git a/include/grub/offsets.h b/include/grub/offsets.h index a666e898b..85e7401ae 100644 --- a/include/grub/offsets.h +++ b/include/grub/offsets.h @@ -153,7 +153,7 @@ struct grub_pc_bios_boot_blocklist grub_uint64_t start; grub_uint16_t len; grub_uint16_t segment; -} __attribute__ ((packed)); +} GRUB_PACKED; #endif #endif diff --git a/include/grub/scsicmd.h b/include/grub/scsicmd.h index a3e79888a..3f1e6d28c 100644 --- a/include/grub/scsicmd.h +++ b/include/grub/scsicmd.h @@ -34,7 +34,7 @@ struct grub_scsi_test_unit_ready grub_uint8_t reserved3; grub_uint8_t control; grub_uint8_t pad[6]; /* To be ATAPI compatible */ -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_inquiry { @@ -45,7 +45,7 @@ struct grub_scsi_inquiry grub_uint8_t alloc_length; grub_uint8_t control; grub_uint8_t pad[6]; /* To be ATAPI compatible */ -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_inquiry_data { @@ -57,7 +57,7 @@ struct grub_scsi_inquiry_data char vendor[8]; char prodid[16]; char prodrev[4]; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_request_sense { @@ -68,7 +68,7 @@ struct grub_scsi_request_sense grub_uint8_t alloc_length; grub_uint8_t control; grub_uint8_t pad[6]; /* To be ATAPI compatible */ -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_request_sense_data { @@ -83,7 +83,7 @@ struct grub_scsi_request_sense_data grub_uint8_t field_replaceable_unit_code; grub_uint8_t sense_key_specific[3]; /* there can be additional sense field */ -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_read_capacity10 { @@ -95,13 +95,13 @@ struct grub_scsi_read_capacity10 grub_uint8_t PMI; grub_uint8_t control; grub_uint16_t pad; /* To be ATAPI compatible */ -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_read_capacity10_data { grub_uint32_t last_block; grub_uint32_t blocksize; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_read_capacity16 { @@ -111,14 +111,14 @@ struct grub_scsi_read_capacity16 grub_uint32_t alloc_len; grub_uint8_t PMI; grub_uint8_t control; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_read_capacity16_data { grub_uint64_t last_block; grub_uint32_t blocksize; grub_uint8_t pad[20]; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_read10 { @@ -129,7 +129,7 @@ struct grub_scsi_read10 grub_uint16_t size; grub_uint8_t reserved2; grub_uint16_t pad; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_read12 { @@ -139,7 +139,7 @@ struct grub_scsi_read12 grub_uint32_t size; grub_uint8_t reserved; grub_uint8_t control; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_read16 { @@ -149,7 +149,7 @@ struct grub_scsi_read16 grub_uint32_t size; grub_uint8_t reserved; grub_uint8_t control; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_write10 { @@ -160,7 +160,7 @@ struct grub_scsi_write10 grub_uint16_t size; grub_uint8_t reserved2; grub_uint16_t pad; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_write12 { @@ -170,7 +170,7 @@ struct grub_scsi_write12 grub_uint32_t size; grub_uint8_t reserved; grub_uint8_t control; -} __attribute__((packed)); +} GRUB_PACKED; struct grub_scsi_write16 { @@ -180,7 +180,7 @@ struct grub_scsi_write16 grub_uint32_t size; grub_uint8_t reserved; grub_uint8_t control; -} __attribute__((packed)); +} GRUB_PACKED; typedef enum { diff --git a/include/grub/sparc64/ieee1275/boot.h b/include/grub/sparc64/ieee1275/boot.h index a54e47566..02d53f28e 100644 --- a/include/grub/sparc64/ieee1275/boot.h +++ b/include/grub/sparc64/ieee1275/boot.h @@ -57,7 +57,7 @@ struct grub_boot_blocklist { grub_uint64_t start; grub_uint32_t len; -} __attribute__ ((packed)); +} GRUB_PACKED; #endif #endif /* ! BOOT_MACHINE_HEADER */ diff --git a/include/grub/syslinux_parse.h b/include/grub/syslinux_parse.h new file mode 100644 index 000000000..359576310 --- /dev/null +++ b/include/grub/syslinux_parse.h @@ -0,0 +1,37 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#ifndef GRUB_SYSLINUX_PARSE_HEADER +#define GRUB_SYSLINUX_PARSE_HEADER 1 + +#include + +typedef enum + { + GRUB_SYSLINUX_UNKNOWN, + GRUB_SYSLINUX_ISOLINUX, + GRUB_SYSLINUX_PXELINUX, + GRUB_SYSLINUX_SYSLINUX, + } grub_syslinux_flavour_t; + +char * +grub_syslinux_config_file (const char *root, const char *target_root, + const char *cwd, const char *target_cwd, + const char *fname, grub_syslinux_flavour_t flav); + +#endif diff --git a/include/grub/test.h b/include/grub/test.h index 84e3ccd62..b83bdb14e 100644 --- a/include/grub/test.h +++ b/include/grub/test.h @@ -58,13 +58,13 @@ int grub_test_run (grub_test_t test); void grub_test_nonzero (int cond, const char *file, const char *func, grub_uint32_t line, const char *fmt, ...) - __attribute__ ((format (printf, 5, 6))); + __attribute__ ((format (GNU_PRINTF, 5, 6))); /* Macro to fill in location details and an optional error message. */ void grub_test_assert_helper (int cond, const char *file, const char *func, grub_uint32_t line, const char *condstr, const char *fmt, ...) - __attribute__ ((format (printf, 6, 7))); + __attribute__ ((format (GNU_PRINTF, 6, 7))); #define grub_test_assert(cond, ...) \ grub_test_assert_helper(cond, GRUB_FILE, __FUNCTION__, __LINE__, \ diff --git a/include/grub/types.h b/include/grub/types.h index e8c2f68f9..79f765c62 100644 --- a/include/grub/types.h +++ b/include/grub/types.h @@ -24,6 +24,12 @@ #include #endif +#ifdef __MINGW32__ +#define GRUB_PACKED __attribute__ ((packed,gcc_struct)) +#else +#define GRUB_PACKED __attribute__ ((packed)) +#endif + #ifdef GRUB_BUILD # define GRUB_CPU_SIZEOF_VOID_P BUILD_SIZEOF_VOID_P # define GRUB_CPU_SIZEOF_LONG BUILD_SIZEOF_LONG @@ -253,7 +259,7 @@ static inline grub_uint16_t grub_get_unaligned16 (const void *ptr) struct grub_unaligned_uint16_t { grub_uint16_t d; - } __attribute__ ((packed)); + } GRUB_PACKED; const struct grub_unaligned_uint16_t *dd = (const struct grub_unaligned_uint16_t *) ptr; return dd->d; @@ -264,7 +270,7 @@ static inline void grub_set_unaligned16 (void *ptr, grub_uint16_t val) struct grub_unaligned_uint16_t { grub_uint16_t d; - } __attribute__ ((packed)); + } GRUB_PACKED; struct grub_unaligned_uint16_t *dd = (struct grub_unaligned_uint16_t *) ptr; dd->d = val; } @@ -274,7 +280,7 @@ static inline grub_uint32_t grub_get_unaligned32 (const void *ptr) struct grub_unaligned_uint32_t { grub_uint32_t d; - } __attribute__ ((packed)); + } GRUB_PACKED; const struct grub_unaligned_uint32_t *dd = (const struct grub_unaligned_uint32_t *) ptr; return dd->d; @@ -285,7 +291,7 @@ static inline void grub_set_unaligned32 (void *ptr, grub_uint32_t val) struct grub_unaligned_uint32_t { grub_uint32_t d; - } __attribute__ ((packed)); + } GRUB_PACKED; struct grub_unaligned_uint32_t *dd = (struct grub_unaligned_uint32_t *) ptr; dd->d = val; } @@ -293,7 +299,7 @@ static inline void grub_set_unaligned32 (void *ptr, grub_uint32_t val) struct grub_unaligned_uint64 { grub_uint64_t val; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_unaligned_uint64 grub_unaligned_uint64_t; @@ -309,7 +315,7 @@ static inline void grub_set_unaligned64 (void *ptr, grub_uint64_t val) struct grub_unaligned_uint64_t { grub_uint64_t d; - } __attribute__ ((packed)); + } GRUB_PACKED; struct grub_unaligned_uint64_t *dd = (struct grub_unaligned_uint64_t *) ptr; dd->d = val; } diff --git a/include/grub/unicode.h b/include/grub/unicode.h index 17b6ca684..a0403e91f 100644 --- a/include/grub/unicode.h +++ b/include/grub/unicode.h @@ -37,7 +37,7 @@ struct grub_unicode_compact_range unsigned comb_type:8; unsigned bidi_mirror:1; unsigned join_type:3; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Old-style Arabic shaping. Used for "visual UTF-8" and in grub-mkfont to find variant glyphs in absence of GPOS tables. */ diff --git a/include/grub/usbdesc.h b/include/grub/usbdesc.h index 7d1415248..aac5ab05a 100644 --- a/include/grub/usbdesc.h +++ b/include/grub/usbdesc.h @@ -36,7 +36,7 @@ struct grub_usb_desc { grub_uint8_t length; grub_uint8_t type; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_usb_desc_device { @@ -54,7 +54,7 @@ struct grub_usb_desc_device grub_uint8_t strprod; grub_uint8_t strserial; grub_uint8_t configcnt; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_usb_desc_config { @@ -66,7 +66,7 @@ struct grub_usb_desc_config grub_uint8_t strconfig; grub_uint8_t attrib; grub_uint8_t maxpower; -} __attribute__ ((packed)); +} GRUB_PACKED; #if 0 struct grub_usb_desc_if_association @@ -79,7 +79,7 @@ struct grub_usb_desc_if_association grub_uint8_t subclass; grub_uint8_t protocol; grub_uint8_t function; -} __attribute__ ((packed)); +} GRUB_PACKED; #endif struct grub_usb_desc_if @@ -93,7 +93,7 @@ struct grub_usb_desc_if grub_uint8_t subclass; grub_uint8_t protocol; grub_uint8_t strif; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_usb_desc_endp { @@ -103,14 +103,14 @@ struct grub_usb_desc_endp grub_uint8_t attrib; grub_uint16_t maxpacket; grub_uint8_t interval; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_usb_desc_str { grub_uint8_t length; grub_uint8_t type; grub_uint16_t str[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_usb_desc_debug { @@ -118,7 +118,7 @@ struct grub_usb_desc_debug grub_uint8_t type; grub_uint8_t in_endp; grub_uint8_t out_endp; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_usb_usb_hubdesc { @@ -129,6 +129,6 @@ struct grub_usb_usb_hubdesc grub_uint8_t pwdgood; grub_uint8_t current; /* Removable and power control bits follow. */ -} __attribute__ ((packed)); +} GRUB_PACKED; #endif /* GRUB_USBDESC_H */ diff --git a/include/grub/usbtrans.h b/include/grub/usbtrans.h index 5429007d0..aef482cb9 100644 --- a/include/grub/usbtrans.h +++ b/include/grub/usbtrans.h @@ -149,7 +149,7 @@ struct grub_usb_packet_setup grub_uint16_t value; grub_uint16_t index; grub_uint16_t length; -} __attribute__((packed)); +} GRUB_PACKED; #endif /* GRUB_USBTRANS_H */ diff --git a/include/grub/util/install.h b/include/grub/util/install.h index beca2d25d..bc987aadc 100644 --- a/include/grub/util/install.h +++ b/include/grub/util/install.h @@ -42,7 +42,7 @@ "no,xz,gz,lzo", OPTION_ARG_OPTIONAL, \ N_("compress GRUB files [optional]"), 1 }, \ {"core-compress", GRUB_INSTALL_OPTIONS_INSTALL_CORE_COMPRESS, \ - N_("xz|none|auto"), \ + "xz|none|auto", \ 0, N_("choose the compression to use for core image"), 2}, \ /* TRANSLATORS: platform here isn't identifier. It can be translated. */ \ { "directory", 'd', N_("DIR"), 0, \ @@ -62,7 +62,7 @@ { "pubkey", 'k', N_("FILE"), 0, \ N_("embed FILE as public key for signature checking"), 0}, \ { "verbose", 'v', 0, 0, \ - N_("increase verbosity"), 1 } + N_("print verbose messages."), 1 } int grub_install_parse (int key, char *arg); @@ -183,12 +183,14 @@ void grub_util_bios_setup (const char *dir, const char *boot_file, const char *core_file, const char *dest, int force, - int fs_probe, int allow_floppy); + int fs_probe, int allow_floppy, + int add_rs_codes); void grub_util_sparc_setup (const char *dir, const char *boot_file, const char *core_file, const char *dest, int force, - int fs_probe, int allow_floppy); + int fs_probe, int allow_floppy, + int add_rs_codes); char * grub_install_get_image_targets_string (void); @@ -203,7 +205,7 @@ const char * grub_install_get_default_x86_platform (void); void -grub_install_register_efi (const char *efidir_disk, int efidir_part, +grub_install_register_efi (grub_device_t efidir_grub_dev, const char *efifile_path, const char *efi_distributor); diff --git a/include/grub/util/windows.h b/include/grub/util/windows.h index 2645fccbf..630948393 100644 --- a/include/grub/util/windows.h +++ b/include/grub/util/windows.h @@ -27,4 +27,7 @@ grub_util_get_windows_path (const char *unix_path); char * grub_util_tchar_to_utf8 (LPCTSTR in); +TCHAR * +grub_get_mount_point (const TCHAR *path); + #endif diff --git a/include/grub/video.h b/include/grub/video.h index 601261e15..778012e08 100644 --- a/include/grub/video.h +++ b/include/grub/video.h @@ -273,7 +273,7 @@ struct grub_video_edid_info grub_uint8_t extension_flag; grub_uint8_t checksum; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef enum grub_video_driver_id { @@ -290,7 +290,9 @@ typedef enum grub_video_driver_id GRUB_VIDEO_DRIVER_RADEON_FULOONG2E, GRUB_VIDEO_DRIVER_COREBOOT, GRUB_VIDEO_DRIVER_IEEE1275, - GRUB_VIDEO_ADAPTER_CAPTURE + GRUB_VIDEO_ADAPTER_CAPTURE, + GRUB_VIDEO_DRIVER_XEN, + GRUB_VIDEO_DRIVER_RADEON_YEELOONG3A } grub_video_driver_id_t; typedef enum grub_video_adapter_prio @@ -577,6 +579,8 @@ extern void grub_video_sis315pro_init (void); extern void grub_video_radeon_fuloong2e_init (void); extern void grub_video_sis315pro_fini (void); extern void grub_video_radeon_fuloong2e_fini (void); +extern void grub_video_radeon_yeeloong3a_init (void); +extern void grub_video_radeon_yeeloong3a_fini (void); #endif void diff --git a/include/grub/x86_64/efi/memory.h b/include/grub/x86_64/efi/memory.h index c9a61bb77..46e9145a3 100644 --- a/include/grub/x86_64/efi/memory.h +++ b/include/grub/x86_64/efi/memory.h @@ -1 +1,10 @@ +#ifndef GRUB_MEMORY_CPU_HEADER #include + +#if defined (__code_model_large__) +#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffff +#else +#define GRUB_EFI_MAX_USABLE_ADDRESS 0x7fffffff +#endif + +#endif /* ! GRUB_MEMORY_CPU_HEADER */ diff --git a/include/grub/x86_64/setjmp.h b/include/grub/x86_64/setjmp.h index e9f2bac8e..6df8a1289 100644 --- a/include/grub/x86_64/setjmp.h +++ b/include/grub/x86_64/setjmp.h @@ -21,7 +21,7 @@ typedef unsigned long grub_jmp_buf[8]; -int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE; -void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn)); +int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE GRUB_ASM_ATTR; +void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn)) GRUB_ASM_ATTR; #endif /* ! GRUB_SETJMP_CPU_HEADER */ diff --git a/include/grub/x86_64/types.h b/include/grub/x86_64/types.h index d53138ea3..fec910952 100644 --- a/include/grub/x86_64/types.h +++ b/include/grub/x86_64/types.h @@ -23,7 +23,11 @@ #define GRUB_TARGET_SIZEOF_VOID_P 8 /* The size of long. */ +#ifdef __MINGW32__ +#define GRUB_TARGET_SIZEOF_LONG 4 +#else #define GRUB_TARGET_SIZEOF_LONG 8 +#endif /* x86_64 is little-endian. */ #undef GRUB_TARGET_WORDS_BIGENDIAN diff --git a/include/grub/x86_64/xen/hypercall.h b/include/grub/x86_64/xen/hypercall.h index 780db4d61..90dd9007b 100644 --- a/include/grub/x86_64/xen/hypercall.h +++ b/include/grub/x86_64/xen/hypercall.h @@ -19,16 +19,18 @@ #ifndef GRUB_XEN_CPU_HYPERCALL_HEADER #define GRUB_XEN_CPU_HYPERCALL_HEADER 1 -int EXPORT_FUNC (grub_xen_sched_op) (int cmd, void *arg); -int grub_xen_update_va_mapping (void *addr, uint64_t pte, uint64_t flags); -int grub_xen_event_channel_op (int op, void *arg); +#include + +int EXPORT_FUNC (grub_xen_sched_op) (int cmd, void *arg) GRUB_ASM_ATTR; +int grub_xen_update_va_mapping (void *addr, uint64_t pte, uint64_t flags) GRUB_ASM_ATTR; +int EXPORT_FUNC (grub_xen_event_channel_op) (int op, void *arg) GRUB_ASM_ATTR; int grub_xen_mmuext_op (mmuext_op_t * ops, unsigned int count, - unsigned int *pdone, unsigned int foreigndom); + unsigned int *pdone, unsigned int foreigndom) GRUB_ASM_ATTR; int EXPORT_FUNC (grub_xen_mmu_update) (const struct mmu_update * reqs, unsigned count, unsigned *done_out, - unsigned foreigndom); -int EXPORT_FUNC (grub_xen_grant_table_op) (int, void *, int); + unsigned foreigndom) GRUB_ASM_ATTR; +int EXPORT_FUNC (grub_xen_grant_table_op) (int, void *, int) GRUB_ASM_ATTR; #endif diff --git a/include/grub/xen.h b/include/grub/xen.h index 062c95d9f..6035d1a10 100644 --- a/include/grub/xen.h +++ b/include/grub/xen.h @@ -53,7 +53,7 @@ extern grub_size_t EXPORT_VAR (grub_xen_n_allocated_shared_pages); extern volatile struct xencons_interface *grub_xen_xcons; extern volatile struct shared_info *EXPORT_VAR (grub_xen_shared_info); extern volatile struct xenstore_domain_interface *grub_xen_xenstore; -extern volatile grant_entry_v2_t *grub_xen_grant_table; +extern volatile grant_entry_v1_t *grub_xen_grant_table; void EXPORT_FUNC (grub_xen_store_send) (const void *buf_, grub_size_t len); void EXPORT_FUNC (grub_xen_store_recv) (void *buf_, grub_size_t len); diff --git a/include/grub/xnu.h b/include/grub/xnu.h index 9b17717a9..b7a7f450c 100644 --- a/include/grub/xnu.h +++ b/include/grub/xnu.h @@ -46,7 +46,7 @@ struct grub_xnu_hibernate_header Used only to skip it. */ grub_uint32_t extmapsize; -} __attribute__ ((packed)); +} GRUB_PACKED; /* In-memory structure for temporary keeping device tree. */ struct grub_xnu_devtree_key @@ -67,7 +67,7 @@ grub_xnu_extdesc { grub_uint32_t addr; grub_uint32_t size; -} __attribute__ ((packed)); +} GRUB_PACKED; /* Header describing extension in the memory. */ struct grub_xnu_extheader @@ -78,7 +78,7 @@ struct grub_xnu_extheader grub_uint32_t binarysize; grub_uint32_t nameaddr; grub_uint32_t namesize; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_xnu_devtree_key *grub_xnu_create_key (struct grub_xnu_devtree_key **parent, const char *name); diff --git a/include/grub/zfs/zap_leaf.h b/include/grub/zfs/zap_leaf.h index f2b7cb1da..95c67dcba 100644 --- a/include/grub/zfs/zap_leaf.h +++ b/include/grub/zfs/zap_leaf.h @@ -91,7 +91,7 @@ typedef union zap_leaf_chunk { { grub_uint8_t la_array[ZAP_LEAF_ARRAY_BYTES]; grub_uint64_t la_array64; - } __attribute__ ((packed)); + } GRUB_PACKED; grub_uint16_t la_next; /* next blk or CHAIN_END */ } l_array; struct zap_leaf_free { diff --git a/include/grub/zfs/zio.h b/include/grub/zfs/zio.h index 8fad2cc09..19ce136bb 100644 --- a/include/grub/zfs/zio.h +++ b/include/grub/zfs/zio.h @@ -30,7 +30,7 @@ typedef struct zio_eck { grub_uint64_t zec_magic; /* for validation, endianness */ zio_cksum_t zec_cksum; /* 256-bit checksum */ -} __attribute__ ((packed)) zio_eck_t; +} GRUB_PACKED zio_eck_t; /* * Gang block headers are self-checksumming and contain an array diff --git a/include/multiboot.h b/include/multiboot.h index bd133ba1f..7e5ac69ba 100644 --- a/include/multiboot.h +++ b/include/multiboot.h @@ -238,7 +238,7 @@ struct multiboot_mmap_entry #define MULTIBOOT_MEMORY_NVS 4 #define MULTIBOOT_MEMORY_BADRAM 5 multiboot_uint32_t type; -} __attribute__((packed)); +} GRUB_PACKED; typedef struct multiboot_mmap_entry multiboot_memory_map_t; struct multiboot_mod_list diff --git a/include/multiboot2.h b/include/multiboot2.h index 58f2f6845..3ccff15fc 100644 --- a/include/multiboot2.h +++ b/include/multiboot2.h @@ -59,6 +59,7 @@ #define MULTIBOOT_TAG_TYPE_ACPI_NEW 15 #define MULTIBOOT_TAG_TYPE_NETWORK 16 #define MULTIBOOT_TAG_TYPE_EFI_MMAP 17 +#define MULTIBOOT_TAG_TYPE_EFI_BS 18 #define MULTIBOOT_HEADER_TAG_END 0 #define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1 @@ -67,6 +68,7 @@ #define MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS 4 #define MULTIBOOT_HEADER_TAG_FRAMEBUFFER 5 #define MULTIBOOT_HEADER_TAG_MODULE_ALIGN 6 +#define MULTIBOOT_HEADER_TAG_EFI_BS 7 #define MULTIBOOT_ARCHITECTURE_I386 0 #define MULTIBOOT_ARCHITECTURE_MIPS32 4 @@ -177,7 +179,7 @@ struct multiboot_mmap_entry #define MULTIBOOT_MEMORY_BADRAM 5 multiboot_uint32_t type; multiboot_uint32_t zero; -} __attribute__((packed)); +} GRUB_PACKED; typedef struct multiboot_mmap_entry multiboot_memory_map_t; struct multiboot_tag diff --git a/po/exclude.pot b/po/exclude.pot index 5f0489531..1659eb01b 100644 --- a/po/exclude.pot +++ b/po/exclude.pot @@ -5155,6 +5155,2021 @@ msgid "gpt_parttype" msgstr "" #: grub-core/kern/uboot/init.c:85 -msgid "invalid U-Boot API version -" +msgid "invalid U-Boot API version\n" +msgstr "" + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "source %s/grub.cfg" +msgstr "" + +#: util/grub-mknetdir.c:149 +msgid "core" +msgstr "" + +#: util/grub-mknetdir.c:174 +msgid "/srv/tftp" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:188 +msgid "XXXXXXXXXXXXXXXXXXX" +msgstr "" + +#: util/grub-mkrescue.c:71 +#, c-format +msgid "%s=%s" +msgstr "" + +#: util/grub-mkrescue.c:97 +msgid "rom-directory" +msgstr "" + +#: util/grub-mkrescue.c:99 util/grub-mkrescue.c:373 +msgid "xorriso" +msgstr "" + +#: util/grub-mkrescue.c:102 +msgid "grub-glue-efi" +msgstr "" + +#: util/grub-mkrescue.c:103 +msgid "grub-render-label" +msgstr "" + +#: util/grub-mkrescue.c:104 +msgid "label-font" +msgstr "" + +#: util/grub-mkrescue.c:105 +msgid "label-color" +msgstr "" + +#: util/grub-mkrescue.c:106 +msgid "label-bgcolor" +msgstr "" + +#: util/grub-mkrescue.c:107 +msgid "product-name" +msgstr "" + +#: util/grub-mkrescue.c:108 +msgid "product-version" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "sparc-boot" +msgstr "" + +#: util/grub-mkrescue.c:110 +msgid "arcs-boot" +msgstr "" + +#: util/grub-mkrescue.c:120 +msgid "xorriso -as mkisofs -help" +msgstr "" + +#: util/grub-mkrescue.c:236 +#, c-format +msgid "insmod %s\n" +msgstr "" + +#: util/grub-mkrescue.c:258 +#, c-format +msgid "search --fs-uuid --set=root %s" +msgstr "" + +#: util/grub-mkrescue.c:259 +#, c-format +msgid "set prefix=(${root})/boot/grub" +msgstr "" + +#: util/grub-mkrescue.c:266 util/grub-mkrescue.c:479 util/grub-mkrescue.c:523 +msgid "/boot/grub" +msgstr "" + +#: util/grub-mkrescue.c:305 +msgid "()/boot/grub" +msgstr "" + +#: util/grub-mkrescue.c:322 util/grub-mkrescue.c:382 +msgid "-as" +msgstr "" + +#: util/grub-mkrescue.c:323 util/grub-mkrescue.c:383 +msgid "mkisofs" +msgstr "" + +#: util/grub-mkrescue.c:324 +msgid "-help" +msgstr "" + +#: util/grub-mkrescue.c:374 +msgid "unicode.pf2" +msgstr "" + +#: util/grub-mkrescue.c:384 +msgid "-graft-points" +msgstr "" + +#: util/grub-mkrescue.c:390 +msgid "roms" +msgstr "" + +#: util/grub-mkrescue.c:442 +#, c-format +msgid "%04d-%02d-%02d-%02d-%02d-%02d-00" +msgstr "" + +#: util/grub-mkrescue.c:454 +msgid "--modification-date=" +msgstr "" + +#: util/grub-mkrescue.c:468 +msgid "eltorito.img" +msgstr "" + +#: util/grub-mkrescue.c:471 +msgid "BIOS" +msgstr "" + +#: util/grub-mkrescue.c:481 util/mkimage.c:180 +msgid "i386-pc-eltorito" +msgstr "" + +#: util/grub-mkrescue.c:484 +msgid "boot/grub/i386-pc/eltorito.img" +msgstr "" + +#: util/grub-mkrescue.c:485 +msgid "-no-emul-boot" +msgstr "" + +#: util/grub-mkrescue.c:486 +msgid "-boot-load-size" +msgstr "" + +#: util/grub-mkrescue.c:487 +msgid "4" +msgstr "" + +#: util/grub-mkrescue.c:488 +msgid "-boot-info-table" +msgstr "" + +#: util/grub-mkrescue.c:491 +msgid "grub2-boot-info" +msgstr "" + +#: util/grub-mkrescue.c:494 +msgid "boot_hybrid.img" +msgstr "" + +#: util/grub-mkrescue.c:495 +msgid "--grub2-boot-info" +msgstr "" + +#: util/grub-mkrescue.c:496 +msgid "--grub2-mbr" +msgstr "" + +#: util/grub-mkrescue.c:537 util/grub-mkrescue.c:742 +msgid "-G" +msgstr "" + +#: util/grub-mkrescue.c:550 +msgid "i386-multiboot/core.elf" +msgstr "" + +#: util/grub-mkrescue.c:555 +msgid "ofwx86.elf" +msgstr "" + +#: util/grub-mkrescue.c:565 +msgid "System" +msgstr "" + +#: util/grub-mkrescue.c:565 +msgid "Library" +msgstr "" + +#: util/grub-mkrescue.c:565 +msgid "CoreServices" +msgstr "" + +#: util/grub-mkrescue.c:568 +msgid "mach_kernel" +msgstr "" + +#: util/grub-mkrescue.c:573 +msgid "SystemVersion.plist" +msgstr "" + +#: util/grub-mkrescue.c:587 +msgid ".disk_label" +msgstr "" + +#: util/grub-mkrescue.c:589 +msgid "white" +msgstr "" + +#: util/grub-mkrescue.c:590 +msgid "black" +msgstr "" + +#: util/grub-mkrescue.c:592 +msgid ".disk_label.contentDetails" +msgstr "" + +#: util/grub-mkrescue.c:600 +msgid "-hfsplus" +msgstr "" + +#: util/grub-mkrescue.c:601 +msgid "-apm-block-size" +msgstr "" + +#: util/grub-mkrescue.c:602 +msgid "2048" +msgstr "" + +#: util/grub-mkrescue.c:603 util/grub-mkrescue.c:702 +msgid "-hfsplus-file-creator-type" +msgstr "" + +#: util/grub-mkrescue.c:604 util/grub-mkrescue.c:692 util/grub-mkrescue.c:703 +msgid "chrp" +msgstr "" + +#: util/grub-mkrescue.c:605 +msgid "tbxj" +msgstr "" + +#: util/grub-mkrescue.c:606 +msgid "/System/Library/CoreServices/.disk_label" +msgstr "" + +#: util/grub-mkrescue.c:611 util/grub-mkrescue.c:706 +msgid "-hfs-bless-by" +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "/System/Library/CoreServices/boot.efi" +msgstr "" + +#: util/grub-mkrescue.c:630 +msgid "bootia64.efi" +msgstr "" + +#: util/grub-mkrescue.c:634 +msgid "bootx64.efi" +msgstr "" + +#: util/grub-mkrescue.c:637 +msgid "bootia32.efi" +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "bootarm.efi" +msgstr "" + +#: util/grub-mkrescue.c:646 util/grub-mkrescue.c:653 +msgid "boot.efi" +msgstr "" + +#: util/grub-mkrescue.c:668 util/grub-mkrescue.c:673 +msgid "efi.img" +msgstr "" + +#: util/grub-mkrescue.c:669 +msgid "mformat" +msgstr "" + +#: util/grub-mkrescue.c:669 +msgid "-C" +msgstr "" + +#: util/grub-mkrescue.c:669 +msgid "2880" +msgstr "" + +#: util/grub-mkrescue.c:669 +msgid "16" +msgstr "" + +#: util/grub-mkrescue.c:669 util/grub-mkrescue.c:671 +msgid "-i" +msgstr "" + +#: util/grub-mkrescue.c:670 +msgid "::" +msgstr "" + +#: util/grub-mkrescue.c:671 +msgid "mcopy" +msgstr "" + +#: util/grub-mkrescue.c:671 +msgid "::/" +msgstr "" + +#: util/grub-mkrescue.c:672 +msgid "--efi-boot" +msgstr "" + +#: util/grub-mkrescue.c:674 +msgid "-efi-boot-part" +msgstr "" + +#: util/grub-mkrescue.c:675 +msgid "--efi-boot-image" +msgstr "" + +#: util/grub-mkrescue.c:683 +msgid "powerpc-ieee1275/core.elf" +msgstr "" + +#: util/grub-mkrescue.c:688 +msgid "grub.chrp" +msgstr "" + +#: util/grub-mkrescue.c:690 util/grub-mkrescue.c:693 +msgid "bootinfo.txt" +msgstr "" + +#: util/grub-mkrescue.c:691 +msgid "BootX" +msgstr "" + +#: util/grub-mkrescue.c:692 util/grub-mkrescue.c:693 +msgid "ppc" +msgstr "" + +#: util/grub-mkrescue.c:697 +msgid "/System/Library/CoreServices/grub.elf" +msgstr "" + +#: util/grub-mkrescue.c:697 util/grub-mkrescue.c:698 +msgid "/boot/grub/powerpc-ieee1275/core.elf" +msgstr "" + +#: util/grub-mkrescue.c:698 +msgid "/boot/grub/powerpc.elf" +msgstr "" + +#: util/grub-mkrescue.c:704 +msgid "tbxi" +msgstr "" + +#: util/grub-mkrescue.c:705 +msgid "/System/Library/CoreServices/BootX" +msgstr "" + +#: util/grub-mkrescue.c:707 +msgid "p" +msgstr "" + +#: util/grub-mkrescue.c:708 +msgid "/System/Library/CoreServices" +msgstr "" + +#: util/grub-mkrescue.c:710 +msgid "-sysid" +msgstr "" + +#: util/grub-mkrescue.c:711 +msgid "PPC" +msgstr "" + +#: util/grub-mkrescue.c:715 +msgid "sparc64-ieee1275/core.img" +msgstr "" + +#: util/grub-mkrescue.c:725 util/mkimage.c:1361 +msgid "cdboot.img" +msgstr "" + +#: util/grub-mkrescue.c:746 +msgid "--grub2-sparc-core" +msgstr "" + +#: util/grub-mkrescue.c:747 +msgid "/boot/grub/sparc64-ieee1275/core.img" +msgstr "" + +#: util/grub-mkrescue.c:750 +msgid "mips-arc/core.img" +msgstr "" + +#: util/grub-mkrescue.c:754 util/grub-mkrescue.c:765 +msgid "/boot/grub/mips-arc/grub" +msgstr "" + +#: util/grub-mkrescue.c:754 util/grub-mkrescue.c:755 util/grub-mkrescue.c:756 +msgid "/boot/grub/mips-arc/core.img" +msgstr "" + +#: util/grub-mkrescue.c:755 util/grub-mkrescue.c:761 +msgid "/boot/grub/mips-arc/sashARCS" +msgstr "" + +#: util/grub-mkrescue.c:756 util/grub-mkrescue.c:763 +msgid "/boot/grub/mips-arc/sash" +msgstr "" + +#: util/grub-mkrescue.c:760 util/grub-mkrescue.c:762 util/grub-mkrescue.c:764 +msgid "-mips-boot" +msgstr "" + +#: util/grub-mkrescue.c:768 +msgid "arc.exe" +msgstr "" + +#: util/grub-mkrescue.c:771 util/grub-mkrescue.c:799 +msgid "roms/mipsel-qemu_mips.elf" +msgstr "" + +#: util/grub-mkrescue.c:773 util/grub-mkrescue.c:800 +msgid "loongson.elf" +msgstr "" + +#: util/grub-mkrescue.c:775 util/grub-mkrescue.c:801 +msgid "mipsel-yeeloong.bin" +msgstr "" + +#: util/grub-mkrescue.c:776 +msgid "mipsel-fuloong2f.bin" +msgstr "" + +#: util/grub-mkrescue.c:778 util/grub-mkrescue.c:803 +msgid "roms/mips-qemu_mips.elf" +msgstr "" + +#: util/grub-mkrescue.c:782 util/grub-mkrescue.c:804 +msgid "roms/qemu.img" +msgstr "" + +#: util/grub-mkrescue.c:786 util/grub-mkrescue.c:805 +msgid "roms/coreboot.elf" +msgstr "" + +#: util/grub-mkrescue.c:799 +msgid "mipsel-qemu_mips.elf" +msgstr "" + +#: util/grub-mkrescue.c:800 +msgid "mipsel-loongson.elf" +msgstr "" + +#: util/grub-mkrescue.c:801 +msgid "roms/mipsel-yeeloong.bin" +msgstr "" + +#: util/grub-mkrescue.c:802 +msgid "roms/mipsel-fulong.bin" +msgstr "" + +#: util/grub-mkrescue.c:802 +msgid "mipsel-fulong.bin" +msgstr "" + +#: util/grub-mkrescue.c:803 +msgid "mips-qemu_mips.elf" +msgstr "" + +#: util/grub-mkrescue.c:804 +msgid "qemu.img" +msgstr "" + +#: util/grub-mkrescue.c:805 +msgid "coreboot.elf" +msgstr "" + +#: util/grub-mkrescue.c:816 +msgid "--protective-msdos-label" +msgstr "" + +#: util/grub-mkrescue.c:821 util/grub-mkrescue.c:824 +msgid "--sort-weight" +msgstr "" + +#: util/grub-mkrescue.c:826 +msgid "/boot" +msgstr "" + +#: util/grub-mkstandalone.c:227 util/grub-mkstandalone.c:257 +msgid "0000600" +msgstr "" + +#: util/grub-mkstandalone.c:228 util/grub-mkstandalone.c:229 +#: util/grub-mkstandalone.c:258 util/grub-mkstandalone.c:259 +msgid "0001750" +msgstr "" + +#: util/grub-mkstandalone.c:234 util/grub-mkstandalone.c:264 +msgid "ustar " +msgstr "" + +#: util/grub-mkstandalone.c:346 +msgid "tar" +msgstr "" + +#: util/mkimage.c:261 util/mkimage.c:262 +msgid "i386-xen" +msgstr "" + +#: util/mkimage.c:280 util/mkimage.c:281 +msgid "x86_64-xen" +msgstr "" + +#: grub-core/commands/verify.c:170 grub-core/commands/verify.c:171 +msgid "gcry_rsa" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:46 grub-core/commands/xen/lsxen.c:60 +msgid "domid" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:49 +#, c-format +msgid "/local/domain/%s" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:82 +#, c-format +msgid "%s/sectors" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:90 +#, c-format +msgid "%s/sector-size" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:280 +#, c-format +msgid "device/vbd/%s/backend" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:285 +#, c-format +msgid "%s/dev" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:291 +#, c-format +msgid "xenid/%s" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:295 +#, c-format +msgid "xen/%s" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:301 +#, c-format +msgid "device/vbd/%s/backend-id" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:331 +#, c-format +msgid "device/vbd/%s/ring-ref" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:337 +#, c-format +msgid "device/vbd/%s/event-channel" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:343 +#, c-format +msgid "device/vbd/%s/protocol" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:353 +#, c-format +msgid "device/vbd/%s/state" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:354 +msgid "3" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:360 grub-core/disk/xen/xendisk.c:422 +#: grub-core/disk/xen/xendisk.c:428 grub-core/disk/xen/xendisk.c:454 +#, c-format +msgid "%s/state" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:373 +#, c-format +msgid "device/vbd/%s" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:396 grub-core/disk/xen/xendisk.c:405 +msgid "device/vbd" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:424 grub-core/disk/xen/xendisk.c:433 +msgid "6" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:440 +#, c-format +msgid "%s/ring-ref" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:444 +#, c-format +msgid "%s/event-channel" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:747 +msgid "item_pixmap_style" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:787 +msgid "scrollbar_thumb_overlay" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:795 +msgid "scrollbar_slice" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:797 +msgid "west" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:801 +msgid "east" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:804 +msgid "scrollbar_left_pad" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:808 +msgid "scrollbar_right_pad" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:812 +msgid "scrollbar_top_pad" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:816 +msgid "scrollbar_bottom_pad" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:377 +msgid "highlight_overlay" +msgstr "" + +#: grub-core/kern/mips/dl.c:267 +msgid "_gp_disp" +msgstr "" + +#: grub-core/lib/progress.c:81 +#, c-format +msgid " [ %.20s %s %llu%% " +msgstr "" + +#: grub-core/lib/progress.c:88 +#, c-format +msgid "%s ]" +msgstr "" + +#: grub-core/lib/reed_solomon.c:74 +msgid "_text,_text" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1571 +msgid "wd" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1572 +msgid "fd" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1573 grub-core/osdep/linux/ofpath.c:415 +msgid "sd" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1575 +msgid "vnd" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1576 +msgid "rd" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:45 +msgid "PAE=no," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:55 +msgid "PAE=yes," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:65 grub-core/loader/i386/xen_fileXX.c:66 +msgid "PAE=yes[extended-cr3]," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:77 +msgid "PAE=bimodal," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:87 grub-core/loader/i386/xen_fileXX.c:88 +msgid "PAE=bimodal[extended-cr3]," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:99 +msgid "PAE=yes,bimodal," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:109 +#: grub-core/loader/i386/xen_fileXX.c:110 +msgid "PAE=yes[extended-cr3],bimodal," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:121 +#: grub-core/loader/i386/xen_fileXX.c:123 +msgid "VIRT_BASE=" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:128 +#: grub-core/loader/i386/xen_fileXX.c:130 +msgid "VIRT_ENTRY=" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:135 +#: grub-core/loader/i386/xen_fileXX.c:137 +msgid "HYPERCALL_PAGE=" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:143 +#: grub-core/loader/i386/xen_fileXX.c:145 +msgid "ELF_PADDR_OFFSET=" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:191 util/mkimage.c:712 +msgid "Xen" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:220 util/grub-mkimagexx.c:207 +#: util/grub-mkimagexx.c:212 util/grub-mkimagexx.c:213 +msgid "generic" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:231 util/grub-mkimagexx.c:258 +#: util/grub-mkimagexx.c:259 +msgid "yes" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:237 +msgid "bimodal" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:243 util/grub-mkimagexx.c:253 +msgid "yes,bimodal" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:327 +#: grub-core/loader/i386/xen_fileXX.c:338 +#: grub-core/loader/i386/xen_fileXX.c:339 +msgid "__xen_guest" +msgstr "" + +#: grub-core/loader/multiboot.c:244 +msgid "--quirk-bad-kludge" +msgstr "" + +#: grub-core/loader/multiboot.c:251 +msgid "--quirk-modules-after-kernel" +msgstr "" + +#: grub-core/net/dns.c:712 +msgid "--only-ipv4" +msgstr "" + +#: grub-core/net/dns.c:714 +msgid "--only-ipv6" +msgstr "" + +#: grub-core/net/dns.c:716 +msgid "--prefer-ipv4" +msgstr "" + +#: grub-core/net/dns.c:718 +msgid "--prefer-ipv6" +msgstr "" + +#: grub-core/normal/main.c:538 +msgid "feature_timeout_style" +msgstr "" + +#: grub-core/normal/main.c:587 +msgid "light-gray/black" +msgstr "" + +#: grub-core/normal/main.c:588 +msgid "black/light-gray" +msgstr "" + +#: grub-core/normal/menu.c:53 +msgid "menu" +msgstr "" + +#: grub-core/normal/menu.c:54 +msgid "countdown" +msgstr "" + +#: grub-core/osdep/aros/config.c:39 grub-core/osdep/unix/config.c:39 +#: util/grub-install.c:739 util/grub-install.c:1395 util/grub-install.c:1540 +#: util/grub-mkrescue.c:388 util/grub-mkstandalone.c:235 +#: util/grub-mkstandalone.c:236 util/grub-mkstandalone.c:265 +#: util/grub-mkstandalone.c:266 util/grub-mkstandalone.c:311 +msgid "grub" +msgstr "" + +#: grub-core/osdep/aros/config.c:46 grub-core/osdep/unix/config.c:46 +msgid "pkgdatadir" +msgstr "" + +#: grub-core/osdep/aros/config.c:73 grub-core/osdep/unix/config.c:77 +#: grub-core/osdep/windows/config.c:40 +msgid "GRUB_ENABLE_CRYPTODISK" +msgstr "" + +#: grub-core/osdep/aros/config.c:77 grub-core/osdep/unix/config.c:81 +#: grub-core/osdep/windows/config.c:44 +msgid "GRUB_DISTRIBUTOR" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:109 grub-core/osdep/linux/hostdisk.c:127 +msgid "udevadm" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:110 +msgid "info" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:111 +msgid "--query" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:113 +msgid "--name" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:139 +#, c-format +msgid "/sys%s/%s" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:105 +msgid "/obppath" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:117 +#, c-format +msgid "%s/obppath" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:125 +#, c-format +msgid "%s/devspec" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:132 +msgid "/sys" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:182 grub-core/osdep/linux/ofpath.c:185 +msgid "/sys/block/" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:189 grub-core/osdep/linux/ofpath.c:191 +msgid "/device" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:237 +#, c-format +msgid "/disk@%d" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:244 +#, c-format +msgid "/disk@%d:%c" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:277 +#, c-format +msgid "vdc-port-%d-%d" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:295 +#, c-format +msgid "%d.%d" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:311 +msgid "/vendor" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:315 +#, c-format +msgid "%s/vendor" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:334 grub-core/osdep/linux/ofpath.c:345 +msgid "end_device" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:353 grub-core/osdep/linux/ofpath.c:355 +#, c-format +msgid "%s/sas_device/%s/phy_identifier" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:368 +#, c-format +msgid "%s/sas_device/%s/sas_address" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:376 +#, c-format +msgid "%lx" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:391 grub-core/osdep/linux/ofpath.c:412 +msgid "/fp@0,0" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:396 +#, c-format +msgid "%d:%d:%d:%d" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:411 +msgid "qlc" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:414 +msgid "sbus" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:420 +msgid "/vdevice/" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:425 +#, c-format +msgid "/%s@%04lx000000000000" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:433 +#, c-format +msgid "/%s@%04lx000000000000:%c" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:445 +#, c-format +msgid "/sas/%s@%x" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:453 +#, c-format +msgid "/sas/%s@%x:%c" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:468 +#, c-format +msgid "%02x%02x%02x%02x00000000" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:473 +#, c-format +msgid "/sas/%s@%lx,%lu" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:481 +#, c-format +msgid "/sas/%s@%lx,%lu:%c" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:529 +msgid "floppy" +msgstr "" + +#: grub-core/osdep/linux/platform.c:60 util/grub-install-common.c:650 +#: util/grub-install-common.c:652 +msgid "x86_64" +msgstr "" + +#: grub-core/osdep/linux/platform.c:73 grub-core/osdep/unix/platform.c:151 +msgid "modprobe" +msgstr "" + +#: grub-core/osdep/linux/platform.c:73 grub-core/osdep/unix/platform.c:151 +msgid "efivars" +msgstr "" + +#: grub-core/osdep/linux/platform.c:74 grub-core/osdep/unix/exec.c:153 +msgid "/dev/null" +msgstr "" + +#: grub-core/osdep/linux/platform.c:77 +msgid "/sys/firmware/efi" +msgstr "" + +#: grub-core/osdep/linux/platform.c:87 +msgid "/proc/device-tree" +msgstr "" + +#: grub-core/osdep/unix/compress.c:25 +msgid "gzip" +msgstr "" + +#: grub-core/osdep/unix/compress.c:25 +msgid "--best" +msgstr "" + +#: grub-core/osdep/unix/compress.c:26 grub-core/osdep/unix/compress.c:33 +msgid "--stdout" +msgstr "" + +#: grub-core/osdep/unix/compress.c:33 +msgid "--lzma2=dict=128KiB" +msgstr "" + +#: grub-core/osdep/unix/compress.c:33 +msgid "--check=none" +msgstr "" + +#: grub-core/osdep/unix/compress.c:39 +msgid "lzop" +msgstr "" + +#: grub-core/osdep/unix/compress.c:39 +msgid "-9" +msgstr "" + +#: grub-core/osdep/unix/compress.c:39 grub-core/osdep/unix/config.c:90 +#: grub-core/osdep/unix/platform.c:160 grub-core/osdep/unix/platform.c:166 +msgid "-c" +msgstr "" + +#: grub-core/osdep/unix/config.c:89 +msgid "sh" +msgstr "" + +#: grub-core/osdep/unix/config.c:95 +msgid ". '" +msgstr "" + +#: grub-core/osdep/unix/exec.c:126 grub-core/osdep/unix/exec.c:184 +#: grub-core/osdep/unix/exec.c:229 +msgid "LC_ALL" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:296 grub-core/osdep/unix/hostdisk.c:314 +msgid "TMPDIR" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:300 grub-core/osdep/unix/hostdisk.c:318 +msgid "/tmp" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:302 grub-core/osdep/unix/hostdisk.c:304 +#: grub-core/osdep/unix/hostdisk.c:305 grub-core/osdep/unix/hostdisk.c:320 +#: grub-core/osdep/unix/hostdisk.c:322 grub-core/osdep/unix/hostdisk.c:323 +msgid "/grub.XXXXXX" +msgstr "" + +#: grub-core/osdep/unix/platform.c:41 grub-core/osdep/unix/platform.c:179 +#: grub-core/osdep/unix/platform.c:183 +msgid "ofpathname" +msgstr "" + +#: grub-core/osdep/unix/platform.c:85 grub-core/osdep/unix/platform.c:92 +#: grub-core/osdep/unix/platform.c:100 grub-core/osdep/unix/platform.c:122 +#: grub-core/osdep/unix/platform.c:125 grub-core/osdep/unix/platform.c:142 +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:159 +#: grub-core/osdep/unix/platform.c:165 +msgid "efibootmgr" +msgstr "" + +#: grub-core/osdep/unix/platform.c:113 grub-core/osdep/unix/platform.c:114 +#: grub-core/osdep/unix/platform.c:115 grub-core/osdep/unix/platform.c:119 +msgid "Boot" +msgstr "" + +#: grub-core/osdep/unix/platform.c:122 grub-core/osdep/unix/platform.c:151 +#: grub-core/osdep/unix/platform.c:159 +msgid "-q" +msgstr "" + +#: grub-core/osdep/unix/platform.c:123 grub-core/osdep/unix/platform.c:126 +#: util/grub-mkrescue.c:483 +msgid "-b" +msgstr "" + +#: grub-core/osdep/unix/platform.c:123 grub-core/osdep/unix/platform.c:126 +#: util/grub-mkrescue.c:744 +msgid "-B" +msgstr "" + +#: grub-core/osdep/unix/platform.c:161 grub-core/osdep/unix/platform.c:167 +msgid "-p" +msgstr "" + +#: grub-core/osdep/unix/platform.c:161 grub-core/osdep/unix/platform.c:167 +msgid "-w" +msgstr "" + +#: grub-core/osdep/unix/platform.c:162 grub-core/osdep/unix/platform.c:168 +#: util/grub-mkrescue.c:669 +msgid "-L" +msgstr "" + +#: grub-core/osdep/unix/platform.c:195 grub-core/osdep/unix/platform.c:199 +msgid "XXXXXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/osdep/unix/platform.c:215 +msgid "nvsetenv" +msgstr "" + +#: grub-core/osdep/unix/platform.c:215 +msgid "boot-device" +msgstr "" + +#: grub-core/osdep/unix/platform.c:218 +#, c-format +msgid "setenv boot-device %s" +msgstr "" + +#: grub-core/osdep/unix/platform.c:231 +msgid "dvhtool" +msgstr "" + +#: grub-core/osdep/unix/platform.c:232 +msgid "--unix-to-vh" +msgstr "" + +#: grub-core/osdep/unix/relpath.c:109 +#, c-format +msgid "/%s/@" +msgstr "" + +#: grub-core/osdep/unix/relpath.c:141 +#, c-format +msgid "/%s/@%s" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:494 +#: grub-core/osdep/windows/hostdisk.c:495 +msgid "\\GRUB." +msgstr "" + +#: grub-core/osdep/windows/init.c:50 +msgid "GetCurrentConsoleFont" +msgstr "" + +#: grub-core/osdep/windows/init.c:71 grub-core/osdep/windows/platform.c:73 +msgid "kernel32.dll" +msgstr "" + +#: grub-core/osdep/windows/init.c:81 +msgid "SetCurrentConsoleFontEx" +msgstr "" + +#: grub-core/osdep/windows/init.c:93 grub-core/osdep/windows/init.c:94 +msgid "Lucida Console" +msgstr "" + +#: grub-core/osdep/windows/init.c:105 +msgid "SetConsoleFont" +msgstr "" + +#: grub-core/osdep/windows/init.c:123 util/grub-mknetdir.c:139 +msgid "grub.cfg" +msgstr "" + +#: grub-core/osdep/windows/init.c:181 util/grub-install-common.c:702 +msgid "locale" +msgstr "" + +#: grub-core/osdep/windows/platform.c:28 +msgid "{8be4df61-93ca-11d2-aa0d-00e098032b8c}" +msgstr "" + +#: grub-core/osdep/windows/platform.c:81 +msgid "GetFirmwareEnvironmentVariableW" +msgstr "" + +#: grub-core/osdep/windows/platform.c:83 +msgid "SetFirmwareEnvironmentVariableW" +msgstr "" + +#: grub-core/osdep/windows/platform.c:85 +msgid "GetNativeSystemInfo" +msgstr "" + +#: grub-core/osdep/windows/platform.c:101 +#: grub-core/osdep/windows/platform.c:238 +#: grub-core/osdep/windows/platform.c:409 +msgid "BootOrder" +msgstr "" + +#: grub-core/osdep/windows/platform.c:185 +#: grub-core/osdep/windows/platform.c:196 +msgid "Boot0000" +msgstr "" + +#: include/grub/i386/cpuid.h:42 include/grub/i386/cpuid.h:65 +msgid "%rcx" +msgstr "" + +#: include/grub/osdep/hostfile_aros.h:110 +msgid "SYS:" +msgstr "" + +#: include/grub/util/install.h:32 +msgid "install-modules" +msgstr "" + +#: include/grub/util/install.h:35 util/grub-install-common.c:64 +#: util/grub-install-common.c:812 util/grub-install-common.c:823 +msgid "themes" +msgstr "" + +#: include/grub/util/install.h:37 util/grub-install-common.c:703 +msgid "fonts" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "locales" +msgstr "" + +#: include/grub/util/install.h:41 +msgid "compress" +msgstr "" + +#: include/grub/util/install.h:42 +msgid "no,xz,gz,lzo" +msgstr "" + +#: include/grub/util/install.h:44 +msgid "core-compress" +msgstr "" + +#: include/grub/util/install.h:50 +msgid "override-directory" +msgstr "" + +#: include/grub/util/install.h:53 +msgid "locale-directory" +msgstr "" + +#: include/grub/util/install.h:56 +msgid "themes-directory" +msgstr "" + +#: include/grub/util/install.h:59 +msgid "grub-mkimage" +msgstr "" + +#: util/config.c:35 util/config.c:36 util/config.c:38 +msgid "GRUB_ENABLE_CRYPTODISK=" +msgstr "" + +#: util/config.c:45 util/config.c:46 util/config.c:51 +msgid "GRUB_DISTRIBUTOR=" +msgstr "" + +#: util/grub-install-common.c:55 util/grub-install-common.c:804 +msgid "starfield" +msgstr "" + +#: util/grub-install-common.c:57 util/grub-install-common.c:840 +msgid "unicode" +msgstr "" + +#: util/grub-install-common.c:193 +msgid ".lst" +msgstr "" + +#: util/grub-install-common.c:194 util/grub-mknetdir.c:97 +msgid ".img" +msgstr "" + +#: util/grub-install-common.c:195 util/grub-install-common.c:617 +#: util/grub-install-common.c:623 util/grub-install-common.c:628 +#: util/grub-install-common.c:629 util/grub-install-common.c:758 +#: util/grub-install-common.c:771 util/grub-install-common.c:774 +#: util/grub-install-common.c:787 +msgid ".mo" +msgstr "" + +#: util/grub-install-common.c:196 +msgid "menu.lst" +msgstr "" + +#: util/grub-install-common.c:370 +msgid "gz" +msgstr "" + +#: util/grub-install-common.c:380 +msgid "lzo" +msgstr "" + +#: util/grub-install-common.c:404 util/grub-install-common.c:411 +msgid "gcry_crc" +msgstr "" + +#: util/grub-install-common.c:430 +msgid "lzma" +msgstr "" + +#: util/grub-install-common.c:453 +msgid "--memdisk '" +msgstr "" + +#: util/grub-install-common.c:460 +msgid "--config '" +msgstr "" + +#: util/grub-install-common.c:467 +msgid "--pubkey '" +msgstr "" + +#: util/grub-install-common.c:488 +msgid "--note" +msgstr "" + +#: util/grub-install-common.c:618 +msgid ".gmo" +msgstr "" + +#: util/grub-install-common.c:628 util/grub-install-common.c:785 +msgid "LC_MESSAGES" +msgstr "" + +#: util/grub-install-common.c:644 util/grub-install-common.c:645 +#: util/grub-install-common.c:646 util/grub-install-common.c:647 +#: util/grub-install-common.c:648 util/grub-install-common.c:649 +#: util/grub-install-common.c:651 +msgid "i386" +msgstr "" + +#: util/grub-install-common.c:646 +msgid "qemu" +msgstr "" + +#: util/grub-install-common.c:647 +msgid "coreboot" +msgstr "" + +#: util/grub-install-common.c:653 util/grub-install-common.c:654 +#: util/grub-install-common.c:656 +msgid "mipsel" +msgstr "" + +#: util/grub-install-common.c:653 +msgid "loongson" +msgstr "" + +#: util/grub-install-common.c:654 util/grub-install-common.c:655 +msgid "qemu_mips" +msgstr "" + +#: util/grub-install-common.c:655 util/grub-install-common.c:657 +msgid "mips" +msgstr "" + +#: util/grub-install-common.c:658 +msgid "sparc64" +msgstr "" + +#: util/grub-install-common.c:659 +msgid "powerpc" +msgstr "" + +#: util/grub-install-common.c:660 +msgid "ia64" +msgstr "" + +#: util/grub-install-common.c:661 util/grub-install-common.c:663 +msgid "arm" +msgstr "" + +#: util/grub-install-common.c:662 +msgid "arm64" +msgstr "" + +#: util/grub-install-common.c:663 +msgid "uboot" +msgstr "" + +#: util/grub-install-common.c:669 util/grub-install-common.c:697 +#: util/grub-install.c:1317 util/grub-install.c:1339 util/grub-install.c:1351 +#, c-format +msgid "%s-%s" +msgstr "" + +#: util/grub-install-common.c:736 +msgid "command.lst" +msgstr "" + +#: util/grub-install-common.c:737 +msgid "fs.lst" +msgstr "" + +#: util/grub-install-common.c:737 util/grub-mkrescue.c:224 +msgid "partmap.lst" +msgstr "" + +#: util/grub-install-common.c:738 +msgid "parttool.lst" +msgstr "" + +#: util/grub-install-common.c:739 +msgid "video.lst" +msgstr "" + +#: util/grub-install-common.c:739 +msgid "crypto.lst" +msgstr "" + +#: util/grub-install-common.c:740 +msgid "terminal.lst" +msgstr "" + +#: util/grub-install-common.c:757 util/grub-install-common.c:769 +msgid "po" +msgstr "" + +#: util/grub-install-common.c:818 +msgid "theme.txt" +msgstr "" + +#: util/grub-install-common.c:874 +msgid "modinfo.sh" +msgstr "" + +#: util/grub-install-common.c:882 util/grub-install-common.c:888 +msgid "grub_modinfo_target_cpu=" +msgstr "" + +#: util/grub-install-common.c:885 util/grub-install-common.c:889 +msgid "grub_modinfo_platform=" +msgstr "" + +#: util/grub-install.c:118 +msgid "setup" +msgstr "" + +#: util/grub-install.c:212 +msgid "boot-directory" +msgstr "" + +#: util/grub-install.c:214 +msgid "root-directory" +msgstr "" + +#: util/grub-install.c:221 +msgid "grub-setup" +msgstr "" + +#: util/grub-install.c:222 +msgid "grub-mkrelpath" +msgstr "" + +#: util/grub-install.c:223 +msgid "grub-mkdevicemap" +msgstr "" + +#: util/grub-install.c:224 +msgid "grub-probe" +msgstr "" + +#: util/grub-install.c:225 +msgid "grub-editenv" +msgstr "" + +#: util/grub-install.c:231 +msgid "recheck" +msgstr "" + +#: util/grub-install.c:235 +msgid "force-file-id" +msgstr "" + +#: util/grub-install.c:237 +msgid "disk-module" +msgstr "" + +#: util/grub-install.c:240 +msgid "no-nvram" +msgstr "" + +#: util/grub-install.c:245 +msgid "no-bootsector" +msgstr "" + +#: util/grub-install.c:247 util/grub-setup.c:91 +msgid "no-rs-codes" +msgstr "" + +#: util/grub-install.c:253 util/grub-mknetdir.c:46 +msgid "debug-image" +msgstr "" + +#: util/grub-install.c:254 +msgid "removable" +msgstr "" + +#: util/grub-install.c:257 +msgid "bootloader-id" +msgstr "" + +#: util/grub-install.c:259 +msgid "efi-directory" +msgstr "" + +#: util/grub-install.c:280 util/mkimage.c:586 util/mkimage.c:587 +msgid "arm64-efi" +msgstr "" + +#: util/grub-install.c:341 +msgid "part_bsd" +msgstr "" + +#: util/grub-install.c:345 +#, c-format +msgid "part_%s" +msgstr "" + +#: util/grub-install.c:471 +#, c-format +msgid "cryptomount -u %s\n" +msgstr "" + +#: util/grub-install.c:788 util/grub-install.c:1067 +msgid "native" +msgstr "" + +#: util/grub-install.c:842 +msgid "device.map" +msgstr "" + +#: util/grub-install.c:885 util/grub-install.c:998 +msgid "EFI" +msgstr "" + +#: util/grub-install.c:948 +msgid "BOOT" +msgstr "" + +#: util/grub-install.c:952 +msgid "BOOTIA32.EFI" +msgstr "" + +#: util/grub-install.c:955 +msgid "BOOTX64.EFI" +msgstr "" + +#: util/grub-install.c:958 +msgid "BOOTIA64.EFI" +msgstr "" + +#: util/grub-install.c:961 +msgid "BOOTARM.EFI" +msgstr "" + +#: util/grub-install.c:964 +msgid "BOOTAARCH64.EFI" +msgstr "" + +#: util/grub-install.c:979 +msgid "grubia32.efi" +msgstr "" + +#: util/grub-install.c:982 +msgid "grubx64.efi" +msgstr "" + +#: util/grub-install.c:985 +msgid "grubia64.efi" +msgstr "" + +#: util/grub-install.c:988 +msgid "grubarm.efi" +msgstr "" + +#: util/grub-install.c:991 +msgid "grubarm64.efi" +msgstr "" + +#: util/grub-install.c:994 util/grub-install.c:1404 util/grub-install.c:1545 +msgid "grub.efi" +msgstr "" + +#: util/grub-install.c:1062 +msgid "GRUB_ENABLE_CRYPTODISK=1" +msgstr "" + +#: util/grub-install.c:1097 util/grub-mknetdir.c:111 +msgid "load.cfg" +msgstr "" + +#: util/grub-install.c:1105 util/grub-mknetdir.c:126 +#, c-format +msgid "set debug='%s'\n" +msgstr "" + +#: util/grub-install.c:1155 +#, c-format +msgid "search.fs_uuid %s root " +msgstr "" + +#: util/grub-install.c:1157 +msgid "search_fs_uuid" +msgstr "" + +#: util/grub-install.c:1174 +#, c-format +msgid "search.file %s root " +msgstr "" + +#: util/grub-install.c:1176 +msgid "search_fs_file" +msgstr "" + +#: util/grub-install.c:1232 +#, c-format +msgid "ieee1275/%s" +msgstr "" + +#: util/grub-install.c:1315 +msgid "core.efi" +msgstr "" + +#: util/grub-install.c:1324 util/grub-install.c:1337 +msgid "core.elf" +msgstr "" + +#: util/grub-install.c:1326 +#, c-format +msgid "%s-%s-elf" +msgstr "" + +#: util/grub-install.c:1386 +msgid "grub.elf" +msgstr "" + +#: util/grub-install.c:1449 util/grub-install.c:1476 +msgid "--allow-floppy " +msgstr "" + +#: util/grub-install.c:1450 util/grub-install.c:1477 +msgid "--verbose " +msgstr "" + +#: util/grub-install.c:1451 util/grub-install.c:1478 +msgid "--force " +msgstr "" + +#: util/grub-install.c:1452 util/grub-install.c:1479 +msgid "--skip-fs-probe" +msgstr "" + +#: util/grub-install.c:1453 +msgid "--no-rs-codes" +msgstr "" + +#: util/grub-install.c:1510 +#, c-format +msgid "dd if=/dev/zero of=%s" +msgstr "" + +#: util/grub-install.c:1568 +#, c-format +msgid "\\EFI\\%s\\%s" +msgstr "" + +#: util/grub-mkimagexx.c:95 util/grub-mkimagexx.c:352 +#: util/grub-mkimagexx.c:354 +msgid ".xen" +msgstr "" + +#: util/grub-mkimagexx.c:218 util/grub-mkimagexx.c:223 +#: util/grub-mkimagexx.c:224 +msgid "xen-3.0" +msgstr "" + +#: util/grub-mknetdir.c:41 +msgid "net-directory" +msgstr "" + +#: util/grub-mknetdir.c:43 +msgid "subdir" +msgstr "" + +#: util/grub-mknetdir.c:96 +msgid ".0" +msgstr "" + +#: util/grub-mknetdir.c:98 util/grub-mknetdir.c:99 +msgid ".elf" +msgstr "" + +#: util/grub-mknetdir.c:100 util/grub-mknetdir.c:101 util/grub-mknetdir.c:102 +#: util/grub-mknetdir.c:103 +msgid ".efi" +msgstr "" + +#: util/grub-mkrescue.c:259 +#, c-format +msgid "set prefix=(${root})/boot/grub\n" +msgstr "" + +#: util/grub-mkrescue.c:258 +#, c-format +msgid "search --fs-uuid --set=root %s\n" +msgstr "" + +#: util/grub-mkrescue.c:575 +#, c-format +msgid "\n" + "\n" + " ProductBuildVersion\n" + " \n" + " ProductName\n" + " %s\n" + " ProductVersion\n" + " %s\n" + "\n" + "\n" +msgstr "" + + +#: util/grub-install.c:1264 +#, c-format +msgid "set prefix=($root)'%s'\n" +msgstr "" + +#: grub-core/osdep/unix/config.c:108 +#, c-format +msgid "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\n\", " + "\"$GRUB_ENABLE_CRYPTODISK\", \"$GRUB_DISTRIBUTOR\"" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "upcase" +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "downcase" +msgstr "" + +#: grub-core/commands/tr.c:38 +msgid "abcdefghijklmnopqrstuvwxyz" +msgstr "" + +#: grub-core/commands/tr.c:39 +msgid "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +msgstr "" + +#: grub-core/net/dns.c:694 +#, c-format +msgid "%s (%s)\n" +msgstr "" + +#: grub-core/osdep/aros/hostdisk.c:570 +#, c-format +msgid "T:grub.%d.%d.%d.%d" +msgstr "" + +#: util/grub-install.c:1722 +msgid "\\\\BootX" +msgstr "" + +#: util/grub-install.c:1816 +msgid "\\System\\Library\\CoreServices" +msgstr "" + +#: util/grub-install.c:1702 util/grub-install.c:1802 +msgid "r+" +msgstr "" + +#: util/grub-install.c:1128 +msgid "macppc" +msgstr "" + +#: util/grub-install.c:296 +msgid "macppc-directory" +msgstr "" +#: grub-core/term/xen/xen_kbd.c:468 grub-core/term/xen/xen_kbd.c:477 +msgid "xen_keyboard" +msgstr "" + +#: grub-core/video/xen/xenfb.c:79 +#, c-format +msgid "device/vfb/%s/backend" +msgstr "" + +#: grub-core/video/xen/xenfb.c:87 +#, c-format +msgid "device/vfb/%s/backend-id" +msgstr "" + +#: grub-core/video/xen/xenfb.c:102 +#, c-format +msgid "device/vfb/%s/page-ref" +msgstr "" + +#: grub-core/video/xen/xenfb.c:108 +#, c-format +msgid "device/vfb/%s/protocol" +msgstr "" + +#: grub-core/video/xen/xenfb.c:120 +#, c-format +msgid "device/vfb/%s/event-channel" +msgstr "" + +#: grub-core/video/xen/xenfb.c:131 +#, c-format +msgid "device/vfb/%s" +msgstr "" + +#: grub-core/video/xen/xenfb.c:172 +#, c-format +msgid "device/vfb/%s/state" +msgstr "" + +#: grub-core/video/xen/xenfb.c:270 +msgid "device/vfb" +msgstr "" + +#: include/grub/emu/misc.h:46 +msgid "I64u" +msgstr "" + +#: include/grub/emu/misc.h:47 +msgid "I64x" +msgstr "" +#: grub-core/term/xen/xen_kbd.c:143 +#, c-format +msgid "device/vkbd/%s/backend" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:151 +#, c-format +msgid "device/vkbd/%s/backend-id" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:166 +#, c-format +msgid "device/vkbd/%s/page-ref" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:172 +#, c-format +msgid "device/vkbd/%s/protocol" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:184 +#, c-format +msgid "device/vkbd/%s/event-channel" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:195 +#, c-format +msgid "device/vkbd/%s" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:204 +#, c-format +msgid "device/vkbd/%s/state" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:267 grub-core/video/xen/xenfb.c:239 +#, c-format +msgid "%s/page-ref" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:291 +msgid "device/vkbd" +msgstr "" + +#: grub-core/commands/fileXX.c:51 grub-core/commands/fileXX.c:62 +#: grub-core/commands/fileXX.c:63 +msgid ".note.netbsd.ident" +msgstr "" + +#: grub-core/commands/legacycfg.c:484 +msgid "initrd16initrd" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:146 +msgid "extract_syslinux_entries_" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:147 +msgid "syslinux_" +msgstr "" +#: grub-core/commands/file.c:41 +msgid "is-x86_64-xen-domu" +msgstr "" + +#: grub-core/commands/file.c:69 +msgid "is-x86_64-kfreebsd" +msgstr "" + +#: grub-core/commands/file.c:76 +msgid "is-x86_64-knetbsd" +msgstr "" + +#: grub-core/commands/file.c:81 +msgid "is-x86_64-efi" +msgstr "" + +#: grub-core/commands/file.c:89 +msgid "is-x86_64-xnu" +msgstr "" + +#: grub-core/commands/file.c:506 +msgid "hibr" +msgstr "" + +#: grub-core/commands/file.c:508 +msgid "HIBR" +msgstr "" + +#: grub-core/disk/diskfilter.c:1060 +msgid ",%" +msgstr "" + +#: grub-core/disk/diskfilter.c:1061 +#, c-format +msgid ") into %s (%s)\n" +msgstr "" + +#: grub-core/osdep/windows/blocklist.c:88 +msgid ", first_lcn=%" +msgstr "" + +#: util/grub-mkimagexx.c:438 +msgid " (0x%" +msgstr "" + +#: util/grub-mkimagexx.c:666 util/grub-mkimagexx.c:679 +#: util/grub-mkimagexx.c:702 util/grub-mkimagexx.c:728 +#: util/grub-mkimagexx.c:812 +msgid " at the offset 0x%" +msgstr "" + +#: util/misc.c:149 +msgid " bytes at offset 0x%" +msgstr "" + +#: grub-core/term/serial.c:64 +msgid "on|off" +msgstr "" + +#: util/grub-mkimagexx.c:898 +msgid "jump24 relocation out of range" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:48 +#, c-format +msgid "ofpath: error: " +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:61 +#, c-format +msgid "ofpath: info: " +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:119 +#, c-format +msgid "Trying %s\n" +msgstr "" + +#: grub-core/osdep/windows/blocklist.c:108 +#, c-format +msgid "FSCTL_GET_RETRIEVAL_POINTERS fails: %s" +msgstr "" + +#: grub-core/osdep/windows/blocklist.c:84 +#, c-format +msgid "unsupported fs for blocklist on windows: %s" +msgstr "" + +#: include/grub/util/install.h:45 util/grub-mkstandalone.c:45 +msgid "xz|none|auto" +msgstr "" + +#: util/grub-mkimagexx.c:845 +msgid "CALL26 Relocation out of range" msgstr "" diff --git a/tests/gettext_strings_test.in b/tests/gettext_strings_test.in index ba3f31f1b..5c305e75b 100644 --- a/tests/gettext_strings_test.in +++ b/tests/gettext_strings_test.in @@ -11,7 +11,7 @@ xgettext -f po/POTFILES.in -L C -o "$tdir/"skip3.pot -x po/grub.pot --keyword=vo cat po/POTFILES.in | xargs grep -hE -o "( | ){\"[a-z0-9\-]*\",[[:space:]]*('.'|[0-9]|-[0-9])," |sed "s,[[:space:]]*{\",,g;s,\"\,[[:space:]]*\('.'\|[0-9]\|-[0-9]\)\,,,g" | awk '{ print "msgid \"" $0 "\"\nmsgstr \"\"" ; }' > "$tdir/"opts.pot cat po/POTFILES.in | xargs grep -hE -o "[[:space:]]*\.name[[:space:]]*=[[:space:]]*\"[a-zA-Z0-9 ()]*\"" |sed "s,[[:space:]]*\.name[[:space:]]*=[[:space:]]*\",,g;s,\",,g" | awk '{ print "msgid \"" $0 "\"\nmsgstr \"\"" ; }' > "$tdir/"name.pot -out="$(cat po/POTFILES.in | grep -v '\(colors.c\|lsefisystab.c\|lsefimmap.c\|lssal.c\|hdparm.c\|sendkey.c\|lsacpi.c\|lspci.c\|usbtest.c\|legacy_parse.c\|/libgcrypt/\|hfs.c\|/efi\.c$\|gnulib\|tests/\|util/ieee1275/ofpath.c\|minilzo.c\|terminfo.c\|setpci.c\|bin2h.c\|cb_timestamps.c\|grub-pe2elf.c\|getroot_[a-z]*.c\|getroot.c\|arc/init.c\|color.c\|grub-mklayout.c\|gentrigtables.c\|lzodefs.h\|lsefi.c\|cbls.c\|/zfs\.h$\|grub-macho2img.c\|lvm.c\|efidisk.c\|grub-mkfont.c\|reiserfs.c\|LzmaEnc.c\)' | xgettext -f - -L C -o - -x po/grub.pot -x "$tdir/"skip.pot -x "$tdir/"skip2.pot -x "$tdir/"skip3.pot -x "$tdir/"opts.pot -x "$tdir/"name.pot -x po/exclude.pot -a --from-code=iso-8859-1)" +out="$(cat po/POTFILES.in | grep -v '\(colors.c\|lsefisystab.c\|lsefimmap.c\|lssal.c\|hdparm.c\|sendkey.c\|lsacpi.c\|lspci.c\|usbtest.c\|legacy_parse.c\|/libgcrypt/\|hfs.c\|/efi\.c$\|gnulib\|tests/\|util/ieee1275/ofpath.c\|minilzo.c\|terminfo.c\|setpci.c\|bin2h.c\|cb_timestamps.c\|grub-pe2elf.c\|getroot_[a-z]*.c\|getroot.c\|arc/init.c\|color.c\|grub-mklayout.c\|gentrigtables.c\|lzodefs.h\|lsefi.c\|cbls.c\|/zfs\.h$\|grub-macho2img.c\|syslinux_parse.c\|lvm.c\|efidisk.c\|grub-mkfont.c\|reiserfs.c\|LzmaEnc.c\)' | xgettext -f - -L C -o - -x po/grub.pot -x "$tdir/"skip.pot -x "$tdir/"skip2.pot -x "$tdir/"skip3.pot -x "$tdir/"opts.pot -x "$tdir/"name.pot -x po/exclude.pot -a --from-code=iso-8859-1)" rm -rf "$tdir" if [ x"$out" != x ]; then echo "$out" diff --git a/util/config.c b/util/config.c index e7474c6d1..ebcdd8f5e 100644 --- a/util/config.c +++ b/util/config.c @@ -52,8 +52,14 @@ grub_util_parse_config (FILE *f, struct grub_util_config *cfg, int simple) if (simple) { + char *ptr2; free (cfg->grub_distributor); cfg->grub_distributor = xstrdup (ptr); + for (ptr2 = cfg->grub_distributor + + grub_strlen (cfg->grub_distributor) - 1; + ptr2 >= cfg->grub_distributor + && (*ptr2 == '\r' || *ptr2 == '\n'); ptr2--); + ptr2[1] = '\0'; continue; } free (cfg->grub_distributor); diff --git a/util/getroot.c b/util/getroot.c index 7f6c94add..2114d52de 100644 --- a/util/getroot.c +++ b/util/getroot.c @@ -232,8 +232,8 @@ find_partition (grub_disk_t dsk __attribute__ ((unused)), { struct grub_util_biosdisk_get_grub_dev_ctx *ctx = data; grub_disk_addr_t part_start = 0; - grub_util_info ("Partition %d starts from %" PRIuGRUB_UINT64_T, - partition->number, partition->start); + grub_util_info ("Partition %d starts from %" GRUB_HOST_PRIuLONG_LONG, + partition->number, (unsigned long long) partition->start); part_start = grub_partition_get_start (partition); @@ -388,7 +388,8 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev) } #endif - grub_util_info ("%s starts from %" PRIuGRUB_UINT64_T, os_dev, ctx.start); + grub_util_info ("%s starts from %" GRUB_HOST_PRIuLONG_LONG, + os_dev, (unsigned long long) ctx.start); if (ctx.start == 0 && !is_part) return name; diff --git a/util/grub-file.c b/util/grub-file.c new file mode 100644 index 000000000..7b7290133 --- /dev/null +++ b/util/grub-file.c @@ -0,0 +1,107 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include +#include + +#include "progname.h" + +void grub_file_init (void); +void grub_host_init (void); +void grub_hostfs_init (void); + +int +main (int argc, char *argv[]) +{ + char **argv2; + int i; + int had_file = 0, had_separator = 0; + grub_command_t cmd; + grub_err_t err; + + grub_util_host_init (&argc, &argv); + + argv2 = xmalloc (argc * sizeof (argv2[0])); + + if (argc == 2 && strcmp (argv[1], "--version") == 0) + { + printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); + } + + for (i = 1; i < argc; i++) + { + if (argv[i][0] == '-' && argv[i][1] == '-' + && argv[i][2] == '\0' && !had_separator) + { + had_separator = 1; + argv2[i - 1] = xstrdup (argv[i]); + continue; + } + if (argv[i][0] == '-' && !had_separator) + { + argv2[i - 1] = xstrdup (argv[i]); + continue; + } + if (had_file) + grub_util_error ("one argument expected"); + argv2[i - 1] = canonicalize_file_name (argv[i]); + if (!argv2[i - 1]) + { + grub_util_error (_("cannot open `%s': %s"), argv[i], + strerror (errno)); + } + had_file = 1; + } + argv2[i - 1] = NULL; + + /* Initialize all modules. */ + grub_init_all (); + grub_file_init (); + grub_hostfs_init (); + grub_host_init (); + + grub_env_set ("root", "host"); + + cmd = grub_command_find ("file"); + if (! cmd) + grub_util_error (_("can't find command `%s'"), "file"); + + err = (cmd->func) (cmd, argc - 1, argv2); + if (err && err != GRUB_ERR_TEST_FAILURE) + grub_print_error (); + return err; +} diff --git a/util/grub-fstest.c b/util/grub-fstest.c index ee5880c50..4ff723c51 100644 --- a/util/grub-fstest.c +++ b/util/grub-fstest.c @@ -86,7 +86,7 @@ read_file (char *pathname, int (*hook) (grub_off_t ofs, char *buf, int len, void if ((! dev) || (! dev->disk)) grub_util_error ("%s", grub_errmsg); - grub_util_info ("total sectors : %lld", + grub_util_info ("total sectors : %" GRUB_HOST_PRIuLONG_LONG, (unsigned long long) dev->disk->total_sectors); if (! leng) @@ -99,8 +99,11 @@ read_file (char *pathname, int (*hook) (grub_off_t ofs, char *buf, int len, void len = (leng > BUF_SIZE) ? BUF_SIZE : leng; if (grub_disk_read (dev->disk, 0, skip, len, buf)) - grub_util_error (_("disk read fails at offset %lld, length %lld"), - (long long) skip, (long long) len); + { + char *msg = grub_xasprintf (_("disk read fails at offset %lld, length %lld"), + (long long) skip, (long long) len); + grub_util_error ("%s", msg); + } if (hook (skip, buf, len, hook_arg)) break; @@ -123,11 +126,14 @@ read_file (char *pathname, int (*hook) (grub_off_t ofs, char *buf, int len, void return; } - grub_util_info ("file size : %lld", (unsigned long long) file->size); + grub_util_info ("file size : %" GRUB_HOST_PRIuLONG_LONG, + (unsigned long long) file->size); if (skip > file->size) { - grub_util_error (_("invalid skip value %lld"), (unsigned long long) skip); + char *msg = grub_xasprintf (_("invalid skip value %lld"), + (unsigned long long) skip); + grub_util_error ("%s", msg); return; } @@ -147,8 +153,9 @@ read_file (char *pathname, int (*hook) (grub_off_t ofs, char *buf, int len, void sz = grub_file_read (file, buf, (len > BUF_SIZE) ? BUF_SIZE : len); if (sz < 0) { - grub_util_error (_("read error at offset %llu: %s"), - (unsigned long long) ofs, grub_errmsg); + char *msg = grub_xasprintf (_("read error at offset %llu: %s"), + (unsigned long long) ofs, grub_errmsg); + grub_util_error ("%s", msg); break; } @@ -232,8 +239,9 @@ cmp_hook (grub_off_t ofs, char *buf, int len, void *ff_in) static char buf_1[BUF_SIZE]; if ((int) fread (buf_1, 1, len, ff) != len) { - grub_util_error (_("read error at offset %llu: %s"), - (unsigned long long) ofs, grub_errmsg); + char *msg = grub_xasprintf (_("read error at offset %llu: %s"), + (unsigned long long) ofs, grub_errmsg); + grub_util_error ("%s", msg); return 1; } @@ -244,8 +252,9 @@ cmp_hook (grub_off_t ofs, char *buf, int len, void *ff_in) for (i = 0; i < len; i++, ofs++) if (buf_1[i] != buf[i]) { - grub_util_error (_("compare fail at offset %llu"), - (unsigned long long) ofs); + char *msg = grub_xasprintf (_("compare fail at offset %llu"), + (unsigned long long) ofs); + grub_util_error ("%s", msg); return 1; } } diff --git a/util/grub-install-common.c b/util/grub-install-common.c index 1cf8d368a..0023e617e 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -114,7 +114,7 @@ grub_install_copy_file (const char *src, grub_util_fd_close (out); if (r < 0) - grub_util_error ("cannot copy `%s' to `%s': %s", + grub_util_error (_("cannot copy `%s' to `%s': %s"), src, dst, grub_util_fd_strerror ()); return 1; @@ -134,11 +134,11 @@ grub_install_compress_file (const char *in_name, grub_util_info ("compressing `%s' -> `%s'", in_name, out_name); ret = !compress_func (in_name, out_name); if (!ret && is_needed) - grub_util_warn ("can't compress `%s' to `%s'", in_name, out_name); + grub_util_warn (_("can't compress `%s' to `%s'"), in_name, out_name); } if (!ret && is_needed) - grub_util_error ("cannot copy `%s' to `%s': %s", + grub_util_error (_("cannot copy `%s' to `%s': %s"), in_name, out_name, grub_util_fd_strerror ()); return ret; @@ -199,7 +199,7 @@ clean_grub_dir (const char *di) { char *x = grub_util_path_concat (2, di, de->d_name); if (grub_util_unlink (x) < 0) - grub_util_error ("cannont delete `%s': %s", x, + grub_util_error (_("cannot delete `%s': %s"), x, grub_util_fd_strerror ()); free (x); } diff --git a/util/grub-install.c b/util/grub-install.c index 0da37e479..9eee73628 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -61,6 +62,7 @@ static int allow_floppy = 0; static int force_file_id = 0; static char *disk_module = NULL; static char *efidir = NULL; +static char *macppcdir = NULL; static int force = 0; static int have_abstractions = 0; static int have_cryptodisk = 0; @@ -69,6 +71,11 @@ static int have_load_cfg = 0; static FILE * load_cfg_f = NULL; static char *load_cfg; static int install_bootsector = 1; +static char *label_font; +static char *label_color; +static char *label_bgcolor; +static char *product_version; +static int add_rs_codes = 1; static int uefi_secure_boot = 1; enum @@ -96,6 +103,12 @@ enum OPTION_NO_FLOPPY, OPTION_DISK_MODULE, OPTION_NO_BOOTSECTOR, + OPTION_NO_RS_CODES, + OPTION_MACPPC_DIRECTORY, + OPTION_LABEL_FONT, + OPTION_LABEL_COLOR, + OPTION_LABEL_BGCOLOR, + OPTION_PRODUCT_VERSION, OPTION_UEFI_SECURE_BOOT, OPTION_NO_UEFI_SECURE_BOOT }; @@ -121,6 +134,25 @@ argp_parser (int key, char *arg, struct argp_state *state) install_bootsector = 0; return 0; + case OPTION_PRODUCT_VERSION: + free (product_version); + product_version = xstrdup (arg); + return 0; + case OPTION_LABEL_FONT: + free (label_font); + label_font = xstrdup (arg); + return 0; + + case OPTION_LABEL_COLOR: + free (label_color); + label_color = xstrdup (arg); + return 0; + + case OPTION_LABEL_BGCOLOR: + free (label_bgcolor); + label_bgcolor = xstrdup (arg); + return 0; + /* Accept and ignore for compatibility. */ case OPTION_FONT: case OPTION_MKRELPATH: @@ -140,6 +172,11 @@ argp_parser (int key, char *arg, struct argp_state *state) bootdir = xstrdup (arg); return 0; + case OPTION_MACPPC_DIRECTORY: + free (macppcdir); + macppcdir = xstrdup (arg); + return 0; + case OPTION_EFI_DIRECTORY: free (efidir); efidir = xstrdup (arg); @@ -184,6 +221,10 @@ argp_parser (int key, char *arg, struct argp_state *state) install_bootsector = 0; return 0; + case OPTION_NO_RS_CODES: + add_rs_codes = 0; + return 0; + case OPTION_DEBUG: verbosity++; return 0; @@ -250,17 +291,26 @@ static struct argp_option options[] = { N_("do not probe for filesystems in DEVICE"), 0}, {"no-bootsector", OPTION_NO_BOOTSECTOR, 0, 0, N_("do not install bootsector"), 0}, + {"no-rs-codes", OPTION_NO_RS_CODES, 0, 0, + N_("Do not apply any reed-solomon codes when embedding core.img. " + "This option is only available on x86 BIOS targets."), 0}, {"debug", OPTION_DEBUG, 0, OPTION_HIDDEN, 0, 2}, {"no-floppy", OPTION_NO_FLOPPY, 0, OPTION_HIDDEN, 0, 2}, - {"debug-image", OPTION_DEBUG_IMAGE, "STR", OPTION_HIDDEN, 0, 2}, + {"debug-image", OPTION_DEBUG_IMAGE, N_("STRING"), OPTION_HIDDEN, 0, 2}, {"removable", OPTION_REMOVABLE, 0, 0, N_("the installation device is removable. " "This option is only available on EFI."), 2}, {"bootloader-id", OPTION_BOOTLOADER_ID, N_("ID"), 0, - N_("the ID of bootloader. This option is only available on EFI."), 2}, + N_("the ID of bootloader. This option is only available on EFI and Macs."), 2}, {"efi-directory", OPTION_EFI_DIRECTORY, N_("DIR"), 0, N_("use DIR as the EFI System Partition root."), 2}, + {"macppc-directory", OPTION_MACPPC_DIRECTORY, N_("DIR"), 0, + N_("use DIR for PPC MAC install."), 2}, + {"label-font", OPTION_LABEL_FONT, N_("FILE"), 0, N_("use FILE as font for label"), 2}, + {"label-color", OPTION_LABEL_COLOR, N_("COLOR"), 0, N_("use COLOR for label"), 2}, + {"label-bgcolor", OPTION_LABEL_BGCOLOR, N_("COLOR"), 0, N_("use COLOR for label background"), 2}, + {"product-version", OPTION_PRODUCT_VERSION, N_("STRING"), 0, N_("use STRING as product version"), 2}, {"uefi-secure-boot", OPTION_UEFI_SECURE_BOOT, 0, 0, N_("install an image usable with UEFI Secure Boot. " "This option is only available on EFI and if the grub-efi-amd64-signed " @@ -616,7 +666,7 @@ device_map_check_duplicates (const char *dev_map) for (i = 0; i + 1 < filled; i++) if (strcmp (d[i], d[i+1]) == 0) { - grub_util_error ("the drive %s is defined multiple times in the device map %s", + grub_util_error (_("the drive %s is defined multiple times in the device map %s"), d[i], dev_map); } @@ -708,6 +758,63 @@ is_prep_empty (grub_device_t dev) return 1; } +static void +bless (grub_device_t dev, const char *path, int x86) +{ + struct stat st; + grub_err_t err; + + grub_util_info ("blessing %s", path); + + if (stat (path, &st) < 0) + grub_util_error (N_("cannot stat `%s': %s"), + path, strerror (errno)); + + err = grub_mac_bless_inode (dev, st.st_ino, S_ISDIR (st.st_mode), x86); + if (err) + grub_util_error ("%s", grub_errmsg); + grub_util_info ("blessed\n"); +} + +static void +fill_core_services (const char *core_services) +{ + char *label; + FILE *f; + char *label_text; + char *label_string = xasprintf ("%s %s", bootloader_id, product_version); + char *sysv_plist; + + label = grub_util_path_concat (2, core_services, ".disk_label"); + grub_util_info ("rendering label %s", label_string); + grub_util_render_label (label_font, label_bgcolor ? : "white", + label_color ? : "black", label_string, label); + grub_util_info ("label rendered"); + free (label); + label_text = grub_util_path_concat (2, core_services, ".disk_label.contentDetails"); + f = grub_util_fopen (label_text, "wb"); + fprintf (f, "%s\n", label_string); + fclose (f); + free (label_string); + free (label_text); + + sysv_plist = grub_util_path_concat (2, core_services, "SystemVersion.plist"); + f = grub_util_fopen (sysv_plist, "wb"); + fprintf (f, + "\n" + "\n" + " ProductBuildVersion\n" + " \n" + " ProductName\n" + " %s\n" + " ProductVersion\n" + " %s\n" + "\n" + "\n", bootloader_id, product_version); + fclose (f); + free (sysv_plist); +} + int main (int argc, char *argv[]) { @@ -726,8 +833,14 @@ main (int argc, char *argv[]) char **efidir_device_names = NULL; grub_device_t efidir_grub_dev = NULL; char *efidir_grub_devname; + int efidir_is_mac = 0; + int is_prep = 0; + const char *pkgdatadir; grub_util_host_init (&argc, &argv); + product_version = xstrdup (PACKAGE_VERSION); + pkgdatadir = grub_util_get_pkgdatadir (); + label_font = grub_util_path_concat (2, pkgdatadir, "unicode.pf2"); argp_parse (&argp, argc, argv, 0, 0, 0); @@ -812,9 +925,12 @@ main (int argc, char *argv[]) if (!install_device) grub_util_error ("%s", _("install device isn't specified")); break; + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + if (install_device) + is_prep = 1; + break; case GRUB_INSTALL_PLATFORM_MIPS_ARC: case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: - case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: break; case GRUB_INSTALL_PLATFORM_I386_EFI: case GRUB_INSTALL_PLATFORM_X86_64_EFI: @@ -862,6 +978,9 @@ main (int argc, char *argv[]) /* Initialize all modules. */ grub_init_all (); grub_gcry_init_all (); + grub_hostfs_init (); + grub_host_init (); + switch (platform) { case GRUB_INSTALL_PLATFORM_I386_EFI: @@ -939,7 +1058,13 @@ main (int argc, char *argv[]) if (! fs) grub_util_error ("%s", grub_errmsg); - if (grub_strcmp (fs->name, "fat") != 0) + efidir_is_mac = 0; + + if (grub_strcmp (fs->name, "hfs") == 0 + || grub_strcmp (fs->name, "hfsplus") == 0) + efidir_is_mac = 1; + + if (!efidir_is_mac && grub_strcmp (fs->name, "fat") != 0) grub_util_error (_("%s doesn't look like an EFI partition.\n"), efidir); /* The EFI specification requires that an EFI System Partition must @@ -1002,6 +1127,76 @@ main (int argc, char *argv[]) grub_install_mkdir_p (efidir); } + if (platform == GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275) + { + int is_guess = 0; + if (!macppcdir) + { + char *d; + + is_guess = 1; + d = grub_util_path_concat (2, bootdir, "macppc"); + if (!grub_util_is_directory (d)) + { + free (d); + d = grub_util_path_concat (2, bootdir, "efi"); + } + /* Find the Mac HFS(+) System Partition. */ + if (!grub_util_is_directory (d)) + { + free (d); + d = grub_util_path_concat (2, bootdir, "EFI"); + } + if (!grub_util_is_directory (d)) + { + free (d); + d = 0; + } + if (d) + macppcdir = d; + } + if (macppcdir) + { + char **macppcdir_device_names = NULL; + grub_device_t macppcdir_grub_dev = NULL; + char *macppcdir_grub_devname; + grub_fs_t fs; + + macppcdir_device_names = grub_guess_root_devices (macppcdir); + if (!macppcdir_device_names || !macppcdir_device_names[0]) + grub_util_error (_("cannot find a device for %s (is /dev mounted?)"), + macppcdir); + + for (curdev = macppcdir_device_names; *curdev; curdev++) + grub_util_pull_device (*curdev); + + macppcdir_grub_devname = grub_util_get_grub_dev (macppcdir_device_names[0]); + if (!macppcdir_grub_devname) + grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"), + macppcdir_device_names[0]); + + macppcdir_grub_dev = grub_device_open (macppcdir_grub_devname); + if (! macppcdir_grub_dev) + grub_util_error ("%s", grub_errmsg); + + fs = grub_fs_probe (macppcdir_grub_dev); + if (! fs) + grub_util_error ("%s", grub_errmsg); + + if (grub_strcmp (fs->name, "hfs") != 0 + && grub_strcmp (fs->name, "hfsplus") != 0 + && !is_guess) + grub_util_error (_("%s is neither hfs nor hfsplus"), + macppcdir); + if (grub_strcmp (fs->name, "hfs") == 0 + || grub_strcmp (fs->name, "hfsplus") == 0) + { + install_device = macppcdir_device_names[0]; + is_prep = 0; + } + } + } + grub_install_copy_files (grub_install_source_directory, grubdir, platform); @@ -1195,7 +1390,7 @@ main (int argc, char *argv[]) grub_install_mkdir_p (fldir); flf = grub_util_fopen (fl, "w"); if (!flf) - grub_util_error ("Can't create file: %s", strerror (errno)); + grub_util_error (_("Can't create file: %s"), strerror (errno)); fclose (flf); relfl = grub_make_system_path_relative_to_its_root (fl); fprintf (load_cfg_f, "search.file %s root ", @@ -1471,12 +1666,15 @@ main (int argc, char *argv[]) "boot.img"); grub_install_copy_file (boot_img_src, boot_img, 1); - grub_util_info ("%sgrub-bios-setup %s %s %s %s --directory='%s' --device-map='%s' '%s'", - install_bootsector ? "" : "NOT RUNNING: ", + grub_util_info ("%sgrub-bios-setup %s %s %s %s %s --directory='%s' --device-map='%s' '%s'", + /* TRANSLATORS: This is a prefix in the log to indicate that usually + a command would be executed but due to an option was skipped. */ + install_bootsector ? "" : _("NOT RUNNING: "), allow_floppy ? "--allow-floppy " : "", verbosity ? "--verbose " : "", force ? "--force " : "", !fs_probe ? "--skip-fs-probe" : "", + !add_rs_codes ? "--no-rs-codes" : "", platdir, device_map, install_device); @@ -1485,7 +1683,7 @@ main (int argc, char *argv[]) if (install_bootsector) grub_util_bios_setup (platdir, "boot.img", "core.img", install_drive, force, - fs_probe, allow_floppy); + fs_probe, allow_floppy, add_rs_codes); /* If vestiges of GRUB Legacy still exist, tell the Debian packaging that they can ignore them. */ @@ -1524,13 +1722,65 @@ main (int argc, char *argv[]) if (install_bootsector) grub_util_sparc_setup (platdir, "boot.img", "core.img", install_device, force, - fs_probe, allow_floppy); + fs_probe, allow_floppy, + 0 /* unused */ ); break; } case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + if (macppcdir) + { + char *core_services = grub_util_path_concat (4, macppcdir, + "System", "Library", + "CoreServices"); + char *mach_kernel = grub_util_path_concat (2, macppcdir, + "mach_kernel"); + char *grub_elf, *bootx; + FILE *f; + grub_device_t ins_dev; + char *grub_chrp = grub_util_path_concat (2, + grub_install_source_directory, + "grub.chrp"); + + grub_install_mkdir_p (core_services); + + bootx = grub_util_path_concat (2, core_services, "BootX"); + grub_install_copy_file (grub_chrp, bootx, 1); + + grub_elf = grub_util_path_concat (2, core_services, "grub.elf"); + grub_install_copy_file (imgfile, grub_elf, 1); + + f = grub_util_fopen (mach_kernel, "r+"); + if (!f) + grub_util_error (_("Can't create file: %s"), strerror (errno)); + fclose (f); + + fill_core_services (core_services); + + ins_dev = grub_device_open (install_drive); + + bless (ins_dev, core_services, 0); + + if (update_nvram) + { + const char *dev; + int partno; + + partno = ins_dev->disk->partition + ? ins_dev->disk->partition->number + 1 : 0; + dev = grub_util_get_os_disk (install_device); + grub_install_register_ieee1275 (0, dev, partno, + "\\\\BootX"); + } + grub_device_close (ins_dev); + free (grub_elf); + free (bootx); + free (mach_kernel); + free (grub_chrp); + break; + } /* If a install device is defined, copy the core.elf to PReP partition. */ - if (install_device && install_device[0]) + if (is_prep && install_device && install_device[0]) { grub_device_t ins_dev; ins_dev = grub_device_open (install_drive); @@ -1546,32 +1796,28 @@ main (int argc, char *argv[]) else { char *s = xasprintf ("dd if=/dev/zero of=%s", install_device); - grub_util_error ("the PReP partition is not empty. If you are sure you want to use it, run dd to clear it: `%s'", + grub_util_error (_("the PReP partition is not empty. If you are sure you want to use it, run dd to clear it: `%s'"), s); } grub_device_close (ins_dev); + if (update_nvram) + grub_install_register_ieee1275 (1, grub_util_get_os_disk (install_device), + 0, NULL); + break; } /* fallthrough. */ case GRUB_INSTALL_PLATFORM_I386_IEEE1275: if (update_nvram) { - if (platform != GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275 - || !install_device - || install_device[0] == '\0') - { - const char *dev; - char *relpath; - int partno; - relpath = grub_make_system_path_relative_to_its_root (imgfile); - partno = grub_dev->disk->partition - ? grub_dev->disk->partition->number + 1 : 0; - dev = grub_util_get_os_disk (grub_devices[0]); - grub_install_register_ieee1275 (0, dev, - partno, relpath); - } - else - grub_install_register_ieee1275 (1, grub_util_get_os_disk (install_device), - 0, NULL); + const char *dev; + char *relpath; + int partno; + relpath = grub_make_system_path_relative_to_its_root (imgfile); + partno = grub_dev->disk->partition + ? grub_dev->disk->partition->number + 1 : 0; + dev = grub_util_get_os_disk (grub_devices[0]); + grub_install_register_ieee1275 (0, dev, + partno, relpath); } break; case GRUB_INSTALL_PLATFORM_MIPS_ARC: @@ -1579,14 +1825,54 @@ main (int argc, char *argv[]) break; case GRUB_INSTALL_PLATFORM_I386_EFI: - { - char *dst = grub_util_path_concat (2, efidir, "grub.efi"); - /* For old macs. Suggested by Peter Jones. */ - grub_install_copy_file (imgfile, dst, 1); - free (dst); - } + if (!efidir_is_mac) + { + char *dst = grub_util_path_concat (2, efidir, "grub.efi"); + /* For old macs. Suggested by Peter Jones. */ + grub_install_copy_file (imgfile, dst, 1); + free (dst); + } case GRUB_INSTALL_PLATFORM_X86_64_EFI: + if (efidir_is_mac) + { + char *boot_efi; + char *core_services = grub_util_path_concat (4, efidir, + "System", "Library", + "CoreServices"); + char *mach_kernel = grub_util_path_concat (2, efidir, + "mach_kernel"); + FILE *f; + grub_device_t ins_dev; + + grub_install_mkdir_p (core_services); + + boot_efi = grub_util_path_concat (2, core_services, "boot.efi"); + grub_install_copy_file (imgfile, boot_efi, 1); + + f = grub_util_fopen (mach_kernel, "r+"); + if (!f) + grub_util_error (_("Can't create file: %s"), strerror (errno)); + fclose (f); + + fill_core_services(core_services); + + ins_dev = grub_device_open (install_drive); + + bless (ins_dev, boot_efi, 1); + if (!removable && update_nvram) + { + /* Try to make this image bootable using the EFI Boot Manager, if available. */ + grub_install_register_efi (efidir_grub_dev, + "\\System\\Library\\CoreServices", + efi_distributor); + } + + grub_device_close (ins_dev); + free (boot_efi); + free (mach_kernel); + break; + } case GRUB_INSTALL_PLATFORM_ARM_EFI: case GRUB_INSTALL_PLATFORM_ARM64_EFI: case GRUB_INSTALL_PLATFORM_IA64_EFI: @@ -1637,19 +1923,25 @@ main (int argc, char *argv[]) } if (!removable && update_nvram) { - char * efidir_disk; - int efidir_part; char * efifile_path; + char * part; /* Try to make this image bootable using the EFI Boot Manager, if available. */ if (!efi_distributor || efi_distributor[0] == '\0') - grub_util_error ("%s", "EFI distributor id isn't specified."); - efidir_disk = grub_util_get_os_disk (efidir_device_names[0]); - efidir_part = efidir_grub_dev->disk->partition ? efidir_grub_dev->disk->partition->number + 1 : 1; + grub_util_error ("%s", _("EFI distributor id isn't specified.")); efifile_path = xasprintf ("\\EFI\\%s\\%s", efi_distributor, efi_file); - grub_install_register_efi (efidir_disk, efidir_part, + part = (efidir_grub_dev->disk->partition + ? grub_partition_get_name (efidir_grub_dev->disk->partition) + : 0); + grub_util_info ("Registering with EFI: distributor = `%s'," + " path = `%s', ESP at %s%s%s", + efi_distributor, efifile_path, + efidir_grub_dev->disk->name, + (part ? ",": ""), (part ? : "")); + grub_free (part); + grub_install_register_efi (efidir_grub_dev, efifile_path, efi_distributor); } break; diff --git a/util/grub-macbless.c b/util/grub-macbless.c new file mode 100644 index 000000000..9869d0bbd --- /dev/null +++ b/util/grub-macbless.c @@ -0,0 +1,199 @@ +/* grub-probe.c - probe device information for a given path */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 +#include + +#include "progname.h" + +static void +bless (const char *path, int x86) +{ + char *drive_name = NULL; + char **devices; + char *grub_path = NULL; + char *filebuf_via_grub = NULL, *filebuf_via_sys = NULL; + grub_device_t dev = NULL; + grub_err_t err; + struct stat st; + + grub_path = canonicalize_file_name (path); + + if (stat (grub_path, &st) < 0) + grub_util_error (N_("cannot stat `%s': %s"), + grub_path, strerror (errno)); + + devices = grub_guess_root_devices (grub_path); + + if (! devices || !devices[0]) + grub_util_error (_("cannot find a device for %s (is /dev mounted?)"), path); + + drive_name = grub_util_get_grub_dev (devices[0]); + if (! drive_name) + grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"), + devices[0]); + + grub_util_info ("opening %s", drive_name); + dev = grub_device_open (drive_name); + if (! dev) + grub_util_error ("%s", grub_errmsg); + + err = grub_mac_bless_inode (dev, st.st_ino, S_ISDIR (st.st_mode), x86); + if (err) + grub_util_error ("%s", grub_errmsg); + free (grub_path); + free (filebuf_via_grub); + free (filebuf_via_sys); + free (drive_name); +} + +static struct argp_option options[] = { + {"x86", 'x', 0, 0, + N_("bless for x86-based macs"), 0}, + {"ppc", 'p', 0, 0, + N_("bless for ppc-based macs"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +struct arguments +{ + char *arg; + int ppc; +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'v': + verbosity++; + break; + + case 'x': + arguments->ppc = 0; + break; + + case 'p': + arguments->ppc = 1; + break; + + case ARGP_KEY_NO_ARGS: + fprintf (stderr, "%s", _("No path or device is specified.\n")); + argp_usage (state); + break; + + case ARGP_KEY_ARG: + if (arguments->arg) + { + fprintf (stderr, _("Unknown extra argument `%s'."), arg); + fprintf (stderr, "\n"); + return ARGP_ERR_UNKNOWN; + } + arguments->arg = xstrdup (arg); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("--ppc PATH|--x86 FILE"), + N_("Mac-style bless on HFS or HFS+"), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + /* Check for options. */ + memset (&arguments, 0, sizeof (struct arguments)); + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (verbosity > 1) + grub_env_set ("debug", "all"); + + /* Initialize the emulated biosdisk driver. */ + grub_util_biosdisk_init (NULL); + + /* Initialize all modules. */ + grub_init_all (); + grub_gcry_init_all (); + + grub_lvm_fini (); + grub_mdraid09_fini (); + grub_mdraid1x_fini (); + grub_diskfilter_fini (); + grub_diskfilter_init (); + grub_mdraid09_init (); + grub_mdraid1x_init (); + grub_lvm_init (); + + /* Do it. */ + bless (arguments.arg, !arguments.ppc); + + /* Free resources. */ + grub_gcry_fini_all (); + grub_fini_all (); + grub_util_biosdisk_fini (); + + return 0; +} diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in index 3bbce1324..12020bbed 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -39,6 +39,7 @@ grub_mkconfig_dir="${sysconfdir}"/grub.d self=`basename $0` grub_probe="${sbindir}/@grub_probe@" +grub_file="${bindir}/@grub_file@" grub_editenv="${bindir}/@grub_editenv@" grub_script_check="${bindir}/@grub_script_check@" @@ -54,6 +55,7 @@ usage () { gettext "Generate a grub config file"; echo echo print_option_help "-o, --output=$(gettext FILE)" "$(gettext "output generated config to FILE [default=stdout]")" + print_option_help "-r, --root-directory=$(gettext DIR)" "$(gettext "use DIR as root directory [default=/]")" print_option_help "-h, --help" "$(gettext "print this message and exit")" print_option_help "-v, --version" "$(gettext "print the version information and exit")" echo @@ -71,6 +73,8 @@ argument () { echo $1 } +GRUB_ROOT= + # Check the arguments. while test $# -gt 0 do @@ -89,6 +93,11 @@ do --output=*) grub_cfg=`echo "$option" | sed 's/--output=//'` ;; + -r | --root-directory) + GRUB_ROOT=`argument $option "$@"`; shift;; + --root-directory=*) + GRUB_ROOT=`echo "$option" | sed 's/--output=//'` + ;; -*) gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2 usage @@ -135,19 +144,19 @@ else fi # Device containing our userland. Typically used for root= parameter. -GRUB_DEVICE="`${grub_probe} --target=device /`" +GRUB_DEVICE="`${grub_probe} --target=device "$GRUB_ROOT"/`" GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true # Device containing our /boot partition. Usually the same as GRUB_DEVICE. -GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`" +GRUB_DEVICE_BOOT="`${grub_probe} --target=device "$GRUB_ROOT"/boot`" GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true # Filesystem for the device containing our userland. Used for stuff like # choosing Hurd filesystem module. GRUB_FS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2> /dev/null || echo unknown`" -if [ x"$GRUB_FS" = xunknown ]; then - GRUB_FS="$(stat -f --printf=%T / || echo unknown)" +if [ x"$GRUB_FS" = x ] || [ x"$GRUB_FS" = xunknown ]; then + GRUB_FS="$(stat -f --printf=%T "$GRUB_ROOT"/ || echo unknown)" fi if test -f ${sysconfdir}/default/grub ; then @@ -193,6 +202,7 @@ fi # These are defined in this script, export them here so that user can # override them. export GRUB_DEVICE \ + GRUB_ROOT \ GRUB_DEVICE_UUID \ GRUB_DEVICE_BOOT \ GRUB_DEVICE_BOOT_UUID \ @@ -261,18 +271,46 @@ cat << EOF # EOF -for i in ${grub_mkconfig_dir}/* ; do + +for i in "${grub_mkconfig_dir}"/* ; do case "$i" in + "${grub_mkconfig_dir}"/00_header \ + | "${grub_mkconfig_dir}"/30_os-prober \ + | "${grub_mkconfig_dir}"/40_custom \ + | "${grub_mkconfig_dir}"/41_custom) + echo + echo "### BEGIN $i ###" + "$i" + echo "### END $i ###" + ;; # emacsen backup files. FIXME: support other editors *~) ;; # emacsen autosave files. FIXME: support other editors */\#*\#) ;; *) if grub_file_is_not_garbage "$i" && test -x "$i" ; then - echo - echo "### BEGIN $i ###" - "$i" - echo "### END $i ###" + for platform in x86 i386-xen-pae x86_64-xen mips mipsel sparc64 powerpc ia64 arm; do + GRUB_PLATFORM=$platform + export GRUB_PLATFORM + buf="$($i)" + if [ x"$buf" != x ]; then + echo + echo "### BEGIN $i ($platform) ###" + case x$platform in + xx86) + echo "if [ x\"\$grub_platform\" != xxen \\( x\"\$grub_cpu\" = xi386 -o x\"\$grub_cpu\" = xx86_64 -o x\"\$grub_platform\" = x \\) ]; then" ;; + xi386-xen-pae) + echo "if [ x\"\$grub_cpu-\$grub_platform\" = xi386-xen -o x\"\$grub_cpu-\$grub_platform\" = x ]; then" ;; + xx86_64-xen) + echo "if [ x\"\$grub_cpu-\$grub_platform\" = xx86_64-xen -o x\"\$grub_cpu-\$grub_platform\" = x ]; then" ;; + *) + echo "if [ x\"\$grub_cpu\" = x$platform -o x\"\$grub_platform\" = x ]; then" ;; + esac + echo "$buf" + echo "fi" + echo "### END $i ($platform) ###" + fi + done fi ;; esac @@ -289,6 +327,7 @@ if test "x${grub_cfg}" != "x" ; then Ensure that there are no errors in /etc/default/grub and /etc/grub.d/* files or please file a bug report with %s file attached." "${grub_cfg}.new" >&2 + echo >&2 else # none of the children aborted with error, install the new grub.cfg mv -f ${grub_cfg}.new ${grub_cfg} diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in index 33c7254ec..a59350e10 100644 --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in @@ -27,6 +27,9 @@ fi if test "x$grub_probe" = x; then grub_probe="${sbindir}/@grub_probe@" fi +if test "x$grub_file" = x; then + grub_file="${bindir}/@grub_file@" +fi if test "x$grub_mkrelpath" = x; then grub_mkrelpath="${bindir}/@grub_mkrelpath@" fi diff --git a/util/grub-mkfont.c b/util/grub-mkfont.c index d3a8af05c..3cb02ad5c 100644 --- a/util/grub-mkfont.c +++ b/util/grub-mkfont.c @@ -374,7 +374,7 @@ struct gsub_header grub_uint16_t scripts_off; grub_uint16_t features_off; grub_uint16_t lookups_off; -} __attribute__ ((packed)); +} GRUB_PACKED; struct gsub_features { @@ -389,21 +389,21 @@ struct gsub_features #define FEATURE_RLIG 0x726c6967 grub_uint32_t feature_tag; grub_uint16_t offset; - } __attribute__ ((packed)) features[0]; -} __attribute__ ((packed)); + } GRUB_PACKED features[0]; +} GRUB_PACKED; struct gsub_feature { grub_uint16_t params; grub_uint16_t lookupcount; grub_uint16_t lookupindices[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct gsub_lookup_list { grub_uint16_t count; grub_uint16_t offsets[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct gsub_lookup { @@ -411,7 +411,7 @@ struct gsub_lookup grub_uint16_t flag; grub_uint16_t subtablecount; grub_uint16_t subtables[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct gsub_substitution { @@ -426,14 +426,14 @@ struct gsub_substitution grub_uint16_t repl[0]; }; }; -} __attribute__ ((packed)); +} GRUB_PACKED; struct gsub_coverage_list { grub_uint16_t type; grub_uint16_t count; grub_uint16_t glyphs[0]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct gsub_coverage_ranges { @@ -444,8 +444,8 @@ struct gsub_coverage_ranges grub_uint16_t start; grub_uint16_t end; grub_uint16_t start_index; - } __attribute__ ((packed)) ranges[0]; -} __attribute__ ((packed)); + } GRUB_PACKED ranges[0]; +} GRUB_PACKED; #define GSUB_SINGLE_SUBSTITUTION 1 diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c index b7c01ab1a..7eb10deb3 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -434,7 +434,8 @@ SUFFIX (relocate_symbols) (Elf_Ehdr *e, Elf_Shdr *sections, *jptr = 0; jptr++; } - grub_util_info ("locating %s at 0x%llx (0x%llx)", name, + grub_util_info ("locating %s at 0x%" GRUB_HOST_PRIxLONG_LONG + " (0x%" GRUB_HOST_PRIxLONG_LONG ")", name, (unsigned long long) sym->st_value, (unsigned long long) section_addresses[cur_index]); @@ -563,7 +564,8 @@ arm_get_trampoline_size (Elf_Ehdr *e, break; default: - grub_util_error (_("relocation 0x%x is not implemented yet!"), ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } } @@ -660,7 +662,9 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, /* This is absolute. */ *target = grub_host_to_target32 (grub_target_to_host32 (*target) + addend + sym_addr); - grub_util_info ("relocating an R_386_32 entry to 0x%llx at the offset 0x%llx", + grub_util_info ("relocating an R_386_32 entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, (unsigned long long) *target, (unsigned long long) offset); break; @@ -671,13 +675,15 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, + addend + sym_addr - target_section_addr - offset - image_target->vaddr_offset); - grub_util_info ("relocating an R_386_PC32 entry to 0x%llx at the offset 0x%llx", + grub_util_info ("relocating an R_386_PC32 entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, (unsigned long long) *target, (unsigned long long) offset); break; default: - grub_util_error (_("relocation 0x%llx is not implemented yet"), - (unsigned long long) ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; @@ -692,7 +698,9 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, case R_X86_64_64: *target = grub_host_to_target64 (grub_target_to_host64 (*target) + addend + sym_addr); - grub_util_info ("relocating an R_X86_64_64 entry to 0x%llx at the offset 0x%llx", + grub_util_info ("relocating an R_X86_64_64 entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, (unsigned long long) *target, (unsigned long long) offset); break; @@ -704,25 +712,41 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, + addend + sym_addr - target_section_addr - offset - image_target->vaddr_offset); - grub_util_info ("relocating an R_X86_64_PC32 entry to 0x%x at the offset 0x%llx", + grub_util_info ("relocating an R_X86_64_PC32 entry to 0x%x at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, *t32, (unsigned long long) offset); break; } + case R_X86_64_PC64: + { + *target = grub_host_to_target64 (grub_target_to_host64 (*target) + + addend + sym_addr + - target_section_addr - offset + - image_target->vaddr_offset); + grub_util_info ("relocating an R_X86_64_PC64 entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) *target, + (unsigned long long) offset); + break; + } + case R_X86_64_32: case R_X86_64_32S: { grub_uint32_t *t32 = (grub_uint32_t *) target; *t32 = grub_host_to_target64 (grub_target_to_host32 (*t32) + addend + sym_addr); - grub_util_info ("relocating an R_X86_64_32(S) entry to 0x%x at the offset 0x%llx", + grub_util_info ("relocating an R_X86_64_32(S) entry to 0x%x at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, *t32, (unsigned long long) offset); break; } default: - grub_util_error (_("relocation 0x%llx is not implemented yet"), - (unsigned long long) ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; @@ -738,7 +762,8 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, tr++; if (noff & ~MASK19) grub_util_error ("trampoline offset too big (%" - PRIxGRUB_UINT64_T ")", noff); + GRUB_HOST_PRIxLONG_LONG ")", + (unsigned long long) noff); grub_ia64_add_value_to_slot_20b ((grub_addr_t) target, noff); } break; @@ -784,7 +809,9 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, *target = grub_host_to_target64 (grub_target_to_host64 (*target) + addend + sym_addr); grub_util_info ("relocating a direct entry to 0x%" - PRIxGRUB_UINT64_T " at the offset 0x%llx", + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) grub_target_to_host64 (*target), (unsigned long long) offset); break; @@ -794,8 +821,8 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, break; default: - grub_util_error (_("relocation 0x%llx is not implemented yet"), - (unsigned long long) ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; @@ -815,15 +842,15 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, sym_addr -= offset; sym_addr -= SUFFIX (entry_point); if (!grub_arm_64_check_xxxx26_offset (sym_addr)) - grub_util_error ("%s", _("CALL26 Relocation out of range")); + grub_util_error ("%s", "CALL26 Relocation out of range"); grub_arm64_set_xxxx26_offset((grub_uint32_t *)target, sym_addr); } break; default: - grub_util_error (_("relocation %d is not implemented yet"), - (unsigned long long) ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; @@ -855,7 +882,10 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, case R_ARM_THM_JUMP19: { grub_err_t err; - grub_util_info (" THM_JUMP24:\ttarget=0x%08lx\toffset=(0x%08x)", (unsigned long) target, sym_addr); + grub_util_info (" THM_JUMP24:\ttarget=0x%08lx\toffset=(0x%08x)", + (unsigned long) ((char *) target + - (char *) e), + sym_addr); if (!(sym_addr & 1)) { grub_uint32_t tr_addr; @@ -888,7 +918,7 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, case R_ARM_JUMP24: { grub_err_t err; - grub_util_info (" JUMP24:\ttarget=0x%08lx\toffset=(0x%08x)", (unsigned long) target, sym_addr); + grub_util_info (" JUMP24:\ttarget=0x%08lx\toffset=(0x%08x)", (unsigned long) ((char *) target - (char *) e), sym_addr); if (sym_addr & 1) { grub_uint32_t tr_addr; @@ -914,7 +944,8 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, break; default: - grub_util_error (_("relocation 0x%x is not implemented yet!"), ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; @@ -1080,7 +1111,8 @@ SUFFIX (make_reloc_section) (Elf_Ehdr *e, void **out, Elf_Addr addr; addr = section_address + offset; - grub_util_info ("adding a relocation entry for 0x%llx", + grub_util_info ("adding a relocation entry for 0x%" + GRUB_HOST_PRIxLONG_LONG, (unsigned long long) addr); current_address = SUFFIX (add_fixup_entry) (&lst, @@ -1100,7 +1132,8 @@ SUFFIX (make_reloc_section) (Elf_Ehdr *e, void **out, Elf_Addr addr; addr = section_address + offset; - grub_util_info ("adding a relocation entry for 0x%llx", + grub_util_info ("adding a relocation entry for 0x%" + GRUB_HOST_PRIxLONG_LONG, (unsigned long long) addr); current_address = SUFFIX (add_fixup_entry) (&lst, @@ -1130,7 +1163,8 @@ SUFFIX (make_reloc_section) (Elf_Ehdr *e, void **out, Elf_Addr addr; addr = section_address + offset; - grub_util_info ("adding a relocation entry for 0x%llx", + grub_util_info ("adding a relocation entry for 0x%" + GRUB_HOST_PRIxLONG_LONG, (unsigned long long) addr); current_address = SUFFIX (add_fixup_entry) (&lst, @@ -1142,8 +1176,8 @@ SUFFIX (make_reloc_section) (Elf_Ehdr *e, void **out, #endif break; default: - grub_util_error (_("relocation 0x%llx is not implemented yet"), - (unsigned long long) ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; @@ -1167,8 +1201,8 @@ SUFFIX (make_reloc_section) (Elf_Ehdr *e, void **out, case R_AARCH64_JUMP26: break; default: - grub_util_error (_("fixup for relocation %d is not implemented yet"), - (unsigned long long) ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; @@ -1205,7 +1239,8 @@ SUFFIX (make_reloc_section) (Elf_Ehdr *e, void **out, } break; default: - grub_util_error (_("fixup for relocation 0x%x not implemented"), ELF_R_TYPE (info)); + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; @@ -1333,7 +1368,8 @@ SUFFIX (locate_sections) (const char *kernel_path, if (align) current_address = ALIGN_UP (current_address + image_target->vaddr_offset, align) - image_target->vaddr_offset; - grub_util_info ("locating the section %s at 0x%llx", + grub_util_info ("locating the section %s at 0x%" + GRUB_HOST_PRIxLONG_LONG, name, (unsigned long long) current_address); if (image_target->id != IMAGE_EFI) { @@ -1341,11 +1377,15 @@ SUFFIX (locate_sections) (const char *kernel_path, - image_target->link_addr; if (grub_host_to_target_addr (s->sh_addr) != image_target->link_addr) - grub_util_error ("`%s' is miscompiled: it's start address is 0x%llx" - " instead of 0x%llx: ld.gold bug?", - kernel_path, - (unsigned long long) grub_host_to_target_addr (s->sh_addr), - (unsigned long long) image_target->link_addr); + { + char *msg + = grub_xasprintf (_("`%s' is miscompiled: it's start address is 0x%llx" + " instead of 0x%llx: ld.gold bug?"), + kernel_path, + (unsigned long long) grub_host_to_target_addr (s->sh_addr), + (unsigned long long) image_target->link_addr); + grub_util_error ("%s", msg); + } } section_addresses[i] = current_address; current_address += grub_host_to_target_addr (s->sh_size); @@ -1370,7 +1410,8 @@ SUFFIX (locate_sections) (const char *kernel_path, align) - image_target->vaddr_offset; - grub_util_info ("locating the section %s at 0x%llx", + grub_util_info ("locating the section %s at 0x%" + GRUB_HOST_PRIxLONG_LONG, name, (unsigned long long) current_address); if (image_target->id != IMAGE_EFI) current_address = grub_host_to_target_addr (s->sh_addr) @@ -1463,7 +1504,8 @@ SUFFIX (load_image) (const char *kernel_path, size_t *exec_size, sec_align) - image_target->vaddr_offset; - grub_util_info ("locating the section %s at 0x%llx", + grub_util_info ("locating the section %s at 0x%" + GRUB_HOST_PRIxLONG_LONG, name, (unsigned long long) current_address); if (image_target->id != IMAGE_EFI) current_address = grub_host_to_target_addr (s->sh_addr) diff --git a/util/grub-mknetdir.c b/util/grub-mknetdir.c index 26f4c0eb4..1112b87de 100644 --- a/util/grub-mknetdir.c +++ b/util/grub-mknetdir.c @@ -43,7 +43,7 @@ static struct argp_option options[] = { {"subdir", OPTION_SUBDIR, N_("DIR"), 0, N_("relative subdirectory on network server"), 2}, {"debug", OPTION_DEBUG, 0, OPTION_HIDDEN, 0, 2}, - {"debug-image", OPTION_DEBUG_IMAGE, "DEBUG", OPTION_HIDDEN, 0, 2}, + {"debug-image", OPTION_DEBUG_IMAGE, N_("STRING"), OPTION_HIDDEN, 0, 2}, {0, 0, 0, 0, 0, 0} }; @@ -79,7 +79,7 @@ argp_parser (int key, char *arg, struct argp_state *state) struct argp argp = { - options, argp_parser, N_("[OPTION]"), + options, argp_parser, NULL, "\v"N_("copies GRUB images into net_directory/subdir/target_cpu-platform."), NULL, grub_install_help_filter, NULL }; @@ -134,7 +134,7 @@ process_input_dir (const char *input_dir, enum grub_install_plat platform) prefix = xasprintf ("/%s", subdir); if (!targets[platform].mkimage_target) - grub_util_error ("unsupported platform %s\n", platsub); + grub_util_error (_("unsupported platform %s\n"), platsub); grub_cfg = grub_util_path_concat (2, grubdir, "grub.cfg"); cfg = grub_util_fopen (grub_cfg, "wb"); diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c index 6a07c13fb..224140f4e 100644 --- a/util/grub-mkrescue.c +++ b/util/grub-mkrescue.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -378,6 +379,10 @@ main (int argc, char *argv[]) if (!output_image) grub_util_error ("%s", _("output file must be specified")); + grub_init_all (); + grub_hostfs_init (); + grub_host_init (); + xorriso_push (xorriso); xorriso_push ("-as"); xorriso_push ("mkisofs"); @@ -509,7 +514,7 @@ main (int argc, char *argv[]) if (!sa) grub_util_error (_("cannot open `%s': %s"), sysarea_img, strerror (errno)); - bi = grub_util_fopen (sysarea_img, "wb"); + bi = grub_util_fopen (bin, "rb"); if (!bi) grub_util_error (_("cannot open `%s': %s"), bin, strerror (errno)); @@ -519,10 +524,10 @@ main (int argc, char *argv[]) fclose (bi); fwrite (buf, 1, 512, sa); - grub_install_make_image_wrap (source_dirs[GRUB_INSTALL_PLATFORM_I386_PC], - "/boot/grub", output, - 0, load_cfg, - "i386-pc", 0); + grub_install_make_image_wrap_file (source_dirs[GRUB_INSTALL_PLATFORM_I386_PC], + "/boot/grub", sa, sysarea_img, + 0, load_cfg, + "i386-pc", 0); sz = ftello (sa); fflush (sa); grub_util_fd_sync (fileno (sa)); diff --git a/util/grub-mkstandalone.c b/util/grub-mkstandalone.c index 6ee5e588a..576ab400d 100644 --- a/util/grub-mkstandalone.c +++ b/util/grub-mkstandalone.c @@ -42,7 +42,7 @@ static struct argp_option options[] = { {"output", 'o', N_("FILE"), 0, N_("save output in FILE [required]"), 2}, {"format", 'O', N_("FILE"), 0, 0, 2}, - {"compression", 'C', N_("xz|none|auto"), OPTION_HIDDEN, 0, 2}, + {"compression", 'C', "xz|none|auto", OPTION_HIDDEN, 0, 2}, {0, 0, 0, 0, 0, 0} }; @@ -132,7 +132,7 @@ struct head char devminor[8]; char prefix[155]; char pad[12]; -} __attribute__ ((packed)); +} GRUB_PACKED; static void write_zeros (unsigned rsz) diff --git a/util/grub-pe2elf.c b/util/grub-pe2elf.c index 44189c12a..f4abf70a3 100644 --- a/util/grub-pe2elf.c +++ b/util/grub-pe2elf.c @@ -48,30 +48,23 @@ * relocation sections */ -#define TEXT_SECTION 1 -#define RDATA_SECTION 2 -#define DATA_SECTION 3 -#define BSS_SECTION 4 -#define MODNAME_SECTION 5 -#define MODDEPS_SECTION 6 -#define MODLICENSE_SECTION 7 -#define SYMTAB_SECTION 8 -#define STRTAB_SECTION 9 - -#define REL_SECTION 10 - -/* 10 normal section + up to 4 relocation (.text, .rdata, .data, .symtab). */ -#define MAX_SECTIONS 16 +#if GRUB_TARGET_WORDSIZE == 64 +typedef Elf64_Rela elf_reloc_t; +#define GRUB_PE32_MACHINE GRUB_PE32_MACHINE_X86_64 +#else +typedef Elf32_Rel elf_reloc_t; +#define GRUB_PE32_MACHINE GRUB_PE32_MACHINE_I386 +#endif #define STRTAB_BLOCK 256 static char *strtab; static int strtab_max, strtab_len; -static Elf32_Ehdr ehdr; -static Elf32_Shdr shdr[MAX_SECTIONS]; -static int num_sections; -static grub_uint32_t offset; +static Elf_Ehdr ehdr; +static Elf_Shdr *shdr; +static int num_sections, first_reloc_section, reloc_sections_end, symtab_section, strtab_section; +static grub_uint32_t offset, image_base; static int insert_string (const char *name) @@ -102,16 +95,22 @@ write_section_data (FILE* fp, const char *name, char *image, { int *section_map; int i; + grub_uint32_t last_category = 0; + grub_uint32_t idx, idx_reloc; char *pe_strtab = (image + pe_chdr->symtab_offset + pe_chdr->num_symbols * sizeof (struct grub_pe32_symbol)); - section_map = xmalloc ((pe_chdr->num_sections + 1) * sizeof (int)); + section_map = xmalloc ((2 * pe_chdr->num_sections + 5) * sizeof (int)); section_map[0] = 0; + shdr = xmalloc ((2 * pe_chdr->num_sections + 5) * sizeof (shdr[0])); + idx = 1; + idx_reloc = pe_chdr->num_sections + 1; for (i = 0; i < pe_chdr->num_sections; i++, pe_shdr++) { - grub_uint32_t idx; + grub_uint32_t category; const char *shname = pe_shdr->name; + grub_size_t secsize; if (shname[0] == '/' && grub_isdigit (shname[1])) { @@ -121,99 +120,120 @@ write_section_data (FILE* fp, const char *name, char *image, shname = pe_strtab + atoi (t + 1); } + secsize = pe_shdr->raw_data_size; + + shdr[idx].sh_type = SHT_PROGBITS; + if (! strcmp (shname, ".text")) { - idx = TEXT_SECTION; + category = 0; shdr[idx].sh_flags = SHF_ALLOC | SHF_EXECINSTR; } - else if (! strcmp (shname, ".rdata")) + else if (! strncmp (shname, ".rdata", 6)) { - idx = RDATA_SECTION; + category = 1; shdr[idx].sh_flags = SHF_ALLOC; } else if (! strcmp (shname, ".data")) { - idx = DATA_SECTION; + category = 2; shdr[idx].sh_flags = SHF_ALLOC | SHF_WRITE; } else if (! strcmp (shname, ".bss")) { - idx = BSS_SECTION; + category = 3; + shdr[idx].sh_type = SHT_NOBITS; shdr[idx].sh_flags = SHF_ALLOC | SHF_WRITE; + if (secsize < pe_shdr->virtual_size) + secsize = pe_shdr->virtual_size; } - else if (! strcmp (shname, ".modname")) - idx = MODNAME_SECTION; - else if (! strcmp (shname, ".moddeps")) - idx = MODDEPS_SECTION; - else if (strcmp (shname, ".module_license") == 0) - idx = MODLICENSE_SECTION; + else if (strcmp (shname, ".modname") == 0 || strcmp (shname, ".moddeps") == 0 + || strcmp (shname, ".module_license") == 0) + category = 4; else { section_map[i + 1] = -1; continue; } + if (category < last_category) + grub_util_error ("out of order sections"); + section_map[i + 1] = idx; - shdr[idx].sh_type = (idx == BSS_SECTION) ? SHT_NOBITS : SHT_PROGBITS; - shdr[idx].sh_size = pe_shdr->raw_data_size; + if (pe_shdr->virtual_size + && pe_shdr->virtual_size < secsize) + secsize = pe_shdr->virtual_size; + + shdr[idx].sh_size = secsize; shdr[idx].sh_addralign = 1 << (((pe_shdr->characteristics >> GRUB_PE32_SCN_ALIGN_SHIFT) & GRUB_PE32_SCN_ALIGN_MASK) - 1); + shdr[idx].sh_addr = pe_shdr->virtual_address + image_base; - if (idx != BSS_SECTION) + if (shdr[idx].sh_type != SHT_NOBITS) { shdr[idx].sh_offset = offset; grub_util_write_image_at (image + pe_shdr->raw_data_offset, pe_shdr->raw_data_size, offset, fp, shname); - offset += pe_shdr->raw_data_size; + offset += secsize; } if (pe_shdr->relocations_offset) { char relname[5 + strlen (shname)]; - if (num_sections >= MAX_SECTIONS) - grub_util_error ("too many sections"); - sprintf (relname, ".rel%s", shname); - shdr[num_sections].sh_name = insert_string (relname); - shdr[num_sections].sh_link = i; - shdr[num_sections].sh_info = idx; + shdr[idx_reloc].sh_name = insert_string (relname); + shdr[idx_reloc].sh_link = i; + shdr[idx_reloc].sh_info = idx; - shdr[idx].sh_name = shdr[num_sections].sh_name + 4; + shdr[idx].sh_name = shdr[idx_reloc].sh_name + 4; - num_sections++; + idx_reloc++; } else shdr[idx].sh_name = insert_string (shname); + idx++; } + idx_reloc -= pe_chdr->num_sections + 1; + num_sections = idx + idx_reloc + 2; + first_reloc_section = idx; + reloc_sections_end = idx + idx_reloc; + memmove (shdr + idx, shdr + pe_chdr->num_sections + 1, + idx_reloc * sizeof (shdr[0])); + memset (shdr + idx + idx_reloc, 0, 3 * sizeof (shdr[0])); + memset (shdr, 0, sizeof (shdr[0])); + + symtab_section = idx + idx_reloc; + strtab_section = idx + idx_reloc + 1; + return section_map; } static void write_reloc_section (FILE* fp, const char *name, char *image, struct grub_pe32_coff_header *pe_chdr, - struct grub_pe32_section_table *pe_shdr, - Elf32_Sym *symtab, + struct grub_pe32_section_table *pe_shdr, + Elf_Sym *symtab, int *symtab_map) { int i; - for (i = REL_SECTION; i < num_sections; i++) + for (i = first_reloc_section; i < reloc_sections_end; i++) { struct grub_pe32_section_table *pe_sec; struct grub_pe32_reloc *pe_rel; - Elf32_Rel *rel; + elf_reloc_t *rel; int num_rels, j, modified; pe_sec = pe_shdr + shdr[i].sh_link; pe_rel = (struct grub_pe32_reloc *) (image + pe_sec->relocations_offset); - rel = (Elf32_Rel *) xmalloc (pe_sec->num_relocations * sizeof (Elf32_Rel)); + rel = (elf_reloc_t *) xmalloc (pe_sec->num_relocations * sizeof (elf_reloc_t)); num_rels = 0; modified = 0; @@ -226,43 +246,84 @@ write_reloc_section (FILE* fp, const char *name, char *image, (symtab_map[pe_rel->symtab_index] == -1)) grub_util_error ("invalid symbol"); - if (pe_rel->type == GRUB_PE32_REL_I386_DIR32) - type = R_386_32; - else if (pe_rel->type == GRUB_PE32_REL_I386_REL32) - type = R_386_PC32; - else - grub_util_error ("unknown pe relocation type %d\n", pe_rel->type); - ofs = pe_rel->offset - pe_sec->virtual_address; addr = (grub_uint32_t *)(image + pe_sec->raw_data_offset + ofs); - if (type == R_386_PC32) + + switch (pe_rel->type) + { +#if GRUB_TARGET_WORDSIZE == 64 + case 1: + type = R_X86_64_64; + rel[num_rels].r_addend = *(grub_int64_t *)addr; + *(grub_int64_t *)addr = 0; + modified = 1; + break; + case 4: + type = R_X86_64_PC32; + rel[num_rels].r_addend = *(grub_int32_t *)addr; + *addr = 0; + modified = 1; + break; + case 14: + type = R_X86_64_PC64; + rel[num_rels].r_addend = *(grub_uint64_t *)addr - 8; + *(grub_uint64_t *)addr = 0; + modified = 1; + break; +#else + case GRUB_PE32_REL_I386_DIR32: + type = R_386_32; + break; + case GRUB_PE32_REL_I386_REL32: + type = R_386_PC32; + break; +#endif + default: + grub_util_error ("unknown pe relocation type %d\n", pe_rel->type); + } + + if (type == +#if GRUB_TARGET_WORDSIZE == 64 + R_386_PC32 +#else + R_X86_64_PC32 +#endif + + ) { unsigned char code; code = image[pe_sec->raw_data_offset + ofs - 1]; +#if GRUB_TARGET_WORDSIZE == 32 if (((code != 0xe8) && (code != 0xe9)) || (*addr)) grub_util_error ("invalid relocation (%x %x)", code, *addr); +#endif - modified = 1; - if (symtab[symtab_map[pe_rel->symtab_index]].st_shndx) + if (symtab[symtab_map[pe_rel->symtab_index]].st_shndx + && symtab[symtab_map[pe_rel->symtab_index]].st_shndx + == shdr[i].sh_info) { - if (symtab[symtab_map[pe_rel->symtab_index]].st_shndx - != shdr[i].sh_info) - grub_util_error ("cross section call is not allowed"); - - *addr = (symtab[symtab_map[pe_rel->symtab_index]].st_value - - ofs - 4); + modified = 1; + *addr += (symtab[symtab_map[pe_rel->symtab_index]].st_value + - ofs - 4); continue; } else - *addr = -4; + { +#if GRUB_TARGET_WORDSIZE == 64 + rel[num_rels].r_addend -= 4; +#else + modified = 1; + *addr = -4; +#endif + } } rel[num_rels].r_offset = ofs; - rel[num_rels].r_info = ELF32_R_INFO (symtab_map[pe_rel->symtab_index], - type); + rel[num_rels].r_info = ELF_R_INFO (symtab_map[pe_rel->symtab_index], + type); num_rels++; } @@ -272,12 +333,16 @@ write_reloc_section (FILE* fp, const char *name, char *image, shdr[shdr[i].sh_info].sh_offset, fp, name); +#if GRUB_TARGET_WORDSIZE == 64 + shdr[i].sh_type = SHT_RELA; +#else shdr[i].sh_type = SHT_REL; +#endif shdr[i].sh_offset = offset; - shdr[i].sh_link = SYMTAB_SECTION; + shdr[i].sh_link = symtab_section; shdr[i].sh_addralign = 4; - shdr[i].sh_entsize = sizeof (Elf32_Rel); - shdr[i].sh_size = num_rels * sizeof (Elf32_Rel); + shdr[i].sh_entsize = sizeof (elf_reloc_t); + shdr[i].sh_size = num_rels * sizeof (elf_reloc_t); grub_util_write_image_at (rel, shdr[i].sh_size, offset, fp, name); offset += shdr[i].sh_size; @@ -293,16 +358,16 @@ write_symbol_table (FILE* fp, const char *name, char *image, { struct grub_pe32_symbol *pe_symtab; char *pe_strtab; - Elf32_Sym *symtab; + Elf_Sym *symtab; int *symtab_map, num_syms; int i; pe_symtab = (struct grub_pe32_symbol *) (image + pe_chdr->symtab_offset); pe_strtab = (char *) (pe_symtab + pe_chdr->num_symbols); - symtab = (Elf32_Sym *) xmalloc ((pe_chdr->num_symbols + 1) * - sizeof (Elf32_Sym)); - memset (symtab, 0, (pe_chdr->num_symbols + 1) * sizeof (Elf32_Sym)); + symtab = (Elf_Sym *) xmalloc ((pe_chdr->num_symbols + 1) * + sizeof (Elf_Sym)); + memset (symtab, 0, (pe_chdr->num_symbols + 1) * sizeof (Elf_Sym)); num_syms = 1; symtab_map = (int *) xmalloc (pe_chdr->num_symbols * sizeof (int)); @@ -352,6 +417,8 @@ write_symbol_table (FILE* fp, const char *name, char *image, if ((strcmp (symname, "_grub_mod_init")) && (strcmp (symname, "_grub_mod_fini")) && + (strcmp (symname, "grub_mod_init")) && + (strcmp (symname, "grub_mod_fini")) && (bind == STB_LOCAL)) continue; @@ -360,7 +427,7 @@ write_symbol_table (FILE* fp, const char *name, char *image, symtab[num_syms].st_shndx = section_map[pe_symtab->section]; symtab[num_syms].st_value = pe_symtab->value; - symtab[num_syms].st_info = ELF32_ST_INFO (bind, type); + symtab[num_syms].st_info = ELF_ST_INFO (bind, type); symtab_map[i] = num_syms; num_syms++; @@ -369,17 +436,17 @@ write_symbol_table (FILE* fp, const char *name, char *image, write_reloc_section (fp, name, image, pe_chdr, pe_shdr, symtab, symtab_map); - shdr[SYMTAB_SECTION].sh_name = insert_string (".symtab"); - shdr[SYMTAB_SECTION].sh_type = SHT_SYMTAB; - shdr[SYMTAB_SECTION].sh_offset = offset; - shdr[SYMTAB_SECTION].sh_size = num_syms * sizeof (Elf32_Sym); - shdr[SYMTAB_SECTION].sh_entsize = sizeof (Elf32_Sym); - shdr[SYMTAB_SECTION].sh_link = STRTAB_SECTION; - shdr[SYMTAB_SECTION].sh_addralign = 4; + shdr[symtab_section].sh_name = insert_string (".symtab"); + shdr[symtab_section].sh_type = SHT_SYMTAB; + shdr[symtab_section].sh_offset = offset; + shdr[symtab_section].sh_size = num_syms * sizeof (Elf_Sym); + shdr[symtab_section].sh_entsize = sizeof (Elf_Sym); + shdr[symtab_section].sh_link = strtab_section; + shdr[symtab_section].sh_addralign = 4; - grub_util_write_image_at (symtab, shdr[SYMTAB_SECTION].sh_size, + grub_util_write_image_at (symtab, shdr[symtab_section].sh_size, offset, fp, name); - offset += shdr[SYMTAB_SECTION].sh_size; + offset += shdr[symtab_section].sh_size; free (symtab); free (symtab_map); @@ -388,11 +455,11 @@ write_symbol_table (FILE* fp, const char *name, char *image, static void write_string_table (FILE *fp, const char *name) { - shdr[STRTAB_SECTION].sh_name = insert_string (".strtab"); - shdr[STRTAB_SECTION].sh_type = SHT_STRTAB; - shdr[STRTAB_SECTION].sh_offset = offset; - shdr[STRTAB_SECTION].sh_size = strtab_len; - shdr[STRTAB_SECTION].sh_addralign = 1; + shdr[strtab_section].sh_name = insert_string (".strtab"); + shdr[strtab_section].sh_type = SHT_STRTAB; + shdr[strtab_section].sh_offset = offset; + shdr[strtab_section].sh_size = strtab_len; + shdr[strtab_section].sh_addralign = 1; grub_util_write_image_at (strtab, strtab_len, offset, fp, name); offset += strtab_len; @@ -411,20 +478,25 @@ write_section_header (FILE *fp, const char *name) ehdr.e_version = EV_CURRENT; ehdr.e_type = ET_REL; +#if GRUB_TARGET_WORDSIZE == 64 + ehdr.e_ident[EI_CLASS] = ELFCLASS64; + ehdr.e_ident[EI_DATA] = ELFDATA2LSB; + ehdr.e_machine = EM_X86_64; +#else ehdr.e_ident[EI_CLASS] = ELFCLASS32; ehdr.e_ident[EI_DATA] = ELFDATA2LSB; ehdr.e_machine = EM_386; - +#endif ehdr.e_ehsize = sizeof (ehdr); - ehdr.e_shentsize = sizeof (Elf32_Shdr); - ehdr.e_shstrndx = STRTAB_SECTION; + ehdr.e_shentsize = sizeof (Elf_Shdr); + ehdr.e_shstrndx = strtab_section; ehdr.e_shoff = offset; ehdr.e_shnum = num_sections; - grub_util_write_image_at (&shdr, sizeof (Elf32_Shdr) * num_sections, + grub_util_write_image_at (shdr, sizeof (Elf_Shdr) * num_sections, offset, fp, name); - grub_util_write_image_at (&ehdr, sizeof (Elf32_Ehdr), 0, fp, name); + grub_util_write_image_at (&ehdr, sizeof (Elf_Ehdr), 0, fp, name); } static void @@ -434,9 +506,13 @@ convert_pe (FILE* fp, const char *name, char *image) struct grub_pe32_section_table *pe_shdr; int *section_map; - pe_chdr = (struct grub_pe32_coff_header *) image; - if (grub_le_to_cpu16 (pe_chdr->machine) != GRUB_PE32_MACHINE_I386) - grub_util_error ("invalid coff image"); + if (image[0] == 'M' && image[1] == 'Z') + pe_chdr = (struct grub_pe32_coff_header *) (image + (grub_le_to_cpu32 (((grub_uint32_t *)image)[0xf]) + 4)); + else + pe_chdr = (struct grub_pe32_coff_header *) image; + if (grub_le_to_cpu16 (pe_chdr->machine) != GRUB_PE32_MACHINE) + grub_util_error ("invalid coff image (%x != %x)", + grub_le_to_cpu16 (pe_chdr->machine), GRUB_PE32_MACHINE); strtab = xmalloc (STRTAB_BLOCK); strtab_max = STRTAB_BLOCK; @@ -444,8 +520,17 @@ convert_pe (FILE* fp, const char *name, char *image) strtab_len = 1; offset = sizeof (ehdr); - pe_shdr = (struct grub_pe32_section_table *) (pe_chdr + 1); - num_sections = REL_SECTION; + if (pe_chdr->optional_header_size) + { +#if GRUB_TARGET_WORDSIZE == 64 + struct grub_pe64_optional_header *o; +#else + struct grub_pe32_optional_header *o; +#endif + o = (void *) (pe_chdr + 1); + image_base = o->image_base; + } + pe_shdr = (struct grub_pe32_section_table *) ((char *) (pe_chdr + 1) + pe_chdr->optional_header_size); section_map = write_section_data (fp, name, image, pe_chdr, pe_shdr); diff --git a/util/grub-render-label.c b/util/grub-render-label.c index e2ca34980..9a8eedbc1 100644 --- a/util/grub-render-label.c +++ b/util/grub-render-label.c @@ -26,6 +26,7 @@ #include #include #include +#include #define _GNU_SOURCE 1 @@ -166,6 +167,10 @@ main (int argc, char *argv[]) fclose (in); } + grub_init_all (); + grub_hostfs_init (); + grub_host_init (); + grub_util_render_label (arguments.font, arguments.bgcolor, arguments.fgcolor, diff --git a/util/grub-setup.c b/util/grub-setup.c index 90b9de013..7a6ca78b2 100644 --- a/util/grub-setup.c +++ b/util/grub-setup.c @@ -64,6 +64,12 @@ #define DEFAULT_BOOT_FILE "boot.img" #define DEFAULT_CORE_FILE "core.img" +/* Non-printable "keys" for arguments with no short form. + * See grub-core/gnulib/argp.h for details. */ +enum { + NO_RS_CODES_KEY = 0x100, +}; + static struct argp_option options[] = { {"boot-image", 'b', N_("FILE"), 0, N_("use FILE as the boot image [default=%s]"), 0}, @@ -82,7 +88,9 @@ static struct argp_option options[] = { /* TRANSLATORS: The potential breakage isn't limited to floppies but it's likely to make the install unbootable from HDD. */ N_("make the drive also bootable as floppy (default for fdX devices). May break on some BIOSes."), 0}, - + {"no-rs-codes", NO_RS_CODES_KEY, 0, 0, + N_("Do not apply any reed-solomon codes when embedding core.img. " + "This option is only available on x86 BIOS targets."), 0}, { 0, 0, 0, 0, 0, 0 } }; @@ -118,6 +126,7 @@ struct arguments int fs_probe; int allow_floppy; char *device; + int add_rs_codes; }; static error_t @@ -173,6 +182,10 @@ argp_parser (int key, char *arg, struct argp_state *state) verbosity++; break; + case NO_RS_CODES_KEY: + arguments->add_rs_codes = 0; + break; + case ARGP_KEY_ARG: if (state->arg_num == 0) arguments->device = xstrdup(arg); @@ -233,6 +246,7 @@ main (int argc, char *argv[]) /* Default option values. */ memset (&arguments, 0, sizeof (struct arguments)); arguments.fs_probe = 1; + arguments.add_rs_codes = 1; /* Parse our arguments */ if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) @@ -292,7 +306,8 @@ main (int argc, char *argv[]) arguments.boot_file ? : DEFAULT_BOOT_FILE, arguments.core_file ? : DEFAULT_CORE_FILE, dest_dev, arguments.force, - arguments.fs_probe, arguments.allow_floppy); + arguments.fs_probe, arguments.allow_floppy, + arguments.add_rs_codes); /* Free resources. */ grub_fini_all (); diff --git a/util/grub-syslinux2cfg.c b/util/grub-syslinux2cfg.c new file mode 100644 index 000000000..aee938759 --- /dev/null +++ b/util/grub-syslinux2cfg.c @@ -0,0 +1,239 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include + +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "progname.h" + +struct arguments +{ + char *input; + char *root; + char *target_root; + char *cwd; + char *target_cwd; + char *output; + int verbosity; + grub_syslinux_flavour_t flav; +}; + +static struct argp_option options[] = { + {"target-root", 't', N_("DIR"), 0, + N_("root directory as it will be seen on runtime [default=/]."), 0}, + {"root", 'r', N_("DIR"), 0, + N_("root directory of the syslinux disk [default=/]."), 0}, + {"target-cwd", 'T', N_("DIR"), 0, + N_("current directory as it will be seen on runtime [default=$pwd]."), 0}, + {"cwd", 'c', N_("DIR"), 0, + N_("current directory of the syslinux disk [default=$pwd]."), 0}, + + {"output", 'o', N_("FILE"), 0, N_("write output to FILE [default=stdout]."), 0}, + {"isolinux", 'i', 0, 0, N_("assume isolinux."), 0}, + {"pxelinux", 'p', 0, 0, N_("assume pxelinux."), 0}, + {"syslinux", 's', 0, 0, N_("assume syslinux."), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 't': + free (arguments->target_root); + arguments->target_root = xstrdup (arg); + break; + + case 'T': + free (arguments->target_cwd); + arguments->target_cwd = xstrdup (arg); + break; + + case 'c': + free (arguments->cwd); + arguments->cwd = xstrdup (arg); + break; + + case 'o': + free (arguments->output); + arguments->output = xstrdup (arg); + break; + + case ARGP_KEY_ARG: + if (!arguments->input) + { + arguments->input = xstrdup (arg); + return 0; + } + return ARGP_ERR_UNKNOWN; + + case 'r': + free (arguments->root); + arguments->root = xstrdup (arg); + return 0; + + case 'i': + arguments->flav = GRUB_SYSLINUX_ISOLINUX; + break; + + case 's': + arguments->flav = GRUB_SYSLINUX_SYSLINUX; + break; + case 'p': + arguments->flav = GRUB_SYSLINUX_PXELINUX; + break; + + case 'v': + arguments->verbosity++; + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("FILE"), + N_("Transform syslinux config into GRUB one."), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + /* Check for options. */ + memset (&arguments, 0, sizeof (struct arguments)); + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (!arguments.input) + { + fprintf (stderr, "%s", _("Missing arguments\n")); + exit(1); + } + + grub_init_all (); + grub_hostfs_init (); + grub_host_init (); + + char *t, *inpfull, *rootfull, *res; + t = canonicalize_file_name (arguments.input); + if (!t) + { + grub_util_error (_("cannot open `%s': %s"), arguments.input, + strerror (errno)); + } + + inpfull = xasprintf ("(host)/%s", t); + free (t); + + t = canonicalize_file_name (arguments.root ? : "/"); + if (!t) + { + grub_util_error (_("cannot open `%s': %s"), arguments.root, + strerror (errno)); + } + + rootfull = xasprintf ("(host)/%s", t); + free (t); + + char *cwd = xstrdup (arguments.input); + char *p = strrchr (cwd, '/'); + char *cwdfull; + if (p) + *p = '\0'; + else + { + free (cwd); + cwd = xstrdup ("."); + } + + t = canonicalize_file_name (arguments.cwd ? : cwd); + if (!t) + { + grub_util_error (_("cannot open `%s': %s"), arguments.root, + strerror (errno)); + } + + cwdfull = xasprintf ("(host)/%s", t); + free (t); + + res = grub_syslinux_config_file (rootfull, arguments.target_root ? : "/", + cwdfull, arguments.target_cwd ? : cwd, + inpfull, arguments.flav); + if (!res) + grub_util_error ("%s", grub_errmsg); + if (arguments.output) + { + FILE *f = grub_util_fopen (arguments.output, "wb"); + if (!f) + grub_util_error (_("cannot open `%s': %s"), arguments.output, + strerror (errno)); + fwrite (res, 1, strlen (res), f); + fclose (f); + } + else + printf ("%s\n", res); + free (res); + free (rootfull); + free (inpfull); + free (arguments.root); + free (arguments.output); + free (arguments.target_root); + free (arguments.input); + free (cwdfull); + free (cwd); + + return 0; +} diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in index c748b096a..0a82d85e3 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -179,7 +179,7 @@ if [ "x$gfxterm" = x1 ]; then if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT}"` ; then EOF else - for dir in "${pkgdatadir}" "`echo '/@bootdirname@/@grubdirname@' | sed "s,//*,/,g"`" /usr/share/grub ; do + for dir in "${pkgdatadir}" "`echo "$GRUB_ROOT"'/@bootdirname@/@grubdirname@' | sed "s,//*,/,g"`" "`echo "$GRUB_ROOT"'/usr/share/grub' | sed "s,//*,/,g"`" ; do for basename in unicode unifont ascii; do path="${dir}/${basename}.pf2" if is_path_readable_by_grub "${path}" > /dev/null ; then diff --git a/util/grub.d/10_hurd.in b/util/grub.d/10_hurd.in index 6fafe1a7c..3ae43b3d4 100644 --- a/util/grub.d/10_hurd.in +++ b/util/grub.d/10_hurd.in @@ -21,6 +21,16 @@ prefix="@prefix@" exec_prefix="@exec_prefix@" datarootdir="@datarootdir@" +if [ x$GRUB_PLATFORM = xx86 ]; then + check=--is-x86-multiboot +elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then + check=--is-i386-xen-pae-domu +elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then + check=--is-x86_64-xen-domu +else + exit 0 +fi + export TEXTDOMAIN=@PACKAGE@ export TEXTDOMAINDIR="@localedir@" @@ -40,11 +50,11 @@ all_of_them=true # FIXME: add l4 here? kernel= -for i in /boot/gnumach* ; do - if test -e $i ; then - basename=`basename $i` - dirname=`dirname $i` - rel_dirname=`make_system_path_relative_to_its_root $dirname` +for i in "$GRUB_ROOT"/boot/gnumach* ; do + if test -f "$i" && "${grub_file}" $check "$i" ; then + basename=`basename "$i"` + dirname=`dirname "$i"` + rel_dirname=`make_system_path_relative_to_its_root "$dirname"` gettext_printf "Found GNU Mach: %s" "$i" >&2 echo >&2 kernels="${kernels} ${rel_dirname}/${basename}" @@ -58,8 +68,8 @@ case "${GRUB_FS}" in *) hurd_fs="${GRUB_FS}fs" ;; esac -for i in /hurd/${hurd_fs}.static /hurd/exec ; do - if test -e "$i" ; then +for i in "$GRUB_ROOT"/hurd/${hurd_fs}.static "$GRUB_ROOT"/hurd/exec ; do + if test -f "$i" ; then gettext_printf "Found Hurd module: %s" "$i" >&2 echo >&2 at_least_one=true @@ -73,7 +83,7 @@ if ${at_least_one} ; then : ; else exit 0 fi -if ${all_of_them} && test -e /lib/ld.so.1 ; then : ; else +if ${all_of_them} && test -f "$GRUB_ROOT"/lib/ld.so.1 ; then : ; else gettext "Some Hurd stuff found, but not enough to boot." >&2 echo >&2 exit 1 diff --git a/util/grub.d/10_illumos.in b/util/grub.d/10_illumos.in index 0de616e89..00f1d6816 100644 --- a/util/grub.d/10_illumos.in +++ b/util/grub.d/10_illumos.in @@ -27,6 +27,21 @@ export TEXTDOMAINDIR="@localedir@" CLASS="--class os" +if [ x$GRUB_PLATFORM = xx86 ]; then + check=--is-x86-multiboot +elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then + check=--is-i386-xen-pae-domu +elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then + check=--is-x86_64-xen-domu +else + exit 0 +fi + +if ! test -f "$GRUB_ROOT"/platform/i86pc/kernel || ! "${grub_file}" $check "$GRUB_ROOT"/platform/i86pc/kernel; then + exit 0 +fi + + case "${GRUB_DISTRIBUTOR}" in *) OS="Illumos" @@ -45,7 +60,7 @@ message="$(gettext_printf "Loading kernel of Illumos ...")" else ISADIR= fi - zfs-bootfs $($grub_mkrelpath /) ZFS_BOOTFS + zfs-bootfs $($grub_mkrelpath "$GRUB_ROOT"/) ZFS_BOOTFS echo '$(echo "$message" | grub_quote)' multiboot $($grub_mkrelpath /platform/i86pc/kernel)/\$ISADIR/unix /platform/i86pc/kernel/\$ISADIR/unix -B \$ZFS_BOOTFS,console=text module $($grub_mkrelpath /platform/i86pc)/\$ISADIR/boot_archive /platform/i86pc/\$ISADIR/boot_archive diff --git a/util/grub.d/10_kfreebsd.in b/util/grub.d/10_kfreebsd.in index 7b04a87c8..2cc41a325 100644 --- a/util/grub.d/10_kfreebsd.in +++ b/util/grub.d/10_kfreebsd.in @@ -27,6 +27,16 @@ export TEXTDOMAINDIR="@localedir@" CLASS="--class os" +if [ x$GRUB_PLATFORM = xx86 ]; then + check=--is-x86-kfreebsd +elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then + check=--is-i386-xen-pae-domu +elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then + check=--is-x86_64-xen-domu +else + exit 0 +fi + case "${GRUB_DISTRIBUTOR}" in Debian) OS="${GRUB_DISTRIBUTOR} GNU/kFreeBSD" @@ -122,10 +132,10 @@ EOF zfs) load_kfreebsd_module opensolaris false - ls "/boot/zfs/zpool.cache" > /dev/null + ls "$GRUB_ROOT/boot/zfs/zpool.cache" > /dev/null printf '%s\n' "${prepare_boot_cache}" sed "s/^/$submenu_indentation/" << EOF - kfreebsd_module $(make_system_path_relative_to_its_root /boot)/zfs/zpool.cache type=/boot/zfs/zpool.cache + kfreebsd_module $(make_system_path_relative_to_its_root $GRUB_ROOT/boot)/zfs/zpool.cache type=/boot/zfs/zpool.cache EOF ;; esac @@ -143,8 +153,8 @@ EOF EOF } -list=`for i in /boot/kfreebsd-* /boot/kernel/kernel ; do - if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi +list=`for i in $GRUB_ROOT/boot/kfreebsd-* $GRUB_ROOT/boot/kernel/kernel ; do + if grub_file_is_not_garbage "$i" && ${grub_file} $check "$i"; then echo -n "$i " ; fi done` prepare_boot_cache= boot_device_id= @@ -163,8 +173,8 @@ while [ "x$list" != "x" ] ; do dirname=`dirname $kfreebsd` rel_dirname=`make_system_path_relative_to_its_root $dirname` - if [ -f /boot/device.hints ] ; then - devices=/boot/device.hints + if [ -f "$GRUB_ROOT"/boot/device.hints ] ; then + devices="$GRUB_ROOT"/boot/device.hints devices_basename=`basename $devices` devices_dirname=`dirname $devices` devices_rel_dirname=`make_system_path_relative_to_its_root $devices_dirname` @@ -181,14 +191,14 @@ while [ "x$list" != "x" ] ; do # zpool name kfreebsd_device=$(${grub_probe} -t fs_label --device ${GRUB_DEVICE}) # filesystem name (empty string for the main filesystem) - kfreebsd_device="${kfreebsd_device}$(${grub_mkrelpath} / | sed -e "s,/*@$,,")" + kfreebsd_device="${kfreebsd_device}$(${grub_mkrelpath} "$GRUB_ROOT"/ | sed -e "s,/*@$,,")" ;; *) kfreebsd_device=${kfreebsd_fs}id/${GRUB_DEVICE_UUID} # Debian GNU/kFreeBSD can't remount root if it's supplied as UUID but # as an UUID if [ "x${GRUB_DISTRIBUTOR}" = "xDebian" ] \ - && ! (cat /etc/fstab | awk '!/^[[:space:]]*#/ && $2=="/" { print $1; }' \ + && ! (cat "$GRUB_ROOT"/etc/fstab | awk '!/^[[:space:]]*#/ && $2=="/" { print $1; }' \ | grep "${kfreebsd_fs}id/${GRUB_DEVICE_UUID}" > /dev/null); then kfreebsd_device=${GRUB_DEVICE} fi @@ -199,8 +209,8 @@ while [ "x$list" != "x" ] ; do alt_version=`echo $version | sed -e "s,\.old$,,g"` module_dir= - for i in "/lib/modules/${version}" "/lib/modules/${alt_version}" \ - "/boot/kernel"; do + for i in "$GRUB_ROOT/lib/modules/${version}" "$GRUB_ROOT/lib/modules/${alt_version}" \ + "$GRUB_ROOT/boot/kernel"; do if test -e "$i" ; then module_dir="$i" break diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in index 024a89e3d..305540c88 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -31,6 +31,31 @@ vt_handoff="@VT_HANDOFF@" export TEXTDOMAIN=@PACKAGE@ export TEXTDOMAINDIR="@localedir@" +if [ x$GRUB_PLATFORM = xx86 ]; then + check=--is-x86-linux32 +elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then + check=--is-i386-xen-pae-domu +elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then + check=--is-x86_64-xen-domu +else + check=--is-${GRUB_PLATFORM}-linux +fi + +case "x$GRUB_PLATFORM" in + xx86) + list=`for i in "$GRUB_ROOT"/boot/vmlinuz-* "$GRUB_ROOT"/vmlinuz-* "$GRUB_ROOT"/boot/kernel-* ; do + if grub_file_is_not_garbage "$i" && "${grub_file}" $check "$i" ; then echo -n "$i " ; fi + done` ;; + *) + list=`for i in "$GRUB_ROOT"/boot/vmlinuz-* "$GRUB_ROOT"/boot/vmlinux-* "$GRUB_ROOT"/vmlinuz-* "$GRUB_ROOT"/vmlinux-* "$GRUB_ROOT"/boot/kernel-* ; do + if grub_file_is_not_garbage "$i" && "${grub_file}" $check "$i" ; then echo -n "$i " ; fi + done` ;; +esac + +if [ x"$list" = x ]; then + exit 0 +fi + CLASS="--class gnu-linux --class gnu --class os" if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then @@ -70,14 +95,14 @@ fi case x"$GRUB_FS" in xbtrfs) - rootsubvol="`make_system_path_relative_to_its_root /`" + rootsubvol="`make_system_path_relative_to_its_root "$GRUB_ROOT"/`" rootsubvol="${rootsubvol#/}" if [ "x${rootsubvol}" != x ]; then GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}" fi;; xzfs) rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true` - bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`" + bootfs="`make_system_path_relative_to_its_root "$GRUB_ROOT"/ | sed -e "s,@$,,"`" LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}" ;; esac @@ -151,7 +176,7 @@ linux_entry () echo " insmod gzio" | sed "s/^/$submenu_indentation/" - if [ x$dirname = x/ ]; then + if [ x$dirname = x"$GRUB_ROOT"/ ]; then if [ -z "${prepare_root_cache}" ]; then prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)" fi @@ -194,24 +219,12 @@ EOF EOF } -machine=`uname -m` -case "x$machine" in - xi?86 | xx86_64) - list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do - if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi - done` ;; - *) - list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do - if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi - done` ;; -esac - -case "$machine" in - i?86) GENKERNEL_ARCH="x86" ;; +case "$GRUB_PLATFORM" in + x86 | i386-xen-pae | x86_64-xen) GENKERNEL_ARCH="x86" ;; mips|mips64) GENKERNEL_ARCH="mips" ;; mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;; arm*) GENKERNEL_ARCH="arm" ;; - *) GENKERNEL_ARCH="$machine" ;; + *) GENKERNEL_ARCH="$GRUB_PLATFORM" ;; esac prepare_boot_cache= @@ -303,7 +316,7 @@ while [ "x$list" != "x" ] ; do done config= - for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do + for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "$GRUB_ROOT/etc/kernels/kernel-config-${version}" ; do if test -e "${i}" ; then config="${i}" break diff --git a/util/grub.d/10_netbsd.in b/util/grub.d/10_netbsd.in index 21c7e7d77..5d88bbc70 100644 --- a/util/grub.d/10_netbsd.in +++ b/util/grub.d/10_netbsd.in @@ -22,6 +22,16 @@ exec_prefix="@exec_prefix@" datarootdir="@datarootdir@" . "@datadir@/@PACKAGE@/grub-mkconfig_lib" +if [ x$GRUB_PLATFORM = xx86 ]; then + check=--is-x86-kfreebsd +elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then + check=--is-i386-xen-pae-domu +elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then + check=--is-x86_64-xen-domu +else + exit 0 +fi + export TEXTDOMAIN=@PACKAGE@ export TEXTDOMAINDIR="@localedir@" @@ -36,19 +46,13 @@ netbsd_load_fs_module () loader="$1" # "knetbsd" or "multiboot" kernel="$2" # absolute path to the kernel file - case $(zcat -f "${kernel}" | file -bL - | cut -d , -f 2 | tr -d ' ') in - Intel80386) - karch="i386" - ;; - x86-64) + if "${grub_file}" --is-x86_64-kfreebsd "${kernel}"; then karch="amd64" - ;; - *) - return - ;; - esac + else + karch="i386" + fi - case $(${grub_probe} --target=fs -d ${GRUB_DEVICE}) in + case $GRUB_FS in ext2) kmod="ext2fs" ;; @@ -67,7 +71,7 @@ netbsd_load_fs_module () esac kversion=$(zcat -f "${kernel}" | strings | sed -n -e '/^@(#)NetBSD/ { s/^@(#)NetBSD \([0-9\.]*\) .*$/\1/g ; p ; q ; }') - kmodule="/stand/${karch}/${kversion}/modules/${kmod}/${kmod}.kmod" + kmodule="$GRUB_ROOT/stand/${karch}/${kversion}/modules/${kmod}/${kmod}.kmod" if test -z "$karch" -o -z "$kversion" -o ! -f "${kmodule}"; then return @@ -94,6 +98,10 @@ netbsd_entry () type="$3" args="$4" # extra arguments appended to loader command + if [ "x${loader}" = xmultiboot ] && [ x$GRUB_PLATFORM = xx86 ] && ! "$grub_file" --is-x86-multiboot "$kernel"; then + return + fi + kroot_device="$(echo ${GRUB_DEVICE} | sed -e 's,^/dev/r,,')" if [ -z "$boot_device_id" ]; then @@ -147,10 +155,13 @@ pattern="^ELF[^,]*executable.*statically linked" submenu_indentation="" is_top_level=true -for k in /netbsd $(ls -t /netbsd?* 2>/dev/null) ; do +for k in "$GRUB_ROOT"/netbsd $(ls -t "$GRUB_ROOT"/netbsd?* 2>/dev/null) ; do if ! grub_file_is_not_garbage "$k" ; then continue fi + if ! "$grub_file" $check "$k"; then + continue + fi if ! (zcat -f "$k" | file -bL - | grep -q "${pattern}") 2>/dev/null ; then continue fi diff --git a/util/grub.d/10_xnu.in b/util/grub.d/10_xnu.in index 4270385f3..54c06135c 100644 --- a/util/grub.d/10_xnu.in +++ b/util/grub.d/10_xnu.in @@ -26,18 +26,28 @@ export TEXTDOMAINDIR="@localedir@" . "@datadir@/@PACKAGE@/grub-mkconfig_lib" +if [ x$GRUB_PLATFORM != xx86 ]; then + exit 0 +fi + osx_entry() { if [ x$2 = x32 ]; then # TRANSLATORS: it refers to kernel architecture (32-bit) bitstr="$(gettext "(32-bit)")" + if ! [ -f "$GRUB_ROOT"/mach_kernel ] || ! "${grub_file}" --is-i386-xnu "$GRUB_ROOT"/mach_kernel; then + return; + fi else # TRANSLATORS: it refers to kernel architecture (64-bit) bitstr="$(gettext "(64-bit)")" + if ! [ -f "$GRUB_ROOT"/mach_kernel ] || ! "${grub_file}" --is-x86_64-xnu "$GRUB_ROOT"/mach_kernel; then + return; + fi fi # TRANSLATORS: it refers on the OS residing on device %s onstr="$(gettext_printf "(on %s)" "${GRUB_DEVICE}")" cat << EOF -menuentry '$(echo "Darwin/Mac OS X $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'osprober-xnu-$2-$(grub_get_device_id "${GRUB_DEVICE}")' { +menuentry '$(echo "Darwin/Mac OS X $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'xnu-$2-$(grub_get_device_id "${GRUB_DEVICE}")' { EOF save_default_entry | grub_add_tab prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab @@ -50,7 +60,7 @@ EOF fi fi if [ \$do_resume = 0 ]; then - xnu_uuid ${OSXUUID} uuid + xnu_uuid ${GRUB_DEVICE_UUID} uuid if [ -f /Extra/DSDT.aml ]; then acpi -e /Extra/DSDT.aml fi @@ -90,6 +100,5 @@ EOF EOF } -OSXUUID="`${grub_probe} --target=fs_uuid --device ${GRUB_DEVICE} 2> /dev/null`" osx_entry xnu_kernel 32 osx_entry xnu_kernel64 64 diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in index 10a3db5d3..70e8890d9 100644 --- a/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in @@ -26,6 +26,10 @@ datarootdir="@datarootdir@" export TEXTDOMAIN=@PACKAGE@ export TEXTDOMAINDIR="@localedir@" +if [ x$GRUB_PLATFORM != xx86 ]; then + exit 0 +fi + CLASS="--class gnu-linux --class gnu --class os --class xen" if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then @@ -66,14 +70,14 @@ fi case x"$GRUB_FS" in xbtrfs) - rootsubvol="`make_system_path_relative_to_its_root /`" + rootsubvol="`make_system_path_relative_to_its_root "$GRUB_ROOT"/`" rootsubvol="${rootsubvol#/}" if [ "x${rootsubvol}" != x ]; then GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}" fi;; xzfs) rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true` - bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`" + bootfs="`make_system_path_relative_to_its_root "$GRUB_ROOT"/ | sed -e "s,@$,,"`" LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}" ;; esac @@ -142,19 +146,9 @@ EOF EOF } -linux_list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* /boot/kernel-*; do - if grub_file_is_not_garbage "$i"; then - basename=$(basename $i) - version=$(echo $basename | sed -e "s,^[^0-9]*-,,g") - dirname=$(dirname $i) - config= - for j in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do - if test -e "${j}" ; then - config="${j}" - break - fi - done - if (grep -qx "CONFIG_XEN_DOM0=y" "${config}" 2> /dev/null || grep -qx "CONFIG_XEN_PRIVILEGED_GUEST=y" "${config}" 2> /dev/null); then echo -n "$i " ; fi +linux_list=`for i in "$GRUB_ROOT"/boot/vmlinu[xz]-* "$GRUB_ROOT"/vmlinu[xz]-* "$GRUB_ROOT"/boot/kernel-*; do + if grub_file_is_not_garbage "$i" && "${grub_file}" --is-x86-xen-dom0 "$i"; then + echo -n "$i " ; fi done` if [ "x${linux_list}" = "x" ] ; then @@ -170,8 +164,8 @@ file_is_not_sym () { esac } -xen_list=`for i in /boot/xen*; do - if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then echo -n "$i " ; fi +xen_list=`for i in "$GRUB_ROOT"/boot/xen*; do + if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" && ${grub_file} --is-x86-multiboot "$i"; then echo -n "$i " ; fi done` prepare_boot_cache= boot_device_id= diff --git a/util/misc.c b/util/misc.c index 9eb1fc13c..386d8472f 100644 --- a/util/misc.c +++ b/util/misc.c @@ -146,7 +146,8 @@ void grub_util_write_image_at (const void *img, size_t size, off_t offset, FILE *out, const char *name) { - grub_util_info ("writing 0x%llx bytes at offset 0x%llx", + grub_util_info ("writing 0x%" GRUB_HOST_PRIxLONG_LONG " bytes at offset 0x%" + GRUB_HOST_PRIxLONG_LONG, (unsigned long long) size, (unsigned long long) offset); if (fseeko (out, offset, SEEK_SET) == -1) grub_util_error (_("cannot seek `%s': %s"), @@ -160,7 +161,7 @@ void grub_util_write_image (const char *img, size_t size, FILE *out, const char *name) { - grub_util_info ("writing 0x%llx bytes", (unsigned long long) size); + grub_util_info ("writing 0x%" GRUB_HOST_PRIxLONG_LONG " bytes", (unsigned long long) size); if (fwrite (img, 1, size, out) != size) { if (!name) diff --git a/util/mkimage.c b/util/mkimage.c index ad12f8a76..26d9816e0 100644 --- a/util/mkimage.c +++ b/util/mkimage.c @@ -859,7 +859,7 @@ grub_arm_reloc_thm_call (grub_uint16_t *target, Elf32_Addr sym_addr) somewhere else. */ if (offset < -0x200000 || offset >= 0x200000) return grub_error (GRUB_ERR_BAD_MODULE, - N_("THM_CALL Relocation out of range.")); + "THM_CALL Relocation out of range."); grub_dprintf ("dl", " relative destination = %p", (char *) target + offset); @@ -879,7 +879,7 @@ grub_arm_reloc_thm_jump19 (grub_uint16_t *target, Elf32_Addr sym_addr) if (!(sym_addr & 1)) return grub_error (GRUB_ERR_BAD_MODULE, - N_("Relocation targeting wrong execution state")); + "Relocation targeting wrong execution state"); offset = grub_arm_thm_jump19_get_offset (target); @@ -888,7 +888,7 @@ grub_arm_reloc_thm_jump19 (grub_uint16_t *target, Elf32_Addr sym_addr) if (!grub_arm_thm_jump19_check_offset (offset)) return grub_error (GRUB_ERR_BAD_MODULE, - N_("THM_JUMP19 Relocation out of range.")); + "THM_JUMP19 Relocation out of range."); grub_arm_thm_jump19_set_offset (target, offset); @@ -907,14 +907,14 @@ grub_arm_reloc_jump24 (grub_uint32_t *target, Elf32_Addr sym_addr) if (sym_addr & 1) return grub_error (GRUB_ERR_BAD_MODULE, - N_("Relocation targeting wrong execution state")); + "Relocation targeting wrong execution state"); offset = grub_arm_jump24_get_offset (target); offset += sym_addr; if (!grub_arm_jump24_check_offset (offset)) return grub_error (GRUB_ERR_BAD_MODULE, - N_("JUMP24 Relocation out of range.")); + "JUMP24 Relocation out of range."); grub_arm_jump24_set_offset (target, offset); @@ -1023,8 +1023,9 @@ grub_install_generate_image (const char *dir, const char *prefix, { size_t curs; curs = ALIGN_ADDR (grub_util_get_image_size (pubkey_paths[i])); - grub_util_info ("the size of public key %zd is 0x%llx", - i, (unsigned long long) curs); + grub_util_info ("the size of public key %u is 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned) i, (unsigned long long) curs); total_module_size += curs + sizeof (struct grub_module_header); } } @@ -1032,7 +1033,7 @@ grub_install_generate_image (const char *dir, const char *prefix, if (memdisk_path) { memdisk_size = ALIGN_UP(grub_util_get_image_size (memdisk_path), 512); - grub_util_info ("the size of memory disk is 0x%llx", + grub_util_info ("the size of memory disk is 0x%" GRUB_HOST_PRIxLONG_LONG, (unsigned long long) memdisk_size); total_module_size += memdisk_size + sizeof (struct grub_module_header); } @@ -1041,7 +1042,7 @@ grub_install_generate_image (const char *dir, const char *prefix, { config_size_pure = grub_util_get_image_size (config_path) + 1; config_size = ALIGN_ADDR (config_size_pure); - grub_util_info ("the size of config file is 0x%llx", + grub_util_info ("the size of config file is 0x%" GRUB_HOST_PRIxLONG_LONG, (unsigned long long) config_size); total_module_size += config_size + sizeof (struct grub_module_header); } @@ -1056,7 +1057,7 @@ grub_install_generate_image (const char *dir, const char *prefix, total_module_size += (ALIGN_ADDR (grub_util_get_image_size (p->name)) + sizeof (struct grub_module_header)); - grub_util_info ("the total module size is 0x%llx", + grub_util_info ("the total module size is 0x%" GRUB_HOST_PRIxLONG_LONG, (unsigned long long) total_module_size); if (image_target->voidp_sizeof == 4) @@ -1196,13 +1197,15 @@ grub_install_generate_image (const char *dir, const char *prefix, offset += prefix_size; } - grub_util_info ("kernel_img=%p, kernel_size=0x%llx", kernel_img, + grub_util_info ("kernel_img=%p, kernel_size=0x%" GRUB_HOST_PRIxLONG_LONG, + kernel_img, (unsigned long long) kernel_size); compress_kernel (image_target, kernel_img, kernel_size + total_module_size, &core_img, &core_size, comp); free (kernel_img); - grub_util_info ("the core size is 0x%llx", (unsigned long long) core_size); + grub_util_info ("the core size is 0x%" GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) core_size); if (!(image_target->flags & PLATFORM_FLAGS_DECOMPRESSORS) && image_target->total_module_size != TARGET_NO_FIELD) diff --git a/util/render-label.c b/util/render-label.c index 6bef638da..9702ed953 100644 --- a/util/render-label.c +++ b/util/render-label.c @@ -41,7 +41,7 @@ struct header grub_uint8_t magic; grub_uint16_t width; grub_uint16_t height; -} __attribute__ ((packed)); +} GRUB_PACKED; static struct grub_video_palette_data ieee1275_palette[256]; @@ -167,10 +167,6 @@ grub_util_render_label (const char *label_font, fontfull = xasprintf ("(host)/%s", t); free (t); - grub_init_all (); - grub_hostfs_init (); - grub_host_init (); - grub_font_loader_init (); font = grub_font_load (fontfull); if (!font) diff --git a/util/setup.c b/util/setup.c index 60d46e847..3945eff3a 100644 --- a/util/setup.c +++ b/util/setup.c @@ -153,8 +153,8 @@ save_blocklists (grub_disk_addr_t sector, unsigned offset, unsigned length, struct grub_boot_blocklist *prev = bl->block + 1; grub_uint64_t seclen; - grub_util_info ("saving <%" PRIuGRUB_UINT64_T ",%u,%u>", - sector, offset, length); + grub_util_info ("saving <%" GRUB_HOST_PRIuLONG_LONG ",%u,%u>", + (unsigned long long) sector, offset, length); if (bl->first_sector == (grub_disk_addr_t) -1) { @@ -250,7 +250,8 @@ void SETUP (const char *dir, const char *boot_file, const char *core_file, const char *dest, int force, - int fs_probe, int allow_floppy) + int fs_probe, int allow_floppy, + int add_rs_codes __attribute__ ((unused))) /* unused on sparc64 */ { char *core_path; char *boot_img, *core_img, *boot_path; @@ -488,7 +489,11 @@ SETUP (const char *dir, nsec = core_sectors; - maxsec = 2 * core_sectors; + if (add_rs_codes) + maxsec = 2 * core_sectors; + else + maxsec = core_sectors; + if (maxsec > ((0x78000 - GRUB_KERNEL_I386_PC_LINK_ADDR) >> GRUB_DISK_SECTOR_BITS)) maxsec = ((0x78000 - GRUB_KERNEL_I386_PC_LINK_ADDR) @@ -545,15 +550,16 @@ SETUP (const char *dir, write_rootdev (root_dev, boot_img, bl.first_sector); - core_img = realloc (core_img, nsec * GRUB_DISK_SECTOR_SIZE); + /* Round up to the nearest sector boundary, and zero the extra memory */ + core_img = xrealloc (core_img, nsec * GRUB_DISK_SECTOR_SIZE); + assert (core_img && (nsec * GRUB_DISK_SECTOR_SIZE >= core_size)); + memset (core_img + core_size, 0, nsec * GRUB_DISK_SECTOR_SIZE - core_size); + bl.first_block = (struct grub_boot_blocklist *) (core_img + GRUB_DISK_SECTOR_SIZE - sizeof (*bl.block)); grub_size_t no_rs_length; - grub_set_unaligned32 ((core_img + GRUB_DISK_SECTOR_SIZE - + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY), - grub_host_to_target32 (nsec * GRUB_DISK_SECTOR_SIZE - core_size)); no_rs_length = grub_target_to_host16 (grub_get_unaligned16 (core_img + GRUB_DISK_SECTOR_SIZE @@ -562,14 +568,21 @@ SETUP (const char *dir, if (no_rs_length == 0xffff) grub_util_error ("%s", _("core.img version mismatch")); - void *tmp = xmalloc (core_size); - grub_memcpy (tmp, core_img, core_size); - grub_reed_solomon_add_redundancy (core_img + no_rs_length + GRUB_DISK_SECTOR_SIZE, - core_size - no_rs_length - GRUB_DISK_SECTOR_SIZE, - nsec * GRUB_DISK_SECTOR_SIZE - - core_size); - assert (grub_memcmp (tmp, core_img, core_size) == 0); - free (tmp); + if (add_rs_codes) + { + grub_set_unaligned32 ((core_img + GRUB_DISK_SECTOR_SIZE + + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY), + grub_host_to_target32 (nsec * GRUB_DISK_SECTOR_SIZE - core_size)); + + void *tmp = xmalloc (core_size); + grub_memcpy (tmp, core_img, core_size); + grub_reed_solomon_add_redundancy (core_img + no_rs_length + GRUB_DISK_SECTOR_SIZE, + core_size - no_rs_length - GRUB_DISK_SECTOR_SIZE, + nsec * GRUB_DISK_SECTOR_SIZE + - core_size); + assert (grub_memcmp (tmp, core_img, core_size) == 0); + free (tmp); + } /* Write the core image onto the disk. */ for (i = 0; i < nsec; i++)