From fe4ae213319ab56f00c13f4c1c6cdaaf3d5006b6 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 9 Dec 2013 00:14:59 +0000 Subject: [PATCH 001/131] * util/grub-mkconfig.in: Add missing newline to output. --- ChangeLog | 4 ++++ util/grub-mkconfig.in | 1 + 2 files changed, 5 insertions(+) diff --git a/ChangeLog b/ChangeLog index 200393209..548423652 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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/util/grub-mkconfig.in b/util/grub-mkconfig.in index 7b85c8817..3390ba90f 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -267,6 +267,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} From 4f4ea1b4496375e3a3315d6db28612179be5bf73 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 9 Dec 2013 14:22:31 +0100 Subject: [PATCH 002/131] * 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. --- ChangeLog | 6 ++++++ grub-core/kern/ia64/dl_helper.c | 12 +----------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 548423652..9ce084d58 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. 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))) From 9a945e2a24b941da15bcafd4fdacc9bab22b1516 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 9 Dec 2013 14:24:56 +0100 Subject: [PATCH 003/131] * grub-core/kern/emu/cache.c [__ia64__]: Use our cache cleaning routine on ia64 as __clear_cache is a dummy on ia64. --- ChangeLog | 5 +++++ grub-core/kern/emu/cache.c | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9ce084d58..f329e87ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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): 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); From 7b54b62682f1ce71e33b13a67bfa0c0f3cf4546e Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 9 Dec 2013 15:43:27 +0100 Subject: [PATCH 004/131] * 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. --- ChangeLog | 6 ++++++ grub-core/kern/powerpc/dl.c | 10 ---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index f329e87ef..cddcf3897 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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 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)) From 21eee750b76a0420844c03791a222e978a7fcc1b Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 9 Dec 2013 15:51:12 +0100 Subject: [PATCH 005/131] * grub-core/kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Check range of R_SPARC_HI22. Implement R_SPARC_LM22. --- ChangeLog | 6 ++++++ grub-core/kern/sparc64/dl.c | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index cddcf3897..2b9f300bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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): diff --git a/grub-core/kern/sparc64/dl.c b/grub-core/kern/sparc64/dl.c index fa086ff5c..c6cac6838 100644 --- a/grub-core/kern/sparc64/dl.c +++ b/grub-core/kern/sparc64/dl.c @@ -90,6 +90,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 */ From 7a148da6dd17cf98001b452ddf4e2c7612dd4e99 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 10 Dec 2013 00:01:27 +0100 Subject: [PATCH 006/131] Implement sparc64 trampolines (needed for sparc64-emu). --- ChangeLog | 4 +++ grub-core/kern/dl.c | 6 ++-- grub-core/kern/emu/full.c | 2 +- grub-core/kern/sparc64/dl.c | 66 +++++++++++++++++++++++++++++++++++++ include/grub/dl.h | 4 +-- 5 files changed, 76 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2b9f300bb..36d1d941d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c index 90589f75b..98f858a38 100644 --- a/grub-core/kern/dl.c +++ b/grub-core/kern/dl.c @@ -225,7 +225,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; @@ -241,7 +241,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; @@ -304,7 +304,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/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/sparc64/dl.c b/grub-core/kern/sparc64/dl.c index c6cac6838..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)) 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 From eaf01c25fe0bde72d85f2913a14c04fe4d9192b8 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 10 Dec 2013 00:05:28 +0100 Subject: [PATCH 007/131] Add missing compile and link options for sparc64-emu. --- ChangeLog | 4 ++++ conf/Makefile.common | 4 ++++ configure.ac | 14 +++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 36d1d941d..d330978fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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). diff --git a/conf/Makefile.common b/conf/Makefile.common index 47f3b9a03..d6da66cf5 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -10,6 +10,10 @@ if COND_sparc64_ieee1275 CFLAGS_PLATFORM += -mno-app-regs LDFLAGS_PLATFORM = -Wl,-melf64_sparc -mno-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 diff --git a/configure.ac b/configure.ac index 1e329c67d..0abbb9927 100644 --- a/configure.ac +++ b/configure.ac @@ -176,6 +176,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 +349,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) @@ -820,7 +829,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 +839,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 @@ -1585,6 +1596,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]) From dd73313cbafb7c6c87fb3a1159daa3639939f7d6 Mon Sep 17 00:00:00 2001 From: Jon McCune Date: Mon, 9 Dec 2013 16:52:12 -0800 Subject: [PATCH 008/131] Add --no-rs-codes flag to optionally disable reed-solomon codes in grub-install and grub-bios-setup for x86 BIOS targets. --- ChangeLog | 5 +++++ docs/grub.texi | 14 ++++++++++++- include/grub/util/install.h | 6 ++++-- util/grub-install.c | 19 +++++++++++++---- util/grub-setup.c | 19 +++++++++++++++-- util/setup.c | 41 ++++++++++++++++++++++++------------- 6 files changed, 81 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index 36d1d941d..3992fb977 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 Implement sparc64 trampolines (needed for sparc64-emu). diff --git a/docs/grub.texi b/docs/grub.texi index 54b02fd52..91fa1de5d 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -5994,8 +5994,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/include/grub/util/install.h b/include/grub/util/install.h index beca2d25d..20626d4e6 100644 --- a/include/grub/util/install.h +++ b/include/grub/util/install.h @@ -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); diff --git a/util/grub-install.c b/util/grub-install.c index 0aa7f48b4..5d22f902e 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -68,6 +68,7 @@ static int have_load_cfg = 0; static FILE * load_cfg_f = NULL; static char *load_cfg; static int install_bootsector = 1; +static int add_rs_codes = 1; enum { @@ -93,7 +94,8 @@ enum OPTION_DEBUG_IMAGE, OPTION_NO_FLOPPY, OPTION_DISK_MODULE, - OPTION_NO_BOOTSECTOR + OPTION_NO_BOOTSECTOR, + OPTION_NO_RS_CODES, }; static int fs_probe = 1; @@ -180,6 +182,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; @@ -238,6 +244,9 @@ 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}, @@ -1435,12 +1444,13 @@ 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'", + grub_util_info ("%sgrub-bios-setup %s %s %s %s %s --directory='%s' --device-map='%s' '%s'", 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); @@ -1449,7 +1459,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); break; } case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: @@ -1475,7 +1485,8 @@ 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; } 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/setup.c b/util/setup.c index 337c304ef..60bce683c 100644 --- a/util/setup.c +++ b/util/setup.c @@ -248,7 +248,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; @@ -486,7 +487,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) @@ -543,15 +548,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 @@ -560,14 +566,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++) From 9f2f979bcf7bfd6cef08c17b5a432444ac8603dc Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Tue, 10 Dec 2013 09:55:27 +0400 Subject: [PATCH 009/131] always define config_directory and config_file as full pathname If configfile is relative pathname, extend it with current ($root) so its interpretation does not change if $root is changed later. Suggested by Vladimir Serbienko. --- grub-core/normal/main.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c index 991a59524..84df3601f 100644 --- a/grub-core/normal/main.c +++ b/grub-core/normal/main.c @@ -190,14 +190,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"); From 3f1423e78961c295f36b3575947cee2badc20a9c Mon Sep 17 00:00:00 2001 From: Leif Lindholm Date: Tue, 10 Dec 2013 16:46:46 +0000 Subject: [PATCH 010/131] * grub-core/lib/fdt.c: change memcpy => grub_memcpy --- ChangeLog | 4 ++++ grub-core/lib/fdt.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index aa4c05c3f..b706eb59c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 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; From 16c8f78513d312242c752fbc038e471eda65cc9e Mon Sep 17 00:00:00 2001 From: Leif Lindholm Date: Tue, 10 Dec 2013 12:24:57 +0000 Subject: [PATCH 011/131] efi: mm: make MAX_USABLE_ADDRESS platform-specific --- ChangeLog | 5 +++++ grub-core/kern/efi/mm.c | 20 ++++++++------------ include/grub/arm/efi/memory.h | 5 +++++ include/grub/arm64/efi/memory.h | 5 +++++ include/grub/i386/efi/memory.h | 5 +++++ include/grub/ia64/efi/memory.h | 5 +++++ include/grub/x86_64/efi/memory.h | 9 +++++++++ 7 files changed, 42 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index b706eb59c..62fdb03b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c index 6e9dace91..be37afd9d 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 @@ -64,7 +60,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 @@ -72,7 +68,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; @@ -92,7 +88,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) @@ -325,7 +321,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) @@ -343,9 +339,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/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/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/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/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 */ From 979742bc7e5e16d87b9eab9934f6f74ec2cf1b16 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 11 Dec 2013 11:28:48 +0100 Subject: [PATCH 012/131] * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Handle non-function pcrel21b relocation. It happens with .text.unlikely section. --- ChangeLog | 6 ++++++ grub-core/kern/ia64/dl.c | 21 +++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 62fdb03b2..ea697a806 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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 diff --git a/grub-core/kern/ia64/dl.c b/grub-core/kern/ia64/dl.c index e623cdc81..d6c183d33 100644 --- a/grub-core/kern/ia64/dl.c +++ b/grub-core/kern/ia64/dl.c @@ -76,15 +76,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; From 30d00537993d9ef3a5c3b56aa02d7da1c79bf869 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 11 Dec 2013 11:29:35 +0100 Subject: [PATCH 013/131] * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Add checks for relocation range. --- ChangeLog | 5 +++++ grub-core/kern/ia64/dl.c | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index ea697a806..37184be26 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/grub-core/kern/ia64/dl.c b/grub-core/kern/ia64/dl.c index d6c183d33..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 @@ -104,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; @@ -115,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; From 219401b8b9f1fc870f514ffc6fbb0419e5613093 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 11 Dec 2013 15:54:01 +0100 Subject: [PATCH 014/131] * include/grub/efi/api.h (grub_efi_device_path): Define length as unaligned u16 rather than u8[2]. --- ChangeLog | 5 +++++ grub-core/disk/efi/efidisk.c | 9 +++------ grub-core/loader/efi/chainloader.c | 7 ++----- include/grub/efi/api.h | 6 +++--- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 37184be26..5aa70bb3b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c index 3a7876329..68f6d9f75 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); @@ -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)) 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/include/grub/efi/api.h b/include/grub/efi/api.h index 3af09111a..ac0389cac 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -544,8 +544,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; +} __attribute__ ((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 +553,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) From 316dda716c04616a8e6ad0f59d6c472ad0165b1b Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 11 Dec 2013 15:57:08 +0100 Subject: [PATCH 015/131] Introduce grub_efi_packed_guid and use it where alignment is not guaranteed. --- ChangeLog | 5 ++ grub-core/commands/efi/acpi.c | 12 ++-- grub-core/commands/efi/lsefi.c | 2 +- grub-core/commands/efi/lssal.c | 4 +- grub-core/kern/efi/efi.c | 106 ++++++++++++++++----------------- include/grub/efi/api.h | 23 ++++--- 6 files changed, 82 insertions(+), 70 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5aa70bb3b..385155b44 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 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/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/lssal.c b/grub-core/commands/efi/lssal.c index fa8005b88..d123389fd 100644 --- a/grub-core/commands/efi/lssal.c +++ b/grub-core/commands/efi/lssal.c @@ -135,12 +135,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/kern/efi/efi.c b/grub-core/kern/efi/efi.c index a9b5b3972..4ba185cc6 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -445,20 +445,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: @@ -665,20 +664,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: @@ -692,22 +691,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->mbr_type, + (unsigned) hd->signature_type); } break; case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE: @@ -722,20 +720,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/include/grub/efi/api.h b/include/grub/efi/api.h index ac0389cac..d6d3ec745 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -526,6 +526,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]; +} __attribute__ ((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 @@ -608,7 +617,7 @@ 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)); typedef struct grub_efi_vendor_device_path grub_efi_vendor_device_path_t; @@ -802,7 +811,7 @@ 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)); typedef struct grub_efi_vendor_messaging_device_path grub_efi_vendor_messaging_device_path_t; @@ -840,7 +849,7 @@ 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)); typedef struct grub_efi_vendor_media_device_path grub_efi_vendor_media_device_path_t; @@ -859,7 +868,7 @@ 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; + grub_efi_packed_guid_t guid; } __attribute__ ((packed)); typedef struct grub_efi_protocol_device_path grub_efi_protocol_device_path_t; @@ -868,7 +877,7 @@ 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)); + grub_efi_packed_guid_t guid; } __attribute__ ((packed)); typedef struct grub_efi_piwg_device_path grub_efi_piwg_device_path_t; @@ -1126,7 +1135,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 @@ -1225,7 +1234,7 @@ 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)); typedef struct grub_efi_configuration_table grub_efi_configuration_table_t; From 3e3dff249f37878e8a1278befbd6bdc2da9cfc9f Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 11 Dec 2013 15:59:12 +0100 Subject: [PATCH 016/131] * grub-core/commands/efi/lssal.c: Fix terminating condition. --- ChangeLog | 4 ++++ grub-core/commands/efi/lssal.c | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 385155b44..ad5daf02a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/grub-core/commands/efi/lssal.c b/grub-core/commands/efi/lssal.c index d123389fd..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; } } From 44bbfa33b8376c0c3b87bc2bbed48df5827a518d Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 11 Dec 2013 16:11:17 +0100 Subject: [PATCH 017/131] Propagate the EFI commits to x86-efi specific parts. --- ChangeLog | 4 ++++ grub-core/commands/efi/loadbios.c | 2 +- grub-core/loader/efi/appleloader.c | 6 +++--- grub-core/loader/i386/xnu.c | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index ad5daf02a..ccbc2dc8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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/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/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. */ From 6644d9733dcbbe2e649c12642f14120f62145039 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 11 Dec 2013 16:16:21 +0100 Subject: [PATCH 018/131] * include/grub/efiemu/efiemu.h: Sync configuration table declaration with EFI counterpart. --- ChangeLog | 5 +++++ include/grub/efiemu/efiemu.h | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ccbc2dc8e..72c64542c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/include/grub/efiemu/efiemu.h b/include/grub/efiemu/efiemu.h index f241e7574..5c87662a4 100644 --- a/include/grub/efiemu/efiemu.h +++ b/include/grub/efiemu/efiemu.h @@ -183,13 +183,13 @@ 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)); 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)); typedef struct grub_efiemu_configuration_table64 grub_efiemu_configuration_table64_t; From dafff9ce44321b5dd043725968229563a0e5a76c Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 11 Dec 2013 17:06:00 +0100 Subject: [PATCH 019/131] * 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. --- ChangeLog | 6 + grub-core/normal/charset.c | 69 +-- grub-core/tests/checksums.h | 868 ++++++++++++++++++------------------ 3 files changed, 484 insertions(+), 459 deletions(-) diff --git a/ChangeLog b/ChangeLog index 72c64542c..9cec63f5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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 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/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 }, From 0df77d793c0436be656f982d96d4edaea4993f96 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Fri, 13 Dec 2013 12:56:14 +0100 Subject: [PATCH 020/131] Implement multiboot2 EFI BS specification. --- ChangeLog | 4 ++++ grub-core/loader/multiboot.c | 2 +- grub-core/loader/multiboot_mbi2.c | 32 ++++++++++++++++++++++++++++--- include/multiboot2.h | 2 ++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9cec63f5c..9c5073c10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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..2f5aa6294 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)) { @@ -362,6 +370,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 +646,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 +862,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 +881,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/include/multiboot2.h b/include/multiboot2.h index 58f2f6845..2e33cbf8d 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 From f684d7e1a96beab02d3f73a38ae7146cef0ead20 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 21:39:03 +0100 Subject: [PATCH 021/131] * grub-core/osdep/exec.c: Use unix version on cygwin. --- ChangeLog | 4 ++++ grub-core/osdep/exec.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9c5073c10..22130d062 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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 From df6fedcab1054cb238db9266aaea69b6dfee2dab Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 21:45:17 +0100 Subject: [PATCH 022/131] * .gitignore: Add .exe variants. Add missing files. Remove few outdated entries. --- .gitignore | 43 ++++++++++++++++++++++++++++++------------- ChangeLog | 5 +++++ 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 2292cc934..2b0156acd 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ ahci_test ascii.bitmaps ascii.h autom4te.cache -build_env.mk build-grub-gen-asciih build-grub-gen-widthspec build-grub-mkfont @@ -32,48 +31,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 @@ -104,17 +114,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 @@ -181,6 +192,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 @@ -202,7 +214,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 @@ -216,9 +228,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 22130d062..e3d7814fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. From 607a39f9f0fb62a761ad9e928d8d9bc29129fc3e Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 21:48:46 +0100 Subject: [PATCH 023/131] * include/grub/efi/api.h: Rename protocol and interface to avoid conflict. --- ChangeLog | 5 +++++ grub-core/kern/efi/efi.c | 2 +- include/grub/efi/api.h | 14 +++++++------- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index e3d7814fb..bdfe6394c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c index 4ba185cc6..19a57d553 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -558,7 +558,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: diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h index d6d3ec745..623ef14f9 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -716,7 +716,7 @@ struct grub_efi_usb_device_path { grub_efi_device_path_t header; grub_efi_uint8_t parent_port_number; - grub_efi_uint8_t interface; + grub_efi_uint8_t usb_interface; } __attribute__ ((packed)); typedef struct grub_efi_usb_device_path grub_efi_usb_device_path_t; @@ -1023,8 +1023,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, @@ -1035,12 +1035,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; @@ -1116,7 +1116,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); @@ -1148,7 +1148,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, ...); From 954c723accbf62a05abe83b44f841e7588018d72 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 21:50:36 +0100 Subject: [PATCH 024/131] * util/config.c: Remove trailing newline from distributor in simple parsing. --- ChangeLog | 5 +++++ util/config.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index bdfe6394c..1e18a8641 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 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); From 6b8a162516d9bdedb811425f767e1574a6e4098f Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 21:54:37 +0100 Subject: [PATCH 025/131] * grub-core/osdep/windows/blocklist.c: Add missing cast in printf invocation. --- ChangeLog | 5 +++++ grub-core/osdep/windows/blocklist.c | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 1e18a8641..249422d4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/grub-core/osdep/windows/blocklist.c b/grub-core/osdep/windows/blocklist.c index b9119ec3e..d2003854f 100644 --- a/grub-core/osdep/windows/blocklist.c +++ b/grub-core/osdep/windows/blocklist.c @@ -84,7 +84,8 @@ grub_install_get_blocklist (grub_device_t root_dev, grub_util_error ("unsupported fs for blocklist under 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 = %lld, first_lcn=%lld", + (long long) sec_per_lcn, (long long) first_lcn); first_lcn += grub_partition_get_start (root_dev->disk->partition); From f2c6ff15e543341649c10e1929a11c3c660bd8ee Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 21:55:44 +0100 Subject: [PATCH 026/131] * grub-core/osdep/windows/hostdisk.c: Fix cygwin compilation. --- ChangeLog | 4 ++++ grub-core/osdep/windows/hostdisk.c | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 249422d4a..d8ffc725e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c index 41ab318c0..984ff2605 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 @@ -441,7 +445,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); @@ -614,6 +617,15 @@ 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) { @@ -625,7 +637,7 @@ grub_util_is_special_file (const char *path) { struct stat st; - if (lstat (destnew, &st) == -1) + if (lstat (path, &st) == -1) return 1; return (!S_ISREG (st.st_mode) && !S_ISDIR (st.st_mode)); } From 6dc333777405df4385dfe8ce99ee1c58baf00436 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 22:04:02 +0100 Subject: [PATCH 027/131] 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. --- ChangeLog | 6 ++++++ grub-core/disk/efi/efidisk.c | 30 +++++++++++++++--------------- grub-core/kern/efi/efi.c | 2 +- include/grub/efi/api.h | 4 ++-- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index d8ffc725e..d28ca02d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c index 68f6d9f75..e04203fe0 100644 --- a/grub-core/disk/efi/efidisk.c +++ b/grub-core/disk/efi/efidisk.c @@ -666,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; @@ -745,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. @@ -757,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; @@ -831,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/kern/efi/efi.c b/grub-core/kern/efi/efi.c index 19a57d553..c2a5c32ff 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -704,7 +704,7 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) (unsigned) hd->partition_signature[5], (unsigned) hd->partition_signature[6], (unsigned) hd->partition_signature[7], - (unsigned) hd->mbr_type, + (unsigned) hd->partmap_type, (unsigned) hd->signature_type); } break; diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h index 623ef14f9..7b46259f7 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -827,8 +827,8 @@ 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)); typedef struct grub_efi_hard_drive_device_path grub_efi_hard_drive_device_path_t; From 60b967be7ea8849f4bd9622ac0c1f6d16b405651 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:12:53 +0100 Subject: [PATCH 028/131] Make i386-* other than i386-pc compileable under cygwin. --- ChangeLog | 4 +++ conf/Makefile.common | 6 +--- ...cygwin-img-ld.sc => i386-cygwin-img-ld.sc} | 4 +++ configure.ac | 10 +++---- gentpl.py | 5 +++- grub-core/Makefile.core.def | 16 ++++++---- util/grub-pe2elf.c | 30 +++++++++++++++---- 7 files changed, 51 insertions(+), 24 deletions(-) rename conf/{i386-pc-cygwin-img-ld.sc => i386-cygwin-img-ld.sc} (91%) diff --git a/ChangeLog b/ChangeLog index d28ca02d2..9178e039f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/conf/Makefile.common b/conf/Makefile.common index d6da66cf5..de55c9ad4 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -48,11 +48,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/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 0abbb9927..a4058a266 100644 --- a/configure.ac +++ b/configure.ac @@ -704,7 +704,7 @@ AC_ARG_ENABLE([efiemu], 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 ; then efiemu_excuse="not available on cygwin" fi if test x"$target_cpu" != xi386 ; then @@ -806,12 +806,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; 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 @@ -1563,7 +1563,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) @@ -1636,7 +1635,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/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.core.def b/grub-core/Makefile.core.def index 060de4449..a550032a3 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'; diff --git a/util/grub-pe2elf.c b/util/grub-pe2elf.c index 44189c12a..131410f15 100644 --- a/util/grub-pe2elf.c +++ b/util/grub-pe2elf.c @@ -71,7 +71,7 @@ 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 grub_uint32_t offset, image_base; static int insert_string (const char *name) @@ -112,6 +112,7 @@ write_section_data (FILE* fp, const char *name, char *image, { grub_uint32_t idx; const char *shname = pe_shdr->name; + grub_size_t secsize; if (shname[0] == '/' && grub_isdigit (shname[1])) { @@ -121,6 +122,8 @@ write_section_data (FILE* fp, const char *name, char *image, shname = pe_strtab + atoi (t + 1); } + secsize = pe_shdr->raw_data_size; + if (! strcmp (shname, ".text")) { idx = TEXT_SECTION; @@ -155,11 +158,16 @@ write_section_data (FILE* fp, const char *name, char *image, section_map[i + 1] = idx; + if (pe_shdr->virtual_size + && pe_shdr->virtual_size < secsize) + secsize = pe_shdr->virtual_size; + shdr[idx].sh_type = (idx == BSS_SECTION) ? SHT_NOBITS : SHT_PROGBITS; - shdr[idx].sh_size = pe_shdr->raw_data_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) { @@ -168,7 +176,7 @@ write_section_data (FILE* fp, const char *name, char *image, pe_shdr->raw_data_size, offset, fp, shname); - offset += pe_shdr->raw_data_size; + offset += secsize; } if (pe_shdr->relocations_offset) @@ -434,9 +442,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 (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_I386) - grub_util_error ("invalid coff image"); + grub_util_error ("invalid coff image (%x != %x)", + grub_le_to_cpu16 (pe_chdr->machine), GRUB_PE32_MACHINE_I386); strtab = xmalloc (STRTAB_BLOCK); strtab_max = STRTAB_BLOCK; @@ -444,7 +456,13 @@ 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); + if (pe_chdr->optional_header_size) + { + struct grub_pe32_optional_header *o; + o = (struct grub_pe32_optional_header *) (pe_chdr + 1); + image_base = o->image_base; + } + pe_shdr = (struct grub_pe32_section_table *) ((char *) (pe_chdr + 1) + pe_chdr->optional_header_size); num_sections = REL_SECTION; section_map = write_section_data (fp, name, image, pe_chdr, pe_shdr); From bc8fcf4bd301accffec5a9c93ae985563957422d Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:13:42 +0100 Subject: [PATCH 029/131] * grub-core/boot/i386/qemu/boot.S: Add missing EXT_C. --- ChangeLog | 4 ++++ grub-core/boot/i386/qemu/boot.S | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9178e039f..d81730900 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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" From 6a5fe1328b2797da56b8b054775ac7d3c0398556 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:15:47 +0100 Subject: [PATCH 030/131] * grub-core/kern/i386/qemu/init.c (resource): Decrease struct size by using bitfields. --- ChangeLog | 5 +++++ grub-core/kern/i386/qemu/init.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index d81730900..ee26842b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. 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 From 4bad23a15fc129218f611f51dcb268c246b207f1 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:23:11 +0100 Subject: [PATCH 031/131] Workaround windows bug when querying EFI system partition parameters. --- ChangeLog | 4 ++ grub-core/osdep/windows/getroot.c | 88 +++++++++++++++++++++++++++---- grub-core/osdep/windows/relpath.c | 9 +--- include/grub/util/windows.h | 3 ++ 4 files changed, 87 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index ee26842b7..f66ac253c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/grub-core/osdep/windows/getroot.c b/grub-core/osdep/windows/getroot.c index 160e8c92c..c81372d22 100644 --- a/grub-core/osdep/windows/getroot.c +++ b/grub-core/osdep/windows/getroot.c @@ -55,6 +55,58 @@ #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 +114,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 +146,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])); diff --git a/grub-core/osdep/windows/relpath.c b/grub-core/osdep/windows/relpath.c index 731cd0ca6..b9e2cac45 100644 --- a/grub-core/osdep/windows/relpath.c +++ b/grub-core/osdep/windows/relpath.c @@ -44,8 +44,6 @@ 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 +52,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/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 From 6d3cfe50632d023ddcdbe56658da1c70aa8e6cf6 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:25:30 +0100 Subject: [PATCH 032/131] Do not use TCHAR string functions as they are not available on cygwin. --- ChangeLog | 4 ++++ grub-core/osdep/windows/getroot.c | 39 +++++++++++++++++++++++-------- grub-core/osdep/windows/relpath.c | 13 +++++++---- 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index f66ac253c..2de6a47c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/grub-core/osdep/windows/getroot.c b/grub-core/osdep/windows/getroot.c index c81372d22..661d95461 100644 --- a/grub-core/osdep/windows/getroot.c +++ b/grub-core/osdep/windows/getroot.c @@ -49,12 +49,6 @@ #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) { @@ -191,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)), @@ -206,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'))) { @@ -277,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/relpath.c b/grub-core/osdep/windows/relpath.c index b9e2cac45..cb0861744 100644 --- a/grub-core/osdep/windows/relpath.c +++ b/grub-core/osdep/windows/relpath.c @@ -33,11 +33,14 @@ #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) From 38933cee85ae2c24e658b38cf9cf62d8aae9e4fa Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:28:34 +0100 Subject: [PATCH 033/131] Workaround cygwin bug when using \\?\Volume{GUID} syntax. --- ChangeLog | 4 +++ grub-core/osdep/windows/hostdisk.c | 57 ++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2de6a47c1..4cfed4835 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c index 984ff2605..8f56c21b0 100644 --- a/grub-core/osdep/windows/hostdisk.c +++ b/grub-core/osdep/windows/hostdisk.c @@ -97,12 +97,54 @@ grub_util_tchar_to_utf8 (LPCTSTR in) #error "Unsupported TCHAR size" #endif + +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)) @@ -113,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 From a24725cc6e9a3de0dfadda38a97d3171863a208a Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:31:56 +0100 Subject: [PATCH 034/131] Change grub_install_register_efi interface to pass GRUB device. This allows grub_install_register_efi to request partition info directly. --- ChangeLog | 7 +++++++ grub-core/osdep/basic/no_platform.c | 2 +- grub-core/osdep/unix/platform.c | 8 +++++++- include/grub/util/install.h | 2 +- util/grub-install.c | 16 +++++++++++----- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4cfed4835..a7f84666b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +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. diff --git a/grub-core/osdep/basic/no_platform.c b/grub-core/osdep/basic/no_platform.c index 32be5e8e3..ab7652a7f 100644 --- a/grub-core/osdep/basic/no_platform.c +++ b/grub-core/osdep/basic/no_platform.c @@ -31,7 +31,7 @@ grub_install_register_ieee1275 (int is_prep, const char *install_device, } 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/grub-core/osdep/unix/platform.c b/grub-core/osdep/unix/platform.c index dc296c98b..b2ec6bd8d 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' diff --git a/include/grub/util/install.h b/include/grub/util/install.h index 20626d4e6..a647af4ad 100644 --- a/include/grub/util/install.h +++ b/include/grub/util/install.h @@ -205,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/util/grub-install.c b/util/grub-install.c index 5d22f902e..0fbf052b8 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -1559,19 +1559,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; 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; From 5f5bb1074859c4eadc202133d3cd283dbb2ea373 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:33:05 +0100 Subject: [PATCH 035/131] * conf/Makefile.extra-dist: Adjust path to conf/i386-cygwin-img-ld.sc. --- ChangeLog | 4 ++++ conf/Makefile.extra-dist | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index a7f84666b..59e7b4221 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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 From 814442ba69e01e97ecb8ade582023c7618ff33a7 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 14 Dec 2013 23:35:58 +0100 Subject: [PATCH 036/131] Implement windows flavour of EFI install routines. --- ChangeLog | 4 + Makefile.util.def | 1 + grub-core/osdep/platform.c | 2 + grub-core/osdep/windows/platform.c | 417 +++++++++++++++++++++++++++++ 4 files changed, 424 insertions(+) create mode 100644 grub-core/osdep/windows/platform.c diff --git a/ChangeLog b/ChangeLog index 59e7b4221..256e9314b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/Makefile.util.def b/Makefile.util.def index d8c12d54f..470191700 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -544,6 +544,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; 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/windows/platform.c b/grub-core/osdep/windows/platform.c new file mode 100644 index 000000000..b123256e5 --- /dev/null +++ b/grub-core/osdep/windows/platform.c @@ -0,0 +1,417 @@ +/* + * 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 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 < (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) + { + order_num = i; + have_order_num = 1; + grub_util_info ("Creating new entry at Boot%04x", + order_num); + break; + } + 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 free BootNNNN spot"); + 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"); +} From 74e7ad66047bda4f8323d2f7d38eb3d602eaf777 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 00:55:17 +0100 Subject: [PATCH 037/131] * util/grub-pe2elf.c: Fix handling of .bss. --- ChangeLog | 4 ++++ util/grub-pe2elf.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 256e9314b..4a8237953 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/util/grub-pe2elf.c b/util/grub-pe2elf.c index 131410f15..a711af982 100644 --- a/util/grub-pe2elf.c +++ b/util/grub-pe2elf.c @@ -143,6 +143,8 @@ write_section_data (FILE* fp, const char *name, char *image, { idx = BSS_SECTION; 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; From ae8159b9cadbb45d45c200f9a23278342b68e44a Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 00:56:11 +0100 Subject: [PATCH 038/131] * include/grub/i386/coreboot/lbio.h: Add missing attribute (packed). --- ChangeLog | 4 ++++ include/grub/i386/coreboot/lbio.h | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4a8237953..00f2d7fdd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/include/grub/i386/coreboot/lbio.h b/include/grub/i386/coreboot/lbio.h index 9a9304625..dc9cead0c 100644 --- a/include/grub/i386/coreboot/lbio.h +++ b/include/grub/i386/coreboot/lbio.h @@ -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; -}; +} __attribute__((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; -}; +} __attribute__ ((packed)); typedef struct grub_linuxbios_mem_region *mem_region_t; grub_err_t From 7e47e27bd8772beeedafcdafd4f41e0cbbc700eb Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:14:30 +0100 Subject: [PATCH 039/131] Add gcc_struct to all packed structures when compiling with mingw. Just "packed" doesn't always pack the way we expect. --- ChangeLog | 6 +++ grub-core/bus/usb/ohci.c | 6 +-- grub-core/bus/usb/serial/pl2303.c | 2 +- grub-core/bus/usb/uhci.c | 4 +- grub-core/commands/i386/pc/drivemap.c | 2 +- grub-core/commands/verify.c | 2 +- grub-core/disk/dmraid_nvidia.c | 2 +- grub-core/disk/geli.c | 6 +-- grub-core/disk/ldm.c | 4 +- grub-core/disk/luks.c | 2 +- grub-core/disk/mdraid1x_linux.c | 2 +- grub-core/disk/mdraid_linux.c | 2 +- grub-core/disk/usbms.c | 4 +- grub-core/fs/affs.c | 8 ++-- grub-core/fs/bfs.c | 16 +++---- grub-core/fs/btrfs.c | 20 ++++----- grub-core/fs/cpio.c | 2 +- grub-core/fs/cpio_be.c | 2 +- grub-core/fs/fat.c | 16 +++---- grub-core/fs/hfs.c | 14 +++--- grub-core/fs/hfsplus.c | 4 +- grub-core/fs/hfspluscomp.c | 12 ++--- grub-core/fs/iso9660.c | 16 +++---- grub-core/fs/jfs.c | 32 +++++++------- grub-core/fs/newc.c | 2 +- grub-core/fs/nilfs2.c | 2 +- grub-core/fs/ntfs.c | 2 +- grub-core/fs/odc.c | 2 +- grub-core/fs/reiserfs.c | 28 ++++++------ grub-core/fs/sfs.c | 18 ++++---- grub-core/fs/squash4.c | 22 ++++----- grub-core/fs/tar.c | 2 +- grub-core/fs/udf.c | 38 ++++++++-------- grub-core/fs/ufs.c | 6 +-- grub-core/fs/xfs.c | 22 ++++----- grub-core/fs/zfs/zfs_lz4.c | 6 +-- grub-core/io/lzopio.c | 2 +- grub-core/kern/i386/pc/mmap.c | 2 +- grub-core/loader/i386/bsd.c | 2 +- grub-core/loader/i386/linux.c | 2 +- grub-core/loader/linux.c | 2 +- grub-core/mmap/i386/pc/mmap.c | 2 +- grub-core/net/arp.c | 2 +- grub-core/net/dns.c | 2 +- grub-core/net/drivers/i386/pc/pxe.c | 10 ++--- grub-core/net/ethernet.c | 6 +-- grub-core/net/icmp.c | 4 +- grub-core/net/icmp6.c | 14 +++--- grub-core/net/ip.c | 4 +- grub-core/net/tcp.c | 6 +-- grub-core/net/tftp.c | 2 +- grub-core/partmap/acorn.c | 4 +- grub-core/partmap/amiga.c | 4 +- grub-core/partmap/dvh.c | 4 +- grub-core/partmap/sun.c | 6 +-- grub-core/partmap/sunpc.c | 4 +- grub-core/tests/video_checksum.c | 2 +- grub-core/video/readers/tga.c | 2 +- include/grub/acpi.h | 12 ++--- include/grub/bsdlabel.h | 4 +- include/grub/btrfs.h | 2 +- include/grub/cbfs_core.h | 10 ++--- include/grub/efi/api.h | 64 +++++++++++++-------------- include/grub/efi/pe32.h | 4 +- include/grub/efiemu/efiemu.h | 12 ++--- include/grub/efiemu/runtime.h | 4 +- include/grub/exfat.h | 2 +- include/grub/fat.h | 8 ++-- include/grub/gpt_partition.h | 4 +- include/grub/hfs.h | 2 +- include/grub/hfsplus.h | 16 +++---- include/grub/i386/bsd.h | 2 +- include/grub/i386/coreboot/lbio.h | 8 ++-- include/grub/i386/gdb.h | 4 +- include/grub/i386/linux.h | 6 +-- include/grub/i386/macho.h | 4 +- include/grub/i386/netbsd_bootinfo.h | 2 +- include/grub/i386/openbsd_bootarg.h | 2 +- include/grub/i386/pc/biosdisk.h | 6 +-- include/grub/i386/pc/int.h | 2 +- include/grub/i386/pc/pxe.h | 24 +++++----- include/grub/i386/pc/vbe.h | 10 ++--- include/grub/i386/xnu.h | 6 +-- include/grub/lvm.h | 10 ++--- include/grub/macho.h | 16 +++---- include/grub/msdos_partition.h | 4 +- include/grub/net.h | 2 +- include/grub/net/udp.h | 2 +- include/grub/ntfs.h | 2 +- include/grub/offsets.h | 2 +- include/grub/scsicmd.h | 30 ++++++------- include/grub/sparc64/ieee1275/boot.h | 2 +- include/grub/types.h | 18 +++++--- include/grub/unicode.h | 2 +- include/grub/usbdesc.h | 18 ++++---- include/grub/usbtrans.h | 2 +- include/grub/video.h | 2 +- include/grub/xnu.h | 6 +-- include/grub/zfs/zap_leaf.h | 2 +- include/grub/zfs/zio.h | 2 +- include/multiboot.h | 2 +- include/multiboot2.h | 2 +- util/grub-mkfont.c | 20 ++++----- util/grub-mkstandalone.c | 2 +- util/render-label.c | 2 +- 105 files changed, 403 insertions(+), 391 deletions(-) diff --git a/ChangeLog b/ChangeLog index 00f2d7fdd..f27d30482 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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). 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/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/verify.c b/grub-core/commands/verify.c index dbe7e83c0..85a72d65f 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", 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/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/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/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/usbms.c b/grub-core/disk/usbms.c index af92243d2..30756aee5 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 { 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..b15a9d65d 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 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..ee6f6f955 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); diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c index a119c7ace..a5d7bc8f7 100644 --- a/grub-core/fs/hfsplus.c +++ b/grub-core/fs/hfsplus.c @@ -65,7 +65,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 +80,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 diff --git a/grub-core/fs/hfspluscomp.c b/grub-core/fs/hfspluscomp.c index 59cb8cbc0..461b4678f 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 { 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/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_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/io/lzopio.c b/grub-core/io/lzopio.c index 2895e2102..b1ce26029 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) 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/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 7b63e2579..a37eecf04 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -87,7 +87,7 @@ struct idt_descriptor { grub_uint16_t limit; void *base; -} __attribute__ ((packed)); +} GRUB_PACKED; static struct idt_descriptor idt_desc = { 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/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..32ee4fd3d 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 { 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/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/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/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/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/efi/api.h b/include/grub/efi/api.h index 7b46259f7..68fc90ffb 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -532,7 +532,7 @@ struct grub_efi_packed_guid grub_uint16_t data2; grub_uint16_t data3; grub_uint8_t data4[8]; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_packed_guid grub_efi_packed_guid_t; /* XXX although the spec does not specify the padding, this actually @@ -545,7 +545,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. */ @@ -554,7 +554,7 @@ struct grub_efi_device_path grub_efi_uint8_t type; grub_efi_uint8_t subtype; grub_efi_uint16_t length; -} __attribute__ ((packed)); +} 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. */ @@ -589,7 +589,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 @@ -598,7 +598,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 @@ -609,7 +609,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 @@ -619,7 +619,7 @@ struct grub_efi_vendor_device_path grub_efi_device_path_t header; 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 @@ -628,7 +628,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. */ @@ -641,7 +641,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 @@ -653,7 +653,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) \ @@ -676,7 +676,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 @@ -686,7 +686,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 @@ -697,7 +697,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 @@ -707,7 +707,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 @@ -717,7 +717,7 @@ struct grub_efi_usb_device_path grub_efi_device_path_t header; grub_efi_uint8_t parent_port_number; grub_efi_uint8_t usb_interface; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_usb_device_path grub_efi_usb_device_path_t; #define GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE 15 @@ -730,7 +730,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 @@ -739,7 +739,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 @@ -749,7 +749,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 @@ -763,7 +763,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 @@ -777,7 +777,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 @@ -790,7 +790,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 @@ -803,7 +803,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 @@ -813,7 +813,7 @@ struct grub_efi_vendor_messaging_device_path grub_efi_device_path_t header; 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. */ @@ -830,7 +830,7 @@ struct grub_efi_hard_drive_device_path 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 @@ -841,7 +841,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 @@ -851,7 +851,7 @@ struct grub_efi_vendor_media_device_path grub_efi_device_path_t header; 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 @@ -860,7 +860,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 @@ -869,7 +869,7 @@ struct grub_efi_protocol_device_path { grub_efi_device_path_t header; grub_efi_packed_guid_t guid; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_protocol_device_path grub_efi_protocol_device_path_t; #define GRUB_EFI_PIWG_DEVICE_PATH_SUBTYPE 6 @@ -878,7 +878,7 @@ struct grub_efi_piwg_device_path { grub_efi_device_path_t header; grub_efi_packed_guid_t guid; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_efi_piwg_device_path grub_efi_piwg_device_path_t; @@ -893,7 +893,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 @@ -918,7 +918,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 @@ -1236,7 +1236,7 @@ struct grub_efi_configuration_table { 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 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 5c87662a4..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; @@ -185,13 +185,13 @@ struct grub_efiemu_configuration_table32 { 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_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/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/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..bb8ec0517 100644 --- a/include/grub/hfs.h +++ b/include/grub/hfs.h @@ -58,6 +58,6 @@ struct grub_hfs_sblock 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..fedf37d3d 100644 --- a/include/grub/hfsplus.h +++ b/include/grub/hfsplus.h @@ -9,7 +9,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 +18,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 @@ -37,7 +37,7 @@ struct grub_hfsplus_volheader 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 +116,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 +142,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 +152,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 +163,7 @@ struct grub_hfsplus_key struct grub_hfsplus_attrkey attrkey; grub_uint16_t keylen; }; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_hfsplus_btnode { @@ -173,7 +173,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. */ 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 dc9cead0c..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; -} __attribute__((packed)); +} 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; -} __attribute__ ((packed)); +} GRUB_PACKED; typedef struct grub_linuxbios_mem_region *mem_region_t; grub_err_t 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 9d064c852..da0ca3b83 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 { @@ -139,7 +139,7 @@ struct linux_kernel_header grub_uint64_t setup_data; grub_uint64_t pref_address; grub_uint32_t init_size; -} __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 @@ -309,7 +309,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..5bdf9b213 100644 --- a/include/grub/i386/macho.h +++ b/include/grub/i386/macho.h @@ -36,7 +36,7 @@ struct grub_macho_thread32 grub_uint8_t unknown1[48]; grub_uint32_t entry_point; grub_uint8_t unknown2[20]; -} __attribute__ ((packed)); +} GRUB_PACKED; struct grub_macho_thread64 @@ -46,6 +46,6 @@ struct grub_macho_thread64 grub_uint8_t unknown1[0x88]; grub_uint64_t entry_point; grub_uint8_t unknown2[0x20]; -} __attribute__ ((packed)); +} GRUB_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/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/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..3c88e71ca 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,7 @@ union grub_macho_filestart struct grub_macho_header32 thin32; struct grub_macho_header64 thin64; struct grub_macho_lzss_header lzss; -} __attribute__ ((packed)); +} GRUB_PACKED; #define GRUB_MACHO_LZSS_OFFSET 0x180 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/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/video.h b/include/grub/video.h index 601261e15..bca677789 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 { 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 2e33cbf8d..3ccff15fc 100644 --- a/include/multiboot2.h +++ b/include/multiboot2.h @@ -179,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/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-mkstandalone.c b/util/grub-mkstandalone.c index 6ee5e588a..4b0464cc2 100644 --- a/util/grub-mkstandalone.c +++ b/util/grub-mkstandalone.c @@ -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/render-label.c b/util/render-label.c index 6bef638da..73f877442 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]; From e7c418c58ff1bbc5c11f2559a8d25939ae32d6aa Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:18:30 +0100 Subject: [PATCH 040/131] * util/grub-mkimagexx.c (relocate_addresses): Display offset rather than almost useless pointer. --- ChangeLog | 5 +++++ util/grub-mkimagexx.c | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index f27d30482..db0f37883 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c index b7c01ab1a..d6feffd2a 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -855,7 +855,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 +891,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; From 6f5f3337d8c16bf08be941663b0b8605e0c684ec Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:21:14 +0100 Subject: [PATCH 041/131] * grub-core/disk/cryptodisk.c: Rename "n" to "last_cryptodisk_id". --- ChangeLog | 4 ++++ grub-core/disk/cryptodisk.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index db0f37883..b97cb823f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 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; From 8fa26279424f8d82e9fa5c00eaf3069c83a5e50e Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:24:34 +0100 Subject: [PATCH 042/131] * grub-core/kern/i386/coreboot/cbtable.c: Use char * arithmetic rather than converting to long. --- ChangeLog | 5 +++++ grub-core/kern/i386/coreboot/cbtable.c | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index b97cb823f..43076ddd4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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". 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) From ed55931073f564aa501a5cfc7e2dd4d674ef133c Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:27:04 +0100 Subject: [PATCH 043/131] * grub-core/commands/acpi.c: Use grub_addr_t rather than long when appropriate. --- ChangeLog | 5 +++++ grub-core/commands/acpi.c | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 43076ddd4..136a78bb5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 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; From 8ae6704517ec4260441345b650a45014a5de2aa0 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:31:21 +0100 Subject: [PATCH 044/131] * 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. --- ChangeLog | 7 +++++++ grub-core/disk/loopback.c | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 136a78bb5..506b85dbc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +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 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; From 48ba5c0c86ee1bf17fb7f09c962aa6d8415a6ed1 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:33:22 +0100 Subject: [PATCH 045/131] * grub-core/kern/elfXX.c: Use grub_addr_t rather than long when appropriate. --- ChangeLog | 5 +++++ grub-core/kern/elfXX.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 506b85dbc..8bc99c121 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. 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; From 24ca71c93b7bbc8f8d83b51b4be7280e3fcd71af Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:35:18 +0100 Subject: [PATCH 046/131] * grub-core/loader/i386/linux.c: Use %p rather than %lx for pointers. --- ChangeLog | 4 ++++ grub-core/loader/i386/linux.c | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8bc99c121..94cd76a4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c index a37eecf04..fa7ecc8c8 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -249,8 +249,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; @@ -593,8 +593,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; From 111bf5db8b95a45db3fa7cae01aa54c81b6a7744 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:37:12 +0100 Subject: [PATCH 047/131] * grub-core/loader/i386/linux.c: Use grub_addr_t rather than long when appropriate. --- ChangeLog | 5 +++++ grub-core/loader/i386/linux.c | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 94cd76a4e..84657594e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c index fa7ecc8c8..b14dbe714 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -851,7 +851,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 @@ -859,12 +859,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 From 7104368446048fc10fde4542bf401e6959014e82 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:39:21 +0100 Subject: [PATCH 048/131] * include/grub/test.h: Use gnu_printf rather than printf on GRUB functions. --- ChangeLog | 5 +++++ include/grub/test.h | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 84657594e..0f7911293 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 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__, \ From d99af4f0e885711f011a56506ffcfc1e318b94ef Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:42:19 +0100 Subject: [PATCH 049/131] * grub-core/commands/efi/lsefisystab.c: Use %lld to show num_table_entries. --- ChangeLog | 5 +++++ grub-core/commands/efi/lsefisystab.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 0f7911293..9548d982e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 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++) { From 39711101fd89bcdf25fa3353abb0bf79134cebc2 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 14:48:13 +0100 Subject: [PATCH 050/131] Add explicit sysv_abi on amd64 asm routines. --- ChangeLog | 4 ++++ include/grub/x86_64/setjmp.h | 4 ++-- include/grub/x86_64/xen/hypercall.h | 12 ++++++------ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9548d982e..63e63f9ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/include/grub/x86_64/setjmp.h b/include/grub/x86_64/setjmp.h index e9f2bac8e..b8f44cf29 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 __attribute__ ((sysv_abi)); +void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn,sysv_abi)); #endif /* ! GRUB_SETJMP_CPU_HEADER */ diff --git a/include/grub/x86_64/xen/hypercall.h b/include/grub/x86_64/xen/hypercall.h index 780db4d61..ad89d6c62 100644 --- a/include/grub/x86_64/xen/hypercall.h +++ b/include/grub/x86_64/xen/hypercall.h @@ -19,16 +19,16 @@ #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); +int EXPORT_FUNC (grub_xen_sched_op) (int cmd, void *arg) __attribute__ ((sysv_abi)); +int grub_xen_update_va_mapping (void *addr, uint64_t pte, uint64_t flags) __attribute__ ((sysv_abi)); +int grub_xen_event_channel_op (int op, void *arg) __attribute__ ((sysv_abi)); int grub_xen_mmuext_op (mmuext_op_t * ops, unsigned int count, - unsigned int *pdone, unsigned int foreigndom); + unsigned int *pdone, unsigned int foreigndom) __attribute__ ((sysv_abi)); 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) __attribute__ ((sysv_abi)); +int EXPORT_FUNC (grub_xen_grant_table_op) (int, void *, int) __attribute__ ((sysv_abi)); #endif From 04b02857016063fc265a122538099ae510e1340a Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 15 Dec 2013 17:57:58 +0100 Subject: [PATCH 051/131] 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. --- ChangeLog | 8 +++++ grub-core/Makefile.core.def | 5 +++ grub-core/tests/lib/functional_test.c | 1 + grub-core/tests/sleep_test.c | 45 +++++++++++++++++++++++++++ 4 files changed, 59 insertions(+) create mode 100644 grub-core/tests/sleep_test.c diff --git a/ChangeLog b/ChangeLog index 63e63f9ad..6cbf04a70 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +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. diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index a550032a3..4102e73ba 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1932,6 +1932,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; 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..98ea57262 --- /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, enu; + 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); From 80b865bdc856960faa5ce72dc3c79bfcbcc3839a Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Sun, 15 Dec 2013 17:59:40 +0100 Subject: [PATCH 052/131] * grub-core/kern/uboot/init.c: Fix units of uboot timer. --- ChangeLog | 4 ++++ grub-core/kern/uboot/init.c | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6cbf04a70..bc6d68ba3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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 From e477187bf4e935a43d858ab2d33c64e978e2448b Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Sun, 15 Dec 2013 22:00:15 +0400 Subject: [PATCH 053/131] small fixes for Windows EFI install code Fix potential crash caused by signed vs. unsigned comparison. Negative length compares as very large unsigned number causing subsequent NULL access. Make exhaustive search for all BootNNNN variables to find one matching requested efi_distributor. --- ChangeLog | 6 ++++++ grub-core/osdep/windows/platform.c | 17 ++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc6d68ba3..7a1026499 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c index b123256e5..3f4ad5e24 100644 --- a/grub-core/osdep/windows/platform.c +++ b/grub-core/osdep/windows/platform.c @@ -246,6 +246,8 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, 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) { @@ -275,13 +277,18 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, 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) { - order_num = i; - have_order_num = 1; - grub_util_info ("Creating new entry at Boot%04x", - order_num); - break; + 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) From 6a09d83e125f71141a934e010c796547c51c01ab Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 13:02:19 +0100 Subject: [PATCH 054/131] * grub-core/genmoddep.awk: Remove explicit getline < /dev/stdin. --- ChangeLog | 4 ++++ grub-core/genmoddep.awk | 32 +++++++++++++++----------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc6d68ba3..f30bb9dec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-16 Vladimir Serbinenko + + * grub-core/genmoddep.awk: Remove explicit getline < /dev/stdin. + 2013-12-15 Ian Campbell * grub-core/kern/uboot/init.c: Fix units of uboot timer. 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. From 37378f748a6a9b8acafdf6420be349bbc035d752 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 13:07:28 +0100 Subject: [PATCH 055/131] Define functions explicitly rather than using --defsym in tests whenever possible. Respect locality in remaining cases. --- ChangeLog | 5 +++++ acinclude.m4 | 33 ++++++++++++++++++++++++++++----- configure.ac | 18 ++++++++++++------ 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index f30bb9dec..ac59e97d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. 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/configure.ac b/configure.ac index a4058a266..b7bc4f810 100644 --- a/configure.ac +++ b/configure.ac @@ -514,7 +514,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 @@ -959,7 +964,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 @@ -973,10 +978,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 @@ -985,7 +991,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="" @@ -999,7 +1005,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 From 4f979ccbf13b755ff8988cc9695c7bb7eb9ebb5a Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 13:16:37 +0100 Subject: [PATCH 056/131] Use unix functions for temporary files and special files on cygwin. --- ChangeLog | 4 ++++ grub-core/osdep/unix/hostdisk.c | 4 ++++ grub-core/osdep/windows/hostdisk.c | 14 ++++---------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index ac59e97d0..5824c165f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 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/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c index 8f56c21b0..af7d07ca7 100644 --- a/grub-core/osdep/windows/hostdisk.c +++ b/grub-core/osdep/windows/hostdisk.c @@ -467,6 +467,8 @@ grub_util_rmdir (const char *name) return ret; } +#ifndef __CYGWIN__ + static char * get_temp_name (void) { @@ -536,6 +538,8 @@ grub_util_make_temporary_dir (void) return ret; } +#endif + int grub_util_is_directory (const char *name) { @@ -661,14 +665,4 @@ 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 (path, &st) == -1) - return 1; - return (!S_ISREG (st.st_mode) && !S_ISDIR (st.st_mode)); -} - #endif From 23d2abc33cde7f4430c9ee092d1c705f67e24478 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 13:18:48 +0100 Subject: [PATCH 057/131] * grub-core/genmod.sh.in: Strip before converting to ELF as strip may not work with ELF. --- ChangeLog | 5 +++++ grub-core/genmod.sh.in | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5824c165f..179bc3c03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. 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 From 252a289cb39b14951994ac919f300ed977e4ec65 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 14:18:15 +0100 Subject: [PATCH 058/131] Determine the need for mingw-related stubs at compile time rather than using not very significant $target_os. --- ChangeLog | 5 +++++ configure.ac | 10 ---------- grub-core/kern/misc.c | 9 ++++++++- include/grub/misc.h | 4 +++- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index ba50cfb68..5405e5069 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/configure.ac b/configure.ac index b7bc4f810..59bd8736b 100644 --- a/configure.ac +++ b/configure.ac @@ -693,16 +693,6 @@ 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)])]) 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/include/grub/misc.h b/include/grub/misc.h index be74d9082..b3ba7306d 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -377,9 +377,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. */ From f4171ebd34bd66db853c2005ac3dfde6a680878e Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 14:24:19 +0100 Subject: [PATCH 059/131] Handle X86_64_PC64 relocation. Those are generated by some cygwin compilers. --- ChangeLog | 6 ++++++ grub-core/kern/x86_64/dl.c | 7 +++++++ include/grub/elf.h | 1 + util/grub-mkimagexx.c | 12 ++++++++++++ 4 files changed, 26 insertions(+) diff --git a/ChangeLog b/ChangeLog index 5405e5069..aae9c6977 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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 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/include/grub/elf.h b/include/grub/elf.h index 140d24d02..79f56c67b 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). */ diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c index d6feffd2a..832302e59 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -709,6 +709,18 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, 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%llx at the offset 0x%llx", + (unsigned long long) *target, + (unsigned long long) offset); + break; + } + case R_X86_64_32: case R_X86_64_32S: { From 3e38c31a4b5a26549e3f5637e2d00247eb72a159 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 14:34:23 +0100 Subject: [PATCH 060/131] * include/grub/efi/api.h: Define (u)intn_t based on pointer size and not on long. --- ChangeLog | 5 +++++ include/grub/efi/api.h | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index aae9c6977..81c4f2786 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h index 68fc90ffb..956cce2de 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; @@ -467,7 +472,7 @@ typedef grub_uint16_t grub_efi_char16_t; typedef grub_efi_intn_t grub_efi_status_t; #define GRUB_EFI_ERROR_CODE(value) \ - ((1L << (sizeof (grub_efi_status_t) * 8 - 1)) | (value)) + ((1LL << (sizeof (grub_efi_status_t) * 8 - 1)) | (value)) #define GRUB_EFI_WARNING_CODE(value) (value) From d87cb3ae3c27908dac41e42e43e568d253a0fdd1 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 14:36:48 +0100 Subject: [PATCH 061/131] * grub-core/lib/posix_wrap/errno.h: Undefine errno before redefining. --- ChangeLog | 4 ++++ grub-core/lib/posix_wrap/errno.h | 1 + 2 files changed, 5 insertions(+) diff --git a/ChangeLog b/ChangeLog index 81c4f2786..91242c573 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 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 From 9fdec226ff75245e0429e49ae3bf9b5665686bc7 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 14:39:06 +0100 Subject: [PATCH 062/131] * include/grub/efi/api.h: Don't use call wrappers when compiled with mingw or cygwin as API already matches. --- ChangeLog | 5 +++++ include/grub/efi/api.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 91242c573..67adb780a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h index 956cce2de..c1c6981ed 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -1549,7 +1549,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) From f009f07c9588035089a28bb9234bf0906e9e446c Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 14:41:12 +0100 Subject: [PATCH 063/131] * include/grub/x86_64/types.h: Define sizeof (long) as 4 when compiling with mingw. --- ChangeLog | 5 +++++ include/grub/x86_64/types.h | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/ChangeLog b/ChangeLog index 67adb780a..a973b586e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 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 From cc6fb517de90c9a10de6655631be4ce5fb2b7ebe Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 14:49:11 +0100 Subject: [PATCH 064/131] Remove practice of assigning random const pointers to device id. This is not required as cache code already checks driver id as well. --- ChangeLog | 6 ++++++ grub-core/disk/host.c | 2 +- grub-core/disk/memdisk.c | 2 +- grub-core/fs/cbfs.c | 2 +- grub-core/fs/proc.c | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index a973b586e..fc976100f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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 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/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/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/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; From 66a07ce2f80f68b1bdf0a0f744f1eb54fd2c8af4 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 15:28:07 +0100 Subject: [PATCH 065/131] * grub-core/commands/minicmd.c (grub_mini_cmd_dump): Handle LLP case. --- ChangeLog | 4 ++++ grub-core/commands/minicmd.c | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index fc976100f..cfab3f1ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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--) { From 6f1f6a0c8211bfedd74eb80ecff885c0fa615859 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 15:30:50 +0100 Subject: [PATCH 066/131] Add support for converting PE+ to Elf64. --- ChangeLog | 4 + configure.ac | 16 ++- grub-core/Makefile.am | 5 +- util/grub-pe2elf.c | 265 +++++++++++++++++++++++++++--------------- 4 files changed, 189 insertions(+), 101 deletions(-) diff --git a/ChangeLog b/ChangeLog index cfab3f1ce..2bf4ef182 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/configure.ac b/configure.ac index 59bd8736b..be08d55be 100644 --- a/configure.ac +++ b/configure.ac @@ -699,7 +699,7 @@ AC_ARG_ENABLE([efiemu], if test x"$enable_efiemu" = xno ; then efiemu_excuse="explicitly disabled" fi -if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; 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 @@ -759,8 +759,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" @@ -781,9 +784,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 @@ -801,7 +807,7 @@ 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; 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-cygwin-img-ld.sc" diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 5b804c7d4..79c63abf1 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 diff --git a/util/grub-pe2elf.c b/util/grub-pe2elf.c index a711af982..a48ef2395 100644 --- a/util/grub-pe2elf.c +++ b/util/grub-pe2elf.c @@ -48,29 +48,32 @@ * 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; +typedef Elf64_Ehdr Elf_Ehdr; +typedef Elf64_Shdr Elf_Shdr; +typedef Elf64_Sym Elf_Sym; +#define ELF_R_INFO ELF64_R_INFO +#define ELF_ST_INFO ELF64_ST_INFO +#define GRUB_PE32_MACHINE GRUB_PE32_MACHINE_X86_64 +#else +typedef Elf32_Rel elf_reloc_t; +typedef Elf32_Ehdr Elf_Ehdr; +typedef Elf32_Shdr Elf_Shdr; +typedef Elf32_Sym Elf_Sym; +#define ELF_R_INFO ELF32_R_INFO +#define ELF_ST_INFO ELF32_ST_INFO +#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 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 @@ -102,15 +105,20 @@ 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; @@ -124,54 +132,56 @@ write_section_data (FILE* fp, const char *name, char *image, 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; if (pe_shdr->virtual_size && pe_shdr->virtual_size < secsize) secsize = pe_shdr->virtual_size; - shdr[idx].sh_type = (idx == BSS_SECTION) ? SHT_NOBITS : SHT_PROGBITS; 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, @@ -185,45 +195,55 @@ write_section_data (FILE* fp, const char *name, char *image, { 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; @@ -236,43 +256,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++; } @@ -282,12 +343,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; @@ -303,16 +368,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)); @@ -362,6 +427,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; @@ -370,7 +437,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++; @@ -379,17 +446,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); @@ -398,11 +465,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; @@ -421,20 +488,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 @@ -448,9 +520,9 @@ convert_pe (FILE* fp, const char *name, char *image) 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_I386) + 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_I386); + grub_le_to_cpu16 (pe_chdr->machine), GRUB_PE32_MACHINE); strtab = xmalloc (STRTAB_BLOCK); strtab_max = STRTAB_BLOCK; @@ -460,12 +532,15 @@ convert_pe (FILE* fp, const char *name, char *image) offset = sizeof (ehdr); if (pe_chdr->optional_header_size) { +#if GRUB_TARGET_WORDSIZE == 64 + struct grub_pe64_optional_header *o; +#else struct grub_pe32_optional_header *o; - o = (struct grub_pe32_optional_header *) (pe_chdr + 1); +#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); - num_sections = REL_SECTION; section_map = write_section_data (fp, name, image, pe_chdr, pe_shdr); From 8fcce8d50fad4b1ceaa2ff1c002f54a847ee7481 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 17:44:10 +0100 Subject: [PATCH 067/131] * grub-core/kern/x86_64/xen/startup.S: Align stack. --- ChangeLog | 4 ++++ grub-core/kern/x86_64/xen/startup.S | 1 + 2 files changed, 5 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2bf4ef182..1fac7e8f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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. */ From 316c8d9a186e64a091a3cc77c08c6c19b1673471 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 18:10:50 +0100 Subject: [PATCH 068/131] Make grub_xen_hypercall on i386 cdecl rather than stdcall to avoid linker trying to "fixup" the code. --- ChangeLog | 5 +++++ grub-core/kern/i386/xen/hypercall.S | 2 +- include/grub/i386/xen/hypercall.h | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1fac7e8f0..62759bb25 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. 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/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) From 396311f0f606d2c3cf1ba68f6007e1ccbe465531 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Mon, 16 Dec 2013 22:41:15 +0400 Subject: [PATCH 069/131] consolidate grub_util_exec code We need to hide "modprobe efivars" error output to avoid confusion. So consolidate grub_util_exec_* into single function that can optionally redirect all three standard descriptors and make all other functions compatibility wrappers. Also remove include/grub/osdep/exec_unix.h which does not appear to be used anywhere. --- grub-core/osdep/unix/exec.c | 140 ++++++++++++++++----------------- include/grub/emu/exec.h | 3 + include/grub/osdep/exec_unix.h | 39 --------- 3 files changed, 71 insertions(+), 111 deletions(-) delete mode 100644 include/grub/osdep/exec_unix.h 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/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/osdep/exec_unix.h b/include/grub/osdep/exec_unix.h deleted file mode 100644 index ecc3adc30..000000000 --- a/include/grub/osdep/exec_unix.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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_EMU_EXEC_H -#define GRUB_EMU_EXEC_H 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); - -int -grub_util_exec (const char *const *argv); -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); - -#endif From d770e63557f461060d16d7c4377fc6455219ee34 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Mon, 16 Dec 2013 22:41:16 +0400 Subject: [PATCH 070/131] use grub_util_exec_redirect_all to silence "moprobe efivars" modprobe -q still prints error on non-EFI. Redirect stderr instead. Reported by Javier Vasquez. --- grub-core/osdep/linux/platform.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grub-core/osdep/linux/platform.c b/grub-core/osdep/linux/platform.c index ec67aad35..86561f734 100644 --- a/grub-core/osdep/linux/platform.c +++ b/grub-core/osdep/linux/platform.c @@ -69,8 +69,8 @@ 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"); if (is_not_empty_directory ("/sys/firmware/efi")) { if (is_64_kernel ()) From 35248820ea8e8bcef4f8517256ed6d78a1df9800 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Mon, 16 Dec 2013 22:56:48 +0400 Subject: [PATCH 071/131] ChangeLog for previous two commits. --- ChangeLog | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index 62759bb25..2b7968f7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +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 Make grub_xen_hypercall on i386 cdecl rather than stdcall to avoid From 840a2c059247c89b7151ad48ccdd277374672bf7 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Mon, 16 Dec 2013 23:17:40 +0400 Subject: [PATCH 072/131] add verbose information to linux platform check As suggested by Vladimir Serbienko, add additional verbose output to inform why we selected this specific platform. --- ChangeLog | 5 +++++ grub-core/osdep/linux/platform.c | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2b7968f7c..92262ceb1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/grub-core/osdep/linux/platform.c b/grub-core/osdep/linux/platform.c index 86561f734..4b9f6ef9d 100644 --- a/grub-core/osdep/linux/platform.c +++ b/grub-core/osdep/linux/platform.c @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -71,15 +72,24 @@ grub_install_get_default_x86_platform (void) */ 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")) { + grub_util_info ("...found"); if (is_64_kernel ()) return "x86_64-efi"; else return "i386-efi"; } - else 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 .."); + if (is_not_empty_directory ("/proc/device-tree")) + { + grub_util_info ("...found"); + return "i386-ieee1275"; + } + + grub_util_info ("... not found"); + return "i386-pc"; } From 2a123f4c58089ac15cf983b518465a70f75b1155 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Mon, 16 Dec 2013 20:32:43 +0100 Subject: [PATCH 073/131] * grub-core/tests/sleep_test.c: Silence spurious warning. --- ChangeLog | 4 ++++ grub-core/tests/sleep_test.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 62759bb25..faf8d81d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/grub-core/tests/sleep_test.c b/grub-core/tests/sleep_test.c index 98ea57262..3dda30312 100644 --- a/grub-core/tests/sleep_test.c +++ b/grub-core/tests/sleep_test.c @@ -32,7 +32,7 @@ static void sleep_test (void) { struct grub_datetime st, en; - grub_int32_t stu, enu; + 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"); From 6cc895971264c05e1babcc2ced31e084aa3ca0a9 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 00:33:55 +0100 Subject: [PATCH 074/131] * util/grub-mkrescue.c: Fix incorrect file usage in fallback code. Reported by: Jon McCune --- ChangeLog | 6 ++++++ util/grub-mkrescue.c | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 88406393e..b51a039b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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): diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c index 3e19cb720..b4ee8f598 100644 --- a/util/grub-mkrescue.c +++ b/util/grub-mkrescue.c @@ -509,7 +509,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 +519,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)); From a82010503e3098930a56110826c4ffe6e1609726 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 01:18:09 +0100 Subject: [PATCH 075/131] Update exclude.pot and mark few strings for translation. --- ChangeLog | 4 + grub-core/commands/xen/lsxen.c | 4 +- po/exclude.pot | 1794 +++++++++++++++++++++++++++++++- util/grub-install.c | 2 +- util/grub-mknetdir.c | 2 +- 5 files changed, 1800 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index b51a039b1..5bafe5342 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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/po/exclude.pot b/po/exclude.pot index 5f0489531..4335a5240 100644 --- a/po/exclude.pot +++ b/po/exclude.pot @@ -5155,6 +5155,1796 @@ 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 "" diff --git a/util/grub-install.c b/util/grub-install.c index 0fbf052b8..0c584084a 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -250,7 +250,7 @@ static struct argp_option options[] = { {"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}, diff --git a/util/grub-mknetdir.c b/util/grub-mknetdir.c index 26f4c0eb4..55019aa43 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} }; From 60d1dd3d72c2a956bfc8e584db3446f6405bbefd Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 12:54:11 +0100 Subject: [PATCH 076/131] Remove grub_bios_interrupt on coreboot. It's not used currently and cannot be used safely currently. --- ChangeLog | 6 ++++++ grub-core/Makefile.am | 1 - grub-core/kern/i386/coreboot/startup.S | 2 -- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5bafe5342..606b8e18a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 79c63abf1..04764384b 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -103,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 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" From 71669c3b760548c317139164043c4c748b49d730 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 13:07:26 +0100 Subject: [PATCH 077/131] Implement XEN VFB support. --- ChangeLog | 4 + configure.ac | 8 +- gentpl.py | 2 +- grub-core/Makefile.am | 12 + grub-core/Makefile.core.def | 3 + grub-core/kern/xen/init.c | 14 + grub-core/loader/i386/linux.c | 1 + grub-core/loader/i386/xen.c | 2 + grub-core/term/xen/console.c | 4 +- grub-core/term/xen/xen_kbd.c | 486 ++++++++++++++++++++++++++++ grub-core/video/xen/xenfb.c | 396 +++++++++++++++++++++++ include/grub/video.h | 3 +- include/grub/x86_64/xen/hypercall.h | 2 +- include/grub/xen.h | 9 + 14 files changed, 937 insertions(+), 9 deletions(-) create mode 100644 grub-core/term/xen/xen_kbd.c create mode 100644 grub-core/video/xen/xenfb.c diff --git a/ChangeLog b/ChangeLog index 606b8e18a..89eefba44 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + Implement XEN VFB support. + 2013-12-17 Vladimir Serbinenko Remove grub_bios_interrupt on coreboot. diff --git a/configure.ac b/configure.ac index be08d55be..e803b2a1a 100644 --- a/configure.ac +++ b/configure.ac @@ -1291,8 +1291,8 @@ if test x"$grub_build_mkfont_excuse" = x ; then else enable_build_grub_mkfont=no fi -if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then - AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont]) +if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xxen || test "x$platform" = xcoreboot ); then + AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot, xen and loongson ports needs build-time grub-mkfont]) fi AC_SUBST([build_freetype_cflags]) @@ -1360,8 +1360,8 @@ if test x"$enable_build_grub_mkfont" = xno ; then FONT_SOURCE= fi -if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then - AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont]) +if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xxen || test "x$platform" = xcoreboot ); then + AC_MSG_ERROR([qemu, powerpc-ieee1275, xen, coreboot and loongson ports need unifont]) fi AC_SUBST([FONT_SOURCE]) diff --git a/gentpl.py b/gentpl.py index bdcae1a1c..42acf0a72 100644 --- a/gentpl.py +++ b/gentpl.py @@ -64,7 +64,7 @@ GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"] GROUPS["usb"] = GROUPS["pci"] # If gfxterm is main output console integrate it into kernel -GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot" ] +GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot" ] + GROUPS["xen"] GROUPS["videomodules"] = GRUB_PLATFORMS[:]; for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i) diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 04764384b..c7adc1eba 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -135,6 +135,12 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.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 +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h endif if COND_x86_64_xen @@ -144,6 +150,12 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.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 +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h endif if COND_x86_64_efi diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 4102e73ba..e7e38a853 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -192,6 +192,9 @@ kernel = { xen = term/xen/console.c; xen = disk/xen/xendisk.c; xen = commands/boot.c; + xen = commands/keylayouts.c; + xen = video/xen/xenfb.c; + xen = term/xen/xen_kbd.c; ia64_efi = kern/ia64/efi/startup.S; ia64_efi = kern/ia64/efi/init.c; diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c index 1d8eaec1a..79973b015 100644 --- a/grub-core/kern/xen/init.c +++ b/grub-core/kern/xen/init.c @@ -27,6 +27,8 @@ #include #include #include +#include +#include grub_addr_t grub_modbase; struct start_info *grub_xen_start_page_addr; @@ -67,6 +69,7 @@ grub_xen_alloc_shared_page (domid_t dom, grub_xen_grant_t * grnum) ret = grub_memalign (GRUB_XEN_PAGE_SIZE, GRUB_XEN_PAGE_SIZE); if (!ret) return NULL; + grub_memset (ret, 0, GRUB_XEN_PAGE_SIZE); mfn = grub_xen_ptr2mfn (ret); entry->full_page.pad0 = 0; entry->full_page.frame = mfn; @@ -254,6 +257,8 @@ grub_xenstore_write_file (const char *dir, const void *buf, grub_size_t len) grub_size_t dirlen = grub_strlen (dir) + 1; char *resp; + grub_dprintf ("xen", "writing `%s'\n", dir); + grub_memset (&msg, 0, sizeof (msg)); msg.type = XS_WRITE; msg.len = dirlen + len; @@ -540,6 +545,13 @@ grub_machine_init (void) map_all_pages (); + grub_video_xen_init (); + grub_font_init (); + grub_gfxterm_init (); + + grub_keylayouts_init (); + grub_xen_keyboard_init (); + grub_console_init (); grub_tsc_init (); @@ -563,6 +575,8 @@ void grub_machine_fini (int flags __attribute__ ((unused))) { grub_xendisk_fini (); + grub_video_xen_fini (); + grub_xen_keyboard_fini (); grub_boot_fini (); } diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c index b14dbe714..cbd17eb37 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -344,6 +344,7 @@ grub_linux_setup_video (struct linux_kernel_params *params) 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: diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c index 91b66f8f5..732a47a87 100644 --- a/grub-core/loader/i386/xen.c +++ b/grub-core/loader/i386/xen.c @@ -222,6 +222,8 @@ grub_xen_boot (void) grub_xen_mfn_t *new_mfn_list; grub_size_t i; + grub_video_restore (); + if (grub_xen_n_allocated_shared_pages) return grub_error (GRUB_ERR_BUG, "active grants"); diff --git a/grub-core/term/xen/console.c b/grub-core/term/xen/console.c index a1f15f71a..ddbf5f35e 100644 --- a/grub-core/term/xen/console.c +++ b/grub-core/term/xen/console.c @@ -114,8 +114,8 @@ static struct grub_term_output grub_console_term_output = { void grub_console_init (void) { - grub_term_register_input ("console", &grub_console_term_input); - grub_term_register_output ("console", &grub_console_term_output); + grub_term_register_input_active ("console", &grub_console_term_input); + grub_term_register_output_active ("console", &grub_console_term_output); grub_terminfo_init (); grub_terminfo_output_register (&grub_console_term_output, "vt100-color"); diff --git a/grub-core/term/xen/xen_kbd.c b/grub-core/term/xen/xen_kbd.c new file mode 100644 index 000000000..38a6ffd50 --- /dev/null +++ b/grub-core/term/xen/xen_kbd.c @@ -0,0 +1,486 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009 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 short xen_keyboard_status = 0; + +static const grub_uint8_t mapping[128] = + { + /* 0x00 */ 0 /* Unused */, GRUB_KEYBOARD_KEY_ESCAPE, + /* 0x02 */ GRUB_KEYBOARD_KEY_1, GRUB_KEYBOARD_KEY_2, + /* 0x04 */ GRUB_KEYBOARD_KEY_3, GRUB_KEYBOARD_KEY_4, + /* 0x06 */ GRUB_KEYBOARD_KEY_5, GRUB_KEYBOARD_KEY_6, + /* 0x08 */ GRUB_KEYBOARD_KEY_7, GRUB_KEYBOARD_KEY_8, + /* 0x0a */ GRUB_KEYBOARD_KEY_9, GRUB_KEYBOARD_KEY_0, + /* 0x0c */ GRUB_KEYBOARD_KEY_DASH, GRUB_KEYBOARD_KEY_EQUAL, + /* 0x0e */ GRUB_KEYBOARD_KEY_BACKSPACE, GRUB_KEYBOARD_KEY_TAB, + /* 0x10 */ GRUB_KEYBOARD_KEY_Q, GRUB_KEYBOARD_KEY_W, + /* 0x12 */ GRUB_KEYBOARD_KEY_E, GRUB_KEYBOARD_KEY_R, + /* 0x14 */ GRUB_KEYBOARD_KEY_T, GRUB_KEYBOARD_KEY_Y, + /* 0x16 */ GRUB_KEYBOARD_KEY_U, GRUB_KEYBOARD_KEY_I, + /* 0x18 */ GRUB_KEYBOARD_KEY_O, GRUB_KEYBOARD_KEY_P, + /* 0x1a */ GRUB_KEYBOARD_KEY_LBRACKET, GRUB_KEYBOARD_KEY_RBRACKET, + /* 0x1c */ GRUB_KEYBOARD_KEY_ENTER, GRUB_KEYBOARD_KEY_LEFT_CTRL, + /* 0x1e */ GRUB_KEYBOARD_KEY_A, GRUB_KEYBOARD_KEY_S, + /* 0x20 */ GRUB_KEYBOARD_KEY_D, GRUB_KEYBOARD_KEY_F, + /* 0x22 */ GRUB_KEYBOARD_KEY_G, GRUB_KEYBOARD_KEY_H, + /* 0x24 */ GRUB_KEYBOARD_KEY_J, GRUB_KEYBOARD_KEY_K, + /* 0x26 */ GRUB_KEYBOARD_KEY_L, GRUB_KEYBOARD_KEY_SEMICOLON, + /* 0x28 */ GRUB_KEYBOARD_KEY_DQUOTE, GRUB_KEYBOARD_KEY_RQUOTE, + /* 0x2a */ GRUB_KEYBOARD_KEY_LEFT_SHIFT, GRUB_KEYBOARD_KEY_BACKSLASH, + /* 0x2c */ GRUB_KEYBOARD_KEY_Z, GRUB_KEYBOARD_KEY_X, + /* 0x2e */ GRUB_KEYBOARD_KEY_C, GRUB_KEYBOARD_KEY_V, + /* 0x30 */ GRUB_KEYBOARD_KEY_B, GRUB_KEYBOARD_KEY_N, + /* 0x32 */ GRUB_KEYBOARD_KEY_M, GRUB_KEYBOARD_KEY_COMMA, + /* 0x34 */ GRUB_KEYBOARD_KEY_DOT, GRUB_KEYBOARD_KEY_SLASH, + /* 0x36 */ GRUB_KEYBOARD_KEY_RIGHT_SHIFT, GRUB_KEYBOARD_KEY_NUMMUL, + /* 0x38 */ GRUB_KEYBOARD_KEY_LEFT_ALT, GRUB_KEYBOARD_KEY_SPACE, + /* 0x3a */ GRUB_KEYBOARD_KEY_CAPS_LOCK, GRUB_KEYBOARD_KEY_F1, + /* 0x3c */ GRUB_KEYBOARD_KEY_F2, GRUB_KEYBOARD_KEY_F3, + /* 0x3e */ GRUB_KEYBOARD_KEY_F4, GRUB_KEYBOARD_KEY_F5, + /* 0x40 */ GRUB_KEYBOARD_KEY_F6, GRUB_KEYBOARD_KEY_F7, + /* 0x42 */ GRUB_KEYBOARD_KEY_F8, GRUB_KEYBOARD_KEY_F9, + /* 0x44 */ GRUB_KEYBOARD_KEY_F10, GRUB_KEYBOARD_KEY_NUM_LOCK, + /* 0x46 */ GRUB_KEYBOARD_KEY_SCROLL_LOCK, GRUB_KEYBOARD_KEY_NUM7, + /* 0x48 */ GRUB_KEYBOARD_KEY_NUM8, GRUB_KEYBOARD_KEY_NUM9, + /* 0x4a */ GRUB_KEYBOARD_KEY_NUMMINUS, GRUB_KEYBOARD_KEY_NUM4, + /* 0x4c */ GRUB_KEYBOARD_KEY_NUM5, GRUB_KEYBOARD_KEY_NUM6, + /* 0x4e */ GRUB_KEYBOARD_KEY_NUMPLUS, GRUB_KEYBOARD_KEY_NUM1, + /* 0x50 */ GRUB_KEYBOARD_KEY_NUM2, GRUB_KEYBOARD_KEY_NUM3, + /* 0x52 */ GRUB_KEYBOARD_KEY_NUMDOT, GRUB_KEYBOARD_KEY_NUMDOT, + /* 0x54 */ 0, 0, + /* 0x56 */ GRUB_KEYBOARD_KEY_102ND, GRUB_KEYBOARD_KEY_F11, + /* 0x58 */ GRUB_KEYBOARD_KEY_F12, 0, + /* 0x5a */ 0, 0, + /* 0x5c */ 0, 0, + /* 0x5e */ 0, 0, + /* 0x60 */ 0, GRUB_KEYBOARD_KEY_RIGHT_CTRL, + /* 0x62 */ 0, 0, + /* 0x64 */ GRUB_KEYBOARD_KEY_RIGHT_ALT, 0, + /* 0x66 */ GRUB_KEYBOARD_KEY_HOME, GRUB_KEYBOARD_KEY_UP, + /* 0x68 */ GRUB_KEYBOARD_KEY_PPAGE, GRUB_KEYBOARD_KEY_LEFT, + /* 0x6a */ GRUB_KEYBOARD_KEY_RIGHT, GRUB_KEYBOARD_KEY_END, + /* 0x6c */ GRUB_KEYBOARD_KEY_DOWN, GRUB_KEYBOARD_KEY_NPAGE, + /* 0x6e */ GRUB_KEYBOARD_KEY_INSERT, GRUB_KEYBOARD_KEY_DELETE, + /* 0x70 */ 0, 0, + /* 0x72 */ 0, GRUB_KEYBOARD_KEY_JP_RO, + /* 0x74 */ 0, 0, + /* 0x76 */ 0, 0, + /* 0x78 */ 0, 0, + /* 0x7a */ 0, 0, + /* 0x7c */ 0, GRUB_KEYBOARD_KEY_JP_YEN, + /* 0x7e */ GRUB_KEYBOARD_KEY_KPCOMMA + }; + +struct virtkbd +{ + int handle; + char *fullname; + char *backend_dir; + char *frontend_dir; + struct xenkbd_page *kbdpage; + grub_xen_grant_t grant; + grub_xen_evtchn_t evtchn; +}; + +struct virtkbd vkbd; + +static grub_xen_mfn_t +grub_xen_ptr2mfn (void *ptr) +{ + grub_xen_mfn_t *mfn_list = + (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list; + return mfn_list[(grub_addr_t) ptr >> GRUB_XEN_LOG_PAGE_SIZE]; +} + +static int +fill (const char *dir, void *data __attribute__ ((unused))) +{ + domid_t dom; + /* "dir" is just a number, at most 19 characters. */ + char fdir[200]; + char num[20]; + grub_err_t err; + void *buf; + struct evtchn_alloc_unbound alloc_unbound; + + if (vkbd.kbdpage) + return 1; + vkbd.handle = grub_strtoul (dir, 0, 10); + if (grub_errno) + { + grub_errno = 0; + return 0; + } + vkbd.fullname = 0; + vkbd.backend_dir = 0; + + grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/backend", dir); + vkbd.backend_dir = grub_xenstore_get_file (fdir, NULL); + if (!vkbd.backend_dir) + goto out_fail_1; + + grub_snprintf (fdir, sizeof (fdir), "%s/dev", + vkbd.backend_dir); + + grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/backend-id", dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + goto out_fail_1; + + dom = grub_strtoul (buf, 0, 10); + grub_free (buf); + if (grub_errno) + goto out_fail_1; + + vkbd.kbdpage = + grub_xen_alloc_shared_page (dom, &vkbd.grant); + if (!vkbd.kbdpage) + goto out_fail_1; + + grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/page-ref", dir); + grub_snprintf (num, sizeof (num), "%llu", (unsigned long long) grub_xen_ptr2mfn (vkbd.kbdpage)); + err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); + if (err) + goto out_fail_3; + + grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/protocol", dir); + err = grub_xenstore_write_file (fdir, XEN_IO_PROTO_ABI_NATIVE, + grub_strlen (XEN_IO_PROTO_ABI_NATIVE)); + if (err) + goto out_fail_3; + + alloc_unbound.dom = DOMID_SELF; + alloc_unbound.remote_dom = dom; + + grub_xen_event_channel_op (EVTCHNOP_alloc_unbound, &alloc_unbound); + vkbd.evtchn = alloc_unbound.port; + + grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/event-channel", dir); + grub_snprintf (num, sizeof (num), "%u", vkbd.evtchn); + err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); + if (err) + goto out_fail_3; + + + struct gnttab_dump_table dt; + dt.dom = DOMID_SELF; + grub_xen_grant_table_op (GNTTABOP_dump_table, (void *) &dt, 1); + + grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s", dir); + + vkbd.frontend_dir = grub_strdup (fdir); + + vkbd.kbdpage->in_cons = 0; + vkbd.kbdpage->in_prod = 0; + vkbd.kbdpage->out_cons = 0; + vkbd.kbdpage->out_prod = 0; + + grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/state", dir); + err = grub_xenstore_write_file (fdir, "3", 1); + if (err) + goto out_fail_3; + + while (1) + { + grub_snprintf (fdir, sizeof (fdir), "%s/state", + vkbd.backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + goto out_fail_3; + if (grub_strcmp (buf, "2") != 0) + break; + grub_free (buf); + grub_xen_sched_op (SCHEDOP_yield, 0); + } + grub_dprintf ("xen", "state=%s\n", (char *) buf); + grub_free (buf); + + return 1; + +out_fail_3: + grub_xen_free_shared_page (vkbd.kbdpage); +out_fail_1: + + vkbd.kbdpage = 0; + grub_free (vkbd.backend_dir); + grub_free (vkbd.fullname); + + grub_errno = 0; + return 0; +} + +static void +vkbd_fini (void) +{ + char fdir[200]; + + char *buf; + struct evtchn_close close_op = {.port = vkbd.evtchn }; + + if (!vkbd.kbdpage) + return; + + grub_snprintf (fdir, sizeof (fdir), "%s/state", + vkbd.frontend_dir); + grub_xenstore_write_file (fdir, "6", 1); + + while (1) + { + grub_snprintf (fdir, sizeof (fdir), "%s/state", + vkbd.backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + grub_dprintf ("xen", "state=%s\n", (char *) buf); + + if (!buf || grub_strcmp (buf, "6") == 0) + break; + grub_free (buf); + grub_xen_sched_op (SCHEDOP_yield, 0); + } + grub_free (buf); + + grub_snprintf (fdir, sizeof (fdir), "%s/page-ref", + vkbd.frontend_dir); + grub_xenstore_write_file (fdir, NULL, 0); + + grub_snprintf (fdir, sizeof (fdir), "%s/event-channel", + vkbd.frontend_dir); + grub_xenstore_write_file (fdir, NULL, 0); + + grub_xen_free_shared_page (vkbd.kbdpage); + vkbd.kbdpage = 0; + + grub_xen_event_channel_op (EVTCHNOP_close, &close_op); + + /* Prepare for handoff. */ + grub_snprintf (fdir, sizeof (fdir), "%s/state", + vkbd.frontend_dir); + grub_xenstore_write_file (fdir, "1", 1); +} + +static grub_err_t +vkbd_init (void) +{ + if (vkbd.kbdpage) + vkbd_fini (); + grub_xenstore_dir ("device/vkbd", fill, NULL); + if (vkbd.kbdpage) + grub_errno = 0; + if (!vkbd.kbdpage) + return grub_error (GRUB_ERR_IO, "couldn't init vkbd"); + return GRUB_ERR_NONE; +} + +static int +fetch_key (int *is_break) +{ + grub_uint32_t prod; + + if (!vkbd.kbdpage) + { + *is_break = 0; + return -1; + } + + mb (); + + prod = vkbd.kbdpage->in_prod; + + mb (); + + for (;vkbd.kbdpage->in_cons < prod; vkbd.kbdpage->in_cons++) + { + grub_uint32_t keycode; + int ret = 0; + if (XENKBD_IN_RING_REF(vkbd.kbdpage, vkbd.kbdpage->in_cons).type != XENKBD_TYPE_KEY) + continue; + keycode = XENKBD_IN_RING_REF(vkbd.kbdpage, vkbd.kbdpage->in_cons).key.keycode; + *is_break = !XENKBD_IN_RING_REF(vkbd.kbdpage, vkbd.kbdpage->in_cons).key.pressed; + + if (keycode < ARRAY_SIZE (mapping)) + ret = mapping[keycode]; + if (ret == 0) + { + grub_printf ("unknown keycode = %lx\n", (unsigned long) keycode); + continue; + } + vkbd.kbdpage->in_cons++; + return ret; + } + *is_break = 0; + return -1; +} + +static int +grub_keyboard_isr (grub_keyboard_key_t key, int is_break) +{ + if (!is_break) + switch (key) + { + case GRUB_KEYBOARD_KEY_LEFT_SHIFT: + xen_keyboard_status |= GRUB_TERM_STATUS_LSHIFT; + return 1; + case GRUB_KEYBOARD_KEY_RIGHT_SHIFT: + xen_keyboard_status |= GRUB_TERM_STATUS_RSHIFT; + return 1; + case GRUB_KEYBOARD_KEY_LEFT_CTRL: + xen_keyboard_status |= GRUB_TERM_STATUS_LCTRL; + return 1; + case GRUB_KEYBOARD_KEY_RIGHT_CTRL: + xen_keyboard_status |= GRUB_TERM_STATUS_RCTRL; + return 1; + case GRUB_KEYBOARD_KEY_RIGHT_ALT: + xen_keyboard_status |= GRUB_TERM_STATUS_RALT; + return 1; + case GRUB_KEYBOARD_KEY_LEFT_ALT: + xen_keyboard_status |= GRUB_TERM_STATUS_LALT; + return 1; + default: + return 0; + } + else + switch (key) + { + case GRUB_KEYBOARD_KEY_LEFT_SHIFT: + xen_keyboard_status &= ~GRUB_TERM_STATUS_LSHIFT; + return 1; + case GRUB_KEYBOARD_KEY_RIGHT_SHIFT: + xen_keyboard_status &= ~GRUB_TERM_STATUS_RSHIFT; + return 1; + case GRUB_KEYBOARD_KEY_LEFT_CTRL: + xen_keyboard_status &= ~GRUB_TERM_STATUS_LCTRL; + return 1; + case GRUB_KEYBOARD_KEY_RIGHT_CTRL: + xen_keyboard_status &= ~GRUB_TERM_STATUS_RCTRL; + return 1; + case GRUB_KEYBOARD_KEY_RIGHT_ALT: + xen_keyboard_status &= ~GRUB_TERM_STATUS_RALT; + return 1; + case GRUB_KEYBOARD_KEY_LEFT_ALT: + xen_keyboard_status &= ~GRUB_TERM_STATUS_LALT; + return 1; + default: + return 0; + } +} + +/* If there is a raw key pending, return it; otherwise return -1. */ +static int +grub_keyboard_getkey (void) +{ + int key; + int is_break = 0; + + key = fetch_key (&is_break); + if (key == -1) + return -1; + + if (grub_keyboard_isr (key, is_break)) + return -1; + if (is_break) + return -1; + return key; +} + + +/* If there is a character pending, return it; + otherwise return GRUB_TERM_NO_KEY. */ +static int +grub_xen_keyboard_getkey (struct grub_term_input *term __attribute__ ((unused))) +{ + int code; + + code = grub_keyboard_getkey (); + if (code == -1) + return GRUB_TERM_NO_KEY; + switch (code) + { + case GRUB_KEYBOARD_KEY_CAPS_LOCK: + xen_keyboard_status ^= GRUB_TERM_STATUS_CAPS; + return GRUB_TERM_NO_KEY; + case GRUB_KEYBOARD_KEY_NUM_LOCK: + xen_keyboard_status ^= GRUB_TERM_STATUS_NUM; + return GRUB_TERM_NO_KEY; + case GRUB_KEYBOARD_KEY_SCROLL_LOCK: + xen_keyboard_status ^= GRUB_TERM_STATUS_SCROLL; + return GRUB_TERM_NO_KEY; + default: + return grub_term_map_key (code, xen_keyboard_status); + } +} + +static grub_err_t +grub_keyboard_controller_init (struct grub_term_input *term __attribute__ ((unused))) +{ + vkbd_init (); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_keyboard_controller_fini (struct grub_term_input *term __attribute__ ((unused))) +{ + vkbd_fini (); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_xen_fini_hw (int noreturn __attribute__ ((unused))) +{ + vkbd_fini (); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_xen_restore_hw (void) +{ + vkbd_init (); + return GRUB_ERR_NONE; +} + + +static struct grub_term_input grub_xen_keyboard_term = + { + .name = "xen_keyboard", + .init = grub_keyboard_controller_init, + .fini = grub_keyboard_controller_fini, + .getkey = grub_xen_keyboard_getkey + }; + +void +grub_xen_keyboard_init (void) +{ + grub_term_register_input ("xen_keyboard", &grub_xen_keyboard_term); + grub_loader_register_preboot_hook (grub_xen_fini_hw, grub_xen_restore_hw, + GRUB_LOADER_PREBOOT_HOOK_PRIO_CONSOLE); +} + +GRUB_MOD_FINI(xen_keyboard) +{ + grub_keyboard_controller_fini (NULL); + grub_term_unregister_input (&grub_xen_keyboard_term); +} diff --git a/grub-core/video/xen/xenfb.c b/grub-core/video/xen/xenfb.c new file mode 100644 index 000000000..7041e4ccb --- /dev/null +++ b/grub-core/video/xen/xenfb.c @@ -0,0 +1,396 @@ +/* + * 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 . + */ + +#define grub_video_render_target grub_video_fbrender_target + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct virtfb +{ + int handle; + char *fullname; + char *backend_dir; + char *frontend_dir; + struct xenfb_page *fbpage; + grub_xen_grant_t grant; + grub_xen_evtchn_t evtchn; + char *framebuffer; + grub_xen_mfn_t *page_directory; + int width, height; +}; + +struct virtfb vfb; + +static grub_xen_mfn_t +grub_xen_ptr2mfn (void *ptr) +{ + grub_xen_mfn_t *mfn_list = + (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list; + return mfn_list[(grub_addr_t) ptr >> GRUB_XEN_LOG_PAGE_SIZE]; +} + +static int +fill (const char *dir, void *data __attribute__ ((unused))) +{ + domid_t dom; + /* "dir" is just a number, at most 19 characters. */ + char fdir[200]; + char num[20]; + grub_err_t err; + void *buf; + struct evtchn_alloc_unbound alloc_unbound; + + if (vfb.fbpage) + return 1; + vfb.handle = grub_strtoul (dir, 0, 10); + if (grub_errno) + { + grub_errno = 0; + return 0; + } + vfb.fullname = 0; + vfb.backend_dir = 0; + + grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/backend", dir); + vfb.backend_dir = grub_xenstore_get_file (fdir, NULL); + if (!vfb.backend_dir) + goto out_fail_1; + + grub_snprintf (fdir, sizeof (fdir), "%s/dev", + vfb.backend_dir); + + grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/backend-id", dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + goto out_fail_1; + + dom = grub_strtoul (buf, 0, 10); + grub_free (buf); + if (grub_errno) + goto out_fail_1; + + vfb.fbpage = + grub_xen_alloc_shared_page (dom, &vfb.grant); + if (!vfb.fbpage) + goto out_fail_1; + + grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/page-ref", dir); + grub_snprintf (num, sizeof (num), "%llu", (unsigned long long) grub_xen_ptr2mfn (vfb.fbpage)); + err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); + if (err) + goto out_fail_3; + + grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/protocol", dir); + err = grub_xenstore_write_file (fdir, XEN_IO_PROTO_ABI_NATIVE, + grub_strlen (XEN_IO_PROTO_ABI_NATIVE)); + if (err) + goto out_fail_3; + + alloc_unbound.dom = DOMID_SELF; + alloc_unbound.remote_dom = dom; + + grub_xen_event_channel_op (EVTCHNOP_alloc_unbound, &alloc_unbound); + vfb.evtchn = alloc_unbound.port; + + grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/event-channel", dir); + grub_snprintf (num, sizeof (num), "%u", vfb.evtchn); + err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); + if (err) + goto out_fail_3; + + + struct gnttab_dump_table dt; + dt.dom = DOMID_SELF; + grub_xen_grant_table_op (GNTTABOP_dump_table, (void *) &dt, 1); + + grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s", dir); + + vfb.frontend_dir = grub_strdup (fdir); + + grub_size_t i; + + const unsigned pages_per_pd = (GRUB_XEN_PAGE_SIZE / sizeof (grub_xen_mfn_t)); + + vfb.fbpage->in_cons = 0; + vfb.fbpage->in_prod = 0; + vfb.fbpage->out_cons = 0; + vfb.fbpage->out_prod = 0; + + vfb.fbpage->width = vfb.width; + vfb.fbpage->height = vfb.height; + vfb.fbpage->line_length = vfb.width * 4; + vfb.fbpage->depth = 32; + + grub_size_t fbsize = ALIGN_UP (vfb.width * vfb.height * 4, GRUB_XEN_PAGE_SIZE); + + vfb.fbpage->mem_length = fbsize; + + grub_size_t fbpages = fbsize / GRUB_XEN_PAGE_SIZE; + grub_size_t pd_size = ALIGN_UP (fbpages, pages_per_pd); + + vfb.framebuffer = grub_memalign (GRUB_XEN_PAGE_SIZE, fbsize); + if (!vfb.framebuffer) + goto out_fail_3; + vfb.page_directory = grub_memalign (GRUB_XEN_PAGE_SIZE, pd_size * sizeof (grub_xen_mfn_t)); + if (!vfb.page_directory) + goto out_fail_3; + + for (i = 0; i < fbpages; i++) + vfb.page_directory[i] = grub_xen_ptr2mfn (vfb.framebuffer + GRUB_XEN_PAGE_SIZE * i); + for (; i < pd_size; i++) + vfb.page_directory[i] = 0; + + for (i = 0; i < pd_size / pages_per_pd; i++) + vfb.fbpage->pd[i] = grub_xen_ptr2mfn (vfb.page_directory + (GRUB_XEN_PAGE_SIZE / sizeof (vfb.page_directory[0])) * i); + + + grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/state", dir); + err = grub_xenstore_write_file (fdir, "3", 1); + if (err) + goto out_fail_3; + + while (1) + { + grub_snprintf (fdir, sizeof (fdir), "%s/state", + vfb.backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + goto out_fail_3; + if (grub_strcmp (buf, "2") != 0) + break; + grub_free (buf); + grub_xen_sched_op (SCHEDOP_yield, 0); + } + grub_dprintf ("xen", "state=%s\n", (char *) buf); + grub_free (buf); + + return 1; + +out_fail_3: + grub_xen_free_shared_page (vfb.fbpage); +out_fail_1: + grub_free (vfb.framebuffer); + vfb.framebuffer = 0; + grub_free (vfb.page_directory); + vfb.page_directory = 0; + + vfb.fbpage = 0; + grub_free (vfb.backend_dir); + grub_free (vfb.fullname); + + grub_errno = 0; + return 0; +} + +static void +vfb_fini (void) +{ + char fdir[200]; + + char *buf; + struct evtchn_close close_op = {.port = vfb.evtchn }; + + if (!vfb.fbpage) + return; + + grub_snprintf (fdir, sizeof (fdir), "%s/state", + vfb.frontend_dir); + grub_xenstore_write_file (fdir, "6", 1); + + while (1) + { + grub_snprintf (fdir, sizeof (fdir), "%s/state", + vfb.backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + grub_dprintf ("xen", "state=%s\n", (char *) buf); + + if (!buf || grub_strcmp (buf, "6") == 0) + break; + grub_free (buf); + grub_xen_sched_op (SCHEDOP_yield, 0); + } + grub_free (buf); + + grub_snprintf (fdir, sizeof (fdir), "%s/page-ref", + vfb.frontend_dir); + grub_xenstore_write_file (fdir, NULL, 0); + + grub_snprintf (fdir, sizeof (fdir), "%s/event-channel", + vfb.frontend_dir); + grub_xenstore_write_file (fdir, NULL, 0); + + grub_xen_free_shared_page (vfb.fbpage); + vfb.fbpage = 0; + + grub_xen_event_channel_op (EVTCHNOP_close, &close_op); + + /* Prepare for handoff. */ + grub_snprintf (fdir, sizeof (fdir), "%s/state", + vfb.frontend_dir); + grub_xenstore_write_file (fdir, "1", 1); + + grub_free (vfb.framebuffer); + vfb.framebuffer = 0; + grub_free (vfb.page_directory); + vfb.page_directory = 0; +} + +static grub_err_t +vfb_init (int width, int height) +{ + if (vfb.fbpage) + vfb_fini (); + vfb.width = width; + vfb.height = height; + grub_xenstore_dir ("device/vfb", fill, NULL); + if (vfb.fbpage) + grub_errno = 0; + if (!vfb.fbpage) + return grub_error (GRUB_ERR_IO, "couldn't init vfb"); + return GRUB_ERR_NONE; +} + +static void +grub_video_xenfb_fill_mode_info (struct grub_video_mode_info *out) +{ + grub_memset (out, 0, sizeof (*out)); + + out->pitch = vfb.width * 4; + out->width = vfb.width; + out->height = vfb.height; + + out->mode_type = GRUB_VIDEO_MODE_TYPE_RGB; + out->bpp = 32; + out->bytes_per_pixel = 4; + out->number_of_colors = 256; + out->reserved_mask_size = 8; + out->reserved_field_pos = 24; + out->red_mask_size = 8; + out->red_field_pos = 16; + out->green_mask_size = 8; + out->green_field_pos = 8; + out->blue_mask_size = 8; + out->blue_field_pos = 0; + + out->blit_format = grub_video_get_blit_format (out); +} + +static grub_err_t +grub_video_ieee1275_setup (unsigned int width, unsigned int height, + unsigned int mode_type __attribute__ ((unused)), + unsigned int mode_mask __attribute__ ((unused))) +{ + struct grub_video_mode_info modeinfo; + grub_err_t err; + + err = vfb_init (width ? : 800, height ? : 600); + if (err) + return err; + grub_video_xenfb_fill_mode_info (&modeinfo); + + err = grub_video_fb_setup (mode_type, mode_mask, + &modeinfo, + vfb.framebuffer, NULL, NULL); + if (err) + return err; + + err = grub_video_fb_set_palette (0, GRUB_VIDEO_FBSTD_NUMCOLORS, + grub_video_fbstd_colors); + + return err; +} + +static grub_err_t +grub_video_xenfb_get_info_and_fini (struct grub_video_mode_info *mode_info, + void **framebuf) +{ + grub_video_xenfb_fill_mode_info (mode_info); + *framebuf = vfb.framebuffer; + + grub_video_fb_fini (); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_video_vfb_fini (void) +{ + vfb_fini (); + return grub_video_fb_fini (); +} + + +static struct grub_video_adapter grub_video_xen_adapter = + { + .name = "XEN video driver", + + .prio = GRUB_VIDEO_ADAPTER_PRIO_NATIVE, + .id = GRUB_VIDEO_DRIVER_XEN, + + .init = grub_video_fb_init, + .fini = grub_video_vfb_fini, + .setup = grub_video_ieee1275_setup, + .get_info = grub_video_fb_get_info, + .get_info_and_fini = grub_video_xenfb_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_fb_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_fb_set_active_render_target, + .get_active_render_target = grub_video_fb_get_active_render_target, + + .next = 0 + }; + +void +grub_video_xen_init (void) +{ + grub_video_register (&grub_video_xen_adapter); +} + +void +grub_video_xen_fini (void) +{ + vfb_fini (); + grub_video_unregister (&grub_video_xen_adapter); +} diff --git a/include/grub/video.h b/include/grub/video.h index bca677789..14e7054e8 100644 --- a/include/grub/video.h +++ b/include/grub/video.h @@ -290,7 +290,8 @@ 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_id_t; typedef enum grub_video_adapter_prio diff --git a/include/grub/x86_64/xen/hypercall.h b/include/grub/x86_64/xen/hypercall.h index ad89d6c62..e5ea26ba9 100644 --- a/include/grub/x86_64/xen/hypercall.h +++ b/include/grub/x86_64/xen/hypercall.h @@ -21,7 +21,7 @@ int EXPORT_FUNC (grub_xen_sched_op) (int cmd, void *arg) __attribute__ ((sysv_abi)); int grub_xen_update_va_mapping (void *addr, uint64_t pte, uint64_t flags) __attribute__ ((sysv_abi)); -int grub_xen_event_channel_op (int op, void *arg) __attribute__ ((sysv_abi)); +int EXPORT_FUNC (grub_xen_event_channel_op) (int op, void *arg) __attribute__ ((sysv_abi)); int grub_xen_mmuext_op (mmuext_op_t * ops, unsigned int count, diff --git a/include/grub/xen.h b/include/grub/xen.h index 062c95d9f..f7bf2340a 100644 --- a/include/grub/xen.h +++ b/include/grub/xen.h @@ -82,6 +82,15 @@ void grub_console_init (void); void grub_xendisk_fini (void); void grub_xendisk_init (void); +void +grub_xen_keyboard_init (void); +void +grub_xen_keyboard_fini (void); +void +grub_video_xen_init (void); +void +grub_video_xen_fini (void); + #ifdef __x86_64__ typedef grub_uint64_t grub_xen_mfn_t; #else From d16ff5897fc32649d8c9b2e64ca13c9f2e79c29c Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 13:19:58 +0100 Subject: [PATCH 078/131] * grub-core/lib/x86_64/xen/relocator.S: Fix hypercall ABI violation. GRUB relied on %rdi being preserved across hypercall which isn't true. --- ChangeLog | 6 ++++++ grub-core/lib/x86_64/xen/relocator.S | 12 +++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 89eefba44..a9f807a07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. 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 From 2c384f1e6e16edf9ee8eac83cc549a58d01830f2 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 13:40:52 +0100 Subject: [PATCH 079/131] * grub-core/lib/i386/xen/relocator.S: Fix hypercall ABI violation. GRUB relied on %ebx being preserved across hypercall which isn't true. --- ChangeLog | 6 +++++ grub-core/lib/i386/xen/relocator.S | 40 ++++++++++++++++-------------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index a9f807a07..d387ddae9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. 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 From 296f76068dac985061598aaed1c0e9ccd3f38a16 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 13:55:47 +0100 Subject: [PATCH 080/131] Change to v1 xen grants. --- ChangeLog | 4 ++++ grub-core/kern/xen/init.c | 23 +++++++++++------------ include/grub/xen.h | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index d387ddae9..b24b9eb35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c index 79973b015..f9a718015 100644 --- a/grub-core/kern/xen/init.c +++ b/grub-core/kern/xen/init.c @@ -35,7 +35,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; @@ -53,12 +53,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) @@ -71,11 +71,10 @@ grub_xen_alloc_shared_page (domid_t dom, grub_xen_grant_t * grnum) return NULL; grub_memset (ret, 0, GRUB_XEN_PAGE_SIZE); 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++; @@ -86,17 +85,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--; @@ -373,7 +372,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/include/grub/xen.h b/include/grub/xen.h index f7bf2340a..593fe67f3 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); From ec824e0f2a399ce2ab3a2e3353d372a236595059 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 14:39:48 +0100 Subject: [PATCH 081/131] Implement grub_file tool and use it to implement generating of config in separate root. --- ChangeLog | 5 + Makefile.util.def | 37 +- configure.ac | 7 +- docs/man/grub-file.h2m | 2 + grub-core/Makefile.core.def | 31 +- grub-core/commands/file.c | 641 +++++++++++++++++++++++++++++++ grub-core/commands/file32.c | 5 + grub-core/commands/file64.c | 5 + grub-core/commands/fileXX.c | 68 ++++ grub-core/io/xzio.c | 10 +- grub-core/loader/i386/linux.c | 2 +- grub-core/loader/i386/xen_file.c | 9 +- include/grub/elf.h | 2 +- include/grub/fileid.h | 29 ++ util/grub-file.c | 107 ++++++ util/grub-mkconfig.in | 56 ++- util/grub-mkconfig_lib.in | 3 + util/grub-pe2elf.c | 10 - util/grub.d/00_header.in | 2 +- util/grub.d/10_hurd.in | 26 +- util/grub.d/10_illumos.in | 17 +- util/grub.d/10_kfreebsd.in | 30 +- util/grub.d/10_linux.in | 51 ++- util/grub.d/10_netbsd.in | 37 +- util/grub.d/10_xnu.in | 15 +- util/grub.d/20_linux_xen.in | 28 +- 26 files changed, 1113 insertions(+), 122 deletions(-) create mode 100644 docs/man/grub-file.h2m create mode 100644 grub-core/commands/file.c create mode 100644 grub-core/commands/file32.c create mode 100644 grub-core/commands/file64.c create mode 100644 grub-core/commands/fileXX.c create mode 100644 include/grub/fileid.h create mode 100644 util/grub-file.c diff --git a/ChangeLog b/ChangeLog index b24b9eb35..d84b0aca3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/Makefile.util.def b/Makefile.util.def index 470191700..2720f6bd3 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -154,6 +154,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; @@ -422,49 +423,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 = { @@ -1255,3 +1249,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/configure.ac b/configure.ac index e803b2a1a..dfb4f69ce 100644 --- a/configure.ac +++ b/configure.ac @@ -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 @@ -1608,13 +1609,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]) 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/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index e7e38a853..3d70d0241 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1659,10 +1659,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; @@ -1680,16 +1676,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; @@ -2269,3 +2270,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/commands/file.c b/grub-core/commands/file.c new file mode 100644 index 000000000..c27df0c50 --- /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, + "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..4d5c9d7ef --- /dev/null +++ b/grub-core/commands/fileXX.c @@ -0,0 +1,68 @@ +/* + * 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 + +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/io/xzio.c b/grub-core/io/xzio.c index bcce24290..e57f8019e 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; } diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c index cbd17eb37..a32c88e97 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -707,7 +707,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; 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/include/grub/elf.h b/include/grub/elf.h index 79f56c67b..caa796390 100644 --- a/include/grub/elf.h +++ b/include/grub/elf.h @@ -2467,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/fileid.h b/include/grub/fileid.h new file mode 100644 index 000000000..ae75b6912 --- /dev/null +++ b/include/grub/fileid.h @@ -0,0 +1,29 @@ +/* + * 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_FILEID_HEADER +#define GRUB_FILEID_HEADER 1 + +#include + +int +grub_file_check_netbsd32 (grub_elf_t elf); +int +grub_file_check_netbsd64 (grub_elf_t elf); + +#endif diff --git a/util/grub-file.c b/util/grub-file.c new file mode 100644 index 000000000..2591ecdd9 --- /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 (argv)); + + 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 ("multiple files specified"); + 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-mkconfig.in b/util/grub-mkconfig.in index 3390ba90f..0ca0db189 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 @@ -128,19 +137,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 @@ -177,6 +186,7 @@ if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub # 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 \ @@ -243,18 +253,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 diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in index a9cf7fc55..14fadbcbb 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-pe2elf.c b/util/grub-pe2elf.c index a48ef2395..f4abf70a3 100644 --- a/util/grub-pe2elf.c +++ b/util/grub-pe2elf.c @@ -50,19 +50,9 @@ #if GRUB_TARGET_WORDSIZE == 64 typedef Elf64_Rela elf_reloc_t; -typedef Elf64_Ehdr Elf_Ehdr; -typedef Elf64_Shdr Elf_Shdr; -typedef Elf64_Sym Elf_Sym; -#define ELF_R_INFO ELF64_R_INFO -#define ELF_ST_INFO ELF64_ST_INFO #define GRUB_PE32_MACHINE GRUB_PE32_MACHINE_X86_64 #else typedef Elf32_Rel elf_reloc_t; -typedef Elf32_Ehdr Elf_Ehdr; -typedef Elf32_Shdr Elf_Shdr; -typedef Elf32_Sym Elf_Sym; -#define ELF_R_INFO ELF32_R_INFO -#define ELF_ST_INFO ELF32_ST_INFO #define GRUB_PE32_MACHINE GRUB_PE32_MACHINE_I386 #endif diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in index d2e725201..88ce5ac94 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -152,7 +152,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 82dfe193f..da8069bd3 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 a524762fc..f4aa450bb 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 00d193159..e904d1edf 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -26,6 +26,31 @@ datarootdir="@datarootdir@" 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 @@ -53,14 +78,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 @@ -115,7 +140,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 @@ -144,24 +169,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= @@ -200,7 +213,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 29a0e41a9..b1aba65c1 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 a60843500..fbc1ce004 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 @@ -61,14 +65,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 @@ -137,19 +141,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 @@ -165,8 +159,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= From e14d409b6f7ca87baf1944b1c0487267a9114c5f Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 14:42:02 +0100 Subject: [PATCH 082/131] * grub-core/lib/arg.c: Ensure at least a single space between commands. --- ChangeLog | 4 ++++ grub-core/lib/arg.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d84b0aca3..87912d0a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 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--) From 3086175489d345c7760e68217ac1b8106b2f4073 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 14:45:46 +0100 Subject: [PATCH 083/131] Implement Truecrypt ISO loader. --- ChangeLog | 4 + grub-core/Makefile.core.def | 8 + grub-core/io/gzio.c | 50 +++++- grub-core/loader/i386/pc/truecrypt.c | 233 +++++++++++++++++++++++++++ include/grub/deflate.h | 4 + 5 files changed, 296 insertions(+), 3 deletions(-) create mode 100644 grub-core/loader/i386/pc/truecrypt.c diff --git a/ChangeLog b/ChangeLog index 87912d0a7..e2670c5e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 3d70d0241..e32e2ca20 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1623,6 +1623,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; diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c index 59ad6daff..6327fda35 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. */ @@ -1286,10 +1302,38 @@ grub_zlib_decompress (char *inbuf, grub_size_t insize, grub_off_t off, ret = grub_gzio_read_real (gzio, off, outbuf, outsize); grub_free (gzio); + if (!grub_errno && ret != (grub_ssize_t) outsize) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "premature end of compressed"); + ret = -1; + } + /* FIXME: Check Adler. */ 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/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/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 From d45067a2901a8393c7b9cf0917ab33bb1d7344b2 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 14:50:44 +0100 Subject: [PATCH 084/131] Add explicit thumb interwork bx in asm files. Shouldn't matter for armv >= 5 but let's be safe. --- ChangeLog | 6 ++++++ grub-core/kern/arm/cache.S | 6 ++++-- grub-core/kern/arm/cache_armv7.S | 3 ++- grub-core/kern/arm/uboot/startup.S | 7 +++++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2670c5e6..6a9dda97f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. 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/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 From 1482975549d00848f20926de27a6319af4f76fef Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 14:52:36 +0100 Subject: [PATCH 085/131] Include serial module in default_payload.elf. --- ChangeLog | 4 ++++ Makefile.am | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 6a9dda97f..ad448b7e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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 From 1f032575bb727364962419fd7d92974de25da0ce Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 15:14:50 +0100 Subject: [PATCH 086/131] * grub-core/loader/multiboot_mbi2.c: Implement special value for load_addr. --- ChangeLog | 5 +++++ grub-core/loader/multiboot_mbi2.c | 11 +++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index ad448b7e3..2850c76c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/grub-core/loader/multiboot_mbi2.c b/grub-core/loader/multiboot_mbi2.c index 2f5aa6294..83e8919fa 100644 --- a/grub-core/loader/multiboot_mbi2.c +++ b/grub-core/loader/multiboot_mbi2.c @@ -225,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; @@ -234,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) { @@ -264,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 { From b8765fa0824aab891a28b728f9b7309cbe5c6ba2 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 15:21:02 +0100 Subject: [PATCH 087/131] Implement better integration with Mac firmware. --- ChangeLog | 4 + Makefile.util.def | 19 ++ docs/man/grub-macbless.h2m | 4 + grub-core/Makefile.core.def | 5 + grub-core/commands/macbless.c | 234 ++++++++++++++++++++++++ grub-core/fs/hfs.c | 4 + grub-core/fs/hfsplus.c | 7 +- include/grub/fs.h | 2 + include/grub/hfs.h | 13 +- include/grub/hfsplus.h | 37 +++- util/grub-install.c | 332 +++++++++++++++++++++++++++++++--- util/grub-macbless.c | 199 ++++++++++++++++++++ util/grub-mkrescue.c | 5 + util/grub-render-label.c | 5 + util/render-label.c | 4 - 15 files changed, 835 insertions(+), 39 deletions(-) create mode 100644 docs/man/grub-macbless.h2m create mode 100644 grub-core/commands/macbless.c create mode 100644 util/grub-macbless.c diff --git a/ChangeLog b/ChangeLog index 2850c76c7..c75b86f33 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/Makefile.util.def b/Makefile.util.def index 2720f6bd3..4ea1c3501 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; @@ -401,6 +402,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; @@ -585,6 +601,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; 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/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index e32e2ca20..286ea98a4 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1450,6 +1450,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; diff --git a/grub-core/commands/macbless.c b/grub-core/commands/macbless.c new file mode 100644 index 000000000..df53b024f --- /dev/null +++ b/grub-core/commands/macbless.c @@ -0,0 +1,234 @@ +/* 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 + +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/fs/hfs.c b/grub-core/fs/hfs.c index ee6f6f955..1e593059a 100644 --- a/grub-core/fs/hfs.c +++ b/grub-core/fs/hfs.c @@ -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 a5d7bc8f7..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 { @@ -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/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/hfs.h b/include/grub/hfs.h index bb8ec0517..d935f5005 100644 --- a/include/grub/hfs.h +++ b/include/grub/hfs.h @@ -50,11 +50,20 @@ 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; diff --git a/include/grub/hfsplus.h b/include/grub/hfsplus.h index fedf37d3d..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 { @@ -30,7 +51,16 @@ 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; @@ -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/util/grub-install.c b/util/grub-install.c index 0c584084a..9bc0b163e 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -41,6 +41,7 @@ #include #include #include +#include #include @@ -60,6 +61,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; @@ -68,6 +70,10 @@ 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; enum @@ -96,6 +102,11 @@ enum 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 }; static int fs_probe = 1; @@ -119,6 +130,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: @@ -138,6 +168,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); @@ -255,9 +290,15 @@ static struct argp_option options[] = { 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}, {0, 0, 0, 0, 0, 0} }; @@ -697,6 +738,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[]) { @@ -714,8 +812,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); @@ -800,9 +904,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: @@ -850,6 +957,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: @@ -927,7 +1037,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 @@ -1001,6 +1117,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 hfsplue"), + 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); @@ -1491,8 +1677,59 @@ main (int argc, char *argv[]) } 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); @@ -1512,28 +1749,24 @@ main (int argc, char *argv[]) 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: @@ -1541,14 +1774,59 @@ 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) + { + char * efidir_disk; + int efidir_part; + + /* Try to make this image bootable using the EFI Boot Manager, if available. */ + 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_install_register_efi (efidir_disk, efidir_part, + "\\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: 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-mkrescue.c b/util/grub-mkrescue.c index b4ee8f598..cfe538bd4 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"); 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/render-label.c b/util/render-label.c index 73f877442..9702ed953 100644 --- a/util/render-label.c +++ b/util/render-label.c @@ -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) From d218ec97388b69854a5c75d9548943e945deb578 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 16:02:36 +0100 Subject: [PATCH 088/131] Update Mac code to match new register_efi prototype. --- ChangeLog | 4 ++++ util/grub-install.c | 7 +------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index c75b86f33..d0746fb8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/util/grub-install.c b/util/grub-install.c index 9bc0b163e..5deabe838 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -1811,13 +1811,8 @@ main (int argc, char *argv[]) bless (ins_dev, boot_efi, 1); if (!removable && update_nvram) { - char * efidir_disk; - int efidir_part; - /* Try to make this image bootable using the EFI Boot Manager, if available. */ - 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_install_register_efi (efidir_disk, efidir_part, + grub_install_register_efi (efidir_grub_dev, "\\System\\Library\\CoreServices", efi_distributor); } From 18e76955bef1ee29007aacfe2f043b83922ee2f8 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 16:04:47 +0100 Subject: [PATCH 089/131] Use %I64 and not %ll when using OS printf if compiling for windows. --- ChangeLog | 4 +++ grub-core/disk/diskfilter.c | 3 +- grub-core/kern/emu/hostdisk.c | 4 +-- grub-core/osdep/windows/blocklist.c | 6 ++-- include/grub/emu/misc.h | 8 +++++ util/getroot.c | 7 ++-- util/grub-fstest.c | 5 +-- util/grub-mkimagexx.c | 50 ++++++++++++++++++++--------- util/misc.c | 5 +-- util/mkimage.c | 17 ++++++---- util/setup.c | 4 +-- 11 files changed, 77 insertions(+), 36 deletions(-) diff --git a/ChangeLog b/ChangeLog index d0746fb8e..ec161421e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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/kern/emu/hostdisk.c b/grub-core/kern/emu/hostdisk.c index 08ae65478..44b0fcbb1 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/osdep/windows/blocklist.c b/grub-core/osdep/windows/blocklist.c index d2003854f..a1a697670 100644 --- a/grub-core/osdep/windows/blocklist.c +++ b/grub-core/osdep/windows/blocklist.c @@ -84,8 +84,10 @@ grub_install_get_blocklist (grub_device_t root_dev, grub_util_error ("unsupported fs for blocklist under windows: %s", fs->name); - grub_util_info ("sec_per_lcn = %lld, first_lcn=%lld", - (long long) sec_per_lcn, (long long) 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/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/util/getroot.c b/util/getroot.c index d2dc7efc4..d71c9e858 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); @@ -374,7 +374,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-fstest.c b/util/grub-fstest.c index ee5880c50..23dd558e4 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) @@ -123,7 +123,8 @@ 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) { diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c index 832302e59..27aef711d 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]); @@ -660,7 +661,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,7 +674,9 @@ 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; @@ -692,7 +697,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,7 +711,8 @@ 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; } @@ -715,7 +723,9 @@ 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_PC64 entry to 0x%llx at the offset 0x%llx", + 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; @@ -727,7 +737,8 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, 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; } @@ -750,7 +761,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; @@ -796,7 +808,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; @@ -1095,7 +1109,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, @@ -1115,7 +1130,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, @@ -1145,7 +1161,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, @@ -1348,7 +1365,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) { @@ -1385,7 +1403,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) @@ -1478,7 +1497,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/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..709b26cde 100644 --- a/util/mkimage.c +++ b/util/mkimage.c @@ -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/setup.c b/util/setup.c index 60bce683c..9fb91a82f 100644 --- a/util/setup.c +++ b/util/setup.c @@ -151,8 +151,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) { From 50d2e9596ff2a645ca8ba024b15bb640bb7ef3ed Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 16:05:39 +0100 Subject: [PATCH 090/131] Mark miscompile error for translation. --- ChangeLog | 4 ++++ util/grub-mkimagexx.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ec161421e..39515b8da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c index 27aef711d..b62a8a3a3 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -1374,8 +1374,8 @@ 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?", + 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); From d6c2782a9079352bcd67d9d29fa652abb4dd197a Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 16:17:46 +0100 Subject: [PATCH 091/131] Unify message for unsupported relocation. --- ChangeLog | 4 ++++ util/grub-mkimagexx.c | 30 ++++++++++++++++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 39515b8da..c8bf716b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + Unify message for unsupported relocation. + 2013-12-17 Vladimir Serbinenko Mark miscompile error for translation. diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c index b62a8a3a3..a5ef0bfd2 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -564,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; } } @@ -681,8 +682,8 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, (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; @@ -744,8 +745,8 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, } 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; @@ -820,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; @@ -848,8 +849,8 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, } 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; @@ -943,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; @@ -1174,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; @@ -1199,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 (_("fixup for relocation %u is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); break; } break; From 24d5934daa37b3f9c5857945a93fa68ac9c308a2 Mon Sep 17 00:00:00 2001 From: Jon McCune Date: Fri, 13 Dec 2013 08:47:12 -0800 Subject: [PATCH 092/131] Fix double-free introduced by commit 33d02a42d64cf06cada1c389e5abba4b9d196cc5 To reproduce the problem, make sure you have a GPG public key available, build and install GRUB: grub-install --debug --debug-image="all" --pubkey=/boot/pubkey.gpg --modules="serial terminfo gzio search search_label search_fs_uuid search_fs_file linux vbe video_fb video mmap relocator verify gcry_rsa gcry_dsa gcry_sha256 hashsum gcry_sha1 mpi echo loadenv boottime" /dev/sda Sign all the files in /boot/grub/* and reboot. 'make check' results identical before and after this change. TESTED: In a QEMU VM using an i386 target. --- ChangeLog | 4 ++++ grub-core/commands/verify.c | 1 + grub-core/io/gzio.c | 1 + grub-core/io/lzopio.c | 1 + grub-core/io/xzio.c | 1 + 5 files changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index c8bf716b0..9895a2fb3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Jon McCune + + Fix double-free introduced by commit 33d02a42d64cf06cada1c389 + 2013-12-17 Vladimir Serbinenko Unify message for unsupported relocation. diff --git a/grub-core/commands/verify.c b/grub-core/commands/verify.c index 85a72d65f..87c6d4f2c 100644 --- a/grub-core/commands/verify.c +++ b/grub-core/commands/verify.c @@ -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/io/gzio.c b/grub-core/io/gzio.c index 6327fda35..aec798f59 100644 --- a/grub-core/io/gzio.c +++ b/grub-core/io/gzio.c @@ -1275,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; } diff --git a/grub-core/io/lzopio.c b/grub-core/io/lzopio.c index b1ce26029..de2ea6778 100644 --- a/grub-core/io/lzopio.c +++ b/grub-core/io/lzopio.c @@ -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 e57f8019e..a3536ad73 100644 --- a/grub-core/io/xzio.c +++ b/grub-core/io/xzio.c @@ -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; } From f4dab3d1ac4bb186ef4b715d1c3d00e2034f1ba7 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 16:41:09 +0100 Subject: [PATCH 093/131] Use grub_xasprintf to format translated error messages containing 64-bit quantity. --- ChangeLog | 5 +++++ util/grub-fstest.c | 26 +++++++++++++++++--------- util/grub-mkimagexx.c | 14 +++++++++----- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9895a2fb3..745664b67 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/util/grub-fstest.c b/util/grub-fstest.c index 23dd558e4..4ff723c51 100644 --- a/util/grub-fstest.c +++ b/util/grub-fstest.c @@ -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; @@ -128,7 +131,9 @@ read_file (char *pathname, int (*hook) (grub_off_t ofs, char *buf, int len, void 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; } @@ -148,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; } @@ -233,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; } @@ -245,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-mkimagexx.c b/util/grub-mkimagexx.c index a5ef0bfd2..19d94e7f2 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -1376,11 +1376,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); From fe7c20bf9ef8c1fb242a711e52b00e299726e295 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 16:42:01 +0100 Subject: [PATCH 094/131] Add missing format_arg attribute to check that printf with translated messages has proper arguments. --- ChangeLog | 5 +++++ include/grub/i18n.h | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 745664b67..dcc002fe2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 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); From ebda165f3af3738a9eb6000ae4948887ce11a6b6 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 20:46:33 +0100 Subject: [PATCH 095/131] * grub-core/loader/macho.c: Fix compilation on non-i386. --- ChangeLog | 4 ++++ grub-core/loader/macho.c | 13 +++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index dcc002fe2..7eab58ddb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/grub-core/loader/macho.c b/grub-core/loader/macho.c index bf0bf74f7..3da917689 100644 --- a/grub-core/loader/macho.c +++ b/grub-core/loader/macho.c @@ -23,7 +23,6 @@ #include #include -#include #include #include #include @@ -85,7 +84,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 +110,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) From 1123bed94470fbc2a79e5c8508c477a2e26a841b Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 20:47:31 +0100 Subject: [PATCH 096/131] * grub-core/loader/i386/xen_fileXX.c: Silence cast-align. --- ChangeLog | 4 ++++ grub-core/loader/i386/xen_fileXX.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7eab58ddb..6d9c9988a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/grub-core/loader/i386/xen_fileXX.c b/grub-core/loader/i386/xen_fileXX.c index ea0656c09..0a7e2ce98 100644 --- a/grub-core/loader/i386/xen_fileXX.c +++ b/grub-core/loader/i386/xen_fileXX.c @@ -258,6 +258,8 @@ parse_note (grub_elf_t elf, struct grub_xen_file_info *xi, return GRUB_ERR_NONE; } +#pragma GCC diagnostic ignored "-Wcast-align" + grub_err_t grub_xen_get_infoXX (grub_elf_t elf, struct grub_xen_file_info *xi) { From 3e88fbfa6e319780f41bfd1ee886ea630804f125 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 22:44:46 +0100 Subject: [PATCH 097/131] * grub-core/loader/machoXX.c: Fix compilation on non-i386. --- ChangeLog | 4 ++++ grub-core/loader/macho32.c | 2 +- grub-core/loader/macho64.c | 2 +- include/grub/i386/macho.h | 19 ------------------- include/grub/macho.h | 18 ++++++++++++++++++ 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6d9c9988a..440e9ca44 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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/include/grub/i386/macho.h b/include/grub/i386/macho.h index 5bdf9b213..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]; -} 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; - #endif diff --git a/include/grub/macho.h b/include/grub/macho.h index 3c88e71ca..2dea625f1 100644 --- a/include/grub/macho.h +++ b/include/grub/macho.h @@ -139,6 +139,24 @@ union grub_macho_filestart struct grub_macho_lzss_header lzss; } 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 grub_size_t From fd4650a5567944cc14e10aaba828c95f5f7ae2a6 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 22:49:27 +0100 Subject: [PATCH 098/131] Add bonito 3A support. --- ChangeLog | 4 + grub-core/boot/mips/loongson/fwstart.S | 82 ++++++------- grub-core/bus/bonito.c | 149 +++++++++++++++++------ grub-core/kern/mips/loongson/init.c | 7 ++ include/grub/mips/loongson/at_keyboard.h | 6 +- include/grub/mips/loongson/kernel.h | 1 + include/grub/mips/loongson/pci.h | 89 ++++++-------- 7 files changed, 208 insertions(+), 130 deletions(-) diff --git a/ChangeLog b/ChangeLog index 440e9ca44..6314dfb36 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + Add bonito 3A support. + 2013-12-17 Vladimir Serbinenko * grub-core/loader/machoXX.c: Fix compilation on non-i386. 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/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/kern/mips/loongson/init.c b/grub-core/kern/mips/loongson/init.c index d2f579588..b9cbcec27 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; } 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, From 184c61ddcedb6e1a52a059b02c028e4269722eb0 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 22:51:13 +0100 Subject: [PATCH 099/131] Add Radeon Yeeloong 3A support. --- ChangeLog | 4 + grub-core/Makefile.core.def | 1 + grub-core/kern/mips/loongson/init.c | 1 + grub-core/loader/i386/linux.c | 1 + grub-core/video/radeon_yeeloong3a.c | 237 ++++++++++++++++++++++++++++ include/grub/video.h | 5 +- 6 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 grub-core/video/radeon_yeeloong3a.c diff --git a/ChangeLog b/ChangeLog index 6314dfb36..e79697cc4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + Add Radeon Yeeloong 3A support. + 2013-12-17 Vladimir Serbinenko Add bonito 3A support. diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 286ea98a4..f320981dc 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -248,6 +248,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; diff --git a/grub-core/kern/mips/loongson/init.c b/grub-core/kern/mips/loongson/init.c index b9cbcec27..65158702f 100644 --- a/grub-core/kern/mips/loongson/init.c +++ b/grub-core/kern/mips/loongson/init.c @@ -210,6 +210,7 @@ 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 (); diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c index a32c88e97..31fb91e2c 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -341,6 +341,7 @@ 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. */ 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/include/grub/video.h b/include/grub/video.h index 14e7054e8..778012e08 100644 --- a/include/grub/video.h +++ b/include/grub/video.h @@ -291,7 +291,8 @@ typedef enum grub_video_driver_id GRUB_VIDEO_DRIVER_COREBOOT, GRUB_VIDEO_DRIVER_IEEE1275, GRUB_VIDEO_ADAPTER_CAPTURE, - GRUB_VIDEO_DRIVER_XEN + GRUB_VIDEO_DRIVER_XEN, + GRUB_VIDEO_DRIVER_RADEON_YEELOONG3A } grub_video_driver_id_t; typedef enum grub_video_adapter_prio @@ -578,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 From 25a7863d779479a06eb4c7c8410dc960e4a58e86 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 22:53:18 +0100 Subject: [PATCH 100/131] Add Yeeloong 3A reboot and halt. --- ChangeLog | 4 ++++ grub-core/kern/mips/loongson/init.c | 7 +++++++ grub-core/lib/mips/loongson/reboot.c | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/ChangeLog b/ChangeLog index e79697cc4..51394b2dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + Add Yeeloong 3A reboot and halt. + 2013-12-17 Vladimir Serbinenko Add Radeon Yeeloong 3A support. diff --git a/grub-core/kern/mips/loongson/init.c b/grub-core/kern/mips/loongson/init.c index 65158702f..3fc15c35a 100644 --- a/grub-core/kern/mips/loongson/init.c +++ b/grub-core/kern/mips/loongson/init.c @@ -288,6 +288,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/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); From daaa89dbe5df2d234db50ef27bfa1d551a50d0ea Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 22:54:30 +0100 Subject: [PATCH 101/131] Use AT keyboard on Yeeloong 3A. --- ChangeLog | 4 ++++ grub-core/kern/mips/loongson/init.c | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 51394b2dd..de70dae81 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + Use AT keyboard on Yeeloong 3A. + 2013-12-17 Vladimir Serbinenko Add Yeeloong 3A reboot and halt. diff --git a/grub-core/kern/mips/loongson/init.c b/grub-core/kern/mips/loongson/init.c index 3fc15c35a..7b96531b9 100644 --- a/grub-core/kern/mips/loongson/init.c +++ b/grub-core/kern/mips/loongson/init.c @@ -215,7 +215,8 @@ grub_machine_init (void) 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 (); From ba144760511b9bf7e783e0c2ea442c8266b63b34 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 17 Dec 2013 23:27:22 +0100 Subject: [PATCH 102/131] Support cpuid --pae. --- ChangeLog | 4 ++++ grub-core/commands/i386/cpuid.c | 34 +++++++++++++++++++++++++++++---- include/grub/i386/cpuid.h | 1 + 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index de70dae81..09f9cd946 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + Support cpuid --pae. + 2013-12-17 Vladimir Serbinenko Use AT keyboard on Yeeloong 3A. 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/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__ From 8ff35d0a1b8bfe8a30872e774ebffcd10380d0bb Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 05:21:06 +0100 Subject: [PATCH 103/131] * grub-core/commands/legacycfg.c: Use 32-bit Linux protocol on non-BIOS. --- ChangeLog | 4 ++++ grub-core/commands/legacycfg.c | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 09f9cd946..2081bc7f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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); } From 8f5add13fffe1278a6b4d5240874d6651c2c412f Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 05:28:05 +0100 Subject: [PATCH 104/131] Implement syslinux parser. --- ChangeLog | 4 + Makefile.util.def | 18 + docs/man/grub-syslinux2cfg.h2m | 4 + grub-core/Makefile.core.def | 7 + grub-core/commands/syslinuxcfg.c | 214 +++++ grub-core/lib/getline.c | 92 ++ grub-core/lib/syslinux_parse.c | 1501 ++++++++++++++++++++++++++++++ grub-core/normal/main.c | 58 -- include/grub/syslinux_parse.h | 37 + util/grub-syslinux2cfg.c | 239 +++++ 10 files changed, 2116 insertions(+), 58 deletions(-) create mode 100644 docs/man/grub-syslinux2cfg.h2m create mode 100644 grub-core/commands/syslinuxcfg.c create mode 100644 grub-core/lib/getline.c create mode 100644 grub-core/lib/syslinux_parse.c create mode 100644 include/grub/syslinux_parse.h create mode 100644 util/grub-syslinux2cfg.c diff --git a/ChangeLog b/ChangeLog index 2081bc7f5..ee3ffce64 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/Makefile.util.def b/Makefile.util.def index 4ea1c3501..27c48e5f8 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -1235,6 +1235,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; 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/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index f320981dc..7192a8e07 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1761,6 +1761,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; @@ -2142,6 +2143,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; 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/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/syslinux_parse.c b/grub-core/lib/syslinux_parse.c new file mode 100644 index 000000000..ebd6a975b --- /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; + int 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; + 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/normal/main.c b/grub-core/normal/main.c index 84df3601f..4c57e090b 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) { 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/util/grub-syslinux2cfg.c b/util/grub-syslinux2cfg.c new file mode 100644 index 000000000..54add8c47 --- /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_("[OPTIONS] FILE ROOT"), + 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; +} From a99c0a328f26ec309bce401bd4db8d845eae7112 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 05:34:17 +0100 Subject: [PATCH 105/131] * docs/osdetect.cfg: Add isolinux config to detected OSes. --- ChangeLog | 4 ++++ docs/osdetect.cfg | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index ee3ffce64..1c50992a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + * docs/osdetect.cfg: Add isolinux config to detected OSes. + 2013-12-17 Vladimir Serbinenko Implement syslinux parser. 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 From 81294aff98d3eec6bd190a4c176aff3d32d682b9 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 06:03:23 +0100 Subject: [PATCH 106/131] Remove check_nt_hiberfil as it's been superseeded by file command. --- ChangeLog | 4 ++ grub-core/Makefile.core.def | 5 -- grub-core/commands/i386/nthibr.c | 79 -------------------------------- 3 files changed, 4 insertions(+), 84 deletions(-) delete mode 100644 grub-core/commands/i386/nthibr.c diff --git a/ChangeLog b/ChangeLog index 1c50992a7..1a50f96ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 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. diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 7192a8e07..44fab7958 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -626,11 +626,6 @@ module = { enable = xen; }; -module = { - name = check_nt_hiberfil; - common = commands/i386/nthibr.c; -}; - module = { name = cmostest; common = commands/i386/cmostest.c; 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); -} From a43b3e5d8e12eacbe0f6e320290228d9b0b0cac8 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 06:19:16 +0100 Subject: [PATCH 107/131] Silence spurious warning. --- ChangeLog | 4 ++++ grub-core/lib/syslinux_parse.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 1a50f96ed..a756c0f8d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-17 Vladimir Serbinenko + + Silence spurious warning. + 2013-12-17 Vladimir Serbinenko Remove check_nt_hiberfil as it's been superseeded by file command. diff --git a/grub-core/lib/syslinux_parse.c b/grub-core/lib/syslinux_parse.c index ebd6a975b..337442cf2 100644 --- a/grub-core/lib/syslinux_parse.c +++ b/grub-core/lib/syslinux_parse.c @@ -972,7 +972,7 @@ write_entry (struct output_buffer *outbuf, if (grub_strcasecmp (basename, "chain.c32") == 0) { char *file = NULL; - int is_fd = -1, devn; + int is_fd = -1, devn = 0; int part = -1; int swap = 0; char *ptr; From ee4450eb6f06eaad3ac46e4d786a4d0a2c82fb07 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 06:20:20 +0100 Subject: [PATCH 108/131] * util/grub-file.c (main): Fix sizeof usage. --- ChangeLog | 8 ++++++-- util/grub-file.c | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index a756c0f8d..e696b4f38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,12 @@ -2013-12-17 Vladimir Serbinenko +2013-12-18 Vladimir Serbinenko + + * util/grub-file.c (main): Fix sizeof usage. + +2013-12-18 Vladimir Serbinenko Silence spurious warning. -2013-12-17 Vladimir Serbinenko +2013-12-18 Vladimir Serbinenko Remove check_nt_hiberfil as it's been superseeded by file command. diff --git a/util/grub-file.c b/util/grub-file.c index 2591ecdd9..23cb0439c 100644 --- a/util/grub-file.c +++ b/util/grub-file.c @@ -55,7 +55,7 @@ main (int argc, char *argv[]) grub_util_host_init (&argc, &argv); - argv2 = xmalloc (argc * sizeof (argv)); + argv2 = xmalloc (argc * sizeof (argv2[0])); if (argc == 2 && strcmp (argv[1], "--version") == 0) { From 636977b0894738fcafddef279edd0d823cacf43e Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 06:50:24 +0100 Subject: [PATCH 109/131] Mark strings for translation and add remaining ones to exclude list. --- ChangeLog | 4 + grub-core/commands/file.c | 2 +- grub-core/net/dns.c | 8 +- grub-core/osdep/basic/compress.c | 6 +- grub-core/osdep/basic/no_platform.c | 6 +- grub-core/osdep/unix/platform.c | 2 +- grub-core/osdep/windows/blocklist.c | 2 +- grub-core/osdep/windows/platform.c | 12 +- grub-core/term/xen/xen_kbd.c | 2 +- po/exclude.pot | 217 ++++++++++++++++++++++++++++ tests/gettext_strings_test.in | 2 +- util/grub-file.c | 2 +- util/grub-install-common.c | 8 +- util/grub-install.c | 16 +- util/grub-mknetdir.c | 2 +- 15 files changed, 257 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index e696b4f38..a99cb60bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/grub-core/commands/file.c b/grub-core/commands/file.c index c27df0c50..474b3fd21 100644 --- a/grub-core/commands/file.c +++ b/grub-core/commands/file.c @@ -630,7 +630,7 @@ static grub_extcmd_t cmd; GRUB_MOD_INIT(file) { cmd = grub_register_extcmd ("file", grub_cmd_file, 0, - "OPTIONS FILE", + N_("OPTIONS FILE"), N_("Check if FILE is of specified type."), options); } diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c index 32ee4fd3d..0b771fb10 100644 --- a/grub-core/net/dns.c +++ b/grub-core/net/dns.c @@ -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/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 ab7652a7f..d76c34c14 100644 --- a/grub-core/osdep/basic/no_platform.c +++ b/grub-core/osdep/basic/no_platform.c @@ -27,7 +27,7 @@ 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 @@ -35,12 +35,12 @@ 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/unix/platform.c b/grub-core/osdep/unix/platform.c index b2ec6bd8d..a6dc07093 100644 --- a/grub-core/osdep/unix/platform.c +++ b/grub-core/osdep/unix/platform.c @@ -216,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 a1a697670..6d0809a48 100644 --- a/grub-core/osdep/windows/blocklist.c +++ b/grub-core/osdep/windows/blocklist.c @@ -81,7 +81,7 @@ 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 = %" GRUB_HOST_PRIuLONG_LONG diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c index 3f4ad5e24..1046a6ca3 100644 --- a/grub-core/osdep/windows/platform.c +++ b/grub-core/osdep/windows/platform.c @@ -94,7 +94,7 @@ get_platform (void) if (!get_efi_privilegies ()) { - grub_util_warn ("Insufficient privilegies to access firmware, assuming BIOS"); + grub_util_warn (_("Insufficient privilegies to access firmware, assuming BIOS")); platform = PLAT_BIOS; } @@ -222,7 +222,7 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, get_platform (); if (platform != PLAT_EFI) - grub_util_error ("%s", "no EFI routines when running in BIOS mode"); + 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 @@ -237,7 +237,7 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, 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"); + grub_util_error ("%s", _("unexpected EFI error")); if (boot_order_len > 0) { size_t i; @@ -312,7 +312,7 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, } } if (!have_order_num) - grub_util_error ("%s", "Couldn't find free BootNNNN spot"); + 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); @@ -413,12 +413,12 @@ 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_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/term/xen/xen_kbd.c b/grub-core/term/xen/xen_kbd.c index 38a6ffd50..153386801 100644 --- a/grub-core/term/xen/xen_kbd.c +++ b/grub-core/term/xen/xen_kbd.c @@ -326,7 +326,7 @@ fetch_key (int *is_break) ret = mapping[keycode]; if (ret == 0) { - grub_printf ("unknown keycode = %lx\n", (unsigned long) keycode); + grub_dprintf ("xenkbd", "unknown keycode = %lx\n", (unsigned long) keycode); continue; } vkbd.kbdpage->in_cons++; diff --git a/po/exclude.pot b/po/exclude.pot index 4335a5240..1606ad4d2 100644 --- a/po/exclude.pot +++ b/po/exclude.pot @@ -6948,3 +6948,220 @@ msgstr "" #, 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 "" 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/grub-file.c b/util/grub-file.c index 23cb0439c..7b7290133 100644 --- a/util/grub-file.c +++ b/util/grub-file.c @@ -77,7 +77,7 @@ main (int argc, char *argv[]) continue; } if (had_file) - grub_util_error ("multiple files specified"); + grub_util_error ("one argument expected"); argv2[i - 1] = canonicalize_file_name (argv[i]); if (!argv2[i - 1]) { diff --git a/util/grub-install-common.c b/util/grub-install-common.c index ea500cc5a..b34b8dcf2 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 5deabe838..81be6fb5c 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -646,7 +646,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); } @@ -1354,7 +1354,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 ", @@ -1631,7 +1631,9 @@ main (int argc, char *argv[]) grub_install_copy_file (boot_img_src, boot_img, 1); grub_util_info ("%sgrub-bios-setup %s %s %s %s %s --directory='%s' --device-map='%s' '%s'", - install_bootsector ? "" : "NOT RUNNING: ", + /* 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 " : "", @@ -1701,7 +1703,7 @@ main (int argc, char *argv[]) f = grub_util_fopen (mach_kernel, "r+"); if (!f) - grub_util_error ("Can't create file: %s", strerror (errno)); + grub_util_error (_("Can't create file: %s"), strerror (errno)); fclose (f); fill_core_services (core_services); @@ -1745,7 +1747,7 @@ 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); @@ -1801,7 +1803,7 @@ main (int argc, char *argv[]) f = grub_util_fopen (mach_kernel, "r+"); if (!f) - grub_util_error ("Can't create file: %s", strerror (errno)); + grub_util_error (_("Can't create file: %s"), strerror (errno)); fclose (f); fill_core_services(core_services); @@ -1837,7 +1839,7 @@ main (int argc, char *argv[]) /* 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."); + grub_util_error ("%s", _("EFI distributor id isn't specified.")); efifile_path = xasprintf ("\\EFI\\%s\\%s", efi_distributor, efi_file); diff --git a/util/grub-mknetdir.c b/util/grub-mknetdir.c index 55019aa43..3b87e11ba 100644 --- a/util/grub-mknetdir.c +++ b/util/grub-mknetdir.c @@ -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"); From 74fa9417e5d94c85bf4c227377b4f06e1aacffe5 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 07:06:23 +0100 Subject: [PATCH 110/131] * grub-core/kern/arm/dl.c: Remove unnecessarry execution mode check. --- ChangeLog | 4 ++++ grub-core/kern/arm/dl.c | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index a99cb60bd..ee9f467d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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; From 57a691b7e7e62c8df62dfb7c6a9912cb6126d0d7 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 07:26:13 +0100 Subject: [PATCH 111/131] Decrease number of strings to translate. --- ChangeLog | 4 ++++ grub-core/commands/tr.c | 2 +- grub-core/kern/arm64/dl.c | 2 +- grub-core/loader/i386/xen.c | 4 ++-- grub-core/osdep/windows/dl.c | 2 +- include/grub/util/install.h | 4 ++-- util/grub-install.c | 2 +- util/grub-mkimagexx.c | 7 ++++--- util/grub-mknetdir.c | 2 +- util/grub-mkstandalone.c | 2 +- util/grub-syslinux2cfg.c | 12 ++++++------ util/mkimage.c | 10 +++++----- 12 files changed, 29 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index ee9f467d5..fdf8c7fb2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. 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/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/loader/i386/xen.c b/grub-core/loader/i386/xen.c index 732a47a87..6e4705173 100644 --- a/grub-core/loader/i386/xen.c +++ b/grub-core/loader/i386/xen.c @@ -695,9 +695,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/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/include/grub/util/install.h b/include/grub/util/install.h index a647af4ad..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); diff --git a/util/grub-install.c b/util/grub-install.c index 81be6fb5c..c6cfc4968 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -1176,7 +1176,7 @@ main (int argc, char *argv[]) if (grub_strcmp (fs->name, "hfs") != 0 && grub_strcmp (fs->name, "hfsplus") != 0 && !is_guess) - grub_util_error (_("%s is neither hfs nor hfsplue"), + grub_util_error (_("%s is neither hfs nor hfsplus"), macppcdir); if (grub_strcmp (fs->name, "hfs") == 0 || grub_strcmp (fs->name, "hfsplus") == 0) diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c index 19d94e7f2..7eb10deb3 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -842,7 +842,7 @@ 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); @@ -1201,7 +1201,7 @@ SUFFIX (make_reloc_section) (Elf_Ehdr *e, void **out, case R_AARCH64_JUMP26: break; default: - grub_util_error (_("fixup for relocation %u is not implemented yet"), + grub_util_error (_("relocation 0x%x is not implemented yet"), (unsigned int) ELF_R_TYPE (info)); break; } @@ -1239,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; diff --git a/util/grub-mknetdir.c b/util/grub-mknetdir.c index 3b87e11ba..1112b87de 100644 --- a/util/grub-mknetdir.c +++ b/util/grub-mknetdir.c @@ -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 }; diff --git a/util/grub-mkstandalone.c b/util/grub-mkstandalone.c index 4b0464cc2..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} }; diff --git a/util/grub-syslinux2cfg.c b/util/grub-syslinux2cfg.c index 54add8c47..aee938759 100644 --- a/util/grub-syslinux2cfg.c +++ b/util/grub-syslinux2cfg.c @@ -56,15 +56,15 @@ struct arguments static struct argp_option options[] = { {"target-root", 't', N_("DIR"), 0, - N_("root directory as it will be seen on runtime (default /)."), 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}, + 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}, + 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}, + N_("current directory of the syslinux disk [default=$pwd]."), 0}, - {"output", 'o', N_("FILE"), 0, N_("write output to FILE (default stdout)."), 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}, @@ -137,7 +137,7 @@ argp_parser (int key, char *arg, struct argp_state *state) } static struct argp argp = { - options, argp_parser, N_("[OPTIONS] FILE ROOT"), + options, argp_parser, N_("FILE"), N_("Transform syslinux config into GRUB one."), NULL, NULL, NULL }; diff --git a/util/mkimage.c b/util/mkimage.c index 709b26cde..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); From bc8dd119520f44a11271aecf6d0dcf2a02324da1 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 07:34:28 +0100 Subject: [PATCH 112/131] * grub-core/loader/arm/linux.c: Use common initrd functions. --- ChangeLog | 4 ++++ grub-core/loader/arm/linux.c | 19 ++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index fdf8c7fb2..f6e3800a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-18 Vladimir Serbinenko + + * grub-core/loader/arm/linux.c: Use common initd functions. + 2013-12-18 Vladimir Serbinenko Decrease number of strings to translate. 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; From e8c360ca4a02768d20f799ab408c7e99104f11db Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 07:35:51 +0100 Subject: [PATCH 113/131] * include/grub/efi/api.h (PRIxGRUB_EFI_UINTN_T): Remove leftover. --- ChangeLog | 6 +++++- include/grub/efi/api.h | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6e3800a5..6f1303fce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ 2013-12-18 Vladimir Serbinenko - * grub-core/loader/arm/linux.c: Use common initd functions. + * 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 diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h index c1c6981ed..c4b3acd22 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -467,8 +467,6 @@ 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) \ From b3aea1bc267020536fd78f4809c6d2b4335e2030 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 07:39:15 +0100 Subject: [PATCH 114/131] * include/grub/efi/api.h (GRUB_EFI_ERROR_CODE): Use explicit cast rather than LL suffix. --- ChangeLog | 5 +++++ include/grub/efi/api.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 6f1303fce..cb916ba75 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h index c4b3acd22..5ebdd9f42 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -470,7 +470,7 @@ typedef grub_uint16_t grub_efi_char16_t; typedef grub_efi_intn_t grub_efi_status_t; #define GRUB_EFI_ERROR_CODE(value) \ - ((1LL << (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) From 9246d5c8a4a76f23278a7d0f5bc0c85657161759 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 07:40:43 +0100 Subject: [PATCH 115/131] * grub-core/commands/fileXX.c: Silence cast-align. * grub-core/loader/i386/xen_fileXX.c: Likewise. --- ChangeLog | 5 +++++ grub-core/commands/fileXX.c | 2 ++ grub-core/loader/i386/xen_fileXX.c | 4 ++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index cb916ba75..89ea3d33f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/grub-core/commands/fileXX.c b/grub-core/commands/fileXX.c index 4d5c9d7ef..c9857ff67 100644 --- a/grub-core/commands/fileXX.c +++ b/grub-core/commands/fileXX.c @@ -19,6 +19,8 @@ #include #include +#pragma GCC diagnostic ignored "-Wcast-align" + int grub_file_check_netbsdXX (grub_elf_t elf) { diff --git a/grub-core/loader/i386/xen_fileXX.c b/grub-core/loader/i386/xen_fileXX.c index 0a7e2ce98..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) @@ -258,8 +260,6 @@ parse_note (grub_elf_t elf, struct grub_xen_file_info *xi, return GRUB_ERR_NONE; } -#pragma GCC diagnostic ignored "-Wcast-align" - grub_err_t grub_xen_get_infoXX (grub_elf_t elf, struct grub_xen_file_info *xi) { From 7a7f52388b53d2608e926b52b6a6e0c5ec7f0726 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 07:45:15 +0100 Subject: [PATCH 116/131] Make grub_util_get_windows_path_real static. --- ChangeLog | 4 ++++ grub-core/osdep/windows/hostdisk.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 89ea3d33f..eadbd7d91 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c index af7d07ca7..d390b25fc 100644 --- a/grub-core/osdep/windows/hostdisk.c +++ b/grub-core/osdep/windows/hostdisk.c @@ -98,7 +98,7 @@ grub_util_tchar_to_utf8 (LPCTSTR in) #endif -LPTSTR +static LPTSTR grub_util_get_windows_path_real (const char *path) { LPTSTR fpa; From c2be6f7ef85ddab7e552c8eea2b92db55185288e Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 07:48:09 +0100 Subject: [PATCH 117/131] Remove -Wold-style-definition. Not very useful and interaction of it with regexp depends on GCC version. --- ChangeLog | 7 +++++++ configure.ac | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index eadbd7d91..aa182169e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +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. diff --git a/configure.ac b/configure.ac index dfb4f69ce..cc66ea912 100644 --- a/configure.ac +++ b/configure.ac @@ -433,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" From 1962ed95cc3c901e3c93721a82ef0a3c444cd272 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 12:29:30 +0100 Subject: [PATCH 118/131] * grub-core/lib/syslinux_parse.c: Declare timeout unsigned. --- ChangeLog | 4 ++++ grub-core/lib/syslinux_parse.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index aa182169e..2d0fb1efb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-18 Vladimir Serbinenko + + * grub-core/lib/syslinux_parse.c: Declare timeout unsigned. + 2013-12-18 Vladimir Serbinenko Remove -Wold-style-definition. diff --git a/grub-core/lib/syslinux_parse.c b/grub-core/lib/syslinux_parse.c index 337442cf2..21fa17504 100644 --- a/grub-core/lib/syslinux_parse.c +++ b/grub-core/lib/syslinux_parse.c @@ -71,7 +71,7 @@ struct syslinux_menu const char *current_target_directory; const char *filename; grub_size_t commentslen; - int timeout; + unsigned long timeout; struct syslinux_say *say; grub_syslinux_flavour_t flavour; }; From eba2afeda1b25f364cb06626452f1074b6975442 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 13:09:39 +0100 Subject: [PATCH 119/131] Add __attribute__ ((sysv_abi)) only if it's really needed. Some compilers don't support it. --- ChangeLog | 6 ++++++ include/grub/misc.h | 8 ++++++++ include/grub/x86_64/setjmp.h | 4 ++-- include/grub/x86_64/xen/hypercall.h | 14 ++++++++------ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2d0fb1efb..f11bf08e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. diff --git a/include/grub/misc.h b/include/grub/misc.h index b3ba7306d..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); diff --git a/include/grub/x86_64/setjmp.h b/include/grub/x86_64/setjmp.h index b8f44cf29..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 __attribute__ ((sysv_abi)); -void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn,sysv_abi)); +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/xen/hypercall.h b/include/grub/x86_64/xen/hypercall.h index e5ea26ba9..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) __attribute__ ((sysv_abi)); -int grub_xen_update_va_mapping (void *addr, uint64_t pte, uint64_t flags) __attribute__ ((sysv_abi)); -int EXPORT_FUNC (grub_xen_event_channel_op) (int op, void *arg) __attribute__ ((sysv_abi)); +#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) __attribute__ ((sysv_abi)); + 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) __attribute__ ((sysv_abi)); -int EXPORT_FUNC (grub_xen_grant_table_op) (int, void *, int) __attribute__ ((sysv_abi)); + unsigned foreigndom) GRUB_ASM_ATTR; +int EXPORT_FUNC (grub_xen_grant_table_op) (int, void *, int) GRUB_ASM_ATTR; #endif From 113f786989823aba70bb7c1634f5f490df5263a1 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 13:11:29 +0100 Subject: [PATCH 120/131] * INSTALL: Update comment as to why sparc64 clang isn't usable. --- ChangeLog | 4 ++++ INSTALL | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index f11bf08e8..71bd77e89 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/INSTALL b/INSTALL index b91d975c3..6ee21155d 100644 --- a/INSTALL +++ b/INSTALL @@ -25,8 +25,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 From 063f2a04d158ec1b275a925dfbae74b124708cde Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 13:13:23 +0100 Subject: [PATCH 121/131] Use -Wl,--no-relax rather than -mno-relax for uniformity. --- ChangeLog | 4 ++++ conf/Makefile.common | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 71bd77e89..80c7cafa9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/conf/Makefile.common b/conf/Makefile.common index de55c9ad4..015cd29ce 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -8,7 +8,7 @@ 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 From a29f317af1014848a6538e200ed32481566c90f5 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 13:33:39 +0100 Subject: [PATCH 122/131] Allow compilation without thumb-interwork as long as no thumb is involved or only thumb2 is used. --- ChangeLog | 5 +++++ INSTALL | 1 + conf/Makefile.common | 2 -- configure.ac | 23 +++++++++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 80c7cafa9..4cb362c70 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/INSTALL b/INSTALL index 6ee21155d..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 diff --git a/conf/Makefile.common b/conf/Makefile.common index 015cd29ce..6128797ed 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -15,8 +15,6 @@ if COND_sparc64_emu 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 diff --git a/configure.ac b/configure.ac index cc66ea912..5a2eea4ef 100644 --- a/configure.ac +++ b/configure.ac @@ -871,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 # From 64dd5fdc00ac50ad458ccae4c6ebb66ea9f4eb35 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 17:11:11 +0100 Subject: [PATCH 123/131] Add missing license section in macbless.mod and macho.mod. --- ChangeLog | 4 ++++ grub-core/commands/macbless.c | 2 ++ grub-core/loader/macho.c | 3 +++ 3 files changed, 9 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4cb362c70..f24402d06 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/grub-core/commands/macbless.c b/grub-core/commands/macbless.c index df53b024f..38ca353a2 100644 --- a/grub-core/commands/macbless.c +++ b/grub-core/commands/macbless.c @@ -30,6 +30,8 @@ #include #include +GRUB_MOD_LICENSE ("GPLv3+"); + struct find_node_context { grub_uint64_t inode_found; diff --git a/grub-core/loader/macho.c b/grub-core/loader/macho.c index 3da917689..59b195e27 100644 --- a/grub-core/loader/macho.c +++ b/grub-core/loader/macho.c @@ -28,6 +28,9 @@ #include #include #include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); grub_err_t grub_macho_close (grub_macho_t macho) From 8445567046acc58feffebfff23992f0836ee31ab Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 17:12:13 +0100 Subject: [PATCH 124/131] * po/exclude.pot: Add 2 missing excludes. --- ChangeLog | 4 ++++ po/exclude.pot | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/ChangeLog b/ChangeLog index f24402d06..bf4a9facb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/po/exclude.pot b/po/exclude.pot index 1606ad4d2..1659eb01b 100644 --- a/po/exclude.pot +++ b/po/exclude.pot @@ -7165,3 +7165,11 @@ msgstr "" #, 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 "" From 72c9a50773e0120440a4f106ca2bbb03d3394192 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 18:43:09 +0100 Subject: [PATCH 125/131] Remove xen VFB. Due to XEN bug it prevents Linux boot. Remove it at least, until workaround is found. --- ChangeLog | 7 + configure.ac | 8 +- gentpl.py | 2 +- grub-core/Makefile.am | 12 - grub-core/Makefile.core.def | 3 - grub-core/kern/xen/init.c | 14 - grub-core/loader/i386/xen.c | 2 - grub-core/term/xen/console.c | 4 +- grub-core/term/xen/xen_kbd.c | 486 ----------------------------------- grub-core/video/xen/xenfb.c | 396 ---------------------------- include/grub/xen.h | 9 - 11 files changed, 14 insertions(+), 929 deletions(-) delete mode 100644 grub-core/term/xen/xen_kbd.c delete mode 100644 grub-core/video/xen/xenfb.c diff --git a/ChangeLog b/ChangeLog index bf4a9facb..8053cb377 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +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. diff --git a/configure.ac b/configure.ac index 5a2eea4ef..b03144471 100644 --- a/configure.ac +++ b/configure.ac @@ -1315,8 +1315,8 @@ if test x"$grub_build_mkfont_excuse" = x ; then else enable_build_grub_mkfont=no fi -if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xxen || test "x$platform" = xcoreboot ); then - AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot, xen and loongson ports needs build-time grub-mkfont]) +if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then + AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont]) fi AC_SUBST([build_freetype_cflags]) @@ -1384,8 +1384,8 @@ if test x"$enable_build_grub_mkfont" = xno ; then FONT_SOURCE= fi -if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xxen || test "x$platform" = xcoreboot ); then - AC_MSG_ERROR([qemu, powerpc-ieee1275, xen, coreboot and loongson ports need unifont]) +if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then + AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont]) fi AC_SUBST([FONT_SOURCE]) diff --git a/gentpl.py b/gentpl.py index 42acf0a72..bdcae1a1c 100644 --- a/gentpl.py +++ b/gentpl.py @@ -64,7 +64,7 @@ GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"] GROUPS["usb"] = GROUPS["pci"] # If gfxterm is main output console integrate it into kernel -GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot" ] + GROUPS["xen"] +GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot" ] GROUPS["videomodules"] = GRUB_PLATFORMS[:]; for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i) diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index c7adc1eba..04764384b 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -135,12 +135,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.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 -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h endif if COND_x86_64_xen @@ -150,12 +144,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.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 -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h endif if COND_x86_64_efi diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 44fab7958..e5e558c99 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -192,9 +192,6 @@ kernel = { xen = term/xen/console.c; xen = disk/xen/xendisk.c; xen = commands/boot.c; - xen = commands/keylayouts.c; - xen = video/xen/xenfb.c; - xen = term/xen/xen_kbd.c; ia64_efi = kern/ia64/efi/startup.S; ia64_efi = kern/ia64/efi/init.c; diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c index f9a718015..0559c033c 100644 --- a/grub-core/kern/xen/init.c +++ b/grub-core/kern/xen/init.c @@ -27,8 +27,6 @@ #include #include #include -#include -#include grub_addr_t grub_modbase; struct start_info *grub_xen_start_page_addr; @@ -69,7 +67,6 @@ grub_xen_alloc_shared_page (domid_t dom, grub_xen_grant_t * grnum) ret = grub_memalign (GRUB_XEN_PAGE_SIZE, GRUB_XEN_PAGE_SIZE); if (!ret) return NULL; - grub_memset (ret, 0, GRUB_XEN_PAGE_SIZE); mfn = grub_xen_ptr2mfn (ret); entry->frame = mfn; entry->domid = dom; @@ -256,8 +253,6 @@ grub_xenstore_write_file (const char *dir, const void *buf, grub_size_t len) grub_size_t dirlen = grub_strlen (dir) + 1; char *resp; - grub_dprintf ("xen", "writing `%s'\n", dir); - grub_memset (&msg, 0, sizeof (msg)); msg.type = XS_WRITE; msg.len = dirlen + len; @@ -544,13 +539,6 @@ grub_machine_init (void) map_all_pages (); - grub_video_xen_init (); - grub_font_init (); - grub_gfxterm_init (); - - grub_keylayouts_init (); - grub_xen_keyboard_init (); - grub_console_init (); grub_tsc_init (); @@ -574,8 +562,6 @@ void grub_machine_fini (int flags __attribute__ ((unused))) { grub_xendisk_fini (); - grub_video_xen_fini (); - grub_xen_keyboard_fini (); grub_boot_fini (); } diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c index 6e4705173..c16b4b249 100644 --- a/grub-core/loader/i386/xen.c +++ b/grub-core/loader/i386/xen.c @@ -222,8 +222,6 @@ grub_xen_boot (void) grub_xen_mfn_t *new_mfn_list; grub_size_t i; - grub_video_restore (); - if (grub_xen_n_allocated_shared_pages) return grub_error (GRUB_ERR_BUG, "active grants"); diff --git a/grub-core/term/xen/console.c b/grub-core/term/xen/console.c index ddbf5f35e..a1f15f71a 100644 --- a/grub-core/term/xen/console.c +++ b/grub-core/term/xen/console.c @@ -114,8 +114,8 @@ static struct grub_term_output grub_console_term_output = { void grub_console_init (void) { - grub_term_register_input_active ("console", &grub_console_term_input); - grub_term_register_output_active ("console", &grub_console_term_output); + grub_term_register_input ("console", &grub_console_term_input); + grub_term_register_output ("console", &grub_console_term_output); grub_terminfo_init (); grub_terminfo_output_register (&grub_console_term_output, "vt100-color"); diff --git a/grub-core/term/xen/xen_kbd.c b/grub-core/term/xen/xen_kbd.c deleted file mode 100644 index 153386801..000000000 --- a/grub-core/term/xen/xen_kbd.c +++ /dev/null @@ -1,486 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2007,2008,2009 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 short xen_keyboard_status = 0; - -static const grub_uint8_t mapping[128] = - { - /* 0x00 */ 0 /* Unused */, GRUB_KEYBOARD_KEY_ESCAPE, - /* 0x02 */ GRUB_KEYBOARD_KEY_1, GRUB_KEYBOARD_KEY_2, - /* 0x04 */ GRUB_KEYBOARD_KEY_3, GRUB_KEYBOARD_KEY_4, - /* 0x06 */ GRUB_KEYBOARD_KEY_5, GRUB_KEYBOARD_KEY_6, - /* 0x08 */ GRUB_KEYBOARD_KEY_7, GRUB_KEYBOARD_KEY_8, - /* 0x0a */ GRUB_KEYBOARD_KEY_9, GRUB_KEYBOARD_KEY_0, - /* 0x0c */ GRUB_KEYBOARD_KEY_DASH, GRUB_KEYBOARD_KEY_EQUAL, - /* 0x0e */ GRUB_KEYBOARD_KEY_BACKSPACE, GRUB_KEYBOARD_KEY_TAB, - /* 0x10 */ GRUB_KEYBOARD_KEY_Q, GRUB_KEYBOARD_KEY_W, - /* 0x12 */ GRUB_KEYBOARD_KEY_E, GRUB_KEYBOARD_KEY_R, - /* 0x14 */ GRUB_KEYBOARD_KEY_T, GRUB_KEYBOARD_KEY_Y, - /* 0x16 */ GRUB_KEYBOARD_KEY_U, GRUB_KEYBOARD_KEY_I, - /* 0x18 */ GRUB_KEYBOARD_KEY_O, GRUB_KEYBOARD_KEY_P, - /* 0x1a */ GRUB_KEYBOARD_KEY_LBRACKET, GRUB_KEYBOARD_KEY_RBRACKET, - /* 0x1c */ GRUB_KEYBOARD_KEY_ENTER, GRUB_KEYBOARD_KEY_LEFT_CTRL, - /* 0x1e */ GRUB_KEYBOARD_KEY_A, GRUB_KEYBOARD_KEY_S, - /* 0x20 */ GRUB_KEYBOARD_KEY_D, GRUB_KEYBOARD_KEY_F, - /* 0x22 */ GRUB_KEYBOARD_KEY_G, GRUB_KEYBOARD_KEY_H, - /* 0x24 */ GRUB_KEYBOARD_KEY_J, GRUB_KEYBOARD_KEY_K, - /* 0x26 */ GRUB_KEYBOARD_KEY_L, GRUB_KEYBOARD_KEY_SEMICOLON, - /* 0x28 */ GRUB_KEYBOARD_KEY_DQUOTE, GRUB_KEYBOARD_KEY_RQUOTE, - /* 0x2a */ GRUB_KEYBOARD_KEY_LEFT_SHIFT, GRUB_KEYBOARD_KEY_BACKSLASH, - /* 0x2c */ GRUB_KEYBOARD_KEY_Z, GRUB_KEYBOARD_KEY_X, - /* 0x2e */ GRUB_KEYBOARD_KEY_C, GRUB_KEYBOARD_KEY_V, - /* 0x30 */ GRUB_KEYBOARD_KEY_B, GRUB_KEYBOARD_KEY_N, - /* 0x32 */ GRUB_KEYBOARD_KEY_M, GRUB_KEYBOARD_KEY_COMMA, - /* 0x34 */ GRUB_KEYBOARD_KEY_DOT, GRUB_KEYBOARD_KEY_SLASH, - /* 0x36 */ GRUB_KEYBOARD_KEY_RIGHT_SHIFT, GRUB_KEYBOARD_KEY_NUMMUL, - /* 0x38 */ GRUB_KEYBOARD_KEY_LEFT_ALT, GRUB_KEYBOARD_KEY_SPACE, - /* 0x3a */ GRUB_KEYBOARD_KEY_CAPS_LOCK, GRUB_KEYBOARD_KEY_F1, - /* 0x3c */ GRUB_KEYBOARD_KEY_F2, GRUB_KEYBOARD_KEY_F3, - /* 0x3e */ GRUB_KEYBOARD_KEY_F4, GRUB_KEYBOARD_KEY_F5, - /* 0x40 */ GRUB_KEYBOARD_KEY_F6, GRUB_KEYBOARD_KEY_F7, - /* 0x42 */ GRUB_KEYBOARD_KEY_F8, GRUB_KEYBOARD_KEY_F9, - /* 0x44 */ GRUB_KEYBOARD_KEY_F10, GRUB_KEYBOARD_KEY_NUM_LOCK, - /* 0x46 */ GRUB_KEYBOARD_KEY_SCROLL_LOCK, GRUB_KEYBOARD_KEY_NUM7, - /* 0x48 */ GRUB_KEYBOARD_KEY_NUM8, GRUB_KEYBOARD_KEY_NUM9, - /* 0x4a */ GRUB_KEYBOARD_KEY_NUMMINUS, GRUB_KEYBOARD_KEY_NUM4, - /* 0x4c */ GRUB_KEYBOARD_KEY_NUM5, GRUB_KEYBOARD_KEY_NUM6, - /* 0x4e */ GRUB_KEYBOARD_KEY_NUMPLUS, GRUB_KEYBOARD_KEY_NUM1, - /* 0x50 */ GRUB_KEYBOARD_KEY_NUM2, GRUB_KEYBOARD_KEY_NUM3, - /* 0x52 */ GRUB_KEYBOARD_KEY_NUMDOT, GRUB_KEYBOARD_KEY_NUMDOT, - /* 0x54 */ 0, 0, - /* 0x56 */ GRUB_KEYBOARD_KEY_102ND, GRUB_KEYBOARD_KEY_F11, - /* 0x58 */ GRUB_KEYBOARD_KEY_F12, 0, - /* 0x5a */ 0, 0, - /* 0x5c */ 0, 0, - /* 0x5e */ 0, 0, - /* 0x60 */ 0, GRUB_KEYBOARD_KEY_RIGHT_CTRL, - /* 0x62 */ 0, 0, - /* 0x64 */ GRUB_KEYBOARD_KEY_RIGHT_ALT, 0, - /* 0x66 */ GRUB_KEYBOARD_KEY_HOME, GRUB_KEYBOARD_KEY_UP, - /* 0x68 */ GRUB_KEYBOARD_KEY_PPAGE, GRUB_KEYBOARD_KEY_LEFT, - /* 0x6a */ GRUB_KEYBOARD_KEY_RIGHT, GRUB_KEYBOARD_KEY_END, - /* 0x6c */ GRUB_KEYBOARD_KEY_DOWN, GRUB_KEYBOARD_KEY_NPAGE, - /* 0x6e */ GRUB_KEYBOARD_KEY_INSERT, GRUB_KEYBOARD_KEY_DELETE, - /* 0x70 */ 0, 0, - /* 0x72 */ 0, GRUB_KEYBOARD_KEY_JP_RO, - /* 0x74 */ 0, 0, - /* 0x76 */ 0, 0, - /* 0x78 */ 0, 0, - /* 0x7a */ 0, 0, - /* 0x7c */ 0, GRUB_KEYBOARD_KEY_JP_YEN, - /* 0x7e */ GRUB_KEYBOARD_KEY_KPCOMMA - }; - -struct virtkbd -{ - int handle; - char *fullname; - char *backend_dir; - char *frontend_dir; - struct xenkbd_page *kbdpage; - grub_xen_grant_t grant; - grub_xen_evtchn_t evtchn; -}; - -struct virtkbd vkbd; - -static grub_xen_mfn_t -grub_xen_ptr2mfn (void *ptr) -{ - grub_xen_mfn_t *mfn_list = - (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list; - return mfn_list[(grub_addr_t) ptr >> GRUB_XEN_LOG_PAGE_SIZE]; -} - -static int -fill (const char *dir, void *data __attribute__ ((unused))) -{ - domid_t dom; - /* "dir" is just a number, at most 19 characters. */ - char fdir[200]; - char num[20]; - grub_err_t err; - void *buf; - struct evtchn_alloc_unbound alloc_unbound; - - if (vkbd.kbdpage) - return 1; - vkbd.handle = grub_strtoul (dir, 0, 10); - if (grub_errno) - { - grub_errno = 0; - return 0; - } - vkbd.fullname = 0; - vkbd.backend_dir = 0; - - grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/backend", dir); - vkbd.backend_dir = grub_xenstore_get_file (fdir, NULL); - if (!vkbd.backend_dir) - goto out_fail_1; - - grub_snprintf (fdir, sizeof (fdir), "%s/dev", - vkbd.backend_dir); - - grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/backend-id", dir); - buf = grub_xenstore_get_file (fdir, NULL); - if (!buf) - goto out_fail_1; - - dom = grub_strtoul (buf, 0, 10); - grub_free (buf); - if (grub_errno) - goto out_fail_1; - - vkbd.kbdpage = - grub_xen_alloc_shared_page (dom, &vkbd.grant); - if (!vkbd.kbdpage) - goto out_fail_1; - - grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/page-ref", dir); - grub_snprintf (num, sizeof (num), "%llu", (unsigned long long) grub_xen_ptr2mfn (vkbd.kbdpage)); - err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); - if (err) - goto out_fail_3; - - grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/protocol", dir); - err = grub_xenstore_write_file (fdir, XEN_IO_PROTO_ABI_NATIVE, - grub_strlen (XEN_IO_PROTO_ABI_NATIVE)); - if (err) - goto out_fail_3; - - alloc_unbound.dom = DOMID_SELF; - alloc_unbound.remote_dom = dom; - - grub_xen_event_channel_op (EVTCHNOP_alloc_unbound, &alloc_unbound); - vkbd.evtchn = alloc_unbound.port; - - grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/event-channel", dir); - grub_snprintf (num, sizeof (num), "%u", vkbd.evtchn); - err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); - if (err) - goto out_fail_3; - - - struct gnttab_dump_table dt; - dt.dom = DOMID_SELF; - grub_xen_grant_table_op (GNTTABOP_dump_table, (void *) &dt, 1); - - grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s", dir); - - vkbd.frontend_dir = grub_strdup (fdir); - - vkbd.kbdpage->in_cons = 0; - vkbd.kbdpage->in_prod = 0; - vkbd.kbdpage->out_cons = 0; - vkbd.kbdpage->out_prod = 0; - - grub_snprintf (fdir, sizeof (fdir), "device/vkbd/%s/state", dir); - err = grub_xenstore_write_file (fdir, "3", 1); - if (err) - goto out_fail_3; - - while (1) - { - grub_snprintf (fdir, sizeof (fdir), "%s/state", - vkbd.backend_dir); - buf = grub_xenstore_get_file (fdir, NULL); - if (!buf) - goto out_fail_3; - if (grub_strcmp (buf, "2") != 0) - break; - grub_free (buf); - grub_xen_sched_op (SCHEDOP_yield, 0); - } - grub_dprintf ("xen", "state=%s\n", (char *) buf); - grub_free (buf); - - return 1; - -out_fail_3: - grub_xen_free_shared_page (vkbd.kbdpage); -out_fail_1: - - vkbd.kbdpage = 0; - grub_free (vkbd.backend_dir); - grub_free (vkbd.fullname); - - grub_errno = 0; - return 0; -} - -static void -vkbd_fini (void) -{ - char fdir[200]; - - char *buf; - struct evtchn_close close_op = {.port = vkbd.evtchn }; - - if (!vkbd.kbdpage) - return; - - grub_snprintf (fdir, sizeof (fdir), "%s/state", - vkbd.frontend_dir); - grub_xenstore_write_file (fdir, "6", 1); - - while (1) - { - grub_snprintf (fdir, sizeof (fdir), "%s/state", - vkbd.backend_dir); - buf = grub_xenstore_get_file (fdir, NULL); - grub_dprintf ("xen", "state=%s\n", (char *) buf); - - if (!buf || grub_strcmp (buf, "6") == 0) - break; - grub_free (buf); - grub_xen_sched_op (SCHEDOP_yield, 0); - } - grub_free (buf); - - grub_snprintf (fdir, sizeof (fdir), "%s/page-ref", - vkbd.frontend_dir); - grub_xenstore_write_file (fdir, NULL, 0); - - grub_snprintf (fdir, sizeof (fdir), "%s/event-channel", - vkbd.frontend_dir); - grub_xenstore_write_file (fdir, NULL, 0); - - grub_xen_free_shared_page (vkbd.kbdpage); - vkbd.kbdpage = 0; - - grub_xen_event_channel_op (EVTCHNOP_close, &close_op); - - /* Prepare for handoff. */ - grub_snprintf (fdir, sizeof (fdir), "%s/state", - vkbd.frontend_dir); - grub_xenstore_write_file (fdir, "1", 1); -} - -static grub_err_t -vkbd_init (void) -{ - if (vkbd.kbdpage) - vkbd_fini (); - grub_xenstore_dir ("device/vkbd", fill, NULL); - if (vkbd.kbdpage) - grub_errno = 0; - if (!vkbd.kbdpage) - return grub_error (GRUB_ERR_IO, "couldn't init vkbd"); - return GRUB_ERR_NONE; -} - -static int -fetch_key (int *is_break) -{ - grub_uint32_t prod; - - if (!vkbd.kbdpage) - { - *is_break = 0; - return -1; - } - - mb (); - - prod = vkbd.kbdpage->in_prod; - - mb (); - - for (;vkbd.kbdpage->in_cons < prod; vkbd.kbdpage->in_cons++) - { - grub_uint32_t keycode; - int ret = 0; - if (XENKBD_IN_RING_REF(vkbd.kbdpage, vkbd.kbdpage->in_cons).type != XENKBD_TYPE_KEY) - continue; - keycode = XENKBD_IN_RING_REF(vkbd.kbdpage, vkbd.kbdpage->in_cons).key.keycode; - *is_break = !XENKBD_IN_RING_REF(vkbd.kbdpage, vkbd.kbdpage->in_cons).key.pressed; - - if (keycode < ARRAY_SIZE (mapping)) - ret = mapping[keycode]; - if (ret == 0) - { - grub_dprintf ("xenkbd", "unknown keycode = %lx\n", (unsigned long) keycode); - continue; - } - vkbd.kbdpage->in_cons++; - return ret; - } - *is_break = 0; - return -1; -} - -static int -grub_keyboard_isr (grub_keyboard_key_t key, int is_break) -{ - if (!is_break) - switch (key) - { - case GRUB_KEYBOARD_KEY_LEFT_SHIFT: - xen_keyboard_status |= GRUB_TERM_STATUS_LSHIFT; - return 1; - case GRUB_KEYBOARD_KEY_RIGHT_SHIFT: - xen_keyboard_status |= GRUB_TERM_STATUS_RSHIFT; - return 1; - case GRUB_KEYBOARD_KEY_LEFT_CTRL: - xen_keyboard_status |= GRUB_TERM_STATUS_LCTRL; - return 1; - case GRUB_KEYBOARD_KEY_RIGHT_CTRL: - xen_keyboard_status |= GRUB_TERM_STATUS_RCTRL; - return 1; - case GRUB_KEYBOARD_KEY_RIGHT_ALT: - xen_keyboard_status |= GRUB_TERM_STATUS_RALT; - return 1; - case GRUB_KEYBOARD_KEY_LEFT_ALT: - xen_keyboard_status |= GRUB_TERM_STATUS_LALT; - return 1; - default: - return 0; - } - else - switch (key) - { - case GRUB_KEYBOARD_KEY_LEFT_SHIFT: - xen_keyboard_status &= ~GRUB_TERM_STATUS_LSHIFT; - return 1; - case GRUB_KEYBOARD_KEY_RIGHT_SHIFT: - xen_keyboard_status &= ~GRUB_TERM_STATUS_RSHIFT; - return 1; - case GRUB_KEYBOARD_KEY_LEFT_CTRL: - xen_keyboard_status &= ~GRUB_TERM_STATUS_LCTRL; - return 1; - case GRUB_KEYBOARD_KEY_RIGHT_CTRL: - xen_keyboard_status &= ~GRUB_TERM_STATUS_RCTRL; - return 1; - case GRUB_KEYBOARD_KEY_RIGHT_ALT: - xen_keyboard_status &= ~GRUB_TERM_STATUS_RALT; - return 1; - case GRUB_KEYBOARD_KEY_LEFT_ALT: - xen_keyboard_status &= ~GRUB_TERM_STATUS_LALT; - return 1; - default: - return 0; - } -} - -/* If there is a raw key pending, return it; otherwise return -1. */ -static int -grub_keyboard_getkey (void) -{ - int key; - int is_break = 0; - - key = fetch_key (&is_break); - if (key == -1) - return -1; - - if (grub_keyboard_isr (key, is_break)) - return -1; - if (is_break) - return -1; - return key; -} - - -/* If there is a character pending, return it; - otherwise return GRUB_TERM_NO_KEY. */ -static int -grub_xen_keyboard_getkey (struct grub_term_input *term __attribute__ ((unused))) -{ - int code; - - code = grub_keyboard_getkey (); - if (code == -1) - return GRUB_TERM_NO_KEY; - switch (code) - { - case GRUB_KEYBOARD_KEY_CAPS_LOCK: - xen_keyboard_status ^= GRUB_TERM_STATUS_CAPS; - return GRUB_TERM_NO_KEY; - case GRUB_KEYBOARD_KEY_NUM_LOCK: - xen_keyboard_status ^= GRUB_TERM_STATUS_NUM; - return GRUB_TERM_NO_KEY; - case GRUB_KEYBOARD_KEY_SCROLL_LOCK: - xen_keyboard_status ^= GRUB_TERM_STATUS_SCROLL; - return GRUB_TERM_NO_KEY; - default: - return grub_term_map_key (code, xen_keyboard_status); - } -} - -static grub_err_t -grub_keyboard_controller_init (struct grub_term_input *term __attribute__ ((unused))) -{ - vkbd_init (); - return GRUB_ERR_NONE; -} - -static grub_err_t -grub_keyboard_controller_fini (struct grub_term_input *term __attribute__ ((unused))) -{ - vkbd_fini (); - return GRUB_ERR_NONE; -} - -static grub_err_t -grub_xen_fini_hw (int noreturn __attribute__ ((unused))) -{ - vkbd_fini (); - return GRUB_ERR_NONE; -} - -static grub_err_t -grub_xen_restore_hw (void) -{ - vkbd_init (); - return GRUB_ERR_NONE; -} - - -static struct grub_term_input grub_xen_keyboard_term = - { - .name = "xen_keyboard", - .init = grub_keyboard_controller_init, - .fini = grub_keyboard_controller_fini, - .getkey = grub_xen_keyboard_getkey - }; - -void -grub_xen_keyboard_init (void) -{ - grub_term_register_input ("xen_keyboard", &grub_xen_keyboard_term); - grub_loader_register_preboot_hook (grub_xen_fini_hw, grub_xen_restore_hw, - GRUB_LOADER_PREBOOT_HOOK_PRIO_CONSOLE); -} - -GRUB_MOD_FINI(xen_keyboard) -{ - grub_keyboard_controller_fini (NULL); - grub_term_unregister_input (&grub_xen_keyboard_term); -} diff --git a/grub-core/video/xen/xenfb.c b/grub-core/video/xen/xenfb.c deleted file mode 100644 index 7041e4ccb..000000000 --- a/grub-core/video/xen/xenfb.c +++ /dev/null @@ -1,396 +0,0 @@ -/* - * 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 . - */ - -#define grub_video_render_target grub_video_fbrender_target - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -GRUB_MOD_LICENSE ("GPLv3+"); - -struct virtfb -{ - int handle; - char *fullname; - char *backend_dir; - char *frontend_dir; - struct xenfb_page *fbpage; - grub_xen_grant_t grant; - grub_xen_evtchn_t evtchn; - char *framebuffer; - grub_xen_mfn_t *page_directory; - int width, height; -}; - -struct virtfb vfb; - -static grub_xen_mfn_t -grub_xen_ptr2mfn (void *ptr) -{ - grub_xen_mfn_t *mfn_list = - (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list; - return mfn_list[(grub_addr_t) ptr >> GRUB_XEN_LOG_PAGE_SIZE]; -} - -static int -fill (const char *dir, void *data __attribute__ ((unused))) -{ - domid_t dom; - /* "dir" is just a number, at most 19 characters. */ - char fdir[200]; - char num[20]; - grub_err_t err; - void *buf; - struct evtchn_alloc_unbound alloc_unbound; - - if (vfb.fbpage) - return 1; - vfb.handle = grub_strtoul (dir, 0, 10); - if (grub_errno) - { - grub_errno = 0; - return 0; - } - vfb.fullname = 0; - vfb.backend_dir = 0; - - grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/backend", dir); - vfb.backend_dir = grub_xenstore_get_file (fdir, NULL); - if (!vfb.backend_dir) - goto out_fail_1; - - grub_snprintf (fdir, sizeof (fdir), "%s/dev", - vfb.backend_dir); - - grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/backend-id", dir); - buf = grub_xenstore_get_file (fdir, NULL); - if (!buf) - goto out_fail_1; - - dom = grub_strtoul (buf, 0, 10); - grub_free (buf); - if (grub_errno) - goto out_fail_1; - - vfb.fbpage = - grub_xen_alloc_shared_page (dom, &vfb.grant); - if (!vfb.fbpage) - goto out_fail_1; - - grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/page-ref", dir); - grub_snprintf (num, sizeof (num), "%llu", (unsigned long long) grub_xen_ptr2mfn (vfb.fbpage)); - err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); - if (err) - goto out_fail_3; - - grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/protocol", dir); - err = grub_xenstore_write_file (fdir, XEN_IO_PROTO_ABI_NATIVE, - grub_strlen (XEN_IO_PROTO_ABI_NATIVE)); - if (err) - goto out_fail_3; - - alloc_unbound.dom = DOMID_SELF; - alloc_unbound.remote_dom = dom; - - grub_xen_event_channel_op (EVTCHNOP_alloc_unbound, &alloc_unbound); - vfb.evtchn = alloc_unbound.port; - - grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/event-channel", dir); - grub_snprintf (num, sizeof (num), "%u", vfb.evtchn); - err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); - if (err) - goto out_fail_3; - - - struct gnttab_dump_table dt; - dt.dom = DOMID_SELF; - grub_xen_grant_table_op (GNTTABOP_dump_table, (void *) &dt, 1); - - grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s", dir); - - vfb.frontend_dir = grub_strdup (fdir); - - grub_size_t i; - - const unsigned pages_per_pd = (GRUB_XEN_PAGE_SIZE / sizeof (grub_xen_mfn_t)); - - vfb.fbpage->in_cons = 0; - vfb.fbpage->in_prod = 0; - vfb.fbpage->out_cons = 0; - vfb.fbpage->out_prod = 0; - - vfb.fbpage->width = vfb.width; - vfb.fbpage->height = vfb.height; - vfb.fbpage->line_length = vfb.width * 4; - vfb.fbpage->depth = 32; - - grub_size_t fbsize = ALIGN_UP (vfb.width * vfb.height * 4, GRUB_XEN_PAGE_SIZE); - - vfb.fbpage->mem_length = fbsize; - - grub_size_t fbpages = fbsize / GRUB_XEN_PAGE_SIZE; - grub_size_t pd_size = ALIGN_UP (fbpages, pages_per_pd); - - vfb.framebuffer = grub_memalign (GRUB_XEN_PAGE_SIZE, fbsize); - if (!vfb.framebuffer) - goto out_fail_3; - vfb.page_directory = grub_memalign (GRUB_XEN_PAGE_SIZE, pd_size * sizeof (grub_xen_mfn_t)); - if (!vfb.page_directory) - goto out_fail_3; - - for (i = 0; i < fbpages; i++) - vfb.page_directory[i] = grub_xen_ptr2mfn (vfb.framebuffer + GRUB_XEN_PAGE_SIZE * i); - for (; i < pd_size; i++) - vfb.page_directory[i] = 0; - - for (i = 0; i < pd_size / pages_per_pd; i++) - vfb.fbpage->pd[i] = grub_xen_ptr2mfn (vfb.page_directory + (GRUB_XEN_PAGE_SIZE / sizeof (vfb.page_directory[0])) * i); - - - grub_snprintf (fdir, sizeof (fdir), "device/vfb/%s/state", dir); - err = grub_xenstore_write_file (fdir, "3", 1); - if (err) - goto out_fail_3; - - while (1) - { - grub_snprintf (fdir, sizeof (fdir), "%s/state", - vfb.backend_dir); - buf = grub_xenstore_get_file (fdir, NULL); - if (!buf) - goto out_fail_3; - if (grub_strcmp (buf, "2") != 0) - break; - grub_free (buf); - grub_xen_sched_op (SCHEDOP_yield, 0); - } - grub_dprintf ("xen", "state=%s\n", (char *) buf); - grub_free (buf); - - return 1; - -out_fail_3: - grub_xen_free_shared_page (vfb.fbpage); -out_fail_1: - grub_free (vfb.framebuffer); - vfb.framebuffer = 0; - grub_free (vfb.page_directory); - vfb.page_directory = 0; - - vfb.fbpage = 0; - grub_free (vfb.backend_dir); - grub_free (vfb.fullname); - - grub_errno = 0; - return 0; -} - -static void -vfb_fini (void) -{ - char fdir[200]; - - char *buf; - struct evtchn_close close_op = {.port = vfb.evtchn }; - - if (!vfb.fbpage) - return; - - grub_snprintf (fdir, sizeof (fdir), "%s/state", - vfb.frontend_dir); - grub_xenstore_write_file (fdir, "6", 1); - - while (1) - { - grub_snprintf (fdir, sizeof (fdir), "%s/state", - vfb.backend_dir); - buf = grub_xenstore_get_file (fdir, NULL); - grub_dprintf ("xen", "state=%s\n", (char *) buf); - - if (!buf || grub_strcmp (buf, "6") == 0) - break; - grub_free (buf); - grub_xen_sched_op (SCHEDOP_yield, 0); - } - grub_free (buf); - - grub_snprintf (fdir, sizeof (fdir), "%s/page-ref", - vfb.frontend_dir); - grub_xenstore_write_file (fdir, NULL, 0); - - grub_snprintf (fdir, sizeof (fdir), "%s/event-channel", - vfb.frontend_dir); - grub_xenstore_write_file (fdir, NULL, 0); - - grub_xen_free_shared_page (vfb.fbpage); - vfb.fbpage = 0; - - grub_xen_event_channel_op (EVTCHNOP_close, &close_op); - - /* Prepare for handoff. */ - grub_snprintf (fdir, sizeof (fdir), "%s/state", - vfb.frontend_dir); - grub_xenstore_write_file (fdir, "1", 1); - - grub_free (vfb.framebuffer); - vfb.framebuffer = 0; - grub_free (vfb.page_directory); - vfb.page_directory = 0; -} - -static grub_err_t -vfb_init (int width, int height) -{ - if (vfb.fbpage) - vfb_fini (); - vfb.width = width; - vfb.height = height; - grub_xenstore_dir ("device/vfb", fill, NULL); - if (vfb.fbpage) - grub_errno = 0; - if (!vfb.fbpage) - return grub_error (GRUB_ERR_IO, "couldn't init vfb"); - return GRUB_ERR_NONE; -} - -static void -grub_video_xenfb_fill_mode_info (struct grub_video_mode_info *out) -{ - grub_memset (out, 0, sizeof (*out)); - - out->pitch = vfb.width * 4; - out->width = vfb.width; - out->height = vfb.height; - - out->mode_type = GRUB_VIDEO_MODE_TYPE_RGB; - out->bpp = 32; - out->bytes_per_pixel = 4; - out->number_of_colors = 256; - out->reserved_mask_size = 8; - out->reserved_field_pos = 24; - out->red_mask_size = 8; - out->red_field_pos = 16; - out->green_mask_size = 8; - out->green_field_pos = 8; - out->blue_mask_size = 8; - out->blue_field_pos = 0; - - out->blit_format = grub_video_get_blit_format (out); -} - -static grub_err_t -grub_video_ieee1275_setup (unsigned int width, unsigned int height, - unsigned int mode_type __attribute__ ((unused)), - unsigned int mode_mask __attribute__ ((unused))) -{ - struct grub_video_mode_info modeinfo; - grub_err_t err; - - err = vfb_init (width ? : 800, height ? : 600); - if (err) - return err; - grub_video_xenfb_fill_mode_info (&modeinfo); - - err = grub_video_fb_setup (mode_type, mode_mask, - &modeinfo, - vfb.framebuffer, NULL, NULL); - if (err) - return err; - - err = grub_video_fb_set_palette (0, GRUB_VIDEO_FBSTD_NUMCOLORS, - grub_video_fbstd_colors); - - return err; -} - -static grub_err_t -grub_video_xenfb_get_info_and_fini (struct grub_video_mode_info *mode_info, - void **framebuf) -{ - grub_video_xenfb_fill_mode_info (mode_info); - *framebuf = vfb.framebuffer; - - grub_video_fb_fini (); - - return GRUB_ERR_NONE; -} - -static grub_err_t -grub_video_vfb_fini (void) -{ - vfb_fini (); - return grub_video_fb_fini (); -} - - -static struct grub_video_adapter grub_video_xen_adapter = - { - .name = "XEN video driver", - - .prio = GRUB_VIDEO_ADAPTER_PRIO_NATIVE, - .id = GRUB_VIDEO_DRIVER_XEN, - - .init = grub_video_fb_init, - .fini = grub_video_vfb_fini, - .setup = grub_video_ieee1275_setup, - .get_info = grub_video_fb_get_info, - .get_info_and_fini = grub_video_xenfb_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_fb_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_fb_set_active_render_target, - .get_active_render_target = grub_video_fb_get_active_render_target, - - .next = 0 - }; - -void -grub_video_xen_init (void) -{ - grub_video_register (&grub_video_xen_adapter); -} - -void -grub_video_xen_fini (void) -{ - vfb_fini (); - grub_video_unregister (&grub_video_xen_adapter); -} diff --git a/include/grub/xen.h b/include/grub/xen.h index 593fe67f3..6035d1a10 100644 --- a/include/grub/xen.h +++ b/include/grub/xen.h @@ -82,15 +82,6 @@ void grub_console_init (void); void grub_xendisk_fini (void); void grub_xendisk_init (void); -void -grub_xen_keyboard_init (void); -void -grub_xen_keyboard_fini (void); -void -grub_video_xen_init (void); -void -grub_video_xen_fini (void); - #ifdef __x86_64__ typedef grub_uint64_t grub_xen_mfn_t; #else From e3ef0d30cfcc10556842fb85ec25efb91f7cf7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Nesrsta?= Date: Wed, 18 Dec 2013 18:59:49 +0100 Subject: [PATCH 126/131] * grub-core/bus/usb/ehci.c: Fix handling of newborn transfers. Avoid confusing them with already completed transfers. --- ChangeLog | 6 ++++++ grub-core/bus/usb/ehci.c | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8053cb377..3b899210d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. 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) From b9f03772b583733663b3ee889b943f333ee885a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Nesrsta?= Date: Wed, 18 Dec 2013 19:00:45 +0100 Subject: [PATCH 127/131] * grub-core/disk/usbms.c: Retry on unknown errors. Reuse the same tag on retries. --- ChangeLog | 5 +++++ grub-core/disk/usbms.c | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3b899210d..57cfe89b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/grub-core/disk/usbms.c b/grub-core/disk/usbms.c index 30756aee5..2b769bdd8 100644 --- a/grub-core/disk/usbms.c +++ b/grub-core/disk/usbms.c @@ -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. */ From 2984035e1a640a1eca42b098bc73795f38afbd55 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 21:19:11 +0100 Subject: [PATCH 128/131] * grub-core/Makefile.am: Don't attempt to export grub_bios_interrupt on i386-multiboot. --- ChangeLog | 5 +++++ grub-core/Makefile.am | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 57cfe89b3..17d0e243e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 04764384b..51cdcdaa4 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -112,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 From 2e238b37087b1558a79c7d233aa0ed2084b6e88c Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 23:39:49 +0100 Subject: [PATCH 129/131] Make grub_zlib_decompress handle incomplete chunks. Fixes squash4. --- ChangeLog | 6 ++++++ grub-core/fs/btrfs.c | 14 ++++++++++++-- grub-core/fs/hfspluscomp.c | 16 +++++++++++++--- grub-core/fs/zfs/zfs.c | 10 +++++++--- grub-core/io/gzio.c | 6 ------ 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 17d0e243e..8dfaf47d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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 diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c index b15a9d65d..89666b6fd 100644 --- a/grub-core/fs/btrfs.c +++ b/grub-core/fs/btrfs.c @@ -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/hfspluscomp.c b/grub-core/fs/hfspluscomp.c index 461b4678f..d76f3f137 100644 --- a/grub-core/fs/hfspluscomp.c +++ b/grub-core/fs/hfspluscomp.c @@ -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/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/io/gzio.c b/grub-core/io/gzio.c index aec798f59..129209e37 100644 --- a/grub-core/io/gzio.c +++ b/grub-core/io/gzio.c @@ -1303,12 +1303,6 @@ grub_zlib_decompress (char *inbuf, grub_size_t insize, grub_off_t off, ret = grub_gzio_read_real (gzio, off, outbuf, outsize); grub_free (gzio); - if (!grub_errno && ret != (grub_ssize_t) outsize) - { - grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "premature end of compressed"); - ret = -1; - } - /* FIXME: Check Adler. */ return ret; } From ee281fd0c6f2e0a6b2ce1264e963327b53763597 Mon Sep 17 00:00:00 2001 From: Allen Pais Date: Thu, 19 Dec 2013 01:53:56 +0100 Subject: [PATCH 130/131] * grub-core/boot/sparc64/ieee1275/boot.S: Fix order of fields. Also-By: Bob Picco --- ChangeLog | 5 +++++ grub-core/boot/sparc64/ieee1275/boot.S | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 8dfaf47d4..6fb80b43a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. 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) From 2fa5a58ca327a74f6ccc258a113b3802ac762df0 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Thu, 19 Dec 2013 01:54:43 +0100 Subject: [PATCH 131/131] * configure.ac: Set version to 2.02~beta1. --- ChangeLog | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 6fb80b43a..f7adf9bdf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-18 Vladimir Serbinenko + + * configure.ac: Set version to 2.02~beta1. + 2013-12-18 Allen Pais 2013-12-18 Bob Picco diff --git a/configure.ac b/configure.ac index b03144471..5e5c9769a 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])