From 95c7fc3f55cca3c6fc75efe7cc098427dd433fef Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 10 Jan 2010 00:30:33 +0100 Subject: [PATCH 001/271] First compileable newreloc --- conf/i386-pc.rmk | 7 +- conf/i386.rmk | 3 +- include/grub/i386/relocator.h | 6 +- include/grub/misc.h | 2 + include/grub/mm_private.h | 62 ++++ include/grub/relocator.h | 42 +++ include/grub/relocator_private.h | 58 ++++ kern/mm.c | 71 ++-- lib/i386/relocator.c | 162 ++++++---- lib/i386/relocator32.S | 158 +++++++++ lib/i386/relocator_asm.S | 216 ++----------- lib/relocator.c | 540 ++++++++++++++++++++++++++----- lib/x86_64/relocator_asm.S | 85 +++++ 13 files changed, 1007 insertions(+), 405 deletions(-) create mode 100644 include/grub/mm_private.h create mode 100644 include/grub/relocator.h create mode 100644 include/grub/relocator_private.h create mode 100644 lib/i386/relocator32.S create mode 100644 lib/x86_64/relocator_asm.S diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index afdf47e5a..234d18193 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -64,7 +64,7 @@ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ machine/biosdisk.h machine/boot.h machine/console.h machine/init.h \ machine/memory.h machine/loader.h machine/vga.h machine/vbe.h \ - machine/kernel.h machine/pxe.h i386/pit.h list.h handler.h command.h i18n.h + machine/kernel.h machine/pxe.h i386/pit.h list.h handler.h command.h i18n.h mm_private.h kernel_img_CFLAGS = $(COMMON_CFLAGS) $(TARGET_IMG_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)$(GRUB_KERNEL_MACHINE_LINK_ADDR) $(COMMON_CFLAGS) @@ -116,7 +116,7 @@ bin_SCRIPTS += grub-mkrescue grub_mkrescue_SOURCES = util/grub-mkrescue.in pkglib_MODULES = biosdisk.mod chain.mod \ - multiboot.mod reboot.mod halt.mod \ + reboot.mod halt.mod \ vbe.mod vbetest.mod vbeinfo.mod play.mod serial.mod \ vga.mod memdisk.mod pci.mod lspci.mod \ aout.mod bsd.mod pxe.mod pxecmd.mod datetime.mod date.mod \ @@ -179,7 +179,7 @@ linux_mod_SOURCES = loader/i386/linux.c linux_mod_CFLAGS = $(COMMON_CFLAGS) linux_mod_LDFLAGS = $(COMMON_LDFLAGS) -pkglib_MODULES += xnu.mod +#pkglib_MODULES += xnu.mod xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/i386/pc/xnu.c \ loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c xnu_mod_CFLAGS = $(COMMON_CFLAGS) @@ -202,6 +202,7 @@ serial_mod_CFLAGS = $(COMMON_CFLAGS) serial_mod_LDFLAGS = $(COMMON_LDFLAGS) # For multiboot.mod. +#pkglib_MODULES += multiboot.mod multiboot_mod_SOURCES = loader/i386/multiboot.c \ loader/i386/multiboot_helper.S \ loader/i386/pc/multiboot2.c \ diff --git a/conf/i386.rmk b/conf/i386.rmk index c3f036d0f..674170d01 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -16,7 +16,8 @@ vga_text_mod_CFLAGS = $(COMMON_CFLAGS) vga_text_mod_LDFLAGS = $(COMMON_LDFLAGS) pkglib_MODULES += relocator.mod -relocator_mod_SOURCES = lib/i386/relocator.c lib/i386/relocator_asm.S lib/i386/relocator_backward.S +relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ + lib/i386/relocator_asm.S lib/i386/relocator.c relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/include/grub/i386/relocator.h b/include/grub/i386/relocator.h index ef7fe23aa..2027a275c 100644 --- a/include/grub/i386/relocator.h +++ b/include/grub/i386/relocator.h @@ -21,6 +21,7 @@ #include #include +#include struct grub_relocator32_state { @@ -32,10 +33,7 @@ struct grub_relocator32_state grub_uint32_t eip; }; -void *grub_relocator32_alloc (grub_size_t size); -grub_err_t grub_relocator32_boot (void *relocator, grub_uint32_t dest, +grub_err_t grub_relocator32_boot (struct grub_relocator *rel, struct grub_relocator32_state state); -void *grub_relocator32_realloc (void *relocator, grub_size_t size); -void grub_relocator32_free (void *relocator); #endif /* ! GRUB_RELOCATOR_CPU_HEADER */ diff --git a/include/grub/misc.h b/include/grub/misc.h index c5eb953e2..b7af4afc4 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -43,6 +43,8 @@ #define ALIGN_UP(addr, align) \ ((addr + (typeof (addr)) align - 1) & ~((typeof (addr)) align - 1)) +#define ALIGN_DOWN(addr, align) \ + ((addr) & ~((typeof (addr)) align - 1)) #define ARRAY_SIZE(array) (sizeof (array) / sizeof (array[0])) #define COMPILE_TIME_ASSERT(cond) switch (0) { case 1: case !(cond): ; } diff --git a/include/grub/mm_private.h b/include/grub/mm_private.h new file mode 100644 index 000000000..2927f16c4 --- /dev/null +++ b/include/grub/mm_private.h @@ -0,0 +1,62 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#ifndef GRUB_MM_PRIVATE_H +#define GRUB_MM_PRIVATE_H 1 + +#include + +/* Magic words. */ +#define GRUB_MM_FREE_MAGIC 0x2d3c2808 +#define GRUB_MM_ALLOC_MAGIC 0x6db08fa4 + +typedef struct grub_mm_header +{ + struct grub_mm_header *next; + grub_size_t size; + grub_size_t magic; +#if GRUB_CPU_SIZEOF_VOID_P == 4 + char padding[4]; +#elif GRUB_CPU_SIZEOF_VOID_P == 8 + char padding[8]; +#else +# error "unknown word size" +#endif +} +*grub_mm_header_t; + +#if GRUB_CPU_SIZEOF_VOID_P == 4 +# define GRUB_MM_ALIGN_LOG2 4 +#elif GRUB_CPU_SIZEOF_VOID_P == 8 +# define GRUB_MM_ALIGN_LOG2 5 +#endif + +#define GRUB_MM_ALIGN (1 << GRUB_MM_ALIGN_LOG2) + +typedef struct grub_mm_region +{ + struct grub_mm_header *first; + struct grub_mm_region *next; + grub_size_t pre_size; + grub_size_t size; +} +*grub_mm_region_t; + +extern grub_mm_region_t EXPORT_VAR (grub_mm_base); + +#endif diff --git a/include/grub/relocator.h b/include/grub/relocator.h new file mode 100644 index 000000000..2ea74b775 --- /dev/null +++ b/include/grub/relocator.h @@ -0,0 +1,42 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#ifndef GRUB_RELOCATOR_HEADER +#define GRUB_RELOCATOR_HEADER 1 + +#include +#include + +struct grub_relocator; + +struct grub_relocator *grub_relocator_new (void); + +grub_err_t +grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, + grub_addr_t target, grub_size_t size); + +grub_err_t +grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, + grub_addr_t *target, + grub_addr_t min_addr, grub_addr_t max_addr, + grub_size_t size, grub_size_t align); + +void +grub_relocator_unload (struct grub_relocator *rel); + +#endif diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h new file mode 100644 index 000000000..cc68305c8 --- /dev/null +++ b/include/grub/relocator_private.h @@ -0,0 +1,58 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#ifndef GRUB_RELOCATOR_PRIVATE_HEADER +#define GRUB_RELOCATOR_PRIVATE_HEADER 1 + +#include +#include + +extern grub_size_t grub_relocator_align; +extern grub_size_t grub_relocator_forward_size; +extern grub_size_t grub_relocator_backward_size; +extern grub_size_t grub_relocator_jumper_size; + +struct grub_relocator +{ + struct grub_relocator_chunk *chunks; + grub_addr_t postchunks; + grub_addr_t highestaddr; + grub_addr_t highestnonpostaddr; + grub_size_t relocators_size; +}; + +struct grub_relocator_chunk +{ + struct grub_relocator_chunk *next; + grub_addr_t src; + grub_addr_t target; + grub_size_t size; +}; + +void +grub_cpu_relocator_init (void); +grub_err_t +grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, + grub_addr_t *relstart); +void grub_cpu_relocator_forward (void *rels, void *src, void *tgt, + grub_size_t size); +void grub_cpu_relocator_backward (void *rels, void *src, void *tgt, + grub_size_t size); +void grub_cpu_relocator_jumper (void *rels, grub_addr_t addr); + +#endif diff --git a/kern/mm.c b/kern/mm.c index ef97b018e..f1733f251 100644 --- a/kern/mm.c +++ b/kern/mm.c @@ -65,6 +65,7 @@ #include #include #include +#include #ifdef MM_DEBUG # undef grub_malloc @@ -74,45 +75,9 @@ # undef grub_memalign #endif -/* Magic words. */ -#define GRUB_MM_FREE_MAGIC 0x2d3c2808 -#define GRUB_MM_ALLOC_MAGIC 0x6db08fa4 - -typedef struct grub_mm_header -{ - struct grub_mm_header *next; - grub_size_t size; - grub_size_t magic; -#if GRUB_CPU_SIZEOF_VOID_P == 4 - char padding[4]; -#elif GRUB_CPU_SIZEOF_VOID_P == 8 - char padding[8]; -#else -# error "unknown word size" -#endif -} -*grub_mm_header_t; - -#if GRUB_CPU_SIZEOF_VOID_P == 4 -# define GRUB_MM_ALIGN_LOG2 4 -#elif GRUB_CPU_SIZEOF_VOID_P == 8 -# define GRUB_MM_ALIGN_LOG2 5 -#endif - -#define GRUB_MM_ALIGN (1 << GRUB_MM_ALIGN_LOG2) - -typedef struct grub_mm_region -{ - struct grub_mm_header *first; - struct grub_mm_region *next; - grub_addr_t addr; - grub_size_t size; -} -*grub_mm_region_t; - -static grub_mm_region_t base; +grub_mm_region_t grub_mm_base; /* Get a header from the pointer PTR, and set *P and *R to a pointer to the header and a pointer to its region, respectively. PTR must @@ -123,9 +88,9 @@ get_header_from_pointer (void *ptr, grub_mm_header_t *p, grub_mm_region_t *r) if ((grub_addr_t) ptr & (GRUB_MM_ALIGN - 1)) grub_fatal ("unaligned pointer %p", ptr); - for (*r = base; *r; *r = (*r)->next) - if ((grub_addr_t) ptr > (*r)->addr - && (grub_addr_t) ptr <= (*r)->addr + (*r)->size) + for (*r = grub_mm_base; *r; *r = (*r)->next) + if ((grub_addr_t) ptr > (grub_addr_t) ((*r) + 1) + && (grub_addr_t) ptr <= (grub_addr_t) ((*r) + 1) + (*r)->size) break; if (! *r) @@ -153,22 +118,21 @@ grub_mm_init_region (void *addr, grub_size_t size) return; /* Allocate a region from the head. */ - r = (grub_mm_region_t) (((grub_addr_t) addr + GRUB_MM_ALIGN - 1) - & (~(GRUB_MM_ALIGN - 1))); + r = (grub_mm_region_t) ALIGN_UP ((grub_addr_t) addr, GRUB_MM_ALIGN); size -= (char *) r - (char *) addr + sizeof (*r); - h = (grub_mm_header_t) ((char *) r + GRUB_MM_ALIGN); + h = (grub_mm_header_t) (r + 1); h->next = h; h->magic = GRUB_MM_FREE_MAGIC; h->size = (size >> GRUB_MM_ALIGN_LOG2); r->first = h; - r->addr = (grub_addr_t) h; + r->pre_size = (grub_addr_t) r - (grub_addr_t) addr; r->size = (h->size << GRUB_MM_ALIGN_LOG2); /* Find where to insert this region. Put a smaller one before bigger ones, to prevent fragmentation. */ - for (p = &base, q = *p; q; p = &(q->next), q = *p) + for (p = &grub_mm_base, q = *p; q; p = &(q->next), q = *p) if (q->size > r->size) break; @@ -268,13 +232,14 @@ grub_real_malloc (grub_mm_header_t *first, grub_size_t n, grub_size_t align) */ grub_mm_header_t r; + extra += (p->size - extra - n) & (~(align - 1)); r = p + extra + n; r->magic = GRUB_MM_FREE_MAGIC; r->size = p->size - extra - n; - r->next = p->next; + r->next = p; p->size = extra; - p->next = r; + q->next = r; p += extra; p->size = n; p->magic = GRUB_MM_ALLOC_MAGIC; @@ -310,7 +275,7 @@ grub_memalign (grub_size_t align, grub_size_t size) again: - for (r = base; r; r = r->next) + for (r = grub_mm_base; r; r = r->next) { void *p; @@ -471,7 +436,7 @@ grub_mm_dump_free (void) { grub_mm_region_t r; - for (r = base; r; r = r->next) + for (r = grub_mm_base; r; r = r->next) { grub_mm_header_t p; @@ -498,13 +463,13 @@ grub_mm_dump (unsigned lineno) grub_mm_region_t r; grub_printf ("called at line %u\n", lineno); - for (r = base; r; r = r->next) + for (r = grub_mm_base; r; r = r->next) { grub_mm_header_t p; - for (p = (grub_mm_header_t) ((r->addr + GRUB_MM_ALIGN - 1) - & (~(GRUB_MM_ALIGN - 1))); - (grub_addr_t) p < r->addr + r->size; + for (p = (grub_mm_header_t) ALIGN_UP ((grub_addr_t) (r + 1), + GRUB_MM_ALIGN); + (grub_addr_t) p < (grub_addr_t) (r+1) + r->size; p++) { switch (p->magic) diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 453f73fdd..d4555e5f3 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -24,79 +24,115 @@ #include #include +#include -extern grub_uint8_t grub_relocator32_forward_start; -extern grub_uint8_t grub_relocator32_forward_end; -extern grub_uint8_t grub_relocator32_backward_start; -extern grub_uint8_t grub_relocator32_backward_end; +extern grub_uint8_t grub_relocator32_start; +extern grub_uint8_t grub_relocator32_end; +extern grub_uint8_t grub_relocator_forward_start; +extern grub_uint8_t grub_relocator_forward_end; +extern grub_uint8_t grub_relocator_backward_start; +extern grub_uint8_t grub_relocator_backward_end; -extern grub_uint32_t grub_relocator32_backward_dest; -extern grub_uint32_t grub_relocator32_backward_size; -extern grub_addr_t grub_relocator32_backward_src; +extern void *grub_relocator_backward_dest; +extern void *grub_relocator_backward_src; +extern grub_size_t grub_relocator_backward_size; -extern grub_uint32_t grub_relocator32_forward_dest; -extern grub_uint32_t grub_relocator32_forward_size; -extern grub_addr_t grub_relocator32_forward_src; +extern void *grub_relocator_forward_dest; +extern void *grub_relocator_forward_src; +extern grub_size_t grub_relocator_forward_size; -extern grub_uint32_t grub_relocator32_forward_eax; -extern grub_uint32_t grub_relocator32_forward_ebx; -extern grub_uint32_t grub_relocator32_forward_ecx; -extern grub_uint32_t grub_relocator32_forward_edx; -extern grub_uint32_t grub_relocator32_forward_eip; -extern grub_uint32_t grub_relocator32_forward_esp; +extern grub_uint32_t grub_relocator32_eax; +extern grub_uint32_t grub_relocator32_ebx; +extern grub_uint32_t grub_relocator32_ecx; +extern grub_uint32_t grub_relocator32_edx; +extern grub_uint32_t grub_relocator32_eip; +extern grub_uint32_t grub_relocator32_esp; -extern grub_uint32_t grub_relocator32_backward_eax; -extern grub_uint32_t grub_relocator32_backward_ebx; -extern grub_uint32_t grub_relocator32_backward_ecx; -extern grub_uint32_t grub_relocator32_backward_edx; -extern grub_uint32_t grub_relocator32_backward_eip; -extern grub_uint32_t grub_relocator32_backward_esp; +#define RELOCATOR_SIZEOF(x) (&grub_relocator##x##_end - &grub_relocator##x##_start) -#define RELOCATOR_SIZEOF(x) (&grub_relocator32_##x##_end - &grub_relocator32_##x##_start) -#define RELOCATOR_ALIGN 16 -#define PREFIX(x) grub_relocator32_ ## x +grub_size_t grub_relocator_align = 1; +grub_size_t grub_relocator_forward_size; +grub_size_t grub_relocator_backward_size; +grub_size_t grub_relocator_jumper_size = 10; -static void -write_call_relocator_bw (void *ptr, void *src, grub_uint32_t dest, - grub_size_t size, struct grub_relocator32_state state) +void +grub_cpu_relocator_init (void) { - grub_relocator32_backward_dest = dest; - grub_relocator32_backward_src = PTR_TO_UINT64 (src); - grub_relocator32_backward_size = size; - - grub_relocator32_backward_eax = state.eax; - grub_relocator32_backward_ebx = state.ebx; - grub_relocator32_backward_ecx = state.ecx; - grub_relocator32_backward_edx = state.edx; - grub_relocator32_backward_eip = state.eip; - grub_relocator32_backward_esp = state.esp; - - grub_memmove (ptr, - &grub_relocator32_backward_start, - RELOCATOR_SIZEOF (backward)); - ((void (*) (void)) ptr) (); + grub_relocator_forward_size = RELOCATOR_SIZEOF(_forward); + grub_relocator_backward_size = RELOCATOR_SIZEOF(_backward); } -static void -write_call_relocator_fw (void *ptr, void *src, grub_uint32_t dest, - grub_size_t size, struct grub_relocator32_state state) +void +grub_cpu_relocator_jumper (void *rels, grub_addr_t addr) { - - grub_relocator32_forward_dest = dest; - grub_relocator32_forward_src = PTR_TO_UINT64 (src); - grub_relocator32_forward_size = size; - - grub_relocator32_forward_eax = state.eax; - grub_relocator32_forward_ebx = state.ebx; - grub_relocator32_forward_ecx = state.ecx; - grub_relocator32_forward_edx = state.edx; - grub_relocator32_forward_eip = state.eip; - grub_relocator32_forward_esp = state.esp; - - grub_memmove (ptr, - &grub_relocator32_forward_start, - RELOCATOR_SIZEOF (forward)); - ((void (*) (void)) ptr) (); + grub_uint8_t *ptr; + ptr = rels; + /* jmp $addr */ + *(grub_uint8_t *) ptr = 0xe9; + ptr++; + *(grub_uint32_t *) ptr = addr - (grub_uint32_t) (ptr + 4); + ptr += 4; + /* movl $addr, %eax (for relocator) */ + *(grub_uint8_t *) ptr = 0xb8; + ptr++; + *(grub_uint32_t *) ptr = addr; } -#include "../relocator.c" +void +grub_cpu_relocator_backward (void *ptr, void *src, void *dest, + grub_size_t size) +{ + grub_relocator_backward_dest = dest; + grub_relocator_backward_src = src; + grub_relocator_backward_size = size; + + grub_memmove (ptr, + &grub_relocator_backward_start, + RELOCATOR_SIZEOF (_backward)); +} + +void +grub_cpu_relocator_forward (void *ptr, void *src, void *dest, + grub_size_t size) +{ + grub_relocator_forward_dest = dest; + grub_relocator_forward_src = src; + grub_relocator_forward_size = size; + + grub_memmove (ptr, + &grub_relocator_forward_start, + RELOCATOR_SIZEOF (_forward)); +} + +grub_err_t +grub_relocator32_boot (struct grub_relocator *rel, + struct grub_relocator32_state state) +{ + grub_addr_t target; + void *src; + grub_err_t err; + grub_addr_t relst; + err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, + (0xffffffff - RELOCATOR_SIZEOF (32)) + + 1, RELOCATOR_SIZEOF (32), 16); + if (err) + return err; + + grub_relocator32_eax = state.eax; + grub_relocator32_ebx = state.ebx; + grub_relocator32_ecx = state.ecx; + grub_relocator32_edx = state.edx; + grub_relocator32_eip = state.eip; + grub_relocator32_esp = state.esp; + + grub_memmove (src, &grub_relocator32_start, RELOCATOR_SIZEOF (32)); + + err = grub_relocator_prepare_relocs (rel, target, &relst); + if (err) + return err; + asm volatile ("cli"); + ((void (*) (void)) relst) (); + + /* Not reached. */ + return GRUB_ERR_NONE; +} diff --git a/lib/i386/relocator32.S b/lib/i386/relocator32.S new file mode 100644 index 000000000..f69e0bdc8 --- /dev/null +++ b/lib/i386/relocator32.S @@ -0,0 +1,158 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +#ifdef __x86_64__ +#define RAX %rax +#define RSI %rdi +#else +#define RAX %eax +#define RSI %esi +#endif + +/* The code segment of the protected mode. */ +#define CODE_SEGMENT 0x10 + +/* The data segment of the protected mode. */ +#define DATA_SEGMENT 0x18 + + .p2align 4 /* force 16-byte alignment */ + +VARIABLE(grub_relocator32_start) +LOCAL(base): + /* %rax contains now our new 'base'. */ + mov RAX, RSI + add $(LOCAL(cont0) - LOCAL(base)), RAX + jmp *RAX +LOCAL(cont0): + lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX + movl %eax, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + + lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX + mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) + + /* Switch to compatibility mode. */ + + lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) + + /* Update %cs. */ + ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + +LOCAL(cont1): + .code32 + + /* Update other registers. */ + movl $DATA_SEGMENT, %eax + movl %eax, %ds + movl %eax, %es + movl %eax, %fs + movl %eax, %gs + movl %eax, %ss + + /* Disable paging. */ + movl %cr0, %eax + andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax + movl %eax, %cr0 + + /* Disable amd64. */ + movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx + rdmsr + andl $(~GRUB_MEMORY_CPU_AMD64_MSR_ON), %eax + wrmsr + + /* Turn off PAE. */ + movl %cr4, %eax + andl $GRUB_MEMORY_CPU_CR4_PAE_ON, %eax + movl %eax, %cr4 + + jmp LOCAL(cont2) +LOCAL(cont2): + .code32 + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator32_esp) + .long 0 + + movl %eax, %esp + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator32_eax) + .long 0 + + /* mov imm32, %ebx */ + .byte 0xbb +VARIABLE(grub_relocator32_ebx) + .long 0 + + /* mov imm32, %ecx */ + .byte 0xb9 +VARIABLE(grub_relocator32_ecx) + .long 0 + + /* mov imm32, %edx */ + .byte 0xba +VARIABLE(grub_relocator32_edx) + .long 0 + + /* Cleared direction flag is of no problem with any current + payload and makes this implementation easier. */ + cld + + .byte 0xea +VARIABLE(grub_relocator32_eip) + .long 0 + .word CODE_SEGMENT + + /* GDT. Copied from loader/i386/linux.c. */ + .p2align 4 +LOCAL(gdt): + /* NULL. */ + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + /* Reserved. */ + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + /* Code segment. */ + .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x9A, 0xCF, 0x00 + + /* Data segment. */ + .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x92, 0xCF, 0x00 + + .p2align 4 +LOCAL(gdtdesc): + .word 0x27 +LOCAL(gdt_addr): +#ifdef __x86_64__ + /* Filled by the code. */ + .quad 0 +#else + /* Filled by the code. */ + .long 0 +#endif + + .p2align 4 +LOCAL(jump_vector): + /* Jump location. Is filled by the code */ + .long 0 + .long CODE_SEGMENT + +VARIABLE(grub_relocator32_end) diff --git a/lib/i386/relocator_asm.S b/lib/i386/relocator_asm.S index 6b803db13..f8fc0c08a 100644 --- a/lib/i386/relocator_asm.S +++ b/lib/i386/relocator_asm.S @@ -19,230 +19,60 @@ #include #include -#ifdef BACKWARD -#define RELOCATOR_VARIABLE(x) VARIABLE(grub_relocator32_backward_ ## x) -#else -#define RELOCATOR_VARIABLE(x) VARIABLE(grub_relocator32_forward_ ## x) -#endif -#ifdef __x86_64__ -#define RAX %rax -#define RCX %rcx -#define RDI %rdi -#define RSI %rdi -#else -#define RAX %eax -#define RCX %ecx -#define RDI %edi -#define RSI %esi -#endif - -/* The code segment of the protected mode. */ -#define CODE_SEGMENT 0x10 - -/* The data segment of the protected mode. */ -#define DATA_SEGMENT 0x18 - - .p2align 4 /* force 16-byte alignment */ - -RELOCATOR_VARIABLE(start) -#ifdef BACKWARD -LOCAL(base): -#endif - cli - -#ifndef __x86_64__ +VARIABLE(grub_relocator_backward_start) /* mov imm32, %eax */ .byte 0xb8 -RELOCATOR_VARIABLE(dest) +VARIABLE(grub_relocator_backward_dest) .long 0 movl %eax, %edi /* mov imm32, %eax */ .byte 0xb8 -RELOCATOR_VARIABLE(src) +VARIABLE(grub_relocator_backward_src) .long 0 movl %eax, %esi /* mov imm32, %ecx */ .byte 0xb9 -RELOCATOR_VARIABLE(size) +VARIABLE(grub_relocator_backward_size) .long 0 -#else - xorq %rax, %rax - - /* mov imm32, %eax */ - .byte 0xb8 -RELOCATOR_VARIABLE(dest) - .long 0 - movq %rax, %rdi - - /* mov imm64, %rax */ - .byte 0x48 - .byte 0xb8 -RELOCATOR_VARIABLE(src) - .long 0, 0 - movq %rax, %rsi - - xorq %rcx, %rcx - /* mov imm32, %ecx */ - .byte 0xb9 -RELOCATOR_VARIABLE(size) - .long 0 - -#endif - - mov RDI, RAX - -#ifdef BACKWARD - add RCX, RSI - add RCX, RDI -#endif - -#ifndef BACKWARD - add RCX, RAX -#endif - add $0x3, RCX - shr $2, RCX + + add %ecx, %esi + add %ecx, %edi -#ifdef BACKWARD - /* Backward movsl is implicitly off-by-four. compensate that. */ - sub $4, RSI - sub $4, RDI + /* Backward movsb is implicitly off-by-one. compensate that. */ + sub $1, %esi + sub $1, %edi /* Backward copy. */ std rep - movsl + movsb +VARIABLE(grub_relocator_backward_end) -#else - /* Forward copy. */ - cld - rep - movsl -#endif - - /* %rax contains now our new 'base'. */ - mov RAX, RSI - add $(LOCAL(cont0) - LOCAL(base)), RAX - jmp *RAX -LOCAL(cont0): - lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX - movl %eax, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) - - lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX - mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) - - /* Switch to compatibility mode. */ - - lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) - - /* Update %cs. */ - ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) - -LOCAL(cont1): - .code32 - - /* Update other registers. */ - movl $DATA_SEGMENT, %eax - movl %eax, %ds - movl %eax, %es - movl %eax, %fs - movl %eax, %gs - movl %eax, %ss - - /* Disable paging. */ - movl %cr0, %eax - andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax - movl %eax, %cr0 - - /* Disable amd64. */ - movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx - rdmsr - andl $(~GRUB_MEMORY_CPU_AMD64_MSR_ON), %eax - wrmsr - - /* Turn off PAE. */ - movl %cr4, %eax - andl $GRUB_MEMORY_CPU_CR4_PAE_ON, %eax - movl %eax, %cr4 - - jmp LOCAL(cont2) -LOCAL(cont2): - .code32 +VARIABLE(grub_relocator_forward_start) /* mov imm32, %eax */ .byte 0xb8 -RELOCATOR_VARIABLE (esp) +VARIABLE(grub_relocator_forward_dest) .long 0 + movl %eax, %edi - movl %eax, %esp - - /* mov imm32, %eax */ + /* mov imm32, %rax */ .byte 0xb8 -RELOCATOR_VARIABLE (eax) - .long 0 - - /* mov imm32, %ebx */ - .byte 0xbb -RELOCATOR_VARIABLE (ebx) +VARIABLE(grub_relocator_forward_src) .long 0 + movl %eax, %esi /* mov imm32, %ecx */ .byte 0xb9 -RELOCATOR_VARIABLE (ecx) +VARIABLE(grub_relocator_forward_size) .long 0 - /* mov imm32, %edx */ - .byte 0xba -RELOCATOR_VARIABLE (edx) - .long 0 - - /* Cleared direction flag is of no problem with any current - payload and makes this implementation easier. */ + /* Forward copy. */ cld - - .byte 0xea -RELOCATOR_VARIABLE (eip) - .long 0 - .word CODE_SEGMENT - - /* GDT. Copied from loader/i386/linux.c. */ - .p2align 4 -LOCAL(gdt): - /* NULL. */ - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - /* Reserved. */ - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - /* Code segment. */ - .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x9A, 0xCF, 0x00 - - /* Data segment. */ - .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x92, 0xCF, 0x00 - - .p2align 4 -LOCAL(gdtdesc): - .word 0x27 -LOCAL(gdt_addr): -#ifdef __x86_64__ - /* Filled by the code. */ - .quad 0 -#else - /* Filled by the code. */ - .long 0 -#endif - - .p2align 4 -LOCAL(jump_vector): - /* Jump location. Is filled by the code */ - .long 0 - .long CODE_SEGMENT - -#ifndef BACKWARD -LOCAL(base): -#endif - -RELOCATOR_VARIABLE(end) + rep + movsb +VARIABLE(grub_relocator_forward_end) diff --git a/lib/relocator.c b/lib/relocator.c index 6a5acc548..25ebd27bb 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -16,122 +16,486 @@ * along with GRUB. If not, see . */ -#define MAX_OVERHEAD ((RELOCATOR_SIZEOF (forward) + RELOCATOR_ALIGN) \ - + (RELOCATOR_SIZEOF (backward) + RELOCATOR_ALIGN) \ - + (RELOCATOR_SIZEOF (forward) + RELOCATOR_ALIGN) \ - + (RELOCATOR_SIZEOF (backward) + RELOCATOR_ALIGN)) -#define PRE_REGION_SIZE (RELOCATOR_SIZEOF (backward) + RELOCATOR_ALIGN) +#include +#include +#include +#include -void * -PREFIX (alloc) (grub_size_t size) +/* TODO: use more efficient data structures if necessary. */ + +struct grub_relocator * +grub_relocator_new (void) { - char *playground; + struct grub_relocator *ret; - playground = grub_malloc (size + MAX_OVERHEAD); - if (!playground) - return 0; + grub_cpu_relocator_init (); - *(grub_size_t *) playground = size; - - return playground + PRE_REGION_SIZE; + ret = grub_zalloc (sizeof (struct grub_relocator)); + if (!ret) + return NULL; + + ret->postchunks = ~(grub_addr_t) 0; + ret->relocators_size = grub_relocator_jumper_size; + return ret; } -void * -PREFIX (realloc) (void *relocator, grub_size_t size) +static grub_mm_header_t +get_best_header (struct grub_relocator *rel, + grub_addr_t start, grub_addr_t end, grub_addr_t align, + grub_size_t size, + grub_mm_region_t rb, grub_mm_header_t *prev, + grub_addr_t *best_addr, int from_low_priv, int collisioncheck) { - char *playground; + grub_mm_header_t h, hp; + grub_mm_header_t hb = NULL, hbp = NULL; - if (!relocator) - return PREFIX (alloc) (size); + auto void try_addr (grub_addr_t allowable_start, grub_addr_t allowable_end); + void try_addr (grub_addr_t allowable_start, grub_addr_t allowable_end) + { + if (from_low_priv) + { + grub_addr_t addr; - playground = (char *) relocator - PRE_REGION_SIZE; + addr = ALIGN_UP (allowable_start, align); - playground = grub_realloc (playground, size + MAX_OVERHEAD); - if (!playground) - return 0; + if (addr < start) + addr = ALIGN_UP (start, align); - *(grub_size_t *) playground = size; + if (collisioncheck) + while (1) + { + struct grub_relocator_chunk *chunk; + for (chunk = rel->chunks; chunk; chunk = chunk->next) + if ((chunk->target <= addr + && addr < chunk->target + chunk->size) + || (chunk->target <= addr + size + && addr + size < chunk->target + chunk->size) + || (addr <= chunk->target && chunk->target < addr + size) + || (addr <= chunk->target + chunk->size + && chunk->target + chunk->size < addr + size)) + { + addr = ALIGN_UP (chunk->target + chunk->size, align); + break; + } + if (!chunk) + break; + } - return playground + PRE_REGION_SIZE; + if (allowable_end <= addr + size) + return; + + if (addr > end) + return; + + if (hb == NULL || *best_addr > addr) + { + hb = h; + hbp = hp; + *best_addr = addr; + } + } + else + { + grub_addr_t addr; + + addr = ALIGN_DOWN (allowable_end - size, align); + + if (addr > end) + addr = ALIGN_DOWN (end, align); + + if (collisioncheck) + while (1) + { + struct grub_relocator_chunk *chunk; + for (chunk = rel->chunks; chunk; chunk = chunk->next) + if ((chunk->target <= addr + && addr < chunk->target + chunk->size) + || (chunk->target <= addr + size + && addr + size < chunk->target + chunk->size) + || (addr <= chunk->target && chunk->target < addr + size) + || (addr <= chunk->target + chunk->size + && chunk->target + chunk->size < addr + size)) + { + addr = ALIGN_DOWN (chunk->target - size, align); + break; + } + if (!chunk) + break; + } + + if (allowable_start > addr) + return; + + if (addr < start) + return; + + if (hb == NULL || *best_addr < addr) + { + hb = h; + hbp = hp; + *best_addr = addr; + } + } + } + + for (hp = NULL, h = rb->first; h; hp = h, h = h->next) + { + grub_addr_t allowable_start, allowable_end; + allowable_start = (grub_addr_t) h; + allowable_end = (grub_addr_t) (h + 1 + h->size); + + try_addr (allowable_start, allowable_end); + + if ((grub_addr_t) h == (grub_addr_t) (rb + 1)) + try_addr (allowable_start - sizeof (*rb) - rb->pre_size, + allowable_end - sizeof (*rb)); + } + *prev = hbp; + return hb; } -void -PREFIX(free) (void *relocator) +static int +malloc_in_range (struct grub_relocator *rel, + grub_addr_t start, grub_addr_t end, grub_addr_t align, + grub_size_t size, grub_addr_t *res, int from_low_priv, + int collisioncheck) { - if (relocator) - grub_free ((char *) relocator - PRE_REGION_SIZE); + grub_mm_region_t rb = NULL, rbp = NULL; + grub_mm_header_t hb = NULL, hbp = NULL; + grub_addr_t best_addr; + + again: + + { + grub_mm_region_t r, rp; + for (rp = NULL, r = grub_mm_base; r; rp = r, r = r->next) + { + if ((grub_addr_t) r + r->size + sizeof (*r) > start + && (grub_addr_t) r <= end && r->size + sizeof (*r) >= size + && (rb == NULL || from_low_priv ? rb > r : rb < r)) + { + rb = r; + rbp = rp; + } + } + } + + if (!rb) + return 0; + + hb = get_best_header (rel, start, end, align, size, rb, &hbp, &best_addr, + from_low_priv, collisioncheck); + if (!hb) + { + if (from_low_priv) + start = (grub_addr_t) (rb + rb->size + sizeof (*rb)); + else + end = (grub_addr_t) rb - 1; + goto again; + } + + /* Special case: relocating region start. */ + if (best_addr < (grub_addr_t) hbp) + { + grub_addr_t newreg_start, newreg_raw_start = best_addr + size; + grub_addr_t newreg_size, newreg_presize; + grub_mm_header_t new_header; + newreg_start = ALIGN_UP (newreg_raw_start, GRUB_MM_ALIGN); + newreg_presize = newreg_start - newreg_raw_start; + newreg_size = rb->size - (newreg_start - (grub_addr_t) rb); + if ((hb->size << GRUB_MM_ALIGN_LOG2) >= newreg_start + + (grub_addr_t) rb) + { + grub_mm_header_t newhnext = hb->next; + grub_size_t newhsize = ((hb->size << GRUB_MM_ALIGN_LOG2) + - newreg_start + - (grub_addr_t) rb) >> GRUB_MM_ALIGN_LOG2; + new_header = (void *) (newreg_start + sizeof (*rb)); + new_header->next = newhnext; + new_header->size = newhsize; + new_header->magic = GRUB_MM_FREE_MAGIC; + } + else + { + new_header = hb->next; + } + if (hbp || new_header) + { + struct grub_mm_header *newregfirst = rb->first; + struct grub_mm_region *newregnext = rb->next; + struct grub_mm_region *newreg = (void *) newreg_start; + if (hbp) + hbp->next = new_header; + else + newregfirst = new_header; + newreg->first = newregfirst; + newreg->next = newregnext; + newreg->pre_size = newreg_presize; + newreg->size = newreg_size; + if (rbp) + rbp->next = newreg; + else + grub_mm_base = newreg; + } + else + { + if (rbp) + rbp->next = rb->next; + else + grub_mm_base = rb->next; + } + *res = best_addr; + return 1; + } + { + struct grub_mm_header *foll = NULL; + + if (best_addr + size <= (grub_addr_t) (hb + hb->size)) + { + foll = (void *) ALIGN_UP (best_addr + size, GRUB_MM_ALIGN); + foll->magic = GRUB_MM_FREE_MAGIC; + foll->size = hb->size - (foll - hb); + } + + if (best_addr - (grub_addr_t) hb >= sizeof (*hb)) + { + hb->size = (best_addr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2; + if (foll) + { + foll->next = hb; + if (hbp) + hbp->next = foll; + else + rb->first = foll; + } + } + else + { + if (foll) + foll->next = hb->next; + else + foll = hb->next; + if (hbp) + hbp->next = foll; + else + rb->first = foll; + } + *res = best_addr; + return 1; + } } grub_err_t -PREFIX (boot) (void *relocator, grub_uint32_t dest, - struct grub_relocator32_state state) +grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, + grub_addr_t target, grub_size_t size) { - grub_size_t size; - char *playground; + struct grub_relocator_chunk *chunk; + grub_addr_t start; + grub_addr_t min_addr = 0, max_addr; - playground = (char *) relocator - PRE_REGION_SIZE; - size = *(grub_size_t *) playground; + max_addr = rel->postchunks; - grub_dprintf ("relocator", - "Relocator: source: %p, destination: 0x%x, size: 0x%lx\n", - relocator, (unsigned) dest, (unsigned long) size); - - /* Very unlikely condition: Relocator may risk overwrite itself. - Just move it a bit up. */ - if ((grub_addr_t) dest < (grub_addr_t) relocator - + (RELOCATOR_SIZEOF (backward) + RELOCATOR_ALIGN) - && (grub_addr_t) dest + (RELOCATOR_SIZEOF (forward) + RELOCATOR_ALIGN) - > (grub_addr_t) relocator) + /* Keep chunks in memory in the same order as they'll be after relocation. */ + for (chunk = rel->chunks; chunk; chunk = chunk->next) { - void *relocator_new = ((grub_uint8_t *) relocator) - + (RELOCATOR_SIZEOF (forward) + RELOCATOR_ALIGN) - + (RELOCATOR_SIZEOF (backward) + RELOCATOR_ALIGN); - grub_dprintf ("relocator", "Overwrite condition detected moving " - "relocator from %p to %p\n", relocator, relocator_new); - grub_memmove (relocator_new, relocator, - (RELOCATOR_SIZEOF (forward) + RELOCATOR_ALIGN) - + size - + (RELOCATOR_SIZEOF (backward) + RELOCATOR_ALIGN)); - relocator = relocator_new; + if (chunk->target > target && chunk->src > max_addr) + max_addr = chunk->src; + if (chunk->target + chunk->size <= target + && chunk->src + chunk->size < min_addr + && chunk->src < rel->postchunks) + min_addr = chunk->src + chunk->size; + if ((chunk->target <= target && target < chunk->target + chunk->size) + || (target <= chunk->target && chunk->target < target + size)) + { + return grub_error (GRUB_ERR_BAD_ARGUMENT, "overlap detected"); + } } - if ((grub_addr_t) dest >= (grub_addr_t) relocator) - { - int overhead; - overhead = dest - - ALIGN_UP (dest - RELOCATOR_SIZEOF (backward) - RELOCATOR_ALIGN, - RELOCATOR_ALIGN); - grub_dprintf ("relocator", - "Backward relocator: code %p, source: %p, " - "destination: 0x%x, size: 0x%lx\n", - (char *) relocator - overhead, - (char *) relocator - overhead, - (unsigned) dest - overhead, - (unsigned long) size + overhead); + chunk = grub_malloc (sizeof (struct grub_relocator_chunk)); + if (!chunk) + return grub_errno; - write_call_relocator_bw ((char *) relocator - overhead, - (char *) relocator - overhead, - dest - overhead, size + overhead, state); + do + { + /* A trick to improve Linux allocation. */ +#if defined (__i386__) || defined (__x86_64__) + if (target < 0x100000) + if (malloc_in_range (rel, rel->highestnonpostaddr, ~(grub_addr_t)0, 0, + size, &start, 1, 0)) + { + if (rel->postchunks < start) + rel->postchunks = start; + break; + } +#endif + if (malloc_in_range (rel, target, max_addr, 1, size, &start, 1, 0)) + break; + + if (malloc_in_range (rel, min_addr, target, 0, size, &start, 1, 0)) + break; + + grub_free (chunk); + return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); } - else + while (0); + + if (rel->highestaddr < target + size) + rel->highestaddr = target + size; + + if (rel->highestaddr < start + size) + rel->highestaddr = start + size; + + if (start < rel->postchunks) { - int overhead; - - overhead = ALIGN_UP (dest + size, RELOCATOR_ALIGN) - + RELOCATOR_SIZEOF (forward) - (dest + size); - grub_dprintf ("relocator", - "Forward relocator: code %p, source: %p, " - "destination: 0x%x, size: 0x%lx\n", - (char *) relocator + size + overhead - - RELOCATOR_SIZEOF (forward), - relocator, (unsigned) dest, - (unsigned long) size + overhead); - - write_call_relocator_fw ((char *) relocator + size + overhead - - RELOCATOR_SIZEOF (forward), - relocator, dest, size + overhead, state); + if (rel->highestnonpostaddr < target + size) + rel->highestnonpostaddr = target + size; + + if (rel->highestnonpostaddr < start + size) + rel->highestnonpostaddr = start + size; } - /* Not reached. */ + if (start < target) + rel->relocators_size += grub_relocator_backward_size; + if (start > target) + rel->relocators_size += grub_relocator_forward_size; + + chunk->src = start; + chunk->target = target; + chunk->size = size; + chunk->next = rel->chunks; + rel->chunks = chunk; + *src = (void *) start; + return GRUB_ERR_NONE; +} + +grub_err_t +grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, + grub_addr_t *target, + grub_addr_t min_addr, grub_addr_t max_addr, + grub_size_t size, grub_size_t align) +{ + grub_addr_t min_addr2 = 0, max_addr2; + struct grub_relocator_chunk *chunk; + grub_addr_t start; + + chunk = grub_malloc (sizeof (struct grub_relocator_chunk)); + if (!chunk) + return grub_errno; + + if (malloc_in_range (rel, min_addr, max_addr, align, + size, &start, 1, 1)) + { + chunk->src = start; + chunk->target = start; + chunk->size = size; + chunk->next = rel->chunks; + rel->chunks = chunk; + *src = (void *) start; + *target = start; + return GRUB_ERR_NONE; + } + + max_addr2 = rel->postchunks; + + /* Keep chunks in memory in the same order as they'll be after + relocation. */ + for (chunk = rel->chunks; chunk; chunk = chunk->next) + { + if (chunk->target > max_addr && chunk->src > max_addr2) + max_addr2 = chunk->src; + if (chunk->target + chunk->size <= min_addr + && chunk->src + chunk->size < min_addr2 + && chunk->src < rel->postchunks) + min_addr2 = chunk->src + chunk->size; + } + + if (!malloc_in_range (rel, min_addr2, max_addr2, align, + size, &start, 1, 1)) + { + grub_free (chunk); + return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); + } + + chunk->target = ALIGN_UP (min_addr, align); + while (1) + { + struct grub_relocator_chunk *chunk2; + for (chunk2 = rel->chunks; chunk2; chunk2 = chunk2->next) + if ((chunk2->target <= chunk->target + && chunk->target < chunk2->target + chunk2->size) + || (chunk2->target <= chunk->target + size + && chunk->target + size < chunk2->target + chunk2->size) + || (chunk->target <= chunk2->target && chunk2->target + < chunk->target + size) + || (chunk->target <= chunk2->target + chunk2->size + && chunk2->target + chunk2->size < chunk->target + size)) + { + chunk->target = ALIGN_UP (chunk2->target + chunk2->size, align); + break; + } + if (!chunk2) + break; + } + + if (start < chunk->target) + rel->relocators_size += grub_relocator_backward_size; + if (start > chunk->target) + rel->relocators_size += grub_relocator_forward_size; + + chunk->src = start; + chunk->size = size; + chunk->next = rel->chunks; + rel->chunks = chunk; + *src = (void *) start; + *target = chunk->target; + return GRUB_ERR_NONE; +} + +void +grub_relocator_unload (struct grub_relocator *rel) +{ + struct grub_relocator_chunk *chunk, *next; + for (chunk = rel->chunks; chunk; chunk = next) + { + grub_fatal ("Relocator unloading isn't implemented yet"); + next = chunk->next; + grub_free (chunk); + } +} + +grub_err_t +grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, + grub_addr_t *relstart) +{ + struct grub_relocator_chunk *chunk; + grub_addr_t rels; + grub_addr_t rels0; + + if (!malloc_in_range (rel, 0, ~(grub_addr_t)0, grub_relocator_align, + rel->relocators_size, &rels0, 1, 1)) + return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); + rels = rels0; + + for (chunk = rel->chunks; chunk; chunk = chunk->next) + { + if (chunk->src < chunk->target) + { + grub_cpu_relocator_backward ((void *) rels, + (void *) chunk->src, + (void *) chunk->target, + chunk->size); + rels += grub_relocator_backward_size; + } + if (chunk->src > chunk->target) + { + grub_cpu_relocator_forward ((void *) rels, + (void *) chunk->src, + (void *) chunk->target, + chunk->size); + rels += grub_relocator_forward_size; + } + } + grub_cpu_relocator_jumper ((void *) rels, addr); + *relstart = rels0; return GRUB_ERR_NONE; } diff --git a/lib/x86_64/relocator_asm.S b/lib/x86_64/relocator_asm.S new file mode 100644 index 000000000..6db44f2f7 --- /dev/null +++ b/lib/x86_64/relocator_asm.S @@ -0,0 +1,85 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +VARIABLE(grub_relocator_backward_start) + /* mov imm32, %rax */ + .byte 0x48 + .byte 0xb8 +RELOCATOR_VARIABLE(dest) + .long 0, 0 + movq %rax, %rdi + + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +RELOCATOR_VARIABLE(src) + .long 0, 0 + movq %rax, %rsi + + /* mov imm32, %ecx */ + .byte 0x48 + .byte 0xb9 +RELOCATOR_VARIABLE(size) + .long 0, 0 + + add %rcx, %rsi + add %rcx, %rdi + + + /* Backward movsb is implicitly off-by-one. compensate that. */ + sub $1, %rsi + sub $1, %rdi + + /* Backward copy. */ + std + + rep + movsb +VARIABLE(grub_relocator_backward_end) + + +VARIABLE(grub_relocator_forward_start) + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator_forward_dest) + .long 0, 0 + movq %rax, %rdi + + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator_forward_src) + .long 0, 0 + movq %rax, %rsi + + xorq %rcx, %rcx + /* mov imm64, %rcx */ + .byte 0x48 + .byte 0xb9 +VARIABLE(grub_relocator_forward_size) + .long 0, 0 + + /* Forward copy. */ + cld + rep + movsb +VARIABLE(grub_relocator_forward_end) From 14e43c6e0258b844db41c2240df9fbee1ae6918c Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 10 Jan 2010 15:06:17 +0100 Subject: [PATCH 002/271] First working newreloc --- conf/i386-pc.rmk | 4 +- include/grub/i386/multiboot.h | 4 +- kern/i386/pc/init.c | 8 +-- lib/i386/relocator.c | 13 +++-- lib/relocator.c | 62 +++++++++++++++++------- loader/i386/multiboot.c | 91 ++++++++++++++++++++--------------- loader/i386/multiboot_elfxx.c | 47 ++++++------------ 7 files changed, 127 insertions(+), 102 deletions(-) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 1978c7caa..75e1ffdaa 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -202,14 +202,14 @@ serial_mod_CFLAGS = $(COMMON_CFLAGS) serial_mod_LDFLAGS = $(COMMON_LDFLAGS) # For multiboot.mod. -#pkglib_MODULES += multiboot.mod +pkglib_MODULES += multiboot.mod multiboot_mod_SOURCES = loader/i386/multiboot.c \ loader/multiboot_loader.c multiboot_mod_CFLAGS = $(COMMON_CFLAGS) multiboot_mod_LDFLAGS = $(COMMON_LDFLAGS) multiboot_mod_ASFLAGS = $(COMMON_ASFLAGS) -#pkglib_MODULES += multiboot2.mod +pkglib_MODULES += multiboot2.mod multiboot2_mod_SOURCES = loader/i386/multiboot.c \ loader/multiboot_loader.c multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2 diff --git a/include/grub/i386/multiboot.h b/include/grub/i386/multiboot.h index 584955449..a3ff3f4da 100644 --- a/include/grub/i386/multiboot.h +++ b/include/grub/i386/multiboot.h @@ -27,9 +27,7 @@ void grub_multiboot2_real_boot (grub_addr_t entry, struct multiboot_info *mbi) __attribute__ ((noreturn)); +extern struct grub_relocator *grub_multiboot_relocator; extern grub_uint32_t grub_multiboot_payload_eip; -extern char *grub_multiboot_payload_orig; -extern grub_addr_t grub_multiboot_payload_dest; -extern grub_size_t grub_multiboot_payload_size; #endif /* ! GRUB_MULTIBOOT_CPU_HEADER */ diff --git a/kern/i386/pc/init.c b/kern/i386/pc/init.c index 0f2374c6d..3885bba7a 100644 --- a/kern/i386/pc/init.c +++ b/kern/i386/pc/init.c @@ -190,7 +190,7 @@ grub_machine_init (void) from 1MB. This region is partially used for loading OS images. For now, 1/4 of this is added to free memory. */ for (i = 0; i < num_regions; i++) - if (mem_regions[i].addr == 0x100000) + /* if (mem_regions[i].addr == 0x100000) { grub_size_t quarter = mem_regions[i].size >> 2; @@ -199,11 +199,11 @@ grub_machine_init (void) grub_mm_init_region ((void *) (grub_os_area_addr + grub_os_area_size), quarter); } - else + else*/ grub_mm_init_region ((void *) mem_regions[i].addr, mem_regions[i].size); - if (! grub_os_area_addr) - grub_fatal ("no upper memory"); + // if (! grub_os_area_addr) + //grub_fatal ("no upper memory"); grub_tsc_init (); } diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index d4555e5f3..1129ee8ef 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -19,9 +19,9 @@ #include #include -#include #include #include +#include #include #include @@ -67,15 +67,16 @@ grub_cpu_relocator_jumper (void *rels, grub_addr_t addr) { grub_uint8_t *ptr; ptr = rels; + /* movl $addr, %eax (for relocator) */ + *(grub_uint8_t *) ptr = 0xb8; + ptr++; + *(grub_uint32_t *) ptr = addr; + ptr += 4; /* jmp $addr */ *(grub_uint8_t *) ptr = 0xe9; ptr++; *(grub_uint32_t *) ptr = addr - (grub_uint32_t) (ptr + 4); ptr += 4; - /* movl $addr, %eax (for relocator) */ - *(grub_uint8_t *) ptr = 0xb8; - ptr++; - *(grub_uint32_t *) ptr = addr; } void @@ -112,6 +113,7 @@ grub_relocator32_boot (struct grub_relocator *rel, void *src; grub_err_t err; grub_addr_t relst; + err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, (0xffffffff - RELOCATOR_SIZEOF (32)) + 1, RELOCATOR_SIZEOF (32), 16); @@ -130,6 +132,7 @@ grub_relocator32_boot (struct grub_relocator *rel, err = grub_relocator_prepare_relocs (rel, target, &relst); if (err) return err; + asm volatile ("cli"); ((void (*) (void)) relst) (); diff --git a/lib/relocator.c b/lib/relocator.c index 25ebd27bb..a2ebf99a7 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -68,12 +68,18 @@ get_best_header (struct grub_relocator *rel, for (chunk = rel->chunks; chunk; chunk = chunk->next) if ((chunk->target <= addr && addr < chunk->target + chunk->size) - || (chunk->target <= addr + size + || (chunk->target < addr + size && addr + size < chunk->target + chunk->size) || (addr <= chunk->target && chunk->target < addr + size) - || (addr <= chunk->target + chunk->size + || (addr < chunk->target + chunk->size && chunk->target + chunk->size < addr + size)) { + grub_dprintf ("relocator", + "collision 0x%llx+0x%llx, 0x%llx+0x%llx\n", + (unsigned long long) chunk->target, + (unsigned long long) chunk->size, + (unsigned long long) addr, + (unsigned long long) size); addr = ALIGN_UP (chunk->target + chunk->size, align); break; } @@ -110,10 +116,10 @@ get_best_header (struct grub_relocator *rel, for (chunk = rel->chunks; chunk; chunk = chunk->next) if ((chunk->target <= addr && addr < chunk->target + chunk->size) - || (chunk->target <= addr + size + || (chunk->target < addr + size && addr + size < chunk->target + chunk->size) || (addr <= chunk->target && chunk->target < addr + size) - || (addr <= chunk->target + chunk->size + || (addr < chunk->target + chunk->size && chunk->target + chunk->size < addr + size)) { addr = ALIGN_DOWN (chunk->target - size, align); @@ -138,18 +144,29 @@ get_best_header (struct grub_relocator *rel, } } - for (hp = NULL, h = rb->first; h; hp = h, h = h->next) + hp = rb->first; + h = hp->next; + grub_dprintf ("relocator", "alive\n"); + do { grub_addr_t allowable_start, allowable_end; allowable_start = (grub_addr_t) h; allowable_end = (grub_addr_t) (h + 1 + h->size); - + try_addr (allowable_start, allowable_end); - + if ((grub_addr_t) h == (grub_addr_t) (rb + 1)) - try_addr (allowable_start - sizeof (*rb) - rb->pre_size, - allowable_end - sizeof (*rb)); + { + grub_dprintf ("relocator", "Trying region start 0x%llx\n", + (unsigned long long) (allowable_start + - sizeof (*rb) - rb->pre_size)); + try_addr (allowable_start - sizeof (*rb) - rb->pre_size, + allowable_end - sizeof (*rb)); + } + hp = h; + h = hp->next; } + while (hp && hp != rb->first); *prev = hbp; return hb; } @@ -172,7 +189,7 @@ malloc_in_range (struct grub_relocator *rel, { if ((grub_addr_t) r + r->size + sizeof (*r) > start && (grub_addr_t) r <= end && r->size + sizeof (*r) >= size - && (rb == NULL || from_low_priv ? rb > r : rb < r)) + && (rb == NULL || (from_low_priv ? rb > r : rb < r))) { rb = r; rbp = rp; @@ -183,8 +200,13 @@ malloc_in_range (struct grub_relocator *rel, if (!rb) return 0; + grub_dprintf ("relocator", "trying region %p - %p\n", rb, rb + rb->size + 1); + hb = get_best_header (rel, start, end, align, size, rb, &hbp, &best_addr, from_low_priv, collisioncheck); + + grub_dprintf ("relocator", "best header %p\n", hb); + if (!hb) { if (from_low_priv) @@ -263,9 +285,8 @@ malloc_in_range (struct grub_relocator *rel, if (foll) { foll->next = hb; - if (hbp) - hbp->next = foll; - else + hbp->next = foll; + if (rb->first == hbp) rb->first = foll; } } @@ -275,9 +296,7 @@ malloc_in_range (struct grub_relocator *rel, foll->next = hb->next; else foll = hb->next; - if (hbp) - hbp->next = foll; - else + if (rb->first == hbp) rb->first = foll; } *res = best_addr; @@ -315,6 +334,9 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, if (!chunk) return grub_errno; + grub_dprintf ("relocator", "min_addr = 0x%llx, max_addr = 0x%llx\n", + (unsigned long long) min_addr, (unsigned long long) max_addr); + do { /* A trick to improve Linux allocation. */ @@ -339,6 +361,9 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, } while (0); + grub_dprintf ("relocator", "allocated 0x%llx/0x%llx\n", + (unsigned long long) start, (unsigned long long) target); + if (rel->highestaddr < target + size) rel->highestaddr = target + size; @@ -415,7 +440,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, grub_free (chunk); return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); } - + + /* FIXME: check memory map. */ chunk->target = ALIGN_UP (min_addr, align); while (1) { @@ -455,6 +481,8 @@ void grub_relocator_unload (struct grub_relocator *rel) { struct grub_relocator_chunk *chunk, *next; + if (!rel) + return; for (chunk = rel->chunks; chunk; chunk = next) { grub_fatal ("Relocator unloading isn't implemented yet"); diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c index f4869594e..5dbfc3bfd 100644 --- a/loader/i386/multiboot.c +++ b/loader/i386/multiboot.c @@ -28,7 +28,7 @@ */ /* The bits in the required part of flags field we don't support. */ -#define UNSUPPORTED_FLAGS 0x0000fffc +#define UNSUPPORTED_FLAGS 0x0000fff0 #include #include @@ -55,12 +55,10 @@ extern grub_dl_t my_mod; static struct multiboot_info *mbi, *mbi_dest; +struct grub_relocator *grub_multiboot_relocator = NULL; static grub_size_t code_size; -char *grub_multiboot_payload_orig; -grub_addr_t grub_multiboot_payload_dest; -grub_size_t grub_multiboot_payload_size; grub_uint32_t grub_multiboot_payload_eip; static grub_err_t @@ -78,9 +76,7 @@ grub_multiboot_boot (void) .esp = 0x7ff00 }; - grub_relocator32_boot (grub_multiboot_payload_orig, - grub_multiboot_payload_dest, - state); + grub_relocator32_boot (grub_multiboot_relocator, state); /* Not reached. */ return GRUB_ERR_NONE; @@ -101,10 +97,10 @@ grub_multiboot_unload (void) } grub_free ((void *) mbi->mods_addr); } - grub_relocator32_free (grub_multiboot_payload_orig); + grub_relocator_unload (grub_multiboot_relocator); + grub_multiboot_relocator = NULL; mbi = NULL; - grub_multiboot_payload_orig = NULL; grub_dl_unref (my_mod); return GRUB_ERR_NONE; @@ -224,6 +220,10 @@ grub_multiboot (int argc, char *argv[]) int i; int cmdline_argc; char **cmdline_argv; + int mbichunk_size; + void *mbichunk; + grub_addr_t mbichunk_dest; + grub_err_t err; grub_loader_unset (); @@ -271,8 +271,8 @@ grub_multiboot (int argc, char *argv[]) goto fail; } - grub_relocator32_free (grub_multiboot_payload_orig); - grub_multiboot_payload_orig = NULL; + grub_relocator_unload (grub_multiboot_relocator); + grub_multiboot_relocator = NULL; mmap_length = grub_get_multiboot_mmap_len (); @@ -289,68 +289,81 @@ grub_multiboot (int argc, char *argv[]) boot_loader_name_length = sizeof(PACKAGE_STRING); -#define cmdline_addr(x) ((void *) ((x) + code_size)) +#define cmdline_addr(x) ((void *) (((grub_uint8_t *) x))) #define boot_loader_name_addr(x) \ - ((void *) ((x) + code_size + cmdline_length)) -#define mbi_addr(x) ((void *) ((x) + code_size + cmdline_length + boot_loader_name_length)) -#define mmap_addr(x) ((void *) ((x) + code_size + cmdline_length + boot_loader_name_length + sizeof (struct multiboot_info))) + ((void *) (((grub_uint8_t *) x) + cmdline_length)) +#define mbi_addr(x) ((void *) (((grub_uint8_t *) x) + cmdline_length + boot_loader_name_length)) +#define mmap_addr(x) ((void *) (((grub_uint8_t *) x) + cmdline_length + boot_loader_name_length + sizeof (struct multiboot_info))) - grub_multiboot_payload_size = cmdline_length + mbichunk_size = cmdline_length /* boot_loader_name_length might need to grow for mbi,etc to be aligned (see below) */ + boot_loader_name_length + 3 + sizeof (struct multiboot_info) + mmap_length; + grub_multiboot_relocator = grub_relocator_new (); + + if (!grub_multiboot_relocator) + goto fail; + if (header->flags & MULTIBOOT_AOUT_KLUDGE) { int offset = ((char *) header - buffer - (header->header_addr - header->load_addr)); int load_size = ((header->load_end_addr == 0) ? file->size - offset : header->load_end_addr - header->load_addr); + void *source; if (header->bss_end_addr) code_size = (header->bss_end_addr - header->load_addr); else code_size = load_size; - grub_multiboot_payload_dest = header->load_addr; - grub_multiboot_payload_size += code_size; - - grub_multiboot_payload_orig - = grub_relocator32_alloc (grub_multiboot_payload_size); - - if (! grub_multiboot_payload_orig) - goto fail; + err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, + &source, header->load_addr, + code_size); + if (err) + { + grub_dprintf ("multiboot_loader", "Error loading aout kludge\n"); + goto fail; + } if ((grub_file_seek (file, offset)) == (grub_off_t) -1) goto fail; - grub_file_read (file, (void *) grub_multiboot_payload_orig, load_size); + grub_file_read (file, source, load_size); if (grub_errno) goto fail; if (header->bss_end_addr) - grub_memset ((void *) (grub_multiboot_payload_orig + load_size), 0, + grub_memset ((grub_uint32_t *) source + load_size, 0, header->bss_end_addr - header->load_addr - load_size); grub_multiboot_payload_eip = header->entry_addr; - } else if (grub_multiboot_load_elf (file, buffer) != GRUB_ERR_NONE) goto fail; /* This provides alignment for the MBI, the memory map and the backward relocator. */ - boot_loader_name_length += (0x04 - ((unsigned long) mbi_addr (grub_multiboot_payload_dest) & 0x03)); + boot_loader_name_length += (0x04 - ((unsigned long) mbi_addr (0) & 0x03)); + + err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &mbichunk, + &mbichunk_dest, + 0, (0xffffffff - mbichunk_size) + 1, + mbichunk_size, 4); + if (err) + { + grub_dprintf ("multiboot_loader", "Error allocating mbi chunk\n"); + goto fail; + } + mbi = mbi_addr (mbichunk); + mbi_dest = mbi_addr (mbichunk_dest); - mbi = mbi_addr (grub_multiboot_payload_orig); - mbi_dest = mbi_addr (grub_multiboot_payload_dest); grub_memset (mbi, 0, sizeof (struct multiboot_info)); mbi->mmap_length = mmap_length; - grub_fill_multiboot_mmap (mmap_addr (grub_multiboot_payload_orig)); + grub_fill_multiboot_mmap (mmap_addr (mbichunk)); - /* FIXME: grub_uint32_t will break for addresses above 4 GiB, but is mandated - by the spec. Is there something we can do about it? */ - mbi->mmap_addr = (grub_uint32_t) mmap_addr (grub_multiboot_payload_dest); + mbi->mmap_addr = (grub_uint32_t) mmap_addr (mbichunk_dest); mbi->flags |= MULTIBOOT_INFO_MEM_MAP; /* Convert from bytes to kilobytes. */ @@ -358,7 +371,7 @@ grub_multiboot (int argc, char *argv[]) mbi->mem_upper = grub_mmap_get_upper () / 1024; mbi->flags |= MULTIBOOT_INFO_MEMORY; - cmdline = p = cmdline_addr (grub_multiboot_payload_orig); + cmdline = p = cmdline_addr (mbichunk); if (! cmdline) goto fail; @@ -374,17 +387,17 @@ grub_multiboot (int argc, char *argv[]) *p = 0; mbi->flags |= MULTIBOOT_INFO_CMDLINE; - mbi->cmdline = (grub_uint32_t) cmdline_addr (grub_multiboot_payload_dest); + mbi->cmdline = (grub_uint32_t) cmdline_addr (mbichunk_dest); - grub_strcpy (boot_loader_name_addr (grub_multiboot_payload_orig), PACKAGE_STRING); + grub_strcpy (boot_loader_name_addr (mbichunk), PACKAGE_STRING); mbi->flags |= MULTIBOOT_INFO_BOOT_LOADER_NAME; - mbi->boot_loader_name = (grub_uint32_t) boot_loader_name_addr (grub_multiboot_payload_dest); + mbi->boot_loader_name = (grub_uint32_t) boot_loader_name_addr (mbichunk_dest); if (grub_multiboot_get_bootdev (&mbi->boot_device)) mbi->flags |= MULTIBOOT_INFO_BOOTDEV; - grub_loader_set (grub_multiboot_boot, grub_multiboot_unload, 1); + grub_loader_set (grub_multiboot_boot, grub_multiboot_unload, 0); fail: if (file) diff --git a/loader/i386/multiboot_elfxx.c b/loader/i386/multiboot_elfxx.c index 80db25144..155de5801 100644 --- a/loader/i386/multiboot_elfxx.c +++ b/loader/i386/multiboot_elfxx.c @@ -51,7 +51,6 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) { Elf_Ehdr *ehdr = (Elf_Ehdr *) buffer; char *phdr_base; - int lowest_segment = -1, highest_segment = -1; int i; if (ehdr->e_ident[EI_CLASS] != ELFCLASSXX) @@ -82,54 +81,38 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) phdr_base = (char *) buffer + ehdr->e_phoff; #define phdr(i) ((Elf_Phdr *) (phdr_base + (i) * ehdr->e_phentsize)) - for (i = 0; i < ehdr->e_phnum; i++) - if (phdr(i)->p_type == PT_LOAD && phdr(i)->p_filesz != 0) - { - /* Beware that segment 0 isn't necessarily loadable */ - if (lowest_segment == -1 - || phdr(i)->p_paddr < phdr(lowest_segment)->p_paddr) - lowest_segment = i; - if (highest_segment == -1 - || phdr(i)->p_paddr > phdr(highest_segment)->p_paddr) - highest_segment = i; - } - - if (lowest_segment == -1) - return grub_error (GRUB_ERR_BAD_OS, "ELF contains no loadable segments"); - - code_size = (phdr(highest_segment)->p_paddr + phdr(highest_segment)->p_memsz) - phdr(lowest_segment)->p_paddr; - grub_multiboot_payload_dest = phdr(lowest_segment)->p_paddr; - - grub_multiboot_payload_size += code_size; - - grub_multiboot_payload_orig - = grub_relocator32_alloc (grub_multiboot_payload_size); - - if (!grub_multiboot_payload_orig) - return grub_errno; - /* Load every loadable segment in memory. */ for (i = 0; i < ehdr->e_phnum; i++) { if (phdr(i)->p_type == PT_LOAD && phdr(i)->p_filesz != 0) { - char *load_this_module_at = (char *) (grub_multiboot_payload_orig + (long) (phdr(i)->p_paddr - phdr(lowest_segment)->p_paddr)); + grub_err_t err; + void *source; grub_dprintf ("multiboot_loader", "segment %d: paddr=0x%lx, memsz=0x%lx, vaddr=0x%lx\n", i, (long) phdr(i)->p_paddr, (long) phdr(i)->p_memsz, (long) phdr(i)->p_vaddr); + err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, + &source, phdr(i)->p_paddr, + phdr(i)->p_memsz); + if (err) + { + grub_dprintf ("multiboot_loader", "Error loading phdr %d\n", i); + return err; + } + if (grub_file_seek (file, (grub_off_t) phdr(i)->p_offset) == (grub_off_t) -1) return grub_error (GRUB_ERR_BAD_OS, "invalid offset in program header"); - if (grub_file_read (file, load_this_module_at, phdr(i)->p_filesz) + if (grub_file_read (file, source, phdr(i)->p_filesz) != (grub_ssize_t) phdr(i)->p_filesz) return grub_error (GRUB_ERR_BAD_OS, "couldn't read segment from file"); if (phdr(i)->p_filesz < phdr(i)->p_memsz) - grub_memset (load_this_module_at + phdr(i)->p_filesz, 0, + grub_memset ((grub_uint8_t *) source + phdr(i)->p_filesz, 0, phdr(i)->p_memsz - phdr(i)->p_filesz); } } @@ -138,8 +121,8 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) if (phdr(i)->p_vaddr <= ehdr->e_entry && phdr(i)->p_vaddr + phdr(i)->p_memsz > ehdr->e_entry) { - grub_multiboot_payload_eip = grub_multiboot_payload_dest - + (ehdr->e_entry - phdr(i)->p_vaddr) + (phdr(i)->p_paddr - phdr(lowest_segment)->p_paddr); + grub_multiboot_payload_eip = (ehdr->e_entry - phdr(i)->p_vaddr) + + phdr(i)->p_paddr; break; } From 7e267737b6c6db0bac679e25404d6801aad5e8a6 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 10 Jan 2010 18:59:31 +0100 Subject: [PATCH 003/271] Add align to .S files --- lib/i386/relocator_asm.S | 2 ++ lib/x86_64/relocator_asm.S | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/i386/relocator_asm.S b/lib/i386/relocator_asm.S index f8fc0c08a..a3530182a 100644 --- a/lib/i386/relocator_asm.S +++ b/lib/i386/relocator_asm.S @@ -19,6 +19,8 @@ #include #include + .p2align 2 + VARIABLE(grub_relocator_backward_start) /* mov imm32, %eax */ .byte 0xb8 diff --git a/lib/x86_64/relocator_asm.S b/lib/x86_64/relocator_asm.S index 6db44f2f7..8d99f5224 100644 --- a/lib/x86_64/relocator_asm.S +++ b/lib/x86_64/relocator_asm.S @@ -19,6 +19,8 @@ #include #include + .p2align 2 + VARIABLE(grub_relocator_backward_start) /* mov imm32, %rax */ .byte 0x48 From d2601bb7bcf3aef6d435118e0200dc179f7b3e4d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 11 Jan 2010 11:32:41 +0100 Subject: [PATCH 004/271] decrease scope of code_size --- loader/i386/multiboot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c index 2a1411002..c5a7f7f9d 100644 --- a/loader/i386/multiboot.c +++ b/loader/i386/multiboot.c @@ -49,7 +49,6 @@ extern grub_dl_t my_mod; struct grub_relocator *grub_multiboot_relocator = NULL; -static grub_size_t code_size; grub_uint32_t grub_multiboot_payload_eip; static grub_err_t @@ -182,6 +181,7 @@ grub_multiboot (int argc, char *argv[]) (header->header_addr - header->load_addr)); int load_size = ((header->load_end_addr == 0) ? file->size - offset : header->load_end_addr - header->load_addr); + grub_size_t code_size; void *source; if (header->bss_end_addr) From b56495543a29c4df518aa2a68fed50cde96bce8d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 11 Jan 2010 13:40:59 +0100 Subject: [PATCH 005/271] Fix variable name collision --- lib/i386/relocator.c | 8 ++++---- lib/i386/relocator_asm.S | 4 ++-- lib/x86_64/relocator_asm.S | 9 ++++----- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 1129ee8ef..2396999bb 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -35,11 +35,11 @@ extern grub_uint8_t grub_relocator_backward_end; extern void *grub_relocator_backward_dest; extern void *grub_relocator_backward_src; -extern grub_size_t grub_relocator_backward_size; +extern grub_size_t grub_relocator_backward_chunk_size; extern void *grub_relocator_forward_dest; extern void *grub_relocator_forward_src; -extern grub_size_t grub_relocator_forward_size; +extern grub_size_t grub_relocator_forward_chunk_size; extern grub_uint32_t grub_relocator32_eax; extern grub_uint32_t grub_relocator32_ebx; @@ -85,7 +85,7 @@ grub_cpu_relocator_backward (void *ptr, void *src, void *dest, { grub_relocator_backward_dest = dest; grub_relocator_backward_src = src; - grub_relocator_backward_size = size; + grub_relocator_backward_chunk_size = size; grub_memmove (ptr, &grub_relocator_backward_start, @@ -98,7 +98,7 @@ grub_cpu_relocator_forward (void *ptr, void *src, void *dest, { grub_relocator_forward_dest = dest; grub_relocator_forward_src = src; - grub_relocator_forward_size = size; + grub_relocator_forward_chunk_size = size; grub_memmove (ptr, &grub_relocator_forward_start, diff --git a/lib/i386/relocator_asm.S b/lib/i386/relocator_asm.S index a3530182a..f273586fe 100644 --- a/lib/i386/relocator_asm.S +++ b/lib/i386/relocator_asm.S @@ -36,7 +36,7 @@ VARIABLE(grub_relocator_backward_src) /* mov imm32, %ecx */ .byte 0xb9 -VARIABLE(grub_relocator_backward_size) +VARIABLE(grub_relocator_backward_chunk_size) .long 0 add %ecx, %esi @@ -70,7 +70,7 @@ VARIABLE(grub_relocator_forward_src) /* mov imm32, %ecx */ .byte 0xb9 -VARIABLE(grub_relocator_forward_size) +VARIABLE(grub_relocator_forward_chunk_size) .long 0 /* Forward copy. */ diff --git a/lib/x86_64/relocator_asm.S b/lib/x86_64/relocator_asm.S index 8d99f5224..62b909f57 100644 --- a/lib/x86_64/relocator_asm.S +++ b/lib/x86_64/relocator_asm.S @@ -25,27 +25,26 @@ VARIABLE(grub_relocator_backward_start) /* mov imm32, %rax */ .byte 0x48 .byte 0xb8 -RELOCATOR_VARIABLE(dest) +VARIABLE(grub_relocator_backward_dest) .long 0, 0 movq %rax, %rdi /* mov imm64, %rax */ .byte 0x48 .byte 0xb8 -RELOCATOR_VARIABLE(src) +VARIABLE(grub_relocator_backward_src) .long 0, 0 movq %rax, %rsi /* mov imm32, %ecx */ .byte 0x48 .byte 0xb9 -RELOCATOR_VARIABLE(size) +VARIABLE(grub_relocator_backward_chunk_size) .long 0, 0 add %rcx, %rsi add %rcx, %rdi - /* Backward movsb is implicitly off-by-one. compensate that. */ sub $1, %rsi sub $1, %rdi @@ -77,7 +76,7 @@ VARIABLE(grub_relocator_forward_src) /* mov imm64, %rcx */ .byte 0x48 .byte 0xb9 -VARIABLE(grub_relocator_forward_size) +VARIABLE(grub_relocator_forward_chunk_size) .long 0, 0 /* Forward copy. */ From 796d2fa20e81702ba6c99a1d9b6a1b1aa0dbd713 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 11 Jan 2010 13:42:45 +0100 Subject: [PATCH 006/271] Remove uselees instruction --- lib/x86_64/relocator_asm.S | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/x86_64/relocator_asm.S b/lib/x86_64/relocator_asm.S index 62b909f57..2ab6d8cb7 100644 --- a/lib/x86_64/relocator_asm.S +++ b/lib/x86_64/relocator_asm.S @@ -36,7 +36,7 @@ VARIABLE(grub_relocator_backward_src) .long 0, 0 movq %rax, %rsi - /* mov imm32, %ecx */ + /* mov imm64, %rcx */ .byte 0x48 .byte 0xb9 VARIABLE(grub_relocator_backward_chunk_size) @@ -72,7 +72,6 @@ VARIABLE(grub_relocator_forward_src) .long 0, 0 movq %rax, %rsi - xorq %rcx, %rcx /* mov imm64, %rcx */ .byte 0x48 .byte 0xb9 From 669a1c01fb993f061cd41f9593018e1159fa3b36 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 11 Jan 2010 13:43:31 +0100 Subject: [PATCH 007/271] Fix various mistakes --- lib/relocator.c | 84 +++++++++++++++++++++++++++++-------------------- 1 file changed, 50 insertions(+), 34 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index a2ebf99a7..4b638cd66 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -35,7 +35,8 @@ grub_relocator_new (void) return NULL; ret->postchunks = ~(grub_addr_t) 0; - ret->relocators_size = grub_relocator_jumper_size; + ret->relocators_size = grub_relocator_jumper_size; + grub_dprintf ("relocator", "relocators_size=%d\n", ret->relocators_size); return ret; } @@ -198,14 +199,17 @@ malloc_in_range (struct grub_relocator *rel, } if (!rb) - return 0; + { + grub_dprintf ("relocator", "no suitable region found\n"); + return 0; + } grub_dprintf ("relocator", "trying region %p - %p\n", rb, rb + rb->size + 1); hb = get_best_header (rel, start, end, align, size, rb, &hbp, &best_addr, from_low_priv, collisioncheck); - grub_dprintf ("relocator", "best header %p\n", hb); + grub_dprintf ("relocator", "best header %p/%x\n", hb, best_addr); if (!hb) { @@ -226,13 +230,15 @@ malloc_in_range (struct grub_relocator *rel, newreg_presize = newreg_start - newreg_raw_start; newreg_size = rb->size - (newreg_start - (grub_addr_t) rb); if ((hb->size << GRUB_MM_ALIGN_LOG2) >= newreg_start - + (grub_addr_t) rb) + - (grub_addr_t) rb) { grub_mm_header_t newhnext = hb->next; grub_size_t newhsize = ((hb->size << GRUB_MM_ALIGN_LOG2) - - newreg_start - - (grub_addr_t) rb) >> GRUB_MM_ALIGN_LOG2; + - (newreg_start + - (grub_addr_t) rb)) >> GRUB_MM_ALIGN_LOG2; new_header = (void *) (newreg_start + sizeof (*rb)); + if (newhnext == hb->next) + newhnext = newhnext; new_header->next = newhnext; new_header->size = newhsize; new_header->magic = GRUB_MM_FREE_MAGIC; @@ -240,32 +246,25 @@ malloc_in_range (struct grub_relocator *rel, else { new_header = hb->next; + if (new_header == hb) + new_header = (void *) (newreg_start + sizeof (*rb)); } - if (hbp || new_header) - { - struct grub_mm_header *newregfirst = rb->first; - struct grub_mm_region *newregnext = rb->next; - struct grub_mm_region *newreg = (void *) newreg_start; - if (hbp) - hbp->next = new_header; - else - newregfirst = new_header; - newreg->first = newregfirst; - newreg->next = newregnext; - newreg->pre_size = newreg_presize; - newreg->size = newreg_size; - if (rbp) - rbp->next = newreg; - else - grub_mm_base = newreg; - } - else - { - if (rbp) - rbp->next = rb->next; - else - grub_mm_base = rb->next; - } + { + struct grub_mm_header *newregfirst = rb->first; + struct grub_mm_region *newregnext = rb->next; + struct grub_mm_region *newreg = (void *) newreg_start; + hbp->next = new_header; + if (newregfirst == hb) + newregfirst = new_header; + newreg->first = newregfirst; + newreg->next = newregnext; + newreg->pre_size = newreg_presize; + newreg->size = newreg_size; + if (rbp) + rbp->next = newreg; + else + grub_mm_base = newreg; + } *res = best_addr; return 1; } @@ -296,8 +295,12 @@ malloc_in_range (struct grub_relocator *rel, foll->next = hb->next; else foll = hb->next; - if (rb->first == hbp) + + if (rb->first == hb) rb->first = foll; + if (rb->first == hb) + rb->first = (void *) (rb + 1); + hbp->next = foll; } *res = best_addr; return 1; @@ -320,7 +323,7 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, if (chunk->target > target && chunk->src > max_addr) max_addr = chunk->src; if (chunk->target + chunk->size <= target - && chunk->src + chunk->size < min_addr + && chunk->src + chunk->size > min_addr && chunk->src < rel->postchunks) min_addr = chunk->src + chunk->size; if ((chunk->target <= target && target < chunk->target + chunk->size) @@ -356,6 +359,7 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, if (malloc_in_range (rel, min_addr, target, 0, size, &start, 1, 0)) break; + grub_dprintf ("relocator", "not allocated\n"); grub_free (chunk); return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); } @@ -379,11 +383,15 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, rel->highestnonpostaddr = start + size; } + grub_dprintf ("relocator", "relocators_size=%d\n", rel->relocators_size); + if (start < target) rel->relocators_size += grub_relocator_backward_size; if (start > target) rel->relocators_size += grub_relocator_forward_size; + grub_dprintf ("relocator", "relocators_size=%d\n", rel->relocators_size); + chunk->src = start; chunk->target = target; chunk->size = size; @@ -410,6 +418,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, if (malloc_in_range (rel, min_addr, max_addr, align, size, &start, 1, 1)) { + grub_dprintf ("relocator", "allocated 0x%llx/0x%llx\n", + (unsigned long long) start, (unsigned long long) start); chunk->src = start; chunk->target = start; chunk->size = size; @@ -499,11 +509,17 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, grub_addr_t rels; grub_addr_t rels0; - if (!malloc_in_range (rel, 0, ~(grub_addr_t)0, grub_relocator_align, + grub_dprintf ("relocator", "Preparing relocs (size=%d)\n", + rel->relocators_size); + + if (!malloc_in_range (rel, 0, ~(grub_addr_t)0 - rel->relocators_size + 1, + grub_relocator_align, rel->relocators_size, &rels0, 1, 1)) return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); rels = rels0; + grub_dprintf ("relocator", "Relocs allocated\n"); + for (chunk = rel->chunks; chunk; chunk = chunk->next) { if (chunk->src < chunk->target) From cb1b2ad7e080849ef4c3c8e0a1cc9292d71e0949 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 11 Jan 2010 13:43:44 +0100 Subject: [PATCH 008/271] Reenable XNU --- conf/i386-pc.rmk | 2 +- include/grub/i386/xnu.h | 1 - include/grub/xnu.h | 9 +-- loader/i386/xnu.c | 99 ++++++++++++--------------- loader/xnu.c | 144 +++++++++++++++++++--------------------- loader/xnu_resume.c | 43 ++++++++---- 6 files changed, 148 insertions(+), 150 deletions(-) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 6992d3edc..c155047f6 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -179,7 +179,7 @@ linux_mod_SOURCES = loader/i386/linux.c linux_mod_CFLAGS = $(COMMON_CFLAGS) linux_mod_LDFLAGS = $(COMMON_LDFLAGS) -#pkglib_MODULES += xnu.mod +pkglib_MODULES += xnu.mod xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/i386/pc/xnu.c \ loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c xnu_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/include/grub/i386/xnu.h b/include/grub/i386/xnu.h index 3be2c3bcc..d3ac5ba0c 100644 --- a/include/grub/i386/xnu.h +++ b/include/grub/i386/xnu.h @@ -117,5 +117,4 @@ grub_err_t grub_xnu_boot (void); grub_err_t grub_xnu_set_video (struct grub_xnu_boot_params *bootparams_relloc); grub_err_t grub_cpu_xnu_fill_devicetree (void); -extern grub_uint32_t grub_xnu_heap_will_be_at; #endif diff --git a/include/grub/xnu.h b/include/grub/xnu.h index 6ce17c25e..0b942d855 100644 --- a/include/grub/xnu.h +++ b/include/grub/xnu.h @@ -87,7 +87,7 @@ extern struct grub_xnu_devtree_key *grub_xnu_devtree_root; void grub_xnu_free_devtree (struct grub_xnu_devtree_key *cur); -grub_err_t grub_xnu_writetree_toheap (void **start, grub_size_t *size); +grub_err_t grub_xnu_writetree_toheap (grub_addr_t *target, grub_size_t *size); struct grub_xnu_devtree_key *grub_xnu_create_value (struct grub_xnu_devtree_key **parent, char *name); @@ -102,11 +102,12 @@ grub_err_t grub_xnu_scan_dir_for_kexts (char *dirname, char *osbundlerequired, int maxrecursion); grub_err_t grub_xnu_load_kext_from_dir (char *dirname, char *osbundlerequired, int maxrecursion); -void *grub_xnu_heap_malloc (int size); +grub_err_t grub_xnu_heap_malloc (int size, void **src, grub_addr_t *target); grub_err_t grub_xnu_fill_devicetree (void); -extern grub_uint32_t grub_xnu_heap_real_start; +extern struct grub_relocator *grub_xnu_relocator; + extern grub_size_t grub_xnu_heap_size; -extern void *grub_xnu_heap_start; extern struct grub_video_bitmap *grub_xnu_bitmap; extern int grub_xnu_is_64bit; +extern grub_addr_t grub_xnu_heap_target_start; #endif diff --git a/loader/i386/xnu.c b/loader/i386/xnu.c index 23a8a6f7b..ce520bcde 100644 --- a/loader/i386/xnu.c +++ b/loader/i386/xnu.c @@ -35,7 +35,6 @@ #include char grub_xnu_cmdline[1024]; -grub_uint32_t grub_xnu_heap_will_be_at; grub_uint32_t grub_xnu_entry_point, grub_xnu_arg1, grub_xnu_stack; /* Aliases set for some tables. */ @@ -832,26 +831,25 @@ grub_xnu_boot_resume (void) state.eip = grub_xnu_entry_point; state.eax = grub_xnu_arg1; - return grub_relocator32_boot (grub_xnu_heap_start, grub_xnu_heap_will_be_at, - state); + return grub_relocator32_boot (grub_xnu_relocator, state); } /* Boot xnu. */ grub_err_t grub_xnu_boot (void) { - struct grub_xnu_boot_params *bootparams_relloc; - grub_off_t bootparams_relloc_off; - grub_off_t mmap_relloc_off; + struct grub_xnu_boot_params *bootparams; + grub_addr_t bootparams_target; grub_err_t err; grub_efi_uintn_t memory_map_size = 0; grub_efi_memory_descriptor_t *memory_map; + grub_addr_t memory_map_target; grub_efi_uintn_t map_key = 0; grub_efi_uintn_t descriptor_size = 0; grub_efi_uint32_t descriptor_version = 0; grub_uint64_t firstruntimepage, lastruntimepage; grub_uint64_t curruntimepage; - void *devtree; + grub_addr_t devtree_target; grub_size_t devtreelen; int i; struct grub_relocator32_state state; @@ -895,26 +893,25 @@ grub_xnu_boot (void) } /* Relocate the boot parameters to heap. */ - bootparams_relloc = grub_xnu_heap_malloc (sizeof (*bootparams_relloc)); - if (! bootparams_relloc) - return grub_errno; - bootparams_relloc_off = (grub_uint8_t *) bootparams_relloc - - (grub_uint8_t *) grub_xnu_heap_start; + err = grub_xnu_heap_malloc (sizeof (*bootparams), + (void **) &bootparams, &bootparams_target); + if (err) + return err; /* Set video. */ - err = grub_xnu_set_video (bootparams_relloc); + err = grub_xnu_set_video (bootparams); if (err != GRUB_ERR_NONE) { grub_print_error (); grub_errno = GRUB_ERR_NONE; grub_printf ("Booting in blind mode\n"); - bootparams_relloc->lfb_mode = 0; - bootparams_relloc->lfb_width = 0; - bootparams_relloc->lfb_height = 0; - bootparams_relloc->lfb_depth = 0; - bootparams_relloc->lfb_line_len = 0; - bootparams_relloc->lfb_base = 0; + bootparams->lfb_mode = 0; + bootparams->lfb_width = 0; + bootparams->lfb_height = 0; + bootparams->lfb_depth = 0; + bootparams->lfb_line_len = 0; + bootparams->lfb_base = 0; } if (grub_autoefi_get_memory_map (&memory_map_size, memory_map, @@ -925,38 +922,29 @@ grub_xnu_boot (void) /* We will do few allocations later. Reserve some space for possible memory map growth. */ memory_map_size += 20 * descriptor_size; - memory_map = grub_xnu_heap_malloc (memory_map_size); - if (! memory_map) - return grub_errno; - mmap_relloc_off = (grub_uint8_t *) memory_map - - (grub_uint8_t *) grub_xnu_heap_start; - - err = grub_xnu_writetree_toheap (&devtree, &devtreelen); + err = grub_xnu_heap_malloc (memory_map_size, + (void **) &memory_map, &memory_map_target); if (err) return err; - bootparams_relloc = (struct grub_xnu_boot_params *) - (bootparams_relloc_off + (grub_uint8_t *) grub_xnu_heap_start); - grub_memcpy (bootparams_relloc->cmdline, grub_xnu_cmdline, - sizeof (bootparams_relloc->cmdline)); + err = grub_xnu_writetree_toheap (&devtree_target, &devtreelen); + if (err) + return err; - bootparams_relloc->devtree - = ((grub_uint8_t *) devtree - (grub_uint8_t *) grub_xnu_heap_start) - + grub_xnu_heap_will_be_at; - bootparams_relloc->devtreelen = devtreelen; + grub_memcpy (bootparams->cmdline, grub_xnu_cmdline, + sizeof (bootparams->cmdline)); - memory_map = (grub_efi_memory_descriptor_t *) - ((grub_uint8_t *) grub_xnu_heap_start + mmap_relloc_off); + bootparams->devtree = devtree_target; + bootparams->devtreelen = devtreelen; if (grub_autoefi_get_memory_map (&memory_map_size, memory_map, &map_key, &descriptor_size, &descriptor_version) <= 0) return grub_errno; - bootparams_relloc->efi_system_table - = PTR_TO_UINT32 (grub_autoefi_system_table); + bootparams->efi_system_table = PTR_TO_UINT32 (grub_autoefi_system_table); - firstruntimepage = (((grub_addr_t) grub_xnu_heap_will_be_at + firstruntimepage = (((grub_addr_t) grub_xnu_heap_target_start + grub_xnu_heap_size + GRUB_XNU_PAGESIZE - 1) / GRUB_XNU_PAGESIZE) + 20; curruntimepage = firstruntimepage; @@ -977,7 +965,7 @@ grub_xnu_boot (void) <= PTR_TO_UINT64 (grub_autoefi_system_table) && curdesc->physical_start + (curdesc->num_pages << 12) > PTR_TO_UINT64 (grub_autoefi_system_table)) - bootparams_relloc->efi_system_table + bootparams->efi_system_table = PTR_TO_UINT64 (grub_autoefi_system_table) - curdesc->physical_start + curdesc->virtual_start; if (SIZEOF_OF_UINTN == 8 && grub_xnu_is_64bit) @@ -987,25 +975,25 @@ grub_xnu_boot (void) lastruntimepage = curruntimepage; - bootparams_relloc->efi_mmap = grub_xnu_heap_will_be_at + mmap_relloc_off; - bootparams_relloc->efi_mmap_size = memory_map_size; - bootparams_relloc->efi_mem_desc_size = descriptor_size; - bootparams_relloc->efi_mem_desc_version = descriptor_version; + bootparams->efi_mmap = memory_map_target; + bootparams->efi_mmap_size = memory_map_size; + bootparams->efi_mem_desc_size = descriptor_size; + bootparams->efi_mem_desc_version = descriptor_version; - bootparams_relloc->heap_start = grub_xnu_heap_will_be_at; - bootparams_relloc->heap_size = grub_xnu_heap_size; - bootparams_relloc->efi_runtime_first_page = firstruntimepage; + bootparams->heap_start = grub_xnu_heap_target_start; + bootparams->heap_size = grub_xnu_heap_size; + bootparams->efi_runtime_first_page = firstruntimepage; - bootparams_relloc->efi_runtime_npages = lastruntimepage - firstruntimepage; - bootparams_relloc->efi_uintnbits = SIZEOF_OF_UINTN * 8; + bootparams->efi_runtime_npages = lastruntimepage - firstruntimepage; + bootparams->efi_uintnbits = SIZEOF_OF_UINTN * 8; - bootparams_relloc->verminor = GRUB_XNU_BOOTARGS_VERMINOR; - bootparams_relloc->vermajor = GRUB_XNU_BOOTARGS_VERMAJOR; + bootparams->verminor = GRUB_XNU_BOOTARGS_VERMINOR; + bootparams->vermajor = GRUB_XNU_BOOTARGS_VERMAJOR; /* Parameters for asm helper. */ - grub_xnu_stack = bootparams_relloc->heap_start - + bootparams_relloc->heap_size + GRUB_XNU_PAGESIZE; - grub_xnu_arg1 = bootparams_relloc_off + grub_xnu_heap_will_be_at; + grub_xnu_stack = bootparams->heap_start + + bootparams->heap_size + GRUB_XNU_PAGESIZE; + grub_xnu_arg1 = bootparams_target; if (! grub_autoefi_exit_boot_services (map_key)) return grub_error (GRUB_ERR_IO, "can't exit boot services"); @@ -1016,8 +1004,7 @@ grub_xnu_boot (void) state.eip = grub_xnu_entry_point; state.eax = grub_xnu_arg1; state.esp = grub_xnu_stack; - return grub_relocator32_boot (grub_xnu_heap_start, grub_xnu_heap_will_be_at, - state); + return grub_relocator32_boot (grub_xnu_relocator, state); } static grub_command_t cmd_devprop_load; diff --git a/loader/xnu.c b/loader/xnu.c index c3dcee3ed..07a0b726e 100644 --- a/loader/xnu.c +++ b/loader/xnu.c @@ -39,45 +39,28 @@ static int driverspackagenum = 0; static int driversnum = 0; int grub_xnu_is_64bit = 0; -void *grub_xnu_heap_start = 0; +grub_addr_t grub_xnu_heap_target_start = 0; grub_size_t grub_xnu_heap_size = 0; - -/* Allocate heap by 32MB-blocks. */ -#define GRUB_XNU_HEAP_ALLOC_BLOCK 0x2000000 +struct grub_relocator *grub_xnu_relocator; static grub_err_t grub_xnu_register_memory (char *prefix, int *suffix, - void *addr, grub_size_t size); -void * -grub_xnu_heap_malloc (int size) + grub_addr_t addr, grub_size_t size); +grub_err_t +grub_xnu_heap_malloc (int size, void **src, grub_addr_t *target) { - void *val; - int oldblknum, newblknum; + grub_err_t err; + + err = grub_relocator_alloc_chunk_addr (grub_xnu_relocator, src, + grub_xnu_heap_target_start + + grub_xnu_heap_size, size); + if (err) + return err; - /* The page after the heap is used for stack. Ensure it's usable. */ - if (grub_xnu_heap_size) - oldblknum = (grub_xnu_heap_size + GRUB_XNU_PAGESIZE - + GRUB_XNU_HEAP_ALLOC_BLOCK - 1) / GRUB_XNU_HEAP_ALLOC_BLOCK; - else - oldblknum = 0; - newblknum = (grub_xnu_heap_size + size + GRUB_XNU_PAGESIZE - + GRUB_XNU_HEAP_ALLOC_BLOCK - 1) / GRUB_XNU_HEAP_ALLOC_BLOCK; - if (oldblknum != newblknum) - { - /* FIXME: instruct realloc to allocate at 1MB if possible once - advanced mm is ready. */ - grub_xnu_heap_start - = XNU_RELOCATOR (realloc) (grub_xnu_heap_start, - newblknum - * GRUB_XNU_HEAP_ALLOC_BLOCK); - if (!grub_xnu_heap_start) - return NULL; - } - - val = (grub_uint8_t *) grub_xnu_heap_start + grub_xnu_heap_size; + *target = grub_xnu_heap_target_start + grub_xnu_heap_size; grub_xnu_heap_size += size; - grub_dprintf ("xnu", "val=%p\n", val); - return val; + grub_dprintf ("xnu", "val=%p\n", *src); + return GRUB_ERR_NONE; } /* Make sure next block of the heap will be aligned. @@ -86,11 +69,9 @@ grub_xnu_heap_malloc (int size) grub_err_t grub_xnu_align_heap (int align) { - int align_overhead = align - grub_xnu_heap_size % align; - if (align_overhead == align) - return GRUB_ERR_NONE; - if (! grub_xnu_heap_malloc (align_overhead)) - return grub_errno; + grub_xnu_heap_size + = ALIGN_UP (grub_xnu_heap_target_start+ grub_xnu_heap_size, align) + - grub_xnu_heap_target_start; return GRUB_ERR_NONE; } @@ -206,13 +187,14 @@ grub_xnu_writetree_toheap_real (void *curptr, } grub_err_t -grub_xnu_writetree_toheap (void **start, grub_size_t *size) +grub_xnu_writetree_toheap (grub_addr_t *target, grub_size_t *size) { struct grub_xnu_devtree_key *chosen; struct grub_xnu_devtree_key *memorymap; struct grub_xnu_devtree_key *driverkey; struct grub_xnu_extdesc *extdesc; grub_err_t err; + void *src; err = grub_xnu_align_heap (GRUB_XNU_PAGESIZE); if (err) @@ -243,16 +225,17 @@ grub_xnu_writetree_toheap (void **start, grub_size_t *size) /* Allocate the space based on the size with dummy value. */ *size = grub_xnu_writetree_get_size (grub_xnu_devtree_root, "/"); - *start = grub_xnu_heap_malloc (*size + GRUB_XNU_PAGESIZE - - *size % GRUB_XNU_PAGESIZE); + err = grub_xnu_heap_malloc (ALIGN_UP (*size + 1, GRUB_XNU_PAGESIZE), + &src, target); + if (err) + return err; /* Put real data in the dummy. */ - extdesc->addr = (grub_uint8_t *) *start - (grub_uint8_t *) grub_xnu_heap_start - + grub_xnu_heap_will_be_at; + extdesc->addr = *target; extdesc->size = (grub_uint32_t) *size; /* Write the tree to heap. */ - grub_xnu_writetree_toheap_real (*start, grub_xnu_devtree_root, "/"); + grub_xnu_writetree_toheap_real (src, grub_xnu_devtree_root, "/"); return GRUB_ERR_NONE; } @@ -337,8 +320,9 @@ grub_xnu_unload (void) /* Free loaded image. */ driversnum = 0; driverspackagenum = 0; - grub_free (grub_xnu_heap_start); - grub_xnu_heap_start = 0; + grub_relocator_unload (grub_xnu_relocator); + grub_xnu_relocator = NULL; + grub_xnu_heap_target_start = 0; grub_xnu_heap_size = 0; grub_xnu_unlock (); return GRUB_ERR_NONE; @@ -353,6 +337,7 @@ grub_cmd_xnu_kernel (grub_command_t cmd __attribute__ ((unused)), grub_uint32_t startcode, endcode; int i; char *ptr, *loadaddr; + grub_addr_t loadaddr_target; if (argc < 1) return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required"); @@ -380,15 +365,18 @@ grub_cmd_xnu_kernel (grub_command_t cmd __attribute__ ((unused)), grub_dprintf ("xnu", "endcode = %lx, startcode = %lx\n", (unsigned long) endcode, (unsigned long) startcode); - loadaddr = grub_xnu_heap_malloc (endcode - startcode); - grub_xnu_heap_will_be_at = startcode; + grub_xnu_relocator = grub_relocator_new (); + if (!grub_xnu_relocator) + return grub_errno; + grub_xnu_heap_target_start = startcode; + err = grub_xnu_heap_malloc (endcode - startcode, (void **) &loadaddr, + &loadaddr_target); - if (! loadaddr) + if (err) { grub_macho_close (macho); grub_xnu_unload (); - return grub_error (GRUB_ERR_OUT_OF_MEMORY, - "not enough memory to load kernel"); + return err; } /* Load kernel. */ @@ -451,6 +439,7 @@ grub_cmd_xnu_kernel64 (grub_command_t cmd __attribute__ ((unused)), grub_uint64_t startcode, endcode; int i; char *ptr, *loadaddr; + grub_addr_t loadaddr_target; if (argc < 1) return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required"); @@ -481,15 +470,18 @@ grub_cmd_xnu_kernel64 (grub_command_t cmd __attribute__ ((unused)), grub_dprintf ("xnu", "endcode = %lx, startcode = %lx\n", (unsigned long) endcode, (unsigned long) startcode); - loadaddr = grub_xnu_heap_malloc (endcode - startcode); - grub_xnu_heap_will_be_at = startcode; + grub_xnu_relocator = grub_relocator_new (); + if (!grub_xnu_relocator) + return grub_errno; + grub_xnu_heap_target_start = startcode; + err = grub_xnu_heap_malloc (endcode - startcode, (void **) &loadaddr, + &loadaddr_target); - if (! loadaddr) + if (err) { grub_macho_close (macho); grub_xnu_unload (); - return grub_error (GRUB_ERR_OUT_OF_MEMORY, - "not enough memory to load kernel"); + return err; } /* Load kernel. */ @@ -547,7 +539,7 @@ grub_cmd_xnu_kernel64 (grub_command_t cmd __attribute__ ((unused)), and increment SUFFIX. */ static grub_err_t grub_xnu_register_memory (char *prefix, int *suffix, - void *addr, grub_size_t size) + grub_addr_t addr, grub_size_t size) { struct grub_xnu_devtree_key *chosen; struct grub_xnu_devtree_key *memorymap; @@ -585,8 +577,7 @@ grub_xnu_register_memory (char *prefix, int *suffix, = (struct grub_xnu_extdesc *) grub_malloc (sizeof (*extdesc)); if (! driverkey->data) return grub_error (GRUB_ERR_OUT_OF_MEMORY, "can't register extension"); - extdesc->addr = grub_xnu_heap_will_be_at + - ((grub_uint8_t *) addr - (grub_uint8_t *) grub_xnu_heap_start); + extdesc->addr = addr; extdesc->size = (grub_uint32_t) size; return GRUB_ERR_NONE; } @@ -628,7 +619,8 @@ grub_xnu_load_driver (char *infoplistname, grub_file_t binaryfile) grub_file_t infoplist; struct grub_xnu_extheader *exthead; int neededspace = sizeof (*exthead); - grub_uint8_t *buf; + grub_uint8_t *buf, *buf0; + grub_addr_t buf_target; grub_size_t infoplistsize = 0, machosize = 0; char *name, *nameend; int namelen; @@ -683,7 +675,10 @@ grub_xnu_load_driver (char *infoplistname, grub_file_t binaryfile) err = grub_xnu_align_heap (GRUB_XNU_PAGESIZE); if (err) return err; - buf = grub_xnu_heap_malloc (neededspace); + err = grub_xnu_heap_malloc (neededspace, (void **) &buf0, &buf_target); + if (err) + return err; + buf = buf0; exthead = (struct grub_xnu_extheader *) buf; grub_memset (exthead, 0, sizeof (*exthead)); @@ -692,8 +687,7 @@ grub_xnu_load_driver (char *infoplistname, grub_file_t binaryfile) /* Load the binary. */ if (macho) { - exthead->binaryaddr = (buf - (grub_uint8_t *) grub_xnu_heap_start) - + grub_xnu_heap_will_be_at; + exthead->binaryaddr = buf_target + (buf - buf0); exthead->binarysize = machosize; if (grub_xnu_is_64bit) err = grub_macho_readfile64 (macho, buf); @@ -712,8 +706,7 @@ grub_xnu_load_driver (char *infoplistname, grub_file_t binaryfile) /* Load the plist. */ if (infoplist) { - exthead->infoplistaddr = (buf - (grub_uint8_t *) grub_xnu_heap_start) - + grub_xnu_heap_will_be_at; + exthead->infoplistaddr = buf_target + (buf - buf0); exthead->infoplistsize = infoplistsize + 1; if (grub_file_read (infoplist, buf, infoplistsize) != (grub_ssize_t) (infoplistsize)) @@ -729,15 +722,14 @@ grub_xnu_load_driver (char *infoplistname, grub_file_t binaryfile) } grub_errno = GRUB_ERR_NONE; - exthead->nameaddr = (buf - (grub_uint8_t *) grub_xnu_heap_start) - + grub_xnu_heap_will_be_at; + exthead->nameaddr = (buf - buf0) + buf_target; exthead->namesize = namelen + 1; grub_memcpy (buf, name, namelen); buf[namelen] = 0; buf += namelen + 1; /* Announce to kernel */ - return grub_xnu_register_memory ("Driver-", &driversnum, exthead, + return grub_xnu_register_memory ("Driver-", &driversnum, buf_target, neededspace); } @@ -748,6 +740,7 @@ grub_cmd_xnu_mkext (grub_command_t cmd __attribute__ ((unused)), { grub_file_t file; void *loadto; + grub_addr_t loadto_target; grub_err_t err; grub_off_t readoff = 0; grub_ssize_t readlen = -1; @@ -836,11 +829,11 @@ grub_cmd_xnu_mkext (grub_command_t cmd __attribute__ ((unused)), return err; } - loadto = grub_xnu_heap_malloc (readlen); - if (! loadto) + err = grub_xnu_heap_malloc (readlen, &loadto, &loadto_target); + if (err) { grub_file_close (file); - return grub_errno; + return err; } /* Read the file. */ @@ -855,7 +848,7 @@ grub_cmd_xnu_mkext (grub_command_t cmd __attribute__ ((unused)), /* Pass it to kernel. */ return grub_xnu_register_memory ("DriversPackage-", &driverspackagenum, - loadto, readlen); + loadto_target, readlen); } static grub_err_t @@ -864,6 +857,7 @@ grub_cmd_xnu_ramdisk (grub_command_t cmd __attribute__ ((unused)), { grub_file_t file; void *loadto; + grub_addr_t loadto_target; grub_err_t err; grub_size_t size; @@ -884,9 +878,9 @@ grub_cmd_xnu_ramdisk (grub_command_t cmd __attribute__ ((unused)), size = grub_file_size (file); - loadto = grub_xnu_heap_malloc (size); - if (! loadto) - return grub_errno; + err = grub_xnu_heap_malloc (size, &loadto, &loadto_target); + if (err) + return err; if (grub_file_read (file, loadto, size) != (grub_ssize_t) (size)) { @@ -894,7 +888,7 @@ grub_cmd_xnu_ramdisk (grub_command_t cmd __attribute__ ((unused)), grub_error_push (); return grub_error (GRUB_ERR_BAD_OS, "couldn't read file %s", args[0]); } - return grub_xnu_register_memory ("RAMDisk", 0, loadto, size); + return grub_xnu_register_memory ("RAMDisk", 0, loadto_target, size); } /* Returns true if the kext should be loaded according to plist diff --git a/loader/xnu_resume.c b/loader/xnu_resume.c index e6620e7b7..a7d5fbad8 100644 --- a/loader/xnu_resume.c +++ b/loader/xnu_resume.c @@ -45,10 +45,12 @@ grub_xnu_resume (char *imagename) grub_file_t file; grub_size_t total_header_size; struct grub_xnu_hibernate_header hibhead; - grub_uint8_t *buf; - + void *code; + void *image; grub_uint32_t codedest; grub_uint32_t codesize; + grub_addr_t target_image; + grub_err_t err; file = grub_file_open (imagename); if (! file) @@ -94,18 +96,35 @@ grub_xnu_resume (char *imagename) /* Try to allocate necessary space. FIXME: mm isn't good enough yet to handle huge allocations. */ - grub_xnu_hibernate_image = buf = XNU_RELOCATOR (alloc) (hibhead.image_size - + codesize - + GRUB_XNU_PAGESIZE); - if (! buf) + grub_xnu_relocator = grub_relocator_new (); + if (!grub_xnu_relocator) { grub_file_close (file); return grub_errno; } + err = grub_relocator_alloc_chunk_addr (grub_xnu_relocator, &code, + codedest, codesize + GRUB_XNU_PAGESIZE); + if (err) + { + grub_file_close (file); + return err; + } + + err = grub_relocator_alloc_chunk_align (grub_xnu_relocator, &image, + &target_image, 0, + (0xffffffff - hibhead.image_size) + 1, + hibhead.image_size, + GRUB_XNU_PAGESIZE); + if (err) + { + grub_file_close (file); + return err; + } + /* Read code part. */ if (grub_file_seek (file, total_header_size) == (grub_off_t) -1 - || grub_file_read (file, buf, codesize) + || grub_file_read (file, code, codesize) != (grub_ssize_t) codesize) { grub_file_close (file); @@ -114,8 +133,7 @@ grub_xnu_resume (char *imagename) /* Read image. */ if (grub_file_seek (file, 0) == (grub_off_t) -1 - || grub_file_read (file, buf + codesize + GRUB_XNU_PAGESIZE, - hibhead.image_size) + || grub_file_read (file, image, hibhead.image_size) != (grub_ssize_t) hibhead.image_size) { grub_file_close (file); @@ -124,12 +142,11 @@ grub_xnu_resume (char *imagename) grub_file_close (file); /* Setup variables needed by asm helper. */ - grub_xnu_heap_will_be_at = codedest; - grub_xnu_heap_start = buf; - grub_xnu_heap_size = codesize + GRUB_XNU_PAGESIZE + hibhead.image_size; + grub_xnu_heap_target_start = codedest; + grub_xnu_heap_size = target_image + hibhead.image_size - codedest; grub_xnu_stack = (codedest + hibhead.stack); grub_xnu_entry_point = (codedest + hibhead.entry_point); - grub_xnu_arg1 = codedest + codesize + GRUB_XNU_PAGESIZE; + grub_xnu_arg1 = target_image; grub_dprintf ("xnu", "entry point 0x%x\n", codedest + hibhead.entry_point); grub_dprintf ("xnu", "image at 0x%x\n", From 55b40bc68a08ab582d01251398ee65f2e377fc76 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 11 Jan 2010 14:59:01 +0100 Subject: [PATCH 009/271] Ported linux to relocator framework --- include/grub/i386/relocator.h | 1 + lib/i386/relocator.c | 2 + lib/i386/relocator32.S | 7 ++ lib/relocator.c | 26 ++++--- loader/i386/linux.c | 125 +++++++++++++++------------------- 5 files changed, 83 insertions(+), 78 deletions(-) diff --git a/include/grub/i386/relocator.h b/include/grub/i386/relocator.h index 2027a275c..e4c9e7ca7 100644 --- a/include/grub/i386/relocator.h +++ b/include/grub/i386/relocator.h @@ -31,6 +31,7 @@ struct grub_relocator32_state grub_uint32_t ecx; grub_uint32_t edx; grub_uint32_t eip; + grub_uint32_t esi; }; grub_err_t grub_relocator32_boot (struct grub_relocator *rel, diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 2396999bb..11e673cf7 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -47,6 +47,7 @@ extern grub_uint32_t grub_relocator32_ecx; extern grub_uint32_t grub_relocator32_edx; extern grub_uint32_t grub_relocator32_eip; extern grub_uint32_t grub_relocator32_esp; +extern grub_uint32_t grub_relocator32_esi; #define RELOCATOR_SIZEOF(x) (&grub_relocator##x##_end - &grub_relocator##x##_start) @@ -126,6 +127,7 @@ grub_relocator32_boot (struct grub_relocator *rel, grub_relocator32_edx = state.edx; grub_relocator32_eip = state.eip; grub_relocator32_esp = state.esp; + grub_relocator32_esi = state.esi; grub_memmove (src, &grub_relocator32_start, RELOCATOR_SIZEOF (32)); diff --git a/lib/i386/relocator32.S b/lib/i386/relocator32.S index f69e0bdc8..23bf65302 100644 --- a/lib/i386/relocator32.S +++ b/lib/i386/relocator32.S @@ -93,6 +93,13 @@ VARIABLE(grub_relocator32_esp) movl %eax, %esp + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator32_esi) + .long 0 + + movl %eax, %esi + /* mov imm32, %eax */ .byte 0xb8 VARIABLE(grub_relocator32_eax) diff --git a/lib/relocator.c b/lib/relocator.c index 4b638cd66..71517d94b 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -99,6 +99,7 @@ get_best_header (struct grub_relocator *rel, hb = h; hbp = hp; *best_addr = addr; + grub_dprintf ("relocator", "picked %p/%x\n", hb, addr); } } else @@ -141,6 +142,7 @@ get_best_header (struct grub_relocator *rel, hb = h; hbp = hp; *best_addr = addr; + grub_dprintf ("relocator", "picked %p/%x\n", hb, addr); } } } @@ -188,8 +190,12 @@ malloc_in_range (struct grub_relocator *rel, grub_mm_region_t r, rp; for (rp = NULL, r = grub_mm_base; r; rp = r, r = r->next) { - if ((grub_addr_t) r + r->size + sizeof (*r) > start - && (grub_addr_t) r <= end && r->size + sizeof (*r) >= size + grub_dprintf ("relocator", "region %p. %d %d %d\n", r, + (grub_addr_t) r + r->size + sizeof (*r) >= start, + (grub_addr_t) r < end && r->size + sizeof (*r) >= size, + (rb == NULL || (from_low_priv ? rb > r : rb < r))); + if ((grub_addr_t) r + r->size + sizeof (*r) >= start + && (grub_addr_t) r < end && r->size + sizeof (*r) >= size && (rb == NULL || (from_low_priv ? rb > r : rb < r))) { rb = r; @@ -221,7 +227,7 @@ malloc_in_range (struct grub_relocator *rel, } /* Special case: relocating region start. */ - if (best_addr < (grub_addr_t) hbp) + if (best_addr < (grub_addr_t) hb) { grub_addr_t newreg_start, newreg_raw_start = best_addr + size; grub_addr_t newreg_size, newreg_presize; @@ -320,7 +326,8 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, /* Keep chunks in memory in the same order as they'll be after relocation. */ for (chunk = rel->chunks; chunk; chunk = chunk->next) { - if (chunk->target > target && chunk->src > max_addr) + if (chunk->target > target && chunk->src < max_addr + && chunk->src < rel->postchunks) max_addr = chunk->src; if (chunk->target + chunk->size <= target && chunk->src + chunk->size > min_addr @@ -345,10 +352,10 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, /* A trick to improve Linux allocation. */ #if defined (__i386__) || defined (__x86_64__) if (target < 0x100000) - if (malloc_in_range (rel, rel->highestnonpostaddr, ~(grub_addr_t)0, 0, - size, &start, 1, 0)) + if (malloc_in_range (rel, rel->highestnonpostaddr, ~(grub_addr_t)0, 1, + size, &start, 0, 1)) { - if (rel->postchunks < start) + if (rel->postchunks > start) rel->postchunks = start; break; } @@ -356,7 +363,7 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, if (malloc_in_range (rel, target, max_addr, 1, size, &start, 1, 0)) break; - if (malloc_in_range (rel, min_addr, target, 0, size, &start, 1, 0)) + if (malloc_in_range (rel, min_addr, target, 1, size, &start, 0, 0)) break; grub_dprintf ("relocator", "not allocated\n"); @@ -436,7 +443,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, relocation. */ for (chunk = rel->chunks; chunk; chunk = chunk->next) { - if (chunk->target > max_addr && chunk->src > max_addr2) + if (chunk->target > max_addr && chunk->src > max_addr2 + && chunk->src < rel->postchunks) max_addr2 = chunk->src; if (chunk->target + chunk->size <= min_addr && chunk->src + chunk->size < min_addr2 diff --git a/loader/i386/linux.c b/loader/i386/linux.c index 43c455cd6..e8d06b0e7 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #define GRUB_LINUX_CL_OFFSET 0x1000 @@ -44,36 +45,18 @@ static grub_dl_t my_mod; static grub_size_t linux_mem_size; static int loaded; static void *real_mode_mem; +static grub_addr_t real_mode_target; static void *prot_mode_mem; +static grub_addr_t prot_mode_target; static void *initrd_mem; +static grub_addr_t initrd_mem_target; static grub_uint32_t real_mode_pages; static grub_uint32_t prot_mode_pages; static grub_uint32_t initrd_pages; +static struct grub_relocator *relocator = NULL; -static grub_uint8_t gdt[] __attribute__ ((aligned(16))) = - { - /* NULL. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* Reserved. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* Code segment. */ - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x9A, 0xCF, 0x00, - /* Data segment. */ - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x92, 0xCF, 0x00 - }; - -struct gdt_descriptor -{ - grub_uint16_t limit; - void *base; -} __attribute__ ((packed)); - -static struct gdt_descriptor gdt_desc = - { - sizeof (gdt) - 1, - gdt - }; - +/* FIXME */ +#if 0 struct idt_descriptor { grub_uint16_t limit; @@ -85,6 +68,7 @@ static struct idt_descriptor idt_desc = 0, 0 }; +#endif #ifdef GRUB_MACHINE_PCBIOS struct linux_vesafb_res @@ -290,15 +274,19 @@ find_mmap_size (void) static void free_pages (void) { + grub_relocator_unload (relocator); + relocator = NULL; real_mode_mem = prot_mode_mem = initrd_mem = 0; + real_mode_target = prot_mode_target = initrd_mem_target = 0; } /* Allocate pages for the real mode code and the protected mode code for linux as well as a memory map buffer. */ -static int +static grub_err_t allocate_pages (grub_size_t prot_size) { grub_size_t real_size, mmap_size; + grub_err_t err; /* Make sure that each size is aligned to a page boundary. */ real_size = GRUB_LINUX_CL_END_OFFSET; @@ -316,6 +304,13 @@ allocate_pages (grub_size_t prot_size) /* Initialize the memory pointers with NULL for convenience. */ free_pages (); + relocator = grub_relocator_new (); + if (!relocator) + { + err = grub_errno; + goto fail; + } + /* FIXME: Should request low memory from the heap when this feature is implemented. */ @@ -339,32 +334,42 @@ allocate_pages (grub_size_t prot_size) if (real_size + mmap_size > size) return 0; - real_mode_mem = - (void *) (grub_size_t) ((addr + size) - (real_size + mmap_size)); + real_mode_target = ((addr + size) - (real_size + mmap_size)); return 1; } return 0; } grub_mmap_iterate (hook); - if (! real_mode_mem) + if (! real_mode_target) { - grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate real mode pages"); + err = grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate real mode pages"); goto fail; } - prot_mode_mem = (void *) 0x100000; + err = grub_relocator_alloc_chunk_addr (relocator, &real_mode_mem, + real_mode_target, + (real_size + mmap_size)); + if (err) + goto fail; + + prot_mode_target = 0x100000; + + err = grub_relocator_alloc_chunk_addr (relocator, &prot_mode_mem, + prot_mode_target, prot_size); + if (err) + goto fail; grub_dprintf ("linux", "real_mode_mem = %lx, real_mode_pages = %x, " "prot_mode_mem = %lx, prot_mode_pages = %x\n", (unsigned long) real_mode_mem, (unsigned) real_mode_pages, (unsigned long) prot_mode_mem, (unsigned) prot_mode_pages); - return 1; + return GRUB_ERR_NONE; fail: free_pages (); - return 0; + return err; } static void @@ -460,16 +465,12 @@ grub_linux_boot (void) int e820_num; grub_err_t err = 0; char *modevar, *tmp; + struct grub_relocator32_state state; params = real_mode_mem; - grub_dprintf ("linux", "code32_start = %x, idt_desc = %lx, gdt_desc = %lx\n", - (unsigned) params->code32_start, - (unsigned long) &(idt_desc.limit), - (unsigned long) &(gdt_desc.limit)); - grub_dprintf ("linux", "idt = %x:%lx, gdt = %x:%lx\n", - (unsigned) idt_desc.limit, (unsigned long) idt_desc.base, - (unsigned) gdt_desc.limit, (unsigned long) gdt_desc.base); + grub_dprintf ("linux", "code32_start = %x\n", + (unsigned) params->code32_start); auto int NESTED_FUNC_ATTR hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t size, grub_uint32_t type) @@ -568,31 +569,12 @@ grub_linux_boot (void) } } -#ifdef __x86_64__ - - grub_memcpy ((char *) prot_mode_mem + (prot_mode_pages << 12), - grub_linux_trampoline_start, - grub_linux_trampoline_end - grub_linux_trampoline_start); - - ((void (*) (unsigned long, void *)) ((char *) prot_mode_mem - + (prot_mode_pages << 12))) - (params->code32_start, real_mode_mem); -#else - - /* Hardware interrupts are not safe any longer. */ - asm volatile ("cli" : : ); - - /* Load the IDT and the GDT for the bootstrap. */ - asm volatile ("lidt %0" : : "m" (idt_desc)); - asm volatile ("lgdt %0" : : "m" (gdt_desc)); - - /* Enter Linux. */ - asm volatile ("jmp *%2" : : "b" (0), "S" (real_mode_mem), "g" (params->code32_start)); - -#endif - - /* Never reach here. */ - return GRUB_ERR_NONE; + /* FIXME. */ + /* asm volatile ("lidt %0" : : "m" (idt_desc)); */ + state.ebx = 0; + state.esi = real_mode_target; + state.eip = params->code32_start; + return grub_relocator32_boot (relocator, state); } static grub_err_t @@ -678,7 +660,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), real_size = setup_sects << GRUB_DISK_SECTOR_BITS; prot_size = grub_file_size (file) - real_size - GRUB_DISK_SECTOR_SIZE; - if (! allocate_pages (prot_size)) + if (allocate_pages (prot_size)) goto fail; params = (struct linux_kernel_params *) real_mode_mem; @@ -701,7 +683,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), params->cl_magic = GRUB_LINUX_CL_MAGIC; params->cl_offset = 0x1000; - params->cmd_line_ptr = (unsigned long) real_mode_mem + 0x1000; + params->cmd_line_ptr = real_mode_target + 0x1000; params->ramdisk_image = 0; params->ramdisk_size = 0; @@ -910,6 +892,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), grub_ssize_t size; grub_addr_t addr_min, addr_max; grub_addr_t addr; + grub_err_t err; struct linux_kernel_header *lh; if (argc == 0) @@ -957,7 +940,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), addr_max -= 0x10000; /* Usually, the compression ratio is about 50%. */ - addr_min = (grub_addr_t) prot_mode_mem + ((prot_mode_pages * 3) << 12) + addr_min = (grub_addr_t) prot_mode_target + ((prot_mode_pages * 3) << 12) + page_align (size); if (addr_max > grub_os_area_addr + grub_os_area_size) @@ -972,7 +955,11 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), goto fail; } - initrd_mem = (void *) addr; + err = grub_relocator_alloc_chunk_align (relocator, &initrd_mem, + &initrd_mem_target, + addr_min, addr, size, 0x1000); + if (err) + return err; if (grub_file_read (file, initrd_mem, size) != size) { @@ -983,7 +970,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), grub_dprintf ("linux", "Initrd, addr=0x%x, size=0x%x\n", (unsigned) addr, (unsigned) size); - lh->ramdisk_image = addr; + lh->ramdisk_image = initrd_mem_target; lh->ramdisk_size = size; lh->root_dev = 0x0100; /* XXX */ From d45dca5ab33950e15369158466088d24921bae66 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 11 Jan 2010 22:54:20 +0100 Subject: [PATCH 010/271] Fix few bugs in relocators --- lib/relocator.c | 96 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 33 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 71517d94b..5d30b8ffe 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -313,6 +313,29 @@ malloc_in_range (struct grub_relocator *rel, } } +static void +adjust_limits (struct grub_relocator *rel, + grub_addr_t *min_addr, grub_addr_t *max_addr, + grub_addr_t in_min, grub_addr_t in_max) +{ + struct grub_relocator_chunk *chunk; + + *min_addr = 0; + *max_addr = rel->postchunks; + + /* Keep chunks in memory in the same order as they'll be after relocation. */ + for (chunk = rel->chunks; chunk; chunk = chunk->next) + { + if (chunk->target > in_max && chunk->src < *max_addr + && chunk->src < rel->postchunks) + *max_addr = chunk->src; + if (chunk->target + chunk->size <= in_min + && chunk->src + chunk->size > *min_addr + && chunk->src < rel->postchunks) + *min_addr = chunk->src + chunk->size; + } +} + grub_err_t grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, grub_addr_t target, grub_size_t size) @@ -321,24 +344,13 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, grub_addr_t start; grub_addr_t min_addr = 0, max_addr; - max_addr = rel->postchunks; + adjust_limits (rel, &min_addr, &max_addr, target, target); - /* Keep chunks in memory in the same order as they'll be after relocation. */ for (chunk = rel->chunks; chunk; chunk = chunk->next) - { - if (chunk->target > target && chunk->src < max_addr - && chunk->src < rel->postchunks) - max_addr = chunk->src; - if (chunk->target + chunk->size <= target - && chunk->src + chunk->size > min_addr - && chunk->src < rel->postchunks) - min_addr = chunk->src + chunk->size; - if ((chunk->target <= target && target < chunk->target + chunk->size) - || (target <= chunk->target && chunk->target < target + size)) - { - return grub_error (GRUB_ERR_BAD_ARGUMENT, "overlap detected"); - } - } + if ((chunk->target <= target && target < chunk->target + chunk->size) + || (target <= chunk->target && chunk->target < target + size)) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "overlap detected"); + chunk = grub_malloc (sizeof (struct grub_relocator_chunk)); if (!chunk) @@ -366,6 +378,14 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, if (malloc_in_range (rel, min_addr, target, 1, size, &start, 0, 0)) break; + if (malloc_in_range (rel, rel->highestnonpostaddr, ~(grub_addr_t)0, 1, + size, &start, 0, 1)) + { + if (rel->postchunks > start) + rel->postchunks = start; + break; + } + grub_dprintf ("relocator", "not allocated\n"); grub_free (chunk); return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); @@ -404,6 +424,9 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, chunk->size = size; chunk->next = rel->chunks; rel->chunks = chunk; + grub_dprintf ("relocator", "cur = %p, next = %p\n", rel->chunks, + rel->chunks->next); + *src = (void *) start; return GRUB_ERR_NONE; } @@ -418,6 +441,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, struct grub_relocator_chunk *chunk; grub_addr_t start; + grub_dprintf ("relocator", "chunks = %p\n", rel->chunks); + chunk = grub_malloc (sizeof (struct grub_relocator_chunk)); if (!chunk) return grub_errno; @@ -427,6 +452,7 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, { grub_dprintf ("relocator", "allocated 0x%llx/0x%llx\n", (unsigned long long) start, (unsigned long long) start); + grub_dprintf ("relocator", "chunks = %p\n", rel->chunks); chunk->src = start; chunk->target = start; chunk->size = size; @@ -437,27 +463,27 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, return GRUB_ERR_NONE; } - max_addr2 = rel->postchunks; - - /* Keep chunks in memory in the same order as they'll be after - relocation. */ - for (chunk = rel->chunks; chunk; chunk = chunk->next) - { - if (chunk->target > max_addr && chunk->src > max_addr2 - && chunk->src < rel->postchunks) - max_addr2 = chunk->src; - if (chunk->target + chunk->size <= min_addr - && chunk->src + chunk->size < min_addr2 - && chunk->src < rel->postchunks) - min_addr2 = chunk->src + chunk->size; - } + adjust_limits (rel, &min_addr2, &max_addr2, min_addr, max_addr); + grub_dprintf ("relocator", "Adjusted limits from %x-%x to %x-%x\n", + min_addr, max_addr, min_addr2, max_addr2); - if (!malloc_in_range (rel, min_addr2, max_addr2, align, - size, &start, 1, 1)) + do { - grub_free (chunk); + if (malloc_in_range (rel, min_addr2, max_addr2, align, + size, &start, 1, 1)) + break; + + if (malloc_in_range (rel, rel->highestnonpostaddr, ~(grub_addr_t)0, 1, + size, &start, 0, 1)) + { + if (rel->postchunks > start) + rel->postchunks = start; + break; + } + return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); } + while (0); /* FIXME: check memory map. */ chunk->target = ALIGN_UP (min_addr, align); @@ -490,6 +516,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, chunk->size = size; chunk->next = rel->chunks; rel->chunks = chunk; + grub_dprintf ("relocator", "cur = %p, next = %p\n", rel->chunks, + rel->chunks->next); *src = (void *) start; *target = chunk->target; return GRUB_ERR_NONE; @@ -530,6 +558,8 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, for (chunk = rel->chunks; chunk; chunk = chunk->next) { + grub_dprintf ("relocator", "chunk %p->%p\n", + (void *) chunk->src, (void *) chunk->target); if (chunk->src < chunk->target) { grub_cpu_relocator_backward ((void *) rels, From 108408aa397171ba226e2a23166a71bdeb25510d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 11 Jan 2010 22:54:40 +0100 Subject: [PATCH 011/271] BSD on relocators --- include/grub/aout.h | 4 +- include/grub/elfload.h | 8 + include/grub/i386/bsd.h | 9 +- kern/elf.c | 4 +- loader/aout.c | 12 +- loader/i386/bsd.c | 342 ++++++++++++++++++++++++++++++---------- loader/i386/bsdXX.c | 73 ++++++--- 7 files changed, 338 insertions(+), 114 deletions(-) diff --git a/include/grub/aout.h b/include/grub/aout.h index c5650ddf8..08aebba18 100644 --- a/include/grub/aout.h +++ b/include/grub/aout.h @@ -85,7 +85,7 @@ union grub_aout_header int EXPORT_FUNC(grub_aout_get_type) (union grub_aout_header *header); grub_err_t EXPORT_FUNC(grub_aout_load) (grub_file_t file, int offset, - grub_addr_t load_addr, int load_size, - grub_addr_t bss_end_addr); + void *load_addr, int load_size, + grub_size_t bss_size); #endif /* ! GRUB_AOUT_HEADER */ diff --git a/include/grub/elfload.h b/include/grub/elfload.h index 6e09e0d05..1e640c198 100644 --- a/include/grub/elfload.h +++ b/include/grub/elfload.h @@ -54,5 +54,13 @@ int grub_elf_is_elf64 (grub_elf_t); grub_size_t grub_elf64_size (grub_elf_t); grub_err_t grub_elf64_load (grub_elf_t, grub_elf64_load_hook_t, grub_addr_t *, grub_size_t *); +grub_err_t +grub_elf32_phdr_iterate (grub_elf_t elf, + int NESTED_FUNC_ATTR (*hook) (grub_elf_t, Elf32_Phdr *, void *), + void *hook_arg); +grub_err_t +grub_elf64_phdr_iterate (grub_elf_t elf, + int NESTED_FUNC_ATTR (*hook) (grub_elf_t, Elf64_Phdr *, void *), + void *hook_arg); #endif /* ! GRUB_ELFLOAD_HEADER */ diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index 8ffaf7d18..b37a86c7f 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -20,6 +20,7 @@ #define GRUB_BSD_CPU_HEADER 1 #include +#include enum bsd_kernel_types { @@ -197,7 +198,7 @@ struct grub_openbsd_bootargs struct grub_netbsd_bootinfo { grub_uint32_t bi_count; - void *bi_data[1]; + grub_addr_t bi_data[1]; }; #define NETBSD_BTINFO_BOOTPATH 0 @@ -255,9 +256,11 @@ struct grub_netbsd_btinfo_bootdisk void grub_unix_real_boot (grub_addr_t entry, ...) __attribute__ ((cdecl,noreturn)); -grub_err_t grub_freebsd_load_elfmodule32 (grub_file_t file, int argc, +grub_err_t grub_freebsd_load_elfmodule32 (struct grub_relocator *relocator, + grub_file_t file, int argc, char *argv[], grub_addr_t *kern_end); -grub_err_t grub_freebsd_load_elfmodule_obj64 (grub_file_t file, int argc, +grub_err_t grub_freebsd_load_elfmodule_obj64 (struct grub_relocator *relocator, + grub_file_t file, int argc, char *argv[], grub_addr_t *kern_end); grub_err_t grub_freebsd_load_elf_meta32 (grub_file_t file, diff --git a/kern/elf.c b/kern/elf.c index 7625f6acd..c70071d6e 100644 --- a/kern/elf.c +++ b/kern/elf.c @@ -140,7 +140,7 @@ grub_elf32_load_phdrs (grub_elf_t elf) return GRUB_ERR_NONE; } -static grub_err_t +grub_err_t grub_elf32_phdr_iterate (grub_elf_t elf, int NESTED_FUNC_ATTR (*hook) (grub_elf_t, Elf32_Phdr *, void *), void *hook_arg) @@ -321,7 +321,7 @@ grub_elf64_load_phdrs (grub_elf_t elf) return GRUB_ERR_NONE; } -static grub_err_t +grub_err_t grub_elf64_phdr_iterate (grub_elf_t elf, int NESTED_FUNC_ATTR (*hook) (grub_elf_t, Elf64_Phdr *, void *), void *hook_arg) diff --git a/loader/aout.c b/loader/aout.c index 0254b6ae0..611960f92 100644 --- a/loader/aout.c +++ b/loader/aout.c @@ -39,9 +39,8 @@ grub_aout_get_type (union grub_aout_header *header) grub_err_t grub_aout_load (grub_file_t file, int offset, - grub_addr_t load_addr, - int load_size, - grub_addr_t bss_end_addr) + void *load_addr, + int load_size, grub_size_t bss_size) { if ((grub_file_seek (file, offset)) == (grub_off_t) - 1) return grub_errno; @@ -49,14 +48,13 @@ grub_aout_load (grub_file_t file, int offset, if (!load_size) load_size = file->size - offset; - grub_file_read (file, (void *) load_addr, load_size); + grub_file_read (file, load_addr, load_size); if (grub_errno) return grub_errno; - if (bss_end_addr) - grub_memset ((char *) load_addr + load_size, 0, - bss_end_addr - load_addr - load_size); + if (bss_size) + grub_memset ((char *) load_addr + load_size, 0, bss_size); return GRUB_ERR_NONE; } diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 0785a3fc1..9ee8a4b12 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -42,6 +42,8 @@ #include #include #include +#include +#include #define ALIGN_DWORD(a) ALIGN_UP (a, 4) #define ALIGN_QWORD(a) ALIGN_UP (a, 8) @@ -53,12 +55,14 @@ static int kernel_type = KERNEL_TYPE_NONE; static grub_dl_t my_mod; static grub_addr_t entry, entry_hi, kern_start, kern_end; +static void *kern_chunk_src; static grub_uint32_t bootflags; static char *mod_buf; static grub_uint32_t mod_buf_len, mod_buf_max, kern_end_mdofs; static int is_elf_kernel, is_64bit; static char *netbsd_root = NULL; static grub_uint32_t openbsd_root; +struct grub_relocator *relocator = NULL; static const struct grub_arg_option freebsd_opts[] = { @@ -442,24 +446,41 @@ static grub_err_t grub_freebsd_boot (void) { struct grub_freebsd_bootinfo bi; - char *p; + grub_uint8_t *p, *p0; + grub_addr_t p_target; + grub_size_t p_size = 0; grub_uint32_t bootdev, biosdev, unit, slice, part; + grub_err_t err; auto int iterate_env (struct grub_env_var *var); int iterate_env (struct grub_env_var *var) { if ((!grub_memcmp (var->name, "kFreeBSD.", sizeof("kFreeBSD.") - 1)) && (var->name[sizeof("kFreeBSD.") - 1])) { - grub_strcpy (p, &var->name[sizeof("kFreeBSD.") - 1]); - p += grub_strlen (p); + grub_strcpy ((char *) p, &var->name[sizeof("kFreeBSD.") - 1]); + p += grub_strlen ((char *) p); *(p++) = '='; - grub_strcpy (p, var->value); - p += grub_strlen (p) + 1; + grub_strcpy ((char *) p, var->value); + p += grub_strlen ((char *) p) + 1; } return 0; } + auto int iterate_env_count (struct grub_env_var *var); + int iterate_env_count (struct grub_env_var *var) + { + if ((!grub_memcmp (var->name, "kFreeBSD.", sizeof("kFreeBSD.") - 1)) && (var->name[sizeof("kFreeBSD.") - 1])) + { + p_size += grub_strlen (&var->name[sizeof("kFreeBSD.") - 1]); + p_size++; + p_size += grub_strlen (var->value) + 1; + } + + return 0; + } + + grub_memset (&bi, 0, sizeof (bi)); bi.bi_version = FREEBSD_BOOTINFO_VERSION; bi.bi_size = sizeof (bi); @@ -470,35 +491,50 @@ grub_freebsd_boot (void) bi.bi_bios_dev = biosdev; - p = (char *) kern_end; + p_size = 0; + grub_env_iterate (iterate_env_count); + if (p_size) + p_size = ALIGN_PAGE (kern_end + p_size + 1) - kern_end; + if (is_elf_kernel) + p_size = ALIGN_PAGE (kern_end + p_size + mod_buf_len) - kern_end; + + if (is_64bit) + p_size += 4096 * 4; + + err = grub_relocator_alloc_chunk_addr (relocator, (void **) &p, + kern_end, p_size); + if (err) + return err; + kern_end += p_size; + p0 = p; + p_target = kern_end; grub_env_iterate (iterate_env); - if (p != (char *) kern_end) + if (p != p0) { *(p++) = 0; - bi.bi_envp = kern_end; - kern_end = ALIGN_PAGE ((grub_uint32_t) p); + bi.bi_envp = p_target; } if (is_elf_kernel) { - grub_addr_t md_ofs; + grub_uint8_t *md_ofs; int ofs; if (grub_freebsd_add_meta (FREEBSD_MODINFO_END, 0, 0)) return grub_errno; - grub_memcpy ((char *) kern_end, mod_buf, mod_buf_len); - bi.bi_modulep = kern_end; + grub_memcpy (p, mod_buf, mod_buf_len); + bi.bi_modulep = (p - p0) + p_target; + md_ofs = p + kern_end_mdofs; - kern_end = ALIGN_PAGE (kern_end + mod_buf_len); + p = (ALIGN_PAGE ((p - p0) + p_target) - p_target) + p0; if (is_64bit) - kern_end += 4096 * 4; + p += 4096 * 4; - md_ofs = bi.bi_modulep + kern_end_mdofs; ofs = (is_64bit) ? 16 : 12; *((grub_uint32_t *) md_ofs) = kern_end; md_ofs -= ofs; @@ -519,11 +555,11 @@ grub_freebsd_boot (void) struct gdt_descriptor *gdtdesc; - pagetable = (grub_uint8_t *) (kern_end - 16384); + pagetable = p - 16384; fill_bsd64_pagetable (pagetable); /* Create GDT. */ - gdt = (grub_uint32_t *) (kern_end - 4096); + gdt = (grub_uint32_t *) (p - 4096); gdt[0] = 0; gdt[1] = 0; gdt[2] = 0; @@ -532,12 +568,12 @@ grub_freebsd_boot (void) gdt[5] = 0x00008000; /* Create GDT descriptor. */ - gdtdesc = (struct gdt_descriptor *) (kern_end - 4096 + 24); + gdtdesc = (struct gdt_descriptor *) (p - 4096 + 24); gdtdesc->limit = 24; gdtdesc->base = gdt; /* Prepare trampoline. */ - trampoline = (grub_uint8_t *) (kern_end - 4096 + 24 + trampoline = (grub_uint8_t *) (p - 4096 + 24 + sizeof (struct gdt_descriptor)); launch_trampoline = (void __attribute__ ((cdecl, regparm (0))) (*) (grub_addr_t entry_lo, ...)) trampoline; @@ -556,8 +592,31 @@ grub_freebsd_boot (void) kern_end); } else - grub_unix_real_boot (entry, bootflags | FREEBSD_RB_BOOTINFO, bootdev, - 0, 0, 0, &bi, bi.bi_modulep, kern_end); + { + struct grub_relocator32_state state; + grub_uint32_t *stack; + grub_addr_t stack_target; + err = grub_relocator_alloc_chunk_align (relocator, (void **) &stack, + &stack_target, + 0x10000, 0x90000, + 9 * sizeof (grub_uint32_t) + + sizeof (bi), 4); + if (err) + return err; + grub_memcpy (&stack[8], &bi, sizeof (bi)); + state.eip = entry; + state.esp = stack_target; + stack[0] = entry; /* "Return" address. */ + stack[1] = bootflags | FREEBSD_RB_BOOTINFO; + stack[2] = bootdev; + stack[3] = 0; + stack[4] = 0; + stack[5] = 0; + stack[6] = stack_target + 9 * sizeof (grub_uint32_t); + stack[7] = bi.bi_modulep; + stack[8] = kern_end; + return grub_relocator32_boot (relocator, state); + } /* Not reached. */ return GRUB_ERR_NONE; @@ -566,9 +625,23 @@ grub_freebsd_boot (void) static grub_err_t grub_openbsd_boot (void) { - char *buf = (char *) GRUB_BSD_TEMP_BUFFER; + grub_uint8_t *buf, *buf0; + grub_uint32_t *stack; + grub_addr_t buf_target, argbuf_target_start, argbuf_target_end; + grub_size_t buf_size; struct grub_openbsd_bios_mmap *pm; struct grub_openbsd_bootargs *pa; + struct grub_relocator32_state state; + grub_err_t err; + + auto int NESTED_FUNC_ATTR count_hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); + int NESTED_FUNC_ATTR count_hook (grub_uint64_t addr __attribute__ ((unused)), + grub_uint64_t size __attribute__ ((unused)), + grub_uint32_t type __attribute__ ((unused))) + { + buf_size += sizeof (struct grub_openbsd_bios_mmap); + return 1; + } auto int NESTED_FUNC_ATTR hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t size, grub_uint32_t type) @@ -599,6 +672,21 @@ grub_openbsd_boot (void) return 0; } + buf_target = GRUB_BSD_TEMP_BUFFER; + buf_size = sizeof (struct grub_openbsd_bootargs) + 9 * sizeof (grub_uint32_t); + grub_mmap_iterate (count_hook); + buf_size += sizeof (struct grub_openbsd_bootargs); + + err = grub_relocator_alloc_chunk_addr (relocator, (void **) &buf, + buf_target, buf_size); + if (err) + return err; + buf0 = buf; + stack = (grub_uint32_t *) buf; + buf = (grub_uint8_t *) (stack + 9); + + argbuf_target_start = buf - buf0 + buf_target; + pa = (struct grub_openbsd_bootargs *) buf; pa->ba_type = OPENBSD_BOOTARG_MMAP; @@ -610,20 +698,29 @@ grub_openbsd_boot (void) pm->len = 0; pm->type = 0; pm++; + buf = (grub_uint8_t *) pm; pa->ba_size = (char *) pm - (char *) pa; - pa->ba_next = (struct grub_openbsd_bootargs *) pm; + pa->ba_next = (struct grub_openbsd_bootargs *) (buf - buf0 + buf_target); pa = pa->ba_next; pa->ba_type = OPENBSD_BOOTARG_END; pa++; + buf = (grub_uint8_t *) pa; + argbuf_target_end = buf - buf0 + buf_target; - grub_unix_real_boot (entry, bootflags, openbsd_root, OPENBSD_BOOTARG_APIVER, - 0, (grub_uint32_t) (grub_mmap_get_upper () >> 10), - (grub_uint32_t) (grub_mmap_get_lower () >> 10), - (char *) pa - buf, buf); + state.eip = entry; + state.esp = ((grub_uint8_t *) stack - buf0) + buf_target; + stack[0] = entry; + stack[1] = bootflags; + stack[2] = openbsd_root; + stack[3] = OPENBSD_BOOTARG_APIVER; + stack[4] = 0; + stack[5] = grub_mmap_get_upper () >> 10; + stack[6] = grub_mmap_get_lower () >> 10; + stack[7] = argbuf_target_end - argbuf_target_start; + stack[8] = argbuf_target_start; - /* Not reached. */ - return GRUB_ERR_NONE; + return grub_relocator32_boot (relocator, state); } static grub_err_t @@ -633,7 +730,11 @@ grub_netbsd_boot (void) int count = 0; struct grub_netbsd_btinfo_mmap_header *mmap; struct grub_netbsd_btinfo_mmap_entry *pm; - void *curarg; + void *curarg, *arg0; + grub_addr_t arg_target, stack_target; + grub_uint32_t *stack; + grub_err_t err; + struct grub_relocator32_state state; auto int NESTED_FUNC_ATTR count_hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); int NESTED_FUNC_ATTR count_hook (grub_uint64_t addr __attribute__ ((unused)), @@ -675,14 +776,18 @@ grub_netbsd_boot (void) grub_mmap_iterate (count_hook); - if (kern_end + sizeof (struct grub_netbsd_btinfo_rootdevice) - + sizeof (struct grub_netbsd_bootinfo) - + sizeof (struct grub_netbsd_btinfo_mmap_header) - + count * sizeof (struct grub_netbsd_btinfo_mmap_entry) - > grub_os_area_addr + grub_os_area_size) - return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); + arg_target = kern_end; + err = grub_relocator_alloc_chunk_addr + (relocator, &curarg, arg_target, + sizeof (struct grub_netbsd_btinfo_rootdevice) + + sizeof (struct grub_netbsd_bootinfo) + + sizeof (struct grub_netbsd_btinfo_mmap_header) + + count * sizeof (struct grub_netbsd_btinfo_mmap_entry)); + if (err) + return err; - curarg = mmap = (struct grub_netbsd_btinfo_mmap_header *) kern_end; + arg0 = curarg; + mmap = curarg; pm = (struct grub_netbsd_btinfo_mmap_entry *) (mmap + 1); grub_mmap_iterate (fill_hook); @@ -703,22 +808,36 @@ grub_netbsd_boot (void) bootinfo = (struct grub_netbsd_bootinfo *) (rootdev + 1); bootinfo->bi_count = 2; - bootinfo->bi_data[0] = mmap; - bootinfo->bi_data[1] = rootdev; + bootinfo->bi_data[0] = ((grub_uint8_t *) mmap - (grub_uint8_t *) arg0) + + arg_target; + bootinfo->bi_data[1] = ((grub_uint8_t *) rootdev - (grub_uint8_t *) arg0) + + arg_target; } else { bootinfo = (struct grub_netbsd_bootinfo *) curarg; bootinfo->bi_count = 1; - bootinfo->bi_data[0] = mmap; + bootinfo->bi_data[0] = ((grub_uint8_t *) mmap - (grub_uint8_t *) arg0) + + arg_target; } - grub_unix_real_boot (entry, bootflags, 0, bootinfo, - 0, (grub_uint32_t) (grub_mmap_get_upper () >> 10), - (grub_uint32_t) (grub_mmap_get_lower () >> 10)); + err = grub_relocator_alloc_chunk_align (relocator, (void **) &stack, + &stack_target, 0x10000, 0x90000, + 7 * sizeof (grub_uint32_t), 4); + if (err) + return err; - /* Not reached. */ - return GRUB_ERR_NONE; + state.eip = entry; + state.esp = stack_target; + stack[0] = entry; + stack[1] = bootflags; + stack[2] = 0; + stack[3] = ((grub_uint8_t *) bootinfo - (grub_uint8_t *) arg0) + arg_target; + stack[4] = 0; + stack[5] = grub_mmap_get_upper () >> 10; + stack[6] = grub_mmap_get_lower () >> 10; + + return grub_relocator32_boot (relocator, state); } static grub_err_t @@ -737,15 +856,20 @@ grub_bsd_unload (void) grub_free (netbsd_root); netbsd_root = NULL; + grub_relocator_unload (relocator); + relocator = NULL; + return GRUB_ERR_NONE; } static grub_err_t grub_bsd_load_aout (grub_file_t file) { - grub_addr_t load_addr, bss_end_addr; + grub_addr_t load_addr, load_end; int ofs, align_page; union grub_aout_header ah; + grub_err_t err; + grub_size_t bss_size; if ((grub_file_seek (file, 0)) == (grub_off_t) - 1) return grub_errno; @@ -775,7 +899,7 @@ grub_bsd_load_aout (grub_file_t file) return grub_error (GRUB_ERR_BAD_OS, "load address below 1M"); kern_start = load_addr; - kern_end = load_addr + ah.aout32.a_text + ah.aout32.a_data; + load_end = kern_end = load_addr + ah.aout32.a_text + ah.aout32.a_data; if (align_page) kern_end = ALIGN_PAGE (kern_end); @@ -785,13 +909,44 @@ grub_bsd_load_aout (grub_file_t file) if (align_page) kern_end = ALIGN_PAGE (kern_end); - bss_end_addr = kern_end; + bss_size = kern_end - load_end; } else - bss_end_addr = 0; + bss_size = 0; - return grub_aout_load (file, ofs, load_addr, - ah.aout32.a_text + ah.aout32.a_data, bss_end_addr); + relocator = grub_relocator_new (); + if (!relocator) + return grub_errno; + + err = grub_relocator_alloc_chunk_addr (relocator, &kern_chunk_src, + kern_start, kern_end - kern_start); + if (err) + return err; + + return grub_aout_load (file, ofs, kern_chunk_src, + ah.aout32.a_text + ah.aout32.a_data, + bss_size); +} + +static int NESTED_FUNC_ATTR +grub_bsd_elf32_size_hook (grub_elf_t elf __attribute__ ((unused)), + Elf32_Phdr *phdr, void *arg __attribute__ ((unused))) +{ + Elf32_Addr paddr; + + if (phdr->p_type != PT_LOAD + && phdr->p_type != PT_DYNAMIC) + return 1; + + paddr = phdr->p_paddr & 0xFFFFFF; + + if (paddr < kern_start) + kern_start = paddr; + + if (paddr + phdr->p_memsz > kern_end) + kern_end = paddr + phdr->p_memsz; + + return 1; } static grub_err_t @@ -810,20 +965,30 @@ grub_bsd_elf32_hook (Elf32_Phdr * phdr, grub_addr_t * addr, int *do_load) phdr->p_paddr &= 0xFFFFFF; paddr = phdr->p_paddr; - if ((paddr < grub_os_area_addr) - || (paddr + phdr->p_memsz > grub_os_area_addr + grub_os_area_size)) - return grub_error (GRUB_ERR_OUT_OF_RANGE, "address 0x%x is out of range", - paddr); + *addr = (grub_addr_t) (paddr - kern_start + (grub_uint8_t *) kern_chunk_src); - if ((!kern_start) || (paddr < kern_start)) + return GRUB_ERR_NONE; +} + +static int NESTED_FUNC_ATTR +grub_bsd_elf64_size_hook (grub_elf_t elf __attribute__ ((unused)), + Elf64_Phdr *phdr, void *arg __attribute__ ((unused))) +{ + Elf64_Addr paddr; + + if (phdr->p_type != PT_LOAD + && phdr->p_type != PT_DYNAMIC) + return 1; + + paddr = phdr->p_paddr & 0xffffff; + + if (paddr < kern_start) kern_start = paddr; if (paddr + phdr->p_memsz > kern_end) kern_end = paddr + phdr->p_memsz; - *addr = paddr; - - return GRUB_ERR_NONE; + return 1; } static grub_err_t @@ -841,18 +1006,7 @@ grub_bsd_elf64_hook (Elf64_Phdr * phdr, grub_addr_t * addr, int *do_load) *do_load = 1; paddr = phdr->p_paddr & 0xffffff; - if ((paddr < grub_os_area_addr) - || (paddr + phdr->p_memsz > grub_os_area_addr + grub_os_area_size)) - return grub_error (GRUB_ERR_OUT_OF_RANGE, "address 0x%x is out of range", - paddr); - - if ((!kern_start) || (paddr < kern_start)) - kern_start = paddr; - - if (paddr + phdr->p_memsz > kern_end) - kern_end = paddr + phdr->p_memsz; - - *addr = paddr; + *addr = (grub_addr_t) (paddr - kern_start + (grub_uint8_t *) kern_chunk_src); return GRUB_ERR_NONE; } @@ -860,11 +1014,22 @@ grub_bsd_elf64_hook (Elf64_Phdr * phdr, grub_addr_t * addr, int *do_load) static grub_err_t grub_bsd_load_elf (grub_elf_t elf) { - kern_start = kern_end = 0; + grub_err_t err; + + kern_end = 0; + kern_start = ~0; if (grub_elf_is_elf32 (elf)) { entry = elf->ehdr.ehdr32.e_entry & 0xFFFFFF; + err = grub_elf32_phdr_iterate (elf, grub_bsd_elf32_size_hook, NULL); + if (err) + return err; + err = grub_relocator_alloc_chunk_addr (relocator, &kern_chunk_src, + kern_start, kern_end - kern_start); + if (err) + return err; + return grub_elf32_load (elf, grub_bsd_elf32_hook, 0, 0); } else if (grub_elf_is_elf64 (elf)) @@ -885,6 +1050,15 @@ grub_bsd_load_elf (grub_elf_t elf) entry = elf->ehdr.ehdr64.e_entry & 0x0fffffff; entry_hi = 0; } + + err = grub_elf64_phdr_iterate (elf, grub_bsd_elf64_size_hook, NULL); + if (err) + return err; + err = grub_relocator_alloc_chunk_addr (relocator, &kern_chunk_src, + kern_start, kern_end - kern_start); + if (err) + return err; + return grub_elf64_load (elf, grub_bsd_elf64_hook, 0, 0); } else @@ -911,6 +1085,8 @@ grub_bsd_load (int argc, char *argv[]) if (!file) goto fail; + relocator = grub_relocator_new (); + elf = grub_elf_file (file); if (elf) { @@ -1059,7 +1235,7 @@ grub_cmd_netbsd (grub_extcmd_t cmd, int argc, char *argv[]) if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE) { - grub_loader_set (grub_netbsd_boot, grub_bsd_unload, 1); + grub_loader_set (grub_netbsd_boot, grub_bsd_unload, 0); if (cmd->state[NETBSD_ROOT_ARG].set) netbsd_root = grub_strdup (cmd->state[NETBSD_ROOT_ARG].arg); } @@ -1164,10 +1340,11 @@ grub_cmd_freebsd_module (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]) { grub_file_t file = 0; - grub_err_t err; int modargc; char **modargv; char *type; + grub_err_t err; + void *src; if (kernel_type == KERNEL_TYPE_NONE) return grub_error (GRUB_ERR_BAD_ARGUMENT, @@ -1192,13 +1369,12 @@ grub_cmd_freebsd_module (grub_command_t cmd __attribute__ ((unused)), if ((!file) || (!file->size)) goto fail; - if (kern_end + file->size > grub_os_area_addr + grub_os_area_size) - { - grub_error (GRUB_ERR_OUT_OF_RANGE, "not enough memory for the module"); - goto fail; - } + err = grub_relocator_alloc_chunk_addr (relocator, &src, kern_end, + file->size); + if (err) + goto fail; - grub_file_read (file, (void *) kern_end, file->size); + grub_file_read (file, src, file->size); if (grub_errno) goto fail; @@ -1264,9 +1440,11 @@ grub_cmd_freebsd_module_elf (grub_command_t cmd __attribute__ ((unused)), } if (is_64bit) - err = grub_freebsd_load_elfmodule_obj64 (file, argc, argv, &kern_end); + err = grub_freebsd_load_elfmodule_obj64 (relocator, file, + argc, argv, &kern_end); else - err = grub_freebsd_load_elfmodule32 (file, argc, argv, &kern_end); + err = grub_freebsd_load_elfmodule32 (relocator, file, + argc, argv, &kern_end); grub_file_close (file); return err; diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index b4d574821..2622287f9 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -4,19 +4,16 @@ #include #include #include +#include #define ALIGN_PAGE(a) ALIGN_UP (a, 4096) static inline grub_err_t load (grub_file_t file, void *where, grub_off_t off, grub_size_t size) { - if (PTR_TO_UINT32 (where) + size > grub_os_area_addr + grub_os_area_size) - return grub_error (GRUB_ERR_OUT_OF_RANGE, - "not enough memory for the module"); if (grub_file_seek (file, off) == (grub_off_t) -1) return grub_errno; - if (grub_file_read (file, where, size) - != (grub_ssize_t) size) + if (grub_file_read (file, where, size) != (grub_ssize_t) size) { if (grub_errno) return grub_errno; @@ -75,7 +72,8 @@ read_headers (grub_file_t file, Elf_Ehdr *e, char **shdr) platforms. So I keep both versions. */ #if OBJSYM grub_err_t -SUFFIX (grub_freebsd_load_elfmodule_obj) (grub_file_t file, int argc, +SUFFIX (grub_freebsd_load_elfmodule_obj) (struct grub_relocator *relocator, + grub_file_t file, int argc, char *argv[], grub_addr_t *kern_end) { Elf_Ehdr e; @@ -83,6 +81,8 @@ SUFFIX (grub_freebsd_load_elfmodule_obj) (grub_file_t file, int argc, char *shdr; grub_addr_t curload, module; grub_err_t err; + grub_size_t chunk_size = 0; + void *chunk_src; err = read_headers (file, &e, &shdr); if (err) @@ -90,6 +90,25 @@ SUFFIX (grub_freebsd_load_elfmodule_obj) (grub_file_t file, int argc, curload = module = ALIGN_PAGE (*kern_end); + for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) ((char *) shdr + + e.e_shnum * e.e_shentsize); + s = (Elf_Shdr *) ((char *) s + e.e_shentsize)) + { + if (s->sh_size == 0) + continue; + + if (s->sh_addralign) + chunk_size = ALIGN_UP (chunk_size + *kern_end, s->sh_addralign) + - *kern_end; + + chunk_size += s->sh_size; + } + + err = grub_relocator_alloc_chunk_addr (relocator, &chunk_src, + module, chunk_size); + if (err) + return err; + for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) ((char *) shdr + e.e_shnum * e.e_shentsize); s = (Elf_Shdr *) ((char *) s + e.e_shentsize)) @@ -109,15 +128,14 @@ SUFFIX (grub_freebsd_load_elfmodule_obj) (grub_file_t file, int argc, { default: case SHT_PROGBITS: - err = load (file, UINT_TO_PTR (curload), s->sh_offset, s->sh_size); + err = load (file, (grub_uint8_t *) chunk_src + curload - *kern_end, + s->sh_offset, s->sh_size); if (err) return err; break; case SHT_NOBITS: - if (curload + s->sh_size > grub_os_area_addr + grub_os_area_size) - return grub_error (GRUB_ERR_OUT_OF_RANGE, - "not enough memory for the module"); - grub_memset (UINT_TO_PTR (curload), 0, s->sh_size); + grub_memset ((grub_uint8_t *) chunk_src + curload - *kern_end, 0, + s->sh_size); break; } curload += s->sh_size; @@ -143,7 +161,8 @@ SUFFIX (grub_freebsd_load_elfmodule_obj) (grub_file_t file, int argc, #else grub_err_t -SUFFIX (grub_freebsd_load_elfmodule) (grub_file_t file, int argc, char *argv[], +SUFFIX (grub_freebsd_load_elfmodule) (struct grub_relocator *relocator, + grub_file_t file, int argc, char *argv[], grub_addr_t *kern_end) { Elf_Ehdr e; @@ -151,6 +170,8 @@ SUFFIX (grub_freebsd_load_elfmodule) (grub_file_t file, int argc, char *argv[], char *shdr; grub_addr_t curload, module; grub_err_t err; + grub_size_t chunk_size = 0; + void *chunk_src; err = read_headers (file, &e, &shdr); if (err) @@ -158,6 +179,24 @@ SUFFIX (grub_freebsd_load_elfmodule) (grub_file_t file, int argc, char *argv[], curload = module = ALIGN_PAGE (*kern_end); + for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) ((char *) shdr + + e.e_shnum * e.e_shentsize); + s = (Elf_Shdr *) ((char *) s + e.e_shentsize)) + { + if (s->sh_size == 0) + continue; + + if (! (s->sh_flags & SHF_ALLOC)) + continue; + if (chunk_size < s->sh_addr + s->sh_size) + chunk_size = s->sh_addr + s->sh_size; + } + + err = grub_relocator_alloc_chunk_addr (relocator, &chunk_src, + module, chunk_size); + if (err) + return err; + for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) ((char *) shdr + e.e_shnum * e.e_shentsize); s = (Elf_Shdr *) ((char *) s + e.e_shentsize)) @@ -176,17 +215,15 @@ SUFFIX (grub_freebsd_load_elfmodule) (grub_file_t file, int argc, char *argv[], { default: case SHT_PROGBITS: - err = load (file, UINT_TO_PTR (module + s->sh_addr), + err = load (file, (grub_uint8_t *) chunk_src + module + + s->sh_addr - *kern_end, s->sh_offset, s->sh_size); if (err) return err; break; case SHT_NOBITS: - if (module + s->sh_addr + s->sh_size - > grub_os_area_addr + grub_os_area_size) - return grub_error (GRUB_ERR_OUT_OF_RANGE, - "not enough memory for the module"); - grub_memset (UINT_TO_PTR (module + s->sh_addr), 0, s->sh_size); + grub_memset ((grub_uint8_t *) chunk_src + module + + s->sh_addr - *kern_end, 0, s->sh_size); break; } if (curload < module + s->sh_addr + s->sh_size) From 8468cbeccd5f544ca97517f2a12469ff401e52e9 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 17:46:17 +0100 Subject: [PATCH 012/271] Fix typo in relocator32.S --- lib/i386/relocator32.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/i386/relocator32.S b/lib/i386/relocator32.S index 23bf65302..4e0553c03 100644 --- a/lib/i386/relocator32.S +++ b/lib/i386/relocator32.S @@ -79,7 +79,7 @@ LOCAL(cont1): /* Turn off PAE. */ movl %cr4, %eax - andl $GRUB_MEMORY_CPU_CR4_PAE_ON, %eax + andl $(~GRUB_MEMORY_CPU_CR4_PAE_ON), %eax movl %eax, %cr4 jmp LOCAL(cont2) From 1d24828f209ee2855ac0ff542856607d1f8b3e22 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 17:47:14 +0100 Subject: [PATCH 013/271] Fix out of memory hang. Add sanity checks --- lib/relocator.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 5d30b8ffe..3085932c5 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -22,6 +22,10 @@ #include /* TODO: use more efficient data structures if necessary. */ +/* FIXME: implement unload. */ +/* FIXME: check memory map. */ +/* FIXME: try to request memory from firmware. */ +/* FIXME: sort chunk when programming relocators. */ struct grub_relocator * grub_relocator_new (void) @@ -180,11 +184,13 @@ malloc_in_range (struct grub_relocator *rel, grub_size_t size, grub_addr_t *res, int from_low_priv, int collisioncheck) { - grub_mm_region_t rb = NULL, rbp = NULL; + grub_mm_region_t rb, rbp; grub_mm_header_t hb = NULL, hbp = NULL; grub_addr_t best_addr; again: + + rb = NULL, rbp = NULL; { grub_mm_region_t r, rp; @@ -344,6 +350,9 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, grub_addr_t start; grub_addr_t min_addr = 0, max_addr; + if (target > ~size) + return grub_error (GRUB_ERR_OUT_OF_RANGE, "address is out of range"); + adjust_limits (rel, &min_addr, &max_addr, target, target); for (chunk = rel->chunks; chunk; chunk = chunk->next) @@ -356,8 +365,10 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, if (!chunk) return grub_errno; - grub_dprintf ("relocator", "min_addr = 0x%llx, max_addr = 0x%llx\n", - (unsigned long long) min_addr, (unsigned long long) max_addr); + grub_dprintf ("relocator", + "min_addr = 0x%llx, max_addr = 0x%llx, target = 0x%llx\n", + (unsigned long long) min_addr, (unsigned long long) max_addr, + (unsigned long long) target); do { @@ -441,6 +452,9 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, struct grub_relocator_chunk *chunk; grub_addr_t start; + if (max_addr > ~size) + max_addr = ~size; + grub_dprintf ("relocator", "chunks = %p\n", rel->chunks); chunk = grub_malloc (sizeof (struct grub_relocator_chunk)); From 14933205d1109ea759949bfceced54553824a331 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 17:48:51 +0100 Subject: [PATCH 014/271] Relocator64 support --- conf/i386.rmk | 1 + include/grub/i386/memory.h | 3 +- include/grub/i386/relocator.h | 16 +++ lib/i386/relocator.c | 54 ++++++++- lib/i386/relocator64.S | 206 ++++++++++++++++++++++++++++++++++ 5 files changed, 277 insertions(+), 3 deletions(-) create mode 100644 lib/i386/relocator64.S diff --git a/conf/i386.rmk b/conf/i386.rmk index 674170d01..72ea6d465 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -17,6 +17,7 @@ vga_text_mod_LDFLAGS = $(COMMON_LDFLAGS) pkglib_MODULES += relocator.mod relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ + lib/i386/relocator64.S \ lib/i386/relocator_asm.S lib/i386/relocator.c relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) diff --git a/include/grub/i386/memory.h b/include/grub/i386/memory.h index 466947cc6..fe2f6e4e1 100644 --- a/include/grub/i386/memory.h +++ b/include/grub/i386/memory.h @@ -22,7 +22,8 @@ /* The flag for protected mode. */ #define GRUB_MEMORY_CPU_CR0_PE_ON 0x1 -#define GRUB_MEMORY_CPU_CR4_PAE_ON 0x00000040 +#define GRUB_MEMORY_CPU_CR4_PAE_ON 0x00000020 +#define GRUB_MEMORY_CPU_CR4_PSE_ON 0x00000010 #define GRUB_MEMORY_CPU_CR0_PAGING_ON 0x80000000 #define GRUB_MEMORY_CPU_AMD64_MSR 0xc0000080 #define GRUB_MEMORY_CPU_AMD64_MSR_ON 0x00000100 diff --git a/include/grub/i386/relocator.h b/include/grub/i386/relocator.h index e4c9e7ca7..ac49dd29e 100644 --- a/include/grub/i386/relocator.h +++ b/include/grub/i386/relocator.h @@ -34,7 +34,23 @@ struct grub_relocator32_state grub_uint32_t esi; }; +struct grub_relocator64_state +{ + grub_uint64_t rsp; + grub_uint64_t rax; + grub_uint64_t rbx; + grub_uint64_t rcx; + grub_uint64_t rdx; + grub_uint64_t rip; + grub_uint64_t rsi; + grub_addr_t cr3; +}; + grub_err_t grub_relocator32_boot (struct grub_relocator *rel, struct grub_relocator32_state state); +grub_err_t grub_relocator64_boot (struct grub_relocator *rel, + struct grub_relocator64_state state, + grub_addr_t min_addr, grub_addr_t max_addr); + #endif /* ! GRUB_RELOCATOR_CPU_HEADER */ diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 11e673cf7..e81dd8e1e 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -26,8 +26,6 @@ #include #include -extern grub_uint8_t grub_relocator32_start; -extern grub_uint8_t grub_relocator32_end; extern grub_uint8_t grub_relocator_forward_start; extern grub_uint8_t grub_relocator_forward_end; extern grub_uint8_t grub_relocator_backward_start; @@ -41,6 +39,8 @@ extern void *grub_relocator_forward_dest; extern void *grub_relocator_forward_src; extern grub_size_t grub_relocator_forward_chunk_size; +extern grub_uint8_t grub_relocator32_start; +extern grub_uint8_t grub_relocator32_end; extern grub_uint32_t grub_relocator32_eax; extern grub_uint32_t grub_relocator32_ebx; extern grub_uint32_t grub_relocator32_ecx; @@ -49,6 +49,18 @@ extern grub_uint32_t grub_relocator32_eip; extern grub_uint32_t grub_relocator32_esp; extern grub_uint32_t grub_relocator32_esi; +extern grub_uint8_t grub_relocator64_start; +extern grub_uint8_t grub_relocator64_end; +extern grub_uint64_t grub_relocator64_rax; +extern grub_uint64_t grub_relocator64_rbx; +extern grub_uint64_t grub_relocator64_rcx; +extern grub_uint64_t grub_relocator64_rdx; +extern grub_uint64_t grub_relocator64_rip; +extern grub_uint64_t grub_relocator64_rip_addr; +extern grub_uint64_t grub_relocator64_rsp; +extern grub_uint64_t grub_relocator64_rsi; +extern grub_addr_t grub_relocator64_cr3; + #define RELOCATOR_SIZEOF(x) (&grub_relocator##x##_end - &grub_relocator##x##_start) grub_size_t grub_relocator_align = 1; @@ -141,3 +153,41 @@ grub_relocator32_boot (struct grub_relocator *rel, /* Not reached. */ return GRUB_ERR_NONE; } + +grub_err_t +grub_relocator64_boot (struct grub_relocator *rel, + struct grub_relocator64_state state, + grub_addr_t min_addr, grub_addr_t max_addr) +{ + grub_addr_t target; + void *src; + grub_err_t err; + grub_addr_t relst; + + err = grub_relocator_alloc_chunk_align (rel, &src, &target, min_addr, + max_addr - RELOCATOR_SIZEOF (64), + RELOCATOR_SIZEOF (64), 16); + if (err) + return err; + + grub_relocator64_rax = state.rax; + grub_relocator64_rbx = state.rbx; + grub_relocator64_rcx = state.rcx; + grub_relocator64_rdx = state.rdx; + grub_relocator64_rip = state.rip; + grub_relocator64_rsp = state.rsp; + grub_relocator64_rsi = state.rsi; + grub_relocator64_cr3 = state.cr3; + + grub_memmove (src, &grub_relocator64_start, RELOCATOR_SIZEOF (64)); + + err = grub_relocator_prepare_relocs (rel, target, &relst); + if (err) + return err; + + asm volatile ("cli"); + ((void (*) (void)) relst) (); + + /* Not reached. */ + return GRUB_ERR_NONE; +} diff --git a/lib/i386/relocator64.S b/lib/i386/relocator64.S new file mode 100644 index 000000000..42f61e32e --- /dev/null +++ b/lib/i386/relocator64.S @@ -0,0 +1,206 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +#ifdef __x86_64__ +#define RAX %rax +#define RSI %rdi +#else +#define RAX %eax +#define RSI %esi +#endif + +#define CODE32_SEGMENT 0x18 +#define CODE64_SEGMENT 0x08 + +/* The data segment of the protected mode. */ +#define DATA_SEGMENT 0x10 + + .p2align 4 /* force 16-byte alignment */ + +VARIABLE(grub_relocator64_start) +LOCAL(base): + /* %rax contains now our new 'base'. */ + mov RAX, RSI + + add $(LOCAL(cont0) - LOCAL(base)), RAX + jmp *RAX +LOCAL(cont0): + lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX + mov RAX, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + + lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX + mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) + +#ifndef __x86_64__ + /* Disable paging. */ + movl %cr0, %eax + andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax + movl %eax, %cr0 + + /* Turn on PAE. */ + movl %cr4, %eax + orl $(GRUB_MEMORY_CPU_CR4_PAE_ON | GRUB_MEMORY_CPU_CR4_PSE_ON), %eax + movl %eax, %cr4 + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator64_cr3) + .long 0 + movl %eax, %cr3 + + /* Turn on amd64. */ + movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx + rdmsr + orl $GRUB_MEMORY_CPU_AMD64_MSR_ON, %eax + wrmsr + + /* Enable paging. */ + movl %cr0, %eax + orl $GRUB_MEMORY_CPU_CR0_PAGING_ON, %eax + movl %eax, %cr0 +#else + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator64_cr3) + .quad 0 + movl %rax, %cr3 +#endif + /* Load GDT. */ + lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) + + /* Update %cs. */ + ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + +LOCAL(cont1): + .code64 + + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator64_rsp) + .quad 0 + + movq %rax, %rsp + + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator64_rsi) + .quad 0 + + movq %rax, %rsi + + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator64_rax) + .quad 0 + + /* mov imm64, %rbx */ + .byte 0x48 + .byte 0xbb +VARIABLE(grub_relocator64_rbx) + .quad 0 + + /* mov imm64, %rcx */ + .byte 0x48 + .byte 0xb9 +VARIABLE(grub_relocator64_rcx) + .quad 0 + + /* mov imm64, %rdx */ + .byte 0x48 + .byte 0xba +VARIABLE(grub_relocator64_rdx) + .quad 0 + + /* Cleared direction flag is of no problem with any current + payload and makes this implementation easier. */ + cld + + jmp *LOCAL(jump_addr) (%rip) + +LOCAL(jump_addr): +VARIABLE(grub_relocator64_rip) + .quad 0 + + .p2align 4 +LOCAL(gdt): + /* NULL. */ + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + /* 64-bit segment. */ + .word 0xffff /* Limit xffff. */ + .word 0x0000 /* Base xxxx0000. */ + .byte 0x00 /* Base xx00xxxx. */ + .byte (0x8 /* Type 8. */ | (1 << 4) /* Code. */ \ + | (0 << 5) /* Ring 0. */ | (1 << 7) /* Present. */) + .byte (0xf /* Limit fxxxx. */ | (0 << 4) /* AVL flag. */ \ + | (1 << 5) /* 64-bit. */ | (0 << 6) \ + | (1 << 7) /* 4K granular. */) + .byte 0x00 /* Base 00xxxxxx. */ + + /* Data segment*/ + .word 0xffff /* Limit xffff. */ + .word 0x0000 /* Base xxxx0000. */ + .byte 0x00 /* Base xx00xxxx. */ + .byte (0x0 /* Type 0. */ | (0 << 4) /* Data. */ \ + | (0 << 5) /* Ring 0. */ | (1 << 7) /* Present. */) + .byte (0xf /* Limit fxxxx. */ | (0 << 4) /* AVL flag. */ \ + | (0 << 5) /* Data. */ | (0 << 6) \ + | (1 << 7) /* 4K granular. */) + .byte 0x00 /* Base 00xxxxxx. */ + + /* Compatibility segment. */ + .word 0xffff /* Limit xffff. */ + .word 0x0000 /* Base xxxx0000. */ + .byte 0x00 /* Base xx00xxxx. */ + .byte (0x8 /* Type 8. */ | (1 << 4) /* Code. */ \ + | (0 << 5) /* Ring 0. */ | (1 << 7) /* Present. */) + .byte (0xf /* Limit fxxxx. */ | (0 << 4) /* AVL flag. */ \ + | (0 << 5) /* 32-bit. */ | (1 << 6) /* 32-bit. */ \ + | (1 << 7) /* 4K granular. */) + .byte 0x00 /* Base 00xxxxxx. */ + + .p2align 4 +LOCAL(gdtdesc): + .word 0x20 +LOCAL(gdt_addr): +#ifdef __x86_64__ + /* Filled by the code. */ + .quad 0 +#else + /* Filled by the code. */ + .long 0 +#endif + + .p2align 4 +LOCAL(jump_vector): + /* Jump location. Is filled by the code */ +#ifdef __x86_64__ + .quad 0 +#else + .long 0 +#endif + .long CODE64_SEGMENT + +VARIABLE(grub_relocator64_end) From 73910decff8e257368636be617ee37d4c416b93b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 17:50:11 +0100 Subject: [PATCH 015/271] Fix various bugs in *bsd. Freebsd64 on relocators --- include/grub/i386/bsd.h | 6 ++- loader/i386/bsd.c | 84 ++++++++++++++----------------------- loader/i386/bsdXX.c | 46 +++++++++++--------- loader/i386/bsd_pagetable.c | 19 +++++---- 4 files changed, 73 insertions(+), 82 deletions(-) diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index b37a86c7f..4f5d5d1ee 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -263,9 +263,11 @@ grub_err_t grub_freebsd_load_elfmodule_obj64 (struct grub_relocator *relocator, grub_file_t file, int argc, char *argv[], grub_addr_t *kern_end); -grub_err_t grub_freebsd_load_elf_meta32 (grub_file_t file, +grub_err_t grub_freebsd_load_elf_meta32 (struct grub_relocator *relocator, + grub_file_t file, grub_addr_t *kern_end); -grub_err_t grub_freebsd_load_elf_meta64 (grub_file_t file, +grub_err_t grub_freebsd_load_elf_meta64 (struct grub_relocator *relocator, + grub_file_t file, grub_addr_t *kern_end); grub_err_t grub_freebsd_add_meta (grub_uint32_t type, void *data, diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 9ee8a4b12..90cd8a9a4 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -436,12 +436,6 @@ grub_freebsd_list_modules (void) /* This function would be here but it's under different license. */ #include "bsd_pagetable.c" -struct gdt_descriptor -{ - grub_uint16_t limit; - void *base; -} __attribute__ ((packed)); - static grub_err_t grub_freebsd_boot (void) { @@ -499,15 +493,15 @@ grub_freebsd_boot (void) p_size = ALIGN_PAGE (kern_end + p_size + mod_buf_len) - kern_end; if (is_64bit) - p_size += 4096 * 4; + p_size += 4096 * 3; err = grub_relocator_alloc_chunk_addr (relocator, (void **) &p, kern_end, p_size); if (err) return err; - kern_end += p_size; - p0 = p; p_target = kern_end; + p0 = p; + kern_end += p_size; grub_env_iterate (iterate_env); @@ -547,49 +541,30 @@ grub_freebsd_boot (void) if (is_64bit) { - grub_uint32_t *gdt; - grub_uint8_t *trampoline; - void (*launch_trampoline) (grub_addr_t entry_lo, ...) - __attribute__ ((cdecl, regparm (0))); + struct grub_relocator64_state state; grub_uint8_t *pagetable; + grub_uint32_t *stack; + grub_addr_t stack_target; - struct gdt_descriptor *gdtdesc; + err = grub_relocator_alloc_chunk_align (relocator, (void **) &stack, + &stack_target, + 0x10000, 0x90000, + 3 * sizeof (grub_uint32_t) + + sizeof (bi), 4); + if (err) + return err; - pagetable = p - 16384; - fill_bsd64_pagetable (pagetable); + pagetable = p - (4096 * 3); + fill_bsd64_pagetable (pagetable, (pagetable - p0) + p_target); - /* Create GDT. */ - gdt = (grub_uint32_t *) (p - 4096); - gdt[0] = 0; - gdt[1] = 0; - gdt[2] = 0; - gdt[3] = 0x00209800; - gdt[4] = 0; - gdt[5] = 0x00008000; + state.cr3 = (pagetable - p0) + p_target; + state.rsp = stack_target; + state.rip = (((grub_uint64_t) entry_hi) << 32) | entry; - /* Create GDT descriptor. */ - gdtdesc = (struct gdt_descriptor *) (p - 4096 + 24); - gdtdesc->limit = 24; - gdtdesc->base = gdt; - - /* Prepare trampoline. */ - trampoline = (grub_uint8_t *) (p - 4096 + 24 - + sizeof (struct gdt_descriptor)); - launch_trampoline = (void __attribute__ ((cdecl, regparm (0))) - (*) (grub_addr_t entry_lo, ...)) trampoline; - grub_bsd64_trampoline_gdt = (grub_uint32_t) gdtdesc; - grub_bsd64_trampoline_selfjump - = (grub_uint32_t) (trampoline + 6 - + ((grub_uint8_t *) &grub_bsd64_trampoline_selfjump - - &grub_bsd64_trampoline_start)); - - /* Copy trampoline. */ - grub_memcpy (trampoline, &grub_bsd64_trampoline_start, - &grub_bsd64_trampoline_end - &grub_bsd64_trampoline_start); - - /* Launch trampoline. */ - launch_trampoline (entry, entry_hi, pagetable, bi.bi_modulep, - kern_end); + stack[0] = entry; + stack[1] = bi.bi_modulep; + stack[2] = kern_end; + return grub_relocator64_boot (relocator, state, 0, 0x40000000); } else { @@ -936,7 +911,7 @@ grub_bsd_elf32_size_hook (grub_elf_t elf __attribute__ ((unused)), if (phdr->p_type != PT_LOAD && phdr->p_type != PT_DYNAMIC) - return 1; + return 0; paddr = phdr->p_paddr & 0xFFFFFF; @@ -946,7 +921,7 @@ grub_bsd_elf32_size_hook (grub_elf_t elf __attribute__ ((unused)), if (paddr + phdr->p_memsz > kern_end) kern_end = paddr + phdr->p_memsz; - return 1; + return 0; } static grub_err_t @@ -978,7 +953,7 @@ grub_bsd_elf64_size_hook (grub_elf_t elf __attribute__ ((unused)), if (phdr->p_type != PT_LOAD && phdr->p_type != PT_DYNAMIC) - return 1; + return 0; paddr = phdr->p_paddr & 0xffffff; @@ -988,7 +963,7 @@ grub_bsd_elf64_size_hook (grub_elf_t elf __attribute__ ((unused)), if (paddr + phdr->p_memsz > kern_end) kern_end = paddr + phdr->p_memsz; - return 1; + return 0; } static grub_err_t @@ -1054,6 +1029,9 @@ grub_bsd_load_elf (grub_elf_t elf) err = grub_elf64_phdr_iterate (elf, grub_bsd_elf64_size_hook, NULL); if (err) return err; + + grub_dprintf ("bsd", "kern_start = %x, kern_end = %x\n", kern_start, + kern_end); err = grub_relocator_alloc_chunk_addr (relocator, &kern_chunk_src, kern_start, kern_end - kern_start); if (err) @@ -1154,9 +1132,9 @@ grub_cmd_freebsd (grub_extcmd_t cmd, int argc, char *argv[]) return grub_errno; if (is_64bit) - err = grub_freebsd_load_elf_meta64 (file, &kern_end); + err = grub_freebsd_load_elf_meta64 (relocator, file, &kern_end); else - err = grub_freebsd_load_elf_meta32 (file, &kern_end); + err = grub_freebsd_load_elf_meta32 (relocator, file, &kern_end); if (err) return err; diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index 2622287f9..8f5cfa750 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -249,24 +249,28 @@ SUFFIX (grub_freebsd_load_elfmodule) (struct grub_relocator *relocator, grub_freebsd_add_meta_module (argv[0], FREEBSD_MODTYPE_ELF_MODULE, argc - 1, argv + 1, module, curload - module); - return SUFFIX (grub_freebsd_load_elf_meta) (file, kern_end); + return SUFFIX (grub_freebsd_load_elf_meta) (relocator, file, kern_end); } #endif grub_err_t -SUFFIX (grub_freebsd_load_elf_meta) (grub_file_t file, grub_addr_t *kern_end) +SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, + grub_file_t file, grub_addr_t *kern_end) { grub_err_t err; Elf_Ehdr e; Elf_Shdr *s; char *shdr; unsigned symoff, stroff, symsize, strsize; - grub_addr_t curload; grub_freebsd_addr_t symstart, symend, symentsize, dynamic; Elf_Sym *sym; + void *sym_chunk; + grub_uint8_t *curload; + grub_freebsd_addr_t symtarget; const char *str; unsigned i; + grub_size_t chunk_size; err = read_headers (file, &e, &shdr); if (err) @@ -293,19 +297,24 @@ SUFFIX (grub_freebsd_load_elf_meta) (grub_file_t file, grub_addr_t *kern_end) stroff = s->sh_offset; strsize = s->sh_size; - if (*kern_end + 4 * sizeof (grub_freebsd_addr_t) + symsize + strsize - > grub_os_area_addr + grub_os_area_size) - return grub_error (GRUB_ERR_OUT_OF_RANGE, - "not enough memory for kernel symbols"); + chunk_size = 2 * sizeof (grub_freebsd_addr_t) + + ALIGN_UP (symsize + strsize, sizeof (grub_freebsd_addr_t)); + symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t)); + err = grub_relocator_alloc_chunk_addr (relocator, &sym_chunk, + symtarget, chunk_size); + if (err) + return err; - symstart = curload = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t)); - *((grub_freebsd_addr_t *) UINT_TO_PTR (curload)) = symsize; + symstart = symtarget; + symend = symstart + chunk_size; + + curload = sym_chunk; + *((grub_freebsd_addr_t *) curload) = symsize; curload += sizeof (grub_freebsd_addr_t); if (grub_file_seek (file, symoff) == (grub_off_t) -1) return grub_errno; - sym = (Elf_Sym *) UINT_TO_PTR (curload); - if (grub_file_read (file, UINT_TO_PTR (curload), symsize) != - (grub_ssize_t) symsize) + sym = (Elf_Sym *) curload; + if (grub_file_read (file, curload, symsize) != (grub_ssize_t) symsize) { if (! grub_errno) return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); @@ -313,21 +322,17 @@ SUFFIX (grub_freebsd_load_elf_meta) (grub_file_t file, grub_addr_t *kern_end) } curload += symsize; - *((grub_freebsd_addr_t *) UINT_TO_PTR (curload)) = strsize; + *((grub_freebsd_addr_t *) curload) = strsize; curload += sizeof (grub_freebsd_addr_t); if (grub_file_seek (file, stroff) == (grub_off_t) -1) return grub_errno; - str = (char *) UINT_TO_PTR (curload); - if (grub_file_read (file, UINT_TO_PTR (curload), strsize) - != (grub_ssize_t) strsize) + str = (char *) curload; + if (grub_file_read (file, curload, strsize) != (grub_ssize_t) strsize) { if (! grub_errno) return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); return grub_errno; } - curload += strsize; - curload = ALIGN_UP (curload, sizeof (grub_freebsd_addr_t)); - symend = curload; for (i = 0; i * symentsize < symsize; @@ -360,7 +365,8 @@ SUFFIX (grub_freebsd_load_elf_meta) (grub_file_t file, grub_addr_t *kern_end) sizeof (symend)); if (err) return err; - *kern_end = ALIGN_PAGE (curload); + + *kern_end = ALIGN_PAGE (symend); return GRUB_ERR_NONE; } diff --git a/loader/i386/bsd_pagetable.c b/loader/i386/bsd_pagetable.c index 0fd393707..13348cc83 100644 --- a/loader/i386/bsd_pagetable.c +++ b/loader/i386/bsd_pagetable.c @@ -50,9 +50,10 @@ static void -fill_bsd64_pagetable (grub_uint8_t *target) +fill_bsd64_pagetable (grub_uint8_t *src, grub_addr_t target) { grub_uint64_t *pt2, *pt3, *pt4; + grub_addr_t pt2t, pt3t, pt4t; int i; #define PG_V 0x001 @@ -60,11 +61,15 @@ fill_bsd64_pagetable (grub_uint8_t *target) #define PG_U 0x004 #define PG_PS 0x080 - pt4 = (grub_uint64_t *) target; - pt3 = (grub_uint64_t *) (target + 4096); - pt2 = (grub_uint64_t *) (target + 8192); + pt4 = (grub_uint64_t *) src; + pt3 = (grub_uint64_t *) (src + 4096); + pt2 = (grub_uint64_t *) (src + 8192); - grub_memset ((char *) target, 0, 4096 * 3); + pt4t = target; + pt3t = target + 4096; + pt2t = target + 8192; + + grub_memset (src, 0, 4096 * 3); /* * This is kinda brutal, but every single 1GB VM memory segment points to @@ -74,11 +79,11 @@ fill_bsd64_pagetable (grub_uint8_t *target) for (i = 0; i < 512; i++) { /* Each slot of the level 4 pages points to the same level 3 page */ - pt4[i] = (grub_addr_t) &pt3[0]; + pt4[i] = (grub_addr_t) pt3t; pt4[i] |= PG_V | PG_RW | PG_U; /* Each slot of the level 3 pages points to the same level 2 page */ - pt3[i] = (grub_addr_t) &pt2[0]; + pt3[i] = (grub_addr_t) pt2t; pt3[i] |= PG_V | PG_RW | PG_U; /* The level 2 page slots are mapped with 2MB pages for 1GB. */ From 611f8f0eb94204d907ef908d0301a6fd3c815594 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 17:57:04 +0100 Subject: [PATCH 016/271] Remove unused BSD helpers --- conf/i386-coreboot.rmk | 2 +- conf/i386-pc.rmk | 2 +- loader/i386/bsd_helper.S | 45 ------------- loader/i386/bsd_trampoline.S | 124 ----------------------------------- 4 files changed, 2 insertions(+), 171 deletions(-) delete mode 100644 loader/i386/bsd_helper.S delete mode 100644 loader/i386/bsd_trampoline.S diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk index d73c9f0e2..8676aaea3 100644 --- a/conf/i386-coreboot.rmk +++ b/conf/i386-coreboot.rmk @@ -163,7 +163,7 @@ aout_mod_LDFLAGS = $(COMMON_LDFLAGS) # For bsd.mod pkglib_MODULES += bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S +bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c bsd_mod_CFLAGS = $(COMMON_CFLAGS) bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index c155047f6..36ca76950 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -264,7 +264,7 @@ aout_mod_CFLAGS = $(COMMON_CFLAGS) aout_mod_LDFLAGS = $(COMMON_LDFLAGS) # For bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S +bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c bsd_mod_CFLAGS = $(COMMON_CFLAGS) bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) diff --git a/loader/i386/bsd_helper.S b/loader/i386/bsd_helper.S deleted file mode 100644 index 25aee3a80..000000000 --- a/loader/i386/bsd_helper.S +++ /dev/null @@ -1,45 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,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 - - .p2align 2 - - - .code32 - -/* - * Use cdecl calling convention for *BSD kernels. - */ - -FUNCTION(grub_unix_real_boot) - - /* Interrupts should be disabled. */ - cli - - /* Discard `grub_unix_real_boot' return address. */ - popl %eax - - /* Fetch `entry' address ... */ - popl %eax - - /* - * ... and put our return address in its place. The kernel will - * ignore it, but it expects %esp to point to it. - */ - call *%eax diff --git a/loader/i386/bsd_trampoline.S b/loader/i386/bsd_trampoline.S deleted file mode 100644 index a568fff4d..000000000 --- a/loader/i386/bsd_trampoline.S +++ /dev/null @@ -1,124 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (c) 2003 Peter Wemm - * Copyright (C) 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 . - */ - -/* Based on the code from FreeBSD originally distributed under the - following terms: */ - -/*- - * Copyright (c) 2003 Peter Wemm - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - - -#define MSR_EFER 0xc0000080 -#define EFER_LME 0x00000100 -#define CR4_PAE 0x00000020 -#define CR4_PSE 0x00000010 -#define CR0_PG 0x80000000 - -#include - - .p2align 2 - - .code32 - - -VARIABLE(grub_bsd64_trampoline_start) - - /* Discard `grub_unix_real_boot' return address. */ - popl %eax - - /* entry */ - popl %edi - - /* entry_hi */ - popl %esi - - cli - - /* Turn on EFER.LME. */ - movl $MSR_EFER, %ecx - rdmsr - orl $EFER_LME, %eax - wrmsr - - /* Turn on PAE. */ - movl %cr4, %eax - orl $(CR4_PAE | CR4_PSE), %eax - movl %eax, %cr4 - - /* Set %cr3 for PT4. */ - popl %eax - movl %eax, %cr3 - - /* Push a dummy return address. */ - pushl %eax - - /* Turn on paging (implicitly sets EFER.LMA). */ - movl %cr0, %eax - orl $CR0_PG, %eax - movl %eax, %cr0 - - /* Now we're in compatibility mode. set %cs for long mode. */ - /* lgdt */ - .byte 0x0f - .byte 0x01 - .byte 0x15 -VARIABLE (grub_bsd64_trampoline_gdt) - .long 0x0 - - /* ljmp */ - .byte 0xea -VARIABLE (grub_bsd64_trampoline_selfjump) - .long 0x0 - .word 0x08 - - .code64 - -bsd64_longmode: - /* We're still running V=P, jump to entry point. */ - movl %esi, %eax - salq $32, %rax - orq %rdi, %rax - pushq %rax - ret -VARIABLE(grub_bsd64_trampoline_end) From 49a716be3b0b089763745cb3322f05dbb1f7c65f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 22:14:26 +0100 Subject: [PATCH 017/271] Possibility to prefer higher or lower chunks in relocator --- include/grub/relocator.h | 7 ++++++- lib/i386/relocator.c | 6 ++++-- lib/relocator.c | 21 +++++++++++++++++---- loader/i386/bsd.c | 9 ++++++--- loader/i386/linux.c | 6 ++---- loader/i386/multiboot.c | 3 ++- loader/i386/multiboot_mbi.c | 3 ++- loader/xnu_resume.c | 3 ++- 8 files changed, 41 insertions(+), 17 deletions(-) diff --git a/include/grub/relocator.h b/include/grub/relocator.h index 2ea74b775..32bab7053 100644 --- a/include/grub/relocator.h +++ b/include/grub/relocator.h @@ -34,7 +34,12 @@ grub_err_t grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, grub_addr_t *target, grub_addr_t min_addr, grub_addr_t max_addr, - grub_size_t size, grub_size_t align); + grub_size_t size, grub_size_t align, + int preference); + +#define GRUB_RELOCATOR_PREFERENCE_NONE 0 +#define GRUB_RELOCATOR_PREFERENCE_LOW 1 +#define GRUB_RELOCATOR_PREFERENCE_HIGH 2 void grub_relocator_unload (struct grub_relocator *rel); diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index e81dd8e1e..6e1e13b04 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -129,7 +129,8 @@ grub_relocator32_boot (struct grub_relocator *rel, err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, (0xffffffff - RELOCATOR_SIZEOF (32)) - + 1, RELOCATOR_SIZEOF (32), 16); + + 1, RELOCATOR_SIZEOF (32), 16, + GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; @@ -166,7 +167,8 @@ grub_relocator64_boot (struct grub_relocator *rel, err = grub_relocator_alloc_chunk_align (rel, &src, &target, min_addr, max_addr - RELOCATOR_SIZEOF (64), - RELOCATOR_SIZEOF (64), 16); + RELOCATOR_SIZEOF (64), 16, + GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; diff --git a/lib/relocator.c b/lib/relocator.c index 3085932c5..a5b3c6daf 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -446,7 +446,8 @@ grub_err_t grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, grub_addr_t *target, grub_addr_t min_addr, grub_addr_t max_addr, - grub_size_t size, grub_size_t align) + grub_size_t size, grub_size_t align, + int preference) { grub_addr_t min_addr2 = 0, max_addr2; struct grub_relocator_chunk *chunk; @@ -455,6 +456,11 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, if (max_addr > ~size) max_addr = ~size; +#ifdef GRUB_MACHINE_PCBIOS + if (min_addr < 0x1000) + min_addr = 0x1000; +#endif + grub_dprintf ("relocator", "chunks = %p\n", rel->chunks); chunk = grub_malloc (sizeof (struct grub_relocator_chunk)); @@ -462,7 +468,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, return grub_errno; if (malloc_in_range (rel, min_addr, max_addr, align, - size, &start, 1, 1)) + size, &start, + preference != GRUB_RELOCATOR_PREFERENCE_HIGH, 1)) { grub_dprintf ("relocator", "allocated 0x%llx/0x%llx\n", (unsigned long long) start, (unsigned long long) start); @@ -500,7 +507,10 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, while (0); /* FIXME: check memory map. */ - chunk->target = ALIGN_UP (min_addr, align); + if (preference == GRUB_RELOCATOR_PREFERENCE_HIGH) + chunk->target = ALIGN_DOWN (max_addr, align); + else + chunk->target = ALIGN_UP (min_addr, align); while (1) { struct grub_relocator_chunk *chunk2; @@ -514,7 +524,10 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, || (chunk->target <= chunk2->target + chunk2->size && chunk2->target + chunk2->size < chunk->target + size)) { - chunk->target = ALIGN_UP (chunk2->target + chunk2->size, align); + if (preference == GRUB_RELOCATOR_PREFERENCE_HIGH) + chunk->target = ALIGN_DOWN (chunk2->target, align); + else + chunk->target = ALIGN_UP (chunk2->target + chunk2->size, align); break; } if (!chunk2) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 90cd8a9a4..28bcde15e 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -550,7 +550,8 @@ grub_freebsd_boot (void) &stack_target, 0x10000, 0x90000, 3 * sizeof (grub_uint32_t) - + sizeof (bi), 4); + + sizeof (bi), 4, + GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; @@ -575,7 +576,8 @@ grub_freebsd_boot (void) &stack_target, 0x10000, 0x90000, 9 * sizeof (grub_uint32_t) - + sizeof (bi), 4); + + sizeof (bi), 4, + GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; grub_memcpy (&stack[8], &bi, sizeof (bi)); @@ -798,7 +800,8 @@ grub_netbsd_boot (void) err = grub_relocator_alloc_chunk_align (relocator, (void **) &stack, &stack_target, 0x10000, 0x90000, - 7 * sizeof (grub_uint32_t), 4); + 7 * sizeof (grub_uint32_t), 4, + GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; diff --git a/loader/i386/linux.c b/loader/i386/linux.c index e8d06b0e7..b6298d0bb 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -943,9 +943,6 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), addr_min = (grub_addr_t) prot_mode_target + ((prot_mode_pages * 3) << 12) + page_align (size); - if (addr_max > grub_os_area_addr + grub_os_area_size) - addr_max = grub_os_area_addr + grub_os_area_size; - /* Put the initrd as high as possible, 4KiB aligned. */ addr = (addr_max - size) & ~0xFFF; @@ -957,7 +954,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), err = grub_relocator_alloc_chunk_align (relocator, &initrd_mem, &initrd_mem_target, - addr_min, addr, size, 0x1000); + addr_min, addr, size, 0x1000, + GRUB_RELOCATOR_PREFERENCE_HIGH); if (err) return err; diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c index c5a7f7f9d..2f9cc73c9 100644 --- a/loader/i386/multiboot.c +++ b/loader/i386/multiboot.c @@ -259,7 +259,8 @@ grub_module (int argc, char *argv[]) err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &module, &target, 0, (0xffffffff - size) + 1, - size, MULTIBOOT_MOD_ALIGN); + size, MULTIBOOT_MOD_ALIGN, + GRUB_RELOCATOR_PREFERENCE_NONE); if (err) goto fail; diff --git a/loader/i386/multiboot_mbi.c b/loader/i386/multiboot_mbi.c index ddaca7a1b..4fc9a7ac1 100644 --- a/loader/i386/multiboot_mbi.c +++ b/loader/i386/multiboot_mbi.c @@ -125,7 +125,8 @@ grub_multiboot_make_mbi (grub_uint32_t *target) err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, (void **) &ptrorig, &ptrdest, 0, 0xffffffff - bufsize, - bufsize, 4); + bufsize, 4, + GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; diff --git a/loader/xnu_resume.c b/loader/xnu_resume.c index a7d5fbad8..2d47df601 100644 --- a/loader/xnu_resume.c +++ b/loader/xnu_resume.c @@ -115,7 +115,8 @@ grub_xnu_resume (char *imagename) &target_image, 0, (0xffffffff - hibhead.image_size) + 1, hibhead.image_size, - GRUB_XNU_PAGESIZE); + GRUB_XNU_PAGESIZE, + GRUB_RELOCATOR_PREFERENCE_NONE); if (err) { grub_file_close (file); From cdab631686052592b70daf341d0ccd783a598592 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 22:15:50 +0100 Subject: [PATCH 018/271] Relocator16 support --- conf/i386.rmk | 2 +- include/grub/i386/relocator.h | 15 +++ lib/i386/relocator.c | 51 ++++++++ lib/i386/relocator16.S | 225 ++++++++++++++++++++++++++++++++++ 4 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 lib/i386/relocator16.S diff --git a/conf/i386.rmk b/conf/i386.rmk index 72ea6d465..2efd9895a 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -17,7 +17,7 @@ vga_text_mod_LDFLAGS = $(COMMON_LDFLAGS) pkglib_MODULES += relocator.mod relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ - lib/i386/relocator64.S \ + lib/i386/relocator64.S lib/i386/relocator16.S \ lib/i386/relocator_asm.S lib/i386/relocator.c relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) diff --git a/include/grub/i386/relocator.h b/include/grub/i386/relocator.h index ac49dd29e..f32413a1b 100644 --- a/include/grub/i386/relocator.h +++ b/include/grub/i386/relocator.h @@ -34,6 +34,18 @@ struct grub_relocator32_state grub_uint32_t esi; }; +struct grub_relocator16_state +{ + grub_uint16_t cs; + grub_uint16_t ds; + grub_uint16_t es; + grub_uint16_t fs; + grub_uint16_t gs; + grub_uint16_t ss; + grub_uint16_t sp; + grub_uint16_t ip; +}; + struct grub_relocator64_state { grub_uint64_t rsp; @@ -46,6 +58,9 @@ struct grub_relocator64_state grub_addr_t cr3; }; +grub_err_t grub_relocator16_boot (struct grub_relocator *rel, + struct grub_relocator16_state state); + grub_err_t grub_relocator32_boot (struct grub_relocator *rel, struct grub_relocator32_state state); diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 6e1e13b04..5757bb6df 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -39,6 +39,17 @@ extern void *grub_relocator_forward_dest; extern void *grub_relocator_forward_src; extern grub_size_t grub_relocator_forward_chunk_size; +extern grub_uint8_t grub_relocator16_start; +extern grub_uint8_t grub_relocator16_end; +extern grub_uint16_t grub_relocator16_cs; +extern grub_uint16_t grub_relocator16_ip; +extern grub_uint16_t grub_relocator16_ds; +extern grub_uint16_t grub_relocator16_es; +extern grub_uint16_t grub_relocator16_fs; +extern grub_uint16_t grub_relocator16_gs; +extern grub_uint16_t grub_relocator16_ss; +extern grub_uint16_t grub_relocator16_sp; + extern grub_uint8_t grub_relocator32_start; extern grub_uint8_t grub_relocator32_end; extern grub_uint32_t grub_relocator32_eax; @@ -155,6 +166,46 @@ grub_relocator32_boot (struct grub_relocator *rel, return GRUB_ERR_NONE; } +grub_err_t +grub_relocator16_boot (struct grub_relocator *rel, + struct grub_relocator16_state state) +{ + grub_addr_t target; + void *src; + grub_err_t err; + grub_addr_t relst; + + err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, + 0xa0000 - RELOCATOR_SIZEOF (16), + RELOCATOR_SIZEOF (16), 16, + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + return err; + + grub_relocator16_cs = state.cs; + grub_relocator16_ip = state.ip; + + grub_relocator16_ds = state.ds; + grub_relocator16_es = state.es; + grub_relocator16_fs = state.fs; + grub_relocator16_gs = state.gs; + + grub_relocator16_ss = state.ss; + grub_relocator16_sp = state.sp; + + grub_memmove (src, &grub_relocator16_start, RELOCATOR_SIZEOF (16)); + + err = grub_relocator_prepare_relocs (rel, target, &relst); + if (err) + return err; + + asm volatile ("cli"); + ((void (*) (void)) relst) (); + + /* Not reached. */ + return GRUB_ERR_NONE; +} + grub_err_t grub_relocator64_boot (struct grub_relocator *rel, struct grub_relocator64_state state, diff --git a/lib/i386/relocator16.S b/lib/i386/relocator16.S new file mode 100644 index 000000000..d35adecd8 --- /dev/null +++ b/lib/i386/relocator16.S @@ -0,0 +1,225 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +#ifdef __x86_64__ +#define RAX %rax +#define RSI %rdi +#else +#define RAX %eax +#define RSI %esi +#endif + +/* The code segment of the protected mode. */ +#define CODE_SEGMENT 0x08 + +/* The data segment of the protected mode. */ +#define DATA_SEGMENT 0x10 + +#define PSEUDO_REAL_CSEG 0x18 + +#define PSEUDO_REAL_DSEG 0x20 + + .p2align 4 /* force 16-byte alignment */ + +VARIABLE(grub_relocator16_start) +LOCAL(base): + /* %rax contains now our new 'base'. */ + mov RAX, RSI + add $(LOCAL(cont0) - LOCAL(base)), RAX + jmp *RAX +LOCAL(cont0): + lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX + movl %eax, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + + lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX + mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) + + movl %esi, %eax + movw %ax, (LOCAL (cs_base_bytes12) - LOCAL (base)) (RSI, 1) + shrl $16, %eax + movb %al, (LOCAL (cs_base_byte3) - LOCAL (base)) (RSI, 1) + + /* Switch to compatibility mode. */ + + lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) + + /* Update %cs. */ + ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + +LOCAL(cont1): + .code32 + + /* Disable paging. */ + movl %cr0, %eax + andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax + movl %eax, %cr0 + + /* Disable amd64. */ + movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx + rdmsr + andl $(~GRUB_MEMORY_CPU_AMD64_MSR_ON), %eax + wrmsr + + /* Turn off PAE. */ + movl %cr4, %eax + andl $GRUB_MEMORY_CPU_CR4_PAE_ON, %eax + movl %eax, %cr4 + + /* Update other registers. */ + movl $PSEUDO_REAL_DSEG, %eax + movl %eax, %ds + movl %eax, %es + movl %eax, %fs + movl %eax, %gs + movl %eax, %ss + + movl %esi, %eax + shrl $4, %eax + movw %ax, (LOCAL (segment) - LOCAL (base)) (RSI, 1) + + /* jump to a 16 bit segment */ + ljmp $PSEUDO_REAL_CSEG, $(LOCAL (cont2) - LOCAL(base)) +LOCAL(cont2): + .code16 + + /* clear the PE bit of CR0 */ + movl %cr0, %eax + andl $(~GRUB_MEMORY_CPU_CR0_PE_ON), %eax + movl %eax, %cr0 + + /* flush prefetch queue, reload %cs */ + /* ljmp */ + .byte 0xea + .word LOCAL(cont3)-LOCAL(base) +LOCAL(segment): + .word 0 + +LOCAL(cont3): + /* we are in real mode now + * set up the real mode segment registers : DS, SS, ES + */ + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_ds) + .word 0 + movw %ax, %ds + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_es) + .word 0 + movw %ax, %es + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_fs) + .word 0 + movw %ax, %fs + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_gs) + .word 0 + movw %ax, %gs + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_ss) + .word 0 + movw %ax, %ss + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_sp) + .word 0 + movw %ax, %ss + + /* Cleared direction flag is of no problem with any current + payload and makes this implementation easier. */ + cld + + /* ljmp */ + .byte 0xea +VARIABLE(grub_relocator16_ip) + .word 0 +VARIABLE(grub_relocator16_cs) + .word 0 + + .code32 + + /* GDT. Copied from loader/i386/linux.c. */ + .p2align 4 +LOCAL(gdt): + .word 0, 0 + .byte 0, 0, 0, 0 + + /* -- code segment -- + * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present + * type = 32bit code execute/read, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x9A, 0xCF, 0 + + /* -- data segment -- + * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present + * type = 32 bit data read/write, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0xCF, 0 + + /* -- 16 bit real mode CS -- + * base = 0x00000000, limit 0x0FFFF (1 B Granularity), present + * type = 16 bit code execute/read only/conforming, DPL = 0 + */ + .word 0xFFFF +LOCAL(cs_base_bytes12): + .word 0 +LOCAL(cs_base_byte3): + .byte 0 + + .byte 0x9E, 0, 0 + + /* -- 16 bit real mode DS -- + * base = 0x00000000, limit 0x0FFFF (1 B Granularity), present + * type = 16 bit data read/write, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0, 0 + + .p2align 4 +LOCAL(gdtdesc): + .word 0x27 +LOCAL(gdt_addr): +#ifdef __x86_64__ + /* Filled by the code. */ + .quad 0 +#else + /* Filled by the code. */ + .long 0 +#endif + + .p2align 4 +LOCAL(jump_vector): + /* Jump location. Is filled by the code */ + .long 0 + .long CODE_SEGMENT + +VARIABLE(grub_relocator16_end) From 14dacc815aa9a923ffe68c9e355ea38e7c90ce15 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 22:16:33 +0100 Subject: [PATCH 019/271] Clarify type of cmd_line_ptr --- include/grub/i386/linux.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/grub/i386/linux.h b/include/grub/i386/linux.h index 8a5a84da3..ecda4ed94 100644 --- a/include/grub/i386/linux.h +++ b/include/grub/i386/linux.h @@ -124,7 +124,7 @@ struct linux_kernel_header grub_uint32_t bootsect_kludge; /* obsolete */ grub_uint16_t heap_end_ptr; /* Free memory after setup end */ grub_uint16_t pad1; /* Unused */ - char *cmd_line_ptr; /* Points to the kernel command line */ + grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */ grub_uint32_t initrd_addr_max; /* Highest address for initrd */ } __attribute__ ((packed)); From c911e8791afe1cca5610d3b06aa6815a9ed845a2 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 22:17:26 +0100 Subject: [PATCH 020/271] Port linux16 to relocator framework --- include/grub/i386/loader.h | 37 ---------- loader/i386/pc/linux.c | 144 ++++++++++++++++++++++++------------- 2 files changed, 93 insertions(+), 88 deletions(-) diff --git a/include/grub/i386/loader.h b/include/grub/i386/loader.h index 0df5f757f..e69de29bb 100644 --- a/include/grub/i386/loader.h +++ b/include/grub/i386/loader.h @@ -1,37 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2003,2004,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 . - */ - -#ifndef GRUB_LOADER_CPU_HEADER -#define GRUB_LOADER_CPU_HEADER 1 - -#include -#include -#include - -extern grub_addr_t EXPORT_VAR(grub_os_area_addr); -extern grub_size_t EXPORT_VAR(grub_os_area_size); - -#ifdef GRUB_MACHINE_PCBIOS -extern grub_uint32_t EXPORT_VAR(grub_linux_prot_size); -extern char *EXPORT_VAR(grub_linux_tmp_addr); -extern char *EXPORT_VAR(grub_linux_real_addr); -extern grub_int32_t EXPORT_VAR(grub_linux_is_bzimage); -grub_err_t EXPORT_FUNC(grub_linux16_boot) (void); -#endif - -#endif /* ! GRUB_LOADER_CPU_HEADER */ diff --git a/loader/i386/pc/linux.c b/loader/i386/pc/linux.c index 24bb39555..6c29029f2 100644 --- a/loader/i386/pc/linux.c +++ b/loader/i386/pc/linux.c @@ -31,6 +31,8 @@ #include #include #include +#include +#include #define GRUB_LINUX_CL_OFFSET 0x9000 #define GRUB_LINUX_CL_END_OFFSET 0x90FF @@ -39,12 +41,34 @@ static grub_dl_t my_mod; static grub_size_t linux_mem_size; static int loaded; +static struct grub_relocator *relocator = NULL; +static grub_addr_t grub_linux_real_target; +static char *grub_linux_real_chunk; +static grub_size_t grub_linux16_prot_size; + +static grub_err_t +grub_linux16_boot (void) +{ + grub_uint16_t segment; + struct grub_relocator16_state state; + + segment = grub_linux_real_target >> 4; + state.gs = state.fs = state.es = state.ds = state.ss = segment; + state.sp = GRUB_LINUX_SETUP_STACK; + state.cs = segment + 0x20; + state.ip = 0; + + return grub_relocator16_boot (relocator, state); +} + static grub_err_t grub_linux_unload (void) { grub_dl_unref (my_mod); loaded = 0; + grub_relocator_unload (relocator); + relocator = NULL; return GRUB_ERR_NONE; } @@ -55,10 +79,14 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), grub_file_t file = 0; struct linux_kernel_header lh; grub_uint8_t setup_sects; - grub_size_t real_size, prot_size; + grub_size_t real_size; grub_ssize_t len; int i; char *dest; + char *grub_linux_prot_chunk; + int grub_linux_is_bzimage; + grub_addr_t grub_linux_prot_target; + grub_err_t err; grub_dl_ref (my_mod); @@ -72,14 +100,6 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), if (! file) goto fail; - if ((grub_size_t) grub_file_size (file) > grub_os_area_size) - { - grub_error (GRUB_ERR_OUT_OF_RANGE, "too big kernel (0x%x > 0x%x)", - (grub_size_t) grub_file_size (file), - grub_os_area_size); - goto fail; - } - if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) { grub_error (GRUB_ERR_READ_ERROR, "cannot read the Linux header"); @@ -109,12 +129,11 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), lh.type_of_loader = GRUB_LINUX_BOOT_LOADER_TYPE; /* Put the real mode part at as a high location as possible. */ - grub_linux_real_addr - = (char *) UINT_TO_PTR (grub_mmap_get_lower () - - GRUB_LINUX_SETUP_MOVE_SIZE); + grub_linux_real_target = grub_mmap_get_lower () + - GRUB_LINUX_SETUP_MOVE_SIZE; /* But it must not exceed the traditional area. */ - if (grub_linux_real_addr > (char *) GRUB_LINUX_OLD_REAL_MODE_ADDR) - grub_linux_real_addr = (char *) GRUB_LINUX_OLD_REAL_MODE_ADDR; + if (grub_linux_real_target > GRUB_LINUX_OLD_REAL_MODE_ADDR) + grub_linux_real_target = GRUB_LINUX_OLD_REAL_MODE_ADDR; if (grub_le_to_cpu16 (lh.version) >= 0x0201) { @@ -123,7 +142,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), } if (grub_le_to_cpu16 (lh.version) >= 0x0202) - lh.cmd_line_ptr = grub_linux_real_addr + GRUB_LINUX_CL_OFFSET; + lh.cmd_line_ptr = grub_linux_real_target + GRUB_LINUX_CL_OFFSET; else { lh.cl_magic = grub_cpu_to_le16 (GRUB_LINUX_CL_MAGIC); @@ -139,7 +158,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), setup_sects = GRUB_LINUX_DEFAULT_SETUP_SECTS; - grub_linux_real_addr = (char *) GRUB_LINUX_OLD_REAL_MODE_ADDR; + grub_linux_real_target = GRUB_LINUX_OLD_REAL_MODE_ADDR; } /* If SETUP_SECTS is not set, set it to the default (4). */ @@ -147,31 +166,36 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), setup_sects = GRUB_LINUX_DEFAULT_SETUP_SECTS; real_size = setup_sects << GRUB_DISK_SECTOR_BITS; - prot_size = grub_file_size (file) - real_size - GRUB_DISK_SECTOR_SIZE; - - grub_linux_tmp_addr = (char *) GRUB_LINUX_BZIMAGE_ADDR + prot_size; + grub_linux16_prot_size = grub_file_size (file) + - real_size - GRUB_DISK_SECTOR_SIZE; if (! grub_linux_is_bzimage - && ((char *) GRUB_LINUX_ZIMAGE_ADDR + prot_size > grub_linux_real_addr)) + && GRUB_LINUX_ZIMAGE_ADDR + grub_linux16_prot_size + > grub_linux_real_target) { grub_error (GRUB_ERR_BAD_OS, "too big zImage (0x%x > 0x%x), use bzImage instead", - (char *) GRUB_LINUX_ZIMAGE_ADDR + prot_size, - (grub_size_t) grub_linux_real_addr); + (char *) GRUB_LINUX_ZIMAGE_ADDR + grub_linux16_prot_size, + (grub_size_t) grub_linux_real_target); goto fail; } - if (grub_linux_real_addr + GRUB_LINUX_SETUP_MOVE_SIZE - > (char *) UINT_TO_PTR (grub_mmap_get_lower ())) + if (grub_linux_real_target + GRUB_LINUX_SETUP_MOVE_SIZE + > grub_mmap_get_lower ()) { grub_error (GRUB_ERR_OUT_OF_RANGE, "too small lower memory (0x%x > 0x%x)", - grub_linux_real_addr + GRUB_LINUX_SETUP_MOVE_SIZE, + grub_linux_real_target + GRUB_LINUX_SETUP_MOVE_SIZE, (int) grub_mmap_get_lower ()); goto fail; } grub_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", - grub_linux_is_bzimage ? "bzImage" : "zImage", real_size, prot_size); + grub_linux_is_bzimage ? "bzImage" : "zImage", real_size, + grub_linux16_prot_size); + + relocator = grub_relocator_new (); + if (!relocator) + goto fail; for (i = 1; i < argc; i++) if (grub_memcmp (argv[i], "vga=", 4) == 0) @@ -229,11 +253,18 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), } } + err = grub_relocator_alloc_chunk_addr (relocator, (void **) + &grub_linux_real_chunk, + grub_linux_real_target, + GRUB_LINUX_SETUP_MOVE_SIZE); + if (err) + return err; + /* Put the real mode code at the temporary address. */ - grub_memmove (grub_linux_tmp_addr, &lh, sizeof (lh)); + grub_memmove (grub_linux_real_chunk, &lh, sizeof (lh)); len = real_size + GRUB_DISK_SECTOR_SIZE - sizeof (lh); - if (grub_file_read (file, grub_linux_tmp_addr + sizeof (lh), len) != len) + if (grub_file_read (file, grub_linux_real_chunk + sizeof (lh), len) != len) { grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); goto fail; @@ -242,21 +273,21 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), if (lh.header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) || grub_le_to_cpu16 (lh.version) < 0x0200) /* Clear the heap space. */ - grub_memset (grub_linux_tmp_addr + grub_memset (grub_linux_real_chunk + ((setup_sects + 1) << GRUB_DISK_SECTOR_BITS), 0, ((GRUB_LINUX_MAX_SETUP_SECTS - setup_sects - 1) << GRUB_DISK_SECTOR_BITS)); /* Specify the boot file. */ - dest = grub_stpcpy (grub_linux_tmp_addr + GRUB_LINUX_CL_OFFSET, + dest = grub_stpcpy (grub_linux_real_chunk + GRUB_LINUX_CL_OFFSET, "BOOT_IMAGE="); dest = grub_stpcpy (dest, argv[0]); /* Copy kernel parameters. */ for (i = 1; i < argc - && dest + grub_strlen (argv[i]) + 1 < (grub_linux_tmp_addr + && dest + grub_strlen (argv[i]) + 1 < (grub_linux_real_chunk + GRUB_LINUX_CL_END_OFFSET); i++) { @@ -264,14 +295,25 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), dest = grub_stpcpy (dest, argv[i]); } - len = prot_size; - if (grub_file_read (file, (void *) GRUB_LINUX_BZIMAGE_ADDR, len) != len) + if (grub_linux_is_bzimage) + grub_linux_prot_target = GRUB_LINUX_BZIMAGE_ADDR; + else + grub_linux_prot_target = GRUB_LINUX_ZIMAGE_ADDR; + err = grub_relocator_alloc_chunk_addr (relocator, + (void **) &grub_linux_prot_chunk, + grub_linux_prot_target, + grub_linux16_prot_size); + if (err) + return err; + + len = grub_linux16_prot_size; + if (grub_file_read (file, grub_linux_prot_chunk, grub_linux16_prot_size) + != (grub_ssize_t) grub_linux16_prot_size) grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); if (grub_errno == GRUB_ERR_NONE) { - grub_linux_prot_size = prot_size; - grub_loader_set (grub_linux16_boot, grub_linux_unload, 1); + grub_loader_set (grub_linux16_boot, grub_linux_unload, 0); loaded = 1; } @@ -284,6 +326,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), { grub_dl_unref (my_mod); loaded = 0; + grub_relocator_unload (relocator); } return grub_errno; @@ -295,8 +338,11 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), { grub_file_t file = 0; grub_ssize_t size; - grub_addr_t addr_max, addr_min, addr; + grub_addr_t addr_max, addr_min; struct linux_kernel_header *lh; + grub_uint8_t *initrd_chunk; + grub_addr_t initrd_addr; + grub_err_t err; if (argc == 0) { @@ -310,7 +356,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), goto fail; } - lh = (struct linux_kernel_header *) grub_linux_tmp_addr; + lh = (struct linux_kernel_header *) grub_linux_real_chunk; if (!(lh->header == grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) && grub_le_to_cpu16 (lh->version) >= 0x0200)) @@ -342,10 +388,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), worse than that of Linux 2.3.xx, so avoid the last 64kb. */ addr_max -= 0x10000; - if (addr_max > grub_os_area_addr + grub_os_area_size) - addr_max = grub_os_area_addr + grub_os_area_size; - - addr_min = (grub_addr_t) grub_linux_tmp_addr + GRUB_LINUX_CL_END_OFFSET; + addr_min = GRUB_LINUX_BZIMAGE_ADDR + grub_linux16_prot_size; file = grub_file_open (argv[0]); if (!file) @@ -353,22 +396,21 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), size = grub_file_size (file); - /* Put the initrd as high as possible, 4KiB aligned. */ - addr = (addr_max - size) & ~0xFFF; + err = grub_relocator_alloc_chunk_align (relocator, (void **) &initrd_chunk, + &initrd_addr, + addr_min, addr_max - size, + size, 0x1000, + GRUB_RELOCATOR_PREFERENCE_HIGH); + if (err) + return err; - if (addr < addr_min) - { - grub_error (GRUB_ERR_OUT_OF_RANGE, "the initrd is too big"); - goto fail; - } - - if (grub_file_read (file, (void *) addr, size) != size) + if (grub_file_read (file, initrd_chunk, size) != size) { grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); goto fail; } - lh->ramdisk_image = addr; + lh->ramdisk_image = initrd_addr; lh->ramdisk_size = size; fail: From 1b86596ae19abef99da535cefc70305b64f501f7 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 22:17:44 +0100 Subject: [PATCH 021/271] Remove OS area --- kern/i386/pc/init.c | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/kern/i386/pc/init.c b/kern/i386/pc/init.c index 3885bba7a..382e097e4 100644 --- a/kern/i386/pc/init.c +++ b/kern/i386/pc/init.c @@ -43,9 +43,6 @@ struct mem_region static struct mem_region mem_regions[MAX_REGIONS]; static int num_regions; -grub_addr_t grub_os_area_addr; -grub_size_t grub_os_area_size; - void grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) @@ -186,25 +183,9 @@ grub_machine_init (void) compact_mem_regions (); - /* Add the memory regions to free memory, except for the region starting - from 1MB. This region is partially used for loading OS images. - For now, 1/4 of this is added to free memory. */ for (i = 0; i < num_regions; i++) - /* if (mem_regions[i].addr == 0x100000) - { - grub_size_t quarter = mem_regions[i].size >> 2; - - grub_os_area_addr = mem_regions[i].addr; - grub_os_area_size = mem_regions[i].size - quarter; - grub_mm_init_region ((void *) (grub_os_area_addr + grub_os_area_size), - quarter); - } - else*/ grub_mm_init_region ((void *) mem_regions[i].addr, mem_regions[i].size); - // if (! grub_os_area_addr) - //grub_fatal ("no upper memory"); - grub_tsc_init (); } From e6e7b4ea1f4d29fd17a72cf891e604d4af0e1ad3 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 22:22:36 +0100 Subject: [PATCH 022/271] Remove i386/loader.h --- include/grub/i386/loader.h | 0 include/grub/i386/pc/loader.h | 1 - loader/i386/bsd.c | 1 - loader/i386/bsdXX.c | 1 - 4 files changed, 3 deletions(-) delete mode 100644 include/grub/i386/loader.h diff --git a/include/grub/i386/loader.h b/include/grub/i386/loader.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/include/grub/i386/pc/loader.h b/include/grub/i386/pc/loader.h index 3e031413b..bfbcaac5a 100644 --- a/include/grub/i386/pc/loader.h +++ b/include/grub/i386/pc/loader.h @@ -20,7 +20,6 @@ #define GRUB_LOADER_MACHINE_HEADER 1 #include -#include /* This is an asm part of the chainloader. */ void EXPORT_FUNC(grub_chainloader_real_boot) (int drive, void *part_addr) __attribute__ ((noreturn)); diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 28bcde15e..9c42f6a5c 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -17,7 +17,6 @@ */ #include -#include #include #include #include diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index 8f5cfa750..ad6c1bc75 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -3,7 +3,6 @@ #include #include #include -#include #include #define ALIGN_PAGE(a) ALIGN_UP (a, 4096) From e39029dd1ea7c7aa9718940da2baecd3712bf21f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 22:24:41 +0100 Subject: [PATCH 023/271] Remove i386/loader.S --- kern/i386/loader.S | 120 ----------------------------------------- kern/i386/pc/startup.S | 2 - 2 files changed, 122 deletions(-) delete mode 100644 kern/i386/loader.S diff --git a/kern/i386/loader.S b/kern/i386/loader.S deleted file mode 100644 index 3e9c71327..000000000 --- a/kern/i386/loader.S +++ /dev/null @@ -1,120 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008 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 . - */ - - -/* - * Note: These functions defined in this file may be called from C. - * Be careful of that you must not modify some registers. Quote - * from gcc-2.95.2/gcc/config/i386/i386.h: - - 1 for registers not available across function calls. - These must include the FIXED_REGISTERS and also any - registers that can be used without being saved. - The latter must include the registers where values are returned - and the register where structure-value addresses are passed. - Aside from that, you can include as many other registers as you like. - - ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg -{ 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } - */ - -/* - * Note: GRUB is compiled with the options -mrtd and -mregparm=3. - * So the first three arguments are passed in %eax, %edx, and %ecx, - * respectively, and if a function has a fixed number of arguments - * and the number if greater than three, the function must return - * with "ret $N" where N is ((the number of arguments) - 3) * 4. - */ - -/* - * This is the area for all of the special variables. - */ - - .p2align 2 /* force 4-byte alignment */ - -/* - * void grub_linux_boot_zimage (void) - */ -VARIABLE(grub_linux_prot_size) - .long 0 -VARIABLE(grub_linux_tmp_addr) - .long 0 -VARIABLE(grub_linux_real_addr) - .long 0 -VARIABLE(grub_linux_is_bzimage) - .long 0 - -FUNCTION(grub_linux16_boot) - /* Must be done before zImage copy. */ - call EXT_C(grub_dl_unload_all) - - movl EXT_C(grub_linux_is_bzimage), %ebx - test %ebx, %ebx - jne bzimage - - /* copy the kernel */ - movl EXT_C(grub_linux_prot_size), %ecx - addl $3, %ecx - shrl $2, %ecx - movl $GRUB_LINUX_BZIMAGE_ADDR, %esi - movl $GRUB_LINUX_ZIMAGE_ADDR, %edi - cld - rep - movsl - -bzimage: - movl EXT_C(grub_linux_real_addr), %ebx - - /* copy the real mode code */ - movl EXT_C(grub_linux_tmp_addr), %esi - movl %ebx, %edi - movl $GRUB_LINUX_SETUP_MOVE_SIZE, %ecx - cld - rep - movsb - - /* change %ebx to the segment address */ - shrl $4, %ebx - movl %ebx, %eax - addl $0x20, %eax - movw %ax, linux_setup_seg - - /* XXX new stack pointer in safe area for calling functions */ - movl $0x4000, %esp - call EXT_C(grub_stop_floppy) - - /* final setup for linux boot */ - call prot_to_real - .code16 - - cli - movw %bx, %ss - movw $GRUB_LINUX_SETUP_STACK, %sp - - movw %bx, %ds - movw %bx, %es - movw %bx, %fs - movw %bx, %gs - - /* ljmp */ - .byte 0xea - .word 0 -linux_setup_seg: - .word 0 - .code32 - diff --git a/kern/i386/pc/startup.S b/kern/i386/pc/startup.S index 23f3f398e..1a44792d5 100644 --- a/kern/i386/pc/startup.S +++ b/kern/i386/pc/startup.S @@ -564,8 +564,6 @@ FUNCTION(grub_chainloader_real_boot) ljmp $0, $GRUB_MEMORY_MACHINE_BOOT_LOADER_ADDR .code32 -#include "../loader.S" - /* * int grub_biosdisk_rw_int13_extensions (int ah, int drive, void *dap) * From 11aadbadfbff8c8235494c466f07e66d62a8e2ef Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 23:03:56 +0100 Subject: [PATCH 024/271] fix compilation on coreboot --- conf/i386-coreboot.rmk | 8 ++++---- conf/i386-efi.rmk | 4 ++-- conf/i386-ieee1275.rmk | 6 +++--- conf/i386-pc.rmk | 2 +- conf/powerpc-ieee1275.rmk | 4 ++-- conf/sparc64-ieee1275.rmk | 4 ++-- conf/x86_64-efi.rmk | 2 +- include/grub/i386/coreboot/loader.h | 1 - include/grub/i386/qemu/loader.h | 1 - kern/i386/coreboot/init.c | 18 +----------------- loader/i386/linux.c | 1 - loader/i386/multiboot.c | 1 - 12 files changed, 16 insertions(+), 36 deletions(-) delete mode 100644 include/grub/i386/coreboot/loader.h delete mode 100644 include/grub/i386/qemu/loader.h diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk index 8676aaea3..6b3d32847 100644 --- a/conf/i386-coreboot.rmk +++ b/conf/i386-coreboot.rmk @@ -32,10 +32,10 @@ kernel_img_SOURCES = kern/i386/coreboot/startup.S \ term/i386/pc/vga_text.c term/i386/vga_common.c \ symlist.c kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ - env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ + env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ machine/boot.h machine/console.h machine/init.h \ - machine/memory.h machine/loader.h list.h handler.h command.h i18n.h + machine/memory.h list.h handler.h command.h i18n.h mm_private.h kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,$(GRUB_KERNEL_MACHINE_LINK_ADDR),-Bstatic @@ -76,10 +76,10 @@ kernel_img_SOURCES = kern/i386/qemu/startup.S \ term/i386/pc/vga_text.c term/i386/vga_common.c \ symlist.c kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ - env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ + env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ machine/boot.h machine/console.h machine/init.h \ - machine/memory.h machine/loader.h list.h handler.h command.h i18n.h + machine/memory.h list.h handler.h command.h i18n.h mm_private.h kernel_img_CFLAGS = $(COMMON_CFLAGS) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR) kernel_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)$(GRUB_KERNEL_MACHINE_LINK_ADDR) diff --git a/conf/i386-efi.rmk b/conf/i386-efi.rmk index f3281a1bc..673349858 100644 --- a/conf/i386-efi.rmk +++ b/conf/i386-efi.rmk @@ -49,9 +49,9 @@ kernel_img_SOURCES = kern/i386/efi/startup.S kern/main.c kern/device.c \ kern/generic/rtc_get_time_ms.c \ kern/generic/millisleep.c kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ - env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ + env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ - efi/efi.h efi/time.h efi/disk.h i386/pit.h list.h handler.h command.h i18n.h + efi/efi.h efi/time.h efi/disk.h i386/pit.h list.h handler.h command.h i18n.h mm_private.h kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk index 5c3a5aaf6..b9e192796 100644 --- a/conf/i386-ieee1275.rmk +++ b/conf/i386-ieee1275.rmk @@ -30,10 +30,10 @@ kernel_img_SOURCES = kern/i386/ieee1275/startup.S \ disk/ieee1275/ofdisk.c \ symlist.c kernel_img_HEADERS = cache.h device.h disk.h dl.h elf.h elfload.h \ - env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ + env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ - ieee1275/ieee1275.h machine/kernel.h machine/loader.h machine/memory.h \ - list.h handler.h command.h i18n.h + ieee1275/ieee1275.h machine/kernel.h machine/memory.h \ + list.h handler.h command.h i18n.h mm_private.h kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,0x10000,-Bstatic diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 36ca76950..6f7b4f26c 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -60,7 +60,7 @@ kernel_img_SOURCES = kern/i386/pc/startup.S \ term/i386/pc/console.c term/i386/vga_common.c \ symlist.c kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ - env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ + env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ machine/biosdisk.h machine/boot.h machine/console.h machine/init.h \ machine/memory.h machine/loader.h machine/vga.h machine/vbe.h \ diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk index 854ad50b7..fd6230771 100644 --- a/conf/powerpc-ieee1275.rmk +++ b/conf/powerpc-ieee1275.rmk @@ -15,9 +15,9 @@ DEFSYMFILES += kernel_syms.lst kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h reader.h \ - symbol.h term.h time.h types.h powerpc/libgcc.h loader.h partition.h \ + symbol.h term.h time.h types.h powerpc/libgcc.h partition.h \ msdos_partition.h ieee1275/ieee1275.h machine/kernel.h handler.h list.h \ - command.h i18n.h + command.h i18n.h mm_private.h symlist.c: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h gensymlist.sh /bin/sh gensymlist.sh $(filter %.h,$^) > $@ || (rm -f $@; exit 1) diff --git a/conf/sparc64-ieee1275.rmk b/conf/sparc64-ieee1275.rmk index 4ba098619..a056ddc67 100644 --- a/conf/sparc64-ieee1275.rmk +++ b/conf/sparc64-ieee1275.rmk @@ -27,11 +27,11 @@ MOSTLYCLEANFILES += symlist.c kernel_syms.lst DEFSYMFILES += kernel_syms.lst kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ - env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ + env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ list.h handler.h command.h i18n.h \ sparc64/libgcc.h ieee1275/ieee1275.h machine/kernel.h \ - sparc64/ieee1275/ieee1275.h + sparc64/ieee1275/ieee1275.h mm_private.h kernel_img_SOURCES = kern/sparc64/ieee1275/crt0.S kern/ieee1275/cmain.c \ kern/ieee1275/ieee1275.c kern/main.c kern/device.c \ kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \ diff --git a/conf/x86_64-efi.rmk b/conf/x86_64-efi.rmk index 4f6ace057..19220610d 100644 --- a/conf/x86_64-efi.rmk +++ b/conf/x86_64-efi.rmk @@ -51,7 +51,7 @@ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ efi/efi.h efi/time.h efi/disk.h machine/loader.h i386/pit.h list.h \ - handler.h command.h i18n.h + handler.h command.h i18n.h mm_private.h kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/include/grub/i386/coreboot/loader.h b/include/grub/i386/coreboot/loader.h deleted file mode 100644 index d3f36bba5..000000000 --- a/include/grub/i386/coreboot/loader.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/include/grub/i386/qemu/loader.h b/include/grub/i386/qemu/loader.h deleted file mode 100644 index d3f36bba5..000000000 --- a/include/grub/i386/qemu/loader.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/kern/i386/coreboot/init.c b/kern/i386/coreboot/init.c index 550a2a60a..7d8b1270b 100644 --- a/kern/i386/coreboot/init.c +++ b/kern/i386/coreboot/init.c @@ -41,9 +41,6 @@ extern char _start[]; extern char _end[]; -grub_addr_t grub_os_area_addr; -grub_size_t grub_os_area_size; - grub_uint32_t grub_get_rtc (void) { @@ -105,20 +102,7 @@ grub_machine_init (void) } } - if (addr == GRUB_MEMORY_MACHINE_UPPER_START - || (addr >= GRUB_MEMORY_MACHINE_LOWER_SIZE - && addr <= GRUB_MEMORY_MACHINE_UPPER_START - && (addr + size > GRUB_MEMORY_MACHINE_UPPER_START))) - { - grub_size_t quarter = size >> 2; - - grub_os_area_addr = addr; - grub_os_area_size = size - quarter; - grub_mm_init_region ((void *) (grub_os_area_addr + grub_os_area_size), - quarter); - } - else - grub_mm_init_region ((void *) (grub_addr_t) addr, (grub_size_t) size); + grub_mm_init_region ((void *) (grub_addr_t) addr, (grub_size_t) size); return 0; } diff --git a/loader/i386/linux.c b/loader/i386/linux.c index b6298d0bb..ec6a5bb3b 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -18,7 +18,6 @@ #include #include -#include #include #include #include diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c index 2f9cc73c9..be11fe20b 100644 --- a/loader/i386/multiboot.c +++ b/loader/i386/multiboot.c @@ -31,7 +31,6 @@ #define UNSUPPORTED_FLAGS 0x0000fff0 #include -#include #include #include #include From 73f6ce4ab24fe5b7e1965402e62b8811014a4588 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 12 Jan 2010 23:30:52 +0100 Subject: [PATCH 025/271] x86_64 support for relocator --- conf/i386.rmk | 2 +- conf/x86_64-efi.rmk | 4 +++- lib/i386/relocator.c | 28 +++++++++++++++++++++------- lib/i386/relocator16.S | 4 ++-- lib/i386/relocator32.S | 2 +- lib/i386/relocator64.S | 4 ++-- lib/relocator.c | 16 ++++++++-------- 7 files changed, 38 insertions(+), 22 deletions(-) diff --git a/conf/i386.rmk b/conf/i386.rmk index 2efd9895a..d7417f444 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -18,7 +18,7 @@ vga_text_mod_LDFLAGS = $(COMMON_LDFLAGS) pkglib_MODULES += relocator.mod relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ lib/i386/relocator64.S lib/i386/relocator16.S \ - lib/i386/relocator_asm.S lib/i386/relocator.c + lib/$(target_cpu)/relocator_asm.S lib/i386/relocator.c relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/conf/x86_64-efi.rmk b/conf/x86_64-efi.rmk index 19220610d..36d6579de 100644 --- a/conf/x86_64-efi.rmk +++ b/conf/x86_64-efi.rmk @@ -167,7 +167,9 @@ xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) xnu_mod_ASFLAGS = $(COMMON_ASFLAGS) pkglib_MODULES += relocator.mod -relocator_mod_SOURCES = lib/i386/relocator.c lib/i386/relocator_asm.S lib/i386/relocator_backward.S +relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ + lib/i386/relocator64.S lib/i386/relocator16.S \ + lib/$(target_cpu)/relocator_asm.S lib/i386/relocator.c relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 5757bb6df..d040c80ab 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -77,7 +77,11 @@ extern grub_addr_t grub_relocator64_cr3; grub_size_t grub_relocator_align = 1; grub_size_t grub_relocator_forward_size; grub_size_t grub_relocator_backward_size; -grub_size_t grub_relocator_jumper_size = 10; +#ifdef __x86_64__ +grub_size_t grub_relocator_jumper_size = 12; +#else +grub_size_t grub_relocator_jumper_size = 7; +#endif void grub_cpu_relocator_init (void) @@ -91,16 +95,26 @@ grub_cpu_relocator_jumper (void *rels, grub_addr_t addr) { grub_uint8_t *ptr; ptr = rels; - /* movl $addr, %eax (for relocator) */ +#ifdef __x86_64__ + /* movq imm64, %rax (for relocator) */ + *(grub_uint8_t *) ptr = 0x48; + ptr++; + *(grub_uint8_t *) ptr = 0xb8; + ptr++; + *(grub_uint64_t *) ptr = addr; + ptr += sizeof (grub_uint64_t); +#else + /* movl imm32, %eax (for relocator) */ *(grub_uint8_t *) ptr = 0xb8; ptr++; *(grub_uint32_t *) ptr = addr; - ptr += 4; - /* jmp $addr */ - *(grub_uint8_t *) ptr = 0xe9; + ptr += sizeof (grub_uint32_t); +#endif + /* jmp $eax/$rax */ + *(grub_uint8_t *) ptr = 0xff; + ptr++; + *(grub_uint8_t *) ptr = 0xe0; ptr++; - *(grub_uint32_t *) ptr = addr - (grub_uint32_t) (ptr + 4); - ptr += 4; } void diff --git a/lib/i386/relocator16.S b/lib/i386/relocator16.S index d35adecd8..7d65e4dbe 100644 --- a/lib/i386/relocator16.S +++ b/lib/i386/relocator16.S @@ -21,7 +21,7 @@ #ifdef __x86_64__ #define RAX %rax -#define RSI %rdi +#define RSI %rsi #else #define RAX %eax #define RSI %esi @@ -93,7 +93,7 @@ LOCAL(cont1): movl %esi, %eax shrl $4, %eax - movw %ax, (LOCAL (segment) - LOCAL (base)) (RSI, 1) + movw %ax, (LOCAL (segment) - LOCAL (base)) (%esi, 1) /* jump to a 16 bit segment */ ljmp $PSEUDO_REAL_CSEG, $(LOCAL (cont2) - LOCAL(base)) diff --git a/lib/i386/relocator32.S b/lib/i386/relocator32.S index 4e0553c03..4f79151e2 100644 --- a/lib/i386/relocator32.S +++ b/lib/i386/relocator32.S @@ -21,7 +21,7 @@ #ifdef __x86_64__ #define RAX %rax -#define RSI %rdi +#define RSI %rsi #else #define RAX %eax #define RSI %esi diff --git a/lib/i386/relocator64.S b/lib/i386/relocator64.S index 42f61e32e..05627fb90 100644 --- a/lib/i386/relocator64.S +++ b/lib/i386/relocator64.S @@ -21,7 +21,7 @@ #ifdef __x86_64__ #define RAX %rax -#define RSI %rdi +#define RSI %rsi #else #define RAX %eax #define RSI %esi @@ -82,7 +82,7 @@ VARIABLE(grub_relocator64_cr3) .byte 0xb8 VARIABLE(grub_relocator64_cr3) .quad 0 - movl %rax, %cr3 + movq %rax, %cr3 #endif /* Load GDT. */ lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) diff --git a/lib/relocator.c b/lib/relocator.c index a5b3c6daf..84ead99b1 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -40,7 +40,7 @@ grub_relocator_new (void) ret->postchunks = ~(grub_addr_t) 0; ret->relocators_size = grub_relocator_jumper_size; - grub_dprintf ("relocator", "relocators_size=%d\n", ret->relocators_size); + grub_dprintf ("relocator", "relocators_size=%ld\n", ret->relocators_size); return ret; } @@ -103,7 +103,7 @@ get_best_header (struct grub_relocator *rel, hb = h; hbp = hp; *best_addr = addr; - grub_dprintf ("relocator", "picked %p/%x\n", hb, addr); + grub_dprintf ("relocator", "picked %p/%lx\n", hb, addr); } } else @@ -146,7 +146,7 @@ get_best_header (struct grub_relocator *rel, hb = h; hbp = hp; *best_addr = addr; - grub_dprintf ("relocator", "picked %p/%x\n", hb, addr); + grub_dprintf ("relocator", "picked %p/%lx\n", hb, addr); } } } @@ -221,7 +221,7 @@ malloc_in_range (struct grub_relocator *rel, hb = get_best_header (rel, start, end, align, size, rb, &hbp, &best_addr, from_low_priv, collisioncheck); - grub_dprintf ("relocator", "best header %p/%x\n", hb, best_addr); + grub_dprintf ("relocator", "best header %p/%lx\n", hb, best_addr); if (!hb) { @@ -421,14 +421,14 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, rel->highestnonpostaddr = start + size; } - grub_dprintf ("relocator", "relocators_size=%d\n", rel->relocators_size); + grub_dprintf ("relocator", "relocators_size=%ld\n", rel->relocators_size); if (start < target) rel->relocators_size += grub_relocator_backward_size; if (start > target) rel->relocators_size += grub_relocator_forward_size; - grub_dprintf ("relocator", "relocators_size=%d\n", rel->relocators_size); + grub_dprintf ("relocator", "relocators_size=%ld\n", rel->relocators_size); chunk->src = start; chunk->target = target; @@ -485,7 +485,7 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, } adjust_limits (rel, &min_addr2, &max_addr2, min_addr, max_addr); - grub_dprintf ("relocator", "Adjusted limits from %x-%x to %x-%x\n", + grub_dprintf ("relocator", "Adjusted limits from %lx-%lx to %lx-%lx\n", min_addr, max_addr, min_addr2, max_addr2); do @@ -572,7 +572,7 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, grub_addr_t rels; grub_addr_t rels0; - grub_dprintf ("relocator", "Preparing relocs (size=%d)\n", + grub_dprintf ("relocator", "Preparing relocs (size=%ld)\n", rel->relocators_size); if (!malloc_in_range (rel, 0, ~(grub_addr_t)0 - rel->relocators_size + 1, From 37480ee490b0f52d160f0f79fecbbbd0f07e6afd Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 13:41:15 +0100 Subject: [PATCH 026/271] Added needed casts --- lib/relocator.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 84ead99b1..889497334 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -40,7 +40,8 @@ grub_relocator_new (void) ret->postchunks = ~(grub_addr_t) 0; ret->relocators_size = grub_relocator_jumper_size; - grub_dprintf ("relocator", "relocators_size=%ld\n", ret->relocators_size); + grub_dprintf ("relocator", "relocators_size=%lu\n", + (unsigned long) ret->relocators_size); return ret; } @@ -103,7 +104,8 @@ get_best_header (struct grub_relocator *rel, hb = h; hbp = hp; *best_addr = addr; - grub_dprintf ("relocator", "picked %p/%lx\n", hb, addr); + grub_dprintf ("relocator", "picked %p/%lx\n", hb, + (unsigned long) addr); } } else @@ -146,7 +148,8 @@ get_best_header (struct grub_relocator *rel, hb = h; hbp = hp; *best_addr = addr; - grub_dprintf ("relocator", "picked %p/%lx\n", hb, addr); + grub_dprintf ("relocator", "picked %p/%lx\n", hb, + (unsigned long) addr); } } } @@ -221,7 +224,8 @@ malloc_in_range (struct grub_relocator *rel, hb = get_best_header (rel, start, end, align, size, rb, &hbp, &best_addr, from_low_priv, collisioncheck); - grub_dprintf ("relocator", "best header %p/%lx\n", hb, best_addr); + grub_dprintf ("relocator", "best header %p/%lx\n", hb, + (unsigned long) best_addr); if (!hb) { @@ -421,14 +425,16 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, rel->highestnonpostaddr = start + size; } - grub_dprintf ("relocator", "relocators_size=%ld\n", rel->relocators_size); + grub_dprintf ("relocator", "relocators_size=%ld\n", + (unsigned long) rel->relocators_size); if (start < target) rel->relocators_size += grub_relocator_backward_size; if (start > target) rel->relocators_size += grub_relocator_forward_size; - grub_dprintf ("relocator", "relocators_size=%ld\n", rel->relocators_size); + grub_dprintf ("relocator", "relocators_size=%ld\n", + (unsigned long) rel->relocators_size); chunk->src = start; chunk->target = target; @@ -486,7 +492,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, adjust_limits (rel, &min_addr2, &max_addr2, min_addr, max_addr); grub_dprintf ("relocator", "Adjusted limits from %lx-%lx to %lx-%lx\n", - min_addr, max_addr, min_addr2, max_addr2); + (unsigned long) min_addr, (unsigned long) max_addr, + (unsigned long) min_addr2, (unsigned long) max_addr2); do { @@ -573,7 +580,7 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, grub_addr_t rels0; grub_dprintf ("relocator", "Preparing relocs (size=%ld)\n", - rel->relocators_size); + (unsigned long) rel->relocators_size); if (!malloc_in_range (rel, 0, ~(grub_addr_t)0 - rel->relocators_size + 1, grub_relocator_align, From 19eb83d4860cb688e357e47eaebfde475da6b8c9 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 14:02:32 +0100 Subject: [PATCH 027/271] Include i386.rmk into x86_64-efi.rmk --- conf/x86_64-efi.rmk | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/conf/x86_64-efi.rmk b/conf/x86_64-efi.rmk index 36d6579de..235cf2b3d 100644 --- a/conf/x86_64-efi.rmk +++ b/conf/x86_64-efi.rmk @@ -77,11 +77,6 @@ acpi_mod_SOURCES = commands/acpi.c commands/efi/acpi.c acpi_mod_CFLAGS = $(COMMON_CFLAGS) acpi_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For ata.mod -ata_mod_SOURCES = disk/ata.c -ata_mod_CFLAGS = $(COMMON_CFLAGS) -ata_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For mmap.mod. mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c \ mmap/efi/mmap.c @@ -99,7 +94,7 @@ appleldr_mod_CFLAGS = $(COMMON_CFLAGS) appleldr_mod_LDFLAGS = $(COMMON_LDFLAGS) # For linux.mod. -linux_mod_SOURCES = loader/i386/efi/linux.c loader/i386/linux_trampoline.S +linux_mod_SOURCES = loader/i386/linux.c linux_mod_CFLAGS = $(COMMON_CFLAGS) linux_mod_ASFLAGS = $(COMMON_ASFLAGS) linux_mod_LDFLAGS = $(COMMON_LDFLAGS) @@ -166,12 +161,5 @@ xnu_mod_CFLAGS = $(COMMON_CFLAGS) xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) xnu_mod_ASFLAGS = $(COMMON_ASFLAGS) -pkglib_MODULES += relocator.mod -relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ - lib/i386/relocator64.S lib/i386/relocator16.S \ - lib/$(target_cpu)/relocator_asm.S lib/i386/relocator.c -relocator_mod_CFLAGS = $(COMMON_CFLAGS) -relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) -relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) - +include $(srcdir)/conf/i386.mk include $(srcdir)/conf/common.mk From ca732b36c1e0dcc4d7eee64628374ecfe5f925d3 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 14:03:18 +0100 Subject: [PATCH 028/271] Video driver ID. --- include/grub/video.h | 10 ++++++++++ video/efi_gop.c | 1 + video/efi_uga.c | 1 + video/i386/pc/vbe.c | 1 + video/video.c | 8 ++++++++ 5 files changed, 21 insertions(+) diff --git a/include/grub/video.h b/include/grub/video.h index 4145db465..985fa9208 100644 --- a/include/grub/video.h +++ b/include/grub/video.h @@ -159,10 +159,19 @@ struct grub_video_palette_data grub_uint8_t a; /* Reserved bits value (0-255). */ }; +typedef enum grub_video_driver_id + { + GRUB_VIDEO_DRIVER_NONE, + GRUB_VIDEO_DRIVER_VBE, + GRUB_VIDEO_DRIVER_EFI_UGA, + GRUB_VIDEO_DRIVER_EFI_GOP + } grub_video_driver_id_t; + struct grub_video_adapter { /* The video adapter name. */ const char *name; + grub_video_driver_id_t id; /* Initialize the video adapter. */ grub_err_t (*init) (void); @@ -309,5 +318,6 @@ grub_err_t grub_video_get_active_render_target (struct grub_video_render_target grub_err_t grub_video_set_mode (const char *modestring, int NESTED_FUNC_ATTR (*hook) (grub_video_adapter_t p, struct grub_video_mode_info *mode_info)); +grub_video_driver_id_t grub_video_get_driver_id (void); #endif /* ! GRUB_VIDEO_HEADER */ diff --git a/video/efi_gop.c b/video/efi_gop.c index 30863c1ed..13ef0ddae 100644 --- a/video/efi_gop.c +++ b/video/efi_gop.c @@ -353,6 +353,7 @@ grub_video_gop_get_info_and_fini (struct grub_video_mode_info *mode_info, static struct grub_video_adapter grub_video_gop_adapter = { .name = "EFI GOP driver", + .id = GRUB_VIDEO_DRIVER_EFI_GOP, .init = grub_video_gop_init, .fini = grub_video_gop_fini, diff --git a/video/efi_uga.c b/video/efi_uga.c index 12ca35cde..7ef7594cc 100644 --- a/video/efi_uga.c +++ b/video/efi_uga.c @@ -300,6 +300,7 @@ grub_video_uga_get_info_and_fini (struct grub_video_mode_info *mode_info, static struct grub_video_adapter grub_video_uga_adapter = { .name = "EFI UGA driver", + .id = GRUB_VIDEO_DRIVER_EFI_UGA, .init = grub_video_uga_init, .fini = grub_video_uga_fini, diff --git a/video/i386/pc/vbe.c b/video/i386/pc/vbe.c index 17d9b3282..918bab0b0 100644 --- a/video/i386/pc/vbe.c +++ b/video/i386/pc/vbe.c @@ -557,6 +557,7 @@ grub_video_vbe_get_info_and_fini (struct grub_video_mode_info *mode_info, static struct grub_video_adapter grub_video_vbe_adapter = { .name = "VESA BIOS Extension Video Driver", + .id = GRUB_VIDEO_DRIVER_VBE, .init = grub_video_vbe_init, .fini = grub_video_vbe_fini, diff --git a/video/video.c b/video/video.c index 682bebcbf..e678c2982 100644 --- a/video/video.c +++ b/video/video.c @@ -93,6 +93,14 @@ grub_video_get_info (struct grub_video_mode_info *mode_info) return grub_video_adapter_active->get_info (mode_info); } +grub_video_driver_id_t +grub_video_get_driver_id (void) +{ + if (! grub_video_adapter_active) + return GRUB_VIDEO_DRIVER_NONE; + return grub_video_adapter_active->id; +} + /* Get information about active video mode. */ grub_err_t grub_video_get_info_and_fini (struct grub_video_mode_info *mode_info, From c8142599fc5d26cbd22a5dae5cc23738ee65c2e5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 14:03:54 +0100 Subject: [PATCH 029/271] Merge i386/efi/linux.c into i386/linux.c --- include/grub/i386/linux.h | 6 +- loader/i386/linux.c | 184 ++++++++++++++++++++++++++++++++------ 2 files changed, 162 insertions(+), 28 deletions(-) diff --git a/include/grub/i386/linux.h b/include/grub/i386/linux.h index ecda4ed94..f2c93e419 100644 --- a/include/grub/i386/linux.h +++ b/include/grub/i386/linux.h @@ -79,9 +79,9 @@ struct grub_e820_mmap grub_uint32_t type; } __attribute__((packed)); -#define GRUB_VIDEO_TYPE_TEXT 0x01 -#define GRUB_VIDEO_TYPE_VLFB 0x23 /* VESA VGA in graphic mode */ -#define GRUB_VIDEO_TYPE_EFI 0x70 +#define GRUB_VIDEO_LINUX_TYPE_EGA_TEXT 0x01 +#define GRUB_VIDEO_LINUX_TYPE_VLFB 0x23 /* VESA VGA in graphic mode */ +#define GRUB_VIDEO_LINUX_TYPE_SIMPLE_LFB 0x70 /* Linear framebuffer without any additional functions. */ /* For the Linux/i386 boot protocol version 2.03. */ struct linux_kernel_header diff --git a/loader/i386/linux.c b/loader/i386/linux.c index ec6a5bb3b..691d0912d 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -31,11 +32,20 @@ #include #include #include -#include -#include #include #include +#ifdef GRUB_MACHINE_EFI +#include +#define HAS_VGA_TEXT 0 +#define DEFAULT_VIDEO_MODE "800x600" +#else +#include +#include +#define HAS_VGA_TEXT 1 +#define DEFAULT_VIDEO_MODE "text" +#endif + #define GRUB_LINUX_CL_OFFSET 0x1000 #define GRUB_LINUX_CL_END_OFFSET 0x2000 @@ -53,6 +63,8 @@ static grub_uint32_t real_mode_pages; static grub_uint32_t prot_mode_pages; static grub_uint32_t initrd_pages; static struct grub_relocator *relocator = NULL; +static void *efi_mmap_buf; +static grub_size_t efi_mmap_size; /* FIXME */ #if 0 @@ -244,6 +256,48 @@ page_align (grub_size_t size) return (size + (1 << 12) - 1) & (~((1 << 12) - 1)); } +#ifdef GRUB_MACHINE_EFI +/* Find the optimal number of pages for the memory map. Is it better to + move this code to efi/mm.c? */ +static grub_efi_uintn_t +find_efi_mmap_size (void) +{ + static grub_efi_uintn_t mmap_size = 0; + + if (mmap_size != 0) + return mmap_size; + + mmap_size = (1 << 12); + while (1) + { + int ret; + grub_efi_memory_descriptor_t *mmap; + grub_efi_uintn_t desc_size; + + mmap = grub_malloc (mmap_size); + if (! mmap) + return 0; + + ret = grub_efi_get_memory_map (&mmap_size, mmap, 0, &desc_size, 0); + grub_free (mmap); + + if (ret < 0) + grub_fatal ("cannot get memory map"); + else if (ret > 0) + break; + + mmap_size += (1 << 12); + } + + /* Increase the size a bit for safety, because GRUB allocates more on + later, and EFI itself may allocate more. */ + mmap_size += (1 << 12); + + return page_align (mmap_size); +} + +#endif + /* Find the optimal number of pages for the memory map. */ static grub_size_t find_mmap_size (void) @@ -292,12 +346,18 @@ allocate_pages (grub_size_t prot_size) prot_size = page_align (prot_size); mmap_size = find_mmap_size (); +#ifdef GRUB_MACHINE_EFI + efi_mmap_size = find_efi_mmap_size (); +#else + efi_mmap_size = 0; +#endif + grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n", (unsigned) real_size, (unsigned) prot_size, (unsigned) mmap_size); /* Calculate the number of pages; Combine the real mode code with the memory map buffer for simplicity. */ - real_mode_pages = ((real_size + mmap_size) >> 12); + real_mode_pages = ((real_size + mmap_size + efi_mmap_size) >> 12); prot_mode_pages = (prot_size >> 12); /* Initialize the memory pointers with NULL for convenience. */ @@ -330,10 +390,10 @@ allocate_pages (grub_size_t prot_size) if (addr + size > 0x90000) size = 0x90000 - addr; - if (real_size + mmap_size > size) + if (real_size + mmap_size + efi_mmap_size > size) return 0; - real_mode_target = ((addr + size) - (real_size + mmap_size)); + real_mode_target = ((addr + size) - (real_size + mmap_size + efi_mmap_size)); return 1; } @@ -348,11 +408,13 @@ allocate_pages (grub_size_t prot_size) err = grub_relocator_alloc_chunk_addr (relocator, &real_mode_mem, real_mode_target, - (real_size + mmap_size)); + (real_size + mmap_size + + efi_mmap_size)); if (err) goto fail; + efi_mmap_buf = (grub_uint8_t *) real_mode_mem + real_size + mmap_size; - prot_mode_target = 0x100000; + prot_mode_target = GRUB_LINUX_BZIMAGE_ADDR; err = grub_relocator_alloc_chunk_addr (relocator, &prot_mode_mem, prot_mode_target, prot_size); @@ -393,17 +455,28 @@ grub_e820_add_region (struct grub_e820_mmap *e820_map, int *e820_num, } } -static int +static grub_err_t grub_linux_setup_video (struct linux_kernel_params *params) { struct grub_video_mode_info mode_info; void *framebuffer; - int ret; + grub_err_t err; - ret = grub_video_get_info_and_fini (&mode_info, &framebuffer); + switch (grub_video_get_driver_id ()) + { + case GRUB_VIDEO_DRIVER_VBE: + params->have_vga = GRUB_VIDEO_LINUX_TYPE_VLFB; + break; - if (ret) - return 1; + default: + params->have_vga = GRUB_VIDEO_LINUX_TYPE_SIMPLE_LFB; + break; + } + + err = grub_video_get_info_and_fini (&mode_info, &framebuffer); + + if (err) + return err; params->lfb_width = mode_info.width; params->lfb_height = mode_info.height; @@ -449,7 +522,7 @@ grub_linux_setup_video (struct linux_kernel_params *params) } #endif - return 0; + return GRUB_ERR_NONE; } #ifdef __x86_64__ @@ -520,15 +593,15 @@ grub_linux_boot (void) if (modevar && *modevar != 0) { tmp = grub_malloc (grub_strlen (modevar) - + sizeof (";text")); + + sizeof (";" DEFAULT_VIDEO_MODE)); if (! tmp) return grub_errno; - grub_sprintf (tmp, "%s;text", modevar); + grub_sprintf (tmp, "%s;" DEFAULT_VIDEO_MODE, modevar); err = grub_video_set_mode (tmp, 0); grub_free (tmp); } else - err = grub_video_set_mode ("text", 0); + err = grub_video_set_mode (DEFAULT_VIDEO_MODE, 0); if (err) { @@ -537,17 +610,26 @@ grub_linux_boot (void) grub_errno = GRUB_ERR_NONE; } - if (! grub_linux_setup_video (params)) - params->have_vga = GRUB_VIDEO_TYPE_VLFB; - else + err = grub_linux_setup_video (params); + if (err) { - params->have_vga = GRUB_VIDEO_TYPE_TEXT; + grub_print_error (); + grub_errno = GRUB_ERR_NONE; +#if HAS_VGA_TEXT + params->have_vga = GRUB_VIDEO_LINUX_TYPE_EGA_TEXT; + params->video_mode = 0x3; params->video_width = 80; params->video_height = 25; +#else + params->have_vga = 0; + params->video_mode = 0; + params->video_width = 0; + params->video_height = 0; +#endif } /* Initialize these last, because terminal position could be affected by printfs above. */ - if (params->have_vga == GRUB_VIDEO_TYPE_TEXT) + if (params->have_vga == GRUB_VIDEO_LINUX_TYPE_EGA_TEXT) { grub_term_output_t term; int found = 0; @@ -568,6 +650,40 @@ grub_linux_boot (void) } } +#ifdef GRUB_MACHINE_EFI + { + grub_efi_uintn_t efi_map_key, efi_desc_size; + grub_efi_uint32_t efi_desc_version; + if (grub_efi_get_memory_map (&efi_mmap_size, efi_mmap_buf, &efi_map_key, + &efi_desc_size, &efi_desc_version) <= 0) + grub_fatal ("cannot get memory map"); + + if (! grub_efi_exit_boot_services (efi_map_key)) + grub_fatal ("cannot exit boot services"); + + /* Note that no boot services are available from here. */ + + /* Pass EFI parameters. */ + if (grub_le_to_cpu16 (params->version) >= 0x0206) + { + params->v0206.efi_mem_desc_size = efi_desc_size; + params->v0206.efi_mem_desc_version = efi_desc_version; + params->v0206.efi_mmap = (grub_uint32_t) (unsigned long) efi_mmap_buf; + params->v0206.efi_mmap_size = efi_mmap_size; +#ifdef __x86_64__ + params->v0206.efi_mmap_hi = (grub_uint32_t) ((grub_uint64_t) efi_mmap_buf >> 32); +#endif + } + else if (grub_le_to_cpu16 (params->version) >= 0x0204) + { + params->v0204.efi_mem_desc_size = efi_desc_size; + params->v0204.efi_mem_desc_version = efi_desc_version; + params->v0204.efi_mmap = (grub_uint32_t) (unsigned long) efi_mmap_buf; + params->v0204.efi_mmap_size = efi_mmap_size; + } + } +#endif + /* FIXME. */ /* asm volatile ("lidt %0" : : "m" (idt_desc)); */ state.ebx = 0; @@ -675,7 +791,12 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), goto fail; } +#ifdef GRUB_MACHINE_EFI + /* XXX Linux assumes that only elilo can boot Linux on EFI!!! */ + params->type_of_loader = (LINUX_LOADER_ID_ELILO << 4); +#else params->type_of_loader = (LINUX_LOADER_ID_GRUB << 4); +#endif /* These two are used (instead of cmd_line_ptr) by older versions of Linux, and otherwise ignored. */ @@ -698,14 +819,27 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), /* Ignored by Linux. */ params->video_page = 0; - /* Must be non-zero even in text mode, or Linux will think there's no VGA. */ - params->video_mode = 0x3; - /* Only used when `video_mode == 0x7', otherwise ignored. */ params->video_ega_bx = 0; params->font_size = 16; /* XXX */ +#ifdef GRUB_MACHINE_EFI + if (grub_le_to_cpu16 (params->version) >= 0x0206) + { + params->v0206.efi_signature = GRUB_LINUX_EFI_SIGNATURE; + params->v0206.efi_system_table = (grub_uint32_t) (unsigned long) grub_efi_system_table; +#ifdef __x86_64__ + params->v0206.efi_system_table_hi = (grub_uint32_t) ((grub_uint64_t) grub_efi_system_table >> 32); +#endif + } + else if (grub_le_to_cpu16 (params->version) >= 0x0204) + { + params->v0204.efi_signature = GRUB_LINUX_EFI_SIGNATURE_0204; + params->v0204.efi_system_table = (grub_uint32_t) (unsigned long) grub_efi_system_table; + } +#endif + /* The other parameters are filled when booting. */ grub_file_seek (file, real_size + GRUB_DISK_SECTOR_SIZE); @@ -859,7 +993,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), } len = prot_size; - if (grub_file_read (file, (void *) GRUB_LINUX_BZIMAGE_ADDR, len) != len) + if (grub_file_read (file, prot_mode_mem, len) != len) grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); if (grub_errno == GRUB_ERR_NONE) From 4d27140f7f8d94598c9182e73e3dff0c9d299ded Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 14:05:39 +0100 Subject: [PATCH 030/271] Removed efi linux loader (now it's in i386/linux.c) --- conf/i386-efi.rmk | 2 +- loader/i386/efi/linux.c | 1022 -------------------------------- loader/i386/linux_trampoline.S | 129 ---- 3 files changed, 1 insertion(+), 1152 deletions(-) delete mode 100644 loader/i386/efi/linux.c delete mode 100644 loader/i386/linux_trampoline.S diff --git a/conf/i386-efi.rmk b/conf/i386-efi.rmk index 673349858..fb5b11d04 100644 --- a/conf/i386-efi.rmk +++ b/conf/i386-efi.rmk @@ -94,7 +94,7 @@ appleldr_mod_CFLAGS = $(COMMON_CFLAGS) appleldr_mod_LDFLAGS = $(COMMON_LDFLAGS) # For linux.mod. -linux_mod_SOURCES = loader/i386/efi/linux.c +linux_mod_SOURCES = loader/i386/linux.c linux_mod_CFLAGS = $(COMMON_CFLAGS) linux_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/loader/i386/efi/linux.c b/loader/i386/efi/linux.c deleted file mode 100644 index 1abcc06db..000000000 --- a/loader/i386/efi/linux.c +++ /dev/null @@ -1,1022 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2006,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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define GRUB_LINUX_CL_OFFSET 0x1000 -#define GRUB_LINUX_CL_END_OFFSET 0x2000 - -#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ - ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) - -static grub_dl_t my_mod; - -static grub_size_t linux_mem_size; -static int loaded; -static void *real_mode_mem; -static void *prot_mode_mem; -static void *initrd_mem; -static grub_efi_uintn_t real_mode_pages; -static grub_efi_uintn_t prot_mode_pages; -static grub_efi_uintn_t initrd_pages; -static void *mmap_buf; - -static grub_uint8_t gdt[] __attribute__ ((aligned(16))) = - { - /* NULL. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* Reserved. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* Code segment. */ - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x9A, 0xCF, 0x00, - /* Data segment. */ - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x92, 0xCF, 0x00 - }; - -struct gdt_descriptor -{ - grub_uint16_t limit; - void *base; -} __attribute__ ((packed)); - -static struct gdt_descriptor gdt_desc = - { - sizeof (gdt) - 1, - gdt - }; - -struct idt_descriptor -{ - grub_uint16_t limit; - void *base; -} __attribute__ ((packed)); - -static struct idt_descriptor idt_desc = - { - 0, - 0 - }; - -static inline grub_size_t -page_align (grub_size_t size) -{ - return (size + (1 << 12) - 1) & (~((1 << 12) - 1)); -} - -/* Find the optimal number of pages for the memory map. Is it better to - move this code to efi/mm.c? */ -static grub_efi_uintn_t -find_mmap_size (void) -{ - static grub_efi_uintn_t mmap_size = 0; - - if (mmap_size != 0) - return mmap_size; - - mmap_size = (1 << 12); - while (1) - { - int ret; - grub_efi_memory_descriptor_t *mmap; - grub_efi_uintn_t desc_size; - - mmap = grub_malloc (mmap_size); - if (! mmap) - return 0; - - ret = grub_efi_get_memory_map (&mmap_size, mmap, 0, &desc_size, 0); - grub_free (mmap); - - if (ret < 0) - grub_fatal ("cannot get memory map"); - else if (ret > 0) - break; - - mmap_size += (1 << 12); - } - - /* Increase the size a bit for safety, because GRUB allocates more on - later, and EFI itself may allocate more. */ - mmap_size += (1 << 12); - - return page_align (mmap_size); -} - -static void -free_pages (void) -{ - if (real_mode_mem) - { - grub_efi_free_pages ((grub_addr_t) real_mode_mem, real_mode_pages); - real_mode_mem = 0; - } - - if (prot_mode_mem) - { - grub_efi_free_pages ((grub_addr_t) prot_mode_mem, prot_mode_pages); - prot_mode_mem = 0; - } - - if (initrd_mem) - { - grub_efi_free_pages ((grub_addr_t) initrd_mem, initrd_pages); - initrd_mem = 0; - } -} - -/* Allocate pages for the real mode code and the protected mode code - for linux as well as a memory map buffer. */ -static int -allocate_pages (grub_size_t prot_size) -{ - grub_efi_uintn_t desc_size; - grub_efi_memory_descriptor_t *mmap, *mmap_end; - grub_efi_uintn_t mmap_size, tmp_mmap_size; - grub_efi_memory_descriptor_t *desc; - grub_size_t real_size; - - /* Make sure that each size is aligned to a page boundary. */ - real_size = GRUB_LINUX_CL_END_OFFSET; - prot_size = page_align (prot_size); - mmap_size = find_mmap_size (); - - grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n", - (unsigned) real_size, (unsigned) prot_size, (unsigned) mmap_size); - - /* Calculate the number of pages; Combine the real mode code with - the memory map buffer for simplicity. */ - real_mode_pages = ((real_size + mmap_size) >> 12); - prot_mode_pages = (prot_size >> 12); - - /* Initialize the memory pointers with NULL for convenience. */ - real_mode_mem = 0; - prot_mode_mem = 0; - - /* Read the memory map temporarily, to find free space. */ - mmap = grub_malloc (mmap_size); - if (! mmap) - return 0; - - tmp_mmap_size = mmap_size; - if (grub_efi_get_memory_map (&tmp_mmap_size, mmap, 0, &desc_size, 0) <= 0) - grub_fatal ("cannot get memory map"); - - mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap, tmp_mmap_size); - - /* First, find free pages for the real mode code - and the memory map buffer. */ - for (desc = mmap; - desc < mmap_end; - desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) - { - /* Probably it is better to put the real mode code in the traditional - space for safety. */ - if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY - && desc->physical_start <= 0x90000 - && desc->num_pages >= real_mode_pages) - { - grub_efi_physical_address_t physical_end; - grub_efi_physical_address_t addr; - - physical_end = desc->physical_start + (desc->num_pages << 12); - if (physical_end > 0x90000) - physical_end = 0x90000; - - grub_dprintf ("linux", "physical_start = %x, physical_end = %x\n", - (unsigned) desc->physical_start, - (unsigned) physical_end); - addr = physical_end - real_size - mmap_size; - if (addr < 0x10000) - continue; - - grub_dprintf ("linux", "trying to allocate %u pages at %lx\n", - (unsigned) real_mode_pages, (unsigned long) addr); - real_mode_mem = grub_efi_allocate_pages (addr, real_mode_pages); - if (! real_mode_mem) - grub_fatal ("cannot allocate pages"); - - desc->num_pages -= real_mode_pages; - break; - } - } - - if (! real_mode_mem) - { - grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate real mode pages"); - goto fail; - } - - mmap_buf = (void *) ((char *) real_mode_mem + real_size); - - /* Next, find free pages for the protected mode code. */ - /* XXX what happens if anything is using this address? */ - prot_mode_mem = grub_efi_allocate_pages (0x100000, prot_mode_pages + 1); - if (! prot_mode_mem) - { - grub_error (GRUB_ERR_OUT_OF_MEMORY, - "cannot allocate protected mode pages"); - goto fail; - } - - grub_dprintf ("linux", "real_mode_mem = %lx, real_mode_pages = %x, " - "prot_mode_mem = %lx, prot_mode_pages = %x\n", - (unsigned long) real_mode_mem, (unsigned) real_mode_pages, - (unsigned long) prot_mode_mem, (unsigned) prot_mode_pages); - - grub_free (mmap); - return 1; - - fail: - grub_free (mmap); - free_pages (); - return 0; -} - -static void -grub_e820_add_region (struct grub_e820_mmap *e820_map, int *e820_num, - grub_uint64_t start, grub_uint64_t size, - grub_uint32_t type) -{ - int n = *e820_num; - - if (n >= GRUB_E820_MAX_ENTRY) - grub_fatal ("Too many e820 memory map entries"); - - if ((n > 0) && (e820_map[n - 1].addr + e820_map[n - 1].size == start) && - (e820_map[n - 1].type == type)) - e820_map[n - 1].size += size; - else - { - e820_map[n].addr = start; - e820_map[n].size = size; - e820_map[n].type = type; - (*e820_num)++; - } -} - -#ifdef __x86_64__ -extern grub_uint8_t grub_linux_trampoline_start[]; -extern grub_uint8_t grub_linux_trampoline_end[]; -#endif - -static grub_err_t -grub_linux_boot (void) -{ - struct linux_kernel_params *params; - grub_efi_uintn_t mmap_size; - grub_efi_uintn_t map_key; - grub_efi_uintn_t desc_size; - grub_efi_uint32_t desc_version; - int e820_num; - - params = real_mode_mem; - - grub_dprintf ("linux", "code32_start = %x, idt_desc = %lx, gdt_desc = %lx\n", - (unsigned) params->code32_start, - (unsigned long) &(idt_desc.limit), - (unsigned long) &(gdt_desc.limit)); - grub_dprintf ("linux", "idt = %x:%lx, gdt = %x:%lx\n", - (unsigned) idt_desc.limit, (unsigned long) idt_desc.base, - (unsigned) gdt_desc.limit, (unsigned long) gdt_desc.base); - - auto int NESTED_FUNC_ATTR hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); - int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t size, grub_uint32_t type) - { - switch (type) - { - case GRUB_MACHINE_MEMORY_AVAILABLE: - grub_e820_add_region (params->e820_map, &e820_num, - addr, size, GRUB_E820_RAM); - break; - -#ifdef GRUB_MACHINE_MEMORY_ACPI - case GRUB_MACHINE_MEMORY_ACPI: - grub_e820_add_region (params->e820_map, &e820_num, - addr, size, GRUB_E820_ACPI); - break; -#endif - -#ifdef GRUB_MACHINE_MEMORY_NVS - case GRUB_MACHINE_MEMORY_NVS: - grub_e820_add_region (params->e820_map, &e820_num, - addr, size, GRUB_E820_NVS); - break; -#endif - -#ifdef GRUB_MACHINE_MEMORY_CODE - case GRUB_MACHINE_MEMORY_CODE: - grub_e820_add_region (params->e820_map, &e820_num, - addr, size, GRUB_E820_EXEC_CODE); - break; -#endif - - default: - grub_e820_add_region (params->e820_map, &e820_num, - addr, size, GRUB_E820_RESERVED); - } - return 0; - } - - e820_num = 0; - grub_mmap_iterate (hook); - params->mmap_size = e820_num; - - mmap_size = find_mmap_size (); - if (grub_efi_get_memory_map (&mmap_size, mmap_buf, &map_key, - &desc_size, &desc_version) <= 0) - grub_fatal ("cannot get memory map"); - - if (! grub_efi_exit_boot_services (map_key)) - grub_fatal ("cannot exit boot services"); - - /* Note that no boot services are available from here. */ - - /* Pass EFI parameters. */ - if (grub_le_to_cpu16 (params->version) >= 0x0206) - { - params->v0206.efi_mem_desc_size = desc_size; - params->v0206.efi_mem_desc_version = desc_version; - params->v0206.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; - params->v0206.efi_mmap_size = mmap_size; -#ifdef __x86_64__ - params->v0206.efi_mmap_hi = (grub_uint32_t) ((grub_uint64_t) mmap_buf >> 32); -#endif - } - else if (grub_le_to_cpu16 (params->version) >= 0x0204) - { - params->v0204.efi_mem_desc_size = desc_size; - params->v0204.efi_mem_desc_version = desc_version; - params->v0204.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; - params->v0204.efi_mmap_size = mmap_size; - } - -#ifdef __x86_64__ - - grub_memcpy ((char *) prot_mode_mem + (prot_mode_pages << 12), - grub_linux_trampoline_start, - grub_linux_trampoline_end - grub_linux_trampoline_start); - - ((void (*) (unsigned long, void *)) ((char *) prot_mode_mem - + (prot_mode_pages << 12))) - (params->code32_start, real_mode_mem); - -#else - - /* Hardware interrupts are not safe any longer. */ - asm volatile ("cli" : : ); - - /* Load the IDT and the GDT for the bootstrap. */ - asm volatile ("lidt %0" : : "m" (idt_desc)); - asm volatile ("lgdt %0" : : "m" (gdt_desc)); - - /* Pass parameters. */ - asm volatile ("movl %0, %%ecx" : : "m" (params->code32_start)); - asm volatile ("movl %0, %%esi" : : "m" (real_mode_mem)); - - asm volatile ("xorl %%ebx, %%ebx" : : ); - - /* Enter Linux. */ - asm volatile ("jmp *%%ecx" : : ); - -#endif - - /* Never reach here. */ - return GRUB_ERR_NONE; -} - -static grub_err_t -grub_linux_unload (void) -{ - free_pages (); - grub_dl_unref (my_mod); - loaded = 0; - return GRUB_ERR_NONE; -} - -static grub_efi_guid_t uga_draw_guid = GRUB_EFI_UGA_DRAW_GUID; - - -#define RGB_MASK 0xffffff -#define RGB_MAGIC 0x121314 -#define LINE_MIN 800 -#define LINE_MAX 4096 -#define FBTEST_STEP (0x10000 >> 2) -#define FBTEST_COUNT 8 - -static int -find_line_len (grub_uint32_t *fb_base, grub_uint32_t *line_len) -{ - grub_uint32_t *base = (grub_uint32_t *) (grub_target_addr_t) *fb_base; - int i; - - for (i = 0; i < FBTEST_COUNT; i++, base += FBTEST_STEP) - { - if ((*base & RGB_MASK) == RGB_MAGIC) - { - int j; - - for (j = LINE_MIN; j <= LINE_MAX; j++) - { - if ((base[j] & RGB_MASK) == RGB_MAGIC) - { - *fb_base = (grub_uint32_t) (grub_target_addr_t) base; - *line_len = j << 2; - - return 1; - } - } - - break; - } - } - - return 0; -} - -static int -find_framebuf (grub_uint32_t *fb_base, grub_uint32_t *line_len) -{ - int found = 0; - - auto int NESTED_FUNC_ATTR find_card (grub_pci_device_t dev, - grub_pci_id_t pciid); - - int NESTED_FUNC_ATTR find_card (grub_pci_device_t dev, - grub_pci_id_t pciid) - { - grub_pci_address_t addr; - - addr = grub_pci_make_address (dev, 2); - if (grub_pci_read (addr) >> 24 == 0x3) - { - int i; - - grub_printf ("Display controller: %d:%d.%d\nDevice id: %x\n", - grub_pci_get_bus (dev), grub_pci_get_device (dev), - grub_pci_get_function (dev), pciid); - addr += 8; - for (i = 0; i < 6; i++, addr += 4) - { - grub_uint32_t old_bar1, old_bar2, type; - grub_uint64_t base64; - - old_bar1 = grub_pci_read (addr); - if ((! old_bar1) || (old_bar1 & GRUB_PCI_ADDR_SPACE_IO)) - continue; - - type = old_bar1 & GRUB_PCI_ADDR_MEM_TYPE_MASK; - if (type == GRUB_PCI_ADDR_MEM_TYPE_64) - { - if (i == 5) - break; - - old_bar2 = grub_pci_read (addr + 4); - } - else - old_bar2 = 0; - - base64 = old_bar2; - base64 <<= 32; - base64 |= (old_bar1 & GRUB_PCI_ADDR_MEM_MASK); - - grub_printf ("%s(%d): 0x%llx\n", - ((old_bar1 & GRUB_PCI_ADDR_MEM_PREFETCH) ? - "VMEM" : "MMIO"), i, - (unsigned long long) base64); - - if ((old_bar1 & GRUB_PCI_ADDR_MEM_PREFETCH) && (! found)) - { - *fb_base = base64; - if (find_line_len (fb_base, line_len)) - found++; - } - - if (type == GRUB_PCI_ADDR_MEM_TYPE_64) - { - i++; - addr += 4; - } - } - } - - return found; - } - - grub_pci_iterate (find_card); - return found; -} - -static int -grub_linux_setup_video (struct linux_kernel_params *params) -{ - grub_efi_uga_draw_protocol_t *c; - grub_uint32_t width, height, depth, rate, pixel, fb_base, line_len; - int ret; - - c = grub_efi_locate_protocol (&uga_draw_guid, 0); - if (! c) - return 1; - - if (efi_call_5 (c->get_mode, c, &width, &height, &depth, &rate)) - return 1; - - grub_printf ("Video mode: %ux%u-%u@%u\n", width, height, depth, rate); - - grub_efi_set_text_mode (0); - pixel = RGB_MAGIC; - efi_call_10 (c->blt, c, (struct grub_efi_uga_pixel *) &pixel, - GRUB_EFI_UGA_VIDEO_FILL, 0, 0, 0, 0, 1, height, 0); - ret = find_framebuf (&fb_base, &line_len); - grub_efi_set_text_mode (1); - - if (! ret) - { - grub_printf ("Can\'t find frame buffer address\n"); - return 1; - } - - grub_printf ("Frame buffer base: 0x%x\n", fb_base); - grub_printf ("Video line length: %d\n", line_len); - - params->lfb_width = width; - params->lfb_height = height; - params->lfb_depth = depth; - params->lfb_line_len = line_len; - - params->lfb_base = fb_base; - params->lfb_size = (line_len * params->lfb_height + 65535) >> 16; - - params->red_mask_size = 8; - params->red_field_pos = 16; - params->green_mask_size = 8; - params->green_field_pos = 8; - params->blue_mask_size = 8; - params->blue_field_pos = 0; - params->reserved_mask_size = 8; - params->reserved_field_pos = 24; - - params->have_vga = GRUB_VIDEO_TYPE_VLFB; - params->vid_mode = 0x338; /* 1024x768x32 */ - - return 0; -} - -static grub_err_t -grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), - int argc, char *argv[]) -{ - grub_file_t file = 0; - struct linux_kernel_header lh; - struct linux_kernel_params *params; - grub_uint8_t setup_sects; - grub_size_t real_size, prot_size; - grub_ssize_t len; - int i; - char *dest; - - grub_dl_ref (my_mod); - - if (argc == 0) - { - grub_error (GRUB_ERR_BAD_ARGUMENT, "no kernel specified"); - goto fail; - } - - file = grub_file_open (argv[0]); - if (! file) - goto fail; - - if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) - { - grub_error (GRUB_ERR_READ_ERROR, "cannot read the Linux header"); - goto fail; - } - - if (lh.boot_flag != grub_cpu_to_le16 (0xaa55)) - { - grub_error (GRUB_ERR_BAD_OS, "invalid magic number"); - goto fail; - } - - if (lh.setup_sects > GRUB_LINUX_MAX_SETUP_SECTS) - { - grub_error (GRUB_ERR_BAD_OS, "too many setup sectors"); - goto fail; - } - - /* EFI support is quite new, so reject old versions. */ - if (lh.header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) - || grub_le_to_cpu16 (lh.version) < 0x0203) - { - grub_error (GRUB_ERR_BAD_OS, "too old version"); - goto fail; - } - - /* I'm not sure how to support zImage on EFI. */ - if (! (lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) - { - grub_error (GRUB_ERR_BAD_OS, "zImage is not supported"); - goto fail; - } - - setup_sects = lh.setup_sects; - - /* If SETUP_SECTS is not set, set it to the default (4). */ - if (! setup_sects) - setup_sects = GRUB_LINUX_DEFAULT_SETUP_SECTS; - - real_size = setup_sects << GRUB_DISK_SECTOR_BITS; - prot_size = grub_file_size (file) - real_size - GRUB_DISK_SECTOR_SIZE; - - if (! allocate_pages (prot_size)) - goto fail; - - params = (struct linux_kernel_params *) real_mode_mem; - grub_memset (params, 0, GRUB_LINUX_CL_END_OFFSET); - grub_memcpy (¶ms->setup_sects, &lh.setup_sects, sizeof (lh) - 0x1F1); - - params->ps_mouse = params->padding10 = 0; - - len = 0x400 - sizeof (lh); - if (grub_file_read (file, (char *) real_mode_mem + sizeof (lh), len) != len) - { - grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); - goto fail; - } - - /* XXX Linux assumes that only elilo can boot Linux on EFI!!! */ - params->type_of_loader = (LINUX_LOADER_ID_ELILO << 4); - - params->cl_magic = GRUB_LINUX_CL_MAGIC; - params->cl_offset = 0x1000; - params->cmd_line_ptr = (unsigned long) real_mode_mem + 0x1000; - params->ramdisk_image = 0; - params->ramdisk_size = 0; - - params->heap_end_ptr = GRUB_LINUX_HEAP_END_OFFSET; - params->loadflags |= GRUB_LINUX_FLAG_CAN_USE_HEAP; - - /* These are not needed to be precise, because Linux uses these values - only to raise an error when the decompression code cannot find good - space. */ - params->ext_mem = ((32 * 0x100000) >> 10); - params->alt_mem = ((32 * 0x100000) >> 10); - - { - grub_term_output_t term; - int found = 0; - FOR_ACTIVE_TERM_OUTPUTS(term) - if (grub_strcmp (term->name, "vga_text") == 0 - || grub_strcmp (term->name, "console") == 0) - { - grub_uint16_t pos = grub_term_getxy (term); - params->video_cursor_x = pos >> 8; - params->video_cursor_y = pos & 0xff; - params->video_width = grub_term_width (term); - params->video_height = grub_term_height (term); - found = 1; - break; - } - if (!found) - { - params->video_cursor_x = 0; - params->video_cursor_y = 0; - params->video_width = 80; - params->video_height = 25; - } - } - params->video_page = 0; /* ??? */ - params->video_mode = grub_efi_system_table->con_out->mode->mode; - params->video_ega_bx = 0; - params->have_vga = 0; - params->font_size = 16; /* XXX */ - - if (grub_le_to_cpu16 (params->version) >= 0x0206) - { - params->v0206.efi_signature = GRUB_LINUX_EFI_SIGNATURE; - params->v0206.efi_system_table = (grub_uint32_t) (unsigned long) grub_efi_system_table; -#ifdef __x86_64__ - params->v0206.efi_system_table_hi = (grub_uint32_t) ((grub_uint64_t) grub_efi_system_table >> 32); -#endif - } - else if (grub_le_to_cpu16 (params->version) >= 0x0204) - { - params->v0204.efi_signature = GRUB_LINUX_EFI_SIGNATURE_0204; - params->v0204.efi_system_table = (grub_uint32_t) (unsigned long) grub_efi_system_table; - } - -#if 0 - /* The structure is zeroed already. */ - - /* No VBE on EFI. */ - params->lfb_width = 0; - params->lfb_height = 0; - params->lfb_depth = 0; - params->lfb_base = 0; - params->lfb_size = 0; - params->lfb_line_len = 0; - params->red_mask_size = 0; - params->red_field_pos = 0; - params->green_mask_size = 0; - params->green_field_pos = 0; - params->blue_mask_size = 0; - params->blue_field_pos = 0; - params->reserved_mask_size = 0; - params->reserved_field_pos = 0; - params->vesapm_segment = 0; - params->vesapm_offset = 0; - params->lfb_pages = 0; - params->vesa_attrib = 0; - - /* No APM on EFI. */ - params->apm_version = 0; - params->apm_code_segment = 0; - params->apm_entry = 0; - params->apm_16bit_code_segment = 0; - params->apm_data_segment = 0; - params->apm_flags = 0; - params->apm_code_len = 0; - params->apm_data_len = 0; - - /* XXX is there any way to use SpeedStep on EFI? */ - params->ist_signature = 0; - params->ist_command = 0; - params->ist_event = 0; - params->ist_perf_level = 0; - - /* Let the kernel probe the information. */ - grub_memset (params->hd0_drive_info, 0, sizeof (params->hd0_drive_info)); - grub_memset (params->hd1_drive_info, 0, sizeof (params->hd1_drive_info)); - - /* No MCA on EFI. */ - params->rom_config_len = 0; - - /* No need to fake the BIOS's memory map. */ - params->mmap_size = 0; - - /* Let the kernel probe the information. */ - params->ps_mouse = 0; - - /* Clear padding for future compatibility. */ - grub_memset (params->padding1, 0, sizeof (params->padding1)); - grub_memset (params->padding2, 0, sizeof (params->padding2)); - grub_memset (params->padding3, 0, sizeof (params->padding3)); - grub_memset (params->padding4, 0, sizeof (params->padding4)); - grub_memset (params->padding5, 0, sizeof (params->padding5)); - grub_memset (params->padding6, 0, sizeof (params->padding6)); - grub_memset (params->padding7, 0, sizeof (params->padding7)); - grub_memset (params->padding8, 0, sizeof (params->padding8)); - grub_memset (params->padding9, 0, sizeof (params->padding9)); - -#endif - - /* The other EFI parameters are filled when booting. */ - - grub_file_seek (file, real_size + GRUB_DISK_SECTOR_SIZE); - - /* XXX there is no way to know if the kernel really supports EFI. */ - grub_printf (" [Linux-bzImage, setup=0x%x, size=0x%x]\n", - (unsigned) real_size, (unsigned) prot_size); - - grub_linux_setup_video (params); - - /* Detect explicitly specified memory size, if any. */ - linux_mem_size = 0; - for (i = 1; i < argc; i++) - if (grub_memcmp (argv[i], "mem=", 4) == 0) - { - char *val = argv[i] + 4; - - linux_mem_size = grub_strtoul (val, &val, 0); - - if (grub_errno) - { - grub_errno = GRUB_ERR_NONE; - linux_mem_size = 0; - } - else - { - int shift = 0; - - switch (grub_tolower (val[0])) - { - case 'g': - shift += 10; - case 'm': - shift += 10; - case 'k': - shift += 10; - default: - break; - } - - /* Check an overflow. */ - if (linux_mem_size > (~0UL >> shift)) - linux_mem_size = 0; - else - linux_mem_size <<= shift; - } - } - else if (grub_memcmp (argv[i], "video=efifb", 11) == 0) - { - if (params->have_vga) - params->have_vga = GRUB_VIDEO_TYPE_EFI; - } - - /* Specify the boot file. */ - dest = grub_stpcpy ((char *) real_mode_mem + GRUB_LINUX_CL_OFFSET, - "BOOT_IMAGE="); - dest = grub_stpcpy (dest, argv[0]); - - /* Copy kernel parameters. */ - for (i = 1; - i < argc - && dest + grub_strlen (argv[i]) + 1 < ((char *) real_mode_mem - + GRUB_LINUX_CL_END_OFFSET); - i++) - { - *dest++ = ' '; - dest = grub_stpcpy (dest, argv[i]); - } - - len = prot_size; - if (grub_file_read (file, (void *) GRUB_LINUX_BZIMAGE_ADDR, len) != len) - grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); - - if (grub_errno == GRUB_ERR_NONE) - { - grub_loader_set (grub_linux_boot, grub_linux_unload, 1); - loaded = 1; - } - - fail: - - if (file) - grub_file_close (file); - - if (grub_errno != GRUB_ERR_NONE) - { - grub_dl_unref (my_mod); - loaded = 0; - } - - return grub_errno; -} - -static grub_err_t -grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), - int argc, char *argv[]) -{ - grub_file_t file = 0; - grub_ssize_t size; - grub_addr_t addr_min, addr_max; - grub_addr_t addr; - grub_efi_uintn_t mmap_size; - grub_efi_memory_descriptor_t *desc; - grub_efi_uintn_t desc_size; - struct linux_kernel_header *lh; - - if (argc == 0) - { - grub_error (GRUB_ERR_BAD_ARGUMENT, "no module specified"); - goto fail; - } - - if (! loaded) - { - grub_error (GRUB_ERR_BAD_ARGUMENT, "you need to load the kernel first"); - goto fail; - } - - file = grub_file_open (argv[0]); - if (! file) - goto fail; - - size = grub_file_size (file); - initrd_pages = (page_align (size) >> 12); - - lh = (struct linux_kernel_header *) real_mode_mem; - - addr_max = (grub_cpu_to_le32 (lh->initrd_addr_max) << 10); - if (linux_mem_size != 0 && linux_mem_size < addr_max) - addr_max = linux_mem_size; - - /* Linux 2.3.xx has a bug in the memory range check, so avoid - the last page. - Linux 2.2.xx has a bug in the memory range check, which is - worse than that of Linux 2.3.xx, so avoid the last 64kb. */ - addr_max -= 0x10000; - - /* Usually, the compression ratio is about 50%. */ - addr_min = (grub_addr_t) prot_mode_mem + ((prot_mode_pages * 3) << 12) - + page_align (size); - - /* Find the highest address to put the initrd. */ - mmap_size = find_mmap_size (); - if (grub_efi_get_memory_map (&mmap_size, mmap_buf, 0, &desc_size, 0) <= 0) - grub_fatal ("cannot get memory map"); - - addr = 0; - for (desc = mmap_buf; - desc < NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); - desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) - { - if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY - && desc->num_pages >= initrd_pages) - { - grub_efi_physical_address_t physical_end; - - physical_end = desc->physical_start + (desc->num_pages << 12); - if (physical_end > addr_max) - physical_end = addr_max; - - if (physical_end < page_align (size)) - continue; - - physical_end -= page_align (size); - - if ((physical_end >= addr_min) && - (physical_end >= desc->physical_start) && - (physical_end > addr)) - addr = physical_end; - } - } - - if (addr == 0) - { - grub_error (GRUB_ERR_OUT_OF_MEMORY, "no free pages available"); - goto fail; - } - - initrd_mem = grub_efi_allocate_pages (addr, initrd_pages); - if (! initrd_mem) - grub_fatal ("cannot allocate pages"); - - if (grub_file_read (file, initrd_mem, size) != size) - { - grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); - goto fail; - } - - grub_printf (" [Initrd, addr=0x%x, size=0x%x]\n", - (unsigned) addr, (unsigned) size); - - lh->ramdisk_image = addr; - lh->ramdisk_size = size; - lh->root_dev = 0x0100; /* XXX */ - - fail: - if (file) - grub_file_close (file); - - return grub_errno; -} - -static grub_command_t cmd_linux, cmd_initrd; - -GRUB_MOD_INIT(linux) -{ - cmd_linux = grub_register_command ("linux", grub_cmd_linux, - 0, N_("Load Linux.")); - cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd, - 0, N_("Load initrd.")); - my_mod = mod; -} - -GRUB_MOD_FINI(linux) -{ - grub_unregister_command (cmd_linux); - grub_unregister_command (cmd_initrd); -} diff --git a/loader/i386/linux_trampoline.S b/loader/i386/linux_trampoline.S deleted file mode 100644 index 4acea7b11..000000000 --- a/loader/i386/linux_trampoline.S +++ /dev/null @@ -1,129 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 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 - - - .p2align 4 /* force 16-byte alignment */ -VARIABLE(grub_linux_trampoline_start) - cli - /* %rdi contains protected memory start and %rsi - contains real memory start. */ - - mov %rsi, %rbx - - call base -base: - pop %rsi - -#ifdef APPLE_CC - lea (cont1 - base) (%esi, 1), %rax - mov %eax, (jump_vector - base) (%esi, 1) - - lea (gdt - base) (%esi, 1), %rax - mov %rax, (gdtaddr - base) (%esi, 1) - - /* Switch to compatibility mode. */ - - lidt (idtdesc - base) (%esi, 1) - lgdt (gdtdesc - base) (%esi, 1) - - /* Update %cs. Thanks to David Miller for pointing this mistake out. */ - ljmp *(jump_vector - base) (%esi, 1) -#else - lea (cont1 - base) (%rsi, 1), %rax - mov %eax, (jump_vector - base) (%rsi, 1) - - lea (gdt - base) (%rsi, 1), %rax - mov %rax, (gdtaddr - base) (%rsi, 1) - - /* Switch to compatibility mode. */ - - lidt (idtdesc - base) (%rsi, 1) - lgdt (gdtdesc - base) (%rsi, 1) - - /* Update %cs. Thanks to David Miller for pointing this mistake out. */ - ljmp *(jump_vector - base) (%rsi, 1) -#endif - -cont1: - .code32 - - /* Update other registers. */ - mov $0x18, %eax - mov %eax, %ds - mov %eax, %es - mov %eax, %fs - mov %eax, %gs - mov %eax, %ss - - /* Disable paging. */ - mov %cr0, %eax - and $0x7fffffff, %eax - mov %eax, %cr0 - - /* Disable amd64. */ - mov $0xc0000080, %ecx - rdmsr - and $0xfffffeff, %eax - wrmsr - - /* Turn off PAE. */ - movl %cr4, %eax - and $0xffffffcf, %eax - mov %eax, %cr4 - - jmp cont2 -cont2: - .code32 - - mov %ebx, %esi - - jmp *%edi - - /* GDT. */ - .p2align 4 -gdt: - /* NULL. */ - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - /* Reserved. */ - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - /* Code segment. */ - .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x9A, 0xCF, 0x00 - - /* Data segment. */ - .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x92, 0xCF, 0x00 - -gdtdesc: - .word 31 -gdtaddr: - .quad gdt - -idtdesc: - .word 0 -idtaddr: - .quad 0 - - .p2align 4 -jump_vector: - /* Jump location. Is filled by the code */ - .long 0 - .long 0x10 -VARIABLE(grub_linux_trampoline_end) From 8b889c332a127949f729e70bc0d06724413705a4 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 17:25:49 +0100 Subject: [PATCH 031/271] Fix bug when whole region is free --- lib/relocator.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 889497334..090a6c7e3 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -199,9 +199,9 @@ malloc_in_range (struct grub_relocator *rel, grub_mm_region_t r, rp; for (rp = NULL, r = grub_mm_base; r; rp = r, r = r->next) { - grub_dprintf ("relocator", "region %p. %d %d %d\n", r, + grub_dprintf ("relocator", "region %p. %d %d %d %d\n", r, (grub_addr_t) r + r->size + sizeof (*r) >= start, - (grub_addr_t) r < end && r->size + sizeof (*r) >= size, + (grub_addr_t) r < end, r->size + sizeof (*r) >= size, (rb == NULL || (from_low_priv ? rb > r : rb < r))); if ((grub_addr_t) r + r->size + sizeof (*r) >= start && (grub_addr_t) r < end && r->size + sizeof (*r) >= size @@ -224,7 +224,7 @@ malloc_in_range (struct grub_relocator *rel, hb = get_best_header (rel, start, end, align, size, rb, &hbp, &best_addr, from_low_priv, collisioncheck); - grub_dprintf ("relocator", "best header %p/%lx\n", hb, + grub_dprintf ("relocator", "best header %p/%p/%lx\n", hb, hbp, (unsigned long) best_addr); if (!hb) @@ -253,8 +253,8 @@ malloc_in_range (struct grub_relocator *rel, - (newreg_start - (grub_addr_t) rb)) >> GRUB_MM_ALIGN_LOG2; new_header = (void *) (newreg_start + sizeof (*rb)); - if (newhnext == hb->next) - newhnext = newhnext; + if (newhnext == hb) + newhnext = new_header; new_header->next = newhnext; new_header->size = newhsize; new_header->magic = GRUB_MM_FREE_MAGIC; @@ -280,6 +280,18 @@ malloc_in_range (struct grub_relocator *rel, rbp->next = newreg; else grub_mm_base = newreg; + { + grub_mm_header_t h = newreg->first, hp = NULL; + do + { + if ((void *) h < (void *) (newreg + 1)) + grub_fatal ("Failed to adjust memory region: %p, %p, %p, %p, %p", + newreg, newreg->first, h, hp, hb); + hp = h; + h = h->next; + } + while (h != newreg->first); + } } *res = best_addr; return 1; From 8071fb79972a62d06a8bb61321b07aa52ec61adb Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 17:26:47 +0100 Subject: [PATCH 032/271] ieee1275 support in linux.c --- loader/i386/linux.c | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/loader/i386/linux.c b/loader/i386/linux.c index 9fdf9b445..f7abcf094 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -39,6 +39,10 @@ #include #define HAS_VGA_TEXT 0 #define DEFAULT_VIDEO_MODE "800x600" +#elif defined (GRUB_MACHINE_IEEE1275) +#include +#define HAS_VGA_TEXT 0 +#define DEFAULT_VIDEO_MODE "text" #else #include #include @@ -541,6 +545,20 @@ grub_linux_boot (void) params = real_mode_mem; +#ifdef GRUB_MACHINE_IEEE1275 + { + char *bootpath; + grub_ssize_t len; + + bootpath = grub_env_get ("root"); + if (bootpath) + grub_ieee1275_set_property (grub_ieee1275_chosen, + "bootpath", bootpath, + grub_strlen (bootpath) + 1, + &len); + } +#endif + grub_dprintf ("linux", "code32_start = %x\n", (unsigned) params->code32_start); @@ -618,8 +636,6 @@ grub_linux_boot (void) #if HAS_VGA_TEXT params->have_vga = GRUB_VIDEO_LINUX_TYPE_EGA_TEXT; params->video_mode = 0x3; - params->video_width = 80; - params->video_height = 25; #else params->have_vga = 0; params->video_mode = 0; @@ -629,17 +645,22 @@ grub_linux_boot (void) } /* Initialize these last, because terminal position could be affected by printfs above. */ +#ifndef GRUB_MACHINE_IEEE1275 if (params->have_vga == GRUB_VIDEO_LINUX_TYPE_EGA_TEXT) +#endif { grub_term_output_t term; int found = 0; FOR_ACTIVE_TERM_OUTPUTS(term) if (grub_strcmp (term->name, "vga_text") == 0 - || grub_strcmp (term->name, "console") == 0) + || grub_strcmp (term->name, "console") == 0 + || grub_strcmp (term->name, "ofconsole") == 0) { grub_uint16_t pos = grub_term_getxy (term); params->video_cursor_x = pos >> 8; params->video_cursor_y = pos & 0xff; + params->video_width = grub_term_width (term); + params->video_height = grub_term_height (term); found = 1; break; } @@ -647,9 +668,20 @@ grub_linux_boot (void) { params->video_cursor_x = 0; params->video_cursor_y = 0; + params->video_width = 80; + params->video_height = 25; } } +#ifdef GRUB_MACHINE_IEEE1275 + { + params->ofw_signature = GRUB_LINUX_OFW_SIGNATURE; + params->ofw_num_items = 1; + params->ofw_cif_handler = (grub_uint32_t) grub_ieee1275_entry_fn; + params->ofw_idt = 0; + } +#endif + #ifdef GRUB_MACHINE_EFI { grub_efi_uintn_t efi_map_key, efi_desc_size; @@ -688,6 +720,7 @@ grub_linux_boot (void) /* asm volatile ("lidt %0" : : "m" (idt_desc)); */ state.ebx = 0; state.esi = real_mode_target; + state.esp = real_mode_target; state.eip = params->code32_start; return grub_relocator32_boot (relocator, state); } From 9efe1428614ef9d08bee26a4e739e87eaad07109 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 17:27:45 +0100 Subject: [PATCH 033/271] Use linux.c on i386-ieee1275 --- conf/i386-ieee1275.rmk | 2 +- loader/i386/ieee1275/linux.c | 311 ----------------------------------- 2 files changed, 1 insertion(+), 312 deletions(-) delete mode 100644 loader/i386/ieee1275/linux.c diff --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk index b9e192796..28d454ffd 100644 --- a/conf/i386-ieee1275.rmk +++ b/conf/i386-ieee1275.rmk @@ -97,7 +97,7 @@ serial_mod_CFLAGS = $(COMMON_CFLAGS) serial_mod_LDFLAGS = $(COMMON_LDFLAGS) # For linux.mod. -linux_mod_SOURCES = loader/i386/ieee1275/linux.c +linux_mod_SOURCES = loader/i386/linux.c linux_mod_CFLAGS = $(COMMON_CFLAGS) linux_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/loader/i386/ieee1275/linux.c b/loader/i386/ieee1275/linux.c deleted file mode 100644 index 8780804fd..000000000 --- a/loader/i386/ieee1275/linux.c +++ /dev/null @@ -1,311 +0,0 @@ -/* linux.c - boot Linux zImage or bzImage */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,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 - -#define GRUB_OFW_LINUX_PARAMS_ADDR 0x90000 -#define GRUB_OFW_LINUX_KERNEL_ADDR 0x100000 -#define GRUB_OFW_LINUX_INITRD_ADDR 0x800000 - -#define GRUB_OFW_LINUX_CL_OFFSET 0x1e00 -#define GRUB_OFW_LINUX_CL_LENGTH 0x100 - -static grub_dl_t my_mod; - -static grub_size_t kernel_size; -static char *kernel_addr, *kernel_cmdline; -static grub_size_t initrd_size; - -static grub_err_t -grub_linux_unload (void) -{ - grub_free (kernel_cmdline); - grub_free (kernel_addr); - kernel_cmdline = 0; - kernel_addr = 0; - initrd_size = 0; - - grub_dl_unref (my_mod); - - return GRUB_ERR_NONE; -} - -/* -static int -grub_ieee1275_debug (void) -{ - struct enter_args - { - struct grub_ieee1275_common_hdr common; - } - args; - - INIT_IEEE1275_COMMON (&args.common, "enter", 0, 0); - - if (IEEE1275_CALL_ENTRY_FN (&args) == -1) - return -1; - - return 0; -} -*/ - -static grub_err_t -grub_linux_boot (void) -{ - struct linux_kernel_params *params; - struct linux_kernel_header *lh; - char *prot_code; - char *bootpath; - grub_ssize_t len; - - bootpath = grub_env_get ("root"); - if (bootpath) - grub_ieee1275_set_property (grub_ieee1275_chosen, - "bootpath", bootpath, - grub_strlen (bootpath) + 1, - &len); - - params = (struct linux_kernel_params *) GRUB_OFW_LINUX_PARAMS_ADDR; - lh = (struct linux_kernel_header *) params; - - grub_memset ((char *) params, 0, GRUB_OFW_LINUX_CL_OFFSET); - - params->alt_mem = grub_mmap_get_upper () >> 10; - params->ext_mem = params->alt_mem; - - lh->cmd_line_ptr = (char *) - (GRUB_OFW_LINUX_PARAMS_ADDR + GRUB_OFW_LINUX_CL_OFFSET); - - params->cl_magic = GRUB_LINUX_CL_MAGIC; - params->cl_offset = GRUB_OFW_LINUX_CL_OFFSET; - - { - grub_term_output_t term; - int found = 0; - FOR_ACTIVE_TERM_OUTPUTS(term) - if (grub_strcmp (term->name, "ofconsole") == 0) - { - grub_uint16_t pos = grub_term_getxy (term); - params->video_cursor_x = pos >> 8; - params->video_cursor_y = pos & 0xff; - params->video_width = grub_term_width (term); - params->video_height = grub_term_height (term); - found = 1; - break; - } - if (!found) - { - params->video_cursor_x = 0; - params->video_cursor_y = 0; - params->video_width = 80; - params->video_height = 25; - } - } - - params->font_size = 16; - - params->ofw_signature = GRUB_LINUX_OFW_SIGNATURE; - params->ofw_num_items = 1; - params->ofw_cif_handler = (grub_uint32_t) grub_ieee1275_entry_fn; - params->ofw_idt = 0; - - if (initrd_size) - { - lh->type_of_loader = 1; - lh->ramdisk_image = GRUB_OFW_LINUX_INITRD_ADDR; - lh->ramdisk_size = initrd_size; - } - - if (kernel_cmdline) - grub_strcpy (lh->cmd_line_ptr, kernel_cmdline); - - prot_code = (char *) GRUB_OFW_LINUX_KERNEL_ADDR; - grub_memcpy (prot_code, kernel_addr, kernel_size); - - asm volatile ("movl %0, %%esi" : : "m" (params)); - asm volatile ("movl %%esi, %%esp" : : ); - asm volatile ("movl %0, %%ecx" : : "m" (prot_code)); - asm volatile ("xorl %%ebx, %%ebx" : : ); - asm volatile ("jmp *%%ecx" : : ); - - return GRUB_ERR_NONE; -} - -static grub_err_t -grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), - int argc, char *argv[]) -{ - grub_file_t file = 0; - struct linux_kernel_header lh; - grub_uint8_t setup_sects; - grub_size_t real_size, prot_size; - int i; - char *dest; - - grub_dl_ref (my_mod); - - if (argc == 0) - { - grub_error (GRUB_ERR_BAD_ARGUMENT, "no kernel specified"); - goto fail; - } - - file = grub_file_open (argv[0]); - if (! file) - goto fail; - - if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) - { - grub_error (GRUB_ERR_READ_ERROR, "cannot read the Linux header"); - goto fail; - } - - if ((lh.boot_flag != grub_cpu_to_le16 (0xaa55)) || - (lh.header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE))) - { - grub_error (GRUB_ERR_BAD_OS, "invalid magic number"); - goto fail; - } - - setup_sects = lh.setup_sects; - if (! setup_sects) - setup_sects = GRUB_LINUX_DEFAULT_SETUP_SECTS; - - real_size = setup_sects << GRUB_DISK_SECTOR_BITS; - prot_size = grub_file_size (file) - real_size - GRUB_DISK_SECTOR_SIZE; - - grub_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", - "bzImage", real_size, prot_size); - - grub_file_seek (file, real_size + GRUB_DISK_SECTOR_SIZE); - if (grub_errno) - goto fail; - - kernel_cmdline = grub_malloc (GRUB_OFW_LINUX_CL_LENGTH); - if (! kernel_cmdline) - goto fail; - - dest = kernel_cmdline; - for (i = 1; - i < argc - && dest + grub_strlen (argv[i]) + 1 < (kernel_cmdline - + GRUB_OFW_LINUX_CL_LENGTH); - i++) - { - *dest++ = ' '; - dest = grub_stpcpy (dest, argv[i]); - } - - kernel_addr = grub_malloc (prot_size); - if (! kernel_addr) - goto fail; - - kernel_size = prot_size; - if (grub_file_read (file, kernel_addr, prot_size) != (int) prot_size) - grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); - - if (grub_errno == GRUB_ERR_NONE) - grub_loader_set (grub_linux_boot, grub_linux_unload, 1); - -fail: - - if (file) - grub_file_close (file); - - if (grub_errno != GRUB_ERR_NONE) - { - grub_free (kernel_cmdline); - grub_free (kernel_addr); - kernel_cmdline = 0; - kernel_addr = 0; - - grub_dl_unref (my_mod); - } - - return grub_errno; -} - -static grub_err_t -grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), - int argc, char *argv[]) -{ - grub_file_t file = 0; - - if (argc == 0) - { - grub_error (GRUB_ERR_BAD_ARGUMENT, "no module specified"); - goto fail; - } - - if (! kernel_addr) - { - grub_error (GRUB_ERR_BAD_ARGUMENT, "you need to load the kernel first"); - goto fail; - } - - file = grub_file_open (argv[0]); - if (! file) - goto fail; - - initrd_size = grub_file_size (file); - if (grub_file_read (file, (void *) GRUB_OFW_LINUX_INITRD_ADDR, - initrd_size) != (int) initrd_size) - { - grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); - goto fail; - } - -fail: - if (file) - grub_file_close (file); - - return grub_errno; -} - -static grub_command_t cmd_linux, cmd_initrd; - -GRUB_MOD_INIT(linux) -{ - cmd_linux = grub_register_command ("linux", grub_cmd_linux, - 0, N_("Load Linux.")); - cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd, - 0, N_("Load initrd.")); - my_mod = mod; -} - -GRUB_MOD_FINI(linux) -{ - grub_unregister_command (cmd_linux); - grub_unregister_command (cmd_initrd); -} From 0599ad1507a99820019811320961c6e1e53e293d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 17:28:20 +0100 Subject: [PATCH 034/271] Fix compilation on i386-ieee127 --- kern/i386/ieee1275/startup.S | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kern/i386/ieee1275/startup.S b/kern/i386/ieee1275/startup.S index 35258adb6..c8e68215e 100644 --- a/kern/i386/ieee1275/startup.S +++ b/kern/i386/ieee1275/startup.S @@ -64,7 +64,3 @@ codestart: */ #include "../realmode.S" -/* - * Routines needed by Linux and Multiboot loaders. - */ -#include "../loader.S" From ad184204b25d0eae80911fe909e232acbf8a032f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 18:41:49 +0100 Subject: [PATCH 035/271] Remove leftover multiboot elpers --- include/grub/i386/multiboot.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/include/grub/i386/multiboot.h b/include/grub/i386/multiboot.h index a3ff3f4da..02402e93d 100644 --- a/include/grub/i386/multiboot.h +++ b/include/grub/i386/multiboot.h @@ -19,14 +19,6 @@ #ifndef GRUB_MULTIBOOT_CPU_HEADER #define GRUB_MULTIBOOT_CPU_HEADER 1 -/* The asm part of the multiboot loader. */ -void grub_multiboot_real_boot (grub_addr_t entry, - struct multiboot_info *mbi) - __attribute__ ((noreturn)); -void grub_multiboot2_real_boot (grub_addr_t entry, - struct multiboot_info *mbi) - __attribute__ ((noreturn)); - extern struct grub_relocator *grub_multiboot_relocator; extern grub_uint32_t grub_multiboot_payload_eip; From 319fc3d2138fc54b2fd9941a4746b9cd27892c84 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 18:44:12 +0100 Subject: [PATCH 036/271] Remove became useless i386/multiboot.h --- include/grub/i386/multiboot.h | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 include/grub/i386/multiboot.h diff --git a/include/grub/i386/multiboot.h b/include/grub/i386/multiboot.h deleted file mode 100644 index 02402e93d..000000000 --- a/include/grub/i386/multiboot.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2003,2004,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 . - */ - -#ifndef GRUB_MULTIBOOT_CPU_HEADER -#define GRUB_MULTIBOOT_CPU_HEADER 1 - -extern struct grub_relocator *grub_multiboot_relocator; -extern grub_uint32_t grub_multiboot_payload_eip; - -#endif /* ! GRUB_MULTIBOOT_CPU_HEADER */ From 4a86b371b4619abd3172adc8f2c333a04b669768 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 20:25:08 +0100 Subject: [PATCH 037/271] Fix coreboot compilation error --- kern/i386/coreboot/startup.S | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kern/i386/coreboot/startup.S b/kern/i386/coreboot/startup.S index e94950aae..93921f8ba 100644 --- a/kern/i386/coreboot/startup.S +++ b/kern/i386/coreboot/startup.S @@ -83,7 +83,3 @@ codestart: */ #include "../realmode.S" -/* - * Routines needed by Linux and Multiboot loaders. - */ -#include "../loader.S" From 5ffb1b84948d70c1a62ef0ffb7611d604de0f331 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 20:47:05 +0100 Subject: [PATCH 038/271] Remove leftover grub_unix_real_boot --- include/grub/i386/bsd.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index 4f5d5d1ee..b431658fe 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -254,8 +254,6 @@ struct grub_netbsd_btinfo_bootdisk int partition; }; -void grub_unix_real_boot (grub_addr_t entry, ...) - __attribute__ ((cdecl,noreturn)); grub_err_t grub_freebsd_load_elfmodule32 (struct grub_relocator *relocator, grub_file_t file, int argc, char *argv[], grub_addr_t *kern_end); From 3f995850a4b794a4462f79322e3317cb3aa1161f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 20:49:13 +0100 Subject: [PATCH 039/271] declare grub_multiboot_relocator in multiboot.h. --- include/grub/multiboot.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/grub/multiboot.h b/include/grub/multiboot.h index 75f39daa9..1df152056 100644 --- a/include/grub/multiboot.h +++ b/include/grub/multiboot.h @@ -32,6 +32,8 @@ #include #include +extern struct grub_relocator *grub_multiboot_relocator; + void grub_multiboot (int argc, char *argv[]); void grub_module (int argc, char *argv[]); From d3fbca98e126661bb95be7b35928d1d21cbf0395 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 20:50:04 +0100 Subject: [PATCH 040/271] Fix type problem --- loader/i386/linux.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/loader/i386/linux.c b/loader/i386/linux.c index f7abcf094..a70798f8b 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -68,7 +68,11 @@ static grub_uint32_t prot_mode_pages; static grub_uint32_t initrd_pages; static struct grub_relocator *relocator = NULL; static void *efi_mmap_buf; -static grub_size_t efi_mmap_size; +#ifdef GRUB_MACHINE_EFI +static grub_efi_uintn_t efi_mmap_size; +#else +static const grub_size_t efi_mmap_size = 0; +#endif /* FIXME */ #if 0 @@ -352,8 +356,6 @@ allocate_pages (grub_size_t prot_size) #ifdef GRUB_MACHINE_EFI efi_mmap_size = find_efi_mmap_size (); -#else - efi_mmap_size = 0; #endif grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n", From 3a871558844fa14a1e5c6336b989ae06757fb2fc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 20:51:00 +0100 Subject: [PATCH 041/271] Propagate removing of cpu/multiboot.h --- loader/i386/multiboot_mbi.c | 1 - 1 file changed, 1 deletion(-) diff --git a/loader/i386/multiboot_mbi.c b/loader/i386/multiboot_mbi.c index 4fc9a7ac1..675d4c283 100644 --- a/loader/i386/multiboot_mbi.c +++ b/loader/i386/multiboot_mbi.c @@ -22,7 +22,6 @@ #include #endif #include -#include #include #include #include From c34a120a01730144d616636266b0da634e9a65b6 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 20:55:34 +0100 Subject: [PATCH 042/271] Move linux.mod to conf/i386.rmk --- conf/i386-coreboot.rmk | 8 +------- conf/i386-efi.rmk | 7 +------ conf/i386-ieee1275.rmk | 7 +------ conf/i386-pc.rmk | 5 ----- conf/i386.rmk | 6 ++++++ conf/x86_64-efi.rmk | 8 +------- 6 files changed, 10 insertions(+), 31 deletions(-) diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk index 6b3d32847..ec67bb30f 100644 --- a/conf/i386-coreboot.rmk +++ b/conf/i386-coreboot.rmk @@ -102,8 +102,7 @@ bin_SCRIPTS += grub-mkrescue grub_mkrescue_SOURCES = util/grub-mkrescue.in # Modules. -pkglib_MODULES = linux.mod \ - aout.mod play.mod serial.mod \ +pkglib_MODULES = aout.mod play.mod serial.mod \ memdisk.mod pci.mod lspci.mod reboot.mod \ halt.mod datetime.mod date.mod datehook.mod \ lsmmap.mod mmap.mod @@ -120,11 +119,6 @@ mmap_mod_CFLAGS = $(COMMON_CFLAGS) mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For reboot.mod. reboot_mod_SOURCES = commands/reboot.c reboot_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/conf/i386-efi.rmk b/conf/i386-efi.rmk index 3846fa9f2..959cc2355 100644 --- a/conf/i386-efi.rmk +++ b/conf/i386-efi.rmk @@ -31,7 +31,7 @@ grub_install_SOURCES = util/i386/efi/grub-install.in # Modules. pkglib_MODULES = kernel.img chain.mod appleldr.mod \ - linux.mod halt.mod reboot.mod pci.mod lspci.mod \ + halt.mod reboot.mod pci.mod lspci.mod \ datetime.mod date.mod datehook.mod loadbios.mod \ fixvideo.mod mmap.mod acpi.mod @@ -93,11 +93,6 @@ appleldr_mod_SOURCES = loader/efi/appleloader.c appleldr_mod_CFLAGS = $(COMMON_CFLAGS) appleldr_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For halt.mod. halt_mod_SOURCES = commands/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk index 28d454ffd..c58547f49 100644 --- a/conf/i386-ieee1275.rmk +++ b/conf/i386-ieee1275.rmk @@ -55,7 +55,7 @@ grub_install_SOURCES = util/ieee1275/grub-install.in # Modules. pkglib_MODULES = halt.mod reboot.mod suspend.mod \ - aout.mod serial.mod linux.mod \ + aout.mod serial.mod \ nand.mod memdisk.mod pci.mod lspci.mod datetime.mod \ date.mod datehook.mod lsmmap.mod mmap.mod @@ -96,11 +96,6 @@ serial_mod_SOURCES = term/i386/pc/serial.c serial_mod_CFLAGS = $(COMMON_CFLAGS) serial_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For nand.mod. nand_mod_SOURCES = disk/ieee1275/nand.c nand_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 6c4f64f91..dbec54398 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -174,11 +174,6 @@ linux16_mod_SOURCES = loader/i386/pc/linux.c linux16_mod_CFLAGS = $(COMMON_CFLAGS) linux16_mod_LDFLAGS = $(COMMON_LDFLAGS) -pkglib_MODULES += linux.mod -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - pkglib_MODULES += xnu.mod xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c \ loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c diff --git a/conf/i386.rmk b/conf/i386.rmk index d7417f444..bf6d7425b 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -27,3 +27,9 @@ pkglib_MODULES += ata.mod ata_mod_SOURCES = disk/ata.c ata_mod_CFLAGS = $(COMMON_CFLAGS) ata_mod_LDFLAGS = $(COMMON_LDFLAGS) + +# For linux.mod. +pkglib_MODULES += linux.mod +linux_mod_SOURCES = loader/i386/linux.c +linux_mod_CFLAGS = $(COMMON_CFLAGS) +linux_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/conf/x86_64-efi.rmk b/conf/x86_64-efi.rmk index 0ee09655f..6db4c9569 100644 --- a/conf/x86_64-efi.rmk +++ b/conf/x86_64-efi.rmk @@ -30,7 +30,7 @@ grub_install_SOURCES = util/i386/efi/grub-install.in # Modules. pkglib_MODULES = kernel.img chain.mod appleldr.mod \ - halt.mod reboot.mod linux.mod pci.mod lspci.mod \ + halt.mod reboot.mod pci.mod lspci.mod \ datetime.mod date.mod datehook.mod loadbios.mod \ fixvideo.mod mmap.mod acpi.mod ata.mod @@ -93,12 +93,6 @@ appleldr_mod_SOURCES = loader/efi/appleloader.c appleldr_mod_CFLAGS = $(COMMON_CFLAGS) appleldr_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_ASFLAGS = $(COMMON_ASFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For halt.mod. halt_mod_SOURCES = commands/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) From 021f5a22157cf9773f570802bd0ab1975e914a41 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 20:56:57 +0100 Subject: [PATCH 043/271] Remove leftovers in multiboot.c --- loader/i386/multiboot.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c index be11fe20b..f7bf2a774 100644 --- a/loader/i386/multiboot.c +++ b/loader/i386/multiboot.c @@ -32,9 +32,7 @@ #include #include -#include #include -#include #include #include #include @@ -48,7 +46,7 @@ extern grub_dl_t my_mod; struct grub_relocator *grub_multiboot_relocator = NULL; -grub_uint32_t grub_multiboot_payload_eip; +static grub_uint32_t grub_multiboot_payload_eip; static grub_err_t grub_multiboot_boot (void) From c30074e344b6a2e91a9d24eb2afe976a462779ad Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 21:00:46 +0100 Subject: [PATCH 044/271] Cleanup in bsd loaders --- loader/i386/bsd.c | 16 ++++++++-------- loader/i386/bsdXX.c | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 9c42f6a5c..f2ac4043d 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -17,9 +17,8 @@ */ #include -#include +#include #include -#include #include #include #include @@ -42,7 +41,7 @@ #include #include #include -#include +#include #define ALIGN_DWORD(a) ALIGN_UP (a, 4) #define ALIGN_QWORD(a) ALIGN_UP (a, 8) @@ -313,7 +312,7 @@ grub_freebsd_add_mmap (void) (unsigned long long) mmap_buf[i].addr, (unsigned long long) mmap_buf[i].size); - grub_dprintf ("bsd", "%d entries in smap\n", mmap - mmap_buf); + grub_dprintf ("bsd", "%ld entries in smap\n", (long) (mmap - mmap_buf)); grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_SMAP, mmap_buf, len); @@ -413,9 +412,9 @@ grub_freebsd_list_modules (void) break; case FREEBSD_MODINFO_ADDR: { - grub_addr_t addr; + grub_uint32_t addr; - addr = *((grub_addr_t *) (mod_buf + pos)); + addr = *((grub_uint32_t *) (mod_buf + pos)); grub_printf (" 0x%08x", addr); break; } @@ -579,6 +578,7 @@ grub_freebsd_boot (void) GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; + grub_memcpy (&stack[8], &bi, sizeof (bi)); state.eip = entry; state.esp = stack_target; @@ -1032,8 +1032,8 @@ grub_bsd_load_elf (grub_elf_t elf) if (err) return err; - grub_dprintf ("bsd", "kern_start = %x, kern_end = %x\n", kern_start, - kern_end); + grub_dprintf ("bsd", "kern_start = %lx, kern_end = %lx\n", + (unsigned long) kern_start, (unsigned long) kern_end); err = grub_relocator_alloc_chunk_addr (relocator, &kern_chunk_src, kern_start, kern_end - kern_start); if (err) diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index ad6c1bc75..41dfe89e4 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -1,9 +1,9 @@ #include -#include +#include #include #include #include -#include +#include #define ALIGN_PAGE(a) ALIGN_UP (a, 4096) From 8874cbbded80526db0e0049b1bd0f7a9a252e06a Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 21:04:19 +0100 Subject: [PATCH 045/271] Initial multi-i386 support for *BSD --- conf/i386-coreboot.rmk | 14 +------------- conf/i386-pc.rmk | 13 +------------ conf/i386.rmk | 13 +++++++++++++ loader/i386/bsd.c | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk index ec67bb30f..6ed6c54ac 100644 --- a/conf/i386-coreboot.rmk +++ b/conf/i386-coreboot.rmk @@ -102,7 +102,7 @@ bin_SCRIPTS += grub-mkrescue grub_mkrescue_SOURCES = util/grub-mkrescue.in # Modules. -pkglib_MODULES = aout.mod play.mod serial.mod \ +pkglib_MODULES = play.mod serial.mod \ memdisk.mod pci.mod lspci.mod reboot.mod \ halt.mod datetime.mod date.mod datehook.mod \ lsmmap.mod mmap.mod @@ -150,18 +150,6 @@ multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2 multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS) multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS) -# For aout.mod. -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bsd.mod -pkglib_MODULES += bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c -bsd_mod_CFLAGS = $(COMMON_CFLAGS) -bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) -bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) - # For play.mod. play_mod_SOURCES = commands/i386/pc/play.c play_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index dbec54398..0a90bd746 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -119,7 +119,7 @@ pkglib_MODULES = biosdisk.mod chain.mod \ reboot.mod halt.mod \ vbe.mod vbetest.mod vbeinfo.mod play.mod serial.mod \ vga.mod memdisk.mod pci.mod lspci.mod \ - aout.mod bsd.mod pxe.mod pxecmd.mod datetime.mod date.mod \ + pxe.mod pxecmd.mod datetime.mod date.mod \ datehook.mod lsmmap.mod ata_pthru.mod hdparm.mod \ usb.mod uhci.mod ohci.mod usbtest.mod usbms.mod usb_keyboard.mod \ efiemu.mod mmap.mod acpi.mod drivemap.mod @@ -253,17 +253,6 @@ lspci_mod_SOURCES = commands/lspci.c lspci_mod_CFLAGS = $(COMMON_CFLAGS) lspci_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For aout.mod -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c -bsd_mod_CFLAGS = $(COMMON_CFLAGS) -bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) -bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) - # For usb.mod usb_mod_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c usb_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/conf/i386.rmk b/conf/i386.rmk index bf6d7425b..cebe67eaf 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -33,3 +33,16 @@ pkglib_MODULES += linux.mod linux_mod_SOURCES = loader/i386/linux.c linux_mod_CFLAGS = $(COMMON_CFLAGS) linux_mod_LDFLAGS = $(COMMON_LDFLAGS) + +# For aout.mod +pkglib_MODULES += aout.mod +aout_mod_SOURCES = loader/aout.c +aout_mod_CFLAGS = $(COMMON_CFLAGS) +aout_mod_LDFLAGS = $(COMMON_LDFLAGS) + +# For bsd.mod +pkglib_MODULES += bsd.mod +bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c +bsd_mod_CFLAGS = $(COMMON_CFLAGS) +bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) +bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index f2ac4043d..801eb9dfd 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -37,6 +37,9 @@ #ifdef GRUB_MACHINE_PCBIOS #include #endif +#ifdef GRUB_MACHINE_EFI +#include +#endif #include #include #include @@ -553,6 +556,9 @@ grub_freebsd_boot (void) if (err) return err; + if (! grub_efi_finish_boot_services ()) + grub_fatal ("cannot exit boot services"); + pagetable = p - (4096 * 3); fill_bsd64_pagetable (pagetable, (pagetable - p0) + p_target); @@ -579,6 +585,9 @@ grub_freebsd_boot (void) if (err) return err; + if (! grub_efi_finish_boot_services ()) + grub_fatal ("cannot exit boot services"); + grub_memcpy (&stack[8], &bi, sizeof (bi)); state.eip = entry; state.esp = stack_target; @@ -684,6 +693,9 @@ grub_openbsd_boot (void) buf = (grub_uint8_t *) pa; argbuf_target_end = buf - buf0 + buf_target; + if (! grub_efi_finish_boot_services ()) + grub_fatal ("cannot exit boot services"); + state.eip = entry; state.esp = ((grub_uint8_t *) stack - buf0) + buf_target; stack[0] = entry; @@ -804,6 +816,9 @@ grub_netbsd_boot (void) if (err) return err; + if (! grub_efi_finish_boot_services ()) + grub_fatal ("cannot exit boot services"); + state.eip = entry; state.esp = stack_target; stack[0] = entry; From 0c31c22bda4662340cbaf46c66a89213319d84e4 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 21:06:49 +0100 Subject: [PATCH 046/271] Remove leftover aout.mod --- conf/i386-ieee1275.rmk | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk index c58547f49..4d652a504 100644 --- a/conf/i386-ieee1275.rmk +++ b/conf/i386-ieee1275.rmk @@ -54,8 +54,7 @@ sbin_SCRIPTS = grub-install grub_install_SOURCES = util/ieee1275/grub-install.in # Modules. -pkglib_MODULES = halt.mod reboot.mod suspend.mod \ - aout.mod serial.mod \ +pkglib_MODULES = halt.mod reboot.mod suspend.mod serial.mod \ nand.mod memdisk.mod pci.mod lspci.mod datetime.mod \ date.mod datehook.mod lsmmap.mod mmap.mod @@ -71,11 +70,6 @@ mmap_mod_CFLAGS = $(COMMON_CFLAGS) mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) -# For aout.mod. -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For suspend.mod suspend_mod_SOURCES = commands/ieee1275/suspend.c suspend_mod_CFLAGS = $(COMMON_CFLAGS) From 6d8ebf76c412080434c47258a50475249f9f4faf Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 13 Jan 2010 23:17:12 +0100 Subject: [PATCH 047/271] support relocator64 from x86_64 mode --- lib/i386/relocator64.S | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/lib/i386/relocator64.S b/lib/i386/relocator64.S index 05627fb90..37a77b3b5 100644 --- a/lib/i386/relocator64.S +++ b/lib/i386/relocator64.S @@ -43,13 +43,13 @@ LOCAL(base): add $(LOCAL(cont0) - LOCAL(base)), RAX jmp *RAX LOCAL(cont0): +#ifndef __x86_64__ lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX mov RAX, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) -#ifndef __x86_64__ /* Disable paging. */ movl %cr0, %eax andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax @@ -76,6 +76,12 @@ VARIABLE(grub_relocator64_cr3) movl %cr0, %eax orl $GRUB_MEMORY_CPU_CR0_PAGING_ON, %eax movl %eax, %cr0 + + /* Load GDT. */ + lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) + + /* Update %cs. */ + ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) #else /* mov imm64, %rax */ .byte 0x48 @@ -84,11 +90,6 @@ VARIABLE(grub_relocator64_cr3) .quad 0 movq %rax, %cr3 #endif - /* Load GDT. */ - lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) - - /* Update %cs. */ - ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) LOCAL(cont1): .code64 @@ -143,6 +144,7 @@ LOCAL(jump_addr): VARIABLE(grub_relocator64_rip) .quad 0 +#ifndef __x86_64__ .p2align 4 LOCAL(gdt): /* NULL. */ @@ -185,22 +187,14 @@ LOCAL(gdt): LOCAL(gdtdesc): .word 0x20 LOCAL(gdt_addr): -#ifdef __x86_64__ - /* Filled by the code. */ - .quad 0 -#else /* Filled by the code. */ .long 0 -#endif .p2align 4 LOCAL(jump_vector): /* Jump location. Is filled by the code */ -#ifdef __x86_64__ - .quad 0 -#else .long 0 -#endif .long CODE64_SEGMENT +#endif VARIABLE(grub_relocator64_end) From ea96d34596f92abfe7f52f4c24f74c0cea043aa1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 14 Jan 2010 13:40:17 +0100 Subject: [PATCH 048/271] Clarify type of bi_kernelname and bi_nfs_diskless --- include/grub/i386/bsd.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index b431658fe..f68539a3c 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -97,8 +97,8 @@ enum bsd_kernel_types struct grub_freebsd_bootinfo { grub_uint32_t bi_version; - grub_uint8_t *bi_kernelname; - struct nfs_diskless *bi_nfs_diskless; + grub_uint32_t bi_kernelname; + grub_uint32_t bi_nfs_diskless; grub_uint32_t bi_n_bios_used; grub_uint32_t bi_bios_geom[FREEBSD_N_BIOS_GEOM]; grub_uint32_t bi_size; From 6a42fe54db23e792738a931f5d4960ecab46a478 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 14 Jan 2010 19:12:24 +0100 Subject: [PATCH 049/271] Add missing #ifdef --- loader/i386/bsd.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 801eb9dfd..58af4eb7d 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -556,8 +556,10 @@ grub_freebsd_boot (void) if (err) return err; +#ifdef GRUB_MACHINE_EFI if (! grub_efi_finish_boot_services ()) grub_fatal ("cannot exit boot services"); +#endif pagetable = p - (4096 * 3); fill_bsd64_pagetable (pagetable, (pagetable - p0) + p_target); @@ -585,8 +587,10 @@ grub_freebsd_boot (void) if (err) return err; +#ifdef GRUB_MACHINE_EFI if (! grub_efi_finish_boot_services ()) grub_fatal ("cannot exit boot services"); +#endif grub_memcpy (&stack[8], &bi, sizeof (bi)); state.eip = entry; @@ -693,8 +697,10 @@ grub_openbsd_boot (void) buf = (grub_uint8_t *) pa; argbuf_target_end = buf - buf0 + buf_target; +#ifdef GRUB_MACHINE_EFI if (! grub_efi_finish_boot_services ()) grub_fatal ("cannot exit boot services"); +#endif state.eip = entry; state.esp = ((grub_uint8_t *) stack - buf0) + buf_target; @@ -816,8 +822,10 @@ grub_netbsd_boot (void) if (err) return err; +#ifdef GRUB_MACHINE_EFI if (! grub_efi_finish_boot_services ()) grub_fatal ("cannot exit boot services"); +#endif state.eip = entry; state.esp = stack_target; From 4a04699258764201f3f5dffbd974740c4e4e5603 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 14 Jan 2010 19:14:04 +0100 Subject: [PATCH 050/271] Fix a mistake with size calculation --- lib/relocator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 090a6c7e3..b7fe404c3 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -308,12 +308,12 @@ malloc_in_range (struct grub_relocator *rel, if (best_addr - (grub_addr_t) hb >= sizeof (*hb)) { - hb->size = (best_addr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2; + hb->size = ((best_addr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2) - 1; if (foll) { foll->next = hb; hbp->next = foll; - if (rb->first == hbp) + if (rb->first == hb) rb->first = foll; } } From 865a0f8aa7dfbc98d40cc3bda9bc816e2d1f5e3f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 14 Jan 2010 19:14:24 +0100 Subject: [PATCH 051/271] elf symbols --- include/grub/multiboot.h | 3 ++ loader/i386/multiboot_elfxx.c | 61 +++++++++++++++++++++++++++++++++++ loader/i386/multiboot_mbi.c | 32 +++++++++++++++++- 3 files changed, 95 insertions(+), 1 deletion(-) diff --git a/include/grub/multiboot.h b/include/grub/multiboot.h index 1df152056..830490170 100644 --- a/include/grub/multiboot.h +++ b/include/grub/multiboot.h @@ -43,6 +43,9 @@ grub_err_t grub_multiboot_init_mbi (int argc, char *argv[]); grub_err_t grub_multiboot_add_module (grub_addr_t start, grub_size_t size, int argc, char *argv[]); void grub_multiboot_set_bootdev (void); +void +grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize, + unsigned shndx, void *data); #endif /* ! GRUB_MULTIBOOT_HEADER */ diff --git a/loader/i386/multiboot_elfxx.c b/loader/i386/multiboot_elfxx.c index 155de5801..d996835a5 100644 --- a/loader/i386/multiboot_elfxx.c +++ b/loader/i386/multiboot_elfxx.c @@ -129,6 +129,67 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) if (i == ehdr->e_phnum) return grub_error (GRUB_ERR_BAD_OS, "entry point isn't in a segment"); + if (ehdr->e_shnum) + { + grub_uint8_t *shdr, *shdrptr; + + shdr = grub_malloc (ehdr->e_shnum * ehdr->e_shentsize); + if (!shdr) + return grub_errno; + + if (grub_file_seek (file, ehdr->e_shoff) == (grub_off_t) -1) + return grub_error (GRUB_ERR_BAD_OS, + "invalid offset to section headers"); + + if (grub_file_read (file, shdr, ehdr->e_shnum * ehdr->e_shentsize) + != (grub_ssize_t) ehdr->e_shnum * ehdr->e_shentsize) + return grub_error (GRUB_ERR_BAD_OS, + "couldn't read sections headers from file"); + + for (shdrptr = shdr, i = 0; i < ehdr->e_shnum; + shdrptr += ehdr->e_shentsize, i++) + { + Elf_Shdr *sh = (Elf_Shdr *) shdrptr; + void *src; + grub_addr_t target; + grub_err_t err; + + /* This section is a loaded section, + so we don't care. */ + if (sh->sh_addr != 0) + continue; + + /* This section is empty, so we don't care. */ + if (sh->sh_size == 0) + continue; + + err + = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, + &src, &target, 0, + (0xffffffff - sh->sh_size) + 1, + sh->sh_size, + sh->sh_addralign, + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + { + grub_dprintf ("multiboot_loader", "Error loading shdr %d\n", i); + return err; + } + + if (grub_file_seek (file, sh->sh_offset) == (grub_off_t) -1) + return grub_error (GRUB_ERR_BAD_OS, + "invalid offset in section header"); + + if (grub_file_read (file, src, sh->sh_size) + != (grub_ssize_t) sh->sh_size) + return grub_error (GRUB_ERR_BAD_OS, + "couldn't read segment from file"); + sh->sh_addr = target; + } + grub_multiboot_add_elfsyms (ehdr->e_shnum, ehdr->e_shentsize, + ehdr->e_shstrndx, shdr); + } + #undef phdr return grub_errno; diff --git a/loader/i386/multiboot_mbi.c b/loader/i386/multiboot_mbi.c index 675d4c283..dbc8dcdfd 100644 --- a/loader/i386/multiboot_mbi.c +++ b/loader/i386/multiboot_mbi.c @@ -46,6 +46,9 @@ static unsigned modcnt; static char *cmdline = NULL; static grub_uint32_t bootdev; static int bootdev_set; +static grub_size_t elf_sec_num, elf_sec_entsize; +static unsigned elf_sec_shstrndx; +static void *elf_sections; /* Return the length of the Multiboot mmap that will be needed to allocate our platform's map. */ @@ -73,7 +76,8 @@ grub_multiboot_get_mbi_size (void) { return sizeof (struct multiboot_info) + ALIGN_UP (cmdline_size, 4) + modcnt * sizeof (struct multiboot_mod_list) + total_modcmd - + ALIGN_UP (sizeof(PACKAGE_STRING), 4) + grub_get_multiboot_mmap_len (); + + ALIGN_UP (sizeof(PACKAGE_STRING), 4) + grub_get_multiboot_mmap_len () + + elf_sec_entsize * elf_sec_num; } /* Fill previously allocated Multiboot mmap. */ @@ -192,9 +196,30 @@ grub_multiboot_make_mbi (grub_uint32_t *target) mbi->flags |= MULTIBOOT_INFO_BOOTDEV; } + if (elf_sec_num) + { + mbi->u.elf_sec.addr = ptrdest; + grub_memcpy (ptrorig, elf_sections, elf_sec_entsize * elf_sec_num); + mbi->u.elf_sec.num = elf_sec_num; + mbi->u.elf_sec.size = elf_sec_entsize; + mbi->u.elf_sec.shndx = elf_sec_shstrndx; + + mbi->flags |= MULTIBOOT_INFO_ELF_SHDR; + } + return GRUB_ERR_NONE; } +void +grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize, + unsigned shndx, void *data) +{ + elf_sec_num = num; + elf_sec_shstrndx = shndx; + elf_sec_entsize = entsize; + elf_sections = data; +} + void grub_multiboot_free_mbi (void) { @@ -215,6 +240,11 @@ grub_multiboot_free_mbi (void) } modules = NULL; modules_last = NULL; + + grub_free (elf_sections); + elf_sections = NULL; + elf_sec_entsize = 0; + elf_sec_num = 0; } grub_err_t From 9205ac07e3a1a8c4214298f4a6507c6a5a8f549d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 14 Jan 2010 22:06:26 +0100 Subject: [PATCH 052/271] Fix off-by-one error --- lib/relocator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index b7fe404c3..3e93abbaa 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -161,7 +161,7 @@ get_best_header (struct grub_relocator *rel, { grub_addr_t allowable_start, allowable_end; allowable_start = (grub_addr_t) h; - allowable_end = (grub_addr_t) (h + 1 + h->size); + allowable_end = (grub_addr_t) (h + h->size); try_addr (allowable_start, allowable_end); @@ -308,7 +308,7 @@ malloc_in_range (struct grub_relocator *rel, if (best_addr - (grub_addr_t) hb >= sizeof (*hb)) { - hb->size = ((best_addr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2) - 1; + hb->size = ((best_addr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2); if (foll) { foll->next = hb; From def6307401695e742fdf6eaf7b894c696684cd32 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 15 Jan 2010 11:34:22 +0100 Subject: [PATCH 053/271] Be paranoid in relocator allocations --- lib/relocator.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 3e93abbaa..0064824a4 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -163,6 +163,9 @@ get_best_header (struct grub_relocator *rel, allowable_start = (grub_addr_t) h; allowable_end = (grub_addr_t) (h + h->size); + if (h->magic != GRUB_MM_FREE_MAGIC) + grub_fatal ("free magic is broken at %p: 0x%x", h, h->magic); + try_addr (allowable_start, allowable_end); if ((grub_addr_t) h == (grub_addr_t) (rb + 1)) @@ -299,7 +302,8 @@ malloc_in_range (struct grub_relocator *rel, { struct grub_mm_header *foll = NULL; - if (best_addr + size <= (grub_addr_t) (hb + hb->size)) + if (ALIGN_UP (best_addr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN + <= (grub_addr_t) (hb + hb->size)) { foll = (void *) ALIGN_UP (best_addr + size, GRUB_MM_ALIGN); foll->magic = GRUB_MM_FREE_MAGIC; @@ -324,11 +328,11 @@ malloc_in_range (struct grub_relocator *rel, else foll = hb->next; + hbp->next = foll; if (rb->first == hb) rb->first = foll; if (rb->first == hb) rb->first = (void *) (rb + 1); - hbp->next = foll; } *res = best_addr; return 1; From 2386d586b95df9553a64a1cd7a99cc0638bc0a52 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 15 Jan 2010 11:39:05 +0100 Subject: [PATCH 054/271] Merge some knetbsdcode into kfreebsd one. Serial supoort for knetbsd --- include/grub/i386/bsd.h | 54 ++-- loader/i386/bsd.c | 527 ++++++++++++++++++++++------------------ loader/i386/bsdXX.c | 38 +-- 3 files changed, 330 insertions(+), 289 deletions(-) diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index f68539a3c..aa19b2338 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -114,6 +114,12 @@ struct grub_freebsd_bootinfo grub_uint32_t bi_modulep; } __attribute__ ((packed)); +struct freebsd_tag_header +{ + grub_uint32_t type; + grub_uint32_t len; +}; + #define OPENBSD_RB_ASKNAME (1 << 0) /* ask for file name to reboot from */ #define OPENBSD_RB_SINGLE (1 << 1) /* reboot to single user only */ #define OPENBSD_RB_NOSYNC (1 << 2) /* dont sync before reboot */ @@ -198,48 +204,21 @@ struct grub_openbsd_bootargs struct grub_netbsd_bootinfo { grub_uint32_t bi_count; - grub_addr_t bi_data[1]; + grub_addr_t bi_data[0]; }; #define NETBSD_BTINFO_BOOTPATH 0 #define NETBSD_BTINFO_ROOTDEVICE 1 -#define NETBSD_BTINFO_BOOTDISK 3 +#define NETBSD_BTINFO_CONSOLE 6 #define NETBSD_BTINFO_MEMMAP 9 struct grub_netbsd_btinfo_common { - int len; - int type; -}; - -struct grub_netbsd_btinfo_mmap_header -{ - struct grub_netbsd_btinfo_common common; - grub_uint32_t count; -}; - -struct grub_netbsd_btinfo_mmap_entry -{ - grub_uint64_t addr; - grub_uint64_t len; -#define NETBSD_MMAP_AVAILABLE 1 -#define NETBSD_MMAP_RESERVED 2 -#define NETBSD_MMAP_ACPI 3 -#define NETBSD_MMAP_NVS 4 + grub_uint32_t len; grub_uint32_t type; }; -struct grub_netbsd_btinfo_bootpath -{ - struct grub_netbsd_btinfo_common common; - char bootpath[80]; -}; - -struct grub_netbsd_btinfo_rootdevice -{ - struct grub_netbsd_btinfo_common common; - char devname[16]; -}; +#define GRUB_NETBSD_MAX_BOOTPATH_LEN 80 struct grub_netbsd_btinfo_bootdisk { @@ -254,6 +233,15 @@ struct grub_netbsd_btinfo_bootdisk int partition; }; +struct grub_netbsd_btinfo_serial +{ + char devname[16]; + grub_uint32_t addr; + grub_uint32_t speed; +}; + +#define GRUB_NETBSD_MAX_ROOTDEVICE_LEN 16 + grub_err_t grub_freebsd_load_elfmodule32 (struct grub_relocator *relocator, grub_file_t file, int argc, char *argv[], grub_addr_t *kern_end); @@ -268,8 +256,8 @@ grub_err_t grub_freebsd_load_elf_meta64 (struct grub_relocator *relocator, grub_file_t file, grub_addr_t *kern_end); -grub_err_t grub_freebsd_add_meta (grub_uint32_t type, void *data, - grub_uint32_t len); +grub_err_t grub_bsd_add_meta (grub_uint32_t type, + void *data, grub_uint32_t len); grub_err_t grub_freebsd_add_meta_module (char *filename, char *type, int argc, char **argv, grub_addr_t addr, grub_uint32_t size); diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 58af4eb7d..3565884d5 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -51,20 +51,29 @@ #define ALIGN_VAR(a) ((is_64bit) ? (ALIGN_QWORD(a)) : (ALIGN_DWORD(a))) #define ALIGN_PAGE(a) ALIGN_UP (a, 4096) -#define MOD_BUF_ALLOC_UNIT 4096 - static int kernel_type = KERNEL_TYPE_NONE; static grub_dl_t my_mod; static grub_addr_t entry, entry_hi, kern_start, kern_end; static void *kern_chunk_src; static grub_uint32_t bootflags; -static char *mod_buf; -static grub_uint32_t mod_buf_len, mod_buf_max, kern_end_mdofs; static int is_elf_kernel, is_64bit; -static char *netbsd_root = NULL; static grub_uint32_t openbsd_root; struct grub_relocator *relocator = NULL; +struct bsd_tag +{ + struct bsd_tag *next; + grub_size_t len; + grub_uint32_t type; + union { + grub_uint8_t a; + grub_uint16_t b; + grub_uint32_t c; + } data[0]; +}; + +struct bsd_tag *tags, *tags_last; + static const struct grub_arg_option freebsd_opts[] = { {"dual", 'D', 0, N_("Display output on all consoles."), 0, 0}, @@ -127,6 +136,8 @@ static const struct grub_arg_option netbsd_opts[] = {"debug", 'x', 0, N_("Boot with debug messages."), 0, 0}, {"silent", 'z', 0, N_("Supress normal output (warnings remain)."), 0, 0}, {"root", 'r', 0, N_("Set root device."), N_("DEVICE"), ARG_TYPE_STRING}, + {"serial", 'h', GRUB_ARG_OPTION_OPTIONAL, + N_("Use serial console."), N_("ADDR,SPEED"), ARG_TYPE_STRING}, {0, 0, 0, 0, 0, 0} }; @@ -139,6 +150,7 @@ static const grub_uint32_t netbsd_flags[] = }; #define NETBSD_ROOT_ARG (ARRAY_SIZE (netbsd_flags) - 1) +#define NETBSD_SERIAL_ARG (ARRAY_SIZE (netbsd_flags)) static void grub_bsd_get_device (grub_uint32_t * biosdev, @@ -180,36 +192,23 @@ grub_bsd_get_device (grub_uint32_t * biosdev, } grub_err_t -grub_freebsd_add_meta (grub_uint32_t type, void *data, grub_uint32_t len) +grub_bsd_add_meta (grub_uint32_t type, void *data, grub_uint32_t len) { - if (mod_buf_max < mod_buf_len + len + 8) - { - char *new_buf; - - do - { - mod_buf_max += MOD_BUF_ALLOC_UNIT; - } - while (mod_buf_max < mod_buf_len + len + 8); - - new_buf = grub_malloc (mod_buf_max); - if (!new_buf) - return grub_errno; - - grub_memcpy (new_buf, mod_buf, mod_buf_len); - grub_free (mod_buf); - - mod_buf = new_buf; - } - - *((grub_uint32_t *) (mod_buf + mod_buf_len)) = type; - *((grub_uint32_t *) (mod_buf + mod_buf_len + 4)) = len; - mod_buf_len += 8; + struct bsd_tag *newtag; + newtag = grub_malloc (len + sizeof (struct bsd_tag)); + if (!newtag) + return grub_errno; + newtag->len = len; + newtag->type = type; + newtag->next = NULL; if (len) - grub_memcpy (mod_buf + mod_buf_len, data, len); - - mod_buf_len = ALIGN_VAR (mod_buf_len + len); + grub_memcpy (newtag->data, data, len); + if (tags_last) + tags_last->next = newtag; + else + tags = newtag; + tags_last = newtag; return GRUB_ERR_NONE; } @@ -226,13 +225,13 @@ struct grub_e820_mmap #define GRUB_E820_NVS 4 #define GRUB_E820_EXEC_CODE 5 -static grub_err_t -grub_freebsd_add_mmap (void) +static void +generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf) { - grub_size_t len = 0; - struct grub_e820_mmap *mmap_buf = 0; - struct grub_e820_mmap *mmap = 0; + int count = 0; int isfirstrun = 1; + struct grub_e820_mmap *mmap = buf; + struct grub_e820_mmap prev, cur; auto int NESTED_FUNC_ATTR hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t size, @@ -240,86 +239,110 @@ grub_freebsd_add_mmap (void) { /* FreeBSD assumes that first 64KiB are available. Not always true but try to prevent panic somehow. */ - if (isfirstrun && addr != 0) + if (kernel_type == KERNEL_TYPE_FREEBSD && isfirstrun && addr != 0) { + cur.addr = 0; + cur.size = (addr < 0x10000) ? addr : 0x10000; + cur.type = GRUB_E820_RAM; if (mmap) - { - mmap->addr = 0; - mmap->size = (addr < 0x10000) ? addr : 0x10000; - mmap->type = GRUB_E820_RAM; - mmap++; - } - else - len += sizeof (struct grub_e820_mmap); + *mmap++ = cur; + + prev = cur; + count++; } isfirstrun = 0; - if (mmap) + + cur.addr = addr; + cur.size = size; + switch (type) { - mmap->addr = addr; - mmap->size = size; - switch (type) - { - case GRUB_MACHINE_MEMORY_AVAILABLE: - mmap->type = GRUB_E820_RAM; - break; + case GRUB_MACHINE_MEMORY_AVAILABLE: + cur.type = GRUB_E820_RAM; + break; #ifdef GRUB_MACHINE_MEMORY_ACPI - case GRUB_MACHINE_MEMORY_ACPI: - mmap->type = GRUB_E820_ACPI; - break; + case GRUB_MACHINE_MEMORY_ACPI: + cur.type = GRUB_E820_ACPI; + break; #endif #ifdef GRUB_MACHINE_MEMORY_NVS - case GRUB_MACHINE_MEMORY_NVS: - mmap->type = GRUB_E820_NVS; - break; + case GRUB_MACHINE_MEMORY_NVS: + cur.type = GRUB_E820_NVS; + break; #endif - default: + default: #ifdef GRUB_MACHINE_MEMORY_CODE - case GRUB_MACHINE_MEMORY_CODE: + case GRUB_MACHINE_MEMORY_CODE: #endif #ifdef GRUB_MACHINE_MEMORY_RESERVED - case GRUB_MACHINE_MEMORY_RESERVED: + case GRUB_MACHINE_MEMORY_RESERVED: #endif - mmap->type = GRUB_E820_RESERVED; - break; - } + cur.type = GRUB_E820_RESERVED; + break; + } - /* Merge regions if possible. */ - if (mmap != mmap_buf && mmap->type == mmap[-1].type && - mmap->addr == mmap[-1].addr + mmap[-1].size) - mmap[-1].size += mmap->size; - else - mmap++; + /* Merge regions if possible. */ + if (count && cur.type == prev.type && cur.addr == prev.addr + prev.size) + { + prev.size += cur.size; + if (mmap) + mmap[-1] = cur; } else - len += sizeof (struct grub_e820_mmap); + { + if (mmap) + *mmap++ = cur; + prev = cur; + count++; + } return 0; } - grub_mmap_iterate (hook); - mmap_buf = mmap = grub_malloc (len); - if (! mmap) - return grub_errno; - isfirstrun = 1; grub_mmap_iterate (hook); - len = (mmap - mmap_buf) * sizeof (struct grub_e820_mmap); - int i; - for (i = 0; i < mmap - mmap_buf; i++) - grub_dprintf ("bsd", "smap %d, %d:%llx - %llx\n", i, - mmap_buf[i].type, - (unsigned long long) mmap_buf[i].addr, - (unsigned long long) mmap_buf[i].size); + if (len) + *len = count * sizeof (struct grub_e820_mmap); + *cnt = count; - grub_dprintf ("bsd", "%ld entries in smap\n", (long) (mmap - mmap_buf)); - grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | - FREEBSD_MODINFOMD_SMAP, mmap_buf, len); + return; +} - grub_free (mmap_buf); +static grub_err_t +grub_bsd_add_mmap (void) +{ + grub_size_t len, cnt; + void *buf = NULL, *buf0; + + generate_e820_mmap (&len, &cnt, buf); + + if (kernel_type == KERNEL_TYPE_NETBSD) + len += sizeof (grub_uint32_t); + + buf = grub_malloc (len); + if (!buf) + return grub_errno; + + buf0 = buf; + if (kernel_type == KERNEL_TYPE_NETBSD) + { + *(grub_uint32_t *) buf = cnt; + buf = ((grub_uint32_t *) buf + 1); + } + + generate_e820_mmap (NULL, &cnt, buf); + + grub_dprintf ("bsd", "%u entries in smap\n", cnt); + if (kernel_type == KERNEL_TYPE_NETBSD) + grub_bsd_add_meta (NETBSD_BTINFO_MEMMAP, buf0, len); + else + grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | + FREEBSD_MODINFOMD_SMAP, buf0, len); + + grub_free (buf0); return grub_errno; } @@ -337,29 +360,22 @@ grub_freebsd_add_meta_module (char *filename, char *type, int argc, char **argv, if (grub_strcmp (type, "/boot/zfs/zpool.cache") == 0) name = "/boot/zfs/zpool.cache"; - if (grub_freebsd_add_meta (FREEBSD_MODINFO_NAME, name, - grub_strlen (name) + 1)) + if (grub_bsd_add_meta (FREEBSD_MODINFO_NAME, name, grub_strlen (name) + 1)) return grub_errno; if (is_64bit) { grub_uint64_t addr64 = addr, size64 = size; - if ((grub_freebsd_add_meta (FREEBSD_MODINFO_TYPE, type, - grub_strlen (type) + 1)) || - (grub_freebsd_add_meta (FREEBSD_MODINFO_ADDR, &addr64, - sizeof (addr64))) || - (grub_freebsd_add_meta (FREEBSD_MODINFO_SIZE, &size64, - sizeof (size64)))) + if (grub_bsd_add_meta (FREEBSD_MODINFO_TYPE, type, grub_strlen (type) + 1) + || grub_bsd_add_meta (FREEBSD_MODINFO_ADDR, &addr64, sizeof (addr64)) + || grub_bsd_add_meta (FREEBSD_MODINFO_SIZE, &size64, sizeof (size64))) return grub_errno; } else { - if ((grub_freebsd_add_meta (FREEBSD_MODINFO_TYPE, type, - grub_strlen (type) + 1)) || - (grub_freebsd_add_meta (FREEBSD_MODINFO_ADDR, &addr, - sizeof (addr))) || - (grub_freebsd_add_meta (FREEBSD_MODINFO_SIZE, &size, - sizeof (size)))) + if (grub_bsd_add_meta (FREEBSD_MODINFO_TYPE, type, grub_strlen (type) + 1) + || grub_bsd_add_meta (FREEBSD_MODINFO_ADDR, &addr, sizeof (addr)) + || grub_bsd_add_meta (FREEBSD_MODINFO_SIZE, &size, sizeof (size))) return grub_errno; } @@ -386,7 +402,7 @@ grub_freebsd_add_meta_module (char *filename, char *type, int argc, char **argv, } *p = 0; - if (grub_freebsd_add_meta (FREEBSD_MODINFO_ARGS, cmdline, n)) + if (grub_bsd_add_meta (FREEBSD_MODINFO_ARGS, cmdline, n)) return grub_errno; } } @@ -397,27 +413,23 @@ grub_freebsd_add_meta_module (char *filename, char *type, int argc, char **argv, static void grub_freebsd_list_modules (void) { - grub_uint32_t pos = 0; + struct bsd_tag *tag; grub_printf (" %-18s %-18s%14s%14s\n", "name", "type", "addr", "size"); - while (pos < mod_buf_len) - { - grub_uint32_t type, size; - type = *((grub_uint32_t *) (mod_buf + pos)); - size = *((grub_uint32_t *) (mod_buf + pos + 4)); - pos += 8; - switch (type) + for (tag = tags; tag; tag = tag->next) + { + switch (tag->type) { case FREEBSD_MODINFO_NAME: case FREEBSD_MODINFO_TYPE: - grub_printf (" %-18s", mod_buf + pos); + grub_printf (" %-18s", (char *) tag->data); break; case FREEBSD_MODINFO_ADDR: { grub_uint32_t addr; - addr = *((grub_uint32_t *) (mod_buf + pos)); + addr = *((grub_uint32_t *) tag->data); grub_printf (" 0x%08x", addr); break; } @@ -425,12 +437,10 @@ grub_freebsd_list_modules (void) { grub_uint32_t len; - len = *((grub_uint32_t *) (mod_buf + pos)); + len = *((grub_uint32_t *) tag->data); grub_printf (" 0x%08x\n", len); } } - - pos = ALIGN_VAR (pos + size); } } @@ -446,6 +456,7 @@ grub_freebsd_boot (void) grub_size_t p_size = 0; grub_uint32_t bootdev, biosdev, unit, slice, part; grub_err_t err; + grub_size_t tag_buf_len = 0; auto int iterate_env (struct grub_env_var *var); int iterate_env (struct grub_env_var *var) @@ -475,7 +486,6 @@ grub_freebsd_boot (void) return 0; } - grub_memset (&bi, 0, sizeof (bi)); bi.bi_version = FREEBSD_BOOTINFO_VERSION; bi.bi_size = sizeof (bi); @@ -488,10 +498,29 @@ grub_freebsd_boot (void) p_size = 0; grub_env_iterate (iterate_env_count); + if (p_size) p_size = ALIGN_PAGE (kern_end + p_size + 1) - kern_end; + if (is_elf_kernel) - p_size = ALIGN_PAGE (kern_end + p_size + mod_buf_len) - kern_end; + { + struct bsd_tag *tag; + + err = grub_bsd_add_mmap (); + if (err) + return err; + + err = grub_bsd_add_meta (FREEBSD_MODINFO_END, 0, 0); + if (err) + return err; + + tag_buf_len = 0; + for (tag = tags; tag; tag = tag->next) + tag_buf_len = ALIGN_VAR (tag_buf_len + + sizeof (struct freebsd_tag_header) + + tag->len); + p_size = ALIGN_PAGE (kern_end + p_size + tag_buf_len) - kern_end; + } if (is_64bit) p_size += 4096 * 3; @@ -515,27 +544,50 @@ grub_freebsd_boot (void) if (is_elf_kernel) { - grub_uint8_t *md_ofs; - int ofs; + grub_uint8_t *p_tag = p; + struct bsd_tag *tag; + + for (tag = tags; tag; tag = tag->next) + { + struct freebsd_tag_header *head + = (struct freebsd_tag_header *) p_tag; + head->type = tag->type; + head->len = tag->len; + p_tag += sizeof (struct freebsd_tag_header); + switch (tag->type) + { + case FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_HOWTO: + if (is_64bit) + *(grub_uint64_t *) p_tag = bootflags; + else + *(grub_uint32_t *) p_tag = bootflags; + break; - if (grub_freebsd_add_meta (FREEBSD_MODINFO_END, 0, 0)) - return grub_errno; + case FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_ENVP: + if (is_64bit) + *(grub_uint64_t *) p_tag = bi.bi_envp; + else + *(grub_uint32_t *) p_tag = bi.bi_envp; + break; + + case FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_KERNEND: + if (is_64bit) + *(grub_uint64_t *) p_tag = kern_end; + else + *(grub_uint32_t *) p_tag = kern_end; + break; + + default: + grub_memcpy (p_tag, tag->data, tag->len); + break; + } + p_tag += tag->len; + p_tag = ALIGN_VAR (p_tag - p) + p; + } - grub_memcpy (p, mod_buf, mod_buf_len); bi.bi_modulep = (p - p0) + p_target; - md_ofs = p + kern_end_mdofs; - p = (ALIGN_PAGE ((p - p0) + p_target) - p_target) + p0; - - if (is_64bit) - p += 4096 * 4; - - ofs = (is_64bit) ? 16 : 12; - *((grub_uint32_t *) md_ofs) = kern_end; - md_ofs -= ofs; - *((grub_uint32_t *) md_ofs) = bi.bi_envp; - md_ofs -= ofs; - *((grub_uint32_t *) md_ofs) = bootflags; + p = (ALIGN_PAGE ((p_tag - p0) + p_target) - p_target) + p0; } bi.bi_kernend = kern_end; @@ -561,7 +613,7 @@ grub_freebsd_boot (void) grub_fatal ("cannot exit boot services"); #endif - pagetable = p - (4096 * 3); + pagetable = p; fill_bsd64_pagetable (pagetable, (pagetable - p0) + p_target); state.cr3 = (pagetable - p0) + p_target; @@ -721,99 +773,57 @@ static grub_err_t grub_netbsd_boot (void) { struct grub_netbsd_bootinfo *bootinfo; - int count = 0; - struct grub_netbsd_btinfo_mmap_header *mmap; - struct grub_netbsd_btinfo_mmap_entry *pm; void *curarg, *arg0; grub_addr_t arg_target, stack_target; grub_uint32_t *stack; grub_err_t err; struct grub_relocator32_state state; + grub_size_t tag_buf_len = 0; + int tag_count = 0; + + err = grub_bsd_add_mmap (); + if (err) + return err; - auto int NESTED_FUNC_ATTR count_hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); - int NESTED_FUNC_ATTR count_hook (grub_uint64_t addr __attribute__ ((unused)), - grub_uint64_t size __attribute__ ((unused)), - grub_uint32_t type __attribute__ ((unused))) { - count++; - return 0; - } - - auto int NESTED_FUNC_ATTR fill_hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); - int NESTED_FUNC_ATTR fill_hook (grub_uint64_t addr, grub_uint64_t size, grub_uint32_t type) - { - pm->addr = addr; - pm->len = size; - - switch (type) + struct bsd_tag *tag; + tag_buf_len = 0; + for (tag = tags; tag; tag = tag->next) { - case GRUB_MACHINE_MEMORY_AVAILABLE: - pm->type = NETBSD_MMAP_AVAILABLE; - break; - - case GRUB_MACHINE_MEMORY_ACPI: - pm->type = NETBSD_MMAP_ACPI; - break; - - case GRUB_MACHINE_MEMORY_NVS: - pm->type = NETBSD_MMAP_NVS; - break; - - default: - pm->type = NETBSD_MMAP_RESERVED; - break; + tag_buf_len = ALIGN_VAR (tag_buf_len + 2 * sizeof (grub_uint32_t) + + tag->len); + tag_count++; } - pm++; - - return 0; } - grub_mmap_iterate (count_hook); - arg_target = kern_end; - err = grub_relocator_alloc_chunk_addr - (relocator, &curarg, arg_target, - sizeof (struct grub_netbsd_btinfo_rootdevice) - + sizeof (struct grub_netbsd_bootinfo) - + sizeof (struct grub_netbsd_btinfo_mmap_header) - + count * sizeof (struct grub_netbsd_btinfo_mmap_entry)); + err = grub_relocator_alloc_chunk_addr (relocator, &curarg, + arg_target, tag_buf_len + + sizeof (struct grub_netbsd_bootinfo) + + tag_count * sizeof (grub_addr_t)); if (err) return err; arg0 = curarg; - mmap = curarg; - pm = (struct grub_netbsd_btinfo_mmap_entry *) (mmap + 1); + bootinfo = (void *) ((grub_uint8_t *) arg0 + tag_buf_len); - grub_mmap_iterate (fill_hook); - mmap->common.type = NETBSD_BTINFO_MEMMAP; - mmap->common.len = (char *) pm - (char *) mmap; - mmap->count = count; - curarg = pm; + { + struct bsd_tag *tag; + unsigned i; - if (netbsd_root) - { - struct grub_netbsd_btinfo_rootdevice *rootdev; - - rootdev = (struct grub_netbsd_btinfo_rootdevice *) curarg; - - rootdev->common.len = sizeof (struct grub_netbsd_btinfo_rootdevice); - rootdev->common.type = NETBSD_BTINFO_ROOTDEVICE; - grub_strncpy (rootdev->devname, netbsd_root, sizeof (rootdev->devname)); - - bootinfo = (struct grub_netbsd_bootinfo *) (rootdev + 1); - bootinfo->bi_count = 2; - bootinfo->bi_data[0] = ((grub_uint8_t *) mmap - (grub_uint8_t *) arg0) - + arg_target; - bootinfo->bi_data[1] = ((grub_uint8_t *) rootdev - (grub_uint8_t *) arg0) - + arg_target; - } - else - { - bootinfo = (struct grub_netbsd_bootinfo *) curarg; - bootinfo->bi_count = 1; - bootinfo->bi_data[0] = ((grub_uint8_t *) mmap - (grub_uint8_t *) arg0) - + arg_target; - } + bootinfo->bi_count = tag_count; + for (tag = tags, i = 0; tag; i++, tag = tag->next) + { + struct grub_netbsd_btinfo_common *head = curarg; + bootinfo->bi_data[i] = ((grub_uint8_t *) curarg - (grub_uint8_t *) arg0) + + arg_target; + head->type = tag->type; + head->len = tag->len + sizeof (*head); + curarg = head + 1; + grub_memcpy (curarg, tag->data, tag->len); + curarg = (grub_uint8_t *) curarg + tag->len; + } + } err = grub_relocator_alloc_chunk_align (relocator, (void **) &stack, &stack_target, 0x10000, 0x90000, @@ -843,19 +853,18 @@ grub_netbsd_boot (void) static grub_err_t grub_bsd_unload (void) { - if (mod_buf) + struct bsd_tag *tag, *next; + for (tag = tags; tag; tag = next) { - grub_free (mod_buf); - mod_buf = 0; - mod_buf_max = 0; + next = tag->next; + grub_free (tag); } + tags = NULL; + tags_last = NULL; kernel_type = KERNEL_TYPE_NONE; grub_dl_unref (my_mod); - grub_free (netbsd_root); - netbsd_root = NULL; - grub_relocator_unload (relocator); relocator = NULL; @@ -1163,28 +1172,22 @@ grub_cmd_freebsd (grub_extcmd_t cmd, int argc, char *argv[]) if (err) return err; - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | - FREEBSD_MODINFOMD_HOWTO, &data, 4); + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | + FREEBSD_MODINFOMD_HOWTO, &data, 4); if (err) return err; - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_ENVP, &data, len); if (err) return err; - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | - FREEBSD_MODINFOMD_KERNEND, &data, len); - if (err) - return err; - - kern_end_mdofs = mod_buf_len - len; - - err = grub_freebsd_add_mmap (); + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | + FREEBSD_MODINFOMD_KERNEND, &data, len); if (err) return err; } - grub_loader_set (grub_freebsd_boot, grub_bsd_unload, 1); + grub_loader_set (grub_freebsd_boot, grub_bsd_unload, 0); } return grub_errno; @@ -1239,8 +1242,61 @@ grub_cmd_netbsd (grub_extcmd_t cmd, int argc, char *argv[]) if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE) { grub_loader_set (grub_netbsd_boot, grub_bsd_unload, 0); + + { + char bootpath[GRUB_NETBSD_MAX_BOOTPATH_LEN]; + char *name; + name = grub_strrchr (argv[0], '/'); + if (name) + name++; + else + name = argv[0]; + grub_memset (bootpath, 0, sizeof (bootpath)); + grub_strncpy (bootpath, name, sizeof (bootpath) - 1); + grub_bsd_add_meta (NETBSD_BTINFO_BOOTPATH, bootpath, sizeof (bootpath)); + } + if (cmd->state[NETBSD_ROOT_ARG].set) - netbsd_root = grub_strdup (cmd->state[NETBSD_ROOT_ARG].arg); + { + char root[GRUB_NETBSD_MAX_ROOTDEVICE_LEN]; + grub_memset (root, 0, sizeof (root)); + grub_strncpy (root, cmd->state[NETBSD_ROOT_ARG].arg, + sizeof (root) - 1); + grub_bsd_add_meta (NETBSD_BTINFO_ROOTDEVICE, root, sizeof (root)); + } + if (cmd->state[NETBSD_SERIAL_ARG].set) + { + struct grub_netbsd_btinfo_serial serial; + char *ptr; + + grub_memset (&serial, 0, sizeof (serial)); + grub_strcpy (serial.devname, "com"); + + if (cmd->state[NETBSD_SERIAL_ARG].arg) + { + ptr = cmd->state[NETBSD_SERIAL_ARG].arg; + serial.addr = grub_strtoul (ptr, &ptr, 0); + if (grub_errno) + return grub_errno; + if (*ptr != ',') + return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid format"); + ptr++; + serial.speed = grub_strtoul (ptr, &ptr, 0); + if (grub_errno) + return grub_errno; + } + + grub_bsd_add_meta (NETBSD_BTINFO_CONSOLE, &serial, sizeof (serial)); + } + else + { + struct grub_netbsd_btinfo_serial cons; + + grub_memset (&cons, 0, sizeof (cons)); + grub_strcpy (cons.devname, "pc"); + + grub_bsd_add_meta (NETBSD_BTINFO_CONSOLE, &cons, sizeof (cons)); + } } return grub_errno; @@ -1495,10 +1551,5 @@ GRUB_MOD_FINI (bsd) grub_unregister_command (cmd_freebsd_module); grub_unregister_command (cmd_freebsd_module_elf); - if (mod_buf) - { - grub_free (mod_buf); - mod_buf = 0; - mod_buf_max = 0; - } + grub_bsd_unload (); } diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index 41dfe89e4..b76093ccf 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -146,13 +146,13 @@ SUFFIX (grub_freebsd_load_elfmodule_obj) (struct grub_relocator *relocator, argc - 1, argv + 1, module, curload - module); if (! err) - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA - | FREEBSD_MODINFOMD_ELFHDR, - &e, sizeof (e)); + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA + | FREEBSD_MODINFOMD_ELFHDR, + &e, sizeof (e)); if (! err) - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA - | FREEBSD_MODINFOMD_SHDR, - shdr, e.e_shnum * e.e_shentsize); + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA + | FREEBSD_MODINFOMD_SHDR, + shdr, e.e_shnum * e.e_shentsize); return err; } @@ -275,9 +275,9 @@ SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, if (err) return err; - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | - FREEBSD_MODINFOMD_ELFHDR, &e, - sizeof (e)); + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | + FREEBSD_MODINFOMD_ELFHDR, &e, + sizeof (e)); if (err) return err; @@ -346,22 +346,22 @@ SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, { dynamic = sym->st_value; grub_dprintf ("bsd", "dynamic = %llx\n", (unsigned long long) dynamic); - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | - FREEBSD_MODINFOMD_DYNAMIC, &dynamic, - sizeof (dynamic)); + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | + FREEBSD_MODINFOMD_DYNAMIC, &dynamic, + sizeof (dynamic)); if (err) return err; } - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | - FREEBSD_MODINFOMD_SSYM, &symstart, - sizeof (symstart)); + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | + FREEBSD_MODINFOMD_SSYM, &symstart, + sizeof (symstart)); if (err) return err; - err = grub_freebsd_add_meta (FREEBSD_MODINFO_METADATA | - FREEBSD_MODINFOMD_ESYM, &symend, - sizeof (symend)); + err = grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | + FREEBSD_MODINFOMD_ESYM, &symend, + sizeof (symend)); if (err) return err; @@ -369,3 +369,5 @@ SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, return GRUB_ERR_NONE; } + + From 5fb5182f8ad3e2a02bd0f01134c26302a51bc702 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 15 Jan 2010 11:48:15 +0100 Subject: [PATCH 055/271] comX notation support --- include/grub/i386/pc/serial.h | 3 +++ loader/i386/bsd.c | 26 ++++++++++++++++++-------- term/i386/pc/serial.c | 8 ++++---- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/include/grub/i386/pc/serial.h b/include/grub/i386/pc/serial.h index 0632ff79d..4038f50fb 100644 --- a/include/grub/i386/pc/serial.h +++ b/include/grub/i386/pc/serial.h @@ -64,4 +64,7 @@ /* Turn on DTR, RTS, and OUT2. */ #define UART_ENABLE_MODEM 0x0B +unsigned short +grub_serial_hw_get_port (const unsigned int unit); + #endif /* ! GRUB_SERIAL_MACHINE_HEADER */ diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 3565884d5..49c846c31 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -33,6 +33,7 @@ #include #include #include +#include #ifdef GRUB_MACHINE_PCBIOS #include @@ -137,7 +138,7 @@ static const struct grub_arg_option netbsd_opts[] = {"silent", 'z', 0, N_("Supress normal output (warnings remain)."), 0, 0}, {"root", 'r', 0, N_("Set root device."), N_("DEVICE"), ARG_TYPE_STRING}, {"serial", 'h', GRUB_ARG_OPTION_OPTIONAL, - N_("Use serial console."), N_("ADDR,SPEED"), ARG_TYPE_STRING}, + N_("Use serial console."), N_("[ADDR|comUNIT][,SPEED]"), ARG_TYPE_STRING}, {0, 0, 0, 0, 0, 0} }; @@ -1275,15 +1276,24 @@ grub_cmd_netbsd (grub_extcmd_t cmd, int argc, char *argv[]) if (cmd->state[NETBSD_SERIAL_ARG].arg) { ptr = cmd->state[NETBSD_SERIAL_ARG].arg; - serial.addr = grub_strtoul (ptr, &ptr, 0); - if (grub_errno) - return grub_errno; - if (*ptr != ',') - return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid format"); - ptr++; - serial.speed = grub_strtoul (ptr, &ptr, 0); + if (grub_memcmp (ptr, "com", sizeof ("com") - 1) == 0) + { + ptr += sizeof ("com") - 1; + serial.addr + = grub_serial_hw_get_port (grub_strtoul (ptr, &ptr, 0)); + } + else + serial.addr = grub_strtoul (ptr, &ptr, 0); if (grub_errno) return grub_errno; + + if (*ptr == ',') + { + ptr++; + serial.speed = grub_strtoul (ptr, &ptr, 0); + if (grub_errno) + return grub_errno; + } } grub_bsd_add_meta (NETBSD_BTINFO_CONSOLE, &serial, sizeof (serial)); diff --git a/term/i386/pc/serial.c b/term/i386/pc/serial.c index 8d09f6211..b94b09553 100644 --- a/term/i386/pc/serial.c +++ b/term/i386/pc/serial.c @@ -74,8 +74,8 @@ static const unsigned short serial_hw_io_addr[] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 } #endif /* Return the port number for the UNITth serial device. */ -static inline unsigned short -serial_hw_get_port (const unsigned int unit) +unsigned short +grub_serial_hw_get_port (const unsigned int unit) { if (unit < GRUB_SERIAL_PORT_NUM) return serial_hw_io_addr[unit]; @@ -498,7 +498,7 @@ grub_cmd_serial (grub_extcmd_t cmd, unsigned int unit; unit = grub_strtoul (state[0].arg, 0, 0); - serial_settings.port = serial_hw_get_port (unit); + serial_settings.port = grub_serial_hw_get_port (unit); if (!serial_settings.port) return grub_error (GRUB_ERR_BAD_ARGUMENT, "bad unit number"); } @@ -608,7 +608,7 @@ GRUB_MOD_INIT(serial) N_("Configure serial port."), options); /* Set default settings. */ - serial_settings.port = serial_hw_get_port (0); + serial_settings.port = grub_serial_hw_get_port (0); serial_settings.divisor = serial_get_divisor (9600); serial_settings.word_len = UART_8BITS_WORD; serial_settings.parity = UART_NO_PARITY; From 9766dafa74d9d8a8116e623a07ff4d7fe846bf08 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 15 Jan 2010 12:31:06 +0100 Subject: [PATCH 056/271] symtab support for knetbsd --- include/grub/i386/bsd.h | 17 ++++- loader/i386/bsd.c | 19 +++++- loader/i386/bsdXX.c | 133 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 164 insertions(+), 5 deletions(-) diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index aa19b2338..f73dd7a31 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -210,6 +210,7 @@ struct grub_netbsd_bootinfo #define NETBSD_BTINFO_BOOTPATH 0 #define NETBSD_BTINFO_ROOTDEVICE 1 #define NETBSD_BTINFO_CONSOLE 6 +#define NETBSD_BTINFO_SYMTAB 8 #define NETBSD_BTINFO_MEMMAP 9 struct grub_netbsd_btinfo_common @@ -222,7 +223,6 @@ struct grub_netbsd_btinfo_common struct grub_netbsd_btinfo_bootdisk { - struct grub_netbsd_btinfo_common common; int labelsector; /* label valid if != -1 */ struct { @@ -233,6 +233,14 @@ struct grub_netbsd_btinfo_bootdisk int partition; }; +struct grub_netbsd_btinfo_symtab +{ + grub_uint32_t nsyms; + grub_uint32_t ssyms; + grub_uint32_t esyms; +}; + + struct grub_netbsd_btinfo_serial { char devname[16]; @@ -256,6 +264,13 @@ grub_err_t grub_freebsd_load_elf_meta64 (struct grub_relocator *relocator, grub_file_t file, grub_addr_t *kern_end); +grub_err_t grub_netbsd_load_elf_meta32 (struct grub_relocator *relocator, + grub_file_t file, + grub_addr_t *kern_end); +grub_err_t grub_netbsd_load_elf_meta64 (struct grub_relocator *relocator, + grub_file_t file, + grub_addr_t *kern_end); + grub_err_t grub_bsd_add_meta (grub_uint32_t type, void *data, grub_uint32_t len); grub_err_t grub_freebsd_add_meta_module (char *filename, char *type, diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 49c846c31..9bdefbba9 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -1237,12 +1237,27 @@ grub_cmd_openbsd (grub_extcmd_t cmd, int argc, char *argv[]) static grub_err_t grub_cmd_netbsd (grub_extcmd_t cmd, int argc, char *argv[]) { + grub_err_t err; kernel_type = KERNEL_TYPE_NETBSD; bootflags = grub_bsd_parse_flags (cmd->state, netbsd_flags); if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE) { - grub_loader_set (grub_netbsd_boot, grub_bsd_unload, 0); + if (is_elf_kernel) + { + grub_file_t file; + + file = grub_gzfile_open (argv[0], 1); + if (! file) + return grub_errno; + + if (is_64bit) + err = grub_netbsd_load_elf_meta64 (relocator, file, &kern_end); + else + err = grub_netbsd_load_elf_meta32 (relocator, file, &kern_end); + if (err) + return err; + } { char bootpath[GRUB_NETBSD_MAX_BOOTPATH_LEN]; @@ -1307,6 +1322,8 @@ grub_cmd_netbsd (grub_extcmd_t cmd, int argc, char *argv[]) grub_bsd_add_meta (NETBSD_BTINFO_CONSOLE, &cons, sizeof (cons)); } + + grub_loader_set (grub_netbsd_boot, grub_bsd_unload, 0); } return grub_errno; diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index b76093ccf..77d059921 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -254,7 +254,7 @@ SUFFIX (grub_freebsd_load_elfmodule) (struct grub_relocator *relocator, #endif grub_err_t -SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, +SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, grub_file_t file, grub_addr_t *kern_end) { grub_err_t err; @@ -296,8 +296,9 @@ SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, stroff = s->sh_offset; strsize = s->sh_size; - chunk_size = 2 * sizeof (grub_freebsd_addr_t) - + ALIGN_UP (symsize + strsize, sizeof (grub_freebsd_addr_t)); + chunk_size = ALIGN_UP (symsize + strsize, sizeof (grub_freebsd_addr_t)) + + 2 * sizeof (grub_freebsd_addr_t); + symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t)); err = grub_relocator_alloc_chunk_addr (relocator, &sym_chunk, symtarget, chunk_size); @@ -310,6 +311,7 @@ SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, curload = sym_chunk; *((grub_freebsd_addr_t *) curload) = symsize; curload += sizeof (grub_freebsd_addr_t); + if (grub_file_seek (file, symoff) == (grub_off_t) -1) return grub_errno; sym = (Elf_Sym *) curload; @@ -370,4 +372,129 @@ SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, return GRUB_ERR_NONE; } +grub_err_t +SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator, + grub_file_t file, grub_addr_t *kern_end) +{ + grub_err_t err; + Elf_Ehdr e; + Elf_Shdr *s, *symsh, *strsh; + char *shdr; + unsigned symsize, strsize; + Elf_Sym *sym; + void *sym_chunk; + grub_uint8_t *curload; + const char *str; + grub_size_t chunk_size; + Elf_Ehdr *e2; + struct grub_netbsd_btinfo_symtab symtab; + grub_addr_t symtarget; + + err = read_headers (file, &e, &shdr); + if (err) + return err; + + for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) (shdr + + e.e_shnum * e.e_shentsize); + s = (Elf_Shdr *) ((char *) s + e.e_shentsize)) + if (s->sh_type == SHT_SYMTAB) + break; + if (s >= (Elf_Shdr *) ((char *) shdr + + e.e_shnum * e.e_shentsize)) + return grub_error (GRUB_ERR_BAD_OS, "no symbol table"); + symsize = s->sh_size; + symsh = s; + s = (Elf_Shdr *) (shdr + e.e_shentsize * s->sh_link); + strsize = s->sh_size; + strsh = s; + + chunk_size = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t)) + + ALIGN_UP (strsize, sizeof (grub_freebsd_addr_t)) + + sizeof (e) + e.e_phnum * e.e_phentsize + + e.e_shnum * e.e_shentsize; + + symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t)); + err = grub_relocator_alloc_chunk_addr (relocator, &sym_chunk, + symtarget, chunk_size); + if (err) + return err; + + symtab.nsyms = chunk_size; + symtab.ssyms = symtarget; + symtab.esyms = symtarget + chunk_size; + + curload = sym_chunk; + + e2 = (Elf_Ehdr *) curload; + grub_memcpy (curload, &e, sizeof (e)); + e2->e_phoff = sizeof (e); + e2->e_shoff = sizeof (e) + e.e_phnum * e.e_phentsize; + + curload += sizeof (e); + if (grub_file_seek (file, e.e_phoff) == (grub_off_t) -1) + return grub_errno; + if (grub_file_read (file, curload, e.e_phnum * e.e_phentsize) + != (grub_ssize_t) (e.e_phnum * e.e_phentsize)) + { + if (! grub_errno) + return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); + return grub_errno; + } + curload += e.e_phnum * e.e_phentsize; + + for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) (shdr + + e.e_shnum * e.e_shentsize); + s = (Elf_Shdr *) ((char *) s + e.e_shentsize)) + { + Elf_Shdr *s2; + s2 = (Elf_Shdr *) curload; + grub_memcpy (curload, s, e.e_shentsize); + if (s == symsh) + { + s2->sh_offset = sizeof (e) + e.e_phnum * e.e_phentsize + + e.e_shnum * e.e_shentsize; + } + else if (s == strsh) + { + s2->sh_offset = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t)) + + sizeof (e) + e.e_phnum * e.e_phentsize + + e.e_shnum * e.e_shentsize; + } + else + s2->sh_offset = 0; + s2->sh_addr = s2->sh_offset; + } + + if (grub_file_seek (file, symsh->sh_offset) == (grub_off_t) -1) + return grub_errno; + sym = (Elf_Sym *) curload; + if (grub_file_read (file, curload, symsize) != (grub_ssize_t) symsize) + { + if (! grub_errno) + return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); + return grub_errno; + } + curload += ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t)); + + if (grub_file_seek (file, strsh->sh_offset) == (grub_off_t) -1) + return grub_errno; + str = (char *) curload; + if (grub_file_read (file, curload, strsize) != (grub_ssize_t) strsize) + { + if (! grub_errno) + return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); + return grub_errno; + } + + err = grub_bsd_add_meta (NETBSD_BTINFO_SYMTAB, + &symtab, + sizeof (symtab)); + if (err) + return err; + + *kern_end = ALIGN_PAGE (symtarget + chunk_size); + + return GRUB_ERR_NONE; +} + From 53fbae94a6d21f8f5938e5896f46e22f746553e7 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 15 Jan 2010 13:40:37 +0100 Subject: [PATCH 057/271] netbsd framebuffer support --- include/grub/i386/bsd.h | 22 ++++++++++ loader/i386/bsd.c | 95 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 116 insertions(+), 1 deletion(-) diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index f73dd7a31..62c374c03 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -212,6 +212,7 @@ struct grub_netbsd_bootinfo #define NETBSD_BTINFO_CONSOLE 6 #define NETBSD_BTINFO_SYMTAB 8 #define NETBSD_BTINFO_MEMMAP 9 +#define NETBSD_BTINFO_FRAMEBUF 12 struct grub_netbsd_btinfo_common { @@ -248,6 +249,27 @@ struct grub_netbsd_btinfo_serial grub_uint32_t speed; }; +struct grub_netbsd_btinfo_framebuf +{ + grub_uint64_t fbaddr; + grub_uint32_t flags; + grub_uint32_t width; + grub_uint32_t height; + grub_uint16_t pitch; + grub_uint8_t bpp; + + grub_uint8_t red_mask_size; + grub_uint8_t green_mask_size; + grub_uint8_t blue_mask_size; + + grub_uint8_t red_field_pos; + grub_uint8_t green_field_pos; + grub_uint8_t blue_field_pos; + + grub_uint8_t reserved[16]; +}; + + #define GRUB_NETBSD_MAX_ROOTDEVICE_LEN 16 grub_err_t grub_freebsd_load_elfmodule32 (struct grub_relocator *relocator, diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 9bdefbba9..1d66b08d1 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -40,7 +40,13 @@ #endif #ifdef GRUB_MACHINE_EFI #include +#define NETBSD_DEFAULT_VIDEO_MODE "800x600" +#else +#define NETBSD_DEFAULT_VIDEO_MODE "text" +#include #endif +#include + #include #include #include @@ -770,6 +776,85 @@ grub_openbsd_boot (void) return grub_relocator32_boot (relocator, state); } +static grub_err_t +grub_netbsd_setup_video (void) +{ + struct grub_video_mode_info mode_info; + void *framebuffer; + const char *modevar; + struct grub_netbsd_btinfo_framebuf params; + grub_err_t err; + + modevar = grub_env_get ("gfxpayload"); + + /* Now all graphical modes are acceptable. + May change in future if we have modes without framebuffer. */ + if (modevar && *modevar != 0) + { + char *tmp; + tmp = grub_malloc (grub_strlen (modevar) + + sizeof (";" NETBSD_DEFAULT_VIDEO_MODE)); + if (! tmp) + return grub_errno; + grub_sprintf (tmp, "%s;" NETBSD_DEFAULT_VIDEO_MODE, modevar); + err = grub_video_set_mode (tmp, 0, 0); + grub_free (tmp); + } + else + err = grub_video_set_mode (NETBSD_DEFAULT_VIDEO_MODE, 0, 0); + + if (err) + return err; + + err = grub_video_get_info_and_fini (&mode_info, &framebuffer); + + if (err) + return err; + + params.width = mode_info.width; + params.height = mode_info.height; + params.bpp = mode_info.bpp; + params.pitch = mode_info.pitch; + params.flags = 0; + + params.fbaddr = (grub_addr_t) framebuffer; + + params.red_mask_size = mode_info.red_mask_size; + params.red_field_pos = mode_info.red_field_pos; + params.green_mask_size = mode_info.green_mask_size; + params.green_field_pos = mode_info.green_field_pos; + params.blue_mask_size = mode_info.blue_mask_size; + params.blue_field_pos = mode_info.blue_field_pos; + +#ifdef GRUB_MACHINE_PCBIOS + /* VESA packed modes may come with zeroed mask sizes, which need + to be set here according to DAC Palette width. If we don't, + this results in Linux displaying a black screen. */ + if (mode_info.bpp <= 8) + { + struct grub_vbe_info_block controller_info; + int status; + int width = 8; + + status = grub_vbe_bios_get_controller_info (&controller_info); + + if (status == GRUB_VBE_STATUS_OK && + (controller_info.capabilities & GRUB_VBE_CAPABILITY_DACWIDTH)) + status = grub_vbe_bios_set_dac_palette_width (&width); + + if (status != GRUB_VBE_STATUS_OK) + /* 6 is default after mode reset. */ + width = 6; + + params.red_mask_size = params.green_mask_size + = params.blue_mask_size = width; + } +#endif + + err = grub_bsd_add_meta (NETBSD_BTINFO_FRAMEBUF, ¶ms, sizeof (params)); + return err; +} + static grub_err_t grub_netbsd_boot (void) { @@ -786,6 +871,14 @@ grub_netbsd_boot (void) if (err) return err; + err = grub_netbsd_setup_video (); + if (err) + { + grub_print_error (); + grub_printf ("Booting however\n"); + grub_errno = GRUB_ERR_NONE; + } + { struct bsd_tag *tag; tag_buf_len = 0; @@ -1320,7 +1413,7 @@ grub_cmd_netbsd (grub_extcmd_t cmd, int argc, char *argv[]) grub_memset (&cons, 0, sizeof (cons)); grub_strcpy (cons.devname, "pc"); - grub_bsd_add_meta (NETBSD_BTINFO_CONSOLE, &cons, sizeof (cons)); + grub_bsd_add_meta (NETBSD_BTINFO_CONSOLE, &cons, sizeof (cons)); } grub_loader_set (grub_netbsd_boot, grub_bsd_unload, 0); From 820e8e55fd31f719c951ce9bcf56b15dfd578b82 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 16 Jan 2010 00:31:24 +0100 Subject: [PATCH 058/271] Avoid retrieving video info when no video is active --- loader/i386/bsd.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index e6c5273cd..de4a256de 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -789,6 +789,7 @@ grub_netbsd_setup_video (void) const char *modevar; struct grub_netbsd_btinfo_framebuf params; grub_err_t err; + grub_video_driver_id_t driv_id; modevar = grub_env_get ("gfxpayload"); @@ -811,6 +812,10 @@ grub_netbsd_setup_video (void) if (err) return err; + driv_id = grub_video_get_driver_id (); + if (driv_id == GRUB_VIDEO_DRIVER_NONE) + return GRUB_ERR_NONE; + err = grub_video_get_info_and_fini (&mode_info, &framebuffer); if (err) @@ -835,7 +840,7 @@ grub_netbsd_setup_video (void) /* VESA packed modes may come with zeroed mask sizes, which need to be set here according to DAC Palette width. If we don't, this results in Linux displaying a black screen. */ - if (mode_info.bpp <= 8) + if (mode_info.bpp <= 8 && driv_id == GRUB_VIDEO_DRIVER_VBE) { struct grub_vbe_info_block controller_info; int status; From cefe39c94ba4e921c325fd275996426257e94d36 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 16 Jan 2010 11:06:55 +0100 Subject: [PATCH 059/271] Fix knetbsd symbols --- loader/i386/bsdXX.c | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index 77d059921..ccf386440 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -410,8 +410,7 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator, chunk_size = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t)) + ALIGN_UP (strsize, sizeof (grub_freebsd_addr_t)) - + sizeof (e) + e.e_phnum * e.e_phentsize - + e.e_shnum * e.e_shentsize; + + sizeof (e) + e.e_shnum * e.e_shentsize; symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t)); err = grub_relocator_alloc_chunk_addr (relocator, &sym_chunk, @@ -419,7 +418,7 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator, if (err) return err; - symtab.nsyms = chunk_size; + symtab.nsyms = 1; symtab.ssyms = symtarget; symtab.esyms = symtarget + chunk_size; @@ -427,20 +426,13 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator, e2 = (Elf_Ehdr *) curload; grub_memcpy (curload, &e, sizeof (e)); - e2->e_phoff = sizeof (e); - e2->e_shoff = sizeof (e) + e.e_phnum * e.e_phentsize; + e2->e_phoff = 0; + e2->e_phnum = 0; + e2->e_phentsize = 0; + e2->e_shstrndx = 0; + e2->e_shoff = sizeof (e); curload += sizeof (e); - if (grub_file_seek (file, e.e_phoff) == (grub_off_t) -1) - return grub_errno; - if (grub_file_read (file, curload, e.e_phnum * e.e_phentsize) - != (grub_ssize_t) (e.e_phnum * e.e_phentsize)) - { - if (! grub_errno) - return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); - return grub_errno; - } - curload += e.e_phnum * e.e_phentsize; for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) (shdr + e.e_shnum * e.e_shentsize); @@ -450,19 +442,14 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator, s2 = (Elf_Shdr *) curload; grub_memcpy (curload, s, e.e_shentsize); if (s == symsh) - { - s2->sh_offset = sizeof (e) + e.e_phnum * e.e_phentsize - + e.e_shnum * e.e_shentsize; - } + s2->sh_offset = sizeof (e) + e.e_shnum * e.e_shentsize; else if (s == strsh) - { - s2->sh_offset = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t)) - + sizeof (e) + e.e_phnum * e.e_phentsize - + e.e_shnum * e.e_shentsize; - } + s2->sh_offset = ALIGN_UP (symsize, sizeof (grub_freebsd_addr_t)) + + sizeof (e) + e.e_shnum * e.e_shentsize; else s2->sh_offset = 0; s2->sh_addr = s2->sh_offset; + curload += e.e_shentsize; } if (grub_file_seek (file, symsh->sh_offset) == (grub_off_t) -1) From ae9eb98c7d91aaef28362008dc2fe92043b6199f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 16 Jan 2010 11:47:12 +0100 Subject: [PATCH 060/271] NetBSD module support --- include/grub/i386/bsd.h | 16 ++++ loader/i386/bsd.c | 167 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 176 insertions(+), 7 deletions(-) diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index 62c374c03..870287371 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -212,6 +212,7 @@ struct grub_netbsd_bootinfo #define NETBSD_BTINFO_CONSOLE 6 #define NETBSD_BTINFO_SYMTAB 8 #define NETBSD_BTINFO_MEMMAP 9 +#define NETBSD_BTINFO_MODULES 11 #define NETBSD_BTINFO_FRAMEBUF 12 struct grub_netbsd_btinfo_common @@ -249,6 +250,21 @@ struct grub_netbsd_btinfo_serial grub_uint32_t speed; }; +struct grub_netbsd_btinfo_modules +{ + grub_uint32_t num; + grub_uint32_t last_addr; + struct grub_netbsd_btinfo_module + { + char name[80]; +#define GRUB_NETBSD_MODULE_RAW 0 +#define GRUB_NETBSD_MODULE_ELF 1 + grub_uint32_t type; + grub_uint32_t size; + grub_uint32_t addr; + } mods[0]; +}; + struct grub_netbsd_btinfo_framebuf { grub_uint64_t fbaddr; diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index de4a256de..f93c87cf0 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -82,6 +82,14 @@ struct bsd_tag struct bsd_tag *tags, *tags_last; +struct netbsd_module +{ + struct netbsd_module *next; + struct grub_netbsd_btinfo_module mod; +}; + +struct netbsd_module *netbsd_mods, *netbsd_mods_last; + static const struct grub_arg_option freebsd_opts[] = { {"dual", 'D', 0, N_("Display output on all consoles."), 0, 0}, @@ -452,6 +460,49 @@ grub_freebsd_list_modules (void) } } +static grub_err_t +grub_netbsd_add_meta_module (char *filename, grub_uint32_t type, + grub_addr_t addr, grub_uint32_t size) +{ + char *name; + struct netbsd_module *mod; + name = grub_strrchr (filename, '/'); + + if (name) + name++; + else + name = filename; + + mod = grub_zalloc (sizeof (*mod)); + if (!mod) + return grub_errno; + + grub_strncpy (mod->mod.name, name, sizeof (mod->mod.name) - 1); + mod->mod.addr = addr; + mod->mod.type = type; + mod->mod.size = size; + + if (netbsd_mods_last) + netbsd_mods_last->next = mod; + else + netbsd_mods = mod; + netbsd_mods_last = mod; + + return GRUB_ERR_NONE; +} + +static void +grub_netbsd_list_modules (void) +{ + struct netbsd_module *mod; + + grub_printf (" %-18s%14s%14s%14s\n", "name", "type", "addr", "size"); + + for (mod = netbsd_mods; mod; mod = mod->next) + grub_printf (" %-18s 0x%08x 0x%08x 0x%08x", mod->mod.name, + mod->mod.type, mod->mod.addr, mod->mod.size); +} + /* This function would be here but it's under different license. */ #include "bsd_pagetable.c" @@ -865,6 +916,38 @@ grub_netbsd_setup_video (void) return err; } +static grub_err_t +grub_netbsd_add_modules (void) +{ + struct netbsd_module *mod; + unsigned modcnt = 0; + struct grub_netbsd_btinfo_modules *mods; + grub_addr_t last_addr = 0; + unsigned i; + grub_err_t err; + + for (mod = netbsd_mods; mod; mod = mod->next) + { + if (mod->mod.addr + mod->mod.size > last_addr) + last_addr = mod->mod.addr + mod->mod.size; + modcnt++; + } + + mods = grub_malloc (sizeof (*mods) + sizeof (mods->mods[0]) * modcnt); + if (!mods) + return grub_errno; + + mods->num = modcnt; + mods->last_addr = last_addr; + for (mod = netbsd_mods, i = 0; mod; i++, mod = mod->next) + mods->mods[i] = mod->mod; + + err = grub_bsd_add_meta (NETBSD_BTINFO_MODULES, mods, + sizeof (*mods) + sizeof (mods->mods[0]) * modcnt); + grub_free (mods); + return err; +} + static grub_err_t grub_netbsd_boot (void) { @@ -889,6 +972,10 @@ grub_netbsd_boot (void) grub_errno = GRUB_ERR_NONE; } + err = grub_netbsd_add_modules (); + if (err) + return err; + { struct bsd_tag *tag; tag_buf_len = 0; @@ -1535,13 +1622,8 @@ grub_cmd_freebsd_module (grub_command_t cmd __attribute__ ((unused)), grub_err_t err; void *src; - if (kernel_type == KERNEL_TYPE_NONE) - return grub_error (GRUB_ERR_BAD_ARGUMENT, - "you need to load the kernel first"); - if (kernel_type != KERNEL_TYPE_FREEBSD) - return grub_error (GRUB_ERR_BAD_ARGUMENT, - "only FreeBSD supports module"); + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no FreeBSD loaded"); if (!is_elf_kernel) return grub_error (GRUB_ERR_BAD_ARGUMENT, @@ -1593,6 +1675,68 @@ fail: return grub_errno; } +static grub_err_t +grub_netbsd_module_load (char *filename, grub_uint32_t type) +{ + grub_file_t file = 0; + void *src; + grub_err_t err; + + file = grub_gzfile_open (filename, 1); + if ((!file) || (!file->size)) + goto fail; + + err = grub_relocator_alloc_chunk_addr (relocator, &src, kern_end, + file->size); + if (err) + goto fail; + + grub_file_read (file, src, file->size); + if (grub_errno) + goto fail; + + err = grub_netbsd_add_meta_module (filename, type, kern_end, file->size); + + if (err) + goto fail; + + kern_end = ALIGN_PAGE (kern_end + file->size); + +fail: + if (file) + grub_file_close (file); + + return grub_errno; +} + +static grub_err_t +grub_cmd_netbsd_module (grub_command_t cmd, + int argc, char *argv[]) +{ + grub_uint32_t type; + + if (kernel_type != KERNEL_TYPE_NETBSD) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no NetBSD loaded"); + + if (!is_elf_kernel) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "only ELF kernel supports module"); + + /* List the current modules if no parameter. */ + if (!argc) + { + grub_netbsd_list_modules (); + return 0; + } + + if (grub_strcmp (cmd->name, "knetbsd_module_elf") == 0) + type = GRUB_NETBSD_MODULE_ELF; + else + type = GRUB_NETBSD_MODULE_RAW; + + return grub_netbsd_module_load (argv[0], type); +} + static grub_err_t grub_cmd_freebsd_module_elf (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]) @@ -1642,7 +1786,8 @@ grub_cmd_freebsd_module_elf (grub_command_t cmd __attribute__ ((unused)), static grub_extcmd_t cmd_freebsd, cmd_openbsd, cmd_netbsd; static grub_command_t cmd_freebsd_loadenv, cmd_freebsd_module; -static grub_command_t cmd_freebsd_module_elf; +static grub_command_t cmd_netbsd_module, cmd_freebsd_module_elf; +static grub_command_t cmd_netbsd_module_elf; GRUB_MOD_INIT (bsd) { @@ -1664,6 +1809,12 @@ GRUB_MOD_INIT (bsd) cmd_freebsd_module = grub_register_command ("kfreebsd_module", grub_cmd_freebsd_module, 0, N_("Load FreeBSD kernel module.")); + cmd_netbsd_module = + grub_register_command ("knetbsd_module", grub_cmd_netbsd_module, + 0, N_("Load NetBSD kernel module.")); + cmd_netbsd_module_elf = + grub_register_command ("knetbsd_module_elf", grub_cmd_netbsd_module, + 0, N_("Load NetBSD kernel module (ELF).")); cmd_freebsd_module_elf = grub_register_command ("kfreebsd_module_elf", grub_cmd_freebsd_module_elf, 0, N_("Load FreeBSD kernel module (ELF).")); @@ -1679,7 +1830,9 @@ GRUB_MOD_FINI (bsd) grub_unregister_command (cmd_freebsd_loadenv); grub_unregister_command (cmd_freebsd_module); + grub_unregister_command (cmd_netbsd_module); grub_unregister_command (cmd_freebsd_module_elf); + grub_unregister_command (cmd_netbsd_module_elf); grub_bsd_unload (); } From d92b0c01d42236af68839e0c6360b3a44478b0a0 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 16 Jan 2010 12:55:52 +0100 Subject: [PATCH 061/271] Fixed knetbsd misbehaviour when no module is loaded --- loader/i386/bsd.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index f93c87cf0..43c2c129b 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -922,23 +922,18 @@ grub_netbsd_add_modules (void) struct netbsd_module *mod; unsigned modcnt = 0; struct grub_netbsd_btinfo_modules *mods; - grub_addr_t last_addr = 0; unsigned i; grub_err_t err; for (mod = netbsd_mods; mod; mod = mod->next) - { - if (mod->mod.addr + mod->mod.size > last_addr) - last_addr = mod->mod.addr + mod->mod.size; - modcnt++; - } + modcnt++; mods = grub_malloc (sizeof (*mods) + sizeof (mods->mods[0]) * modcnt); if (!mods) return grub_errno; mods->num = modcnt; - mods->last_addr = last_addr; + mods->last_addr = kern_end; for (mod = netbsd_mods, i = 0; mod; i++, mod = mod->next) mods->mods[i] = mod->mod; From 72ebf8b87cd4bbfa9a18563bfcbe218b4943662c Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 17 Jan 2010 12:42:28 +0100 Subject: [PATCH 062/271] Sort chunks --- include/grub/relocator_private.h | 17 ------ lib/relocator.c | 99 +++++++++++++++++++++++++++----- 2 files changed, 86 insertions(+), 30 deletions(-) diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h index cc68305c8..7a3ef2bd7 100644 --- a/include/grub/relocator_private.h +++ b/include/grub/relocator_private.h @@ -27,23 +27,6 @@ extern grub_size_t grub_relocator_forward_size; extern grub_size_t grub_relocator_backward_size; extern grub_size_t grub_relocator_jumper_size; -struct grub_relocator -{ - struct grub_relocator_chunk *chunks; - grub_addr_t postchunks; - grub_addr_t highestaddr; - grub_addr_t highestnonpostaddr; - grub_size_t relocators_size; -}; - -struct grub_relocator_chunk -{ - struct grub_relocator_chunk *next; - grub_addr_t src; - grub_addr_t target; - grub_size_t size; -}; - void grub_cpu_relocator_init (void); grub_err_t diff --git a/lib/relocator.c b/lib/relocator.c index 0064824a4..a02bca332 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -25,7 +25,23 @@ /* FIXME: implement unload. */ /* FIXME: check memory map. */ /* FIXME: try to request memory from firmware. */ -/* FIXME: sort chunk when programming relocators. */ + +struct grub_relocator +{ + struct grub_relocator_chunk *chunks; + grub_addr_t postchunks; + grub_addr_t highestaddr; + grub_addr_t highestnonpostaddr; + grub_size_t relocators_size; +}; + +struct grub_relocator_chunk +{ + struct grub_relocator_chunk *next; + grub_addr_t src; + grub_addr_t target; + grub_size_t size; +}; struct grub_relocator * grub_relocator_new (void) @@ -591,9 +607,11 @@ grub_err_t grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, grub_addr_t *relstart) { - struct grub_relocator_chunk *chunk; grub_addr_t rels; grub_addr_t rels0; + struct grub_relocator_chunk *sorted; + grub_size_t nchunks = 0; + unsigned j; grub_dprintf ("relocator", "Preparing relocs (size=%ld)\n", (unsigned long) rel->relocators_size); @@ -605,29 +623,84 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, rels = rels0; grub_dprintf ("relocator", "Relocs allocated\n"); + + { + unsigned i; + grub_size_t count[257]; + struct grub_relocator_chunk *from, *to, *tmp; + + grub_memset (count, 0, sizeof (count)); - for (chunk = rel->chunks; chunk; chunk = chunk->next) { - grub_dprintf ("relocator", "chunk %p->%p\n", - (void *) chunk->src, (void *) chunk->target); - if (chunk->src < chunk->target) + struct grub_relocator_chunk *chunk; + for (chunk = rel->chunks; chunk; chunk = chunk->next) + { + grub_dprintf ("relocator", "chunk %p->%p, 0x%x\n", + (void *) chunk->src, (void *) chunk->target, + chunk->size); + nchunks++; + count[(chunk->src & 0xff) + 1]++; + } + } + from = grub_malloc (nchunks * sizeof (sorted[0])); + to = grub_malloc (nchunks * sizeof (sorted[0])); + if (!from || !to) + { + grub_free (from); + grub_free (to); + return grub_errno; + } + + for (j = 0; j < 256; j++) + count[j+1] += count[j]; + + { + struct grub_relocator_chunk *chunk; + for (chunk = rel->chunks; chunk; chunk = chunk->next) + from[count[chunk->src & 0xff]++] = *chunk; + } + + for (i = 1; i < GRUB_CPU_SIZEOF_VOID_P; i++) + { + grub_memset (count, 0, sizeof (count)); + for (j = 0; j < nchunks; j++) + count[((from[j].src >> (8 * i)) & 0xff) + 1]++; + for (j = 0; j < 256; j++) + count[j+1] += count[j]; + for (j = 0; j < nchunks; j++) + to[count[(from[j].src >> (8 * i)) & 0xff]++] = from[j]; + tmp = to; + to = from; + from = tmp; + } + sorted = from; + grub_free (to); + } + + for (j = 0; j < nchunks; j++) + { + grub_dprintf ("relocator", "sorted chunk %p->%p, 0x%x\n", + (void *) sorted[j].src, (void *) sorted[j].target, + sorted[j].size); + if (sorted[j].src < sorted[j].target) { grub_cpu_relocator_backward ((void *) rels, - (void *) chunk->src, - (void *) chunk->target, - chunk->size); + (void *) sorted[j].src, + (void *) sorted[j].target, + sorted[j].size); rels += grub_relocator_backward_size; } - if (chunk->src > chunk->target) + if (sorted[j].src > sorted[j].target) { grub_cpu_relocator_forward ((void *) rels, - (void *) chunk->src, - (void *) chunk->target, - chunk->size); + (void *) sorted[j].src, + (void *) sorted[j].target, + sorted[j].size); rels += grub_relocator_forward_size; } } grub_cpu_relocator_jumper ((void *) rels, addr); *relstart = rels0; + grub_free (sorted); return GRUB_ERR_NONE; } From b14620812f8af7a2f9e5f740e2ae047b321d3197 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 17 Jan 2010 19:22:36 +0100 Subject: [PATCH 063/271] Enable serial on all i386.rmk --- conf/i386-coreboot.rmk | 8 +------- conf/i386-pc.rmk | 7 +------ conf/i386.rmk | 6 ++++++ term/i386/pc/serial.c | 3 +-- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk index 2c1174459..2e835e814 100644 --- a/conf/i386-coreboot.rmk +++ b/conf/i386-coreboot.rmk @@ -102,7 +102,7 @@ bin_SCRIPTS += grub-mkrescue grub_mkrescue_SOURCES = util/grub-mkrescue.in # Modules. -pkglib_MODULES = play.mod serial.mod \ +pkglib_MODULES = play.mod \ memdisk.mod pci.mod lspci.mod reboot.mod \ halt.mod datetime.mod date.mod datehook.mod \ lsmmap.mod mmap.mod @@ -129,12 +129,6 @@ halt_mod_SOURCES = commands/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) halt_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For serial.mod. -serial_mod_SOURCES = term/i386/pc/serial.c -serial_mod_CFLAGS = $(COMMON_CFLAGS) -serial_mod_LDFLAGS = $(COMMON_LDFLAGS) - - # For play.mod. play_mod_SOURCES = commands/i386/pc/play.c play_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 8de04e283..24d7a7cf2 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -117,7 +117,7 @@ grub_mkrescue_SOURCES = util/grub-mkrescue.in pkglib_MODULES = biosdisk.mod chain.mod \ reboot.mod halt.mod \ - vbe.mod vbetest.mod vbeinfo.mod play.mod serial.mod \ + vbe.mod vbetest.mod vbeinfo.mod play.mod \ vga.mod memdisk.mod pci.mod lspci.mod \ pxe.mod pxecmd.mod datetime.mod date.mod \ datehook.mod lsmmap.mod ata_pthru.mod hdparm.mod \ @@ -191,11 +191,6 @@ halt_mod_SOURCES = commands/i386/pc/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) halt_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For serial.mod. -serial_mod_SOURCES = term/i386/pc/serial.c -serial_mod_CFLAGS = $(COMMON_CFLAGS) -serial_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For vbe.mod. vbe_mod_SOURCES = video/i386/pc/vbe.c vbe_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/conf/i386.rmk b/conf/i386.rmk index 73ca95764..110a40ef4 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -62,3 +62,9 @@ multiboot2_mod_SOURCES = loader/i386/multiboot.c \ multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2 multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS) multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS) + +# For serial.mod. +pkglib_MODULES += serial.mod +serial_mod_SOURCES = term/i386/pc/serial.c +serial_mod_CFLAGS = $(COMMON_CFLAGS) +serial_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/term/i386/pc/serial.c b/term/i386/pc/serial.c index b94b09553..135bb6cc5 100644 --- a/term/i386/pc/serial.c +++ b/term/i386/pc/serial.c @@ -17,8 +17,7 @@ */ #include -#include -#include +#include #include #include #include From ad8e99ec20d8bcddbdb772751b08e8758a1be587 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 17 Jan 2010 23:36:45 +0100 Subject: [PATCH 064/271] bootcheck support --- conf/common.rmk | 5 +++ conf/i386-pc.rmk | 10 ++++++ conf/i386.rmk | 21 +++++++++++++ tests/boot/linux.cfg | 3 ++ tests/boot/linux16.cfg | 3 ++ tests/boot/linuxinit-i386.S | 55 +++++++++++++++++++++++++++++++++ tests/boot/linuxinit-x86_64.S | 54 +++++++++++++++++++++++++++++++++ tests/util/grub-shell.in | 57 +++++++++++++++++++++-------------- 8 files changed, 185 insertions(+), 23 deletions(-) create mode 100644 tests/boot/linux.cfg create mode 100644 tests/boot/linux16.cfg create mode 100644 tests/boot/linuxinit-i386.S create mode 100644 tests/boot/linuxinit-x86_64.S diff --git a/conf/common.rmk b/conf/common.rmk index 31b62892b..905024a55 100644 --- a/conf/common.rmk +++ b/conf/common.rmk @@ -695,4 +695,9 @@ bin_UTILITIES += grub-mkpasswd-pbkdf2 grub_mkpasswd_pbkdf2_SOURCES = gnulib/progname.c util/grub-mkpasswd-pbkdf2.c lib/crypto.c lib/libgcrypt-grub/cipher/sha512.c lib/pbkdf2.c util/misc.c kern/err.c grub_mkpasswd_pbkdf2_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(srcdir)/lib/libgcrypt_wrap -DGRUB_MKPASSWD=1 +# Randomly generated +SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d + +bootcheck: $(BOOTCHECKS) + include $(srcdir)/conf/gcry.mk diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index a89203dea..33575a87c 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -368,5 +368,15 @@ pkglib_DATA += efiemu32.o efiemu64.o endif +BOOTTARGET=bios-cd + +bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell + timeout -s KILL 30s ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell + timeout -s KILL 30s ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +BOOTCHECKS+=bootcheck-linux16-i386 bootcheck-linux16-x86_64 + include $(srcdir)/conf/i386.mk include $(srcdir)/conf/common.mk diff --git a/conf/i386.rmk b/conf/i386.rmk index 7ef337c61..9305bf09c 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -41,3 +41,24 @@ multiboot2_mod_SOURCES = loader/i386/multiboot.c \ multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2 multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS) multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS) + +linuxinit.x86_64: $(srcdir)/tests/boot/linuxinit-x86_64.S + $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linuxinit.i386: $(srcdir)/tests/boot/linuxinit-i386.S + $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux-initramfs.%: linuxinit.% Makefile + TDIR=`mktemp -d`; (cp $< $$TDIR/init; cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR + +CLEANFILES += linuxinit.i386 linuxinit.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 + +bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell + timeout -s KILL 30s ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell + timeout -s KILL 30s ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +BOOTCHECKS+=bootcheck-linux-i386 bootcheck-linux-x86_64 + +.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 diff --git a/tests/boot/linux.cfg b/tests/boot/linux.cfg new file mode 100644 index 000000000..201de99fd --- /dev/null +++ b/tests/boot/linux.cfg @@ -0,0 +1,3 @@ +linux /linux console=ttyS0 root=/dev/ram0 +initrd /initrd +boot diff --git a/tests/boot/linux16.cfg b/tests/boot/linux16.cfg new file mode 100644 index 000000000..ed0a50872 --- /dev/null +++ b/tests/boot/linux16.cfg @@ -0,0 +1,3 @@ +linux16 /linux console=ttyS0 root=/dev/ram0 +initrd16 /initrd +boot diff --git a/tests/boot/linuxinit-i386.S b/tests/boot/linuxinit-i386.S new file mode 100644 index 000000000..a79a5787e --- /dev/null +++ b/tests/boot/linuxinit-i386.S @@ -0,0 +1,55 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#define SYSCALL_WRITE 4 +#define SYSCALL_RESET 88 +#define SYSCALL_EXIT 1 +#define SYSCALL_INT 0x80 + +#define STDOUT 1 +#define SHUTDOWN_MAGIC1 0xfee1dead +#define SHUTDOWN_MAGIC2 0x28121969 +#define SHUTDOWN_MAGIC3 0x4321fedc + + .text + .global start, _start +_start: +start: + /* write. */ + movl $SYSCALL_WRITE, %eax + movl $STDOUT, %ebx + leal message, %ecx + movl $(messageend-message), %edx + int $SYSCALL_INT + + /* shutdown. */ + movl $SYSCALL_RESET, %eax + movl $SHUTDOWN_MAGIC1, %ebx + movl $SHUTDOWN_MAGIC2, %ecx + movl $SHUTDOWN_MAGIC3, %edx + int $SYSCALL_INT + + /* exit (1). Shouldn't be reached. */ + movl $SYSCALL_EXIT, %eax + movl $1, %ebx + int $SYSCALL_INT + .data +message: + .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" +messageend: + \ No newline at end of file diff --git a/tests/boot/linuxinit-x86_64.S b/tests/boot/linuxinit-x86_64.S new file mode 100644 index 000000000..17ba8040c --- /dev/null +++ b/tests/boot/linuxinit-x86_64.S @@ -0,0 +1,54 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#define SYSCALL_WRITE 1 +#define SYSCALL_RESET 169 +#define SYSCALL_EXIT 60 + +#define STDOUT 1 +#define SHUTDOWN_MAGIC1 0xfee1dead +#define SHUTDOWN_MAGIC2 0x28121969 +#define SHUTDOWN_MAGIC3 0x4321fedc + + .text + .global start, _start +_start: +start: + /* write. */ + movq $SYSCALL_WRITE, %rax + movq $STDOUT, %rdi + leaq message, %rsi + movq $(messageend-message), %rdx + syscall + + /* shutdown. */ + movq $SYSCALL_RESET, %rax + movq $SHUTDOWN_MAGIC1, %rdi + movq $SHUTDOWN_MAGIC2, %rsi + movq $SHUTDOWN_MAGIC3, %rdx + syscall + + /* exit(1). Shouldn't be reached. */ + movq $SYSCALL_EXIT, %rax + movq $1, %rdi + syscall + .data +message: + .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" +messageend: + \ No newline at end of file diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index e6fef8313..ee0cded55 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -44,7 +44,9 @@ Run GRUB script in a Qemu instance. -v, --version print the version information and exit --boot=[fd|hd|cd] boot method for Qemu instance --modules=MODULES pre-load specified modules MODULES + --qemu=FILE Name of qemu binary --qemu-opts=OPTIONS extra options to pass to Qemu instance + --files=FILES add files to the image $0 runs input GRUB script or SOURCE file in a Qemu instance and prints its output. @@ -53,6 +55,9 @@ Report bugs to . EOF } +boot=bios-hd +qemu=qemu-system-i386 + # Check the arguments. for option in "$@"; do case "$option" in @@ -65,14 +70,19 @@ for option in "$@"; do --modules=*) ms=`echo "$option" | sed -e 's/--modules=//' -e 's/,/ /g'` modules="$modules $ms" ;; + --files=*) + fls=`echo "$option" | sed -e 's/--files=//' -e 's/,/ /g'` + files="$files $fls" ;; + --qemu=*) + qemu=`echo "$option" | sed -e 's/--qemu=//' -e 's/,/ /g'`;; --qemu-opts=*) qs=`echo "$option" | sed -e 's/--qemu-opts=//'` qemuopts="$qemuopts $qs" ;; --boot=*) dev=`echo "$option" | sed -e 's/--boot=//'` - if [ "$dev" = "fd" ] ; then bootdev=a; - elif [ "$dev" = "hd" ] ; then bootdev=c; - elif [ "$dev" = "cd" ] ; then bootdev=d; + if [ "$dev" = "bios-fd" ] ; then boot=bios-fd; + elif [ "$dev" = "bios-hd" ] ; then boot=bios-hd; + elif [ "$dev" = "bios-cd" ] ; then boot=bios-cd; else echo "Unrecognized boot method \`$dev'" 1>&2 usage @@ -100,10 +110,6 @@ if [ "x${source}" = x ] ; then source=${tmpfile} fi -if [ "x${bootdev}" = x ] ; then - bootdev=c # default is boot as disk image -fi - cfgfile=`mktemp` cat <${cfgfile} grubshell=yes @@ -123,23 +129,28 @@ source /boot/grub/testcase.cfg halt EOF -isofile=`mktemp` -grub-mkrescue --output=${isofile} --override-directory=${builddir} \ - /boot/grub/grub.cfg=${cfgfile} /boot/grub/testcase.cfg=${source} \ - >/dev/null 2>&1 +if [ x$boot = xbios-hd ] || [ x$boot = xbios-fd ] || [ x$boot = xbios-cd ]; then + isofile=`mktemp` + grub-mkrescue --output=${isofile} --override-directory=${builddir} \ + /boot/grub/grub.cfg=${cfgfile} /boot/grub/testcase.cfg=${source} \ + ${files} >/dev/null 2>&1 + if [ x$boot = xbios-hd ]; then + device=hda + bootdev=c + fi + if [ x$boot = xbios-cd ]; then + device=cdrom + bootdev=d + fi + if [ x$boot = xbios-fd ]; then + device=fda + bootdev=a + fi + ${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} -boot ${bootdev} | tr -d "\r" + rm -f ${isofile} +fi -hdafile=`mktemp` -cp ${isofile} ${hdafile} - -fdafile=`mktemp` -cp ${isofile} ${fdafile} - -outfile=`mktemp` -qemu-system-i386 ${qemuopts} -nographic -serial stdio -hda ${hdafile} -fda ${fdafile} -cdrom ${isofile} -boot ${bootdev} | tr -d "\r" >${outfile} - -cat $outfile - -rm -f ${tmpfile} ${outfile} ${cfgfile} ${isofile} ${hdafile} ${fdafile} +rm -f ${tmpfile} ${cfgfile} exit 0 From 5d615a77ce6af16ce4ee36f1ff54992df311d853 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 11:14:04 +0100 Subject: [PATCH 065/271] kfreebsd-i386 boot test support --- conf/common.rmk | 1 + conf/i386-pc.rmk | 4 +- conf/i386.rmk | 26 +++++-- tests/boot/kfreebsd.cfg | 6 ++ tests/boot/kfreebsd.init-i386.S | 74 +++++++++++++++++++ tests/boot/linux.cfg | 2 + .../{linuxinit-i386.S => linux.init-i386.S} | 0 tests/boot/linux16.cfg | 2 + 8 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 tests/boot/kfreebsd.cfg create mode 100644 tests/boot/kfreebsd.init-i386.S rename tests/boot/{linuxinit-i386.S => linux.init-i386.S} (100%) diff --git a/conf/common.rmk b/conf/common.rmk index 905024a55..14fe54200 100644 --- a/conf/common.rmk +++ b/conf/common.rmk @@ -697,6 +697,7 @@ grub_mkpasswd_pbkdf2_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(sr # Randomly generated SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d +BOOTCHECK_TIMEOUT=60 bootcheck: $(BOOTCHECKS) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 33575a87c..f01cba620 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -371,10 +371,10 @@ endif BOOTTARGET=bios-cd bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell - timeout -s KILL 30s ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell - timeout -s KILL 30s ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null BOOTCHECKS+=bootcheck-linux16-i386 bootcheck-linux16-x86_64 diff --git a/conf/i386.rmk b/conf/i386.rmk index 9305bf09c..3743191be 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -45,20 +45,30 @@ multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS) linuxinit.x86_64: $(srcdir)/tests/boot/linuxinit-x86_64.S $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -linuxinit.i386: $(srcdir)/tests/boot/linuxinit-i386.S +linux.init.i386: $(srcdir)/tests/boot/linux.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -linux-initramfs.%: linuxinit.% Makefile - TDIR=`mktemp -d`; (cp $< $$TDIR/init; cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR +kfreebsd.init.i386: $(srcdir)/tests/boot/kfreebsd.init-i386.S + $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ + +linux-initramfs.%: linux.init.% Makefile + TDIR=`mktemp -d`; cp $< $$TDIR/init; (cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR + +kfreebsd-mfsroot.%: kfreebsd.init.% Makefile + TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR + +CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 + +bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/mfsroot=kfreebsd-mfsroot.i386 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -CLEANFILES += linuxinit.i386 linuxinit.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell - timeout -s KILL 30s ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell - timeout -s KILL 30s ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -BOOTCHECKS+=bootcheck-linux-i386 bootcheck-linux-x86_64 +BOOTCHECKS+=bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-i386 -.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 +.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-i386 diff --git a/tests/boot/kfreebsd.cfg b/tests/boot/kfreebsd.cfg new file mode 100644 index 000000000..71b97b67e --- /dev/null +++ b/tests/boot/kfreebsd.cfg @@ -0,0 +1,6 @@ +kfreebsd /kfreebsd -h +kfreebsd_loadenv /kfreebsd_env +kfreebsd_module /mfsroot type=mfs_root +boot +# Shouln't happen +halt diff --git a/tests/boot/kfreebsd.init-i386.S b/tests/boot/kfreebsd.init-i386.S new file mode 100644 index 000000000..8812b650b --- /dev/null +++ b/tests/boot/kfreebsd.init-i386.S @@ -0,0 +1,74 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#define MODE_RDRW 2 +#define FLAGS_NONE 0 +#define SYSCALL_OPEN 5 +#define SYSCALL_WRITE 4 +#define SYSCALL_RESET 55 +#define SYSCALL_EXIT 1 +#define SYSCALL_INT 0x80 + +#define RESET_NOSYNC 0x4 +#define RESET_HALT 0x8 +#define RESET_POWEROFF 0x4000 + + .section ".init", "ax" + .global start,_start +start: +_start: + /* open. */ + movl $SYSCALL_OPEN, %eax + pushl $FLAGS_NONE + pushl $MODE_RDRW + leal device, %ebx + pushl %ebx + pushl $0 + int $SYSCALL_INT + addl $16, %esp + movl %eax, %ecx + + /* write. */ + movl $SYSCALL_WRITE, %eax + pushl $(messageend-message) + leal message, %ebx + pushl %ebx + pushl %ecx + pushl $0 + int $SYSCALL_INT + addl $16, %esp + + /* shutdown. */ + movl $SYSCALL_RESET, %eax + pushl $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC) + pushl $0 + int $SYSCALL_INT + addl $8, %esp + + /* exit (1). Shouldn't be reached. */ + movl $SYSCALL_EXIT, %eax + pushl $1 + pushl $0 + int $SYSCALL_INT +device: + .ascii "/dev/console" + .byte 0 +message: + .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" +messageend: + \ No newline at end of file diff --git a/tests/boot/linux.cfg b/tests/boot/linux.cfg index 201de99fd..f5bf6ac7d 100644 --- a/tests/boot/linux.cfg +++ b/tests/boot/linux.cfg @@ -1,3 +1,5 @@ linux /linux console=ttyS0 root=/dev/ram0 initrd /initrd boot +# Shouln't happen +halt diff --git a/tests/boot/linuxinit-i386.S b/tests/boot/linux.init-i386.S similarity index 100% rename from tests/boot/linuxinit-i386.S rename to tests/boot/linux.init-i386.S diff --git a/tests/boot/linux16.cfg b/tests/boot/linux16.cfg index ed0a50872..d7fbf961c 100644 --- a/tests/boot/linux16.cfg +++ b/tests/boot/linux16.cfg @@ -1,3 +1,5 @@ linux16 /linux console=ttyS0 root=/dev/ram0 initrd16 /initrd boot +# Shouln't happen +halt From 0db3ae3ce643451359c42515149c576be11177e9 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 11:38:28 +0100 Subject: [PATCH 066/271] Add bootcheck for kfreebsd-x86_64 --- conf/i386.rmk | 11 +++- tests/boot/kfreebsd.init-x86_64.S | 62 +++++++++++++++++++ ...linuxinit-x86_64.S => linux.init-x86_64.S} | 0 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 tests/boot/kfreebsd.init-x86_64.S rename tests/boot/{linuxinit-x86_64.S => linux.init-x86_64.S} (100%) diff --git a/conf/i386.rmk b/conf/i386.rmk index 3743191be..919337e2a 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -48,6 +48,9 @@ linuxinit.x86_64: $(srcdir)/tests/boot/linuxinit-x86_64.S linux.init.i386: $(srcdir)/tests/boot/linux.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" +kfreebsd.init.x86_64: $(srcdir)/tests/boot/kfreebsd.init-x86_64.S + $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ + kfreebsd.init.i386: $(srcdir)/tests/boot/kfreebsd.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ @@ -62,6 +65,8 @@ CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initram bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/mfsroot=kfreebsd-mfsroot.i386 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot=kfreebsd-mfsroot.x86_64 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null @@ -69,6 +74,8 @@ bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(src bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -BOOTCHECKS+=bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-i386 +BOOTCHECKS+=bootcheck-linux-i386 bootcheck-linux-x86_64 \ + bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 -.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-i386 +.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ + bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 diff --git a/tests/boot/kfreebsd.init-x86_64.S b/tests/boot/kfreebsd.init-x86_64.S new file mode 100644 index 000000000..edff0d782 --- /dev/null +++ b/tests/boot/kfreebsd.init-x86_64.S @@ -0,0 +1,62 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#define MODE_RDRW 2 +#define FLAGS_NONE 0 +#define SYSCALL_OPEN 5 +#define SYSCALL_WRITE 4 +#define SYSCALL_RESET 55 +#define SYSCALL_EXIT 1 + +#define RESET_NOSYNC 0x4 +#define RESET_HALT 0x8 +#define RESET_POWEROFF 0x4000 + + .section ".init", "ax" + .global start,_start +start: +_start: + /* open. */ + movq $SYSCALL_OPEN, %rax + leaq device, %rdi + movq $MODE_RDRW, %rsi + movq $FLAGS_NONE, %rdx + syscall + movq %rax, %rdi + + /* write. */ + movq $SYSCALL_WRITE, %rax + leaq message, %rsi + movq $(messageend-message), %rdx + syscall + + /* shutdown. */ + movq $SYSCALL_RESET, %rax + movq $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC), %rdi + syscall + + /* exit (1). Shouldn't be reached. */ + movq $SYSCALL_EXIT, %rax + movq $1, %rdi + syscall +device: + .ascii "/dev/console" + .byte 0 +message: + .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" +messageend: diff --git a/tests/boot/linuxinit-x86_64.S b/tests/boot/linux.init-x86_64.S similarity index 100% rename from tests/boot/linuxinit-x86_64.S rename to tests/boot/linux.init-x86_64.S From c5545cf8baa2220d20fe6b861bf3dd47e08b5c9a Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 12:00:00 +0100 Subject: [PATCH 067/271] Fix linux-x86_64 bootchecks --- conf/i386.rmk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/i386.rmk b/conf/i386.rmk index 919337e2a..515c50fc6 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -42,7 +42,7 @@ multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2 multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS) multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS) -linuxinit.x86_64: $(srcdir)/tests/boot/linuxinit-x86_64.S +linux.init.x86_64: $(srcdir)/tests/boot/linux.init-x86_64.S $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" linux.init.i386: $(srcdir)/tests/boot/linux.init-i386.S From 3de254033ca9d010fbaedb0ea12f4e84e049e46b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 12:01:13 +0100 Subject: [PATCH 068/271] Fix x86_64-efi compilation --- lib/relocator.c | 8 ++++---- loader/i386/bsd.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index a02bca332..0644691cd 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -635,9 +635,9 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, struct grub_relocator_chunk *chunk; for (chunk = rel->chunks; chunk; chunk = chunk->next) { - grub_dprintf ("relocator", "chunk %p->%p, 0x%x\n", + grub_dprintf ("relocator", "chunk %p->%p, 0x%lx\n", (void *) chunk->src, (void *) chunk->target, - chunk->size); + (unsigned long) chunk->size); nchunks++; count[(chunk->src & 0xff) + 1]++; } @@ -679,9 +679,9 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, for (j = 0; j < nchunks; j++) { - grub_dprintf ("relocator", "sorted chunk %p->%p, 0x%x\n", + grub_dprintf ("relocator", "sorted chunk %p->%p, 0x%lx\n", (void *) sorted[j].src, (void *) sorted[j].target, - sorted[j].size); + (unsigned long) sorted[j].size); if (sorted[j].src < sorted[j].target) { grub_cpu_relocator_backward ((void *) rels, diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 28f1c685a..d019f21db 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -351,7 +351,7 @@ grub_bsd_add_mmap (void) generate_e820_mmap (NULL, &cnt, buf); - grub_dprintf ("bsd", "%u entries in smap\n", cnt); + grub_dprintf ("bsd", "%u entries in smap\n", (unsigned) cnt); if (kernel_type == KERNEL_TYPE_NETBSD) grub_bsd_add_meta (NETBSD_BTINFO_MEMMAP, buf0, len); else From 5756bfe137343d93af6d1bad4f065be725808a63 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 12:45:28 +0100 Subject: [PATCH 069/271] Fix regression in kfreebsd-i386 --- loader/i386/bsd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index d019f21db..73fe8cc77 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -705,7 +705,7 @@ grub_freebsd_boot (void) grub_fatal ("cannot exit boot services"); #endif - grub_memcpy (&stack[8], &bi, sizeof (bi)); + grub_memcpy (&stack[9], &bi, sizeof (bi)); state.eip = entry; state.esp = stack_target; stack[0] = entry; /* "Return" address. */ From 935842dd5666058010967e85b7522c256ace0234 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 13:32:56 +0100 Subject: [PATCH 070/271] Always put smap after kern_end for freebsd --- loader/i386/bsd.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 73fe8cc77..7f9617543 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -220,6 +220,25 @@ grub_bsd_add_meta (grub_uint32_t type, void *data, grub_uint32_t len) newtag->next = NULL; if (len) grub_memcpy (newtag->data, data, len); + + if (kernel_type == KERNEL_TYPE_FREEBSD + && type == (FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_SMAP)) + { + struct bsd_tag *p; + for (p = tags; + p->type != (FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_KERNEND); + p = p->next); + + if (p) + { + newtag->next = p->next; + p->next = newtag; + if (newtag->next == NULL) + tags_last = newtag; + return GRUB_ERR_NONE; + } + } + if (tags_last) tags_last->next = newtag; else From 1ef7e2992dd55808333ad1acc8ebe77bd962e5a7 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 16:03:57 +0100 Subject: [PATCH 071/271] =?UTF-8?q?Fix=20mismerge=20resulting=20in=20ghost?= =?UTF-8?q?=20multiboot=20module.=20Reported=20by:=20Gr=C3=A9goire=20Sutre?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- loader/i386/multiboot.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c index 8186e8cca..3c743c85f 100644 --- a/loader/i386/multiboot.c +++ b/loader/i386/multiboot.c @@ -303,11 +303,6 @@ grub_module (int argc, char *argv[]) if (err) goto fail; - err = grub_multiboot_add_module ((grub_addr_t) module, size, - argc - 1, argv + 1); - if (err) - goto fail; - if (grub_file_read (file, module, size) != size) { grub_error (GRUB_ERR_FILE_READ_ERROR, "couldn't read file"); From 5a6ff7ad4aa4c5d8637d1b5cb549758b620ede2c Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 22:29:25 +0100 Subject: [PATCH 072/271] kfreebsd-i386 bootcheck --- conf/i386.rmk | 20 ++++- tests/boot/knetbsd.cfg | 5 ++ tests/boot/knetbsd.init-i386.S | 134 +++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 tests/boot/knetbsd.cfg create mode 100644 tests/boot/knetbsd.init-i386.S diff --git a/conf/i386.rmk b/conf/i386.rmk index b1adb13d9..c9ba18b11 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -81,14 +81,26 @@ kfreebsd.init.x86_64: $(srcdir)/tests/boot/kfreebsd.init-x86_64.S kfreebsd.init.i386: $(srcdir)/tests/boot/kfreebsd.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ -linux-initramfs.%: linux.init.% Makefile +knetbsd.init.i386: $(srcdir)/tests/boot/knetbsd.init-i386.S + $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux-initramfs.%: linux.init.% TDIR=`mktemp -d`; cp $< $$TDIR/init; (cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR -kfreebsd-mfsroot.%: kfreebsd.init.% Makefile +kfreebsd-mfsroot.%: kfreebsd.init.% TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR +knetbsd.image.%: knetbsd.init.% + TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +knetbsd.miniroot-image.i386: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 + $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@ + CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 +bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.i386 grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot=knetbsd.miniroot-image.i386 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/mfsroot=kfreebsd-mfsroot.i386 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null @@ -102,7 +114,9 @@ bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null BOOTCHECKS+=bootcheck-linux-i386 bootcheck-linux-x86_64 \ - bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 + bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ + bootcheck-knetbsd-i386 .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 + bootcheck-knetbsd-i386 \ No newline at end of file diff --git a/tests/boot/knetbsd.cfg b/tests/boot/knetbsd.cfg new file mode 100644 index 000000000..ad2258dce --- /dev/null +++ b/tests/boot/knetbsd.cfg @@ -0,0 +1,5 @@ +knetbsd /knetbsd -h +knetbsd_module_elf /miniroot +boot +# Shouln't happen +halt diff --git a/tests/boot/knetbsd.init-i386.S b/tests/boot/knetbsd.init-i386.S new file mode 100644 index 000000000..200aed01f --- /dev/null +++ b/tests/boot/knetbsd.init-i386.S @@ -0,0 +1,134 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#define MODE_RDRW 2 +#define FLAGS_NONE 0 +#define SYSCALL_OPEN 5 +#define SYSCALL_WRITE 4 +#define SYSCALL_RESET 208 +#define SYSCALL_EXIT 1 +#define SYSCALL_MKNOD 14 +#define SYSCALL_MOUNT 410 +#define SYSCALL_INT 0x80 + +#define RESET_NOSYNC 0x4 +#define RESET_HALT 0x8 +#define RESET_POWEROFF 0x800 + + .section ".init", "ax" + .global start,_start +start: +_start: + /* mount. */ + movl $SYSCALL_MOUNT, %eax + push $(tmpfs_args_end - tmpfs_args) + push $tmpfs_args + push $0 + push $devfsdir + push $devfstype + pushl $0 + int $SYSCALL_INT + addl $20, %esp + + /* mknod. */ + movl $SYSCALL_MKNOD, %eax + pushl $0 + pushl $0x2140 + leal device, %ebx + pushl %ebx + pushl $0 + int $SYSCALL_INT + addl $16, %esp + + /* open. */ + movl $SYSCALL_OPEN, %eax + pushl $FLAGS_NONE + pushl $MODE_RDRW + leal device, %ebx + pushl %ebx + pushl $0 + int $SYSCALL_INT + addl $16, %esp + movl %eax, %ecx + + /* write. */ + movl $SYSCALL_WRITE, %eax + pushl $(messageend-message) + leal message, %ebx + pushl %ebx + pushl %ecx + pushl $0 + int $SYSCALL_INT + addl $16, %esp + + /* shutdown. */ + movl $SYSCALL_RESET, %eax + pushl $haltmsg + pushl $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC) + pushl $0 + int $SYSCALL_INT + addl $8, %esp + + /* exit (1). Shouldn't be reached. */ + movl $SYSCALL_EXIT, %eax + pushl $1 + pushl $0 + int $SYSCALL_INT + .section ".fini", "ax" +1: jmp 1b + .section ".text", "ax" +1: jmp 1b + /* This section is needed for NetBSD to identify the binary. */ + .section ".note.netbsd.ident", "a" + .long 0x7 + .long 0x4 + .long 0x1 + .ascii "NetBSD" + .byte 0 + .data +device: + .ascii "/dev/console" + .byte 0 +message: + .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" +messageend: +haltmsg: + .ascii "Machine halted" + .byte 0 +devfstype: + .ascii "tmpfs" + .byte 0 +devfsdir: + .ascii "/dev" + .byte 0 +tmpfs_args: + /* Version. */ + .long 1 + + /* Maximum inodes. */ + .quad 0 + /* Maximum size. */ + .quad 0 + + /* UID */ + .long 0 + /* GID */ + .long 0 + /* Mode */ + .long 0777 +tmpfs_args_end: \ No newline at end of file From 96c713b69da081ad76f1c6cca2bcd9123b54e956 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 23:37:11 +0100 Subject: [PATCH 073/271] Eliminate variable-length types in parameters --- include/grub/i386/netbsd_bootinfo.h | 8 ++++---- include/grub/i386/openbsd_bootarg.h | 6 +++--- loader/i386/bsd.c | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/include/grub/i386/netbsd_bootinfo.h b/include/grub/i386/netbsd_bootinfo.h index 5cda9d570..fd429a251 100644 --- a/include/grub/i386/netbsd_bootinfo.h +++ b/include/grub/i386/netbsd_bootinfo.h @@ -60,7 +60,7 @@ struct grub_netbsd_bootinfo { grub_uint32_t bi_count; - grub_addr_t bi_data[0]; + grub_uint32_t bi_data[0]; }; struct grub_netbsd_btinfo_common @@ -73,14 +73,14 @@ struct grub_netbsd_btinfo_common struct grub_netbsd_btinfo_bootdisk { - int labelsector; /* label valid if != -1 */ + grub_uint32_t labelsector; /* label valid if != 0xffffffff */ struct { grub_uint16_t type, checksum; char packname[16]; } label; - int biosdev; - int partition; + grub_uint32_t biosdev; + grub_uint32_t partition; }; struct grub_netbsd_btinfo_symtab diff --git a/include/grub/i386/openbsd_bootarg.h b/include/grub/i386/openbsd_bootarg.h index ccbe1ca12..cd99b14f2 100644 --- a/include/grub/i386/openbsd_bootarg.h +++ b/include/grub/i386/openbsd_bootarg.h @@ -64,9 +64,9 @@ struct grub_openbsd_bootargs { - int ba_type; - int ba_size; - struct grub_openbsd_bootargs *ba_next; + grub_uint32_t ba_type; + grub_uint32_t ba_size; + grub_uint32_t ba_next; } __attribute__ ((packed)); #endif diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 7f9617543..ed9a1dbae 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -822,9 +822,11 @@ grub_openbsd_boot (void) buf = (grub_uint8_t *) pm; pa->ba_size = (char *) pm - (char *) pa; - pa->ba_next = (struct grub_openbsd_bootargs *) (buf - buf0 + buf_target); - pa = pa->ba_next; + pa->ba_next = buf - buf0 + buf_target; + pa = (struct grub_openbsd_bootargs *) buf; pa->ba_type = OPENBSD_BOOTARG_END; + pa->ba_size = 0; + pa->ba_next = 0; pa++; buf = (grub_uint8_t *) pa; From 839aec66c9ea917276bb533e41a315c9a2e0e74e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 18 Jan 2010 23:57:10 +0100 Subject: [PATCH 074/271] make netbsd kernel symbols non-mandatory (not present on netbsd64) --- loader/i386/bsdXX.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index ccf386440..734633704 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -401,7 +401,7 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator, break; if (s >= (Elf_Shdr *) ((char *) shdr + e.e_shnum * e.e_shentsize)) - return grub_error (GRUB_ERR_BAD_OS, "no symbol table"); + return GRUB_ERR_NONE; symsize = s->sh_size; symsh = s; s = (Elf_Shdr *) (shdr + e.e_shentsize * s->sh_link); From a3e99e1a45ff211b6d2ec220ef477372672cd961 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 19 Jan 2010 09:16:26 +0100 Subject: [PATCH 075/271] Align kern_end on page boundary as a precaution --- loader/i386/bsd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index ed9a1dbae..1d616c7b2 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -1008,7 +1008,7 @@ grub_netbsd_boot (void) err = grub_relocator_alloc_chunk_addr (relocator, &curarg, arg_target, tag_buf_len + sizeof (struct grub_netbsd_bootinfo) - + tag_count * sizeof (grub_addr_t)); + + tag_count * sizeof (grub_uint32_t)); if (err) return err; @@ -1322,6 +1322,8 @@ grub_bsd_load (int argc, char *argv[]) grub_file_close (file); } + kern_end = ALIGN_PAGE (kern_end); + fail: if (grub_errno != GRUB_ERR_NONE) From 2b9885e16bb2889baa42a9a782b8a10c4e735f4b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 19 Jan 2010 09:17:23 +0100 Subject: [PATCH 076/271] bootcheck-kfreebsd-x86_64 --- conf/i386.rmk | 19 +++-- tests/boot/knetbsd.init-x86_64.S | 124 +++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+), 5 deletions(-) create mode 100644 tests/boot/knetbsd.init-x86_64.S diff --git a/conf/i386.rmk b/conf/i386.rmk index c9ba18b11..690194261 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -84,23 +84,32 @@ kfreebsd.init.i386: $(srcdir)/tests/boot/kfreebsd.init-i386.S knetbsd.init.i386: $(srcdir)/tests/boot/knetbsd.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" +knetbsd.init.x86_64: $(srcdir)/tests/boot/knetbsd.init-x86_64.S + $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + linux-initramfs.%: linux.init.% TDIR=`mktemp -d`; cp $< $$TDIR/init; (cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR kfreebsd-mfsroot.%: kfreebsd.init.% - TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR + TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR knetbsd.image.%: knetbsd.init.% - TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR knetbsd.miniroot-image.i386: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@ +knetbsd.miniroot-image.x86_64: knetbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 + $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 $@ + CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.i386 grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot=knetbsd.miniroot-image.i386 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.x86_64 grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/miniroot=knetbsd.miniroot-image.x86_64 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/mfsroot=kfreebsd-mfsroot.i386 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null @@ -115,8 +124,8 @@ bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 BOOTCHECKS+=bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ - bootcheck-knetbsd-i386 + bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ - bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 - bootcheck-knetbsd-i386 \ No newline at end of file + bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ + bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 diff --git a/tests/boot/knetbsd.init-x86_64.S b/tests/boot/knetbsd.init-x86_64.S new file mode 100644 index 000000000..e56174f9c --- /dev/null +++ b/tests/boot/knetbsd.init-x86_64.S @@ -0,0 +1,124 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#define MODE_RDRW 2 +#define FLAGS_NONE 0 +#define SYSCALL_OPEN 5 +#define SYSCALL_WRITE 4 +#define SYSCALL_RESET 208 +#define SYSCALL_EXIT 1 +#define SYSCALL_MKNOD 14 +#define SYSCALL_MOUNT 410 +#define SYSCALL_INT 0x80 + +#define RESET_NOSYNC 0x4 +#define RESET_HALT 0x8 +#define RESET_POWEROFF 0x800 + + .section ".init", "ax" + .global start,_start +start: +_start: + /* mount. */ + movq $SYSCALL_MOUNT, %rax + movq $devfstype, %rdi + movq $devfsdir, %rsi + movq $0, %rdx + movq $tmpfs_args, %r10 + movq $(tmpfs_args_end - tmpfs_args), %r8 + syscall + + /* mknod. */ + movq $SYSCALL_MKNOD, %rax + leaq device, %rdi + movq $0x2140, %rsi + movq $0, %rdx + syscall + + /* open. */ + movq $SYSCALL_OPEN, %rax + leaq device, %rdi + movq $MODE_RDRW, %rsi + movq $FLAGS_NONE, %rdx + syscall + movq %rax, %rdi + + /* write. */ + movq $SYSCALL_WRITE, %rax + movq $(messageend-message), %rdx + leaq message, %rsi + syscall + + /* shutdown. */ + movq $SYSCALL_RESET, %rax + movq $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC), %rdi + movq $haltmsg, %rsi + syscall + + /* exit (1). Shouldn't be reached. */ + movq $SYSCALL_EXIT, %rax + movq $1, %rdi + syscall + .section ".fini", "ax" +1: jmp 1b + .section ".text", "ax" +1: jmp 1b + /* This section is needed for NetBSD to identify the binary. */ + .section ".note.netbsd.ident", "a" + .long 0x7 + .long 0x4 + .long 0x1 + .ascii "NetBSD" + .byte 0 + .data +device: + .ascii "/dev/console" + .byte 0 +message: + .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" +messageend: +haltmsg: + .ascii "Machine halted" + .byte 0 +devfstype: + .ascii "tmpfs" + .byte 0 +devfsdir: + .ascii "/dev" + .byte 0 +tmpfs_args: + /* Version. */ + .long 1 + + /* Alignment long. */ + .long 0 + + /* Maximum inodes. */ + .quad 0 + /* Maximum size. */ + .quad 0 + + /* UID */ + .long 0 + /* GID */ + .long 0 + /* Mode */ + .long 0777 + /* Alignment long. */ + .long 0 +tmpfs_args_end: \ No newline at end of file From 5b512173a30af58caff6a07940072b33188039d1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 19 Jan 2010 10:32:57 +0100 Subject: [PATCH 077/271] Tags for OpenBSD --- include/grub/i386/bsd.h | 13 ---- loader/i386/bsd.c | 134 +++++++++++++++++----------------------- 2 files changed, 55 insertions(+), 92 deletions(-) diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index 8fd284bfc..f0cce840e 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -80,19 +80,6 @@ struct freebsd_tag_header grub_uint32_t len; }; -struct grub_openbsd_bios_mmap -{ - grub_uint64_t addr; - grub_uint64_t len; -#define OPENBSD_MMAP_AVAILABLE 1 -#define OPENBSD_MMAP_RESERVED 2 -#define OPENBSD_MMAP_ACPI 3 -#define OPENBSD_MMAP_NVS 4 - grub_uint32_t type; -}; - - - grub_err_t grub_freebsd_load_elfmodule32 (struct grub_relocator *relocator, grub_file_t file, int argc, char *argv[], grub_addr_t *kern_end); diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 1d616c7b2..6643513b1 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -357,6 +357,9 @@ grub_bsd_add_mmap (void) if (kernel_type == KERNEL_TYPE_NETBSD) len += sizeof (grub_uint32_t); + if (kernel_type == KERNEL_TYPE_OPENBSD) + len += sizeof (struct grub_e820_mmap); + buf = grub_malloc (len); if (!buf) return grub_errno; @@ -370,9 +373,15 @@ grub_bsd_add_mmap (void) generate_e820_mmap (NULL, &cnt, buf); + if (kernel_type == KERNEL_TYPE_OPENBSD) + grub_memset ((grub_uint8_t *) buf + len - sizeof (struct grub_e820_mmap), 0, + sizeof (struct grub_e820_mmap)); + grub_dprintf ("bsd", "%u entries in smap\n", (unsigned) cnt); if (kernel_type == KERNEL_TYPE_NETBSD) grub_bsd_add_meta (NETBSD_BTINFO_MEMMAP, buf0, len); + else if (kernel_type == KERNEL_TYPE_OPENBSD) + grub_bsd_add_meta (OPENBSD_BOOTARG_MMAP, buf0, len); else grub_bsd_add_meta (FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_SMAP, buf0, len); @@ -746,91 +755,59 @@ grub_freebsd_boot (void) static grub_err_t grub_openbsd_boot (void) { - grub_uint8_t *buf, *buf0; grub_uint32_t *stack; - grub_addr_t buf_target, argbuf_target_start, argbuf_target_end; - grub_size_t buf_size; - struct grub_openbsd_bios_mmap *pm; - struct grub_openbsd_bootargs *pa; struct grub_relocator32_state state; + void *curarg, *buf0, *arg0; + grub_addr_t buf_target; grub_err_t err; + grub_size_t tag_buf_len; - auto int NESTED_FUNC_ATTR count_hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); - int NESTED_FUNC_ATTR count_hook (grub_uint64_t addr __attribute__ ((unused)), - grub_uint64_t size __attribute__ ((unused)), - grub_uint32_t type __attribute__ ((unused))) - { - buf_size += sizeof (struct grub_openbsd_bios_mmap); - return 1; - } - - auto int NESTED_FUNC_ATTR hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); - int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t size, grub_uint32_t type) - { - pm->addr = addr; - pm->len = size; - - switch (type) - { - case GRUB_MACHINE_MEMORY_AVAILABLE: - pm->type = OPENBSD_MMAP_AVAILABLE; - break; - - case GRUB_MACHINE_MEMORY_ACPI: - pm->type = OPENBSD_MMAP_ACPI; - break; - - case GRUB_MACHINE_MEMORY_NVS: - pm->type = OPENBSD_MMAP_NVS; - break; - - default: - pm->type = OPENBSD_MMAP_RESERVED; - break; - } - pm++; - - return 0; - } - - buf_target = GRUB_BSD_TEMP_BUFFER; - buf_size = sizeof (struct grub_openbsd_bootargs) + 9 * sizeof (grub_uint32_t); - grub_mmap_iterate (count_hook); - buf_size += sizeof (struct grub_openbsd_bootargs); - - err = grub_relocator_alloc_chunk_addr (relocator, (void **) &buf, - buf_target, buf_size); + err = grub_bsd_add_mmap (); if (err) return err; - buf0 = buf; - stack = (grub_uint32_t *) buf; - buf = (grub_uint8_t *) (stack + 9); - argbuf_target_start = buf - buf0 + buf_target; + { + struct bsd_tag *tag; + tag_buf_len = 0; + for (tag = tags; tag; tag = tag->next) + tag_buf_len = ALIGN_VAR (tag_buf_len + + sizeof (struct grub_openbsd_bootargs) + + tag->len); + } - pa = (struct grub_openbsd_bootargs *) buf; + buf_target = GRUB_BSD_TEMP_BUFFER - 9 * sizeof (grub_uint32_t); + err = grub_relocator_alloc_chunk_addr (relocator, &buf0, + buf_target, tag_buf_len + + sizeof (struct grub_openbsd_bootargs) + + 9 * sizeof (grub_uint32_t)); + if (err) + return err; - pa->ba_type = OPENBSD_BOOTARG_MMAP; - pm = (struct grub_openbsd_bios_mmap *) (pa + 1); - grub_mmap_iterate (hook); + stack = (grub_uint32_t *) buf0; + arg0 = curarg = stack + 9; - /* Memory map terminator. */ - pm->addr = 0; - pm->len = 0; - pm->type = 0; - pm++; - buf = (grub_uint8_t *) pm; + { + struct bsd_tag *tag; + struct grub_openbsd_bootargs *head; - pa->ba_size = (char *) pm - (char *) pa; - pa->ba_next = buf - buf0 + buf_target; - pa = (struct grub_openbsd_bootargs *) buf; - pa->ba_type = OPENBSD_BOOTARG_END; - pa->ba_size = 0; - pa->ba_next = 0; - pa++; + for (tag = tags; tag; tag = tag->next) + { + head = curarg; + head->ba_type = tag->type; + head->ba_size = tag->len + sizeof (*head); + curarg = head + 1; + grub_memcpy (curarg, tag->data, tag->len); + curarg = (grub_uint8_t *) curarg + tag->len; + head->ba_next = (grub_uint8_t *) curarg - (grub_uint8_t *) buf0 + + buf_target; + } + head = curarg; + head->ba_type = OPENBSD_BOOTARG_END; + head->ba_size = 0; + head->ba_next = 0; + } - buf = (grub_uint8_t *) pa; - argbuf_target_end = buf - buf0 + buf_target; + grub_video_set_mode ("text", 0, 0); #ifdef GRUB_MACHINE_EFI if (! grub_efi_finish_boot_services ()) @@ -838,7 +815,7 @@ grub_openbsd_boot (void) #endif state.eip = entry; - state.esp = ((grub_uint8_t *) stack - buf0) + buf_target; + state.esp = ((grub_uint8_t *) stack - (grub_uint8_t *) buf0) + buf_target; stack[0] = entry; stack[1] = bootflags; stack[2] = openbsd_root; @@ -846,10 +823,8 @@ grub_openbsd_boot (void) stack[4] = 0; stack[5] = grub_mmap_get_upper () >> 10; stack[6] = grub_mmap_get_lower () >> 10; - stack[7] = argbuf_target_end - argbuf_target_start; - stack[8] = argbuf_target_start; - - grub_video_set_mode ("text", 0, 0); + stack[7] = (grub_uint8_t *) curarg - (grub_uint8_t *) arg0; + stack[8] = ((grub_uint8_t *) arg0 - (grub_uint8_t *) buf0) + buf_target; return grub_relocator32_boot (relocator, state); } @@ -998,7 +973,8 @@ grub_netbsd_boot (void) tag_buf_len = 0; for (tag = tags; tag; tag = tag->next) { - tag_buf_len = ALIGN_VAR (tag_buf_len + 2 * sizeof (grub_uint32_t) + tag_buf_len = ALIGN_VAR (tag_buf_len + + sizeof (struct grub_netbsd_btinfo_common) + tag->len); tag_count++; } From b5b6745c874f3e8f6fb0546af72eb64f98b83f1a Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 19 Jan 2010 14:29:02 +0100 Subject: [PATCH 078/271] kopenbsd serial support --- include/grub/i386/openbsd_bootarg.h | 10 ++++++ loader/i386/bsd.c | 48 +++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/include/grub/i386/openbsd_bootarg.h b/include/grub/i386/openbsd_bootarg.h index cd99b14f2..935dfc0c8 100644 --- a/include/grub/i386/openbsd_bootarg.h +++ b/include/grub/i386/openbsd_bootarg.h @@ -61,6 +61,7 @@ #define OPENBSD_BOOTARG_END -1 #define OPENBSD_BOOTARG_MMAP 0 +#define OPENBSD_BOOTARG_CONSOLE 5 struct grub_openbsd_bootargs { @@ -69,4 +70,13 @@ struct grub_openbsd_bootargs grub_uint32_t ba_next; } __attribute__ ((packed)); +struct grub_openbsd_bootarg_console +{ + grub_uint32_t device; + grub_uint32_t speed; +}; + +#define GRUB_OPENBSD_COM_MAJOR 8 +#define GRUB_OPENBSD_VGA_MAJOR 12 + #endif diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 6643513b1..7a8ddb89a 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -126,6 +126,8 @@ static const struct grub_arg_option openbsd_opts[] = {"single", 's', 0, N_("Boot into single mode."), 0, 0}, {"kdb", 'd', 0, N_("Enter in KDB on boot."), 0, 0}, {"root", 'r', 0, N_("Set root device."), "wdXY", ARG_TYPE_STRING}, + {"serial", 'h', GRUB_ARG_OPTION_OPTIONAL, + N_("Use serial console."), N_("comUNIT[,SPEED]"), ARG_TYPE_STRING}, {0, 0, 0, 0, 0, 0} }; @@ -136,6 +138,7 @@ static const grub_uint32_t openbsd_flags[] = }; #define OPENBSD_ROOT_ARG (ARRAY_SIZE (openbsd_flags) - 1) +#define OPENBSD_SERIAL_ARG (ARRAY_SIZE (openbsd_flags)) static const struct grub_arg_option netbsd_opts[] = { @@ -1410,6 +1413,51 @@ grub_cmd_openbsd (grub_extcmd_t cmd, int argc, char *argv[]) else bootdev = 0; + if (cmd->state[OPENBSD_SERIAL_ARG].set) + { + struct grub_openbsd_bootarg_console serial; + char *ptr; + unsigned port = 0; + unsigned speed = 9600; + + grub_memset (&serial, 0, sizeof (serial)); + + if (cmd->state[OPENBSD_SERIAL_ARG].arg) + { + ptr = cmd->state[OPENBSD_SERIAL_ARG].arg; + if (grub_memcmp (ptr, "com", sizeof ("com") - 1) != 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "only com0-com3 are supported"); + ptr += sizeof ("com") - 1; + port = grub_strtoul (ptr, &ptr, 0); + if (port >= 4) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "only com0-com3 are supported"); + if (*ptr == ',') + { + ptr++; + speed = grub_strtoul (ptr, &ptr, 0); + if (grub_errno) + return grub_errno; + } + } + + serial.device = (GRUB_OPENBSD_COM_MAJOR << 8) | port; + serial.speed = speed; + + grub_bsd_add_meta (OPENBSD_BOOTARG_CONSOLE, &serial, sizeof (serial)); + bootflags |= OPENBSD_RB_SERCONS; + } + else + { + struct grub_openbsd_bootarg_console serial; + + grub_memset (&serial, 0, sizeof (serial)); + serial.device = (GRUB_OPENBSD_VGA_MAJOR << 8); + grub_bsd_add_meta (OPENBSD_BOOTARG_CONSOLE, &serial, sizeof (serial)); + bootflags &= ~OPENBSD_RB_SERCONS; + } + if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE) { grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 1); From 69a30a6e8e01247536ababf08c57ec92969f2a57 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 20 Jan 2010 11:12:45 +0100 Subject: [PATCH 079/271] Pass NULL as second argument to netbsd reboot syscall --- tests/boot/knetbsd.init-i386.S | 5 +---- tests/boot/knetbsd.init-x86_64.S | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/tests/boot/knetbsd.init-i386.S b/tests/boot/knetbsd.init-i386.S index 200aed01f..c751421ba 100644 --- a/tests/boot/knetbsd.init-i386.S +++ b/tests/boot/knetbsd.init-i386.S @@ -78,7 +78,7 @@ _start: /* shutdown. */ movl $SYSCALL_RESET, %eax - pushl $haltmsg + pushl $0 pushl $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC) pushl $0 int $SYSCALL_INT @@ -107,9 +107,6 @@ device: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: -haltmsg: - .ascii "Machine halted" - .byte 0 devfstype: .ascii "tmpfs" .byte 0 diff --git a/tests/boot/knetbsd.init-x86_64.S b/tests/boot/knetbsd.init-x86_64.S index e56174f9c..dfc64e99d 100644 --- a/tests/boot/knetbsd.init-x86_64.S +++ b/tests/boot/knetbsd.init-x86_64.S @@ -67,7 +67,7 @@ _start: /* shutdown. */ movq $SYSCALL_RESET, %rax movq $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC), %rdi - movq $haltmsg, %rsi + movq $0, %rsi syscall /* exit (1). Shouldn't be reached. */ @@ -92,9 +92,6 @@ device: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: -haltmsg: - .ascii "Machine halted" - .byte 0 devfstype: .ascii "tmpfs" .byte 0 From 7d8c9ec63df5396df0bdc9843675ed56876525fd Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 23 Jan 2010 13:30:24 +0100 Subject: [PATCH 080/271] newreloc on yeeloong --- conf/mips.rmk | 4 +- include/grub/mips/relocator.h | 9 ++- include/grub/relocator_private.h | 2 +- lib/i386/relocator.c | 6 +- lib/mips/relocator.c | 111 ++++++++++++++++++++----------- lib/mips/relocator_asm.S | 8 +-- lib/relocator.c | 8 ++- loader/mips/linux.c | 60 +++++++++-------- 8 files changed, 126 insertions(+), 82 deletions(-) diff --git a/conf/mips.rmk b/conf/mips.rmk index d0b1c484c..0e96caeb4 100644 --- a/conf/mips.rmk +++ b/conf/mips.rmk @@ -17,7 +17,7 @@ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h reader.h \ symbol.h term.h time.h types.h loader.h partition.h \ msdos_partition.h machine/kernel.h handler.h list.h \ - command.h machine/memory.h cpu/libgcc.h cpu/cache.h i18n.h + command.h machine/memory.h cpu/libgcc.h cpu/cache.h i18n.h mm_private.h ifeq ($(platform), yeeloong) kernel_img_HEADERS += pci.h @@ -68,7 +68,7 @@ serial_mod_LDFLAGS = $(COMMON_LDFLAGS) # For relocator.mod. pkglib_MODULES += relocator.mod -relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/$(target_cpu)/relocator_asm.S +relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/relocator.c lib/$(target_cpu)/relocator_asm.S relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/include/grub/mips/relocator.h b/include/grub/mips/relocator.h index 838ef832f..67b0a4c43 100644 --- a/include/grub/mips/relocator.h +++ b/include/grub/mips/relocator.h @@ -21,6 +21,7 @@ #include #include +#include struct grub_relocator32_state { @@ -30,10 +31,8 @@ struct grub_relocator32_state int jumpreg; }; -void *grub_relocator32_alloc (grub_size_t size); -grub_err_t grub_relocator32_boot (void *relocator, grub_uint32_t dest, - struct grub_relocator32_state state); -void *grub_relocator32_realloc (void *relocator, grub_size_t size); -void grub_relocator32_free (void *relocator); +grub_err_t +grub_relocator32_boot (struct grub_relocator *rel, + struct grub_relocator32_state state); #endif /* ! GRUB_RELOCATOR_CPU_HEADER */ diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h index 7a3ef2bd7..f9e76468e 100644 --- a/include/grub/relocator_private.h +++ b/include/grub/relocator_private.h @@ -31,7 +31,7 @@ void grub_cpu_relocator_init (void); grub_err_t grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, - grub_addr_t *relstart); + grub_addr_t *relstart, grub_size_t *relsize); void grub_cpu_relocator_forward (void *rels, void *src, void *tgt, grub_size_t size); void grub_cpu_relocator_backward (void *rels, void *src, void *tgt, diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index d040c80ab..4eaa66890 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -169,7 +169,7 @@ grub_relocator32_boot (struct grub_relocator *rel, grub_memmove (src, &grub_relocator32_start, RELOCATOR_SIZEOF (32)); - err = grub_relocator_prepare_relocs (rel, target, &relst); + err = grub_relocator_prepare_relocs (rel, target, &relst, NULL); if (err) return err; @@ -209,7 +209,7 @@ grub_relocator16_boot (struct grub_relocator *rel, grub_memmove (src, &grub_relocator16_start, RELOCATOR_SIZEOF (16)); - err = grub_relocator_prepare_relocs (rel, target, &relst); + err = grub_relocator_prepare_relocs (rel, target, &relst, NULL); if (err) return err; @@ -248,7 +248,7 @@ grub_relocator64_boot (struct grub_relocator *rel, grub_memmove (src, &grub_relocator64_start, RELOCATOR_SIZEOF (64)); - err = grub_relocator_prepare_relocs (rel, target, &relst); + err = grub_relocator_prepare_relocs (rel, target, &relst, NULL); if (err) return err; diff --git a/lib/mips/relocator.c b/lib/mips/relocator.c index 118ddbd6f..410b68b8b 100644 --- a/lib/mips/relocator.c +++ b/lib/mips/relocator.c @@ -25,26 +25,33 @@ #include #include +#include -/* Remark: doesn't work with source outside of 4G. - Use relocator64 in this case. - */ +/* Do we need mips64? */ -extern grub_uint8_t grub_relocator32_forward_start; -extern grub_uint8_t grub_relocator32_forward_end; -extern grub_uint8_t grub_relocator32_backward_start; -extern grub_uint8_t grub_relocator32_backward_end; +extern grub_uint8_t grub_relocator_forward_start; +extern grub_uint8_t grub_relocator_forward_end; +extern grub_uint8_t grub_relocator_backward_start; +extern grub_uint8_t grub_relocator_backward_end; #define REGW_SIZEOF (2 * sizeof (grub_uint32_t)) #define JUMP_SIZEOF (2 * sizeof (grub_uint32_t)) -#define RELOCATOR_SRC_SIZEOF(x) (&grub_relocator32_##x##_end \ - - &grub_relocator32_##x##_start) +#define RELOCATOR_SRC_SIZEOF(x) (&grub_relocator_##x##_end \ + - &grub_relocator_##x##_start) #define RELOCATOR_SIZEOF(x) (RELOCATOR_SRC_SIZEOF(x) \ - + REGW_SIZEOF * (31 + 3) + JUMP_SIZEOF) -#define RELOCATOR_ALIGN 16 + + REGW_SIZEOF * 3) +grub_size_t grub_relocator_align = sizeof (grub_uint32_t); +grub_size_t grub_relocator_forward_size; +grub_size_t grub_relocator_backward_size; +grub_size_t grub_relocator_jumper_size = JUMP_SIZEOF + REGW_SIZEOF; -#define PREFIX(x) grub_relocator32_ ## x +void +grub_cpu_relocator_init (void) +{ + grub_relocator_forward_size = RELOCATOR_SIZEOF(forward); + grub_relocator_backward_size = RELOCATOR_SIZEOF(backward); +} static void write_reg (int regn, grub_uint32_t val, void **target) @@ -69,44 +76,70 @@ write_jump (int regn, void **target) *target = ((grub_uint32_t *) *target) + 1; } -static void -write_call_relocator_bw (void *ptr0, void *src, grub_uint32_t dest, - grub_size_t size, struct grub_relocator32_state state) +void +grub_cpu_relocator_jumper (void *rels, grub_addr_t addr) +{ + write_reg (1, addr, &rels); + write_jump (1, &rels); +} + +void +grub_cpu_relocator_backward (void *ptr0, void *src, void *dest, + grub_size_t size) { void *ptr = ptr0; - int i; write_reg (8, (grub_uint32_t) src, &ptr); - write_reg (9, dest, &ptr); - write_reg (10, size, &ptr); - grub_memcpy (ptr, &grub_relocator32_backward_start, + write_reg (9, (grub_uint32_t) dest, &ptr); + write_reg (10, (grub_uint32_t) size, &ptr); + grub_memcpy (ptr, &grub_relocator_backward_start, RELOCATOR_SRC_SIZEOF (backward)); - ptr = (grub_uint8_t *) ptr + RELOCATOR_SRC_SIZEOF (backward); - for (i = 1; i < 32; i++) - write_reg (i, state.gpr[i], &ptr); - write_jump (state.jumpreg, &ptr); - grub_arch_sync_caches (ptr0, (grub_uint8_t *) ptr - (grub_uint8_t *) ptr0); - grub_dprintf ("relocator", "Backward relocator: about to jump to %p\n", ptr0); - ((void (*) (void)) ptr0) (); } -static void -write_call_relocator_fw (void *ptr0, void *src, grub_uint32_t dest, - grub_size_t size, struct grub_relocator32_state state) +void +grub_cpu_relocator_forward (void *ptr0, void *src, void *dest, + grub_size_t size) { void *ptr = ptr0; - int i; write_reg (8, (grub_uint32_t) src, &ptr); - write_reg (9, dest, &ptr); - write_reg (10, size, &ptr); - grub_memcpy (ptr, &grub_relocator32_forward_start, + write_reg (9, (grub_uint32_t) dest, &ptr); + write_reg (10, (grub_uint32_t) size, &ptr); + grub_memcpy (ptr, &grub_relocator_forward_start, RELOCATOR_SRC_SIZEOF (forward)); - ptr = (grub_uint8_t *) ptr + RELOCATOR_SRC_SIZEOF (forward); +} + +grub_err_t +grub_relocator32_boot (struct grub_relocator *rel, + struct grub_relocator32_state state) +{ + grub_addr_t target; + void *src, *ptr; + grub_err_t err; + grub_addr_t relst; + grub_size_t relsize; + grub_size_t stateset_size = 31 * REGW_SIZEOF + JUMP_SIZEOF; + unsigned i; + + err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, + (0xffffffff - stateset_size) + + 1, stateset_size, + sizeof (grub_uint32_t), + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + return err; + + ptr = src; for (i = 1; i < 32; i++) write_reg (i, state.gpr[i], &ptr); write_jump (state.jumpreg, &ptr); - grub_arch_sync_caches (ptr0, (grub_uint8_t *) ptr - (grub_uint8_t *) ptr0); - grub_dprintf ("relocator", "Forward relocator: about to jump to %p\n", ptr0); - ((void (*) (void)) ptr0) (); -} -#include "../relocator.c" + err = grub_relocator_prepare_relocs (rel, target, &relst, &relsize); + if (err) + return err; + + grub_arch_sync_caches ((void *) relst, relsize); + + ((void (*) (void)) relst) (); + + /* Not reached. */ + return GRUB_ERR_NONE; +} diff --git a/lib/mips/relocator_asm.S b/lib/mips/relocator_asm.S index ff4fa31e0..8ffab99b7 100644 --- a/lib/mips/relocator_asm.S +++ b/lib/mips/relocator_asm.S @@ -20,7 +20,7 @@ .p2align 4 /* force 16-byte alignment */ -VARIABLE (grub_relocator32_forward_start) +VARIABLE (grub_relocator_forward_start) move $a0, $9 move $a1, $10 @@ -34,9 +34,9 @@ copycont1: #include "../../kern/mips/cache_flush.S" -VARIABLE (grub_relocator32_forward_end) +VARIABLE (grub_relocator_forward_end) -VARIABLE (grub_relocator32_backward_start) +VARIABLE (grub_relocator_backward_start) move $a0, $9 move $a1, $10 @@ -55,4 +55,4 @@ copycont2: #include "../../kern/mips/cache_flush.S" -VARIABLE (grub_relocator32_backward_end) +VARIABLE (grub_relocator_backward_end) diff --git a/lib/relocator.c b/lib/relocator.c index 0644691cd..dad0ec70c 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -20,6 +20,7 @@ #include #include #include +#include /* TODO: use more efficient data structures if necessary. */ /* FIXME: implement unload. */ @@ -605,7 +606,7 @@ grub_relocator_unload (struct grub_relocator *rel) grub_err_t grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, - grub_addr_t *relstart) + grub_addr_t *relstart, grub_size_t *relsize) { grub_addr_t rels; grub_addr_t rels0; @@ -622,6 +623,9 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); rels = rels0; + if (relsize) + *relsize = rel->relocators_size; + grub_dprintf ("relocator", "Relocs allocated\n"); { @@ -698,6 +702,8 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, sorted[j].size); rels += grub_relocator_forward_size; } + if (sorted[j].src == sorted[j].target) + grub_arch_sync_caches ((void *) sorted[j].src, sorted[j].size); } grub_cpu_relocator_jumper ((void *) rels, addr); *relstart = rels0; diff --git a/loader/mips/linux.c b/loader/mips/linux.c index 51060c4fb..09c7f1275 100644 --- a/loader/mips/linux.c +++ b/loader/mips/linux.c @@ -42,6 +42,7 @@ static int loaded; static grub_size_t linux_size; +static struct grub_relocator *relocator; static grub_uint8_t *playground; static grub_addr_t target_addr, entry_addr; static int linux_argc; @@ -60,15 +61,7 @@ grub_linux_boot (void) state.gpr[5] = target_addr + argv_off; state.gpr[6] = target_addr + envp_off; state.jumpreg = 1; - grub_relocator32_boot (playground, target_addr, state); - - return GRUB_ERR_NONE; -} - -static grub_err_t -grub_linux_release_mem (void) -{ - grub_relocator32_free (playground); + grub_relocator32_boot (relocator, state); return GRUB_ERR_NONE; } @@ -76,14 +69,12 @@ grub_linux_release_mem (void) static grub_err_t grub_linux_unload (void) { - grub_err_t err; - - err = grub_linux_release_mem (); + grub_relocator_unload (relocator); grub_dl_unref (my_mod); loaded = 0; - return err; + return GRUB_ERR_NONE; } static grub_err_t @@ -91,6 +82,7 @@ grub_linux_load32 (grub_elf_t elf, void **extra_mem, grub_size_t extra_size) { Elf32_Addr base; int extraoff; + grub_err_t err; /* Linux's entry point incorrectly contains a virtual address. */ entry_addr = elf->ehdr.ehdr32.e_entry & ~ELF32_LOADMASK; @@ -105,10 +97,15 @@ grub_linux_load32 (grub_elf_t elf, void **extra_mem, grub_size_t extra_size) extraoff = linux_size; linux_size += extra_size; - playground = grub_relocator32_alloc (linux_size); - if (!playground) + relocator = grub_relocator_new (); + if (!relocator) return grub_errno; + err = grub_relocator_alloc_chunk_addr (relocator, (void **) &playground, + target_addr, linux_size); + if (err) + return err; + *extra_mem = playground + extraoff; /* Now load the segments into the area we claimed. */ @@ -135,6 +132,7 @@ grub_linux_load64 (grub_elf_t elf, void **extra_mem, grub_size_t extra_size) { Elf64_Addr base; int extraoff; + grub_err_t err; /* Linux's entry point incorrectly contains a virtual address. */ entry_addr = elf->ehdr.ehdr64.e_entry & ~ELF64_LOADMASK; @@ -149,10 +147,15 @@ grub_linux_load64 (grub_elf_t elf, void **extra_mem, grub_size_t extra_size) extraoff = linux_size; linux_size += extra_size; - playground = grub_relocator32_alloc (linux_size); - if (!playground) + relocator = grub_relocator_new (); + if (!relocator) return grub_errno; + err = grub_relocator_alloc_chunk_addr (relocator, (void **) &playground, + target_addr, linux_size); + if (err) + return err; + *extra_mem = playground + extraoff; /* Now load the segments into the area we claimed. */ @@ -322,7 +325,9 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), { grub_file_t file = 0; grub_ssize_t size; - grub_size_t overhead; + void *initrd_src; + grub_addr_t initrd_dest; + grub_err_t err; if (argc == 0) return grub_error (GRUB_ERR_BAD_ARGUMENT, "No initrd specified"); @@ -339,19 +344,20 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), size = grub_file_size (file); - overhead = ALIGN_UP (target_addr + linux_size + 0x10000, 0x10000) - - (target_addr + linux_size); + err = grub_relocator_alloc_chunk_align (relocator, &initrd_src, + &initrd_dest, + target_addr + linux_size + 0x10000, + (0xffffffff - size) + 1, + size, 0x10000, + GRUB_RELOCATOR_PREFERENCE_NONE); - playground = grub_relocator32_realloc (playground, - linux_size + overhead + size); - - if (!playground) + if (err) { grub_file_close (file); - return grub_errno; + return err; } - if (grub_file_read (file, playground + linux_size + overhead, size) != size) + if (grub_file_read (file, initrd_src, size) != size) { grub_error (GRUB_ERR_FILE_READ_ERROR, "Couldn't read file"); grub_file_close (file); @@ -361,7 +367,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), grub_snprintf ((char *) playground + rd_addr_arg_off, sizeof ("rd_start=0xXXXXXXXXXXXXXXXX"), "rd_start=0x%llx", - (unsigned long long) target_addr + linux_size + overhead); + (unsigned long long) initrd_dest); ((grub_uint32_t *) (playground + argv_off))[linux_argc] = target_addr + rd_addr_arg_off; linux_argc++; From ddf23b9d81ea8cb0c2c06542caf7efb2d8f6e818 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 23 Jan 2010 14:30:06 +0100 Subject: [PATCH 081/271] relocator unloading support --- lib/relocator.c | 128 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 86 insertions(+), 42 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index dad0ec70c..298c13d06 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -23,7 +23,6 @@ #include /* TODO: use more efficient data structures if necessary. */ -/* FIXME: implement unload. */ /* FIXME: check memory map. */ /* FIXME: try to request memory from firmware. */ @@ -42,6 +41,8 @@ struct grub_relocator_chunk grub_addr_t src; grub_addr_t target; grub_size_t size; + enum {CHUNK_TYPE_IN_REGION, CHUNK_TYPE_REGION_START} type; + grub_addr_t host_start; }; struct grub_relocator * @@ -204,8 +205,8 @@ get_best_header (struct grub_relocator *rel, static int malloc_in_range (struct grub_relocator *rel, grub_addr_t start, grub_addr_t end, grub_addr_t align, - grub_size_t size, grub_addr_t *res, int from_low_priv, - int collisioncheck) + grub_size_t size, struct grub_relocator_chunk *res, + int from_low_priv, int collisioncheck) { grub_mm_region_t rb, rbp; grub_mm_header_t hb = NULL, hbp = NULL; @@ -262,6 +263,11 @@ malloc_in_range (struct grub_relocator *rel, grub_addr_t newreg_start, newreg_raw_start = best_addr + size; grub_addr_t newreg_size, newreg_presize; grub_mm_header_t new_header; + + res->src = best_addr; + res->type = CHUNK_TYPE_REGION_START; + res->host_start = (grub_addr_t) rb - rb->pre_size; + newreg_start = ALIGN_UP (newreg_raw_start, GRUB_MM_ALIGN); newreg_presize = newreg_start - newreg_raw_start; newreg_size = rb->size - (newreg_start - (grub_addr_t) rb); @@ -313,11 +319,13 @@ malloc_in_range (struct grub_relocator *rel, while (h != newreg->first); } } - *res = best_addr; return 1; } { struct grub_mm_header *foll = NULL; + + res->src = best_addr; + res->type = CHUNK_TYPE_IN_REGION; if (ALIGN_UP (best_addr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN <= (grub_addr_t) (hb + hb->size)) @@ -351,7 +359,6 @@ malloc_in_range (struct grub_relocator *rel, if (rb->first == hb) rb->first = (void *) (rb + 1); } - *res = best_addr; return 1; } } @@ -384,7 +391,6 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, grub_addr_t target, grub_size_t size) { struct grub_relocator_chunk *chunk; - grub_addr_t start; grub_addr_t min_addr = 0, max_addr; if (target > ~size) @@ -413,24 +419,24 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, #if defined (__i386__) || defined (__x86_64__) if (target < 0x100000) if (malloc_in_range (rel, rel->highestnonpostaddr, ~(grub_addr_t)0, 1, - size, &start, 0, 1)) + size, chunk, 0, 1)) { - if (rel->postchunks > start) - rel->postchunks = start; + if (rel->postchunks > chunk->src) + rel->postchunks = chunk->src; break; } #endif - if (malloc_in_range (rel, target, max_addr, 1, size, &start, 1, 0)) + if (malloc_in_range (rel, target, max_addr, 1, size, chunk, 1, 0)) break; - if (malloc_in_range (rel, min_addr, target, 1, size, &start, 0, 0)) + if (malloc_in_range (rel, min_addr, target, 1, size, chunk, 0, 0)) break; if (malloc_in_range (rel, rel->highestnonpostaddr, ~(grub_addr_t)0, 1, - size, &start, 0, 1)) + size, chunk, 0, 1)) { - if (rel->postchunks > start) - rel->postchunks = start; + if (rel->postchunks > chunk->src) + rel->postchunks = chunk->src; break; } @@ -441,35 +447,34 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, while (0); grub_dprintf ("relocator", "allocated 0x%llx/0x%llx\n", - (unsigned long long) start, (unsigned long long) target); + (unsigned long long) chunk->src, (unsigned long long) target); if (rel->highestaddr < target + size) rel->highestaddr = target + size; - if (rel->highestaddr < start + size) - rel->highestaddr = start + size; + if (rel->highestaddr < chunk->src + size) + rel->highestaddr = chunk->src + size; - if (start < rel->postchunks) + if (chunk->src < rel->postchunks) { if (rel->highestnonpostaddr < target + size) rel->highestnonpostaddr = target + size; - if (rel->highestnonpostaddr < start + size) - rel->highestnonpostaddr = start + size; + if (rel->highestnonpostaddr < chunk->src + size) + rel->highestnonpostaddr = chunk->src + size; } grub_dprintf ("relocator", "relocators_size=%ld\n", (unsigned long) rel->relocators_size); - if (start < target) + if (chunk->src < target) rel->relocators_size += grub_relocator_backward_size; - if (start > target) + if (chunk->src > target) rel->relocators_size += grub_relocator_forward_size; grub_dprintf ("relocator", "relocators_size=%ld\n", (unsigned long) rel->relocators_size); - chunk->src = start; chunk->target = target; chunk->size = size; chunk->next = rel->chunks; @@ -477,7 +482,7 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, grub_dprintf ("relocator", "cur = %p, next = %p\n", rel->chunks, rel->chunks->next); - *src = (void *) start; + *src = (void *) chunk->src; return GRUB_ERR_NONE; } @@ -490,7 +495,6 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, { grub_addr_t min_addr2 = 0, max_addr2; struct grub_relocator_chunk *chunk; - grub_addr_t start; if (max_addr > ~size) max_addr = ~size; @@ -507,19 +511,19 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, return grub_errno; if (malloc_in_range (rel, min_addr, max_addr, align, - size, &start, + size, chunk, preference != GRUB_RELOCATOR_PREFERENCE_HIGH, 1)) { grub_dprintf ("relocator", "allocated 0x%llx/0x%llx\n", - (unsigned long long) start, (unsigned long long) start); + (unsigned long long) chunk->src, + (unsigned long long) chunk->src); grub_dprintf ("relocator", "chunks = %p\n", rel->chunks); - chunk->src = start; - chunk->target = start; + chunk->target = chunk->src; chunk->size = size; chunk->next = rel->chunks; rel->chunks = chunk; - *src = (void *) start; - *target = start; + *src = (void *) chunk->src; + *target = chunk->target; return GRUB_ERR_NONE; } @@ -531,14 +535,14 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, do { if (malloc_in_range (rel, min_addr2, max_addr2, align, - size, &start, 1, 1)) + size, chunk, 1, 1)) break; if (malloc_in_range (rel, rel->highestnonpostaddr, ~(grub_addr_t)0, 1, - size, &start, 0, 1)) + size, chunk, 0, 1)) { - if (rel->postchunks > start) - rel->postchunks = start; + if (rel->postchunks > chunk->src) + rel->postchunks = chunk->src; break; } @@ -574,18 +578,17 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, break; } - if (start < chunk->target) + if (chunk->src < chunk->target) rel->relocators_size += grub_relocator_backward_size; - if (start > chunk->target) + if (chunk->src > chunk->target) rel->relocators_size += grub_relocator_forward_size; - chunk->src = start; chunk->size = size; chunk->next = rel->chunks; rel->chunks = chunk; grub_dprintf ("relocator", "cur = %p, next = %p\n", rel->chunks, rel->chunks->next); - *src = (void *) start; + *src = (void *) chunk->src; *target = chunk->target; return GRUB_ERR_NONE; } @@ -598,7 +601,47 @@ grub_relocator_unload (struct grub_relocator *rel) return; for (chunk = rel->chunks; chunk; chunk = next) { - grub_fatal ("Relocator unloading isn't implemented yet"); + switch (chunk->type) + { + case CHUNK_TYPE_REGION_START: + { + grub_mm_region_t r1, r2, *rp; + grub_mm_header_t h; + grub_size_t pre_size; + r1 = (grub_mm_region_t) ALIGN_UP (chunk->src + chunk->size, + GRUB_MM_ALIGN); + r2 = (grub_mm_region_t) ALIGN_UP (chunk->host_start, GRUB_MM_ALIGN); + for (rp = &grub_mm_base; *rp && *rp != r2; rp = &((*rp)->next)); + if (!*rp) + grub_fatal ("Anomaly in region alocations detected. " + "Simultaneous relocators?"); + pre_size = ALIGN_UP (chunk->host_start, GRUB_MM_ALIGN) + - chunk->host_start; + r2->first = r1->first; + r2->next = r1->next; + r2->pre_size = pre_size; + r2->size = r1->size + (r2 - r1) * sizeof (*r2); + *rp = r1; + h = (grub_mm_header_t) (r1 + 1); + h->next = h; + h->magic = GRUB_MM_ALLOC_MAGIC; + h->size = (r2 - r1); + grub_free (h + 1); + break; + } + case CHUNK_TYPE_IN_REGION: + { + grub_mm_header_t h = (grub_mm_header_t) ALIGN_DOWN (chunk->src, + GRUB_MM_ALIGN); + h->size = (chunk->src / GRUB_MM_ALIGN) + - ((chunk->src + chunk->size + GRUB_MM_ALIGN - 1) + / GRUB_MM_ALIGN); + h->next = h; + h->magic = GRUB_MM_ALLOC_MAGIC; + grub_free (h + 1); + break; + } + } next = chunk->next; grub_free (chunk); } @@ -613,15 +656,16 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, struct grub_relocator_chunk *sorted; grub_size_t nchunks = 0; unsigned j; + struct grub_relocator_chunk movers_chunk; grub_dprintf ("relocator", "Preparing relocs (size=%ld)\n", (unsigned long) rel->relocators_size); if (!malloc_in_range (rel, 0, ~(grub_addr_t)0 - rel->relocators_size + 1, grub_relocator_align, - rel->relocators_size, &rels0, 1, 1)) + rel->relocators_size, &movers_chunk, 1, 1)) return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); - rels = rels0; + rels = rels0 = movers_chunk.src; if (relsize) *relsize = rel->relocators_size; From 473fc1a0623169dba7025ad5dbeccab4d02d28ac Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 5 Feb 2010 21:02:24 +0100 Subject: [PATCH 082/271] Make mips/relocator_asm.S more readable --- lib/mips/relocator_asm.S | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/mips/relocator_asm.S b/lib/mips/relocator_asm.S index 8ffab99b7..3408b59e1 100644 --- a/lib/mips/relocator_asm.S +++ b/lib/mips/relocator_asm.S @@ -27,9 +27,9 @@ VARIABLE (grub_relocator_forward_start) copycont1: lb $11,0($8) sb $11,0($9) - addiu $8, $8, 0x1 - addiu $9, $9, 0x1 - addiu $10, $10, 0xffff + addiu $8, $8, 1 + addiu $9, $9, 1 + addiu $10, $10, -1 bne $10, $0, copycont1 #include "../../kern/mips/cache_flush.S" @@ -43,14 +43,14 @@ VARIABLE (grub_relocator_backward_start) addu $9, $9, $10 addu $8, $8, $10 /* Backward movsl is implicitly off-by-one. compensate that. */ - addiu $9, $9, 0xffff - addiu $8, $8, 0xffff + addiu $9, $9, -1 + addiu $8, $8, -1 copycont2: lb $11,0($8) sb $11,0($9) - addiu $8, $8, 0xffff - addiu $9, $9, 0xffff - addiu $10, 0xffff + addiu $8, $8, -1 + addiu $9, $9, -1 + addiu $10, $10, -1 bne $10, $0, copycont2 #include "../../kern/mips/cache_flush.S" From d1de6ed1dc4eb9783e3dfd2f08d0cb0c2d40b82d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 6 Feb 2010 00:33:20 +0100 Subject: [PATCH 083/271] First compiling newreloc for ppc (not yet tested) --- conf/powerpc-ieee1275.rmk | 7 ++ include/grub/powerpc/relocator.h | 37 ++++++++ kern/powerpc/cache.S | 26 +----- kern/powerpc/cache_flush.S | 43 ++++++++++ lib/powerpc/relocator.c | 141 +++++++++++++++++++++++++++++++ lib/powerpc/relocator_asm.S | 60 +++++++++++++ 6 files changed, 290 insertions(+), 24 deletions(-) create mode 100644 include/grub/powerpc/relocator.h create mode 100644 kern/powerpc/cache_flush.S create mode 100644 lib/powerpc/relocator.c create mode 100644 lib/powerpc/relocator_asm.S diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk index 2a3334a4f..91f705bb4 100644 --- a/conf/powerpc-ieee1275.rmk +++ b/conf/powerpc-ieee1275.rmk @@ -100,4 +100,11 @@ lsmmap_mod_SOURCES = commands/lsmmap.c lsmmap_mod_CFLAGS = $(COMMON_CFLAGS) lsmmap_mod_LDFLAGS = $(COMMON_LDFLAGS) +# For relocator.mod. +pkglib_MODULES += relocator.mod +relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/relocator.c lib/$(target_cpu)/relocator_asm.S +relocator_mod_CFLAGS = $(COMMON_CFLAGS) +relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) +relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) + include $(srcdir)/conf/common.mk diff --git a/include/grub/powerpc/relocator.h b/include/grub/powerpc/relocator.h new file mode 100644 index 000000000..c2780bbca --- /dev/null +++ b/include/grub/powerpc/relocator.h @@ -0,0 +1,37 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 . + */ + +#ifndef GRUB_RELOCATOR_CPU_HEADER +#define GRUB_RELOCATOR_CPU_HEADER 1 + +#include +#include +#include + +#define GRUB_PPC_JUMP_REGISTER 31 + +struct grub_relocator32_state +{ + grub_uint32_t gpr[32]; +}; + +grub_err_t +grub_relocator32_boot (struct grub_relocator *rel, + struct grub_relocator32_state state); + +#endif /* ! GRUB_RELOCATOR_CPU_HEADER */ diff --git a/kern/powerpc/cache.S b/kern/powerpc/cache.S index da982afa0..d85e68d42 100644 --- a/kern/powerpc/cache.S +++ b/kern/powerpc/cache.S @@ -1,7 +1,7 @@ /* cache.S - Flush the processor cache for a specific region. */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2004,2007 Free Software Foundation, Inc. + * Copyright (C) 2004,2007,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 @@ -17,32 +17,10 @@ * along with GRUB. If not, see . */ -#define CACHE_LINE_BYTES 32 - .text .align 2 .globl grub_arch_sync_caches grub_arch_sync_caches: - /* `address' may not be CACHE_LINE_BYTES-aligned. */ - andi. 6, 3, CACHE_LINE_BYTES - 1 /* Find the misalignment. */ - add 4, 4, 6 /* Adjust `size' to compensate. */ - - /* Force the dcache lines to memory. */ - li 5, 0 -1: dcbst 5, 3 - addi 5, 5, CACHE_LINE_BYTES - cmpw 5, 4 - blt 1b - sync /* Force all dcbsts to complete. */ - - /* Invalidate the icache lines. */ - li 5, 0 -1: icbi 5, 3 - addi 5, 5, CACHE_LINE_BYTES - cmpw 5, 4 - blt 1b - sync /* Force all icbis to complete. */ - isync /* Discard partially executed instructions that were - loaded from the invalid icache. */ +#include "cache_flush.S" blr diff --git a/kern/powerpc/cache_flush.S b/kern/powerpc/cache_flush.S new file mode 100644 index 000000000..1410f78b1 --- /dev/null +++ b/kern/powerpc/cache_flush.S @@ -0,0 +1,43 @@ +/* cache.S - Flush the processor cache for a specific region. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2007,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 . + */ + +#undef CACHE_LINE_BYTES +#define CACHE_LINE_BYTES 32 + + /* `address' may not be CACHE_LINE_BYTES-aligned. */ + andi. 6, 3, CACHE_LINE_BYTES - 1 /* Find the misalignment. */ + add 4, 4, 6 /* Adjust `size' to compensate. */ + + /* Force the dcache lines to memory. */ + li 5, 0 +1: dcbst 5, 3 + addi 5, 5, CACHE_LINE_BYTES + cmpw 5, 4 + blt 1b + sync /* Force all dcbsts to complete. */ + + /* Invalidate the icache lines. */ + li 5, 0 +1: icbi 5, 3 + addi 5, 5, CACHE_LINE_BYTES + cmpw 5, 4 + blt 1b + sync /* Force all icbis to complete. */ + isync /* Discard partially executed instructions that were + loaded from the invalid icache. */ diff --git a/lib/powerpc/relocator.c b/lib/powerpc/relocator.c new file mode 100644 index 000000000..9f5fc1c7f --- /dev/null +++ b/lib/powerpc/relocator.c @@ -0,0 +1,141 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +extern grub_uint8_t grub_relocator_forward_start; +extern grub_uint8_t grub_relocator_forward_end; +extern grub_uint8_t grub_relocator_backward_start; +extern grub_uint8_t grub_relocator_backward_end; + +#define REGW_SIZEOF (2 * sizeof (grub_uint32_t)) +#define JUMP_SIZEOF (sizeof (grub_uint32_t)) + +#define RELOCATOR_SRC_SIZEOF(x) (&grub_relocator_##x##_end \ + - &grub_relocator_##x##_start) +#define RELOCATOR_SIZEOF(x) (RELOCATOR_SRC_SIZEOF(x) \ + + REGW_SIZEOF * 3) +grub_size_t grub_relocator_align = sizeof (grub_uint32_t); +grub_size_t grub_relocator_forward_size; +grub_size_t grub_relocator_backward_size; +grub_size_t grub_relocator_jumper_size = JUMP_SIZEOF + REGW_SIZEOF; + +void +grub_cpu_relocator_init (void) +{ + grub_relocator_forward_size = RELOCATOR_SIZEOF(forward); + grub_relocator_backward_size = RELOCATOR_SIZEOF(backward); +} + +static void +write_reg (int regn, grub_uint32_t val, void **target) +{ + /* lis r, val >> 16 */ + *(grub_uint32_t *) *target = + ((0x3c00 | (regn << 5)) << 16) | (val >> 16); + *target = ((grub_uint32_t *) *target) + 1; + /* ori r, r, val & 0xffff. */ + *(grub_uint32_t *) *target = (((0x6000 | regn << 5 | regn) << 16) + | (val & 0xffff)); + *target = ((grub_uint32_t *) *target) + 1; +} + +static void +write_jump (void **target) +{ + /* blr. */ + *(grub_uint32_t *) *target = 0x4e800020; + *target = ((grub_uint32_t *) *target) + 1; +} + +void +grub_cpu_relocator_jumper (void *rels, grub_addr_t addr) +{ + write_reg (GRUB_PPC_JUMP_REGISTER, addr, &rels); + write_jump (&rels); +} + +void +grub_cpu_relocator_backward (void *ptr0, void *src, void *dest, + grub_size_t size) +{ + void *ptr = ptr0; + write_reg (8, (grub_uint32_t) src, &ptr); + write_reg (9, (grub_uint32_t) dest, &ptr); + write_reg (10, (grub_uint32_t) size, &ptr); + grub_memcpy (ptr, &grub_relocator_backward_start, + RELOCATOR_SRC_SIZEOF (backward)); +} + +void +grub_cpu_relocator_forward (void *ptr0, void *src, void *dest, + grub_size_t size) +{ + void *ptr = ptr0; + write_reg (8, (grub_uint32_t) src, &ptr); + write_reg (9, (grub_uint32_t) dest, &ptr); + write_reg (10, (grub_uint32_t) size, &ptr); + grub_memcpy (ptr, &grub_relocator_forward_start, + RELOCATOR_SRC_SIZEOF (forward)); +} + +grub_err_t +grub_relocator32_boot (struct grub_relocator *rel, + struct grub_relocator32_state state) +{ + grub_addr_t target; + void *src, *ptr; + grub_err_t err; + grub_addr_t relst; + grub_size_t relsize; + grub_size_t stateset_size = 32 * REGW_SIZEOF + JUMP_SIZEOF; + unsigned i; + + err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, + (0xffffffff - stateset_size) + + 1, stateset_size, + sizeof (grub_uint32_t), + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + return err; + + ptr = src; + for (i = 0; i < 32; i++) + write_reg (i, state.gpr[i], &ptr); + write_jump (&ptr); + + err = grub_relocator_prepare_relocs (rel, target, &relst, &relsize); + if (err) + return err; + + grub_arch_sync_caches ((void *) relst, relsize); + + ((void (*) (void)) relst) (); + + /* Not reached. */ + return GRUB_ERR_NONE; +} diff --git a/lib/powerpc/relocator_asm.S b/lib/powerpc/relocator_asm.S new file mode 100644 index 000000000..355e9c8b4 --- /dev/null +++ b/lib/powerpc/relocator_asm.S @@ -0,0 +1,60 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + + .p2align 4 /* force 16-byte alignment */ + +VARIABLE (grub_relocator_forward_start) + mr 3, 9 + mr 4, 10 + +copycont1: + lbz 11,0(8) + stb 11,0(9) + addi 8, 8, 0x1 + addi 9, 9, 0x1 + addi 10, 10, -1 + cmpwi 10, 0 + bne copycont1 + +#include "../../kern/powerpc/cache_flush.S" + +VARIABLE (grub_relocator_forward_end) + +VARIABLE (grub_relocator_backward_start) + mr 3, 9 + mr 4, 10 + + add 9, 9, 10 + add 8, 8, 10 + /* Backward movsl is implicitly off-by-one. compensate that. */ + addi 9, 9, -1 + addi 8, 8, -1 +copycont2: + lbz 11,0(8) + stb 11,0(9) + addi 8, 8, -1 + addi 9, 9, -1 + addi 10, 10, -1 + cmpwi 10, 0 + bne copycont2 + +#include "../../kern/powerpc/cache_flush.S" + +VARIABLE (grub_relocator_backward_end) From accbdc88a5fa0917d0c061913e76f729903cd216 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 2 Apr 2010 18:43:52 +0200 Subject: [PATCH 084/271] Use scanline for relocator to allow multiple memory sources --- lib/relocator.c | 832 ++++++++++++++++++++++++++++++------------------ 1 file changed, 524 insertions(+), 308 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 298c13d06..38aa67502 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -22,7 +22,6 @@ #include #include -/* TODO: use more efficient data structures if necessary. */ /* FIXME: check memory map. */ /* FIXME: try to request memory from firmware. */ @@ -35,14 +34,22 @@ struct grub_relocator grub_size_t relocators_size; }; +struct grub_relocator_subchunk +{ + enum {CHUNK_TYPE_IN_REGION, CHUNK_TYPE_REGION_START} type; + grub_addr_t host_start; + grub_addr_t start; + grub_size_t size; +}; + struct grub_relocator_chunk { struct grub_relocator_chunk *next; grub_addr_t src; grub_addr_t target; grub_size_t size; - enum {CHUNK_TYPE_IN_REGION, CHUNK_TYPE_REGION_START} type; - grub_addr_t host_start; + struct grub_relocator_subchunk *subchunks; + unsigned nsubchunks; }; struct grub_relocator * @@ -63,143 +70,148 @@ grub_relocator_new (void) return ret; } -static grub_mm_header_t -get_best_header (struct grub_relocator *rel, - grub_addr_t start, grub_addr_t end, grub_addr_t align, - grub_size_t size, - grub_mm_region_t rb, grub_mm_header_t *prev, - grub_addr_t *best_addr, int from_low_priv, int collisioncheck) +struct event { - grub_mm_header_t h, hp; - grub_mm_header_t hb = NULL, hbp = NULL; - - auto void try_addr (grub_addr_t allowable_start, grub_addr_t allowable_end); - void try_addr (grub_addr_t allowable_start, grub_addr_t allowable_end) + enum { + IN_REG_START = 0, + IN_REG_END = 1, + REG_BEG_START = 2, + REG_BEG_END = REG_BEG_START | 1, + COLLISION_START = 4, + COLLISION_END = COLLISION_START | 1 + } type; + grub_addr_t pos; + union { - if (from_low_priv) - { - grub_addr_t addr; - - addr = ALIGN_UP (allowable_start, align); - - if (addr < start) - addr = ALIGN_UP (start, align); - - if (collisioncheck) - while (1) - { - struct grub_relocator_chunk *chunk; - for (chunk = rel->chunks; chunk; chunk = chunk->next) - if ((chunk->target <= addr - && addr < chunk->target + chunk->size) - || (chunk->target < addr + size - && addr + size < chunk->target + chunk->size) - || (addr <= chunk->target && chunk->target < addr + size) - || (addr < chunk->target + chunk->size - && chunk->target + chunk->size < addr + size)) - { - grub_dprintf ("relocator", - "collision 0x%llx+0x%llx, 0x%llx+0x%llx\n", - (unsigned long long) chunk->target, - (unsigned long long) chunk->size, - (unsigned long long) addr, - (unsigned long long) size); - addr = ALIGN_UP (chunk->target + chunk->size, align); - break; - } - if (!chunk) - break; - } - - if (allowable_end <= addr + size) - return; - - if (addr > end) - return; - - if (hb == NULL || *best_addr > addr) - { - hb = h; - hbp = hp; - *best_addr = addr; - grub_dprintf ("relocator", "picked %p/%lx\n", hb, - (unsigned long) addr); - } - } - else - { - grub_addr_t addr; - - addr = ALIGN_DOWN (allowable_end - size, align); - - if (addr > end) - addr = ALIGN_DOWN (end, align); - - if (collisioncheck) - while (1) - { - struct grub_relocator_chunk *chunk; - for (chunk = rel->chunks; chunk; chunk = chunk->next) - if ((chunk->target <= addr - && addr < chunk->target + chunk->size) - || (chunk->target < addr + size - && addr + size < chunk->target + chunk->size) - || (addr <= chunk->target && chunk->target < addr + size) - || (addr < chunk->target + chunk->size - && chunk->target + chunk->size < addr + size)) - { - addr = ALIGN_DOWN (chunk->target - size, align); - break; - } - if (!chunk) - break; - } - - if (allowable_start > addr) - return; - - if (addr < start) - return; - - if (hb == NULL || *best_addr < addr) - { - hb = h; - hbp = hp; - *best_addr = addr; - grub_dprintf ("relocator", "picked %p/%lx\n", hb, - (unsigned long) addr); - } - } - } - - hp = rb->first; - h = hp->next; - grub_dprintf ("relocator", "alive\n"); - do + struct { - grub_addr_t allowable_start, allowable_end; - allowable_start = (grub_addr_t) h; - allowable_end = (grub_addr_t) (h + h->size); + grub_mm_region_t reg; + grub_mm_header_t hancestor; + grub_mm_region_t *regancestor; + grub_mm_header_t head; + }; + }; +}; - if (h->magic != GRUB_MM_FREE_MAGIC) - grub_fatal ("free magic is broken at %p: 0x%x", h, h->magic); +#define DIGITSORT_BITS 8 +#define DIGITSORT_MASK ((1 << DIGITSORT_BITS) - 1) +#define BITS_IN_BYTE 8 - try_addr (allowable_start, allowable_end); +#define max(a, b) (((a) > (b)) ? (a) : (b)) +#define min(a, b) (((a) < (b)) ? (a) : (b)) - if ((grub_addr_t) h == (grub_addr_t) (rb + 1)) - { - grub_dprintf ("relocator", "Trying region start 0x%llx\n", - (unsigned long long) (allowable_start - - sizeof (*rb) - rb->pre_size)); - try_addr (allowable_start - sizeof (*rb) - rb->pre_size, - allowable_end - sizeof (*rb)); - } - hp = h; - h = hp->next; +static inline int +is_start (int type) +{ + return !(type & 1) && (type != COLLISION_START); +} + +static void +allocate_regstart (grub_addr_t addr, grub_size_t size, grub_mm_region_t rb, + grub_mm_region_t *regancestor, grub_mm_header_t hancestor) +{ + grub_addr_t newreg_start, newreg_raw_start = addr + size; + grub_addr_t newreg_size, newreg_presize; + grub_mm_header_t new_header; + grub_mm_header_t hb = (grub_mm_header_t) (rb + 1); + + grub_dprintf ("relocator", "ra = %p, rb = %p\n", regancestor, rb); + + newreg_start = ALIGN_UP (newreg_raw_start, GRUB_MM_ALIGN); + newreg_presize = newreg_start - newreg_raw_start; + newreg_size = rb->size - (newreg_start - (grub_addr_t) rb); + if ((hb->size << GRUB_MM_ALIGN_LOG2) >= newreg_start + - (grub_addr_t) rb) + { + grub_mm_header_t newhnext = hb->next; + grub_size_t newhsize = ((hb->size << GRUB_MM_ALIGN_LOG2) + - (newreg_start + - (grub_addr_t) rb)) >> GRUB_MM_ALIGN_LOG2; + new_header = (void *) (newreg_start + sizeof (*rb)); + if (newhnext == hb) + newhnext = new_header; + new_header->next = newhnext; + new_header->size = newhsize; + new_header->magic = GRUB_MM_FREE_MAGIC; + } + else + { + new_header = hb->next; + if (new_header == hb) + new_header = (void *) (newreg_start + sizeof (*rb)); + } + { + struct grub_mm_header *newregfirst = rb->first; + struct grub_mm_region *newregnext = rb->next; + struct grub_mm_region *newreg = (void *) newreg_start; + hancestor->next = new_header; + if (newregfirst == hb) + newregfirst = new_header; + newreg->first = newregfirst; + newreg->next = newregnext; + newreg->pre_size = newreg_presize; + newreg->size = newreg_size; + *regancestor = newreg; + { + grub_mm_header_t h = newreg->first, hp = NULL; + do + { + if ((void *) h < (void *) (newreg + 1)) + grub_fatal ("Failed to adjust memory region: %p, %p, %p, %p, %p", + newreg, newreg->first, h, hp, hb); + if ((void *) h == (void *) (newreg + 1)) + grub_dprintf ("relocator", + "Free start memory region: %p, %p, %p, %p, %p", + newreg, newreg->first, h, hp, hb); + + hp = h; + h = h->next; + } + while (h != newreg->first); + } + } + +} + +static void +allocate_inreg (grub_addr_t addr, grub_size_t size, + grub_mm_header_t hb, grub_mm_header_t hbp, + grub_mm_region_t rb) +{ + struct grub_mm_header *foll = NULL; + + if (ALIGN_UP (addr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN + <= (grub_addr_t) (hb + hb->size)) + { + foll = (void *) ALIGN_UP (addr + size, GRUB_MM_ALIGN); + foll->magic = GRUB_MM_FREE_MAGIC; + foll->size = hb->size - (foll - hb); + } + + if (addr - (grub_addr_t) hb >= sizeof (*hb)) + { + hb->size = ((addr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2); + if (foll) + { + foll->next = hb; + hbp->next = foll; + if (rb->first == hb) + rb->first = foll; + } + } + else + { + if (foll) + foll->next = hb->next; + else + foll = hb->next; + + hbp->next = foll; + if (rb->first == hb) + rb->first = foll; + if (rb->first == hb) + rb->first = (void *) (rb + 1); } - while (hp && hp != rb->first); - *prev = hbp; - return hb; } static int @@ -208,159 +220,355 @@ malloc_in_range (struct grub_relocator *rel, grub_size_t size, struct grub_relocator_chunk *res, int from_low_priv, int collisioncheck) { - grub_mm_region_t rb, rbp; - grub_mm_header_t hb = NULL, hbp = NULL; - grub_addr_t best_addr; + grub_mm_region_t r, *ra, base_saved; + struct event *events = NULL, *eventt = NULL, *t; + unsigned maxevents = 2; + grub_mm_header_t p, pa; + unsigned *counter; + int nallocs = 0; + unsigned i, j, N = 0; + grub_addr_t target = 0; - again: + grub_dprintf ("relocator", + "trying to allocate in %x-%x aligned %x size %x\n", + start, end, align, size); - rb = NULL, rbp = NULL; - - { - grub_mm_region_t r, rp; - for (rp = NULL, r = grub_mm_base; r; rp = r, r = r->next) - { - grub_dprintf ("relocator", "region %p. %d %d %d %d\n", r, - (grub_addr_t) r + r->size + sizeof (*r) >= start, - (grub_addr_t) r < end, r->size + sizeof (*r) >= size, - (rb == NULL || (from_low_priv ? rb > r : rb < r))); - if ((grub_addr_t) r + r->size + sizeof (*r) >= start - && (grub_addr_t) r < end && r->size + sizeof (*r) >= size - && (rb == NULL || (from_low_priv ? rb > r : rb < r))) - { - rb = r; - rbp = rp; - } - } - } + start = ALIGN_UP (start, align); + end = ALIGN_DOWN (end - size, align) + size; + grub_dprintf ("relocator", + "trying to allocate in %x-%x aligned %x size %x\n", + start, end, align, size); - if (!rb) + if (end < start + size) + return 0; + + /* We have to avoid any allocations when filling scanline events. + Hence 2-stages. + */ + for (r = grub_mm_base; r; r = r->next) { - grub_dprintf ("relocator", "no suitable region found\n"); + p = r->first; + do + { + maxevents += 2; + p = p->next; + } + while (p != r->first); + maxevents += 2; + } + if (collisioncheck && rel) + { + struct grub_relocator_chunk *chunk; + for (chunk = rel->chunks; chunk; chunk = chunk->next) + maxevents += 2; + } + + events = grub_malloc (maxevents * sizeof (events[0])); + eventt = grub_malloc (maxevents * sizeof (events[0])); + counter = grub_malloc ((DIGITSORT_MASK + 2) * sizeof (counter[0])); + if (!events || !eventt || !counter) + { + grub_dprintf ("relocator", "events or counter allocation failed %d\n", + maxevents); + grub_free (events); + grub_free (eventt); + grub_free (counter); return 0; } - grub_dprintf ("relocator", "trying region %p - %p\n", rb, rb + rb->size + 1); - - hb = get_best_header (rel, start, end, align, size, rb, &hbp, &best_addr, - from_low_priv, collisioncheck); - - grub_dprintf ("relocator", "best header %p/%p/%lx\n", hb, hbp, - (unsigned long) best_addr); - - if (!hb) + if (collisioncheck && rel) { - if (from_low_priv) - start = (grub_addr_t) (rb + rb->size + sizeof (*rb)); - else - end = (grub_addr_t) rb - 1; - goto again; + struct grub_relocator_chunk *chunk; + for (chunk = rel->chunks; chunk; chunk = chunk->next) + { + events[N].type = COLLISION_START; + events[N].pos = chunk->target; + N++; + events[N].type = COLLISION_END; + events[N].pos = chunk->target + chunk->size; + N++; + } } - /* Special case: relocating region start. */ - if (best_addr < (grub_addr_t) hb) + /* No malloc from this point. */ + base_saved = grub_mm_base; + grub_mm_base = NULL; + + for (ra = &base_saved, r = *ra; r; ra = &(r->next), r = *ra) { - grub_addr_t newreg_start, newreg_raw_start = best_addr + size; - grub_addr_t newreg_size, newreg_presize; - grub_mm_header_t new_header; - - res->src = best_addr; - res->type = CHUNK_TYPE_REGION_START; - res->host_start = (grub_addr_t) rb - rb->pre_size; - - newreg_start = ALIGN_UP (newreg_raw_start, GRUB_MM_ALIGN); - newreg_presize = newreg_start - newreg_raw_start; - newreg_size = rb->size - (newreg_start - (grub_addr_t) rb); - if ((hb->size << GRUB_MM_ALIGN_LOG2) >= newreg_start - - (grub_addr_t) rb) - { - grub_mm_header_t newhnext = hb->next; - grub_size_t newhsize = ((hb->size << GRUB_MM_ALIGN_LOG2) - - (newreg_start - - (grub_addr_t) rb)) >> GRUB_MM_ALIGN_LOG2; - new_header = (void *) (newreg_start + sizeof (*rb)); - if (newhnext == hb) - newhnext = new_header; - new_header->next = newhnext; - new_header->size = newhsize; - new_header->magic = GRUB_MM_FREE_MAGIC; - } - else - { - new_header = hb->next; - if (new_header == hb) - new_header = (void *) (newreg_start + sizeof (*rb)); - } - { - struct grub_mm_header *newregfirst = rb->first; - struct grub_mm_region *newregnext = rb->next; - struct grub_mm_region *newreg = (void *) newreg_start; - hbp->next = new_header; - if (newregfirst == hb) - newregfirst = new_header; - newreg->first = newregfirst; - newreg->next = newregnext; - newreg->pre_size = newreg_presize; - newreg->size = newreg_size; - if (rbp) - rbp->next = newreg; - else - grub_mm_base = newreg; - { - grub_mm_header_t h = newreg->first, hp = NULL; - do + int pre_added = 0; + pa = r->first; + p = pa->next; + do + { + if (p == (grub_mm_header_t) (r + 1)) { - if ((void *) h < (void *) (newreg + 1)) - grub_fatal ("Failed to adjust memory region: %p, %p, %p, %p, %p", - newreg, newreg->first, h, hp, hb); - hp = h; - h = h->next; + pre_added = 1; + events[N].type = REG_BEG_START; + events[N].pos = (grub_addr_t) r - r->pre_size; + events[N].reg = r; + events[N].regancestor = ra; + events[N].head = p; + events[N].hancestor = pa; + N++; + events[N].type = REG_BEG_END; + events[N].pos = (grub_addr_t) (p + p->size) - sizeof (*r); + N++; } - while (h != newreg->first); + else + { + events[N].type = IN_REG_START; + events[N].pos = (grub_addr_t) p; + events[N].head = p; + events[N].hancestor = pa; + events[N].reg = r; + N++; + events[N].type = IN_REG_END; + events[N].pos = (grub_addr_t) (p + p->size); + N++; + } + pa = p; + p = pa->next; + } + while (pa != r->first); + /* FIXME */ + if (0)//if (!pre_added) + { + events[N].type = REG_BEG_START; + events[N].pos = (grub_addr_t) r - r->pre_size; + events[N].reg = r; + N++; + events[N].type = REG_BEG_END; + events[N].pos = (grub_addr_t) r; + N++; } - } - return 1; } + + /* Put ending events after starting events. */ { - struct grub_mm_header *foll = NULL; - - res->src = best_addr; - res->type = CHUNK_TYPE_IN_REGION; - - if (ALIGN_UP (best_addr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN - <= (grub_addr_t) (hb + hb->size)) - { - foll = (void *) ALIGN_UP (best_addr + size, GRUB_MM_ALIGN); - foll->magic = GRUB_MM_FREE_MAGIC; - foll->size = hb->size - (foll - hb); - } - - if (best_addr - (grub_addr_t) hb >= sizeof (*hb)) - { - hb->size = ((best_addr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2); - if (foll) - { - foll->next = hb; - hbp->next = foll; - if (rb->first == hb) - rb->first = foll; - } - } - else - { - if (foll) - foll->next = hb->next; - else - foll = hb->next; - - hbp->next = foll; - if (rb->first == hb) - rb->first = foll; - if (rb->first == hb) - rb->first = (void *) (rb + 1); - } - return 1; + int st = 0, e = N / 2; + for (j = 0; j < N; j++) + if (is_start (events[j].type) || events[j].type == COLLISION_START) + eventt[st++] = events[j]; + else + eventt[e++] = events[j]; + t = eventt; + eventt = events; + events = t; } + for (i = 0; i < (BITS_IN_BYTE * sizeof (grub_addr_t) / DIGITSORT_BITS); + i++) + { + memset (counter, 0, (1 + (1 << DIGITSORT_BITS)) * sizeof (counter[0])); + for (j = 0; j < N; j++) + counter[((events[j].pos >> (DIGITSORT_BITS * i)) + & DIGITSORT_MASK) + 1]++; + for (j = 0; j <= DIGITSORT_MASK; j++) + counter[j+1] += counter[j]; + for (j = 0; j < N; j++) + eventt[counter[((events[j].pos >> (DIGITSORT_BITS * i)) + & DIGITSORT_MASK)]++] = events[j]; + t = eventt; + eventt = events; + events = t; + } + + grub_dprintf ("relocator", "scanline events:\n"); + for (j = 0; j < N; j++) + grub_dprintf ("relocator", "event %x, type %d\n", events[j].pos, + events[j].type); + + /* Now events are nicely sorted. */ + if (from_low_priv) + { + int nstarted = 0, ncollisions = 0; + grub_addr_t starta = 0; + int numstarted; + for (j = 0; j < N; j++) + { + switch (events[j].type) + { + case COLLISION_END: + ncollisions--; + case IN_REG_START: + case REG_BEG_START: + if ((events[j].type == COLLISION_END ? nstarted != 0 + : nstarted == 0) + && ncollisions == 0) + { + starta = ALIGN_UP (events[j].pos, align); + numstarted = j; + } + if (events[j].type != COLLISION_END) + nstarted++; + break; + + case IN_REG_END: + case REG_BEG_END: + nstarted--; + case COLLISION_START: + if (((events[j].type == COLLISION_START) + ? nstarted != 0 : nstarted == 0) + && ncollisions == 0) + { + target = starta; + if (target < start) + target = start; + grub_dprintf ("relocator", "%x, %x, %x\n", target, start, + events[j].pos); + if (target + size <= end && target + size <= events[j].pos) + /* Found an usable address. */ + goto found; + } + if (events[j].type == COLLISION_START) + ncollisions++; + break; + } + } + } + else + { + int nstarted = 0, ncollisions = 0; + grub_addr_t enda = 0; + int numend; + for (j = N - 1; j != (unsigned) -1; j--) + { + switch (events[j].type) + { + case COLLISION_START: + ncollisions--; + case IN_REG_END: + case REG_BEG_END: + if ((events[j].type == COLLISION_END ? nstarted != 0 + : nstarted == 0) + && ncollisions == 0) + { + enda = ALIGN_DOWN (events[j].pos - size, align) + size; + numend = j; + } + nstarted++; + break; + + case IN_REG_START: + case REG_BEG_START: + nstarted--; + case COLLISION_END: + if ((events[j].type == COLLISION_START ? nstarted != 0 + : nstarted == 0) + && ncollisions == 0) + { + target = enda - size; + if (target > end - size) + target = end - size; + grub_dprintf ("relocator", "%x, %x, %x\n", target, start, + events[j].pos); + if (target >= start && target >= events[j].pos) + goto found; + } + if (events[j].type == COLLISION_START) + ncollisions++; + break; + } + } + } + + grub_mm_base = base_saved; + grub_free (events); + grub_free (eventt); + grub_free (counter); + return 0; + + found: + { + int last_start = 0; + for (j = 0; j < N; j++) + { + if (j != 0 && events[j - 1].pos != events[j].pos) + { + grub_addr_t alloc_start, alloc_end; + alloc_start = max (events[j - 1].pos, target); + alloc_end = min (events[j].pos, target + size); + if (alloc_end > alloc_start) + { + grub_dprintf ("relocator", "%d\n", last_start); + + if (events[last_start].type == REG_BEG_START + || events[last_start].type == IN_REG_START) + { + if (events[last_start].type == REG_BEG_START && + (grub_addr_t) (events[last_start].reg + 1) > target) + allocate_regstart (alloc_start, alloc_end - alloc_start, + events[last_start].reg, + events[last_start].regancestor, + events[last_start].hancestor); + else + allocate_inreg (alloc_start, alloc_end - alloc_start, + events[last_start].head, + events[last_start].hancestor, + events[last_start].reg); + } + nallocs++; + } + } + if (is_start (events[j].type)) + last_start = j; + } + } + + grub_memset ((void *) target, 0, size); + grub_dprintf ("relocator", "baseptr = %p\n", &base_saved); + for (r = base_saved; r; r = r->next) + { + p = r->first; + do + { + if (!p) + grub_fatal ("null in the ring %p %p\n", r, p); + p = p->next; + } + while (p != r->first); + } + + /* Malloc is available again. */ + grub_mm_base = base_saved; + + /* FIXME: react on out of memory. */ + res->subchunks = grub_malloc (sizeof (res->subchunks[0]) * nallocs); + res->nsubchunks = nallocs; + + { + int last_start = 0; + int cural = 0; + for (j = 0; j < N; j++) + { + if (j != 0 && events[j - 1].pos != events[j].pos) + { + grub_addr_t alloc_start, alloc_end; + alloc_start = max (events[j - 1].pos, target); + alloc_end = min (events[j].pos, target + size); + if (alloc_end > alloc_start) + { + res->subchunks[cural].start = alloc_start; + res->subchunks[cural].size = alloc_end - alloc_start; + if (res->subchunks[last_start].type == IN_REG_START) + res->subchunks[cural].type = CHUNK_TYPE_IN_REGION; + else if (res->subchunks[last_start].type == REG_BEG_START) + { + res->subchunks[cural].type = CHUNK_TYPE_REGION_START; + res->subchunks[cural].host_start + = (grub_addr_t) events[last_start].reg; + } + cural++; + } + } + if (is_start (events[j].type)) + last_start = j; + } + } + res->src = target; + res->size = size; + grub_dprintf ("relocator", "allocated: %x %x\n", target, size); + return 1; } static void @@ -601,48 +809,56 @@ grub_relocator_unload (struct grub_relocator *rel) return; for (chunk = rel->chunks; chunk; chunk = next) { - switch (chunk->type) - { - case CHUNK_TYPE_REGION_START: + unsigned i; + for (i = 0; i < chunk->nsubchunks; i++) + switch (chunk->subchunks[i].type) { - grub_mm_region_t r1, r2, *rp; - grub_mm_header_t h; - grub_size_t pre_size; - r1 = (grub_mm_region_t) ALIGN_UP (chunk->src + chunk->size, - GRUB_MM_ALIGN); - r2 = (grub_mm_region_t) ALIGN_UP (chunk->host_start, GRUB_MM_ALIGN); - for (rp = &grub_mm_base; *rp && *rp != r2; rp = &((*rp)->next)); - if (!*rp) - grub_fatal ("Anomaly in region alocations detected. " - "Simultaneous relocators?"); - pre_size = ALIGN_UP (chunk->host_start, GRUB_MM_ALIGN) - - chunk->host_start; - r2->first = r1->first; - r2->next = r1->next; - r2->pre_size = pre_size; - r2->size = r1->size + (r2 - r1) * sizeof (*r2); - *rp = r1; - h = (grub_mm_header_t) (r1 + 1); - h->next = h; - h->magic = GRUB_MM_ALLOC_MAGIC; - h->size = (r2 - r1); - grub_free (h + 1); - break; + case CHUNK_TYPE_REGION_START: + { + grub_mm_region_t r1, r2, *rp; + grub_mm_header_t h; + grub_size_t pre_size; + r1 = (grub_mm_region_t) ALIGN_UP (chunk->subchunks[i].start + + chunk->subchunks[i].size, + GRUB_MM_ALIGN); + r2 = (grub_mm_region_t) ALIGN_UP (chunk->subchunks[i].host_start, + GRUB_MM_ALIGN); + for (rp = &grub_mm_base; *rp && *rp != r2; rp = &((*rp)->next)); + /* FIXME */ + if (!*rp) + grub_fatal ("Anomaly in region alocations detected. " + "Simultaneous relocators?"); + pre_size = ALIGN_UP (chunk->subchunks[i].host_start, + GRUB_MM_ALIGN) + - chunk->subchunks[i].host_start; + r2->first = r1->first; + r2->next = r1->next; + r2->pre_size = pre_size; + r2->size = r1->size + (r2 - r1) * sizeof (*r2); + *rp = r1; + h = (grub_mm_header_t) (r1 + 1); + h->next = h; + h->magic = GRUB_MM_ALLOC_MAGIC; + h->size = (r2 - r1); + grub_free (h + 1); + break; + } + case CHUNK_TYPE_IN_REGION: + { + grub_mm_header_t h + = (grub_mm_header_t) ALIGN_DOWN (chunk->subchunks[i].start, + GRUB_MM_ALIGN); + h->size = (chunk->subchunks[i].start / GRUB_MM_ALIGN) + - ((chunk->subchunks[i].start + chunk->subchunks[i].size + + GRUB_MM_ALIGN - 1) / GRUB_MM_ALIGN); + h->next = h; + h->magic = GRUB_MM_ALLOC_MAGIC; + grub_free (h + 1); + break; + } } - case CHUNK_TYPE_IN_REGION: - { - grub_mm_header_t h = (grub_mm_header_t) ALIGN_DOWN (chunk->src, - GRUB_MM_ALIGN); - h->size = (chunk->src / GRUB_MM_ALIGN) - - ((chunk->src + chunk->size + GRUB_MM_ALIGN - 1) - / GRUB_MM_ALIGN); - h->next = h; - h->magic = GRUB_MM_ALLOC_MAGIC; - grub_free (h + 1); - break; - } - } next = chunk->next; + grub_free (chunk->subchunks); grub_free (chunk); } } From 3a5768645c0594efc8fdd41a07661854e8709ccd Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 3 Apr 2010 11:53:29 +0200 Subject: [PATCH 085/271] First version of allocation from firmware --- conf/i386.rmk | 7 + include/grub/relocator_private.h | 46 ++++ lib/i386/relocator.c | 1 + lib/ieee1275/relocator.c | 83 ++++++ lib/relocator.c | 450 +++++++++++++++++++++---------- 5 files changed, 440 insertions(+), 147 deletions(-) create mode 100644 lib/ieee1275/relocator.c diff --git a/conf/i386.rmk b/conf/i386.rmk index 87514cb1f..868a767b1 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -16,9 +16,16 @@ vga_text_mod_CFLAGS = $(COMMON_CFLAGS) vga_text_mod_LDFLAGS = $(COMMON_LDFLAGS) pkglib_MODULES += relocator.mod +ifeq ($(platform), ieee1275) +relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ + lib/i386/relocator64.S lib/i386/relocator16.S \ + lib/$(target_cpu)/relocator_asm.S lib/i386/relocator.c \ + lib/ieee1275/relocator.c +else relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ lib/i386/relocator64.S lib/i386/relocator16.S \ lib/$(target_cpu)/relocator_asm.S lib/i386/relocator.c +endif relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h index f9e76468e..c526b0b0c 100644 --- a/include/grub/relocator_private.h +++ b/include/grub/relocator_private.h @@ -21,6 +21,7 @@ #include #include +#include extern grub_size_t grub_relocator_align; extern grub_size_t grub_relocator_forward_size; @@ -38,4 +39,49 @@ void grub_cpu_relocator_backward (void *rels, void *src, void *tgt, grub_size_t size); void grub_cpu_relocator_jumper (void *rels, grub_addr_t addr); +#ifdef GRUB_MACHINE_IEEE1275 +#define GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS 1 +#else +#define GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS 0 +#endif + +struct grub_relocator_mmap_event +{ + enum { + IN_REG_START = 0, + IN_REG_END = 1, + REG_BEG_START = 2, + REG_BEG_END = REG_BEG_START | 1, +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + REG_FIRMWARE_START = 4, + REG_FIRMWARE_END = REG_FIRMWARE_START | 1, + /* To track the regions already in heap. */ + FIRMWARE_BLOCK_START = 6, + FIRMWARE_BLOCK_END = FIRMWARE_BLOCK_START | 1, +#endif + COLLISION_START = 8, + COLLISION_END = COLLISION_START | 1 + } type; + grub_addr_t pos; + union + { + struct + { + grub_mm_region_t reg; + grub_mm_header_t hancestor; + grub_mm_region_t *regancestor; + grub_mm_header_t head; + }; + }; +}; + +/* Return 0 on failure, 1 on success. The failure here + can be very time-expensive, so please make sure fill events is accurate. */ +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS +int grub_relocator_firmware_alloc_region (grub_addr_t start, grub_size_t size); +unsigned grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events); +unsigned grub_relocator_firmware_get_max_events (void); +void grub_relocator_firmware_free_region (grub_addr_t start, grub_size_t size); +#endif + #endif diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 4eaa66890..a4038d75f 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -253,6 +253,7 @@ grub_relocator64_boot (struct grub_relocator *rel, return err; asm volatile ("cli"); + grub_printf ("%x\n", relst); ((void (*) (void)) relst) (); /* Not reached. */ diff --git a/lib/ieee1275/relocator.c b/lib/ieee1275/relocator.c new file mode 100644 index 000000000..bf7f4a821 --- /dev/null +++ b/lib/ieee1275/relocator.c @@ -0,0 +1,83 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +unsigned +grub_relocator_firmware_get_max_events (void) +{ + int counter = 0; + auto int NESTED_FUNC_ATTR count (grub_uint64_t addr __attribute__ ((unused)), + grub_uint64_t len __attribute__ ((unused)), + grub_uint32_t type __attribute__ ((unused))); + int NESTED_FUNC_ATTR count (grub_uint64_t addr __attribute__ ((unused)), + grub_uint64_t len __attribute__ ((unused)), + grub_uint32_t type __attribute__ ((unused))) + { + counter++; + return 0; + } + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET)) + return 0; + grub_machine_mmap_iterate (count); + return 2 * counter; +} + +unsigned +grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events) +{ + int counter = 0; + auto int NESTED_FUNC_ATTR fill (grub_uint64_t addr, grub_uint64_t len, + grub_uint32_t type); + int NESTED_FUNC_ATTR fill (grub_uint64_t addr, grub_uint64_t len, + grub_uint32_t type) + { + if (type != GRUB_MACHINE_MEMORY_AVAILABLE) + return 0; + + events[counter].type = REG_FIRMWARE_START; + events[counter].pos = addr; + counter++; + events[counter].type = REG_FIRMWARE_END; + events[counter].pos = addr + len; + counter++; + + return 0; + } + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET)) + return 0; + grub_machine_mmap_iterate (fill); + return counter; +} + +int +grub_relocator_firmware_alloc_region (grub_addr_t start, grub_size_t size) +{ + return (grub_claimmap (start, size) >= 0); +} + +void +grub_relocator_firmware_free_region (grub_addr_t start, grub_size_t size) +{ + grub_ieee1275_release (start, size); +} diff --git a/lib/relocator.c b/lib/relocator.c index 38aa67502..bf8fa3718 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -1,6 +1,6 @@ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2009 Free Software Foundation, Inc. + * Copyright (C) 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 @@ -23,7 +23,6 @@ #include /* FIXME: check memory map. */ -/* FIXME: try to request memory from firmware. */ struct grub_relocator { @@ -36,7 +35,11 @@ struct grub_relocator struct grub_relocator_subchunk { - enum {CHUNK_TYPE_IN_REGION, CHUNK_TYPE_REGION_START} type; + enum {CHUNK_TYPE_IN_REGION, CHUNK_TYPE_REGION_START, +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + CHUNK_TYPE_FIRMWARE +#endif + } type; grub_addr_t host_start; grub_addr_t start; grub_size_t size; @@ -52,6 +55,15 @@ struct grub_relocator_chunk unsigned nsubchunks; }; +struct grub_relocator_extra_block +{ + struct grub_relocator_extra_block *next; + grub_addr_t start; + grub_addr_t end; +}; + +struct grub_relocator_extra_block *extra_blocks; + struct grub_relocator * grub_relocator_new (void) { @@ -70,29 +82,6 @@ grub_relocator_new (void) return ret; } -struct event -{ - enum { - IN_REG_START = 0, - IN_REG_END = 1, - REG_BEG_START = 2, - REG_BEG_END = REG_BEG_START | 1, - COLLISION_START = 4, - COLLISION_END = COLLISION_START | 1 - } type; - grub_addr_t pos; - union - { - struct - { - grub_mm_region_t reg; - grub_mm_header_t hancestor; - grub_mm_region_t *regancestor; - grub_mm_header_t head; - }; - }; -}; - #define DIGITSORT_BITS 8 #define DIGITSORT_MASK ((1 << DIGITSORT_BITS) - 1) #define BITS_IN_BYTE 8 @@ -221,7 +210,7 @@ malloc_in_range (struct grub_relocator *rel, int from_low_priv, int collisioncheck) { grub_mm_region_t r, *ra, base_saved; - struct event *events = NULL, *eventt = NULL, *t; + struct grub_relocator_mmap_event *events = NULL, *eventt = NULL, *t; unsigned maxevents = 2; grub_mm_header_t p, pa; unsigned *counter; @@ -254,7 +243,7 @@ malloc_in_range (struct grub_relocator *rel, p = p->next; } while (p != r->first); - maxevents += 2; + maxevents += 4; } if (collisioncheck && rel) { @@ -263,6 +252,16 @@ malloc_in_range (struct grub_relocator *rel, maxevents += 2; } +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + { + struct grub_relocator_extra_block *cur; + for (cur = extra_blocks; cur; cur = cur->next) + maxevents += 2; + } +#endif + + maxevents += grub_relocator_firmware_get_max_events (); + events = grub_malloc (maxevents * sizeof (events[0])); eventt = grub_malloc (maxevents * sizeof (events[0])); counter = grub_malloc ((DIGITSORT_MASK + 2) * sizeof (counter[0])); @@ -290,6 +289,35 @@ malloc_in_range (struct grub_relocator *rel, } } +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + for (r = grub_mm_base; r; r = r->next) + { + grub_dprintf ("relocator", "Blocking at 0x%x-0x%x\n", + (grub_addr_t) r - r->pre_size, + (grub_addr_t) (r + 1) + r->size); + events[N].type = FIRMWARE_BLOCK_START; + events[N].pos = (grub_addr_t) r - r->pre_size; + N++; + events[N].type = FIRMWARE_BLOCK_END; + events[N].pos = (grub_addr_t) (r + 1) + r->size; + N++; + } + { + struct grub_relocator_extra_block *cur; + for (cur = extra_blocks; cur; cur = cur->next) + { + grub_dprintf ("relocator", "Blocking at 0x%x-0x%x\n", + cur->start, cur->end); + events[N].type = FIRMWARE_BLOCK_START; + events[N].pos = cur->start; + N++; + events[N].type = FIRMWARE_BLOCK_END; + events[N].pos = cur->end; + N++; + } + } +#endif + /* No malloc from this point. */ base_saved = grub_mm_base; grub_mm_base = NULL; @@ -344,6 +372,8 @@ malloc_in_range (struct grub_relocator *rel, } } + N += grub_relocator_firmware_fill_events (events + N); + /* Put ending events after starting events. */ { int st = 0, e = N / 2; @@ -373,104 +403,86 @@ malloc_in_range (struct grub_relocator *rel, events = t; } - grub_dprintf ("relocator", "scanline events:\n"); - for (j = 0; j < N; j++) - grub_dprintf ("relocator", "event %x, type %d\n", events[j].pos, - events[j].type); +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + retry: +#endif /* Now events are nicely sorted. */ - if (from_low_priv) - { - int nstarted = 0, ncollisions = 0; - grub_addr_t starta = 0; - int numstarted; - for (j = 0; j < N; j++) - { - switch (events[j].type) - { - case COLLISION_END: - ncollisions--; - case IN_REG_START: - case REG_BEG_START: - if ((events[j].type == COLLISION_END ? nstarted != 0 - : nstarted == 0) - && ncollisions == 0) - { - starta = ALIGN_UP (events[j].pos, align); - numstarted = j; - } - if (events[j].type != COLLISION_END) - nstarted++; - break; + { + int nstarted = 0, ncollisions = 0, nstartedfw = 0, nblockfw = 0; + grub_addr_t starta = 0; + int numstarted; + for (j = from_low_priv ? 0 : N - 1; from_low_priv ? j < N : (j + 1); + from_low_priv ? j++ : j--) + { + int isinsidebefore, isinsideafter; + isinsidebefore = (!ncollisions + && (nstarted || (nstartedfw && !nblockfw))); + switch (events[j].type) + { +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + case REG_FIRMWARE_START: + nstartedfw++; + break; - case IN_REG_END: - case REG_BEG_END: - nstarted--; - case COLLISION_START: - if (((events[j].type == COLLISION_START) - ? nstarted != 0 : nstarted == 0) - && ncollisions == 0) - { - target = starta; - if (target < start) - target = start; - grub_dprintf ("relocator", "%x, %x, %x\n", target, start, - events[j].pos); - if (target + size <= end && target + size <= events[j].pos) - /* Found an usable address. */ - goto found; - } - if (events[j].type == COLLISION_START) - ncollisions++; - break; - } - } - } - else - { - int nstarted = 0, ncollisions = 0; - grub_addr_t enda = 0; - int numend; - for (j = N - 1; j != (unsigned) -1; j--) - { - switch (events[j].type) - { - case COLLISION_START: - ncollisions--; - case IN_REG_END: - case REG_BEG_END: - if ((events[j].type == COLLISION_END ? nstarted != 0 - : nstarted == 0) - && ncollisions == 0) - { - enda = ALIGN_DOWN (events[j].pos - size, align) + size; - numend = j; - } - nstarted++; - break; + case REG_FIRMWARE_END: + nstartedfw--; + break; - case IN_REG_START: - case REG_BEG_START: - nstarted--; - case COLLISION_END: - if ((events[j].type == COLLISION_START ? nstarted != 0 - : nstarted == 0) - && ncollisions == 0) - { - target = enda - size; - if (target > end - size) - target = end - size; - grub_dprintf ("relocator", "%x, %x, %x\n", target, start, - events[j].pos); - if (target >= start && target >= events[j].pos) - goto found; - } - if (events[j].type == COLLISION_START) - ncollisions++; - break; - } - } - } + case FIRMWARE_BLOCK_START: + nblockfw++; + break; + + case FIRMWARE_BLOCK_END: + nblockfw--; + break; +#endif + + case COLLISION_START: + ncollisions++; + break; + + case COLLISION_END: + ncollisions--; + break; + + case IN_REG_START: + case REG_BEG_START: + nstarted++; + break; + + case IN_REG_END: + case REG_BEG_END: + nstarted--; + break; + } + isinsideafter = (!ncollisions + && (nstarted || (nstartedfw && !nblockfw))); + if (!isinsidebefore && isinsideafter) + { + starta = from_low_priv ? ALIGN_UP (events[j].pos, align) + : ALIGN_DOWN (events[j].pos - size, align) + size; + numstarted = j; + } + if (isinsidebefore && !isinsideafter && from_low_priv) + { + target = starta; + if (target < start) + target = start; + if (target + size <= end && target + size <= events[j].pos) + /* Found an usable address. */ + goto found; + } + if (isinsidebefore && !isinsideafter && !from_low_priv) + { + target = starta - size; + if (target > end - size) + target = end - size; + if (target >= start && target >= events[j].pos) + goto found; + } + } + } grub_mm_base = base_saved; grub_free (events); @@ -480,9 +492,24 @@ malloc_in_range (struct grub_relocator *rel, found: { + int inreg = 0, regbeg = 0, fwin = 0, fwb = 0, ncol = 0; int last_start = 0; for (j = 0; j < N; j++) { + int typepre; + if (ncol) + typepre = -1; + else if (regbeg) + typepre = CHUNK_TYPE_REGION_START; + else if (inreg) + typepre = CHUNK_TYPE_IN_REGION; +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + else if (fwin && !fwb) + typepre = CHUNK_TYPE_FIRMWARE; +#endif + else + typepre = -1; + if (j != 0 && events[j - 1].pos != events[j].pos) { grub_addr_t alloc_start, alloc_end; @@ -490,28 +517,84 @@ malloc_in_range (struct grub_relocator *rel, alloc_end = min (events[j].pos, target + size); if (alloc_end > alloc_start) { - grub_dprintf ("relocator", "%d\n", last_start); - - if (events[last_start].type == REG_BEG_START - || events[last_start].type == IN_REG_START) + switch (typepre) { - if (events[last_start].type == REG_BEG_START && - (grub_addr_t) (events[last_start].reg + 1) > target) - allocate_regstart (alloc_start, alloc_end - alloc_start, - events[last_start].reg, - events[last_start].regancestor, - events[last_start].hancestor); - else - allocate_inreg (alloc_start, alloc_end - alloc_start, - events[last_start].head, - events[last_start].hancestor, - events[last_start].reg); + case CHUNK_TYPE_REGION_START: + allocate_regstart (alloc_start, alloc_end - alloc_start, + events[last_start].reg, + events[last_start].regancestor, + events[last_start].hancestor); + break; + case CHUNK_TYPE_IN_REGION: + allocate_inreg (alloc_start, alloc_end - alloc_start, + events[last_start].head, + events[last_start].hancestor, + events[last_start].reg); + break; +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + case CHUNK_TYPE_FIRMWARE: + /* The failure here can be very expensive. */ + if (!grub_relocator_firmware_alloc_region (alloc_start, + alloc_end - alloc_start)) + { + grub_dprintf ("relocator", + "firmware allocation 0x%x-0x%x failed.\n", + alloc_start, alloc_end); + if (from_low_priv) + start = alloc_end; + else + end = alloc_start; + goto retry; + } + break; +#endif } nallocs++; } } - if (is_start (events[j].type)) - last_start = j; + + switch (events[j].type) + { + case REG_BEG_START: + case IN_REG_START: + if (events[j].type == REG_BEG_START && + (grub_addr_t) (events[j].reg + 1) > target) + regbeg++; + else + inreg++; + last_start = j; + break; + + case REG_BEG_END: + case IN_REG_END: + inreg = regbeg = 0; + break; + +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + case REG_FIRMWARE_START: + fwin++; + break; + + case REG_FIRMWARE_END: + fwin--; + break; + + case FIRMWARE_BLOCK_START: + fwb++; + break; + + case FIRMWARE_BLOCK_END: + fwb--; + break; +#endif + case COLLISION_START: + ncol++; + break; + case COLLISION_END: + ncol--; + break; + } + } } @@ -538,9 +621,24 @@ malloc_in_range (struct grub_relocator *rel, { int last_start = 0; + int inreg = 0, regbeg = 0, fwin = 0, fwb = 0, ncol = 0; int cural = 0; for (j = 0; j < N; j++) { + int typepre; + if (ncol) + typepre = -1; + else if (regbeg) + typepre = CHUNK_TYPE_REGION_START; + else if (inreg) + typepre = CHUNK_TYPE_IN_REGION; +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + else if (fwin && !fwb) + typepre = CHUNK_TYPE_FIRMWARE; +#endif + else + typepre = -1; + if (j != 0 && events[j - 1].pos != events[j].pos) { grub_addr_t alloc_start, alloc_end; @@ -548,23 +646,76 @@ malloc_in_range (struct grub_relocator *rel, alloc_end = min (events[j].pos, target + size); if (alloc_end > alloc_start) { - res->subchunks[cural].start = alloc_start; - res->subchunks[cural].size = alloc_end - alloc_start; - if (res->subchunks[last_start].type == IN_REG_START) - res->subchunks[cural].type = CHUNK_TYPE_IN_REGION; - else if (res->subchunks[last_start].type == REG_BEG_START) + grub_dprintf ("relocator", "subchunk 0x%x-0x%x, %d\n", + alloc_start, alloc_end, typepre); + res->subchunks[cural].type = typepre; + if (typepre == CHUNK_TYPE_REGION_START) { - res->subchunks[cural].type = CHUNK_TYPE_REGION_START; res->subchunks[cural].host_start = (grub_addr_t) events[last_start].reg; } +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + if (typepre == CHUNK_TYPE_REGION_START + || typepre == CHUNK_TYPE_FIRMWARE) + { + /* FIXME: react on out of memory. */ + struct grub_relocator_extra_block *ne; + ne = grub_malloc (sizeof (*ne)); + ne->start = alloc_start; + ne->end = alloc_end; + ne->next = extra_blocks; + extra_blocks = ne; + } +#endif cural++; } } - if (is_start (events[j].type)) - last_start = j; + + switch (events[j].type) + { + case REG_BEG_START: + case IN_REG_START: + if (events[j].type == REG_BEG_START && + (grub_addr_t) (events[j].reg + 1) > target) + regbeg++; + else + inreg++; + last_start = j; + break; + + case REG_BEG_END: + case IN_REG_END: + inreg = regbeg = 0; + break; + +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + case REG_FIRMWARE_START: + fwin++; + break; + + case REG_FIRMWARE_END: + fwin--; + break; + + case FIRMWARE_BLOCK_START: + fwb++; + break; + + case FIRMWARE_BLOCK_END: + fwb--; + break; +#endif + case COLLISION_START: + ncol++; + break; + case COLLISION_END: + ncol--; + break; + } + } } + res->src = target; res->size = size; grub_dprintf ("relocator", "allocated: %x %x\n", target, size); @@ -801,6 +952,7 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, return GRUB_ERR_NONE; } +/* FIXME: remove extra blocks. */ void grub_relocator_unload (struct grub_relocator *rel) { @@ -856,6 +1008,10 @@ grub_relocator_unload (struct grub_relocator *rel) grub_free (h + 1); break; } + case CHUNK_TYPE_FIRMWARE: + grub_relocator_firmware_free_region (chunk->subchunks[i].start, + chunk->subchunks[i].size); + break; } next = chunk->next; grub_free (chunk->subchunks); From 1c7a1bab8c86cbcfd8a3d493f741b1066eb5522f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 3 Apr 2010 19:41:36 +0200 Subject: [PATCH 086/271] Definitively remove allocation from region start if no free header is present at the begining (at most 15 bytes loss) --- lib/relocator.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 11d2cff6b..b3a7801c5 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -359,17 +359,6 @@ malloc_in_range (struct grub_relocator *rel, p = pa->next; } while (pa != r->first); - /* FIXME */ - if (0)//if (!pre_added) - { - events[N].type = REG_BEG_START; - events[N].pos = (grub_addr_t) r - r->pre_size; - events[N].reg = r; - N++; - events[N].type = REG_BEG_END; - events[N].pos = (grub_addr_t) r; - N++; - } } #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS From 88ba41253ea607829cd62dfe6cd37ae20c963dd3 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 3 Apr 2010 22:55:57 +0200 Subject: [PATCH 087/271] Fix x86_64-efi compilation. --- conf/x86-efi.rmk | 14 ++------------ lib/i386/relocator.c | 1 - lib/relocator.c | 16 ++++++++-------- 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/conf/x86-efi.rmk b/conf/x86-efi.rmk index 5cb472168..b97accac6 100644 --- a/conf/x86-efi.rmk +++ b/conf/x86-efi.rmk @@ -16,8 +16,7 @@ grub_install_SOURCES = util/i386/efi/grub-install.in # Modules. pkglib_PROGRAMS = kernel.img -pkglib_MODULES = chain.mod appleldr.mod \ - linux.mod halt.mod \ +pkglib_MODULES = chain.mod appleldr.mod halt.mod \ datetime.mod loadbios.mod \ fixvideo.mod mmap.mod acpi.mod @@ -63,15 +62,6 @@ appleldr_mod_SOURCES = loader/efi/appleloader.c appleldr_mod_CFLAGS = $(COMMON_CFLAGS) appleldr_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For linux.mod. -linux_mod_SOURCES = loader/i386/efi/linux.c -ifeq ($(target_cpu), x86_64) -linux_mod_SOURCES += loader/i386/linux_trampoline.S -endif -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_ASFLAGS = $(COMMON_ASFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For halt.mod. halt_mod_SOURCES = commands/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) @@ -103,7 +93,7 @@ efi_gop_mod_CFLAGS = $(COMMON_CFLAGS) efi_gop_mod_LDFLAGS = $(COMMON_LDFLAGS) pkglib_MODULES += xnu.mod -xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/i386/efi/xnu.c \ +xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c \ loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c xnu_mod_CFLAGS = $(COMMON_CFLAGS) xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index a4038d75f..4eaa66890 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -253,7 +253,6 @@ grub_relocator64_boot (struct grub_relocator *rel, return err; asm volatile ("cli"); - grub_printf ("%x\n", relst); ((void (*) (void)) relst) (); /* Not reached. */ diff --git a/lib/relocator.c b/lib/relocator.c index b3a7801c5..79a98e851 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -219,14 +219,12 @@ malloc_in_range (struct grub_relocator *rel, grub_addr_t target = 0; grub_dprintf ("relocator", - "trying to allocate in %x-%x aligned %x size %x\n", - start, end, align, size); + "trying to allocate in 0x%lx-0x%lx aligned 0x%lx size 0x%lx\n", + (unsigned long) start, (unsigned long) end, + (unsigned long) align, (unsigned long) size); start = ALIGN_UP (start, align); end = ALIGN_DOWN (end - size, align) + size; - grub_dprintf ("relocator", - "trying to allocate in %x-%x aligned %x size %x\n", - start, end, align, size); if (end < start + size) return 0; @@ -643,8 +641,9 @@ malloc_in_range (struct grub_relocator *rel, alloc_end = min (events[j].pos, target + size); if (alloc_end > alloc_start) { - grub_dprintf ("relocator", "subchunk 0x%x-0x%x, %d\n", - alloc_start, alloc_end, typepre); + grub_dprintf ("relocator", "subchunk 0x%lx-0x%lx, %d\n", + (unsigned long) alloc_start, + (unsigned long) alloc_end, typepre); res->subchunks[cural].type = typepre; if (typepre == CHUNK_TYPE_REGION_START) { @@ -715,7 +714,8 @@ malloc_in_range (struct grub_relocator *rel, res->src = target; res->size = size; - grub_dprintf ("relocator", "allocated: %x %x\n", target, size); + grub_dprintf ("relocator", "allocated: 0x%lx+0x%lx\n", (unsigned long) target, + (unsigned long) size); return 1; } From e16c2c65b9e79559eef968b82f384d9fa4afdcfc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 12 Apr 2010 10:32:45 +0200 Subject: [PATCH 088/271] React glacefully to in-middle out-of-memory. Fix few bugs. --- lib/relocator.c | 203 +++++++++++++++++++++++++++++------------------- 1 file changed, 121 insertions(+), 82 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 79a98e851..486b66700 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -22,8 +22,6 @@ #include #include -/* FIXME: check memory map. */ - struct grub_relocator { struct grub_relocator_chunk *chunks; @@ -185,21 +183,81 @@ allocate_inreg (grub_addr_t addr, grub_size_t size, foll->next = hb; hbp->next = foll; if (rb->first == hb) - rb->first = foll; + { + rb->first = foll; + } } } else { if (foll) - foll->next = hb->next; + { + foll->next = hb->next; + } else foll = hb->next; hbp->next = foll; if (rb->first == hb) - rb->first = foll; + { + rb->first = foll; + } if (rb->first == hb) - rb->first = (void *) (rb + 1); + { + rb->first = (void *) (rb + 1); + } + } +} + +/* FIXME: remove extra blocks. */ +static void +free_subchunk (const struct grub_relocator_subchunk *subchu) +{ + switch (subchu->type) + { + case CHUNK_TYPE_REGION_START: + { + grub_mm_region_t r1, r2, *rp; + grub_mm_header_t h; + grub_size_t pre_size; + r1 = (grub_mm_region_t) ALIGN_UP (subchu->start + subchu->size, + GRUB_MM_ALIGN); + r2 = (grub_mm_region_t) ALIGN_UP (subchu->host_start, GRUB_MM_ALIGN); + for (rp = &grub_mm_base; *rp && *rp != r2; rp = &((*rp)->next)); + /* FIXME */ + if (!*rp) + grub_fatal ("Anomaly in region alocations detected. " + "Simultaneous relocators?"); + pre_size = ALIGN_UP (subchu->host_start, GRUB_MM_ALIGN) + - subchu->host_start; + r2->first = r1->first; + r2->next = r1->next; + r2->pre_size = pre_size; + r2->size = r1->size + (r2 - r1) * sizeof (*r2); + *rp = r1; + h = (grub_mm_header_t) (r1 + 1); + h->next = h; + h->magic = GRUB_MM_ALLOC_MAGIC; + h->size = (r2 - r1); + grub_free (h + 1); + break; + } + case CHUNK_TYPE_IN_REGION: + { + grub_mm_header_t h = (grub_mm_header_t) ALIGN_DOWN (subchu->start, + GRUB_MM_ALIGN); + h->size = (subchu->start / GRUB_MM_ALIGN) + - ((subchu->start + subchu->size + GRUB_MM_ALIGN - 1) / GRUB_MM_ALIGN); + h->next = h; + h->magic = GRUB_MM_ALLOC_MAGIC; + grub_free (h + 1); + break; + } +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + case CHUNK_TYPE_FIRMWARE: + grub_relocator_firmware_free_region (subchu->start, subchu->size); + break; +#endif } } @@ -516,12 +574,24 @@ malloc_in_range (struct grub_relocator *rel, events[last_start].reg, events[last_start].regancestor, events[last_start].hancestor); + { + unsigned k; + for (k = 0; k < N; k++) + if (events[k].hancestor == events[last_start].head) + events[k].hancestor = events[last_start].hancestor; + } break; case CHUNK_TYPE_IN_REGION: allocate_inreg (alloc_start, alloc_end - alloc_start, events[last_start].head, events[last_start].hancestor, events[last_start].reg); + { + unsigned k; + for (k = 0; k < N; k++) + if (events[k].hancestor == events[last_start].head) + events[k].hancestor = events[last_start].hancestor; + } break; #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS case CHUNK_TYPE_FIRMWARE: @@ -529,9 +599,6 @@ malloc_in_range (struct grub_relocator *rel, if (!grub_relocator_firmware_alloc_region (alloc_start, alloc_end - alloc_start)) { - grub_dprintf ("relocator", - "firmware allocation 0x%x-0x%x failed.\n", - alloc_start, alloc_end); if (from_low_priv) start = alloc_end; else @@ -559,7 +626,10 @@ malloc_in_range (struct grub_relocator *rel, case REG_BEG_END: case IN_REG_END: - inreg = regbeg = 0; + if (regbeg) + regbeg--; + else + inreg--; break; #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS @@ -598,7 +668,7 @@ malloc_in_range (struct grub_relocator *rel, do { if (!p) - grub_fatal ("null in the ring %p %p\n", r, p); + grub_fatal ("null in the ring %p\n", r); p = p->next; } while (p != r->first); @@ -607,9 +677,6 @@ malloc_in_range (struct grub_relocator *rel, /* Malloc is available again. */ grub_mm_base = base_saved; - /* FIXME: react on out of memory. */ - res->subchunks = grub_malloc (sizeof (res->subchunks[0]) * nallocs); - res->nsubchunks = nallocs; { int last_start = 0; @@ -617,7 +684,13 @@ malloc_in_range (struct grub_relocator *rel, #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS int fwin = 0, fwb = 0; #endif - int cural = 0; + unsigned cural = 0; + int oom = 0; + res->subchunks = grub_malloc (sizeof (res->subchunks[0]) * nallocs); + if (!res->subchunks) + oom = 1; + res->nsubchunks = nallocs; + for (j = 0; j < N; j++) { int typepre; @@ -637,6 +710,10 @@ malloc_in_range (struct grub_relocator *rel, if (j != 0 && events[j - 1].pos != events[j].pos) { grub_addr_t alloc_start, alloc_end; + struct grub_relocator_subchunk tofree; + struct grub_relocator_subchunk *curschu = &tofree; + if (!oom) + curschu = &res->subchunks[cural]; alloc_start = max (events[j - 1].pos, target); alloc_end = min (events[j].pos, target + size); if (alloc_end > alloc_start) @@ -644,26 +721,33 @@ malloc_in_range (struct grub_relocator *rel, grub_dprintf ("relocator", "subchunk 0x%lx-0x%lx, %d\n", (unsigned long) alloc_start, (unsigned long) alloc_end, typepre); - res->subchunks[cural].type = typepre; + curschu->type = typepre; if (typepre == CHUNK_TYPE_REGION_START) - { - res->subchunks[cural].host_start - = (grub_addr_t) events[last_start].reg; - } + curschu->host_start = (grub_addr_t) events[last_start].reg; #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS - if (typepre == CHUNK_TYPE_REGION_START - || typepre == CHUNK_TYPE_FIRMWARE) + if (!oom && (typepre == CHUNK_TYPE_REGION_START + || typepre == CHUNK_TYPE_FIRMWARE)) { - /* FIXME: react on out of memory. */ struct grub_relocator_extra_block *ne; ne = grub_malloc (sizeof (*ne)); - ne->start = alloc_start; - ne->end = alloc_end; - ne->next = extra_blocks; - extra_blocks = ne; + if (!ne) + { + oom = 1; + grub_memcpy (&tofree, curschu, sizeof (tofree)); + } + else + { + ne->start = alloc_start; + ne->end = alloc_end; + ne->next = extra_blocks; + extra_blocks = ne; + } } #endif - cural++; + if (!oom) + cural++; + else + free_subchunk (&tofree); } } @@ -708,7 +792,14 @@ malloc_in_range (struct grub_relocator *rel, ncol--; break; } - + } + if (oom) + { + for (i = 0; i < cural; i++) + free_subchunk (&res->subchunks[i]); + grub_free (res->subchunks); + grub_dprintf ("relocator", "allocation failed with out-of-memory\n"); + return 0; } } @@ -949,7 +1040,6 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, return GRUB_ERR_NONE; } -/* FIXME: remove extra blocks. */ void grub_relocator_unload (struct grub_relocator *rel) { @@ -960,58 +1050,7 @@ grub_relocator_unload (struct grub_relocator *rel) { unsigned i; for (i = 0; i < chunk->nsubchunks; i++) - switch (chunk->subchunks[i].type) - { - case CHUNK_TYPE_REGION_START: - { - grub_mm_region_t r1, r2, *rp; - grub_mm_header_t h; - grub_size_t pre_size; - r1 = (grub_mm_region_t) ALIGN_UP (chunk->subchunks[i].start - + chunk->subchunks[i].size, - GRUB_MM_ALIGN); - r2 = (grub_mm_region_t) ALIGN_UP (chunk->subchunks[i].host_start, - GRUB_MM_ALIGN); - for (rp = &grub_mm_base; *rp && *rp != r2; rp = &((*rp)->next)); - /* FIXME */ - if (!*rp) - grub_fatal ("Anomaly in region alocations detected. " - "Simultaneous relocators?"); - pre_size = ALIGN_UP (chunk->subchunks[i].host_start, - GRUB_MM_ALIGN) - - chunk->subchunks[i].host_start; - r2->first = r1->first; - r2->next = r1->next; - r2->pre_size = pre_size; - r2->size = r1->size + (r2 - r1) * sizeof (*r2); - *rp = r1; - h = (grub_mm_header_t) (r1 + 1); - h->next = h; - h->magic = GRUB_MM_ALLOC_MAGIC; - h->size = (r2 - r1); - grub_free (h + 1); - break; - } - case CHUNK_TYPE_IN_REGION: - { - grub_mm_header_t h - = (grub_mm_header_t) ALIGN_DOWN (chunk->subchunks[i].start, - GRUB_MM_ALIGN); - h->size = (chunk->subchunks[i].start / GRUB_MM_ALIGN) - - ((chunk->subchunks[i].start + chunk->subchunks[i].size - + GRUB_MM_ALIGN - 1) / GRUB_MM_ALIGN); - h->next = h; - h->magic = GRUB_MM_ALLOC_MAGIC; - grub_free (h + 1); - break; - } -#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS - case CHUNK_TYPE_FIRMWARE: - grub_relocator_firmware_free_region (chunk->subchunks[i].start, - chunk->subchunks[i].size); - break; -#endif - } + free_subchunk (&chunk->subchunks[i]); next = chunk->next; grub_free (chunk->subchunks); grub_free (chunk); From 68eb58e95597f99da4819972a1527865800d70f4 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 12 Apr 2010 12:40:09 +0200 Subject: [PATCH 089/271] Add a TODO comment --- lib/relocator.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/relocator.c b/lib/relocator.c index 486b66700..93a88b889 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -574,6 +574,7 @@ malloc_in_range (struct grub_relocator *rel, events[last_start].reg, events[last_start].regancestor, events[last_start].hancestor); + /* TODO: maintain a reverse lookup tree for hancestor. */ { unsigned k; for (k = 0; k < N; k++) From d371a6313d881c0f18415c4d750fcabaee7a6268 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 13 Apr 2010 21:43:17 +0200 Subject: [PATCH 090/271] Fixed unloading payload --- lib/relocator.c | 104 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 20 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 93a88b889..4f37fb435 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -41,6 +41,7 @@ struct grub_relocator_subchunk grub_addr_t host_start; grub_addr_t start; grub_size_t size; + struct grub_relocator_extra_block *extra; }; struct grub_relocator_chunk @@ -56,6 +57,7 @@ struct grub_relocator_chunk struct grub_relocator_extra_block { struct grub_relocator_extra_block *next; + struct grub_relocator_extra_block **prev; grub_addr_t start; grub_addr_t end; }; @@ -209,7 +211,6 @@ allocate_inreg (grub_addr_t addr, grub_size_t size, } } -/* FIXME: remove extra blocks. */ static void free_subchunk (const struct grub_relocator_subchunk *subchu) { @@ -220,34 +221,89 @@ free_subchunk (const struct grub_relocator_subchunk *subchu) grub_mm_region_t r1, r2, *rp; grub_mm_header_t h; grub_size_t pre_size; - r1 = (grub_mm_region_t) ALIGN_UP (subchu->start + subchu->size, + r1 = (grub_mm_region_t) ALIGN_UP (subchu->host_start, GRUB_MM_ALIGN); + r2 = (grub_mm_region_t) ALIGN_UP (subchu->start + subchu->size, GRUB_MM_ALIGN); - r2 = (grub_mm_region_t) ALIGN_UP (subchu->host_start, GRUB_MM_ALIGN); for (rp = &grub_mm_base; *rp && *rp != r2; rp = &((*rp)->next)); - /* FIXME */ - if (!*rp) - grub_fatal ("Anomaly in region alocations detected. " - "Simultaneous relocators?"); pre_size = ALIGN_UP (subchu->host_start, GRUB_MM_ALIGN) - subchu->host_start; - r2->first = r1->first; - r2->next = r1->next; - r2->pre_size = pre_size; - r2->size = r1->size + (r2 - r1) * sizeof (*r2); - *rp = r1; - h = (grub_mm_header_t) (r1 + 1); - h->next = h; - h->magic = GRUB_MM_ALLOC_MAGIC; - h->size = (r2 - r1); - grub_free (h + 1); + + if (*rp) + { + grub_mm_header_t h2, *hp; + r1->first = r2->first; + r1->next = r2->next; + r1->pre_size = pre_size; + r1->size = r2->size + (r2 - r1) * sizeof (*r2); + *rp = r1; + h = (grub_mm_header_t) (r1 + 1); + h->next = r2->first; + h->magic = GRUB_MM_FREE_MAGIC; + h->size = (r2 - r1 - 1); + for (hp = &r2->first, h2 = *hp; h2->next != r2->first; + hp = &(h2->next), h2 = *hp) + if (h2 == (grub_mm_header_t) (r2 + 1)) + break; + if (h2 == (grub_mm_header_t) (r2 + 1)) + { + h->size = h2->size + (h2 - h); + h->next = h2->next; + *hp = h; + if (hp == &r2->first) + { + for (h2 = r2->first; h2->next != r2->first; h2 = h2->next); + h2->next = h; + } + } + else + { + h2->next = h; + } + } + else + { + r1->pre_size = pre_size; + r1->size = (r2 - r1) * sizeof (*r2); + /* Find where to insert this region. + Put a smaller one before bigger ones, + to prevent fragmentation. */ + for (rp = &grub_mm_base; *rp; rp = &((*rp)->next)) + if ((*rp)->size > r1->size) + break; + r1->next = *rp; + *rp = r1->next; + h = (grub_mm_header_t) (r1 + 1); + r1->first = h; + h->next = h; + h->magic = GRUB_MM_FREE_MAGIC; + h->size = (r2 - r1 - 1); + } + for (r2 = grub_mm_base; r2; r2 = r2->next) + if ((grub_addr_t) r2 + r2->size == (grub_addr_t) r1) + break; + if (r2) + { + grub_mm_header_t hl2, hl, g; + g = (grub_mm_header_t) ((grub_addr_t) r2 + r2->size); + g->size = (grub_mm_header_t) r1 - g; + r2->size += r1->size; + for (hl = r2->first; hl->next != r2->first; hl = hl->next); + for (hl2 = r1->first; hl2->next != r1->first; hl2 = hl2->next); + hl2->next = r2->first; + r2->first = r1->first; + hl->next = r2->first; + *rp = (*rp)->next; + grub_free (g + 1); + } break; } case CHUNK_TYPE_IN_REGION: { grub_mm_header_t h = (grub_mm_header_t) ALIGN_DOWN (subchu->start, GRUB_MM_ALIGN); - h->size = (subchu->start / GRUB_MM_ALIGN) - - ((subchu->start + subchu->size + GRUB_MM_ALIGN - 1) / GRUB_MM_ALIGN); + h->size + = ((subchu->start + subchu->size + GRUB_MM_ALIGN - 1) / GRUB_MM_ALIGN) + - (subchu->start / GRUB_MM_ALIGN); h->next = h; h->magic = GRUB_MM_ALLOC_MAGIC; grub_free (h + 1); @@ -256,9 +312,11 @@ free_subchunk (const struct grub_relocator_subchunk *subchu) #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS case CHUNK_TYPE_FIRMWARE: grub_relocator_firmware_free_region (subchu->start, subchu->size); + *curschu->extra->prev = curschu->extra->next; + grub_free (curschu->extra); break; #endif - } + } } static int @@ -723,6 +781,8 @@ malloc_in_range (struct grub_relocator *rel, (unsigned long) alloc_start, (unsigned long) alloc_end, typepre); curschu->type = typepre; + curschu->start = alloc_start; + curschu->size = alloc_end - alloc_start; if (typepre == CHUNK_TYPE_REGION_START) curschu->host_start = (grub_addr_t) events[last_start].reg; #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS @@ -741,7 +801,10 @@ malloc_in_range (struct grub_relocator *rel, ne->start = alloc_start; ne->end = alloc_end; ne->next = extra_blocks; + ne->prev = &extra_blocks; + extra_blocks->prev = &(ne->next); extra_blocks = ne; + curschu->extra = ne; } } #endif @@ -1056,6 +1119,7 @@ grub_relocator_unload (struct grub_relocator *rel) grub_free (chunk->subchunks); grub_free (chunk); } + grub_free (rel); } grub_err_t From b883356cf6cfb07ee36eaf14ea590e2318efc4ae Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 14 Apr 2010 18:46:02 +0200 Subject: [PATCH 091/271] ntldr support. (based on information from nyu but no code from him) --- conf/i386-pc.rmk | 6 ++ loader/i386/pc/ntldr.c | 140 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 loader/i386/pc/ntldr.c diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 1b6221f4d..c138188ed 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -143,6 +143,12 @@ chain_mod_SOURCES = loader/i386/pc/chainloader.c chain_mod_CFLAGS = $(COMMON_CFLAGS) chain_mod_LDFLAGS = $(COMMON_LDFLAGS) +# For ntldr.mod. +pkglib_MODULES += ntldr.mod +ntldr_mod_SOURCES = loader/i386/pc/ntldr.c +ntldr_mod_CFLAGS = $(COMMON_CFLAGS) +ntldr_mod_LDFLAGS = $(COMMON_LDFLAGS) + pkglib_MODULES += linux16.mod linux16_mod_SOURCES = loader/i386/pc/linux.c linux16_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/loader/i386/pc/ntldr.c b/loader/i386/pc/ntldr.c new file mode 100644 index 000000000..9e461ff49 --- /dev/null +++ b/loader/i386/pc/ntldr.c @@ -0,0 +1,140 @@ +/* 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 + +static grub_dl_t my_mod; +static struct grub_relocator *rel; + +#define GRUB_NTLDR_SEGMENT 0x2000 + +static grub_err_t +grub_ntldr_boot (void) +{ + struct grub_relocator16_state state = { + .cs = GRUB_NTLDR_SEGMENT, + .ip = 0 + }; + grub_video_set_mode ("text", 0, 0); + + return grub_relocator16_boot (rel, state); +} + +static grub_err_t +grub_ntldr_unload (void) +{ + grub_relocator_unload (rel); + rel = NULL; + grub_dl_unref (my_mod); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_ntldr (grub_command_t cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + grub_file_t file = 0; + grub_err_t err; + void *bs, *ntldr; + grub_size_t ntldrsize; + grub_device_t dev; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no file specified"); + + grub_dl_ref (my_mod); + + rel = grub_relocator_new (); + if (!rel) + goto fail; + + file = grub_file_open (argv[0]); + if (! file) + goto fail; + + err = grub_relocator_alloc_chunk_addr (rel, &bs, 0x7C00, + GRUB_DISK_SECTOR_SIZE); + if (err) + goto fail; + + dev = grub_device_open (0); + + if (dev && dev->disk) + { + err = grub_disk_read (dev->disk, 0, 0, GRUB_DISK_SECTOR_SIZE, bs); + if (err) + { + grub_device_close (dev); + goto fail; + } + } + + if (dev) + grub_device_close (dev); + + ntldrsize = grub_file_size (file); + err = grub_relocator_alloc_chunk_addr (rel, &ntldr, GRUB_NTLDR_SEGMENT << 4, + ntldrsize); + if (err) + goto fail; + + if (grub_file_read (file, ntldr, ntldrsize) + != (grub_ssize_t) ntldrsize) + goto fail; + + grub_loader_set (grub_ntldr_boot, grub_ntldr_unload, 1); + return GRUB_ERR_NONE; + + fail: + + if (file) + grub_file_close (file); + + grub_ntldr_unload (); + + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(ntldr) +{ + cmd = grub_register_command ("ntldr", grub_cmd_ntldr, + 0, N_("Load NTLDR or BootMGR.")); + my_mod = mod; +} + +GRUB_MOD_FINI(ntldr) +{ + grub_unregister_command (cmd); +} From dae84898b268bf733e8a6c2cc31be814ee0e1694 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 15 Apr 2010 02:11:26 +0200 Subject: [PATCH 092/271] Pass %dl to ntldr. Clear other registers. --- include/grub/i386/relocator.h | 1 + lib/i386/relocator.c | 3 +++ lib/i386/relocator16.S | 5 +++++ loader/i386/pc/ntldr.c | 11 ++++++++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/grub/i386/relocator.h b/include/grub/i386/relocator.h index f32413a1b..891235f9b 100644 --- a/include/grub/i386/relocator.h +++ b/include/grub/i386/relocator.h @@ -44,6 +44,7 @@ struct grub_relocator16_state grub_uint16_t ss; grub_uint16_t sp; grub_uint16_t ip; + grub_uint32_t edx; }; struct grub_relocator64_state diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 4eaa66890..5985fac7a 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -49,6 +49,7 @@ extern grub_uint16_t grub_relocator16_fs; extern grub_uint16_t grub_relocator16_gs; extern grub_uint16_t grub_relocator16_ss; extern grub_uint16_t grub_relocator16_sp; +extern grub_uint32_t grub_relocator16_edx; extern grub_uint8_t grub_relocator32_start; extern grub_uint8_t grub_relocator32_end; @@ -207,6 +208,8 @@ grub_relocator16_boot (struct grub_relocator *rel, grub_relocator16_ss = state.ss; grub_relocator16_sp = state.sp; + grub_relocator16_edx = state.edx; + grub_memmove (src, &grub_relocator16_start, RELOCATOR_SIZEOF (16)); err = grub_relocator_prepare_relocs (rel, target, &relst, NULL); diff --git a/lib/i386/relocator16.S b/lib/i386/relocator16.S index 7d65e4dbe..510d3a1ed 100644 --- a/lib/i386/relocator16.S +++ b/lib/i386/relocator16.S @@ -151,6 +151,11 @@ VARIABLE(grub_relocator16_ss) VARIABLE(grub_relocator16_sp) .word 0 movw %ax, %ss + + /* movw imm32, %edx. */ + .byte 0x66, 0xba +VARIABLE(grub_relocator16_edx) + .long 0 /* Cleared direction flag is of no problem with any current payload and makes this implementation easier. */ diff --git a/loader/i386/pc/ntldr.c b/loader/i386/pc/ntldr.c index 9e461ff49..1368694fb 100644 --- a/loader/i386/pc/ntldr.c +++ b/loader/i386/pc/ntldr.c @@ -35,6 +35,7 @@ static grub_dl_t my_mod; static struct grub_relocator *rel; +static grub_uint32_t edx = 0xffffffff; #define GRUB_NTLDR_SEGMENT 0x2000 @@ -43,7 +44,14 @@ grub_ntldr_boot (void) { struct grub_relocator16_state state = { .cs = GRUB_NTLDR_SEGMENT, - .ip = 0 + .ip = 0, + .ds = 0, + .es = 0, + .fs = 0, + .gs = 0, + .ss = 0, + .sp = 0x7c00, + .edx = edx }; grub_video_set_mode ("text", 0, 0); @@ -87,6 +95,7 @@ grub_cmd_ntldr (grub_command_t cmd __attribute__ ((unused)), if (err) goto fail; + edx = grub_get_root_biosnumber (); dev = grub_device_open (0); if (dev && dev->disk) From 91b58e6b747a4f3a7533090bf1e2e05ade05d038 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 20 Apr 2010 18:08:26 +0200 Subject: [PATCH 093/271] EFI requests support for newreloc --- conf/i386.rmk | 7 ++ include/grub/efi/efi.h | 8 +- include/grub/relocator_private.h | 8 ++ kern/efi/efi.c | 34 ------ kern/efi/mm.c | 74 +++++++++++++ lib/efi/relocator.c | 104 ++++++++++++++++++ lib/relocator.c | 174 ++++++++++++++++++++++++++----- loader/i386/bsd.c | 20 ++-- loader/i386/linux.c | 12 +-- loader/i386/xnu.c | 12 +-- loader/multiboot.c | 5 +- term/efi/console.c | 27 ++++- 12 files changed, 399 insertions(+), 86 deletions(-) create mode 100644 lib/efi/relocator.c diff --git a/conf/i386.rmk b/conf/i386.rmk index e223694df..e04d73d61 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -22,10 +22,17 @@ relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ lib/$(target_cpu)/relocator_asm.S lib/i386/relocator.c \ lib/ieee1275/relocator.c else +ifeq ($(platform), efi) +relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ + lib/i386/relocator64.S lib/i386/relocator16.S \ + lib/$(target_cpu)/relocator_asm.S lib/i386/relocator.c \ + lib/efi/relocator.c +else relocator_mod_SOURCES = lib/relocator.c lib/i386/relocator32.S \ lib/i386/relocator64.S lib/i386/relocator16.S \ lib/$(target_cpu)/relocator_asm.S lib/i386/relocator.c endif +endif relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h index 5852a476f..a56b3f56b 100644 --- a/include/grub/efi/efi.h +++ b/include/grub/efi/efi.h @@ -53,8 +53,10 @@ void EXPORT_FUNC(grub_efi_print_device_path) (grub_efi_device_path_t *dp); char *EXPORT_FUNC(grub_efi_get_filename) (grub_efi_device_path_t *dp); grub_efi_device_path_t * EXPORT_FUNC(grub_efi_get_device_path) (grub_efi_handle_t handle); -int EXPORT_FUNC(grub_efi_exit_boot_services) (grub_efi_uintn_t map_key); -int EXPORT_FUNC (grub_efi_finish_boot_services) (void); +grub_err_t EXPORT_FUNC (grub_efi_finish_boot_services) (grub_size_t *outbuf_size, void *outbuf, + grub_efi_uintn_t *map_key, + grub_efi_uintn_t *efi_desc_size, + grub_efi_uint32_t *efi_desc_version); grub_err_t EXPORT_FUNC (grub_efi_set_virtual_address_map) (grub_efi_uintn_t memory_map_size, grub_efi_uintn_t descriptor_size, grub_efi_uint32_t descriptor_version, @@ -70,4 +72,6 @@ void grub_efi_set_prefix (void); extern grub_efi_system_table_t *EXPORT_VAR(grub_efi_system_table); extern grub_efi_handle_t EXPORT_VAR(grub_efi_image_handle); +extern int EXPORT_VAR(grub_efi_is_finished); + #endif /* ! GRUB_EFI_EFI_HEADER */ diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h index c526b0b0c..8398defbd 100644 --- a/include/grub/relocator_private.h +++ b/include/grub/relocator_private.h @@ -41,10 +41,18 @@ void grub_cpu_relocator_jumper (void *rels, grub_addr_t addr); #ifdef GRUB_MACHINE_IEEE1275 #define GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS 1 +#define GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT_LOG 0 +#elif defined (GRUB_MACHINE_EFI) +#define GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS 1 +#define GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT_LOG 12 #else #define GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS 0 #endif +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS +#define GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT (1 << GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT_LOG) +#endif + struct grub_relocator_mmap_event { enum { diff --git a/kern/efi/efi.c b/kern/efi/efi.c index d8b225535..4916a0d18 100644 --- a/kern/efi/efi.c +++ b/kern/efi/efi.c @@ -181,17 +181,6 @@ grub_halt (void) GRUB_EFI_RESET_SHUTDOWN, GRUB_EFI_SUCCESS, 0, NULL); } -int -grub_efi_exit_boot_services (grub_efi_uintn_t map_key) -{ - grub_efi_boot_services_t *b; - grub_efi_status_t status; - - b = grub_efi_system_table->boot_services; - status = efi_call_2 (b->exit_boot_services, grub_efi_image_handle, map_key); - return status == GRUB_EFI_SUCCESS; -} - grub_err_t grub_efi_set_virtual_address_map (grub_efi_uintn_t memory_map_size, grub_efi_uintn_t descriptor_size, @@ -758,26 +747,3 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) dp = (grub_efi_device_path_t *) ((char *) dp + len); } } - -int -grub_efi_finish_boot_services (void) -{ - grub_efi_uintn_t mmap_size = 0; - grub_efi_uintn_t map_key; - grub_efi_uintn_t desc_size; - grub_efi_uint32_t desc_version; - void *mmap_buf = 0; - - if (grub_efi_get_memory_map (&mmap_size, mmap_buf, &map_key, - &desc_size, &desc_version) < 0) - return 0; - - mmap_buf = grub_malloc (mmap_size); - - if (grub_efi_get_memory_map (&mmap_size, mmap_buf, &map_key, - &desc_size, &desc_version) <= 0) - return 0; - - return grub_efi_exit_boot_services (map_key); -} - diff --git a/kern/efi/mm.c b/kern/efi/mm.c index ceb8fc9ba..4db0e7e92 100644 --- a/kern/efi/mm.c +++ b/kern/efi/mm.c @@ -49,6 +49,12 @@ static struct allocated_page *allocated_pages = 0; #define MIN_HEAP_SIZE 0x100000 #define MAX_HEAP_SIZE (1600 * 0x100000) +static void *finish_mmap_buf = 0; +static grub_efi_uintn_t finish_mmap_size = 0; +static grub_efi_uintn_t finish_key = 0; +static grub_efi_uintn_t finish_desc_size; +static grub_efi_uint32_t finish_desc_version; +int grub_efi_is_finished = 0; /* Allocate pages. Return the pointer to the first of allocated pages. */ void * @@ -140,6 +146,51 @@ grub_efi_free_pages (grub_efi_physical_address_t address, efi_call_2 (b->free_pages, address, pages); } +grub_err_t +grub_efi_finish_boot_services (grub_size_t *outbuf_size, void *outbuf, + grub_efi_uintn_t *map_key, + grub_efi_uintn_t *efi_desc_size, + grub_efi_uint32_t *efi_desc_version) +{ + grub_efi_boot_services_t *b; + grub_efi_status_t status; + + if (grub_efi_get_memory_map (&finish_mmap_size, finish_mmap_buf, &finish_key, + &finish_desc_size, &finish_desc_version) < 0) + return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); + + if (outbuf && *outbuf_size < finish_mmap_size) + return grub_error (GRUB_ERR_IO, "memory map buffer is too small"); + + finish_mmap_buf = grub_malloc (finish_mmap_size); + if (!finish_mmap_buf) + return grub_errno; + + if (grub_efi_get_memory_map (&finish_mmap_size, finish_mmap_buf, &finish_key, + &finish_desc_size, &finish_desc_version) <= 0) + return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); + + b = grub_efi_system_table->boot_services; + status = efi_call_2 (b->exit_boot_services, grub_efi_image_handle, + finish_key); + if (status != GRUB_EFI_SUCCESS) + return grub_error (GRUB_ERR_IO, "couldn't terminate EFI services"); + + grub_efi_is_finished = 1; + if (outbuf_size) + *outbuf_size = finish_mmap_size; + if (outbuf) + grub_memcpy (outbuf, finish_mmap_buf, finish_mmap_size); + if (map_key) + *map_key = finish_key; + if (efi_desc_size) + *efi_desc_size = finish_desc_size; + if (efi_desc_version) + *efi_desc_version = finish_desc_version; + + return GRUB_ERR_NONE; +} + /* Get the memory map as defined in the EFI spec. Return 1 if successful, return 0 if partial, or return -1 if an error occurs. */ int @@ -154,6 +205,29 @@ grub_efi_get_memory_map (grub_efi_uintn_t *memory_map_size, grub_efi_uintn_t key; grub_efi_uint32_t version; + if (grub_efi_is_finished) + { + int ret = 1; + if (*memory_map_size < finish_mmap_size) + { + grub_memcpy (memory_map, finish_mmap_buf, *memory_map_size); + ret = 0; + } + else + { + grub_memcpy (memory_map, finish_mmap_buf, finish_mmap_size); + ret = 1; + } + *memory_map_size = finish_mmap_size; + if (map_key) + *map_key = finish_key; + if (descriptor_size) + *descriptor_size = finish_desc_size; + if (descriptor_version) + *descriptor_version = finish_desc_version; + return ret; + } + /* Allow some parameters to be missing. */ if (! map_key) map_key = &key; diff --git a/lib/efi/relocator.c b/lib/efi/relocator.c new file mode 100644 index 000000000..fc4de834b --- /dev/null +++ b/lib/efi/relocator.c @@ -0,0 +1,104 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ + ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) + +unsigned +grub_relocator_firmware_get_max_events (void) +{ + grub_efi_uintn_t mmapsize = 0, descriptor_size = 0; + grub_efi_uint32_t descriptor_version = 0; + grub_efi_uintn_t key; + grub_efi_get_memory_map (&mmapsize, NULL, &key, &descriptor_size, + &descriptor_version); + /* Since grub_relocator_firmware_fill_events uses malloc + we need some reserve. Hence +10. */ + return 2 * (mmapsize / descriptor_size + 10); +} + +unsigned +grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events) +{ + grub_efi_uintn_t mmapsize = 0, desc_size = 0; + grub_efi_uint32_t descriptor_version = 0; + grub_efi_memory_descriptor_t *descs = NULL; + grub_efi_uintn_t key; + int counter = 0; + grub_efi_memory_descriptor_t *desc; + + grub_efi_get_memory_map (&mmapsize, NULL, &key, &desc_size, + &descriptor_version); + descs = grub_malloc (mmapsize); + if (!descs) + return 0; + + grub_efi_get_memory_map (&mmapsize, descs, &key, &desc_size, + &descriptor_version); + + for (desc = descs; + (char *) desc < ((char *) descs + mmapsize); + desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) + { + if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) + continue; + events[counter].type = REG_FIRMWARE_START; + events[counter].pos = desc->physical_start; + counter++; + events[counter].type = REG_FIRMWARE_END; + events[counter].pos = desc->physical_start + (desc->num_pages << 12); + counter++; + } + + return counter; +} + +int +grub_relocator_firmware_alloc_region (grub_addr_t start, grub_size_t size) +{ + grub_efi_boot_services_t *b; + grub_efi_physical_address_t address = start; + grub_efi_status_t status; + + if (grub_efi_is_finished) + return 1; + + b = grub_efi_system_table->boot_services; + status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_ADDRESS, + GRUB_EFI_LOADER_DATA, size >> 12, &address); + return (status == GRUB_EFI_SUCCESS); +} + +void +grub_relocator_firmware_free_region (grub_addr_t start, grub_size_t size) +{ + grub_efi_boot_services_t *b; + + if (grub_efi_is_finished) + return; + + b = grub_efi_system_table->boot_services; + efi_call_2 (b->free_pages, start, size >> 12); +} diff --git a/lib/relocator.c b/lib/relocator.c index 4f37fb435..de4cca626 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -42,6 +42,7 @@ struct grub_relocator_subchunk grub_addr_t start; grub_size_t size; struct grub_relocator_extra_block *extra; + struct grub_relocator_fw_leftover *pre, *post; }; struct grub_relocator_chunk @@ -62,6 +63,15 @@ struct grub_relocator_extra_block grub_addr_t end; }; +struct grub_relocator_fw_leftover +{ + struct grub_relocator_fw_leftover *next; + struct grub_relocator_fw_leftover **prev; + grub_addr_t quantstart; + grub_uint8_t freebytes[GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT / 8]; +}; + +struct grub_relocator_fw_leftover *leftovers; struct grub_relocator_extra_block *extra_blocks; struct grub_relocator * @@ -159,7 +169,6 @@ allocate_regstart (grub_addr_t addr, grub_size_t size, grub_mm_region_t rb, while (h != newreg->first); } } - } static void @@ -211,6 +220,20 @@ allocate_inreg (grub_addr_t addr, grub_size_t size, } } +static void +check_leftover (struct grub_relocator_fw_leftover *lo) +{ + unsigned i; + for (i = 0; i < sizeof (lo->freebytes); i++) + if (lo->freebytes[i] != 0xff) + return; + grub_relocator_firmware_free_region (lo->quantstart, + GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + *lo->prev = lo->next; + if (lo->next) + lo->next->prev = lo->prev; +} + static void free_subchunk (const struct grub_relocator_subchunk *subchu) { @@ -311,9 +334,34 @@ free_subchunk (const struct grub_relocator_subchunk *subchu) } #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS case CHUNK_TYPE_FIRMWARE: - grub_relocator_firmware_free_region (subchu->start, subchu->size); - *curschu->extra->prev = curschu->extra->next; - grub_free (curschu->extra); + { + grub_addr_t fstart, fend; + fstart = ALIGN_UP (subchu->start, + GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + fend = ALIGN_DOWN (subchu->start + subchu->size, + GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + if (fstart < fend) + grub_relocator_firmware_free_region (fstart, fend - fstart); + if (subchu->pre) + { + int off = subchu->start - fstart + - GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; + grub_memset (subchu->pre->freebytes + off / 8 + 1, + 0xff, sizeof (subchu->pre->freebytes) - off / 8 - 1); + subchu->pre->freebytes[off / 8] |= ~((1 << (off % 8)) - 1); + check_leftover (subchu->pre); + } + if (subchu->post) + { + int off = subchu->start + subchu->size - fend; + grub_memset (subchu->pre->freebytes, + 0xff, sizeof (subchu->pre->freebytes) - off / 8); + subchu->pre->freebytes[off / 8] |= ((1 << (8 - (off % 8))) - 1); + check_leftover (subchu->post); + } + *subchu->extra->prev = subchu->extra->next; + grub_free (subchu->extra); + } break; #endif } @@ -406,7 +454,7 @@ malloc_in_range (struct grub_relocator *rel, #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS for (r = grub_mm_base; r; r = r->next) { - grub_dprintf ("relocator", "Blocking at 0x%x-0x%x\n", + grub_dprintf ("relocator", "Blocking at 0x%lx-0x%lx\n", (grub_addr_t) r - r->pre_size, (grub_addr_t) (r + 1) + r->size); events[N].type = FIRMWARE_BLOCK_START; @@ -420,7 +468,7 @@ malloc_in_range (struct grub_relocator *rel, struct grub_relocator_extra_block *cur; for (cur = extra_blocks; cur; cur = cur->next) { - grub_dprintf ("relocator", "Blocking at 0x%x-0x%x\n", + grub_dprintf ("relocator", "Blocking at 0x%lx-0x%lx\n", cur->start, cur->end); events[N].type = FIRMWARE_BLOCK_START; events[N].pos = cur->start; @@ -432,6 +480,10 @@ malloc_in_range (struct grub_relocator *rel, } #endif +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + N += grub_relocator_firmware_fill_events (events + N); +#endif + /* No malloc from this point. */ base_saved = grub_mm_base; grub_mm_base = NULL; @@ -475,10 +527,6 @@ malloc_in_range (struct grub_relocator *rel, while (pa != r->first); } -#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS - N += grub_relocator_firmware_fill_events (events + N); -#endif - /* Put ending events after starting events. */ { int st = 0, e = N / 2; @@ -654,17 +702,26 @@ malloc_in_range (struct grub_relocator *rel, break; #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS case CHUNK_TYPE_FIRMWARE: - /* The failure here can be very expensive. */ - if (!grub_relocator_firmware_alloc_region (alloc_start, - alloc_end - alloc_start)) - { - if (from_low_priv) - start = alloc_end; - else - end = alloc_start; - goto retry; - } - break; + { + grub_addr_t fstart, fend; + fstart + = ALIGN_DOWN (alloc_start, + GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + fend + = ALIGN_UP (alloc_end, + GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + /* The failure here can be very expensive. */ + if (!grub_relocator_firmware_alloc_region (fstart, + fend - fstart)) + { + if (from_low_priv) + start = fend; + else + end = fstart; + goto retry; + } + break; + } #endif } nallocs++; @@ -736,7 +793,6 @@ malloc_in_range (struct grub_relocator *rel, /* Malloc is available again. */ grub_mm_base = base_saved; - { int last_start = 0; int inreg = 0, regbeg = 0, ncol = 0; @@ -784,8 +840,6 @@ malloc_in_range (struct grub_relocator *rel, curschu->start = alloc_start; curschu->size = alloc_end - alloc_start; if (typepre == CHUNK_TYPE_REGION_START) - curschu->host_start = (grub_addr_t) events[last_start].reg; -#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS if (!oom && (typepre == CHUNK_TYPE_REGION_START || typepre == CHUNK_TYPE_FIRMWARE)) { @@ -807,6 +861,76 @@ malloc_in_range (struct grub_relocator *rel, curschu->extra = ne; } } +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + if (!oom && typepre == CHUNK_TYPE_FIRMWARE) + { + grub_addr_t fstart, fend; + struct grub_relocator_fw_leftover *lo1 = NULL; + struct grub_relocator_fw_leftover *lo2 = NULL; + + fstart + = ALIGN_DOWN (alloc_start, + GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + fend + = ALIGN_UP (alloc_end, + GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + + if (fstart != alloc_start) + lo1 = grub_malloc (sizeof (*lo1)); + if (fend != alloc_end) + lo2 = grub_malloc (sizeof (*lo2)); + if ((!lo1 && fstart != alloc_start) + || (!lo2 && fend != alloc_end)) + { + struct grub_relocator_extra_block *ne; + grub_free (lo1); + grub_free (lo2); + lo1 = NULL; + lo2 = NULL; + oom = 1; + grub_memcpy (&tofree, curschu, sizeof (tofree)); + ne = extra_blocks; + extra_blocks = extra_blocks->next; + grub_free (ne); + } + if (lo1) + { + lo1->quantstart = fstart; + grub_memset (lo1->freebytes, 0xff, + (alloc_start - fstart) / 8); + lo1->freebytes[(alloc_start - fstart) / 8] + = (1 << ((alloc_start - fstart) % 8)) - 1; + grub_memset (lo1->freebytes + + ((alloc_start - fstart) / 8) + 1, 0, + sizeof (lo1->freebytes) + - (alloc_start - fstart) / 8 - 1); + lo1->next = leftovers; + lo1->prev = &leftovers; + if (leftovers) + leftovers->prev = &lo1->next; + leftovers = lo1; + } + if (lo2) + { + lo2->quantstart + = fend - GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; + grub_memset (lo2->freebytes, 0, + (alloc_end - lo2->quantstart) / 8); + lo2->freebytes[(alloc_end - lo2->quantstart) / 8] + = ~((1 << ((alloc_end - lo2->quantstart) % 8)) - 1); + grub_memset (lo2->freebytes + + ((alloc_end - lo2->quantstart) / 8) + + 1, 0, sizeof (lo2->freebytes) + - (alloc_end - lo2->quantstart) / 8 - 1); + lo2->prev = &leftovers; + if (leftovers) + leftovers->prev = &lo2->next; + lo2->next = leftovers; + leftovers = lo2; + } + curschu->pre = lo1; + curschu->post = lo2; + } #endif if (!oom) cural++; @@ -814,7 +938,7 @@ malloc_in_range (struct grub_relocator *rel, free_subchunk (&tofree); } } - + switch (events[j].type) { case REG_BEG_START: diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index f50e94f98..cfd10713d 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -692,8 +692,9 @@ grub_freebsd_boot (void) return err; #ifdef GRUB_MACHINE_EFI - if (! grub_efi_finish_boot_services ()) - grub_fatal ("cannot exit boot services"); + err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL); + if (err) + return err; #endif pagetable = p; @@ -723,8 +724,9 @@ grub_freebsd_boot (void) return err; #ifdef GRUB_MACHINE_EFI - if (! grub_efi_finish_boot_services ()) - grub_fatal ("cannot exit boot services"); + err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL); + if (err) + return err; #endif grub_memcpy (&stack[9], &bi, sizeof (bi)); @@ -804,8 +806,9 @@ grub_openbsd_boot (void) grub_video_set_mode ("text", 0, 0); #ifdef GRUB_MACHINE_EFI - if (! grub_efi_finish_boot_services ()) - grub_fatal ("cannot exit boot services"); + err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL); + if (err) + return err; #endif state.eip = entry; @@ -1009,8 +1012,9 @@ grub_netbsd_boot (void) return err; #ifdef GRUB_MACHINE_EFI - if (! grub_efi_finish_boot_services ()) - grub_fatal ("cannot exit boot services"); + err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL); + if (err) + return err; #endif state.eip = entry; diff --git a/loader/i386/linux.c b/loader/i386/linux.c index 4a1068070..ef1b8309e 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -681,15 +681,13 @@ grub_linux_boot (void) #ifdef GRUB_MACHINE_EFI { - grub_efi_uintn_t efi_map_key, efi_desc_size; + grub_efi_uintn_t efi_desc_size; grub_efi_uint32_t efi_desc_version; - if (grub_efi_get_memory_map (&efi_mmap_size, efi_mmap_buf, &efi_map_key, - &efi_desc_size, &efi_desc_version) <= 0) - grub_fatal ("cannot get memory map"); + err = grub_efi_finish_boot_services (&efi_mmap_size, efi_mmap_buf, NULL, + &efi_desc_size, &efi_desc_version); + if (err) + return err; - if (! grub_efi_exit_boot_services (efi_map_key)) - grub_fatal ("cannot exit boot services"); - /* Note that no boot services are available from here. */ /* Pass EFI parameters. */ diff --git a/loader/i386/xnu.c b/loader/i386/xnu.c index bdcd383c5..dcec3554f 100644 --- a/loader/i386/xnu.c +++ b/loader/i386/xnu.c @@ -1038,10 +1038,11 @@ grub_xnu_boot (void) bootparams->devtree = devtree_target; bootparams->devtreelen = devtreelen; - if (grub_autoefi_get_memory_map (&memory_map_size, memory_map, - &map_key, &descriptor_size, - &descriptor_version) <= 0) - return grub_errno; + err = grub_efi_finish_boot_services (&memory_map_size, memory_map, + &map_key, &descriptor_size, + &descriptor_version); + if (err) + return err; bootparams->efi_system_table = PTR_TO_UINT32 (grub_autoefi_system_table); @@ -1096,9 +1097,6 @@ grub_xnu_boot (void) + bootparams->heap_size + GRUB_XNU_PAGESIZE; grub_xnu_arg1 = bootparams_target; - if (! grub_autoefi_exit_boot_services (map_key)) - return grub_error (GRUB_ERR_IO, "can't exit boot services"); - grub_autoefi_set_virtual_address_map (memory_map_size, descriptor_size, descriptor_version,memory_map); diff --git a/loader/multiboot.c b/loader/multiboot.c index 53dc42abb..a3ca6266f 100644 --- a/loader/multiboot.c +++ b/loader/multiboot.c @@ -126,8 +126,9 @@ grub_multiboot_boot (void) return err; #ifdef GRUB_MACHINE_EFI - if (! grub_efi_finish_boot_services ()) - grub_fatal ("cannot exit boot services"); + err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL); + if (err) + return err; #endif grub_relocator32_boot (grub_multiboot_relocator, state); diff --git a/term/efi/console.c b/term/efi/console.c index 664861398..eac227561 100644 --- a/term/efi/console.c +++ b/term/efi/console.c @@ -90,6 +90,9 @@ grub_console_putchar (grub_uint32_t c) grub_efi_char16_t str[2]; grub_efi_simple_text_output_interface_t *o; + if (grub_efi_is_finished) + return; + o = grub_efi_system_table->con_out; /* For now, do not try to use a surrogate pair. */ @@ -120,6 +123,9 @@ grub_console_checkkey (void) grub_efi_input_key_t key; grub_efi_status_t status; + if (grub_efi_is_finished) + return 0; + if (read_key >= 0) return 1; @@ -217,6 +223,9 @@ grub_console_getkey (void) grub_efi_status_t status; int key; + if (grub_efi_is_finished) + return 0; + if (read_key >= 0) { key = read_key; @@ -249,7 +258,8 @@ grub_console_getwh (void) grub_efi_uintn_t columns, rows; o = grub_efi_system_table->con_out; - if (efi_call_4 (o->query_mode, o, o->mode->mode, &columns, &rows) != GRUB_EFI_SUCCESS) + if (grub_efi_is_finished || efi_call_4 (o->query_mode, o, o->mode->mode, + &columns, &rows) != GRUB_EFI_SUCCESS) { /* Why does this fail? */ columns = 80; @@ -264,6 +274,9 @@ grub_console_getxy (void) { grub_efi_simple_text_output_interface_t *o; + if (grub_efi_is_finished) + return 0; + o = grub_efi_system_table->con_out; return ((o->mode->cursor_column << 8) | o->mode->cursor_row); } @@ -273,6 +286,9 @@ grub_console_gotoxy (grub_uint8_t x, grub_uint8_t y) { grub_efi_simple_text_output_interface_t *o; + if (grub_efi_is_finished) + return; + o = grub_efi_system_table->con_out; efi_call_3 (o->set_cursor_position, o, x, y); } @@ -283,6 +299,9 @@ grub_console_cls (void) grub_efi_simple_text_output_interface_t *o; grub_efi_int32_t orig_attr; + if (grub_efi_is_finished) + return; + o = grub_efi_system_table->con_out; orig_attr = o->mode->attribute; efi_call_2 (o->set_attributes, o, GRUB_EFI_BACKGROUND_BLACK); @@ -295,6 +314,9 @@ grub_console_setcolorstate (grub_term_color_state state) { grub_efi_simple_text_output_interface_t *o; + if (grub_efi_is_finished) + return; + o = grub_efi_system_table->con_out; switch (state) { @@ -331,6 +353,9 @@ grub_console_setcursor (int on) { grub_efi_simple_text_output_interface_t *o; + if (grub_efi_is_finished) + return; + o = grub_efi_system_table->con_out; efi_call_2 (o->enable_cursor, o, on); } From 6d6f55c557871efa852e53c3f5a34f36241ed284 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 21 Apr 2010 09:27:57 +0200 Subject: [PATCH 094/271] Use leftovers --- include/grub/relocator_private.h | 7 +- lib/relocator.c | 281 +++++++++++++++++++++---------- util/grub-mkrescue.in | 45 ++++- 3 files changed, 237 insertions(+), 96 deletions(-) diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h index 8398defbd..a859ec9fd 100644 --- a/include/grub/relocator_private.h +++ b/include/grub/relocator_private.h @@ -66,8 +66,10 @@ struct grub_relocator_mmap_event /* To track the regions already in heap. */ FIRMWARE_BLOCK_START = 6, FIRMWARE_BLOCK_END = FIRMWARE_BLOCK_START | 1, + REG_LEFTOVER_START = 8, + REG_LEFTOVER_END = REG_LEFTOVER_START | 1, #endif - COLLISION_START = 8, + COLLISION_START = 10, COLLISION_END = COLLISION_START | 1 } type; grub_addr_t pos; @@ -80,6 +82,9 @@ struct grub_relocator_mmap_event grub_mm_region_t *regancestor; grub_mm_header_t head; }; +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + struct grub_relocator_fw_leftover *leftover; +#endif }; }; diff --git a/lib/relocator.c b/lib/relocator.c index de4cca626..1fe5a94e5 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -35,7 +35,7 @@ struct grub_relocator_subchunk { enum {CHUNK_TYPE_IN_REGION, CHUNK_TYPE_REGION_START, #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS - CHUNK_TYPE_FIRMWARE + CHUNK_TYPE_FIRMWARE, CHUNK_TYPE_LEFTOVER #endif } type; grub_addr_t host_start; @@ -334,6 +334,7 @@ free_subchunk (const struct grub_relocator_subchunk *subchu) } #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS case CHUNK_TYPE_FIRMWARE: + case CHUNK_TYPE_LEFTOVER: { grub_addr_t fstart, fend; fstart = ALIGN_UP (subchu->start, @@ -375,11 +376,12 @@ malloc_in_range (struct grub_relocator *rel, { grub_mm_region_t r, *ra, base_saved; struct grub_relocator_mmap_event *events = NULL, *eventt = NULL, *t; - unsigned maxevents = 2; + /* 128 is just in case of additional malloc (shouldn't happen). */ + unsigned maxevents = 2 + 128; grub_mm_header_t p, pa; unsigned *counter; int nallocs = 0; - unsigned i, j, N = 0; + unsigned j, N = 0; grub_addr_t target = 0; grub_dprintf ("relocator", @@ -422,6 +424,23 @@ malloc_in_range (struct grub_relocator *rel, } maxevents += grub_relocator_firmware_get_max_events (); + + { + struct grub_relocator_fw_leftover *cur; + for (cur = leftovers; cur; cur = cur->next) + { + int l = 0; + unsigned i; + for (i = 0; i < GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; i++) + { + if (l != ((cur->freebytes[i / 8] >> (i % 8)) & 1)) + maxevents++; + l = ((cur->freebytes[i / 8] >> (i % 8)) & 1); + } + if (l) + maxevents++; + } + } #endif events = grub_malloc (maxevents * sizeof (events[0])); @@ -478,10 +497,35 @@ malloc_in_range (struct grub_relocator *rel, N++; } } -#endif -#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS N += grub_relocator_firmware_fill_events (events + N); + + { + struct grub_relocator_fw_leftover *cur; + for (cur = leftovers; cur; cur = cur->next) + { + unsigned i; + int l = 0; + for (i = 0; i < GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; i++) + { + if (l != ((cur->freebytes[i / 8] >> (i % 8)) & 1)) + { + events[N].type = l ? REG_LEFTOVER_END : REG_LEFTOVER_START; + events[N].pos = cur->quantstart + i; + events[N].leftover = cur; + N++; + } + l = ((cur->freebytes[i / 8] >> (i % 8)) & 1); + } + if (l) + { + events[N].type = REG_LEFTOVER_END; + events[N].pos = cur->quantstart + i; + events[N].leftover = cur; + N++; + } + } + } #endif /* No malloc from this point. */ @@ -539,22 +583,25 @@ malloc_in_range (struct grub_relocator *rel, eventt = events; events = t; } - for (i = 0; i < (BITS_IN_BYTE * sizeof (grub_addr_t) / DIGITSORT_BITS); - i++) - { - memset (counter, 0, (1 + (1 << DIGITSORT_BITS)) * sizeof (counter[0])); - for (j = 0; j < N; j++) - counter[((events[j].pos >> (DIGITSORT_BITS * i)) - & DIGITSORT_MASK) + 1]++; - for (j = 0; j <= DIGITSORT_MASK; j++) - counter[j+1] += counter[j]; - for (j = 0; j < N; j++) - eventt[counter[((events[j].pos >> (DIGITSORT_BITS * i)) - & DIGITSORT_MASK)]++] = events[j]; - t = eventt; - eventt = events; - events = t; - } + { + unsigned i; + for (i = 0; i < (BITS_IN_BYTE * sizeof (grub_addr_t) / DIGITSORT_BITS); + i++) + { + memset (counter, 0, (1 + (1 << DIGITSORT_BITS)) * sizeof (counter[0])); + for (j = 0; j < N; j++) + counter[((events[j].pos >> (DIGITSORT_BITS * i)) + & DIGITSORT_MASK) + 1]++; + for (j = 0; j <= DIGITSORT_MASK; j++) + counter[j+1] += counter[j]; + for (j = 0; j < N; j++) + eventt[counter[((events[j].pos >> (DIGITSORT_BITS * i)) + & DIGITSORT_MASK)]++] = events[j]; + t = eventt; + eventt = events; + events = t; + } + } #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS retry: @@ -563,14 +610,15 @@ malloc_in_range (struct grub_relocator *rel, /* Now events are nicely sorted. */ { int nstarted = 0, ncollisions = 0, nstartedfw = 0, nblockfw = 0; + int nlefto = 0; grub_addr_t starta = 0; int numstarted; for (j = from_low_priv ? 0 : N - 1; from_low_priv ? j < N : (j + 1); from_low_priv ? j++ : j--) { int isinsidebefore, isinsideafter; - isinsidebefore = (!ncollisions - && (nstarted || (nstartedfw && !nblockfw))); + isinsidebefore = (!ncollisions && (nstarted || (((nlefto || nstartedfw) + && !nblockfw)))); switch (events[j].type) { #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS @@ -589,6 +637,13 @@ malloc_in_range (struct grub_relocator *rel, case FIRMWARE_BLOCK_END: nblockfw--; break; + case REG_LEFTOVER_START: + nlefto++; + break; + + case REG_LEFTOVER_END: + nlefto--; + break; #endif case COLLISION_START: @@ -609,8 +664,8 @@ malloc_in_range (struct grub_relocator *rel, nstarted--; break; } - isinsideafter = (!ncollisions - && (nstarted || (nstartedfw && !nblockfw))); + isinsideafter = (!ncollisions && (nstarted || ((nlefto || nstartedfw) + && !nblockfw))); if (!isinsidebefore && isinsideafter) { starta = from_low_priv ? ALIGN_UP (events[j].pos, align) @@ -647,7 +702,7 @@ malloc_in_range (struct grub_relocator *rel, { int inreg = 0, regbeg = 0, ncol = 0; #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS - int fwin = 0, fwb = 0; + int fwin = 0, fwb = 0, fwlefto = 0; #endif int last_start = 0; for (j = 0; j < N; j++) @@ -662,6 +717,8 @@ malloc_in_range (struct grub_relocator *rel, #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS else if (fwin && !fwb) typepre = CHUNK_TYPE_FIRMWARE; + else if (fwlefto && !fwb) + typepre = CHUNK_TYPE_LEFTOVER; #endif else typepre = -1; @@ -722,6 +779,21 @@ malloc_in_range (struct grub_relocator *rel, } break; } + case CHUNK_TYPE_LEFTOVER: + { + unsigned offstart = alloc_start + % GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; + unsigned offend = alloc_end + % GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; + struct grub_relocator_fw_leftover *lo + = events[last_start].leftover; + lo->freebytes[offstart / 8] + &= ((1 << (8 - (start % 8))) - 1); + grub_memset (lo->freebytes + (offstart + 7) / 8, 0, + offend / 8 - (offstart + 7) / 8); + lo->freebytes[offend / 8] &= ~((1 << (offend % 8)) - 1); + } + break; #endif } nallocs++; @@ -757,6 +829,14 @@ malloc_in_range (struct grub_relocator *rel, fwin--; break; + case REG_LEFTOVER_START: + fwlefto++; + break; + + case REG_LEFTOVER_END: + fwlefto--; + break; + case FIRMWARE_BLOCK_START: fwb++; break; @@ -797,7 +877,7 @@ malloc_in_range (struct grub_relocator *rel, int last_start = 0; int inreg = 0, regbeg = 0, ncol = 0; #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS - int fwin = 0, fwb = 0; + int fwin = 0, fwlefto = 0, fwb = 0; #endif unsigned cural = 0; int oom = 0; @@ -818,6 +898,8 @@ malloc_in_range (struct grub_relocator *rel, #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS else if (fwin && !fwb) typepre = CHUNK_TYPE_FIRMWARE; + else if (fwlefto && !fwb) + typepre = CHUNK_TYPE_LEFTOVER; #endif else typepre = -1; @@ -863,74 +945,80 @@ malloc_in_range (struct grub_relocator *rel, } #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS if (!oom && typepre == CHUNK_TYPE_FIRMWARE) - { - grub_addr_t fstart, fend; - struct grub_relocator_fw_leftover *lo1 = NULL; - struct grub_relocator_fw_leftover *lo2 = NULL; + { + grub_addr_t fstart, fend; + struct grub_relocator_fw_leftover *lo1 = NULL; + struct grub_relocator_fw_leftover *lo2 = NULL; - fstart - = ALIGN_DOWN (alloc_start, - GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); - fend - = ALIGN_UP (alloc_end, + fstart + = ALIGN_DOWN (alloc_start, GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + fend + = ALIGN_UP (alloc_end, + GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); - if (fstart != alloc_start) - lo1 = grub_malloc (sizeof (*lo1)); - if (fend != alloc_end) - lo2 = grub_malloc (sizeof (*lo2)); - if ((!lo1 && fstart != alloc_start) - || (!lo2 && fend != alloc_end)) - { - struct grub_relocator_extra_block *ne; - grub_free (lo1); - grub_free (lo2); - lo1 = NULL; - lo2 = NULL; - oom = 1; - grub_memcpy (&tofree, curschu, sizeof (tofree)); - ne = extra_blocks; - extra_blocks = extra_blocks->next; - grub_free (ne); - } - if (lo1) - { - lo1->quantstart = fstart; - grub_memset (lo1->freebytes, 0xff, - (alloc_start - fstart) / 8); - lo1->freebytes[(alloc_start - fstart) / 8] - = (1 << ((alloc_start - fstart) % 8)) - 1; - grub_memset (lo1->freebytes - + ((alloc_start - fstart) / 8) + 1, 0, - sizeof (lo1->freebytes) - - (alloc_start - fstart) / 8 - 1); - lo1->next = leftovers; - lo1->prev = &leftovers; - if (leftovers) - leftovers->prev = &lo1->next; - leftovers = lo1; - } - if (lo2) - { - lo2->quantstart - = fend - GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; - grub_memset (lo2->freebytes, 0, - (alloc_end - lo2->quantstart) / 8); - lo2->freebytes[(alloc_end - lo2->quantstart) / 8] - = ~((1 << ((alloc_end - lo2->quantstart) % 8)) - 1); - grub_memset (lo2->freebytes - + ((alloc_end - lo2->quantstart) / 8) - + 1, 0, sizeof (lo2->freebytes) - - (alloc_end - lo2->quantstart) / 8 - 1); - lo2->prev = &leftovers; - if (leftovers) - leftovers->prev = &lo2->next; - lo2->next = leftovers; - leftovers = lo2; - } - curschu->pre = lo1; - curschu->post = lo2; - } + if (fstart != alloc_start) + lo1 = grub_malloc (sizeof (*lo1)); + if (fend != alloc_end) + lo2 = grub_malloc (sizeof (*lo2)); + if ((!lo1 && fstart != alloc_start) + || (!lo2 && fend != alloc_end)) + { + struct grub_relocator_extra_block *ne; + grub_free (lo1); + grub_free (lo2); + lo1 = NULL; + lo2 = NULL; + oom = 1; + grub_memcpy (&tofree, curschu, sizeof (tofree)); + ne = extra_blocks; + extra_blocks = extra_blocks->next; + grub_free (ne); + } + if (lo1) + { + lo1->quantstart = fstart; + grub_memset (lo1->freebytes, 0xff, + (alloc_start - fstart) / 8); + lo1->freebytes[(alloc_start - fstart) / 8] + = (1 << ((alloc_start - fstart) % 8)) - 1; + grub_memset (lo1->freebytes + + ((alloc_start - fstart) / 8) + 1, 0, + sizeof (lo1->freebytes) + - (alloc_start - fstart) / 8 - 1); + lo1->next = leftovers; + lo1->prev = &leftovers; + if (leftovers) + leftovers->prev = &lo1->next; + leftovers = lo1; + } + if (lo2) + { + lo2->quantstart + = fend - GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; + grub_memset (lo2->freebytes, 0, + (alloc_end - lo2->quantstart) / 8); + lo2->freebytes[(alloc_end - lo2->quantstart) / 8] + = ~((1 << ((alloc_end - lo2->quantstart) % 8)) - 1); + grub_memset (lo2->freebytes + + ((alloc_end - lo2->quantstart) / 8) + + 1, 0, sizeof (lo2->freebytes) + - (alloc_end - lo2->quantstart) / 8 - 1); + lo2->prev = &leftovers; + if (leftovers) + leftovers->prev = &lo2->next; + lo2->next = leftovers; + leftovers = lo2; + } + curschu->pre = lo1; + curschu->post = lo2; + } + + if (typepre == CHUNK_TYPE_LEFTOVER) + { + curschu->pre = events[last_start].leftover; + curschu->post = events[last_start].leftover; + } #endif if (!oom) cural++; @@ -965,6 +1053,14 @@ malloc_in_range (struct grub_relocator *rel, fwin--; break; + case REG_LEFTOVER_START: + fwlefto++; + break; + + case REG_LEFTOVER_END: + fwlefto--; + break; + case FIRMWARE_BLOCK_START: fwb++; break; @@ -983,6 +1079,7 @@ malloc_in_range (struct grub_relocator *rel, } if (oom) { + unsigned i; for (i = 0; i < cural; i++) free_subchunk (&res->subchunks[i]); grub_free (res->subchunks); diff --git a/util/grub-mkrescue.in b/util/grub-mkrescue.in index aafdfb059..e7dbb45ff 100644 --- a/util/grub-mkrescue.in +++ b/util/grub-mkrescue.in @@ -32,6 +32,8 @@ pkglib_DATA="@pkglib_DATA@" coreboot_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/${target_cpu}-coreboot pc_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/${target_cpu}-pc +efi32_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-efi +efi64_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/x86_64-efi # Usage: usage # Print the usage. @@ -128,13 +130,23 @@ if [ "${override_dir}" = "" ] ; then if test -e "${pc_dir}" ; then process_input_dir ${pc_dir} pc fi + if test -e "${efi32_dir}" ; then + process_input_dir ${efi32_dir} efi32 + fi + if test -e "${efi64_dir}" ; then + process_input_dir ${efi64_dir} efi64 + fi else process_input_dir ${override_dir} ${native_platform} coreboot_dir= pc_dir= - case "${native_platform}" in - coreboot) coreboot_dir=${override_dir} ;; - pc) pc_dir=${override_dir} ;; + efi32_dir= + efi64_dir= + case "${target_cpu}-${native_platform}" in + i386-coreboot) coreboot_dir=${override_dir} ;; + i386-pc) pc_dir=${override_dir} ;; + i386-efi) efi32_dir=${override_dir} ;; + x86_64-efi) efi64_dir=${override_dir} ;; esac fi @@ -191,6 +203,33 @@ if test -e "${pc_dir}" ; then --embedded-boot ${embed_img}" fi +if test -e "${efi64_dir}" || test -e "${efi32_dir}"; then + efi_dir=`mktemp -d "$MKTEMP_TEMPLATE"` + mkdir -p "${efi_dir}/efi/boot" +else + efi_dir= +fi + +# build bootx64.efi +if test -e "${efi64_dir}" ; then + echo "Generates bootx64.efi" + grub-mkimage -d "${efi64_dir}" -o "${efi_dir}"/efi/boot/bootx64.efi --prefix=/boot/grub/x86_64-efi \ + search iso9660 configfile sh + + modules="$(cat "${efi64_dir}"/partmap.lst) ${modules}" + (for i in ${modules} ; do + echo "insmod $i" + done ; \ + echo "source /boot/grub/grub.cfg") \ + > "${iso9660_dir}"/boot/grub/x86_64-efi/grub.cfg +fi + +if test x"${efi_dir}" != x; then + mformat -C -f 2880 -L 16 -i "${iso9660_dir}"/efi.img :: + mcopy -s -i "${iso9660_dir}"/efi.img ${efi_dir}/efi ::/ + grub_mkisofs_arguments="${grub_mkisofs_arguments} --efi-boot efi.img" +fi + # build iso image grub-mkisofs ${grub_mkisofs_arguments} --protective-msdos-label -o ${output_image} -r ${iso9660_dir} ${source} rm -rf ${iso9660_dir} From 5490ddc18bdcf27c1eeb88ffd90aab2708a2c016 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 21 Apr 2010 10:01:41 +0200 Subject: [PATCH 095/271] Fix compilation on i386-pc --- efiemu/main.c | 16 ---------------- include/grub/autoefi.h | 2 ++ include/grub/efiemu/efiemu.h | 3 +-- loader/i386/xnu.c | 6 +++--- 4 files changed, 6 insertions(+), 21 deletions(-) diff --git a/efiemu/main.c b/efiemu/main.c index 8a8a508fa..7ebbae946 100644 --- a/efiemu/main.c +++ b/efiemu/main.c @@ -182,22 +182,6 @@ grub_cmd_efiemu_prepare (grub_command_t cmd __attribute__ ((unused)), - -int -grub_efiemu_exit_boot_services (grub_efi_uintn_t map_key - __attribute__ ((unused))) -{ - /* Nothing to do here yet */ - return 1; -} - -int -grub_efiemu_finish_boot_services (void) -{ - /* Nothing to do here yet */ - return 1; -} - /* Load the runtime from the file FILENAME. */ static grub_err_t grub_efiemu_load_file (const char *filename) diff --git a/include/grub/autoefi.h b/include/grub/autoefi.h index 5ae4b3a21..740be3249 100644 --- a/include/grub/autoefi.h +++ b/include/grub/autoefi.h @@ -50,6 +50,7 @@ static inline grub_err_t grub_autoefi_prepare (void) # define SYSTEM_TABLE_PTR(x) ((void *)(grub_efi_system_table->x)) # define SIZEOF_OF_UINTN sizeof (grub_efi_uintn_t) # define SYSTEM_TABLE(x) (grub_efi_system_table->x) +# define grub_autoefi_finish_boot_services grub_efi_finish_boot_services # define EFI_PRESENT 1 #else # include @@ -72,6 +73,7 @@ static inline grub_err_t grub_autoefi_prepare (void) # define SYSTEM_TABLE GRUB_EFIEMU_SYSTEM_TABLE # define grub_efi_allocate_pages(x,y) (x) # define grub_efi_free_pages(x,y) GRUB_EFI_SUCCESS +# define grub_autoefi_finish_boot_services grub_efiemu_finish_boot_services # define EFI_PRESENT 1 #endif diff --git a/include/grub/efiemu/efiemu.h b/include/grub/efiemu/efiemu.h index 3980d32cd..1cddbca7c 100644 --- a/include/grub/efiemu/efiemu.h +++ b/include/grub/efiemu/efiemu.h @@ -217,13 +217,12 @@ int grub_efiemu_get_memory_map (grub_efi_uintn_t *memory_map_size, grub_efi_uintn_t *map_key, grub_efi_uintn_t *descriptor_size, grub_efi_uint32_t *descriptor_version); +#define grub_efiemu_finish_boot_services grub_efiemu_get_memory_map grub_err_t grub_efiemu_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t, grub_uint32_t)); int grub_efiemu_sizeof_uintn_t (void); -int grub_efiemu_exit_boot_services (grub_efi_uintn_t map_key); -int grub_efiemu_finish_boot_services (void); grub_err_t grub_efiemu_get_lower_upper_memory (grub_uint64_t *lower, grub_uint64_t *upper); #define GRUB_EFIEMU_MEMORY_AVAILABLE 1 diff --git a/loader/i386/xnu.c b/loader/i386/xnu.c index dcec3554f..2aec590fb 100644 --- a/loader/i386/xnu.c +++ b/loader/i386/xnu.c @@ -1038,9 +1038,9 @@ grub_xnu_boot (void) bootparams->devtree = devtree_target; bootparams->devtreelen = devtreelen; - err = grub_efi_finish_boot_services (&memory_map_size, memory_map, - &map_key, &descriptor_size, - &descriptor_version); + err = grub_autoefi_finish_boot_services (&memory_map_size, memory_map, + &map_key, &descriptor_size, + &descriptor_version); if (err) return err; From ba2f141cb580b243ef2defdb68b3137b7199499b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 21 Apr 2010 10:02:05 +0200 Subject: [PATCH 096/271] Check memory map when choosing address --- lib/relocator.c | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 1fe5a94e5..127b80533 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -21,6 +21,7 @@ #include #include #include +#include struct grub_relocator { @@ -63,6 +64,7 @@ struct grub_relocator_extra_block grub_addr_t end; }; +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS struct grub_relocator_fw_leftover { struct grub_relocator_fw_leftover *next; @@ -72,6 +74,8 @@ struct grub_relocator_fw_leftover }; struct grub_relocator_fw_leftover *leftovers; +#endif + struct grub_relocator_extra_block *extra_blocks; struct grub_relocator * @@ -220,6 +224,7 @@ allocate_inreg (grub_addr_t addr, grub_size_t size, } } +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS static void check_leftover (struct grub_relocator_fw_leftover *lo) { @@ -233,6 +238,7 @@ check_leftover (struct grub_relocator_fw_leftover *lo) if (lo->next) lo->next->prev = lo->prev; } +#endif static void free_subchunk (const struct grub_relocator_subchunk *subchu) @@ -923,7 +929,10 @@ malloc_in_range (struct grub_relocator *rel, curschu->size = alloc_end - alloc_start; if (typepre == CHUNK_TYPE_REGION_START) if (!oom && (typepre == CHUNK_TYPE_REGION_START - || typepre == CHUNK_TYPE_FIRMWARE)) +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS + || typepre == CHUNK_TYPE_FIRMWARE +#endif + )) { struct grub_relocator_extra_block *ne; ne = grub_malloc (sizeof (*ne)); @@ -1282,11 +1291,36 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, } while (0); - /* FIXME: check memory map. */ - if (preference == GRUB_RELOCATOR_PREFERENCE_HIGH) - chunk->target = ALIGN_DOWN (max_addr, align); - else - chunk->target = ALIGN_UP (min_addr, align); + { + int found = 0; + auto int NESTED_FUNC_ATTR hook (grub_uint64_t, grub_uint64_t, grub_uint32_t); + int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t sz, grub_uint32_t type) + { + grub_uint64_t candidate; + if (type != GRUB_MACHINE_MEMORY_AVAILABLE) + return 0; + candidate = ALIGN_UP (addr, align); + if (candidate < min_addr) + candidate = min_addr; + if (candidate + size >= addr + sz + || candidate > ALIGN_DOWN (max_addr, align)) + return 0; + if (preference == GRUB_RELOCATOR_PREFERENCE_HIGH) + candidate = ALIGN_DOWN (addr + sz - size, align); + if (!found || (preference == GRUB_RELOCATOR_PREFERENCE_HIGH + && candidate > chunk->target)) + chunk->target = candidate; + if (!found || (preference == GRUB_RELOCATOR_PREFERENCE_LOW + && candidate < chunk->target)) + chunk->target = candidate; + found = 1; + return 0; + } + + grub_machine_mmap_iterate (hook); + if (!found) + return grub_error (GRUB_ERR_BAD_OS, "couldn't find suitable memory target"); + } while (1) { struct grub_relocator_chunk *chunk2; From 368c17f85d89ee8b03dc3c77b4df59ce2e5abf2c Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 21 Apr 2010 15:25:49 +0200 Subject: [PATCH 097/271] First part of virtual addr support in relocator --- include/grub/i386/memory.h | 24 ++++++ include/grub/relocator_private.h | 13 ++-- lib/i386/relocator.c | 24 +++--- lib/relocator.c | 124 ++++++++++++++++--------------- 4 files changed, 110 insertions(+), 75 deletions(-) diff --git a/include/grub/i386/memory.h b/include/grub/i386/memory.h index fe2f6e4e1..4f9a3c916 100644 --- a/include/grub/i386/memory.h +++ b/include/grub/i386/memory.h @@ -28,4 +28,28 @@ #define GRUB_MEMORY_CPU_AMD64_MSR 0xc0000080 #define GRUB_MEMORY_CPU_AMD64_MSR_ON 0x00000100 +#ifndef ASM_FILE + +typedef grub_addr_t grub_phys_addr_t; + +static inline grub_phys_addr_t +grub_vtop (void *a) +{ + return (grub_phys_addr_t) a; +} + +static inline void * +grub_map_memory (grub_phys_addr_t a, grub_size_t size __attribute__ ((unused))) +{ + return (void *) a; +} + +static inline void +grub_unmap_memory (void *a __attribute__ ((unused)), + grub_size_t size __attribute__ ((unused))) +{ +} + +#endif + #endif /* ! GRUB_MEMORY_CPU_HEADER */ diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h index a859ec9fd..d12a0f05a 100644 --- a/include/grub/relocator_private.h +++ b/include/grub/relocator_private.h @@ -31,8 +31,9 @@ extern grub_size_t grub_relocator_jumper_size; void grub_cpu_relocator_init (void); grub_err_t -grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, - grub_addr_t *relstart, grub_size_t *relsize); +grub_relocator_prepare_relocs (struct grub_relocator *rel, + void *addr, + void **relstart, grub_size_t *relsize); void grub_cpu_relocator_forward (void *rels, void *src, void *tgt, grub_size_t size); void grub_cpu_relocator_backward (void *rels, void *src, void *tgt, @@ -72,7 +73,7 @@ struct grub_relocator_mmap_event COLLISION_START = 10, COLLISION_END = COLLISION_START | 1 } type; - grub_addr_t pos; + grub_phys_addr_t pos; union { struct @@ -91,10 +92,12 @@ struct grub_relocator_mmap_event /* Return 0 on failure, 1 on success. The failure here can be very time-expensive, so please make sure fill events is accurate. */ #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS -int grub_relocator_firmware_alloc_region (grub_addr_t start, grub_size_t size); +int grub_relocator_firmware_alloc_region (grub_phys_addr_t start, + grub_size_t size); unsigned grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events); unsigned grub_relocator_firmware_get_max_events (void); -void grub_relocator_firmware_free_region (grub_addr_t start, grub_size_t size); +void grub_relocator_firmware_free_region (grub_phys_addr_t start, + grub_size_t size); #endif #endif diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 5985fac7a..5dd4cde75 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -84,6 +84,12 @@ grub_size_t grub_relocator_jumper_size = 12; grub_size_t grub_relocator_jumper_size = 7; #endif +static inline void * +ptov (grub_addr_t a) +{ + return (void *) a; +} + void grub_cpu_relocator_init (void) { @@ -148,10 +154,10 @@ grub_err_t grub_relocator32_boot (struct grub_relocator *rel, struct grub_relocator32_state state) { - grub_addr_t target; + grub_phys_addr_t target; void *src; grub_err_t err; - grub_addr_t relst; + void *relst; err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, (0xffffffff - RELOCATOR_SIZEOF (32)) @@ -170,7 +176,7 @@ grub_relocator32_boot (struct grub_relocator *rel, grub_memmove (src, &grub_relocator32_start, RELOCATOR_SIZEOF (32)); - err = grub_relocator_prepare_relocs (rel, target, &relst, NULL); + err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL); if (err) return err; @@ -185,10 +191,10 @@ grub_err_t grub_relocator16_boot (struct grub_relocator *rel, struct grub_relocator16_state state) { - grub_addr_t target; + grub_phys_addr_t target; void *src; grub_err_t err; - grub_addr_t relst; + void *relst; err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, 0xa0000 - RELOCATOR_SIZEOF (16), @@ -212,7 +218,7 @@ grub_relocator16_boot (struct grub_relocator *rel, grub_memmove (src, &grub_relocator16_start, RELOCATOR_SIZEOF (16)); - err = grub_relocator_prepare_relocs (rel, target, &relst, NULL); + err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL); if (err) return err; @@ -228,10 +234,10 @@ grub_relocator64_boot (struct grub_relocator *rel, struct grub_relocator64_state state, grub_addr_t min_addr, grub_addr_t max_addr) { - grub_addr_t target; + grub_phys_addr_t target; void *src; grub_err_t err; - grub_addr_t relst; + void *relst; err = grub_relocator_alloc_chunk_align (rel, &src, &target, min_addr, max_addr - RELOCATOR_SIZEOF (64), @@ -251,7 +257,7 @@ grub_relocator64_boot (struct grub_relocator *rel, grub_memmove (src, &grub_relocator64_start, RELOCATOR_SIZEOF (64)); - err = grub_relocator_prepare_relocs (rel, target, &relst, NULL); + err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL); if (err) return err; diff --git a/lib/relocator.c b/lib/relocator.c index 127b80533..b559d12ea 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -26,9 +26,9 @@ struct grub_relocator { struct grub_relocator_chunk *chunks; - grub_addr_t postchunks; - grub_addr_t highestaddr; - grub_addr_t highestnonpostaddr; + grub_phys_addr_t postchunks; + grub_phys_addr_t highestaddr; + grub_phys_addr_t highestnonpostaddr; grub_size_t relocators_size; }; @@ -39,9 +39,11 @@ struct grub_relocator_subchunk CHUNK_TYPE_FIRMWARE, CHUNK_TYPE_LEFTOVER #endif } type; - grub_addr_t host_start; - grub_addr_t start; + grub_mm_region_t reg; + grub_mm_header_t head; + grub_phys_addr_t start; grub_size_t size; + grub_size_t pre_size; struct grub_relocator_extra_block *extra; struct grub_relocator_fw_leftover *pre, *post; }; @@ -49,8 +51,9 @@ struct grub_relocator_subchunk struct grub_relocator_chunk { struct grub_relocator_chunk *next; - grub_addr_t src; - grub_addr_t target; + grub_phys_addr_t src; + void *srcv; + grub_phys_addr_t target; grub_size_t size; struct grub_relocator_subchunk *subchunks; unsigned nsubchunks; @@ -60,8 +63,8 @@ struct grub_relocator_extra_block { struct grub_relocator_extra_block *next; struct grub_relocator_extra_block **prev; - grub_addr_t start; - grub_addr_t end; + grub_phys_addr_t start; + grub_phys_addr_t end; }; #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS @@ -69,7 +72,7 @@ struct grub_relocator_fw_leftover { struct grub_relocator_fw_leftover *next; struct grub_relocator_fw_leftover **prev; - grub_addr_t quantstart; + grub_phys_addr_t quantstart; grub_uint8_t freebytes[GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT / 8]; }; @@ -89,7 +92,7 @@ grub_relocator_new (void) if (!ret) return NULL; - ret->postchunks = ~(grub_addr_t) 0; + ret->postchunks = ~(grub_phys_addr_t) 0; ret->relocators_size = grub_relocator_jumper_size; grub_dprintf ("relocator", "relocators_size=%lu\n", (unsigned long) ret->relocators_size); @@ -110,10 +113,11 @@ is_start (int type) } static void -allocate_regstart (grub_addr_t addr, grub_size_t size, grub_mm_region_t rb, +allocate_regstart (grub_phys_addr_t addr, grub_size_t size, grub_mm_region_t rb, grub_mm_region_t *regancestor, grub_mm_header_t hancestor) { - grub_addr_t newreg_start, newreg_raw_start = addr + size; + grub_addr_t newreg_start, newreg_raw_start + = (grub_addr_t) rb + (addr - grub_vtop (rb)) + size; grub_addr_t newreg_size, newreg_presize; grub_mm_header_t new_header; grub_mm_header_t hb = (grub_mm_header_t) (rb + 1); @@ -176,23 +180,24 @@ allocate_regstart (grub_addr_t addr, grub_size_t size, grub_mm_region_t rb, } static void -allocate_inreg (grub_addr_t addr, grub_size_t size, +allocate_inreg (grub_phys_addr_t paddr, grub_size_t size, grub_mm_header_t hb, grub_mm_header_t hbp, grub_mm_region_t rb) { struct grub_mm_header *foll = NULL; + grub_addr_t vaddr = (grub_addr_t) hb + (paddr - grub_vtop (hb)); - if (ALIGN_UP (addr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN + if (ALIGN_UP (vaddr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN <= (grub_addr_t) (hb + hb->size)) { - foll = (void *) ALIGN_UP (addr + size, GRUB_MM_ALIGN); + foll = (void *) ALIGN_UP (vaddr + size, GRUB_MM_ALIGN); foll->magic = GRUB_MM_FREE_MAGIC; foll->size = hb->size - (foll - hb); } - if (addr - (grub_addr_t) hb >= sizeof (*hb)) + if (vaddr - (grub_addr_t) hb >= sizeof (*hb)) { - hb->size = ((addr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2); + hb->size = ((vaddr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2); if (foll) { foll->next = hb; @@ -250,12 +255,13 @@ free_subchunk (const struct grub_relocator_subchunk *subchu) grub_mm_region_t r1, r2, *rp; grub_mm_header_t h; grub_size_t pre_size; - r1 = (grub_mm_region_t) ALIGN_UP (subchu->host_start, GRUB_MM_ALIGN); - r2 = (grub_mm_region_t) ALIGN_UP (subchu->start + subchu->size, + r1 = subchu->reg; + r2 = (grub_mm_region_t) ALIGN_UP ((grub_addr_t) subchu->reg + + (grub_vtop (subchu->reg) + - subchu->start) + subchu->size, GRUB_MM_ALIGN); for (rp = &grub_mm_base; *rp && *rp != r2; rp = &((*rp)->next)); - pre_size = ALIGN_UP (subchu->host_start, GRUB_MM_ALIGN) - - subchu->host_start; + pre_size = subchu->pre_size; if (*rp) { @@ -328,7 +334,7 @@ free_subchunk (const struct grub_relocator_subchunk *subchu) } case CHUNK_TYPE_IN_REGION: { - grub_mm_header_t h = (grub_mm_header_t) ALIGN_DOWN (subchu->start, + grub_mm_header_t h = (grub_mm_header_t) ALIGN_DOWN ((grub_addr_t) subchu->head, GRUB_MM_ALIGN); h->size = ((subchu->start + subchu->size + GRUB_MM_ALIGN - 1) / GRUB_MM_ALIGN) @@ -549,26 +555,26 @@ malloc_in_range (struct grub_relocator *rel, { pre_added = 1; events[N].type = REG_BEG_START; - events[N].pos = (grub_addr_t) r - r->pre_size; + events[N].pos = grub_vtop (r) - r->pre_size; events[N].reg = r; events[N].regancestor = ra; events[N].head = p; events[N].hancestor = pa; N++; events[N].type = REG_BEG_END; - events[N].pos = (grub_addr_t) (p + p->size) - sizeof (*r); + events[N].pos = grub_vtop (p + p->size) - sizeof (*r); N++; } else { events[N].type = IN_REG_START; - events[N].pos = (grub_addr_t) p; + events[N].pos = grub_vtop (p); events[N].head = p; events[N].hancestor = pa; events[N].reg = r; N++; events[N].type = IN_REG_END; - events[N].pos = (grub_addr_t) (p + p->size); + events[N].pos = grub_vtop (p + p->size); N++; } pa = p; @@ -862,20 +868,6 @@ malloc_in_range (struct grub_relocator *rel, } } - grub_memset ((void *) target, 0, size); - grub_dprintf ("relocator", "baseptr = %p\n", &base_saved); - for (r = base_saved; r; r = r->next) - { - p = r->first; - do - { - if (!p) - grub_fatal ("null in the ring %p\n", r); - p = p->next; - } - while (p != r->first); - } - /* Malloc is available again. */ grub_mm_base = base_saved; @@ -927,7 +919,13 @@ malloc_in_range (struct grub_relocator *rel, curschu->type = typepre; curschu->start = alloc_start; curschu->size = alloc_end - alloc_start; - if (typepre == CHUNK_TYPE_REGION_START) + if (typepre == CHUNK_TYPE_REGION_START + || typepre == CHUNK_TYPE_IN_REGION) + { + curschu->reg = events[last_start].reg; + curschu->head = events[last_start].head; + curschu->pre_size = alloc_start - events[j - 1].pos; + } if (!oom && (typepre == CHUNK_TYPE_REGION_START #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS || typepre == CHUNK_TYPE_FIRMWARE @@ -1106,8 +1104,8 @@ malloc_in_range (struct grub_relocator *rel, static void adjust_limits (struct grub_relocator *rel, - grub_addr_t *min_addr, grub_addr_t *max_addr, - grub_addr_t in_min, grub_addr_t in_max) + grub_phys_addr_t *min_addr, grub_phys_addr_t *max_addr, + grub_phys_addr_t in_min, grub_phys_addr_t in_max) { struct grub_relocator_chunk *chunk; @@ -1129,10 +1127,10 @@ adjust_limits (struct grub_relocator *rel, grub_err_t grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, - grub_addr_t target, grub_size_t size) + grub_phys_addr_t target, grub_size_t size) { struct grub_relocator_chunk *chunk; - grub_addr_t min_addr = 0, max_addr; + grub_phys_addr_t min_addr = 0, max_addr; if (target > ~size) return grub_error (GRUB_ERR_OUT_OF_RANGE, "address is out of range"); @@ -1223,14 +1221,15 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, grub_dprintf ("relocator", "cur = %p, next = %p\n", rel->chunks, rel->chunks->next); - *src = (void *) chunk->src; + *src = chunk->srcv = grub_map_memory (chunk->src, chunk->size); return GRUB_ERR_NONE; } grub_err_t grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, - grub_addr_t *target, - grub_addr_t min_addr, grub_addr_t max_addr, + grub_phys_addr_t *target, + grub_phys_addr_t min_addr, + grub_phys_addr_t max_addr, grub_size_t size, grub_size_t align, int preference) { @@ -1354,7 +1353,7 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, rel->chunks = chunk; grub_dprintf ("relocator", "cur = %p, next = %p\n", rel->chunks, rel->chunks->next); - *src = (void *) chunk->src; + *src = chunk->srcv = grub_map_memory (chunk->src, chunk->size); *target = chunk->target; return GRUB_ERR_NONE; } @@ -1370,6 +1369,7 @@ grub_relocator_unload (struct grub_relocator *rel) unsigned i; for (i = 0; i < chunk->nsubchunks; i++) free_subchunk (&chunk->subchunks[i]); + grub_unmap_memory (chunk->srcv, chunk->size); next = chunk->next; grub_free (chunk->subchunks); grub_free (chunk); @@ -1378,11 +1378,11 @@ grub_relocator_unload (struct grub_relocator *rel) } grub_err_t -grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, - grub_addr_t *relstart, grub_size_t *relsize) +grub_relocator_prepare_relocs (struct grub_relocator *rel, void *addr, + void **relstart, grub_size_t *relsize) { - grub_addr_t rels; - grub_addr_t rels0; + grub_uint8_t *rels; + grub_uint8_t *rels0; struct grub_relocator_chunk *sorted; grub_size_t nchunks = 0; unsigned j; @@ -1395,7 +1395,7 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, grub_relocator_align, rel->relocators_size, &movers_chunk, 1, 1)) return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); - rels = rels0 = movers_chunk.src; + rels = rels0 = movers_chunk.srcv; if (relsize) *relsize = rel->relocators_size; @@ -1463,23 +1463,25 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, if (sorted[j].src < sorted[j].target) { grub_cpu_relocator_backward ((void *) rels, - (void *) sorted[j].src, - (void *) sorted[j].target, + sorted[j].srcv, + grub_map_memory (sorted[j].target, + sorted[j].size), sorted[j].size); rels += grub_relocator_backward_size; } if (sorted[j].src > sorted[j].target) { grub_cpu_relocator_forward ((void *) rels, - (void *) sorted[j].src, - (void *) sorted[j].target, + sorted[j].srcv, + grub_map_memory (sorted[j].target, + sorted[j].size), sorted[j].size); rels += grub_relocator_forward_size; } if (sorted[j].src == sorted[j].target) - grub_arch_sync_caches ((void *) sorted[j].src, sorted[j].size); + grub_arch_sync_caches (sorted[j].srcv, sorted[j].size); } - grub_cpu_relocator_jumper ((void *) rels, addr); + grub_cpu_relocator_jumper ((void *) rels, (grub_addr_t) addr); *relstart = rels0; grub_free (sorted); return GRUB_ERR_NONE; From 4b2ec20b411f9829eafc639963a2f0812d8e046d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 21 Apr 2010 19:13:45 +0200 Subject: [PATCH 098/271] Second part of p2v support --- include/grub/relocator.h | 20 +++- include/grub/relocator_private.h | 2 +- lib/i386/relocator.c | 41 ++++---- lib/relocator.c | 42 +++++--- loader/i386/bsd.c | 159 ++++++++++++++++++++----------- loader/i386/bsdXX.c | 51 ++++++---- loader/i386/linux.c | 44 +++++---- loader/i386/multiboot_mbi.c | 10 +- loader/i386/pc/linux.c | 48 ++++++---- loader/i386/pc/ntldr.c | 24 +++-- loader/multiboot.c | 24 +++-- loader/multiboot_elfxx.c | 48 ++++++---- loader/multiboot_mbi2.c | 12 ++- loader/xnu.c | 4 +- loader/xnu_resume.c | 44 +++++---- 15 files changed, 361 insertions(+), 212 deletions(-) diff --git a/include/grub/relocator.h b/include/grub/relocator.h index 32bab7053..89e746088 100644 --- a/include/grub/relocator.h +++ b/include/grub/relocator.h @@ -21,19 +21,29 @@ #include #include +#include struct grub_relocator; +struct grub_relocator_chunk; +typedef const struct grub_relocator_chunk *grub_relocator_chunk_t; struct grub_relocator *grub_relocator_new (void); grub_err_t -grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, - grub_addr_t target, grub_size_t size); +grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, + grub_relocator_chunk_t *out, + grub_phys_addr_t target, grub_size_t size); + +void * +get_virtual_current_address (grub_relocator_chunk_t in); +grub_phys_addr_t +get_physical_target_address (grub_relocator_chunk_t in); grub_err_t -grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, - grub_addr_t *target, - grub_addr_t min_addr, grub_addr_t max_addr, +grub_relocator_alloc_chunk_align (struct grub_relocator *rel, + grub_relocator_chunk_t *out, + grub_phys_addr_t min_addr, + grub_phys_addr_t max_addr, grub_size_t size, grub_size_t align, int preference); diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h index d12a0f05a..10e445bfe 100644 --- a/include/grub/relocator_private.h +++ b/include/grub/relocator_private.h @@ -32,7 +32,7 @@ void grub_cpu_relocator_init (void); grub_err_t grub_relocator_prepare_relocs (struct grub_relocator *rel, - void *addr, + grub_addr_t addr, void **relstart, grub_size_t *relsize); void grub_cpu_relocator_forward (void *rels, void *src, void *tgt, grub_size_t size); diff --git a/lib/i386/relocator.c b/lib/i386/relocator.c index 5dd4cde75..55e6b5578 100644 --- a/lib/i386/relocator.c +++ b/lib/i386/relocator.c @@ -84,12 +84,6 @@ grub_size_t grub_relocator_jumper_size = 12; grub_size_t grub_relocator_jumper_size = 7; #endif -static inline void * -ptov (grub_addr_t a) -{ - return (void *) a; -} - void grub_cpu_relocator_init (void) { @@ -154,12 +148,11 @@ grub_err_t grub_relocator32_boot (struct grub_relocator *rel, struct grub_relocator32_state state) { - grub_phys_addr_t target; - void *src; grub_err_t err; void *relst; + grub_relocator_chunk_t ch; - err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, + err = grub_relocator_alloc_chunk_align (rel, &ch, 0, (0xffffffff - RELOCATOR_SIZEOF (32)) + 1, RELOCATOR_SIZEOF (32), 16, GRUB_RELOCATOR_PREFERENCE_NONE); @@ -174,9 +167,11 @@ grub_relocator32_boot (struct grub_relocator *rel, grub_relocator32_esp = state.esp; grub_relocator32_esi = state.esi; - grub_memmove (src, &grub_relocator32_start, RELOCATOR_SIZEOF (32)); + grub_memmove (get_virtual_current_address (ch), &grub_relocator32_start, + RELOCATOR_SIZEOF (32)); - err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL); + err = grub_relocator_prepare_relocs (rel, get_physical_target_address (ch), + &relst, NULL); if (err) return err; @@ -191,12 +186,11 @@ grub_err_t grub_relocator16_boot (struct grub_relocator *rel, struct grub_relocator16_state state) { - grub_phys_addr_t target; - void *src; grub_err_t err; void *relst; + grub_relocator_chunk_t ch; - err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, + err = grub_relocator_alloc_chunk_align (rel, &ch, 0, 0xa0000 - RELOCATOR_SIZEOF (16), RELOCATOR_SIZEOF (16), 16, GRUB_RELOCATOR_PREFERENCE_NONE); @@ -216,12 +210,16 @@ grub_relocator16_boot (struct grub_relocator *rel, grub_relocator16_edx = state.edx; - grub_memmove (src, &grub_relocator16_start, RELOCATOR_SIZEOF (16)); + grub_memmove (get_virtual_current_address (ch), &grub_relocator16_start, + RELOCATOR_SIZEOF (16)); - err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL); + err = grub_relocator_prepare_relocs (rel, get_physical_target_address (ch), + &relst, NULL); if (err) return err; + grub_printf ("%p\n", relst); + asm volatile ("cli"); ((void (*) (void)) relst) (); @@ -234,12 +232,11 @@ grub_relocator64_boot (struct grub_relocator *rel, struct grub_relocator64_state state, grub_addr_t min_addr, grub_addr_t max_addr) { - grub_phys_addr_t target; - void *src; grub_err_t err; void *relst; + grub_relocator_chunk_t ch; - err = grub_relocator_alloc_chunk_align (rel, &src, &target, min_addr, + err = grub_relocator_alloc_chunk_align (rel, &ch, min_addr, max_addr - RELOCATOR_SIZEOF (64), RELOCATOR_SIZEOF (64), 16, GRUB_RELOCATOR_PREFERENCE_NONE); @@ -255,9 +252,11 @@ grub_relocator64_boot (struct grub_relocator *rel, grub_relocator64_rsi = state.rsi; grub_relocator64_cr3 = state.cr3; - grub_memmove (src, &grub_relocator64_start, RELOCATOR_SIZEOF (64)); + grub_memmove (get_virtual_current_address (ch), &grub_relocator64_start, + RELOCATOR_SIZEOF (64)); - err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL); + err = grub_relocator_prepare_relocs (rel, get_physical_target_address (ch), + &relst, NULL); if (err) return err; diff --git a/lib/relocator.c b/lib/relocator.c index b559d12ea..e43463e4d 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -81,6 +81,18 @@ struct grub_relocator_fw_leftover *leftovers; struct grub_relocator_extra_block *extra_blocks; +void * +get_virtual_current_address (grub_relocator_chunk_t in) +{ + return in->srcv; +} + +grub_phys_addr_t +get_physical_target_address (grub_relocator_chunk_t in) +{ + return in->target; +} + struct grub_relocator * grub_relocator_new (void) { @@ -1126,7 +1138,8 @@ adjust_limits (struct grub_relocator *rel, } grub_err_t -grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, +grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, + grub_relocator_chunk_t *out, grub_phys_addr_t target, grub_size_t size) { struct grub_relocator_chunk *chunk; @@ -1221,13 +1234,14 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, void **src, grub_dprintf ("relocator", "cur = %p, next = %p\n", rel->chunks, rel->chunks->next); - *src = chunk->srcv = grub_map_memory (chunk->src, chunk->size); + chunk->srcv = grub_map_memory (chunk->src, chunk->size); + *out = chunk; return GRUB_ERR_NONE; } grub_err_t -grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, - grub_phys_addr_t *target, +grub_relocator_alloc_chunk_align (struct grub_relocator *rel, + grub_relocator_chunk_t *out, grub_phys_addr_t min_addr, grub_phys_addr_t max_addr, grub_size_t size, grub_size_t align, @@ -1262,8 +1276,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, chunk->size = size; chunk->next = rel->chunks; rel->chunks = chunk; - *src = (void *) chunk->src; - *target = chunk->target; + chunk->srcv = grub_map_memory (chunk->src, chunk->size); + *out = chunk; return GRUB_ERR_NONE; } @@ -1300,12 +1314,12 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, return 0; candidate = ALIGN_UP (addr, align); if (candidate < min_addr) - candidate = min_addr; - if (candidate + size >= addr + sz + candidate = ALIGN_UP (min_addr, align); + if (candidate + size > addr + sz || candidate > ALIGN_DOWN (max_addr, align)) return 0; if (preference == GRUB_RELOCATOR_PREFERENCE_HIGH) - candidate = ALIGN_DOWN (addr + sz - size, align); + candidate = ALIGN_DOWN (min (addr + sz - size, max_addr), align); if (!found || (preference == GRUB_RELOCATOR_PREFERENCE_HIGH && candidate > chunk->target)) chunk->target = candidate; @@ -1353,8 +1367,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, void **src, rel->chunks = chunk; grub_dprintf ("relocator", "cur = %p, next = %p\n", rel->chunks, rel->chunks->next); - *src = chunk->srcv = grub_map_memory (chunk->src, chunk->size); - *target = chunk->target; + chunk->srcv = grub_map_memory (chunk->src, chunk->size); + *out = chunk; return GRUB_ERR_NONE; } @@ -1378,7 +1392,7 @@ grub_relocator_unload (struct grub_relocator *rel) } grub_err_t -grub_relocator_prepare_relocs (struct grub_relocator *rel, void *addr, +grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, void **relstart, grub_size_t *relsize) { grub_uint8_t *rels; @@ -1395,12 +1409,12 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, void *addr, grub_relocator_align, rel->relocators_size, &movers_chunk, 1, 1)) return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); - rels = rels0 = movers_chunk.srcv; + rels = rels0 = grub_map_memory (movers_chunk.src, movers_chunk.size); if (relsize) *relsize = rel->relocators_size; - grub_dprintf ("relocator", "Relocs allocated\n"); + grub_dprintf ("relocator", "Relocs allocated at %p\n", movers_chunk.srcv); { unsigned i; diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index cfd10713d..1b2fadd80 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -606,10 +606,14 @@ grub_freebsd_boot (void) if (is_64bit) p_size += 4096 * 3; - err = grub_relocator_alloc_chunk_addr (relocator, (void **) &p, - kern_end, p_size); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + kern_end, p_size); + if (err) + return err; + p = get_virtual_current_address (ch); + } p_target = kern_end; p0 = p; kern_end += p_size; @@ -682,14 +686,18 @@ grub_freebsd_boot (void) grub_uint32_t *stack; grub_addr_t stack_target; - err = grub_relocator_alloc_chunk_align (relocator, (void **) &stack, - &stack_target, - 0x10000, 0x90000, - 3 * sizeof (grub_uint32_t) - + sizeof (bi), 4, - GRUB_RELOCATOR_PREFERENCE_NONE); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (relocator, &ch, + 0x10000, 0x90000, + 3 * sizeof (grub_uint32_t) + + sizeof (bi), 4, + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + return err; + stack = get_virtual_current_address (ch); + stack_target = get_physical_target_address (ch); + } #ifdef GRUB_MACHINE_EFI err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL); @@ -714,14 +722,19 @@ grub_freebsd_boot (void) struct grub_relocator32_state state; grub_uint32_t *stack; grub_addr_t stack_target; - err = grub_relocator_alloc_chunk_align (relocator, (void **) &stack, - &stack_target, - 0x10000, 0x90000, - 9 * sizeof (grub_uint32_t) - + sizeof (bi), 4, - GRUB_RELOCATOR_PREFERENCE_NONE); - if (err) - return err; + + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (relocator, &ch, + 0x10000, 0x90000, + 9 * sizeof (grub_uint32_t) + + sizeof (bi), 4, + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + return err; + stack = get_virtual_current_address (ch); + stack_target = get_physical_target_address (ch); + } #ifdef GRUB_MACHINE_EFI err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL); @@ -772,12 +785,16 @@ grub_openbsd_boot (void) } buf_target = GRUB_BSD_TEMP_BUFFER - 9 * sizeof (grub_uint32_t); - err = grub_relocator_alloc_chunk_addr (relocator, &buf0, - buf_target, tag_buf_len - + sizeof (struct grub_openbsd_bootargs) - + 9 * sizeof (grub_uint32_t)); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, buf_target, + tag_buf_len + + sizeof (struct grub_openbsd_bootargs) + + 9 * sizeof (grub_uint32_t)); + if (err) + return err; + buf0 = get_virtual_current_address (ch); + } stack = (grub_uint32_t *) buf0; arg0 = curarg = stack + 9; @@ -976,12 +993,16 @@ grub_netbsd_boot (void) } arg_target = kern_end; - err = grub_relocator_alloc_chunk_addr (relocator, &curarg, - arg_target, tag_buf_len - + sizeof (struct grub_netbsd_bootinfo) - + tag_count * sizeof (grub_uint32_t)); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + arg_target, tag_buf_len + + sizeof (struct grub_netbsd_bootinfo) + + tag_count * sizeof (grub_uint32_t)); + if (err) + return err; + curarg = get_virtual_current_address (ch); + } arg0 = curarg; bootinfo = (void *) ((grub_uint8_t *) arg0 + tag_buf_len); @@ -1004,12 +1025,16 @@ grub_netbsd_boot (void) } } - err = grub_relocator_alloc_chunk_align (relocator, (void **) &stack, - &stack_target, 0x10000, 0x90000, - 7 * sizeof (grub_uint32_t), 4, - GRUB_RELOCATOR_PREFERENCE_NONE); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (relocator, &ch, 0x10000, 0x90000, + 7 * sizeof (grub_uint32_t), 4, + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + return err; + stack = get_virtual_current_address (ch); + stack_target = get_physical_target_address (ch); + } #ifdef GRUB_MACHINE_EFI err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL); @@ -1107,10 +1132,15 @@ grub_bsd_load_aout (grub_file_t file) if (!relocator) return grub_errno; - err = grub_relocator_alloc_chunk_addr (relocator, &kern_chunk_src, - kern_start, kern_end - kern_start); - if (err) - return err; + { + grub_relocator_chunk_t ch; + + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + kern_start, kern_end - kern_start); + if (err) + return err; + kern_chunk_src = get_virtual_current_address (ch); + } return grub_aout_load (file, ofs, kern_chunk_src, ah.aout32.a_text + ah.aout32.a_data, @@ -1210,15 +1240,19 @@ grub_bsd_load_elf (grub_elf_t elf) if (grub_elf_is_elf32 (elf)) { + grub_relocator_chunk_t ch; + entry = elf->ehdr.ehdr32.e_entry & 0xFFFFFF; err = grub_elf32_phdr_iterate (elf, grub_bsd_elf32_size_hook, NULL); if (err) return err; - err = grub_relocator_alloc_chunk_addr (relocator, &kern_chunk_src, + err = grub_relocator_alloc_chunk_addr (relocator, &ch, kern_start, kern_end - kern_start); if (err) return err; + kern_chunk_src = get_virtual_current_address (ch); + return grub_elf32_load (elf, grub_bsd_elf32_hook, 0, 0); } else if (grub_elf_is_elf64 (elf)) @@ -1246,10 +1280,15 @@ grub_bsd_load_elf (grub_elf_t elf) grub_dprintf ("bsd", "kern_start = %lx, kern_end = %lx\n", (unsigned long) kern_start, (unsigned long) kern_end); - err = grub_relocator_alloc_chunk_addr (relocator, &kern_chunk_src, - kern_start, kern_end - kern_start); - if (err) - return err; + { + grub_relocator_chunk_t ch; + + err = grub_relocator_alloc_chunk_addr (relocator, &ch, kern_start, + kern_end - kern_start); + if (err) + return err; + kern_chunk_src = get_virtual_current_address (ch); + } return grub_elf64_load (elf, grub_bsd_elf64_hook, 0, 0); } @@ -1682,10 +1721,15 @@ grub_cmd_freebsd_module (grub_command_t cmd __attribute__ ((unused)), if ((!file) || (!file->size)) goto fail; - err = grub_relocator_alloc_chunk_addr (relocator, &src, kern_end, - file->size); - if (err) - goto fail; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, kern_end, + file->size); + if (err) + goto fail; + src = get_virtual_current_address (ch); + } + grub_file_read (file, src, file->size); if (grub_errno) @@ -1728,10 +1772,15 @@ grub_netbsd_module_load (char *filename, grub_uint32_t type) if ((!file) || (!file->size)) goto fail; - err = grub_relocator_alloc_chunk_addr (relocator, &src, kern_end, - file->size); - if (err) - goto fail; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, kern_end, + file->size); + if (err) + goto fail; + + src = get_virtual_current_address (ch); + } grub_file_read (file, src, file->size); if (grub_errno) diff --git a/loader/i386/bsdXX.c b/loader/i386/bsdXX.c index 734633704..85f4c6236 100644 --- a/loader/i386/bsdXX.c +++ b/loader/i386/bsdXX.c @@ -103,10 +103,14 @@ SUFFIX (grub_freebsd_load_elfmodule_obj) (struct grub_relocator *relocator, chunk_size += s->sh_size; } - err = grub_relocator_alloc_chunk_addr (relocator, &chunk_src, - module, chunk_size); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + module, chunk_size); + if (err) + return err; + chunk_src = get_virtual_current_address (ch); + } for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) ((char *) shdr + e.e_shnum * e.e_shentsize); @@ -191,10 +195,16 @@ SUFFIX (grub_freebsd_load_elfmodule) (struct grub_relocator *relocator, chunk_size = s->sh_addr + s->sh_size; } - err = grub_relocator_alloc_chunk_addr (relocator, &chunk_src, - module, chunk_size); - if (err) - return err; + { + grub_relocator_chunk_t ch; + + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + module, chunk_size); + if (err) + return err; + + chunk_src = get_virtual_current_address (ch); + } for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) ((char *) shdr + e.e_shnum * e.e_shentsize); @@ -300,10 +310,15 @@ SUFFIX (grub_freebsd_load_elf_meta) (struct grub_relocator *relocator, + 2 * sizeof (grub_freebsd_addr_t); symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t)); - err = grub_relocator_alloc_chunk_addr (relocator, &sym_chunk, - symtarget, chunk_size); - if (err) - return err; + + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + symtarget, chunk_size); + if (err) + return err; + sym_chunk = get_virtual_current_address (ch); + } symstart = symtarget; symend = symstart + chunk_size; @@ -413,10 +428,14 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator, + sizeof (e) + e.e_shnum * e.e_shentsize; symtarget = ALIGN_UP (*kern_end, sizeof (grub_freebsd_addr_t)); - err = grub_relocator_alloc_chunk_addr (relocator, &sym_chunk, - symtarget, chunk_size); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + symtarget, chunk_size); + if (err) + return err; + sym_chunk = get_virtual_current_address (ch); + } symtab.nsyms = 1; symtab.ssyms = symtarget; diff --git a/loader/i386/linux.c b/loader/i386/linux.c index ef1b8309e..e05225f25 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -412,20 +412,28 @@ allocate_pages (grub_size_t prot_size) goto fail; } - err = grub_relocator_alloc_chunk_addr (relocator, &real_mode_mem, - real_mode_target, - (real_size + mmap_size - + efi_mmap_size)); - if (err) - goto fail; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + real_mode_target, + (real_size + mmap_size + + efi_mmap_size)); + if (err) + goto fail; + real_mode_mem = get_virtual_current_address (ch); + } efi_mmap_buf = (grub_uint8_t *) real_mode_mem + real_size + mmap_size; prot_mode_target = GRUB_LINUX_BZIMAGE_ADDR; - err = grub_relocator_alloc_chunk_addr (relocator, &prot_mode_mem, - prot_mode_target, prot_size); - if (err) - goto fail; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + prot_mode_target, prot_size); + if (err) + goto fail; + prot_mode_mem = get_virtual_current_address (ch); + } grub_dprintf ("linux", "real_mode_mem = %lx, real_mode_pages = %x, " "prot_mode_mem = %lx, prot_mode_pages = %x\n", @@ -1111,12 +1119,16 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), goto fail; } - err = grub_relocator_alloc_chunk_align (relocator, &initrd_mem, - &initrd_mem_target, - addr_min, addr, size, 0x1000, - GRUB_RELOCATOR_PREFERENCE_HIGH); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (relocator, &ch, + addr_min, addr, size, 0x1000, + GRUB_RELOCATOR_PREFERENCE_HIGH); + if (err) + return err; + initrd_mem = get_virtual_current_address (ch); + initrd_mem_target = get_physical_target_address (ch); + } if (grub_file_read (file, initrd_mem, size) != size) { diff --git a/loader/i386/multiboot_mbi.c b/loader/i386/multiboot_mbi.c index 2f32c3f4e..ea1385be7 100644 --- a/loader/i386/multiboot_mbi.c +++ b/loader/i386/multiboot_mbi.c @@ -108,6 +108,7 @@ grub_multiboot_load (grub_file_t file) header->load_end_addr - header->load_addr); grub_size_t code_size; void *source; + grub_relocator_chunk_t ch; if (header->bss_end_addr) code_size = (header->bss_end_addr - header->load_addr); @@ -115,7 +116,7 @@ grub_multiboot_load (grub_file_t file) code_size = load_size; err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, - &source, header->load_addr, + &ch, header->load_addr, code_size); if (err) { @@ -123,6 +124,7 @@ grub_multiboot_load (grub_file_t file) grub_free (buffer); return err; } + source = get_virtual_current_address (ch); if ((grub_file_seek (file, offset)) == (grub_off_t) -1) { @@ -322,16 +324,18 @@ grub_multiboot_make_mbi (grub_uint32_t *target) grub_err_t err; grub_size_t bufsize; + grub_relocator_chunk_t ch; bufsize = grub_multiboot_get_mbi_size (); - err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, - (void **) &ptrorig, &ptrdest, + err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, 0, 0xffffffff - bufsize, bufsize, 4, GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; + ptrorig = get_virtual_current_address (ch); + ptrdest = (grub_addr_t) get_virtual_current_address (ch); *target = ptrdest; diff --git a/loader/i386/pc/linux.c b/loader/i386/pc/linux.c index 176220a2b..82640d77d 100644 --- a/loader/i386/pc/linux.c +++ b/loader/i386/pc/linux.c @@ -255,12 +255,15 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), } } - err = grub_relocator_alloc_chunk_addr (relocator, (void **) - &grub_linux_real_chunk, - grub_linux_real_target, - GRUB_LINUX_SETUP_MOVE_SIZE); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + grub_linux_real_target, + GRUB_LINUX_SETUP_MOVE_SIZE); + if (err) + return err; + grub_linux_real_chunk = get_virtual_current_address (ch); + } /* Put the real mode code at the temporary address. */ grub_memmove (grub_linux_real_chunk, &lh, sizeof (lh)); @@ -301,12 +304,15 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), grub_linux_prot_target = GRUB_LINUX_BZIMAGE_ADDR; else grub_linux_prot_target = GRUB_LINUX_ZIMAGE_ADDR; - err = grub_relocator_alloc_chunk_addr (relocator, - (void **) &grub_linux_prot_chunk, - grub_linux_prot_target, - grub_linux16_prot_size); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + grub_linux_prot_target, + grub_linux16_prot_size); + if (err) + return err; + grub_linux_prot_chunk = get_virtual_current_address (ch); + } len = grub_linux16_prot_size; if (grub_file_read (file, grub_linux_prot_chunk, grub_linux16_prot_size) @@ -398,13 +404,17 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), size = grub_file_size (file); - err = grub_relocator_alloc_chunk_align (relocator, (void **) &initrd_chunk, - &initrd_addr, - addr_min, addr_max - size, - size, 0x1000, - GRUB_RELOCATOR_PREFERENCE_HIGH); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (relocator, &ch, + addr_min, addr_max - size, + size, 0x1000, + GRUB_RELOCATOR_PREFERENCE_HIGH); + if (err) + return err; + initrd_chunk = get_virtual_current_address (ch); + initrd_addr = get_physical_target_address (ch); + } if (grub_file_read (file, initrd_chunk, size) != size) { diff --git a/loader/i386/pc/ntldr.c b/loader/i386/pc/ntldr.c index 1368694fb..0c33a0680 100644 --- a/loader/i386/pc/ntldr.c +++ b/loader/i386/pc/ntldr.c @@ -90,10 +90,14 @@ grub_cmd_ntldr (grub_command_t cmd __attribute__ ((unused)), if (! file) goto fail; - err = grub_relocator_alloc_chunk_addr (rel, &bs, 0x7C00, - GRUB_DISK_SECTOR_SIZE); - if (err) - goto fail; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (rel, &ch, 0x7C00, + GRUB_DISK_SECTOR_SIZE); + if (err) + goto fail; + bs = get_virtual_current_address (ch); + } edx = grub_get_root_biosnumber (); dev = grub_device_open (0); @@ -112,10 +116,14 @@ grub_cmd_ntldr (grub_command_t cmd __attribute__ ((unused)), grub_device_close (dev); ntldrsize = grub_file_size (file); - err = grub_relocator_alloc_chunk_addr (rel, &ntldr, GRUB_NTLDR_SEGMENT << 4, - ntldrsize); - if (err) - goto fail; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (rel, &ch, GRUB_NTLDR_SEGMENT << 4, + ntldrsize); + if (err) + goto fail; + ntldr = get_virtual_current_address (ch); + } if (grub_file_read (file, ntldr, ntldrsize) != (grub_ssize_t) ntldrsize) diff --git a/loader/multiboot.c b/loader/multiboot.c index a3ca6266f..6c6afcee9 100644 --- a/loader/multiboot.c +++ b/loader/multiboot.c @@ -284,16 +284,20 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)), return grub_errno; size = grub_file_size (file); - err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &module, - &target, - 0, (0xffffffff - size) + 1, - size, MULTIBOOT_MOD_ALIGN, - GRUB_RELOCATOR_PREFERENCE_NONE); - if (err) - { - grub_file_close (file); - return err; - } + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, + 0, (0xffffffff - size) + 1, + size, MULTIBOOT_MOD_ALIGN, + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + { + grub_file_close (file); + return err; + } + module = get_virtual_current_address (ch); + target = (grub_addr_t) get_virtual_current_address (ch); + } err = grub_multiboot_add_module (target, size, argc - 1, argv + 1); if (err) diff --git a/loader/multiboot_elfxx.c b/loader/multiboot_elfxx.c index 561c7572c..880e93ce5 100644 --- a/loader/multiboot_elfxx.c +++ b/loader/multiboot_elfxx.c @@ -92,14 +92,18 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) grub_dprintf ("multiboot_loader", "segment %d: paddr=0x%lx, memsz=0x%lx, vaddr=0x%lx\n", i, (long) phdr(i)->p_paddr, (long) phdr(i)->p_memsz, (long) phdr(i)->p_vaddr); - err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, - &source, phdr(i)->p_paddr, - phdr(i)->p_memsz); - if (err) - { - grub_dprintf ("multiboot_loader", "Error loading phdr %d\n", i); - return err; - } + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, + &ch, phdr(i)->p_paddr, + phdr(i)->p_memsz); + if (err) + { + grub_dprintf ("multiboot_loader", "Error loading phdr %d\n", i); + return err; + } + source = get_virtual_current_address (ch); + } if (grub_file_seek (file, (grub_off_t) phdr(i)->p_offset) == (grub_off_t) -1) @@ -163,18 +167,22 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) if (sh->sh_size == 0) continue; - err - = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, - &src, &target, 0, - (0xffffffff - sh->sh_size) + 1, - sh->sh_size, - sh->sh_addralign, - GRUB_RELOCATOR_PREFERENCE_NONE); - if (err) - { - grub_dprintf ("multiboot_loader", "Error loading shdr %d\n", i); - return err; - } + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, + &ch, 0, + (0xffffffff - sh->sh_size) + + 1, sh->sh_size, + sh->sh_addralign, + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + { + grub_dprintf ("multiboot_loader", "Error loading shdr %d\n", i); + return err; + } + src = get_virtual_current_address (ch); + target = get_physical_target_address (ch); + } if (grub_file_seek (file, sh->sh_offset) == (grub_off_t) -1) return grub_error (GRUB_ERR_BAD_OS, diff --git a/loader/multiboot_mbi2.c b/loader/multiboot_mbi2.c index c5929f10f..5f4a52800 100644 --- a/loader/multiboot_mbi2.c +++ b/loader/multiboot_mbi2.c @@ -191,6 +191,7 @@ grub_multiboot_load (grub_file_t file) addr_tag->load_end_addr - addr_tag->load_addr); grub_size_t code_size; void *source; + grub_relocator_chunk_t ch; if (addr_tag->bss_end_addr) code_size = (addr_tag->bss_end_addr - addr_tag->load_addr); @@ -198,7 +199,7 @@ grub_multiboot_load (grub_file_t file) code_size = load_size; err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, - &source, addr_tag->load_addr, + &ch, addr_tag->load_addr, code_size); if (err) { @@ -206,6 +207,7 @@ grub_multiboot_load (grub_file_t file) grub_free (buffer); return err; } + source = get_virtual_current_address (ch); if ((grub_file_seek (file, offset)) == (grub_off_t) -1) { @@ -460,19 +462,19 @@ grub_multiboot_make_mbi (grub_uint32_t *target) grub_uint8_t *mbistart; grub_err_t err; grub_size_t bufsize; - grub_addr_t ptrdest; + grub_relocator_chunk_t ch; bufsize = grub_multiboot_get_mbi_size (); - err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, - (void **) &ptrorig, &ptrdest, + err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, 0, 0xffffffff - bufsize, bufsize, 4, GRUB_RELOCATOR_PREFERENCE_NONE); if (err) return err; - *target = ptrdest; + ptrorig = get_virtual_current_address (ch); + *target = get_physical_target_address (ch); mbistart = ptrorig; ptrorig += 2 * sizeof (grub_uint32_t); diff --git a/loader/xnu.c b/loader/xnu.c index f1d372b73..17f850018 100644 --- a/loader/xnu.c +++ b/loader/xnu.c @@ -51,13 +51,15 @@ grub_err_t grub_xnu_heap_malloc (int size, void **src, grub_addr_t *target) { grub_err_t err; + grub_relocator_chunk_t ch; - err = grub_relocator_alloc_chunk_addr (grub_xnu_relocator, src, + err = grub_relocator_alloc_chunk_addr (grub_xnu_relocator, &ch, grub_xnu_heap_target_start + grub_xnu_heap_size, size); if (err) return err; + *src = get_virtual_current_address (ch); *target = grub_xnu_heap_target_start + grub_xnu_heap_size; grub_xnu_heap_size += size; grub_dprintf ("xnu", "val=%p\n", *src); diff --git a/loader/xnu_resume.c b/loader/xnu_resume.c index 2d47df601..6aebc1f34 100644 --- a/loader/xnu_resume.c +++ b/loader/xnu_resume.c @@ -103,25 +103,33 @@ grub_xnu_resume (char *imagename) return grub_errno; } - err = grub_relocator_alloc_chunk_addr (grub_xnu_relocator, &code, - codedest, codesize + GRUB_XNU_PAGESIZE); - if (err) - { - grub_file_close (file); - return err; - } + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (grub_xnu_relocator, &ch, codedest, + codesize + GRUB_XNU_PAGESIZE); + if (err) + { + grub_file_close (file); + return err; + } + code = get_virtual_current_address (ch); + } - err = grub_relocator_alloc_chunk_align (grub_xnu_relocator, &image, - &target_image, 0, - (0xffffffff - hibhead.image_size) + 1, - hibhead.image_size, - GRUB_XNU_PAGESIZE, - GRUB_RELOCATOR_PREFERENCE_NONE); - if (err) - { - grub_file_close (file); - return err; - } + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (grub_xnu_relocator, &ch, 0, + (0xffffffff - hibhead.image_size) + 1, + hibhead.image_size, + GRUB_XNU_PAGESIZE, + GRUB_RELOCATOR_PREFERENCE_NONE); + if (err) + { + grub_file_close (file); + return err; + } + image = get_virtual_current_address (ch); + target_image = get_physical_target_address (ch); + } /* Read code part. */ if (grub_file_seek (file, total_header_size) == (grub_off_t) -1 From 97b2dc70b47501e00f0b6ff3f49d606277d3b8c3 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 22 Apr 2010 02:43:24 +0200 Subject: [PATCH 099/271] Fix segv in reloc.c --- lib/relocator.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/relocator.c b/lib/relocator.c index e43463e4d..eac290c97 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -957,7 +957,8 @@ malloc_in_range (struct grub_relocator *rel, ne->end = alloc_end; ne->next = extra_blocks; ne->prev = &extra_blocks; - extra_blocks->prev = &(ne->next); + if (extra_blocks) + extra_blocks->prev = &(ne->next); extra_blocks = ne; curschu->extra = ne; } From a51df0a1b4dcc32a2a023c504352458a7d292b14 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 22 Apr 2010 02:44:45 +0200 Subject: [PATCH 100/271] Adjust mips relocator --- include/grub/mips/yeeloong/memory.h | 22 +++++++++++++++++++++- lib/mips/relocator.c | 16 ++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/include/grub/mips/yeeloong/memory.h b/include/grub/mips/yeeloong/memory.h index 922db2404..e7e995283 100644 --- a/include/grub/mips/yeeloong/memory.h +++ b/include/grub/mips/yeeloong/memory.h @@ -31,7 +31,6 @@ #define GRUB_ARCH_LOWMEMMAXSIZE 0x10000000 #define GRUB_ARCH_HIGHMEMPSTART 0x10000000 - #define GRUB_MACHINE_MEMORY_AVAILABLE 1 #define GRUB_MACHINE_MEMORY_MAX_TYPE 1 /* This one is special: it's used internally but is never reported @@ -40,6 +39,27 @@ #define GRUB_MACHINE_MEMORY_RESERVED GRUB_MACHINE_MEMORY_HOLE #ifndef ASM_FILE + +typedef grub_addr_t grub_phys_addr_t; + +static inline grub_phys_addr_t +grub_vtop (void *a) +{ + return ((grub_phys_addr_t) a) & 0x1fffffff; +} + +static inline void * +grub_map_memory (grub_phys_addr_t a, grub_size_t size __attribute__ ((unused))) +{ + return (void *) (a | 0x80000000); +} + +static inline void +grub_unmap_memory (void *a __attribute__ ((unused)), + grub_size_t size __attribute__ ((unused))) +{ +} + grub_err_t EXPORT_FUNC (grub_machine_mmap_iterate) (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t, grub_uint32_t)); diff --git a/lib/mips/relocator.c b/lib/mips/relocator.c index 410b68b8b..537b0af2c 100644 --- a/lib/mips/relocator.c +++ b/lib/mips/relocator.c @@ -111,15 +111,16 @@ grub_err_t grub_relocator32_boot (struct grub_relocator *rel, struct grub_relocator32_state state) { - grub_addr_t target; - void *src, *ptr; + grub_relocator_chunk_t ch; + void *ptr; grub_err_t err; - grub_addr_t relst; + void *relst; grub_size_t relsize; grub_size_t stateset_size = 31 * REGW_SIZEOF + JUMP_SIZEOF; unsigned i; + grub_addr_t vtarget; - err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, + err = grub_relocator_alloc_chunk_align (rel, &ch, 0, (0xffffffff - stateset_size) + 1, stateset_size, sizeof (grub_uint32_t), @@ -127,12 +128,15 @@ grub_relocator32_boot (struct grub_relocator *rel, if (err) return err; - ptr = src; + ptr = get_virtual_current_address (ch); for (i = 1; i < 32; i++) write_reg (i, state.gpr[i], &ptr); write_jump (state.jumpreg, &ptr); - err = grub_relocator_prepare_relocs (rel, target, &relst, &relsize); + vtarget = (grub_addr_t) grub_map_memory (get_physical_target_address (ch), + stateset_size); + + err = grub_relocator_prepare_relocs (rel, vtarget, &relst, &relsize); if (err) return err; From 530a4814cc0b7ac0ceca90c81ddfcd5eb590c5d3 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 22 Apr 2010 02:45:06 +0200 Subject: [PATCH 101/271] Adjust mips/linux.c --- loader/mips/linux.c | 60 +++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/loader/mips/linux.c b/loader/mips/linux.c index 4c59e31d0..a3569c34c 100644 --- a/loader/mips/linux.c +++ b/loader/mips/linux.c @@ -33,9 +33,6 @@ #include #include -#define ELF32_LOADMASK (0x00000000UL) -#define ELF64_LOADMASK (0x0000000000000000ULL) - static grub_dl_t my_mod; static int loaded; @@ -85,7 +82,7 @@ grub_linux_load32 (grub_elf_t elf, void **extra_mem, grub_size_t extra_size) grub_err_t err; /* Linux's entry point incorrectly contains a virtual address. */ - entry_addr = elf->ehdr.ehdr32.e_entry & ~ELF32_LOADMASK; + entry_addr = elf->ehdr.ehdr32.e_entry; linux_size = grub_elf32_size (elf, &base); if (linux_size == 0) @@ -101,10 +98,15 @@ grub_linux_load32 (grub_elf_t elf, void **extra_mem, grub_size_t extra_size) if (!relocator) return grub_errno; - err = grub_relocator_alloc_chunk_addr (relocator, (void **) &playground, - target_addr, linux_size); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + target_addr & 0x1fffffff, + linux_size); + if (err) + return err; + playground = get_virtual_current_address (ch); + } *extra_mem = playground + extraoff; @@ -135,7 +137,7 @@ grub_linux_load64 (grub_elf_t elf, void **extra_mem, grub_size_t extra_size) grub_err_t err; /* Linux's entry point incorrectly contains a virtual address. */ - entry_addr = elf->ehdr.ehdr64.e_entry & ~ELF64_LOADMASK; + entry_addr = elf->ehdr.ehdr64.e_entry; linux_size = grub_elf64_size (elf, &base); if (linux_size == 0) @@ -151,10 +153,15 @@ grub_linux_load64 (grub_elf_t elf, void **extra_mem, grub_size_t extra_size) if (!relocator) return grub_errno; - err = grub_relocator_alloc_chunk_addr (relocator, (void **) &playground, - target_addr, linux_size); - if (err) - return err; + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + target_addr & 0x1fffffff, + linux_size); + if (err) + return err; + playground = get_virtual_current_address (ch); + } *extra_mem = playground + extraoff; @@ -344,18 +351,23 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), size = grub_file_size (file); - err = grub_relocator_alloc_chunk_align (relocator, &initrd_src, - &initrd_dest, - target_addr + linux_size + 0x10000, - (0xffffffff - size) + 1, - size, 0x10000, - GRUB_RELOCATOR_PREFERENCE_NONE); + { + grub_relocator_chunk_t ch; - if (err) - { - grub_file_close (file); - return err; - } + err = grub_relocator_alloc_chunk_align (relocator, &ch, + target_addr + linux_size + 0x10000, + (0xffffffff - size) + 1, + size, 0x10000, + GRUB_RELOCATOR_PREFERENCE_NONE); + + if (err) + { + grub_file_close (file); + return err; + } + initrd_src = get_virtual_current_address (ch); + initrd_dest = get_physical_target_address (ch) | 0x80000000; + } if (grub_file_read (file, initrd_src, size) != size) { From 6adde6749e034c0d718b974e6274f5a175330853 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 27 Apr 2010 13:23:11 +0200 Subject: [PATCH 102/271] efi boottests --- conf/i386-efi.rmk | 2 ++ conf/i386-pc.rmk | 5 +++-- conf/i386.rmk | 8 ++++---- conf/x86-efi.rmk | 2 ++ conf/x86_64-efi.rmk | 2 ++ tests/util/grub-shell.in | 6 ++++-- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/conf/i386-efi.rmk b/conf/i386-efi.rmk index e826cb333..b50c77d3c 100644 --- a/conf/i386-efi.rmk +++ b/conf/i386-efi.rmk @@ -2,4 +2,6 @@ COMMON_LDFLAGS = -melf_i386 +QEMU32=qemu-system-i386 + include $(srcdir)/conf/x86-efi.mk diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 801caba28..1888c2afb 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -292,12 +292,13 @@ pkglib_DATA += efiemu32.o efiemu64.o endif BOOTTARGET=cd +QEMU32=qemu-system-i386 bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null BOOTCHECKS+=bootcheck-linux16-i386 bootcheck-linux16-x86_64 diff --git a/conf/i386.rmk b/conf/i386.rmk index a3f79dd43..9cec10a80 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -89,16 +89,16 @@ kfreebsd-mfsroot.%: kfreebsd.init.% Makefile CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/mfsroot=kfreebsd-mfsroot.i386 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/mfsroot=kfreebsd-mfsroot.i386 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot=kfreebsd-mfsroot.x86_64 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot=kfreebsd-mfsroot.x86_64 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 diff --git a/conf/x86-efi.rmk b/conf/x86-efi.rmk index 286ba988e..61d225bc7 100644 --- a/conf/x86-efi.rmk +++ b/conf/x86-efi.rmk @@ -104,5 +104,7 @@ xnu_mod_CFLAGS = $(COMMON_CFLAGS) xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) xnu_mod_ASFLAGS = $(COMMON_ASFLAGS) +BOOTTARGET=cd + include $(srcdir)/conf/i386.mk include $(srcdir)/conf/common.mk diff --git a/conf/x86_64-efi.rmk b/conf/x86_64-efi.rmk index 200621280..5ef3cc434 100644 --- a/conf/x86_64-efi.rmk +++ b/conf/x86_64-efi.rmk @@ -2,4 +2,6 @@ COMMON_LDFLAGS = -melf_x86_64 +QEMU32=qemu-system-x86_64 + include $(srcdir)/conf/x86-efi.mk diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index 5726ec0d8..1ff562096 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -145,8 +145,10 @@ if [ x$boot = xfd ]; then device=fda bootdev=a fi -${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} -boot ${bootdev} | tr -d "\r" -rm -f ${isofile} + +echo ${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} -boot ${bootdev} +#${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} -boot ${bootdev} | tr -d "\r" +#rm -f ${isofile} rm -f ${tmpfile} ${cfgfile} exit 0 From d534028780bc8aa39231a3d10ef811322feda2b8 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 27 Apr 2010 13:45:08 +0200 Subject: [PATCH 103/271] Remove debugging leftovers --- tests/util/grub-shell.in | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index 1ff562096..d8ea588a7 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -146,9 +146,8 @@ if [ x$boot = xfd ]; then bootdev=a fi -echo ${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} -boot ${bootdev} -#${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} -boot ${bootdev} | tr -d "\r" -#rm -f ${isofile} +${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} -boot ${bootdev} | tr -d "\r" +rm -f ${isofile} rm -f ${tmpfile} ${cfgfile} exit 0 From 95327fc92dbdb567fd4980f9144e324e425d32e2 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 27 Apr 2010 17:25:32 +0200 Subject: [PATCH 104/271] Fix blocker counter --- lib/relocator.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/relocator.c b/lib/relocator.c index eac290c97..4c180e72a 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -446,6 +446,8 @@ malloc_in_range (struct grub_relocator *rel, for (cur = extra_blocks; cur; cur = cur->next) maxevents += 2; } + for (r = grub_mm_base; r; r = r->next) + maxevents += 2; maxevents += grub_relocator_firmware_get_max_events (); @@ -791,6 +793,8 @@ malloc_in_range (struct grub_relocator *rel, fend = ALIGN_UP (alloc_end, GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); + grub_dprintf ("relocator", "requesting %lx-%lx\n", + fstart, fend); /* The failure here can be very expensive. */ if (!grub_relocator_firmware_alloc_region (fstart, fend - fstart)) From dc106194612b2a60e8759aaa3a5cc887ae145a3d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 27 Apr 2010 21:41:22 +0200 Subject: [PATCH 105/271] Add midding qemu-opts --- conf/i386.rmk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/i386.rmk b/conf/i386.rmk index c18ce9699..9007b2889 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -145,10 +145,10 @@ bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot=kfreebsd-mfsroot.x86_64 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.i386 grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot=knetbsd.miniroot-image.i386 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot=knetbsd.miniroot-image.i386 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.x86_64 grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/miniroot=knetbsd.miniroot-image.x86_64 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/miniroot=knetbsd.miniroot-image.x86_64 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null From 708745c8a74cbb7aa004fa400cb710e578cf0b8e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 27 Apr 2010 21:42:15 +0200 Subject: [PATCH 106/271] Shutdown manually --- tests/boot/kfreebsd.init-i386.S | 42 ++++++++++++++++++++++++++++++- tests/boot/kfreebsd.init-x86_64.S | 40 +++++++++++++++++++++++++++-- tests/boot/knetbsd.init-x86_64.S | 31 ++++++++++++++++++++++- tests/boot/linux.init-i386.S | 25 ++++++++++++++++++ 4 files changed, 134 insertions(+), 4 deletions(-) diff --git a/tests/boot/kfreebsd.init-i386.S b/tests/boot/kfreebsd.init-i386.S index 8812b650b..12c94a036 100644 --- a/tests/boot/kfreebsd.init-i386.S +++ b/tests/boot/kfreebsd.init-i386.S @@ -21,12 +21,16 @@ #define SYSCALL_OPEN 5 #define SYSCALL_WRITE 4 #define SYSCALL_RESET 55 +#define SYSCALL_FSYNC 95 +#define SYSCALL_ARCH 165 #define SYSCALL_EXIT 1 +#define SYSCALL_ARCH_IOPL 4 #define SYSCALL_INT 0x80 #define RESET_NOSYNC 0x4 #define RESET_HALT 0x8 #define RESET_POWEROFF 0x4000 +#define SHUTDOWN_PORT 0x8900 .section ".init", "ax" .global start,_start @@ -52,6 +56,39 @@ _start: pushl $0 int $SYSCALL_INT addl $16, %esp + + /* fsync. */ + movl $SYSCALL_FSYNC, %eax + pushl %ecx + pushl $0 + int $SYSCALL_INT + addl $8, %esp + + /* IOPL. */ + movl $SYSCALL_ARCH, %eax + pushl $iopl_arg + pushl $SYSCALL_ARCH_IOPL + pushl $0 + int $SYSCALL_INT + addl $12, %esp + + movw $SHUTDOWN_PORT, %dx + movb $'S', %al + outb %al, %dx + movb $'h', %al + outb %al, %dx + movb $'u', %al + outb %al, %dx + movb $'t', %al + outb %al, %dx + movb $'d', %al + outb %al, %dx + movb $'o', %al + outb %al, %dx + movb $'w', %al + outb %al, %dx + movb $'n', %al + outb %al, %dx /* shutdown. */ movl $SYSCALL_RESET, %eax @@ -71,4 +108,7 @@ device: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: - \ No newline at end of file +iopl_arg: + .long SHUTDOWN_PORT + .long 1 + .long 1 diff --git a/tests/boot/kfreebsd.init-x86_64.S b/tests/boot/kfreebsd.init-x86_64.S index edff0d782..d2907b3a8 100644 --- a/tests/boot/kfreebsd.init-x86_64.S +++ b/tests/boot/kfreebsd.init-x86_64.S @@ -18,14 +18,18 @@ #define MODE_RDRW 2 #define FLAGS_NONE 0 +#define SYSCALL_ARCH 165 #define SYSCALL_OPEN 5 #define SYSCALL_WRITE 4 #define SYSCALL_RESET 55 #define SYSCALL_EXIT 1 +#define SYSCALL_ARCH_IOPL 4 +#define SYSCALL_FSYNC 95 #define RESET_NOSYNC 0x4 #define RESET_HALT 0x8 #define RESET_POWEROFF 0x4000 +#define SHUTDOWN_PORT 0x8900 .section ".init", "ax" .global start,_start @@ -40,10 +44,38 @@ _start: movq %rax, %rdi /* write. */ - movq $SYSCALL_WRITE, %rax leaq message, %rsi - movq $(messageend-message), %rdx + movq $SYSCALL_WRITE, %rax + movq $(messageend - message), %rdx syscall + + /* fsync. */ + movq $SYSCALL_FSYNC, %rax + syscall + + /* IOPL. */ + movq $SYSCALL_ARCH, %rax + movq $SYSCALL_ARCH_IOPL, %rdi + leaq iopl_arg, %rsi + syscall + + movw $SHUTDOWN_PORT, %dx + movb $'S', %al + outb %al, %dx + movb $'h', %al + outb %al, %dx + movb $'u', %al + outb %al, %dx + movb $'t', %al + outb %al, %dx + movb $'d', %al + outb %al, %dx + movb $'o', %al + outb %al, %dx + movb $'w', %al + outb %al, %dx + movb $'n', %al + outb %al, %dx /* shutdown. */ movq $SYSCALL_RESET, %rax @@ -60,3 +92,7 @@ device: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: +iopl_arg: + .long SHUTDOWN_PORT + .long 1 + .long 1 \ No newline at end of file diff --git a/tests/boot/knetbsd.init-x86_64.S b/tests/boot/knetbsd.init-x86_64.S index dfc64e99d..05a494594 100644 --- a/tests/boot/knetbsd.init-x86_64.S +++ b/tests/boot/knetbsd.init-x86_64.S @@ -23,12 +23,15 @@ #define SYSCALL_RESET 208 #define SYSCALL_EXIT 1 #define SYSCALL_MKNOD 14 +#define SYSCALL_ARCH 165 #define SYSCALL_MOUNT 410 #define SYSCALL_INT 0x80 +#define SYSCALL_ARCH_IOPL 2 #define RESET_NOSYNC 0x4 #define RESET_HALT 0x8 #define RESET_POWEROFF 0x800 +#define SHUTDOWN_PORT 0x8900 .section ".init", "ax" .global start,_start @@ -64,6 +67,30 @@ _start: leaq message, %rsi syscall + /* IOPL. */ + movq $SYSCALL_ARCH, %rax + movq $SYSCALL_ARCH_IOPL, %rdi + leaq iopl_arg, %rsi + syscall + + movw $SHUTDOWN_PORT, %dx + movb $'S', %al + outb %al, %dx + movb $'h', %al + outb %al, %dx + movb $'u', %al + outb %al, %dx + movb $'t', %al + outb %al, %dx + movb $'d', %al + outb %al, %dx + movb $'o', %al + outb %al, %dx + movb $'w', %al + outb %al, %dx + movb $'n', %al + outb %al, %dx + /* shutdown. */ movq $SYSCALL_RESET, %rax movq $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC), %rdi @@ -118,4 +145,6 @@ tmpfs_args: .long 0777 /* Alignment long. */ .long 0 -tmpfs_args_end: \ No newline at end of file +tmpfs_args_end: +iopl_arg: + .long 3 \ No newline at end of file diff --git a/tests/boot/linux.init-i386.S b/tests/boot/linux.init-i386.S index a79a5787e..f3eca6d88 100644 --- a/tests/boot/linux.init-i386.S +++ b/tests/boot/linux.init-i386.S @@ -18,6 +18,7 @@ #define SYSCALL_WRITE 4 #define SYSCALL_RESET 88 +#define SYSCALL_IOPL 110 #define SYSCALL_EXIT 1 #define SYSCALL_INT 0x80 @@ -26,6 +27,8 @@ #define SHUTDOWN_MAGIC2 0x28121969 #define SHUTDOWN_MAGIC3 0x4321fedc +#define SHUTDOWN_PORT 0x8900 + .text .global start, _start _start: @@ -37,6 +40,28 @@ start: movl $(messageend-message), %edx int $SYSCALL_INT + movl $SYSCALL_IOPL, %eax + movl $3, %ebx + int $SYSCALL_INT + + movw $SHUTDOWN_PORT, %dx + movb $'S', %al + outb %al, %dx + movb $'h', %al + outb %al, %dx + movb $'u', %al + outb %al, %dx + movb $'t', %al + outb %al, %dx + movb $'d', %al + outb %al, %dx + movb $'o', %al + outb %al, %dx + movb $'w', %al + outb %al, %dx + movb $'n', %al + outb %al, %dx + /* shutdown. */ movl $SYSCALL_RESET, %eax movl $SHUTDOWN_MAGIC1, %ebx From e7b43a6550fa6d46f9189e6758ec51d56b48ddf2 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 27 Apr 2010 21:42:45 +0200 Subject: [PATCH 107/271] Use hasbrokenint12 --- tests/boot/kfreebsd.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/boot/kfreebsd.cfg b/tests/boot/kfreebsd.cfg index 71b97b67e..8f339cd7f 100644 --- a/tests/boot/kfreebsd.cfg +++ b/tests/boot/kfreebsd.cfg @@ -1,6 +1,7 @@ kfreebsd /kfreebsd -h kfreebsd_loadenv /kfreebsd_env kfreebsd_module /mfsroot type=mfs_root +set kFreeBSD.hw.hasbrokenint12=1 boot # Shouln't happen halt From dce9e78a4f65fa009465cba9b9bceee8a85f720b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 28 Apr 2010 09:40:50 +0200 Subject: [PATCH 108/271] Increase bootcheck timeout --- conf/common.rmk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/common.rmk b/conf/common.rmk index 0a622ca04..e1d148987 100644 --- a/conf/common.rmk +++ b/conf/common.rmk @@ -865,7 +865,8 @@ grub_mkpasswd_pbkdf2_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(sr # Randomly generated SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d -BOOTCHECK_TIMEOUT=60 +# tianocore cd access is very slow +BOOTCHECK_TIMEOUT=600 bootcheck: $(BOOTCHECKS) From 3af6010ff71a3c9f1b9a11bb67991dc55fba9a12 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 28 Apr 2010 09:41:34 +0200 Subject: [PATCH 109/271] Disable kfreebsd-x86_64 and knetbsd-i386 bootchecks on non-pc --- conf/i386-pc.rmk | 6 +++++- conf/i386.rmk | 3 +-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 95a996c75..66d2447ad 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -286,7 +286,11 @@ bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(s bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -BOOTCHECKS+=bootcheck-linux16-i386 bootcheck-linux16-x86_64 +BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64 +# It is defined in i386.rmk but requires ACPI +BOOTCHECKS += bootcheck-kfreebsd-x86_64 +# It is defined in i386.rmk but crashes early on non-BIOS +BOOTCHECKS += bootcheck-knetbsd-i386 include $(srcdir)/conf/i386.mk include $(srcdir)/conf/common.mk diff --git a/conf/i386.rmk b/conf/i386.rmk index 9007b2889..97becfc7b 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -157,8 +157,7 @@ bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 \ - bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ - bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 + bootcheck-kfreebsd-i386 bootcheck-knetbsd-x86_64 .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ From ae3c4cd010ff4aba666415a9804169b7ad0aeb84 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 29 Apr 2010 13:26:38 +0200 Subject: [PATCH 110/271] Remove loader.h --- conf/common.rmk | 2 +- conf/i386-pc.rmk | 2 +- include/grub/i386/coreboot/loader.h | 1 - include/grub/i386/efi/loader.h | 22 ------------------ include/grub/i386/ieee1275/loader.h | 29 ----------------------- include/grub/mips/yeeloong/loader.h | 0 include/grub/powerpc/ieee1275/loader.h | 32 -------------------------- include/grub/sparc64/ieee1275/loader.h | 27 ---------------------- 8 files changed, 2 insertions(+), 113 deletions(-) delete mode 100644 include/grub/i386/coreboot/loader.h delete mode 100644 include/grub/i386/efi/loader.h delete mode 100644 include/grub/i386/ieee1275/loader.h delete mode 100644 include/grub/mips/yeeloong/loader.h delete mode 100644 include/grub/powerpc/ieee1275/loader.h delete mode 100644 include/grub/sparc64/ieee1275/loader.h diff --git a/conf/common.rmk b/conf/common.rmk index e1d148987..a8c881276 100644 --- a/conf/common.rmk +++ b/conf/common.rmk @@ -118,7 +118,7 @@ kernel_img_HEADERS += boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ list.h handler.h command.h i18n.h env_private.h libgcc.h mm_private.h ifneq ($(platform), emu) -kernel_img_HEADERS += machine/memory.h machine/loader.h +kernel_img_HEADERS += machine/memory.h endif symlist.c: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h gensymlist.sh diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 66d2447ad..d403d19f1 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -53,7 +53,7 @@ kernel_img_SOURCES = kern/i386/pc/startup.S \ term/i386/pc/console.c term/i386/vga_common.c \ symlist.c kernel_img_HEADERS += machine/biosdisk.h machine/vga.h machine/vbe.h \ - machine/pxe.h i386/pit.h machine/kernel.h + machine/pxe.h i386/pit.h machine/kernel.h machine/loader.h kernel_img_CFLAGS = $(COMMON_CFLAGS) $(TARGET_IMG_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS += $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)0x8200 $(COMMON_CFLAGS) diff --git a/include/grub/i386/coreboot/loader.h b/include/grub/i386/coreboot/loader.h deleted file mode 100644 index d3f36bba5..000000000 --- a/include/grub/i386/coreboot/loader.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/include/grub/i386/efi/loader.h b/include/grub/i386/efi/loader.h deleted file mode 100644 index 222dae82d..000000000 --- a/include/grub/i386/efi/loader.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2003,2004,2006,2007 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_LOADER_MACHINE_HEADER -#define GRUB_LOADER_MACHINE_HEADER 1 - -#endif /* ! GRUB_LOADER_MACHINE_HEADER */ diff --git a/include/grub/i386/ieee1275/loader.h b/include/grub/i386/ieee1275/loader.h deleted file mode 100644 index 20df2e1d6..000000000 --- a/include/grub/i386/ieee1275/loader.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2003,2004,2007,2008 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_LOADER_MACHINE_HEADER -#define GRUB_LOADER_MACHINE_HEADER 1 - -#include -#include -#include - -void grub_rescue_cmd_linux (int argc, char *argv[]); -void grub_rescue_cmd_initrd (int argc, char *argv[]); - -#endif /* ! GRUB_LOADER_MACHINE_HEADER */ diff --git a/include/grub/mips/yeeloong/loader.h b/include/grub/mips/yeeloong/loader.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/include/grub/powerpc/ieee1275/loader.h b/include/grub/powerpc/ieee1275/loader.h deleted file mode 100644 index 606bfcd0b..000000000 --- a/include/grub/powerpc/ieee1275/loader.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2004,2007 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_LOADER_MACHINE_HEADER -#define GRUB_LOADER_MACHINE_HEADER 1 - -/* The symbol shared between the normal mode and rescue mode - loader. */ -void grub_rescue_cmd_linux (int argc, char *argv[]); -void grub_rescue_cmd_initrd (int argc, char *argv[]); - -void grub_linux_init (void); -void grub_linux_fini (void); -void grub_linux_normal_init (void); -void grub_linux_normal_fini (void); - -#endif /* ! GRUB_LOADER_MACHINE_HEADER */ diff --git a/include/grub/sparc64/ieee1275/loader.h b/include/grub/sparc64/ieee1275/loader.h deleted file mode 100644 index 12bb2a69b..000000000 --- a/include/grub/sparc64/ieee1275/loader.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 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 . - */ - -#ifndef GRUB_LOADER_MACHINE_HEADER -#define GRUB_LOADER_MACHINE_HEADER 1 - -/* The symbol shared between the normal mode and rescue mode - loader. */ -void grub_rescue_cmd_linux (int argc, char *argv[]); -void grub_rescue_cmd_initrd (int argc, char *argv[]); - -#endif /* ! GRUB_LOADER_MACHINE_HEADER */ From 3bd6968e566d70d763dd4b0623849bab12a01120 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 29 Apr 2010 13:28:46 +0200 Subject: [PATCH 111/271] fix i386-qemu building problems --- conf/i386-qemu.rmk | 19 +------------------ conf/i386.rmk | 2 ++ 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/conf/i386-qemu.rmk b/conf/i386-qemu.rmk index ff263245d..6d387a6f6 100644 --- a/conf/i386-qemu.rmk +++ b/conf/i386-qemu.rmk @@ -43,7 +43,7 @@ bin_SCRIPTS += grub-mkrescue grub_mkrescue_SOURCES = util/grub-mkrescue.in # Modules. -pkglib_MODULES = linux.mod aout.mod halt.mod datetime.mod mmap.mod +pkglib_MODULES = halt.mod datetime.mod mmap.mod # For mmap.mod. mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c @@ -51,28 +51,11 @@ mmap_mod_CFLAGS = $(COMMON_CFLAGS) mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For halt.mod. halt_mod_SOURCES = commands/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) halt_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For aout.mod. -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bsd.mod -pkglib_MODULES += bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S -bsd_mod_CFLAGS = $(COMMON_CFLAGS) -bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) -bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) - # For datetime.mod datetime_mod_SOURCES = lib/cmos_datetime.c datetime_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/conf/i386.rmk b/conf/i386.rmk index 97becfc7b..004dab7f3 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -10,10 +10,12 @@ at_keyboard_mod_SOURCES = term/at_keyboard.c at_keyboard_mod_CFLAGS = $(COMMON_CFLAGS) at_keyboard_mod_LDFLAGS = $(COMMON_LDFLAGS) +ifneq ($(platform), qemu) pkglib_MODULES += vga_text.mod vga_text_mod_SOURCES = term/i386/pc/vga_text.c term/i386/vga_common.c vga_text_mod_CFLAGS = $(COMMON_CFLAGS) vga_text_mod_LDFLAGS = $(COMMON_LDFLAGS) +endif pkglib_MODULES += relocator.mod ifeq ($(platform), ieee1275) From 6406a79dffb55949deb854ef449d5e70c7f632c5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 29 Apr 2010 13:36:53 +0200 Subject: [PATCH 112/271] switch off manually on linux x86_64 --- tests/boot/linux.init-x86_64.S | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/boot/linux.init-x86_64.S b/tests/boot/linux.init-x86_64.S index 17ba8040c..63dca5e20 100644 --- a/tests/boot/linux.init-x86_64.S +++ b/tests/boot/linux.init-x86_64.S @@ -18,6 +18,7 @@ #define SYSCALL_WRITE 1 #define SYSCALL_RESET 169 +#define SYSCALL_IOPL 172 #define SYSCALL_EXIT 60 #define STDOUT 1 @@ -25,6 +26,8 @@ #define SHUTDOWN_MAGIC2 0x28121969 #define SHUTDOWN_MAGIC3 0x4321fedc +#define SHUTDOWN_PORT 0x8900 + .text .global start, _start _start: @@ -36,6 +39,28 @@ start: movq $(messageend-message), %rdx syscall + movq $SYSCALL_IOPL, %rax + movq $3, %rdi + syscall + + movw $SHUTDOWN_PORT, %dx + movb $'S', %al + outb %al, %dx + movb $'h', %al + outb %al, %dx + movb $'u', %al + outb %al, %dx + movb $'t', %al + outb %al, %dx + movb $'d', %al + outb %al, %dx + movb $'o', %al + outb %al, %dx + movb $'w', %al + outb %al, %dx + movb $'n', %al + outb %al, %dx + /* shutdown. */ movq $SYSCALL_RESET, %rax movq $SHUTDOWN_MAGIC1, %rdi From 421e8a55915429de1388c01467923ab2a3efeab3 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 1 May 2010 13:23:19 +0200 Subject: [PATCH 113/271] Fix ppc compilation problems --- conf/powerpc-ieee1275.rmk | 2 +- conf/tests.rmk | 2 +- include/grub/powerpc/memory.h | 47 ++++++++ include/grub/relocator_private.h | 10 ++ lib/powerpc/relocator.c | 13 ++- lib/relocator.c | 188 ++++++++++++++++++------------- loader/powerpc/ieee1275/linux.c | 1 - 7 files changed, 175 insertions(+), 88 deletions(-) create mode 100644 include/grub/powerpc/memory.h diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk index 933aefe77..86ec85bfc 100644 --- a/conf/powerpc-ieee1275.rmk +++ b/conf/powerpc-ieee1275.rmk @@ -67,7 +67,7 @@ datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) # For relocator.mod. pkglib_MODULES += relocator.mod -relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/relocator.c lib/$(target_cpu)/relocator_asm.S +relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/relocator.c lib/$(target_cpu)/relocator_asm.S lib/ieee1275/relocator.c relocator_mod_CFLAGS = $(COMMON_CFLAGS) relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/conf/tests.rmk b/conf/tests.rmk index d48bc3dd9..e86c315d3 100644 --- a/conf/tests.rmk +++ b/conf/tests.rmk @@ -2,7 +2,7 @@ # For grub-shell grub-shell: tests/util/grub-shell.in config.status - ./config.status --file=$@:$< + ./config.status --file=-:$< | sed -e 's,@pkglib_DATA@,$(pkglib_DATA),g' > $@ chmod +x $@ check_SCRIPTS += grub-shell CLEANFILES += grub-shell diff --git a/include/grub/powerpc/memory.h b/include/grub/powerpc/memory.h new file mode 100644 index 000000000..b748f33c5 --- /dev/null +++ b/include/grub/powerpc/memory.h @@ -0,0 +1,47 @@ +/* memory.h - describe the memory map */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,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 . + */ + +#ifndef GRUB_MEMORY_CPU_HEADER +#define GRUB_MEMORY_CPU_HEADER 1 + +#ifndef ASM_FILE + +typedef grub_addr_t grub_phys_addr_t; + +static inline grub_phys_addr_t +grub_vtop (void *a) +{ + return (grub_phys_addr_t) a; +} + +static inline void * +grub_map_memory (grub_phys_addr_t a, grub_size_t size __attribute__ ((unused))) +{ + return (void *) a; +} + +static inline void +grub_unmap_memory (void *a __attribute__ ((unused)), + grub_size_t size __attribute__ ((unused))) +{ +} + +#endif + +#endif /* ! GRUB_MEMORY_CPU_HEADER */ diff --git a/include/grub/relocator_private.h b/include/grub/relocator_private.h index 10e445bfe..1c563cb64 100644 --- a/include/grub/relocator_private.h +++ b/include/grub/relocator_private.h @@ -40,6 +40,8 @@ void grub_cpu_relocator_backward (void *rels, void *src, void *tgt, grub_size_t size); void grub_cpu_relocator_jumper (void *rels, grub_addr_t addr); +/* Remark: GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT_LOG = 1 or 2 + aren't supported. */ #ifdef GRUB_MACHINE_IEEE1275 #define GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS 1 #define GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT_LOG 0 @@ -50,6 +52,12 @@ void grub_cpu_relocator_jumper (void *rels, grub_addr_t addr); #define GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS 0 #endif +#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS && GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT_LOG != 0 +#define GRUB_RELOCATOR_HAVE_LEFTOVERS 1 +#else +#define GRUB_RELOCATOR_HAVE_LEFTOVERS 0 +#endif + #if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS #define GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT (1 << GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT_LOG) #endif @@ -67,6 +75,8 @@ struct grub_relocator_mmap_event /* To track the regions already in heap. */ FIRMWARE_BLOCK_START = 6, FIRMWARE_BLOCK_END = FIRMWARE_BLOCK_START | 1, +#endif +#if GRUB_RELOCATOR_HAVE_LEFTOVERS REG_LEFTOVER_START = 8, REG_LEFTOVER_END = REG_LEFTOVER_START | 1, #endif diff --git a/lib/powerpc/relocator.c b/lib/powerpc/relocator.c index 9f5fc1c7f..85dfbeaf3 100644 --- a/lib/powerpc/relocator.c +++ b/lib/powerpc/relocator.c @@ -107,15 +107,15 @@ grub_err_t grub_relocator32_boot (struct grub_relocator *rel, struct grub_relocator32_state state) { - grub_addr_t target; - void *src, *ptr; + void *ptr; grub_err_t err; - grub_addr_t relst; + void *relst; grub_size_t relsize; grub_size_t stateset_size = 32 * REGW_SIZEOF + JUMP_SIZEOF; unsigned i; + grub_relocator_chunk_t ch; - err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0, + err = grub_relocator_alloc_chunk_align (rel, &ch, 0, (0xffffffff - stateset_size) + 1, stateset_size, sizeof (grub_uint32_t), @@ -123,12 +123,13 @@ grub_relocator32_boot (struct grub_relocator *rel, if (err) return err; - ptr = src; + ptr = get_virtual_current_address (ch); for (i = 0; i < 32; i++) write_reg (i, state.gpr[i], &ptr); write_jump (&ptr); - err = grub_relocator_prepare_relocs (rel, target, &relst, &relsize); + err = grub_relocator_prepare_relocs (rel, get_physical_target_address (ch), + &relst, &relsize); if (err) return err; diff --git a/lib/relocator.c b/lib/relocator.c index 4c180e72a..6fbdb71d7 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -45,7 +45,9 @@ struct grub_relocator_subchunk grub_size_t size; grub_size_t pre_size; struct grub_relocator_extra_block *extra; +#if GRUB_RELOCATOR_HAVE_LEFTOVERS struct grub_relocator_fw_leftover *pre, *post; +#endif }; struct grub_relocator_chunk @@ -67,7 +69,7 @@ struct grub_relocator_extra_block grub_phys_addr_t end; }; -#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS +#if GRUB_RELOCATOR_HAVE_LEFTOVERS struct grub_relocator_fw_leftover { struct grub_relocator_fw_leftover *next; @@ -241,7 +243,7 @@ allocate_inreg (grub_phys_addr_t paddr, grub_size_t size, } } -#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS +#if GRUB_RELOCATOR_HAVE_LEFTOVERS static void check_leftover (struct grub_relocator_fw_leftover *lo) { @@ -367,6 +369,7 @@ free_subchunk (const struct grub_relocator_subchunk *subchu) GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); if (fstart < fend) grub_relocator_firmware_free_region (fstart, fend - fstart); +#if GRUB_RELOCATOR_HAVE_LEFTOVERS if (subchu->pre) { int off = subchu->start - fstart @@ -384,6 +387,7 @@ free_subchunk (const struct grub_relocator_subchunk *subchu) subchu->pre->freebytes[off / 8] |= ((1 << (8 - (off % 8))) - 1); check_leftover (subchu->post); } +#endif *subchu->extra->prev = subchu->extra->next; grub_free (subchu->extra); } @@ -450,7 +454,9 @@ malloc_in_range (struct grub_relocator *rel, maxevents += 2; maxevents += grub_relocator_firmware_get_max_events (); +#endif +#if GRUB_RELOCATOR_HAVE_LEFTOVERS { struct grub_relocator_fw_leftover *cur; for (cur = leftovers; cur; cur = cur->next) @@ -500,8 +506,8 @@ malloc_in_range (struct grub_relocator *rel, for (r = grub_mm_base; r; r = r->next) { grub_dprintf ("relocator", "Blocking at 0x%lx-0x%lx\n", - (grub_addr_t) r - r->pre_size, - (grub_addr_t) (r + 1) + r->size); + (unsigned long) r - r->pre_size, + (unsigned long) (r + 1) + r->size); events[N].type = FIRMWARE_BLOCK_START; events[N].pos = (grub_addr_t) r - r->pre_size; N++; @@ -514,7 +520,7 @@ malloc_in_range (struct grub_relocator *rel, for (cur = extra_blocks; cur; cur = cur->next) { grub_dprintf ("relocator", "Blocking at 0x%lx-0x%lx\n", - cur->start, cur->end); + (unsigned long) cur->start, (unsigned long) cur->end); events[N].type = FIRMWARE_BLOCK_START; events[N].pos = cur->start; N++; @@ -526,6 +532,7 @@ malloc_in_range (struct grub_relocator *rel, N += grub_relocator_firmware_fill_events (events + N); +#if GRUB_RELOCATOR_HAVE_LEFTOVERS { struct grub_relocator_fw_leftover *cur; for (cur = leftovers; cur; cur = cur->next) @@ -552,6 +559,7 @@ malloc_in_range (struct grub_relocator *rel, } } } +#endif #endif /* No malloc from this point. */ @@ -636,7 +644,11 @@ malloc_in_range (struct grub_relocator *rel, /* Now events are nicely sorted. */ { int nstarted = 0, ncollisions = 0, nstartedfw = 0, nblockfw = 0; +#if GRUB_RELOCATOR_HAVE_LEFTOVERS int nlefto = 0; +#else + const int nlefto = 0; +#endif grub_addr_t starta = 0; int numstarted; for (j = from_low_priv ? 0 : N - 1; from_low_priv ? j < N : (j + 1); @@ -663,6 +675,9 @@ malloc_in_range (struct grub_relocator *rel, case FIRMWARE_BLOCK_END: nblockfw--; break; +#endif + +#if GRUB_RELOCATOR_HAVE_LEFTOVERS case REG_LEFTOVER_START: nlefto++; break; @@ -794,7 +809,8 @@ malloc_in_range (struct grub_relocator *rel, = ALIGN_UP (alloc_end, GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); grub_dprintf ("relocator", "requesting %lx-%lx\n", - fstart, fend); + (unsigned long) fstart, + (unsigned long) fend); /* The failure here can be very expensive. */ if (!grub_relocator_firmware_alloc_region (fstart, fend - fstart)) @@ -807,6 +823,9 @@ malloc_in_range (struct grub_relocator *rel, } break; } +#endif + +#if GRUB_RELOCATOR_HAVE_LEFTOVERS case CHUNK_TYPE_LEFTOVER: { unsigned offstart = alloc_start @@ -857,14 +876,6 @@ malloc_in_range (struct grub_relocator *rel, fwin--; break; - case REG_LEFTOVER_START: - fwlefto++; - break; - - case REG_LEFTOVER_END: - fwlefto--; - break; - case FIRMWARE_BLOCK_START: fwb++; break; @@ -873,6 +884,16 @@ malloc_in_range (struct grub_relocator *rel, fwb--; break; #endif + +#if GRUB_RELOCATOR_HAVE_LEFTOVERS + case REG_LEFTOVER_START: + fwlefto++; + break; + + case REG_LEFTOVER_END: + fwlefto--; + break; +#endif case COLLISION_START: ncol++; break; @@ -971,8 +992,6 @@ malloc_in_range (struct grub_relocator *rel, if (!oom && typepre == CHUNK_TYPE_FIRMWARE) { grub_addr_t fstart, fend; - struct grub_relocator_fw_leftover *lo1 = NULL; - struct grub_relocator_fw_leftover *lo2 = NULL; fstart = ALIGN_DOWN (alloc_start, @@ -981,68 +1000,77 @@ malloc_in_range (struct grub_relocator *rel, = ALIGN_UP (alloc_end, GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT); - if (fstart != alloc_start) - lo1 = grub_malloc (sizeof (*lo1)); - if (fend != alloc_end) - lo2 = grub_malloc (sizeof (*lo2)); - if ((!lo1 && fstart != alloc_start) - || (!lo2 && fend != alloc_end)) - { - struct grub_relocator_extra_block *ne; - grub_free (lo1); - grub_free (lo2); - lo1 = NULL; - lo2 = NULL; - oom = 1; - grub_memcpy (&tofree, curschu, sizeof (tofree)); - ne = extra_blocks; - extra_blocks = extra_blocks->next; - grub_free (ne); - } - if (lo1) - { - lo1->quantstart = fstart; - grub_memset (lo1->freebytes, 0xff, - (alloc_start - fstart) / 8); - lo1->freebytes[(alloc_start - fstart) / 8] - = (1 << ((alloc_start - fstart) % 8)) - 1; - grub_memset (lo1->freebytes - + ((alloc_start - fstart) / 8) + 1, 0, - sizeof (lo1->freebytes) - - (alloc_start - fstart) / 8 - 1); - lo1->next = leftovers; - lo1->prev = &leftovers; - if (leftovers) - leftovers->prev = &lo1->next; - leftovers = lo1; - } - if (lo2) - { - lo2->quantstart - = fend - GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; - grub_memset (lo2->freebytes, 0, - (alloc_end - lo2->quantstart) / 8); - lo2->freebytes[(alloc_end - lo2->quantstart) / 8] - = ~((1 << ((alloc_end - lo2->quantstart) % 8)) - 1); - grub_memset (lo2->freebytes - + ((alloc_end - lo2->quantstart) / 8) - + 1, 0, sizeof (lo2->freebytes) - - (alloc_end - lo2->quantstart) / 8 - 1); - lo2->prev = &leftovers; - if (leftovers) - leftovers->prev = &lo2->next; - lo2->next = leftovers; - leftovers = lo2; - } - curschu->pre = lo1; - curschu->post = lo2; +#if GRUB_RELOCATOR_HAVE_LEFTOVERS + { + struct grub_relocator_fw_leftover *lo1 = NULL; + struct grub_relocator_fw_leftover *lo2 = NULL; + if (fstart != alloc_start) + lo1 = grub_malloc (sizeof (*lo1)); + if (fend != alloc_end) + lo2 = grub_malloc (sizeof (*lo2)); + if ((!lo1 && fstart != alloc_start) + || (!lo2 && fend != alloc_end)) + { + struct grub_relocator_extra_block *ne; + grub_free (lo1); + grub_free (lo2); + lo1 = NULL; + lo2 = NULL; + oom = 1; + grub_memcpy (&tofree, curschu, sizeof (tofree)); + ne = extra_blocks; + extra_blocks = extra_blocks->next; + grub_free (ne); + } + if (lo1) + { + lo1->quantstart = fstart; + grub_memset (lo1->freebytes, 0xff, + (alloc_start - fstart) / 8); + lo1->freebytes[(alloc_start - fstart) / 8] + = (1 << ((alloc_start - fstart) % 8)) - 1; + grub_memset (lo1->freebytes + + ((alloc_start - fstart) / 8) + 1, 0, + sizeof (lo1->freebytes) + - (alloc_start - fstart) / 8 - 1); + lo1->next = leftovers; + lo1->prev = &leftovers; + if (leftovers) + leftovers->prev = &lo1->next; + leftovers = lo1; + } + if (lo2) + { + lo2->quantstart + = fend - GRUB_RELOCATOR_FIRMWARE_REQUESTS_QUANT; + grub_memset (lo2->freebytes, 0, + (alloc_end - lo2->quantstart) / 8); + lo2->freebytes[(alloc_end - lo2->quantstart) / 8] + = ~((1 << ((alloc_end - lo2->quantstart) % 8)) - 1); + grub_memset (lo2->freebytes + + ((alloc_end - lo2->quantstart) / 8) + + 1, 0, sizeof (lo2->freebytes) + - (alloc_end - lo2->quantstart) / 8 - 1); + lo2->prev = &leftovers; + if (leftovers) + leftovers->prev = &lo2->next; + lo2->next = leftovers; + leftovers = lo2; + } + curschu->pre = lo1; + curschu->post = lo2; + } +#endif } +#if GRUB_RELOCATOR_HAVE_LEFTOVERS if (typepre == CHUNK_TYPE_LEFTOVER) { curschu->pre = events[last_start].leftover; curschu->post = events[last_start].leftover; } +#endif + #endif if (!oom) cural++; @@ -1077,14 +1105,6 @@ malloc_in_range (struct grub_relocator *rel, fwin--; break; - case REG_LEFTOVER_START: - fwlefto++; - break; - - case REG_LEFTOVER_END: - fwlefto--; - break; - case FIRMWARE_BLOCK_START: fwb++; break; @@ -1093,6 +1113,16 @@ malloc_in_range (struct grub_relocator *rel, fwb--; break; #endif + +#if GRUB_RELOCATOR_HAVE_LEFTOVERS + case REG_LEFTOVER_START: + fwlefto++; + break; + + case REG_LEFTOVER_END: + fwlefto--; + break; +#endif case COLLISION_START: ncol++; break; diff --git a/loader/powerpc/ieee1275/linux.c b/loader/powerpc/ieee1275/linux.c index 930c0cb41..c9feec975 100644 --- a/loader/powerpc/ieee1275/linux.c +++ b/loader/powerpc/ieee1275/linux.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include From ef4ffedd46e4fddb9ac73f26f30ba4add1238cb1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 1 May 2010 15:15:38 +0200 Subject: [PATCH 114/271] remove loader.h leftovers --- include/grub/i386/multiboot/loader.h | 1 - loader/sparc64/ieee1275/linux.c | 1 - 2 files changed, 2 deletions(-) delete mode 100644 include/grub/i386/multiboot/loader.h diff --git a/include/grub/i386/multiboot/loader.h b/include/grub/i386/multiboot/loader.h deleted file mode 100644 index 1c725be19..000000000 --- a/include/grub/i386/multiboot/loader.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/loader/sparc64/ieee1275/linux.c b/loader/sparc64/ieee1275/linux.c index f55b4fa2a..948729a5d 100644 --- a/loader/sparc64/ieee1275/linux.c +++ b/loader/sparc64/ieee1275/linux.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include From aa8d7b264775ac81ab81470f649313eb13d7a180 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 1 May 2010 16:33:22 +0200 Subject: [PATCH 115/271] coreboot and qemu rescue disks and bootchecks --- conf/i386-coreboot.rmk | 3 + conf/i386-qemu.rmk | 3 + tests/util/grub-shell.in | 34 +++++++-- util/grub-mkrescue.in | 145 ++++++++++++++++++++------------------- 4 files changed, 110 insertions(+), 75 deletions(-) diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk index ce54b80b1..805cc40b1 100644 --- a/conf/i386-coreboot.rmk +++ b/conf/i386-coreboot.rmk @@ -71,5 +71,8 @@ datetime_mod_SOURCES = lib/cmos_datetime.c datetime_mod_CFLAGS = $(COMMON_CFLAGS) datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) +BOOTTARGET=coreboot +QEMU32=qemu-system-i386 + include $(srcdir)/conf/i386.mk include $(srcdir)/conf/common.mk diff --git a/conf/i386-qemu.rmk b/conf/i386-qemu.rmk index 6d387a6f6..416fbc0f3 100644 --- a/conf/i386-qemu.rmk +++ b/conf/i386-qemu.rmk @@ -61,5 +61,8 @@ datetime_mod_SOURCES = lib/cmos_datetime.c datetime_mod_CFLAGS = $(COMMON_CFLAGS) datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) +BOOTTARGET=qemu +QEMU32=qemu-system-i386 + include $(srcdir)/conf/i386.mk include $(srcdir)/conf/common.mk diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index d8ea588a7..86b46cf77 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -83,6 +83,8 @@ for option in "$@"; do if [ "$dev" = "fd" ] ; then boot=fd; elif [ "$dev" = "hd" ] ; then boot=hd; elif [ "$dev" = "cd" ] ; then boot=cd; + elif [ "$dev" = "qemu" ] ; then boot=qemu; + elif [ "$dev" = "coreboot" ] ; then boot=coreboot; else echo "Unrecognized boot method \`$dev'" 1>&2 usage @@ -119,6 +121,8 @@ terminal_input serial terminal_output serial EOF +rom_directory=`mktemp -d` + for mod in ${modules} do echo "insmod ${mod}" >> ${cfgfile} @@ -131,25 +135,43 @@ EOF isofile=`mktemp` grub-mkrescue --output=${isofile} --override-directory=${builddir} \ + --rom-directory="${rom_directory}" \ /boot/grub/grub.cfg=${cfgfile} /boot/grub/testcase.cfg=${source} \ ${files} >/dev/null 2>&1 if [ x$boot = xhd ]; then device=hda - bootdev=c + bootdev="-boot c" fi if [ x$boot = xcd ]; then device=cdrom - bootdev=d + bootdev="-boot d" fi if [ x$boot = xfd ]; then device=fda - bootdev=a + bootdev="-boot a" fi -${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} -boot ${bootdev} | tr -d "\r" -rm -f ${isofile} +if [ x$boot = xqemu ]; then + bootdev="-bios ${rom_directory}/qemu.img" + device=cdrom +fi -rm -f ${tmpfile} ${cfgfile} +if [ x$boot = xcoreboot ]; then + imgfile=`mktemp` + cp "${GRUB_COREBOOT_ROM}" "${imgfile}" + "${GRUB_CBFSTOOL}" "${imgfile}" add-payload "${rom_directory}/coreboot.elf" fallback/payload + bootdev="-bios ${imgfile}" + device=cdrom +fi + +${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} ${bootdev} | tr -d "\r" +rm -f "${isofile}" "${imgfile}" +rm -rf "${rom_directory}" +if [ x$boot = xcoreboot ]; then + rm -f "${imgfile}" +fi + +rm -f "${tmpfile}" "${cfgfile}" exit 0 diff --git a/util/grub-mkrescue.in b/util/grub-mkrescue.in index 365c48f29..56b27a6e9 100644 --- a/util/grub-mkrescue.in +++ b/util/grub-mkrescue.in @@ -30,10 +30,13 @@ target_cpu=@target_cpu@ native_platform=@platform@ pkglib_DATA="@pkglib_DATA@" -multiboot_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/${target_cpu}-multiboot -pc_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/${target_cpu}-pc +multiboot_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-multiboot +coreboot_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-coreboot +qemu_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-qemu +pc_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-pc efi32_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-efi efi64_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/x86_64-efi +rom_directory= # Usage: usage # Print the usage. @@ -46,6 +49,7 @@ Make GRUB rescue image. -v, --version print the version information and exit --modules=MODULES pre-load specified modules MODULES --output=FILE save output in FILE [required] + --rom-directory=DIR save rom images in DIR [optional] $0 generates a bootable rescue image with specified source files or directories. @@ -66,6 +70,8 @@ for option in "$@"; do modules=`echo "$option" | sed 's/--modules=//'` ;; --output=*) output_image=`echo "$option" | sed 's/--output=//'` ;; + --rom-directory=*) + rom_directory=`echo "$option" | sed 's/--rom-directory=//'` ;; # Intentionally undocumented --override-directory=*) override_dir=`echo "${option}/" | sed 's/--override-directory=//'` @@ -103,15 +109,15 @@ process_input_dir () { input_dir="$1" platform="$2" - mkdir -p ${iso9660_dir}/boot/grub/${target_cpu}-${platform} + mkdir -p ${iso9660_dir}/boot/grub/${platform} for file in ${input_dir}/*.mod; do if test -f "$file"; then - cp -f "$file" ${iso9660_dir}/boot/grub/${target_cpu}-${platform}/ + cp -f "$file" ${iso9660_dir}/boot/grub/${platform}/ fi done for file in ${pkglib_DATA}; do if test -f "${input_dir}/${file}"; then - cp -f "${input_dir}/${file}" ${iso9660_dir}/boot/grub/${target_cpu}-${platform}/ + cp -f "${input_dir}/${file}" ${iso9660_dir}/boot/grub/${platform}/ fi done @@ -123,27 +129,70 @@ process_input_dir () done } +make_image () +{ + source_directory="$1" + platform=$2 + if ! test -e "${source_directory}"; then + return; + fi + + echo "Enabling $2 support ..." + + memdisk_img=`mktemp "$MKTEMP_TEMPLATE"` + memdisk_dir=`mktemp -d "$MKTEMP_TEMPLATE"` + mkdir -p ${memdisk_dir}/boot/grub + + modules="$(cat ${source_directory}/partmap.lst) ${modules}" + cat << EOF > ${memdisk_dir}/boot/grub/grub.cfg +search --fs-uuid --set ${iso_uuid} +set prefix=(\${root})/boot/grub/${platform} +source \$prefix/grub.cfg +EOF + (for i in ${modules} ; do + echo "insmod $i" + done ; \ + echo "source /boot/grub/grub.cfg") \ + > ${iso9660_dir}/boot/grub/${platform}/grub.cfg + + tar -C ${memdisk_dir} -cf ${memdisk_img} boot + rm -rf ${memdisk_dir} + grub-mkimage -O ${platform} -d "${source_directory}" -m "${memdisk_img}" -o "$3" --prefix='(memdisk)/boot/grub' \ + search iso9660 configfile sh memdisk tar $4 + rm -rf ${memdisk_img} +} + if [ "${override_dir}" = "" ] ; then if test -e "${multiboot_dir}" ; then - process_input_dir ${multiboot_dir} multiboot + process_input_dir ${multiboot_dir} i386-multiboot + fi + if test -e "${coreboot_dir}" ; then + process_input_dir ${coreboot_dir} i386-coreboot + fi + if test -e "${qemu_dir}" ; then + process_input_dir ${qemu_dir} i386-qemu fi if test -e "${pc_dir}" ; then - process_input_dir ${pc_dir} pc + process_input_dir ${pc_dir} i386-pc fi if test -e "${efi32_dir}" ; then - process_input_dir ${efi32_dir} efi32 + process_input_dir ${efi32_dir} i386-efi fi if test -e "${efi64_dir}" ; then - process_input_dir ${efi64_dir} efi64 + process_input_dir ${efi64_dir} x86_64-efi fi else - process_input_dir ${override_dir} ${native_platform} + process_input_dir ${override_dir} ${target_cpu}-${native_platform} multiboot_dir= pc_dir= efi32_dir= efi64_dir= - case "${native_platform}" in + coreboot_dir= + qemu_dir= + case "${target_cpu}-${native_platform}" in i386-multiboot) multiboot_dir=${override_dir} ;; + i386-coreboot) coreboot_dir=${override_dir} ;; + i386-qemu) qemu_dir=${override_dir} ;; i386-pc) pc_dir=${override_dir} ;; i386-efi) efi32_dir=${override_dir} ;; x86_64-efi) efi64_dir=${override_dir} ;; @@ -154,33 +203,6 @@ fi iso_uuid=$(date -u +%Y-%m-%d-%H-%M-%S-00) grub_mkisofs_arguments="${grub_mkisofs_arguments} --modification-date=$(echo ${iso_uuid} | sed -e s/-//g)" -# build multiboot core.img -if test -e "${multiboot_dir}" ; then - echo "Enabling multiboot support ..." - memdisk_img=`mktemp "$MKTEMP_TEMPLATE"` - memdisk_dir=`mktemp -d "$MKTEMP_TEMPLATE"` - mkdir -p ${memdisk_dir}/boot/grub - - modules="$(cat ${multiboot_dir}/partmap.lst) ${modules}" - cat << EOF > ${memdisk_dir}/boot/grub/grub.cfg -search --fs-uuid --set ${iso_uuid} -set prefix=(\${root})/boot/grub/${target_cpu}-multiboot -source \$prefix/grub.cfg -EOF - (for i in ${modules} ; do - echo "insmod $i" - done ; \ - echo "source /boot/grub/grub.cfg") \ - > ${iso9660_dir}/boot/grub/i386-multiboot/grub.cfg - - tar -C ${memdisk_dir} -cf ${memdisk_img} boot - rm -rf ${memdisk_dir} - grub-mkimage -O i386-multiboot -d ${multiboot_dir}/ -m ${memdisk_img} -o ${iso9660_dir}/boot/multiboot.img \ - memdisk tar search iso9660 configfile sh \ - ata at_keyboard - rm -f ${memdisk_img} -fi - # build BIOS core.img if test -e "${pc_dir}" ; then echo "Enabling BIOS support ..." @@ -205,47 +227,32 @@ if test -e "${pc_dir}" ; then --embedded-boot ${embed_img}" fi +# build multiboot core.img +make_image "${multiboot_dir}" i386-multiboot "${iso9660_dir}/boot/multiboot.img" "ata at_keyboard" + if test -e "${efi64_dir}" || test -e "${efi32_dir}"; then efi_dir=`mktemp -d "$MKTEMP_TEMPLATE"` mkdir -p "${efi_dir}/efi/boot" -else - efi_dir= -fi -# build bootx64.efi -if test -e "${efi64_dir}" ; then - echo "Enabling EFI64 support ..." - memdisk_img=`mktemp "$MKTEMP_TEMPLATE"` - memdisk_dir=`mktemp -d "$MKTEMP_TEMPLATE"` - mkdir -p ${memdisk_dir}/boot/grub + # build bootx64.efi + make_image "${efi64_dir}" x86_64-efi "${efi_dir}"/efi/boot/bootx64.efi "" + # build bootia32.efi + make_image "${efi32_dir}" i386-efi "${efi_dir}"/efi/boot/bootia32.efi "" - cat << EOF > ${memdisk_dir}/boot/grub/grub.cfg -search --fs-uuid --set ${iso_uuid} -set prefix=(\${root})/boot/grub/${target_cpu}-efi -source \$prefix/grub.cfg -EOF - - tar -C ${memdisk_dir} -cf ${memdisk_img} boot - rm -rf ${memdisk_dir} - - grub-mkimage -O x86_64-efi -d "${efi64_dir}" -m "${memdisk_img}" -o "${efi_dir}"/efi/boot/bootx64.efi --prefix='(memdisk)/boot/grub' \ - search iso9660 configfile sh memdisk tar - rm -f ${memdisk_img} - - modules="$(cat "${efi64_dir}"/partmap.lst) ${modules}" - (for i in ${modules} ; do - echo "insmod $i" - done ; \ - echo "source /boot/grub/grub.cfg") \ - > "${iso9660_dir}"/boot/grub/x86_64-efi/grub.cfg -fi - -if test x"${efi_dir}" != x; then mformat -C -f 2880 -L 16 -i "${iso9660_dir}"/efi.img :: mcopy -s -i "${iso9660_dir}"/efi.img ${efi_dir}/efi ::/ grub_mkisofs_arguments="${grub_mkisofs_arguments} --efi-boot efi.img" fi +make_image "${qemu_dir}" i386-qemu "${iso9660_dir}/boot/qemu.img" "ata at_keyboard" +if [ -e "${iso9660_dir}/boot/qemu.img" ] && [ -d "${rom_directory}" ]; then + cp "${iso9660_dir}/boot/qemu.img" "${rom_directory}/qemu.img" +fi +make_image "${coreboot_dir}" i386-coreboot "${iso9660_dir}/boot/coreboot.elf" "ata at_keyboard" +if [ -e "${iso9660_dir}/boot/coreboot.elf" ] && [ -d "${rom_directory}" ]; then + cp "${iso9660_dir}/boot/coreboot.elf" "${rom_directory}/coreboot.elf" +fi + # build iso image xorriso -pathspecs on -as mkisofs ${grub_mkisofs_arguments} --protective-msdos-label -o ${output_image} -r ${iso9660_dir} ${source} rm -rf ${iso9660_dir} From 6d971470fad15daf02eb270bdd969c3ba9b42a6b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 1 May 2010 16:38:10 +0200 Subject: [PATCH 116/271] REmove memory map altering for FreeBSD --- loader/i386/bsd.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index 1b2fadd80..c0c75204d 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -258,7 +258,6 @@ static void generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf) { int count = 0; - int isfirstrun = 1; struct grub_e820_mmap *mmap = buf; struct grub_e820_mmap prev, cur; @@ -266,21 +265,6 @@ generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf) int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t size, grub_uint32_t type) { - /* FreeBSD assumes that first 64KiB are available. - Not always true but try to prevent panic somehow. */ - if (kernel_type == KERNEL_TYPE_FREEBSD && isfirstrun && addr != 0) - { - cur.addr = 0; - cur.size = (addr < 0x10000) ? addr : 0x10000; - cur.type = GRUB_E820_RAM; - if (mmap) - *mmap++ = cur; - - prev = cur; - count++; - } - isfirstrun = 0; - cur.addr = addr; cur.size = size; switch (type) @@ -317,7 +301,7 @@ generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf) { prev.size += cur.size; if (mmap) - mmap[-1] = cur; + mmap[-1] = prev; } else { @@ -330,7 +314,6 @@ generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf) return 0; } - isfirstrun = 1; grub_mmap_iterate (hook); if (len) From 92517362b2e204ec83a6d2d7bef99913b081da21 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 2 May 2010 16:26:00 +0200 Subject: [PATCH 117/271] Split a memory chunk spanning accross 1MiB mark for openbsd --- loader/i386/bsd.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index c0c75204d..26055d5ca 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -301,7 +301,7 @@ generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf) { prev.size += cur.size; if (mmap) - mmap[-1] = prev; + mmap[-1] = prev; } else { @@ -311,6 +311,23 @@ generate_e820_mmap (grub_size_t *len, grub_size_t *cnt, void *buf) count++; } + if (kernel_type == KERNEL_TYPE_OPENBSD && prev.addr < 0x100000 + && prev.addr + prev.size > 0x100000) + { + cur.addr = 0x100000; + cur.size = prev.addr + prev.size - 0x100000; + cur.type = prev.type; + prev.size = 0x100000 - prev.addr; + if (mmap) + { + mmap[-1] = prev; + mmap[0] = cur; + mmap++; + } + prev = cur; + count++; + } + return 0; } @@ -1475,7 +1492,7 @@ grub_cmd_openbsd (grub_extcmd_t cmd, int argc, char *argv[]) if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE) { - grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 1); + grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 0); openbsd_root = bootdev; } From 4fc5ff74f2e5a1497cbdc482e0d8d2cd88fe34d8 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 2 May 2010 16:27:22 +0200 Subject: [PATCH 118/271] USe more low memory on i386-qemu --- kern/i386/qemu/mmap.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kern/i386/qemu/mmap.c b/kern/i386/qemu/mmap.c index c7fc4f45e..dfdb99b74 100644 --- a/kern/i386/qemu/mmap.c +++ b/kern/i386/qemu/mmap.c @@ -52,6 +52,11 @@ grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uin GRUB_MACHINE_MEMORY_AVAILABLE)) return 1; + if (hook ((grub_addr_t) _end, + 0xa0000 - (grub_addr_t) _end, + GRUB_MACHINE_MEMORY_AVAILABLE)) + return 1; + if (hook (GRUB_MEMORY_MACHINE_UPPER, 0x100000 - GRUB_MEMORY_MACHINE_UPPER, GRUB_MACHINE_MEMORY_RESERVED)) From 32bf9244dc9150500be489e43d2efc1c2a04245b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 2 May 2010 19:39:07 +0200 Subject: [PATCH 119/271] Remove reference to loader.h --- loader/mips/linux.c | 1 - 1 file changed, 1 deletion(-) diff --git a/loader/mips/linux.c b/loader/mips/linux.c index a3569c34c..018cfdcc5 100644 --- a/loader/mips/linux.c +++ b/loader/mips/linux.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include From 6f030865dade7134dffee51bf27c3cc569aa2bab Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 2 May 2010 19:39:35 +0200 Subject: [PATCH 120/271] Add missing memory.h --- include/grub/mips/memory.h | 1 + 1 file changed, 1 insertion(+) create mode 100644 include/grub/mips/memory.h diff --git a/include/grub/mips/memory.h b/include/grub/mips/memory.h new file mode 100644 index 000000000..e51bcc1f2 --- /dev/null +++ b/include/grub/mips/memory.h @@ -0,0 +1 @@ +#include From db292d391f53e20454b1bf61c674399dc30105e9 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 2 May 2010 19:39:46 +0200 Subject: [PATCH 121/271] Support elfsyms on mb2 --- loader/multiboot_mbi2.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/loader/multiboot_mbi2.c b/loader/multiboot_mbi2.c index 78c280fbf..8cade2f2f 100644 --- a/loader/multiboot_mbi2.c +++ b/loader/multiboot_mbi2.c @@ -55,6 +55,19 @@ static unsigned modcnt; static char *cmdline = NULL; static int bootdev_set; 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; + +void +grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize, + unsigned shndx, void *data) +{ + elf_sec_num = num; + elf_sec_shstrndx = shndx; + elf_sec_entsize = entsize; + elf_sections = data; +} grub_err_t grub_multiboot_load (grub_file_t file) @@ -262,6 +275,8 @@ grub_multiboot_get_mbi_size (void) + (modcnt * sizeof (struct multiboot_tag_module) + total_modcmd) + sizeof (struct multiboot_tag_basic_meminfo) + ALIGN_UP (sizeof (struct multiboot_tag_bootdev), MULTIBOOT_TAG_ALIGN) + + sizeof (struct multiboot_tag_elf_sections) + + elf_sec_entsize * elf_sec_num + (sizeof (struct multiboot_tag_mmap) + grub_get_multiboot_mmap_count () * sizeof (struct multiboot_mmap_entry)) + sizeof (struct multiboot_tag_vbe) + MULTIBOOT_TAG_ALIGN - 1; @@ -518,6 +533,19 @@ grub_multiboot_make_mbi (grub_uint32_t *target) ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN); } + { + struct multiboot_tag_elf_sections *tag + = (struct multiboot_tag_elf_sections *) ptrorig; + tag->type = MULTIBOOT_TAG_TYPE_ELF_SECTIONS; + tag->size = sizeof (struct multiboot_tag_elf_sections) + + elf_sec_entsize * elf_sec_num; + grub_memcpy (tag->sections, elf_sections, elf_sec_entsize * elf_sec_num); + tag->num = elf_sec_num; + tag->entsize = elf_sec_entsize; + tag->shndx = elf_sec_shstrndx; + ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN); + } + { struct multiboot_tag_basic_meminfo *tag = (struct multiboot_tag_basic_meminfo *) ptrorig; From 05f602fc5168dbc53b05dc62d4fdc92d5bab4ed8 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 2 May 2010 22:06:44 +0200 Subject: [PATCH 122/271] enable xnu on all platforms --- conf/i386-coreboot.rmk | 17 +++++ conf/i386-ieee1275.rmk | 10 +++ conf/i386-multiboot.rmk | 27 ++++--- conf/i386-pc.rmk | 74 +++---------------- conf/i386-qemu.rmk | 11 +++ conf/i386.rmk | 57 ++++++++++++++ conf/x86-efi.rmk | 7 -- configure.ac | 6 ++ efiemu/i386/coredetect.c | 1 - .../pc/efiemu.h => efiemu/i386/nocfgtables.c | 16 ++-- efiemu/i386/pc/cfgtables.c | 1 - efiemu/loadcore.c | 1 - efiemu/main.c | 1 - include/grub/efiemu/efiemu.h | 2 + loader/i386/xnu.c | 4 + 15 files changed, 145 insertions(+), 90 deletions(-) rename include/grub/i386/pc/efiemu.h => efiemu/i386/nocfgtables.c (75%) diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk index 805cc40b1..c9eea6470 100644 --- a/conf/i386-coreboot.rmk +++ b/conf/i386-coreboot.rmk @@ -22,6 +22,7 @@ kernel_img_SOURCES = kern/i386/coreboot/startup.S \ kern/env.c \ term/i386/pc/vga_text.c term/i386/vga_common.c \ symlist.c +kernel_img_HEADERS += i386/pit.h kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,0x8200,-Bstatic @@ -71,6 +72,22 @@ datetime_mod_SOURCES = lib/cmos_datetime.c datetime_mod_CFLAGS = $(COMMON_CFLAGS) datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) +pkglib_MODULES += efiemu.mod +efiemu_mod_SOURCES = efiemu/main.c efiemu/i386/loadcore32.c \ + efiemu/i386/loadcore64.c efiemu/i386/pc/cfgtables.c \ + efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c \ + efiemu/loadcore32.c efiemu/loadcore64.c \ + efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c \ + efiemu/i386/coredetect.c +efiemu_mod_CFLAGS = $(COMMON_CFLAGS) +efiemu_mod_LDFLAGS = $(COMMON_LDFLAGS) + +# For acpi.mod. +pkglib_MODULES += acpi.mod +acpi_mod_SOURCES = commands/acpi.c commands/i386/pc/acpi.c +acpi_mod_CFLAGS = $(COMMON_CFLAGS) +acpi_mod_LDFLAGS = $(COMMON_LDFLAGS) + BOOTTARGET=coreboot QEMU32=qemu-system-i386 diff --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk index d9469c6e6..1b7460dc3 100644 --- a/conf/i386-ieee1275.rmk +++ b/conf/i386-ieee1275.rmk @@ -64,5 +64,15 @@ datetime_mod_SOURCES = lib/cmos_datetime.c datetime_mod_CFLAGS = $(COMMON_CFLAGS) datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) +pkglib_MODULES += efiemu.mod +efiemu_mod_SOURCES = efiemu/main.c efiemu/i386/loadcore32.c \ + efiemu/i386/loadcore64.c efiemu/i386/nocfgtables.c \ + efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c \ + efiemu/loadcore32.c efiemu/loadcore64.c \ + efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c \ + efiemu/i386/coredetect.c +efiemu_mod_CFLAGS = $(COMMON_CFLAGS) +efiemu_mod_LDFLAGS = $(COMMON_LDFLAGS) + include $(srcdir)/conf/i386.mk include $(srcdir)/conf/common.mk diff --git a/conf/i386-multiboot.rmk b/conf/i386-multiboot.rmk index 69b8e9a48..ddfb7e283 100644 --- a/conf/i386-multiboot.rmk +++ b/conf/i386-multiboot.rmk @@ -24,6 +24,7 @@ kernel_img_SOURCES = kern/i386/coreboot/startup.S \ kern/env.c \ term/i386/pc/vga_text.c term/i386/vga_common.c \ symlist.c +kernel_img_HEADERS += i386/pit.h kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,$(GRUB_KERNEL_MACHINE_LINK_ADDR),-Bstatic @@ -35,7 +36,7 @@ bin_SCRIPTS += grub-mkrescue grub_mkrescue_SOURCES = util/grub-mkrescue.in # Modules. -pkglib_MODULES = linux.mod aout.mod halt.mod datetime.mod mmap.mod +pkglib_MODULES = linux.mod halt.mod datetime.mod mmap.mod # For mmap.mod. mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c @@ -53,17 +54,21 @@ halt_mod_SOURCES = commands/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) halt_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For aout.mod. -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) +pkglib_MODULES += efiemu.mod +efiemu_mod_SOURCES = efiemu/main.c efiemu/i386/loadcore32.c \ + efiemu/i386/loadcore64.c efiemu/i386/pc/cfgtables.c \ + efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c \ + efiemu/loadcore32.c efiemu/loadcore64.c \ + efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c \ + efiemu/i386/coredetect.c +efiemu_mod_CFLAGS = $(COMMON_CFLAGS) +efiemu_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For bsd.mod -pkglib_MODULES += bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S -bsd_mod_CFLAGS = $(COMMON_CFLAGS) -bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) -bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) +# For acpi.mod. +pkglib_MODULES += acpi.mod +acpi_mod_SOURCES = commands/acpi.c commands/i386/pc/acpi.c +acpi_mod_CFLAGS = $(COMMON_CFLAGS) +acpi_mod_LDFLAGS = $(COMMON_LDFLAGS) # For datetime.mod datetime_mod_SOURCES = lib/cmos_datetime.c diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index d403d19f1..3f0eeb611 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -92,7 +92,7 @@ grub_mkrescue_SOURCES = util/grub-mkrescue.in pkglib_MODULES = biosdisk.mod chain.mod halt.mod vbe.mod vbetest.mod \ vbeinfo.mod vga.mod pxe.mod pxecmd.mod datetime.mod ata_pthru.mod \ hdparm.mod usb.mod uhci.mod ohci.mod usbtest.mod usbms.mod \ - usb_keyboard.mod efiemu.mod mmap.mod acpi.mod drivemap.mod + usb_keyboard.mod mmap.mod drivemap.mod # For drivemap.mod. drivemap_mod_SOURCES = commands/i386/pc/drivemap.c \ @@ -101,17 +101,8 @@ drivemap_mod_ASFLAGS = $(COMMON_ASFLAGS) drivemap_mod_CFLAGS = $(COMMON_CFLAGS) drivemap_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For efiemu.mod. -efiemu_mod_SOURCES = efiemu/main.c efiemu/i386/loadcore32.c \ - efiemu/i386/loadcore64.c efiemu/i386/pc/cfgtables.c \ - efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c \ - efiemu/loadcore32.c efiemu/loadcore64.c \ - efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c \ - efiemu/i386/coredetect.c -efiemu_mod_CFLAGS = $(COMMON_CFLAGS) -efiemu_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For acpi.mod. +pkglib_MODULES += acpi.mod acpi_mod_SOURCES = commands/acpi.c commands/i386/pc/acpi.c acpi_mod_CFLAGS = $(COMMON_CFLAGS) acpi_mod_LDFLAGS = $(COMMON_LDFLAGS) @@ -144,12 +135,15 @@ linux16_mod_SOURCES = loader/i386/pc/linux.c linux16_mod_CFLAGS = $(COMMON_CFLAGS) linux16_mod_LDFLAGS = $(COMMON_LDFLAGS) -pkglib_MODULES += xnu.mod -xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c \ - loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c -xnu_mod_CFLAGS = $(COMMON_CFLAGS) -xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) -xnu_mod_ASFLAGS = $(COMMON_ASFLAGS) +pkglib_MODULES += efiemu.mod +efiemu_mod_SOURCES = efiemu/main.c efiemu/i386/loadcore32.c \ + efiemu/i386/loadcore64.c efiemu/i386/pc/cfgtables.c \ + efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c \ + efiemu/loadcore32.c efiemu/loadcore64.c \ + efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c \ + efiemu/i386/coredetect.c +efiemu_mod_CFLAGS = $(COMMON_CFLAGS) +efiemu_mod_LDFLAGS = $(COMMON_LDFLAGS) # For halt.mod. halt_mod_SOURCES = commands/i386/pc/halt.c @@ -231,52 +225,6 @@ hdparm_mod_SOURCES = commands/hdparm.c lib/hexdump.c hdparm_mod_CFLAGS = $(COMMON_CFLAGS) hdparm_mod_LDFLAGS = $(COMMON_LDFLAGS) -ifeq ($(enable_efiemu), yes) - -efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) - -rm -f $@ -ifeq ($(TARGET_APPLE_CC), 1) - -rm -f $@.bin - $(TARGET_CC) -c -m32 -DELF32 -DAPPLE_CC -o $@.bin -Wall -Werror $< -nostdlib -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude - $(OBJCONV) -felf32 -nu -nd $@.bin $@ - -rm -f $@.bin -else - $(TARGET_CC) -c -m32 -DELF32 -o $@ -Wall -Werror $< -nostdlib -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude - if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi -endif - -efiemu64_c.o: efiemu/runtime/efiemu.c -ifeq ($(TARGET_APPLE_CC), 1) - $(TARGET_CC) -c -m64 -DAPPLE_CC=1 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude -else - $(TARGET_CC) -c -m64 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mcmodel=large -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude -endif - -efiemu64_s.o: efiemu/runtime/efiemu.S - -rm -f $@ -ifeq ($(TARGET_APPLE_CC), 1) - $(TARGET_CC) -c -m64 -DAPPLE_CC=1 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude -else - $(TARGET_CC) -c -m64 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mcmodel=large -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude -endif - -efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELF) - -rm -f $@ -ifeq ($(TARGET_APPLE_CC), 1) - -rm -f $@.bin - $(TARGET_CC) -m64 -o $@.bin -Wl,-r $^ -nostdlib - $(OBJCONV) -felf64 -nu -nd $@.bin $@ - -rm -f $@.bin -else - $(TARGET_CC) -m64 -o $@ -Wl,-r $^ -nostdlib - if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi -endif - -CLEANFILES += efiemu32.o efiemu64.o efiemu64_c.o efiemu64_s.o -pkglib_DATA += efiemu32.o efiemu64.o - -endif - BOOTTARGET=cd QEMU32=qemu-system-i386 diff --git a/conf/i386-qemu.rmk b/conf/i386-qemu.rmk index 416fbc0f3..5ec3c7eea 100644 --- a/conf/i386-qemu.rmk +++ b/conf/i386-qemu.rmk @@ -31,6 +31,7 @@ kernel_img_SOURCES = kern/i386/qemu/startup.S \ kern/env.c \ term/i386/pc/vga_text.c term/i386/vga_common.c \ symlist.c +kernel_img_HEADERS += i386/pit.h kernel_img_CFLAGS = $(COMMON_CFLAGS) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR) kernel_img_LDFLAGS += $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)$(GRUB_KERNEL_MACHINE_LINK_ADDR) @@ -61,6 +62,16 @@ datetime_mod_SOURCES = lib/cmos_datetime.c datetime_mod_CFLAGS = $(COMMON_CFLAGS) datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) +pkglib_MODULES += efiemu.mod +efiemu_mod_SOURCES = efiemu/main.c efiemu/i386/loadcore32.c \ + efiemu/i386/loadcore64.c efiemu/i386/nocfgtables.c \ + efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c \ + efiemu/loadcore32.c efiemu/loadcore64.c \ + efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c \ + efiemu/i386/coredetect.c +efiemu_mod_CFLAGS = $(COMMON_CFLAGS) +efiemu_mod_LDFLAGS = $(COMMON_LDFLAGS) + BOOTTARGET=qemu QEMU32=qemu-system-i386 diff --git a/conf/i386.rmk b/conf/i386.rmk index 004dab7f3..fb23e879b 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -105,6 +105,59 @@ play_mod_SOURCES = commands/i386/pc/play.c play_mod_CFLAGS = $(COMMON_CFLAGS) play_mod_LDFLAGS = $(COMMON_LDFLAGS) +pkglib_MODULES += xnu.mod +xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c \ + loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c +xnu_mod_CFLAGS = $(COMMON_CFLAGS) +xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) +xnu_mod_ASFLAGS = $(COMMON_ASFLAGS) + +ifeq ($(enable_efiemu), yes) + +efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) + -rm -f $@ +ifeq ($(TARGET_APPLE_CC), 1) + -rm -f $@.bin + $(TARGET_CC) -c -m32 -DELF32 -DAPPLE_CC -o $@.bin -Wall -Werror $< -nostdlib -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude + $(OBJCONV) -felf32 -nu -nd $@.bin $@ + -rm -f $@.bin +else + $(TARGET_CC) -c -m32 -DELF32 -o $@ -Wall -Werror $< -nostdlib -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude + if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi +endif + +efiemu64_c.o: efiemu/runtime/efiemu.c +ifeq ($(TARGET_APPLE_CC), 1) + $(TARGET_CC) -c -m64 -DAPPLE_CC=1 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude +else + $(TARGET_CC) -c -m64 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mcmodel=large -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude +endif + +efiemu64_s.o: efiemu/runtime/efiemu.S + -rm -f $@ +ifeq ($(TARGET_APPLE_CC), 1) + $(TARGET_CC) -c -m64 -DAPPLE_CC=1 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude +else + $(TARGET_CC) -c -m64 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mcmodel=large -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude +endif + +efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELF) + -rm -f $@ +ifeq ($(TARGET_APPLE_CC), 1) + -rm -f $@.bin + $(TARGET_CC) -m64 -o $@.bin -Wl,-r $^ -nostdlib + $(OBJCONV) -felf64 -nu -nd $@.bin $@ + -rm -f $@.bin +else + $(TARGET_CC) -m64 -o $@ -Wl,-r $^ -nostdlib + if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi +endif + +CLEANFILES += efiemu32.o efiemu64.o efiemu64_c.o efiemu64_s.o +pkglib_DATA += efiemu32.o efiemu64.o + +endif + linux.init.x86_64: $(srcdir)/tests/boot/linux.init-x86_64.S $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" @@ -161,6 +214,10 @@ bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-knetbsd-x86_64 +ifneq ($(platform), coreboot) +BOOTCHECKS += bootcheck-kfreebsd-i386 +endif + .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 diff --git a/conf/x86-efi.rmk b/conf/x86-efi.rmk index 68e1b3c7c..7bc0eeea0 100644 --- a/conf/x86-efi.rmk +++ b/conf/x86-efi.rmk @@ -87,13 +87,6 @@ efi_gop_mod_SOURCES = video/efi_gop.c efi_gop_mod_CFLAGS = $(COMMON_CFLAGS) efi_gop_mod_LDFLAGS = $(COMMON_LDFLAGS) -pkglib_MODULES += xnu.mod -xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c \ - loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c -xnu_mod_CFLAGS = $(COMMON_CFLAGS) -xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) -xnu_mod_ASFLAGS = $(COMMON_ASFLAGS) - BOOTTARGET=cd include $(srcdir)/conf/i386.mk diff --git a/configure.ac b/configure.ac index 1f7efd78a..810b8e78d 100644 --- a/configure.ac +++ b/configure.ac @@ -542,6 +542,12 @@ AC_ARG_ENABLE([efiemu], if test x"$enable_efiemu" = xno ; then efiemu_excuse="explicitly disabled" fi +if test x"$target_cpu" != xi386 ; then + efiemu_excuse="only available on i386" +fi +if test x"$platform" != xefi ; then + efiemu_excuse="not available on efi" +fi if test x"$efiemu_excuse" = x ; then AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [ CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib" diff --git a/efiemu/i386/coredetect.c b/efiemu/i386/coredetect.c index 828508dee..975c4aa5d 100644 --- a/efiemu/i386/coredetect.c +++ b/efiemu/i386/coredetect.c @@ -17,7 +17,6 @@ */ #include -#include #include #define cpuid(num,a,b,c,d) \ diff --git a/include/grub/i386/pc/efiemu.h b/efiemu/i386/nocfgtables.c similarity index 75% rename from include/grub/i386/pc/efiemu.h rename to efiemu/i386/nocfgtables.c index f269dd085..775f1d03a 100644 --- a/include/grub/i386/pc/efiemu.h +++ b/efiemu/i386/nocfgtables.c @@ -1,3 +1,4 @@ +/* Register SMBIOS and ACPI tables. */ /* * GRUB -- GRand Unified Bootloader * Copyright (C) 2009 Free Software Foundation, Inc. @@ -16,9 +17,14 @@ * along with GRUB. If not, see . */ -#ifndef GRUB_MACHINE_EFI_EMU_HEADER -#define GRUB_MACHINE_EFI_EMU_HEADER 1 +#include +#include +#include +#include +#include -grub_err_t grub_machine_efiemu_init_tables (void); - -#endif +grub_err_t +grub_machine_efiemu_init_tables (void) +{ + return GRUB_ERR_NONE; +} diff --git a/efiemu/i386/pc/cfgtables.c b/efiemu/i386/pc/cfgtables.c index 9c6b4e55e..9287d3a94 100644 --- a/efiemu/i386/pc/cfgtables.c +++ b/efiemu/i386/pc/cfgtables.c @@ -19,7 +19,6 @@ #include #include -#include #include #include #include diff --git a/efiemu/loadcore.c b/efiemu/loadcore.c index 4bf26ee44..edadd4580 100644 --- a/efiemu/loadcore.c +++ b/efiemu/loadcore.c @@ -22,7 +22,6 @@ #include #include #include -#include #include /* ELF symbols and their values */ diff --git a/efiemu/main.c b/efiemu/main.c index 7ebbae946..3f5fb9435 100644 --- a/efiemu/main.c +++ b/efiemu/main.c @@ -29,7 +29,6 @@ #include #include #include -#include #include /* System table. Two version depending on mode */ diff --git a/include/grub/efiemu/efiemu.h b/include/grub/efiemu/efiemu.h index 1cddbca7c..fb1b69751 100644 --- a/include/grub/efiemu/efiemu.h +++ b/include/grub/efiemu/efiemu.h @@ -282,4 +282,6 @@ grub_efiemu_set_virtual_address_map (grub_efi_uintn_t memory_map_size, __attribute__ ((unused)), grub_efi_memory_descriptor_t *virtual_map); +grub_err_t grub_machine_efiemu_init_tables (void); + #endif /* ! GRUB_EFI_EMU_HEADER */ diff --git a/loader/i386/xnu.c b/loader/i386/xnu.c index 2aec590fb..d110293e0 100644 --- a/loader/i386/xnu.c +++ b/loader/i386/xnu.c @@ -123,6 +123,7 @@ static grub_uint64_t guessfsb (void) { const grub_uint64_t sane_value = 100000000; +#ifndef GRUB_MACHINE_IEEE1275 grub_uint32_t manufacturer[3], max_cpuid, capabilities, msrlow; grub_uint64_t start_tsc; grub_uint64_t end_tsc; @@ -208,6 +209,9 @@ guessfsb (void) return grub_divmod64 (2000 * tsc_ticks_per_ms, ((msrlow >> 7) & 0x3e) + ((msrlow >> 14) & 1), 0); +#else + return sane_value; +#endif } struct property_descriptor From 7f5320b3194675c5c56e179aea01ca4bec5fd2fd Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 2 May 2010 23:09:45 +0200 Subject: [PATCH 123/271] Compress miniroot and decrease timeout --- conf/common.rmk | 2 +- conf/i386.rmk | 26 ++++++++++++++------------ tests/boot/kfreebsd.cfg | 2 +- tests/boot/knetbsd.cfg | 2 +- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/conf/common.rmk b/conf/common.rmk index a8c881276..29d69f27a 100644 --- a/conf/common.rmk +++ b/conf/common.rmk @@ -866,7 +866,7 @@ grub_mkpasswd_pbkdf2_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(sr # Randomly generated SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d # tianocore cd access is very slow -BOOTCHECK_TIMEOUT=600 +BOOTCHECK_TIMEOUT=180 bootcheck: $(BOOTCHECKS) diff --git a/conf/i386.rmk b/conf/i386.rmk index fb23e879b..b7c9b293d 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -182,6 +182,9 @@ linux-initramfs.%: linux.init.% Makefile kfreebsd-mfsroot.%: kfreebsd.init.% Makefile TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR +%.gz: % + gzip < $< > $@ + knetbsd.image.%: knetbsd.init.% TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR @@ -193,17 +196,17 @@ knetbsd.miniroot-image.x86_64: knetbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 -bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/mfsroot=kfreebsd-mfsroot.i386 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/mfsroot.gz=kfreebsd-mfsroot.i386.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot=kfreebsd-mfsroot.x86_64 --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot=kfreebsd-mfsroot.x86_64.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.i386 grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot=knetbsd.miniroot-image.i386 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.i386 grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.x86_64 grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/miniroot=knetbsd.miniroot-image.x86_64 --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.x86_64 grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null @@ -211,11 +214,10 @@ bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(src bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 \ - bootcheck-kfreebsd-i386 bootcheck-knetbsd-x86_64 +BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 -ifneq ($(platform), coreboot) -BOOTCHECKS += bootcheck-kfreebsd-i386 +ifneq ($(platform), coreboot) +BOOTCHECKS += bootcheck-kfreebsd-i386 bootcheck-knetbsd-x86_64 endif .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ diff --git a/tests/boot/kfreebsd.cfg b/tests/boot/kfreebsd.cfg index 8f339cd7f..5534f3c03 100644 --- a/tests/boot/kfreebsd.cfg +++ b/tests/boot/kfreebsd.cfg @@ -1,6 +1,6 @@ kfreebsd /kfreebsd -h kfreebsd_loadenv /kfreebsd_env -kfreebsd_module /mfsroot type=mfs_root +kfreebsd_module /mfsroot.gz type=mfs_root set kFreeBSD.hw.hasbrokenint12=1 boot # Shouln't happen diff --git a/tests/boot/knetbsd.cfg b/tests/boot/knetbsd.cfg index ad2258dce..f88a846e1 100644 --- a/tests/boot/knetbsd.cfg +++ b/tests/boot/knetbsd.cfg @@ -1,5 +1,5 @@ knetbsd /knetbsd -h -knetbsd_module_elf /miniroot +knetbsd_module_elf /miniroot.gz boot # Shouln't happen halt From 86fbf9798a8079d3863ed21aadafb17365d77611 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 3 May 2010 01:46:43 +0200 Subject: [PATCH 124/271] Fix makefile problem due to compression --- conf/i386.rmk | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/conf/i386.rmk b/conf/i386.rmk index b7c9b293d..0b707ca6a 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -179,19 +179,19 @@ knetbsd.init.x86_64: $(srcdir)/tests/boot/knetbsd.init-x86_64.S linux-initramfs.%: linux.init.% Makefile TDIR=`mktemp -d`; cp $< $$TDIR/init; (cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR -kfreebsd-mfsroot.%: kfreebsd.init.% Makefile - TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR - -%.gz: % +%.gz: %.img gzip < $< > $@ +kfreebsd-mfsroot.%.img: kfreebsd.init.% Makefile + TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR + knetbsd.image.%: knetbsd.init.% TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR -knetbsd.miniroot-image.i386: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 +knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@ -knetbsd.miniroot-image.x86_64: knetbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 +knetbsd.miniroot-image.x86_64.img: knetbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 $@ CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 @@ -200,7 +200,7 @@ bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386.gz $(GRUB_PAYLOADS_DIR)/kfreebsd. timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/mfsroot.gz=kfreebsd-mfsroot.i386.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot=kfreebsd-mfsroot.x86_64.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot.gz=kfreebsd-mfsroot.x86_64.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.i386 grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null From a57c242287d9e8d7cd97020a0b41cc196b5ed931 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 3 May 2010 22:53:51 +0200 Subject: [PATCH 125/271] Add missing token --- util/grub-install.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/grub-install.in b/util/grub-install.in index 8a93ace8c..0db216fd5 100644 --- a/util/grub-install.in +++ b/util/grub-install.in @@ -342,7 +342,7 @@ else prefix_drive=`$grub_probe --target=drive --device ${grub_device}` || exit 1 fi -case "${target_cpu}-${platform}" +case "${target_cpu}-${platform}" in i386-pc) mkimage_target=i386-pc ;; sparc64-ieee1275) mkimage_target=sparc64-ieee1275-raw ;; mips-yeeloong) mkimage_target=mipsel-yeeloong-elf ;; From a1a5c869850fe45fe0dba4000d522045ba40e5ca Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 3 May 2010 22:54:46 +0200 Subject: [PATCH 126/271] Fix default mkimage path determination --- Makefile.in | 2 +- util/grub-mkimage.c | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Makefile.in b/Makefile.in index 3df8b1b72..54f17f27f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -90,7 +90,7 @@ GNULIB_CFLAGS = $(GNULIB_UTIL_CFLAGS) $(POSIX_CFLAGS) ASFLAGS = @ASFLAGS@ LDFLAGS = @LDFLAGS@ $(LIBS) CPPFLAGS = @CPPFLAGS@ -I$(builddir) -I$(builddir)/include -I$(srcdir)/gnulib -I$(srcdir)/include -Wall -W \ - -DGRUB_LIBDIR=\"$(libdir)\" -DLOCALEDIR=\"$(localedir)\" + -DGRUB_PKGLIBROOTDIR=\"$(libdir)/`echo @PACKAGE_TARNAME@ | sed '$(transform)'`\" -DLOCALEDIR=\"$(localedir)\" TARGET_CC = @TARGET_CC@ TARGET_CFLAGS = -ffreestanding @TARGET_CFLAGS@ TARGET_ASFLAGS = -nostdinc -fno-builtin @TARGET_ASFLAGS@ diff --git a/util/grub-mkimage.c b/util/grub-mkimage.c index cc4a225d4..5602b3a96 100644 --- a/util/grub-mkimage.c +++ b/util/grub-mkimage.c @@ -1182,7 +1182,7 @@ Make a bootable image of GRUB.\n\ \n\ Report bugs to <%s>.\n\ "), - program_name, GRUB_LIBDIR, DEFAULT_DIRECTORY, + program_name, GRUB_PKGLIBROOTDIR, DEFAULT_DIRECTORY, formats, PACKAGE_BUGREPORT); free (formats); @@ -1320,14 +1320,15 @@ main (int argc, char *argv[]) last = strchr (last + 1, '-'); if (!last) last = image_target->name + strlen (image_target->name); - dir = xmalloc (sizeof (GRUB_LIBDIR) + (last - image_target->name)); - memcpy (dir, GRUB_LIBDIR, sizeof (GRUB_LIBDIR) - 1); - memcpy (dir + sizeof (GRUB_LIBDIR) - 1, image_target->name, + dir = xmalloc (sizeof (GRUB_PKGLIBROOTDIR) + (last - image_target->name)); + memcpy (dir, GRUB_PKGLIBROOTDIR, sizeof (GRUB_PKGLIBROOTDIR) - 1); + *(dir + sizeof (GRUB_PKGLIBROOTDIR) - 1) = '/'; + memcpy (dir + sizeof (GRUB_PKGLIBROOTDIR), image_target->name, last - image_target->name); - *(dir + sizeof (GRUB_LIBDIR) - 1 + (last - image_target->name)) = 0; + *(dir + sizeof (GRUB_PKGLIBROOTDIR) + (last - image_target->name)) = 0; } - generate_image (dir ? : GRUB_LIBDIR, prefix ? : DEFAULT_DIRECTORY, fp, + generate_image (dir, prefix ? : DEFAULT_DIRECTORY, fp, argv + optind, memdisk, font, config, image_target, note); From ee0b981c202bf39e9c8bca2b4369776cbe026985 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 3 May 2010 22:58:27 +0200 Subject: [PATCH 127/271] Fix BSD tests. Move BSD bootchecks to i386.rmk in hope to enable them one day everywhere --- conf/i386-pc.rmk | 4 ---- conf/i386.rmk | 12 ++++++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 3f0eeb611..662b398e5 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -235,10 +235,6 @@ bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_ timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64 -# It is defined in i386.rmk but requires ACPI -BOOTCHECKS += bootcheck-kfreebsd-x86_64 -# It is defined in i386.rmk but crashes early on non-BIOS -BOOTCHECKS += bootcheck-knetbsd-i386 include $(srcdir)/conf/i386.mk include $(srcdir)/conf/common.mk diff --git a/conf/i386.rmk b/conf/i386.rmk index 0b707ca6a..44a5cb185 100644 --- a/conf/i386.rmk +++ b/conf/i386.rmk @@ -202,10 +202,10 @@ bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386.gz $(GRUB_PAYLOADS_DIR)/kfreebsd. bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot.gz=kfreebsd-mfsroot.x86_64.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.i386 grub-shell +bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null -bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg knetbsd.miniroot-image.x86_64 grub-shell +bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/tests/boot/linux.cfg grub-shell @@ -217,9 +217,17 @@ bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 ifneq ($(platform), coreboot) +# Crashes because memory at 0-0x1000 is occupied BOOTCHECKS += bootcheck-kfreebsd-i386 bootcheck-knetbsd-x86_64 endif +ifeq ($(platform), pc) +# Requires ACPI +BOOTCHECKS += bootcheck-kfreebsd-x86_64 +# Crashes early on non-BIOS +BOOTCHECKS += bootcheck-knetbsd-i386 +endif + .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 From cfdcef121fa3b4fe6782498a3bf483472bb1a244 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 3 May 2010 23:00:49 +0200 Subject: [PATCH 128/271] Fix efiemu compilation condition --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 810b8e78d..60c989828 100644 --- a/configure.ac +++ b/configure.ac @@ -545,7 +545,7 @@ fi if test x"$target_cpu" != xi386 ; then efiemu_excuse="only available on i386" fi -if test x"$platform" != xefi ; then +if test x"$platform" = xefi ; then efiemu_excuse="not available on efi" fi if test x"$efiemu_excuse" = x ; then From 0cb0344d11b73b1e23e858fe344760651e9ea292 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 3 May 2010 23:02:18 +0200 Subject: [PATCH 129/271] Fix overflow and add more dprintfs --- lib/relocator.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 6fbdb71d7..5772ccc7d 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -200,15 +200,21 @@ allocate_inreg (grub_phys_addr_t paddr, grub_size_t size, { struct grub_mm_header *foll = NULL; grub_addr_t vaddr = (grub_addr_t) hb + (paddr - grub_vtop (hb)); + + grub_dprintf ("relocator", + "inreg paddr = 0x%x, size = %d, hb = %p, hbp = %p, rb = %p, vaddr = 0x%x\n", + paddr, size, hb, hbp, rb, vaddr); if (ALIGN_UP (vaddr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN <= (grub_addr_t) (hb + hb->size)) { foll = (void *) ALIGN_UP (vaddr + size, GRUB_MM_ALIGN); foll->magic = GRUB_MM_FREE_MAGIC; - foll->size = hb->size - (foll - hb); + foll->size = hb + hb->size - foll; } + grub_dprintf ("relocator", "foll = %p, foll->size = %d\n", foll, foll->size); + if (vaddr - (grub_addr_t) hb >= sizeof (*hb)) { hb->size = ((vaddr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2); @@ -431,12 +437,16 @@ malloc_in_range (struct grub_relocator *rel, p = r->first; do { + if ((grub_addr_t) p < (grub_addr_t) (r + 1) + || (grub_addr_t) p >= (grub_addr_t) (r + 1) + r->size) + grub_fatal ("%d: out of range pointer: %p\n", __LINE__, p); maxevents += 2; p = p->next; } while (p != r->first); maxevents += 4; } + if (collisioncheck && rel) { struct grub_relocator_chunk *chunk; @@ -617,6 +627,7 @@ malloc_in_range (struct grub_relocator *rel, eventt = events; events = t; } + { unsigned i; for (i = 0; i < (BITS_IN_BYTE * sizeof (grub_addr_t) / DIGITSORT_BITS); @@ -1146,6 +1157,7 @@ malloc_in_range (struct grub_relocator *rel, res->size = size; grub_dprintf ("relocator", "allocated: 0x%lx+0x%lx\n", (unsigned long) target, (unsigned long) size); + return 1; } @@ -1190,7 +1202,6 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, || (target <= chunk->target && chunk->target < target + size)) return grub_error (GRUB_ERR_BAD_ARGUMENT, "overlap detected"); - chunk = grub_malloc (sizeof (struct grub_relocator_chunk)); if (!chunk) return grub_errno; From 725396942e6929567f786234f0a95e7390d45f19 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 4 May 2010 09:47:48 +0530 Subject: [PATCH 130/271] replace --enable-grub-emu-modules with grub-emu-lite --- Makefile.in | 14 ++------- commands/parttool.c | 3 +- conf/any-emu.rmk | 38 ++++++++++++------------- configure.ac | 63 ++++++++++++++--------------------------- genmk.rb | 8 ------ include/grub/dl.h | 11 ++----- include/grub/emu/misc.h | 1 + include/grub/misc.h | 3 ++ kern/emu/main.c | 36 ++--------------------- kern/main.c | 2 ++ normal/main.c | 11 ++++--- util/misc.c | 4 +-- 12 files changed, 63 insertions(+), 131 deletions(-) diff --git a/Makefile.in b/Makefile.in index 822a08797..513deb516 100644 --- a/Makefile.in +++ b/Makefile.in @@ -44,7 +44,6 @@ pkglibdir = $(libdir)/`echo @PACKAGE_TARNAME@/$(target_cpu)-$(platform) | sed ' # Internationalization library. LIBINTL = @LIBINTL@ -TARGET_NO_MODULES = @TARGET_NO_MODULES@ # Util library. LIBUTIL = @LIBUTIL@ @@ -187,17 +186,10 @@ include $(srcdir)/conf/tests.mk -include $(wildcard $(GRUB_CONTRIB)/*/conf/common.mk) endif -ifeq ($(TARGET_NO_MODULES), yes) - TARGET_CFLAGS += -DGRUB_TARGET_NO_MODULES=1 - CFLAGS += -DGRUB_TARGET_NO_MODULES=1 -endif - ### General targets. CLEANFILES += $(pkglib_DATA) $(pkgdata_DATA) po/*.mo -ifneq ($(TARGET_NO_MODULES), yes) pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst -endif moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep.awk cat $(DEFSYMFILES) /dev/null \ | $(AWK) -f $(srcdir)/genmoddep.awk $(UNDSYMFILES) > $@ \ @@ -298,7 +290,7 @@ build_env.mk: Makefile ) > $@ pkglib_BUILDDIR += config.h grub_script.tab.h -all-local: $(PROGRAMS) $(GRUB_EMU) $(PKGLIB) $(PKGDATA) $(SCRIPTS) $(INFOS) $(MKFILES) $(foreach lang, $(LINGUAS), po/$(lang).mo) +all-local: $(PROGRAMS) $(GRUB_EMU) $(GRUB_EMU_LITE) $(PKGLIB) $(PKGDATA) $(SCRIPTS) $(INFOS) $(MKFILES) $(foreach lang, $(LINGUAS), po/$(lang).mo) install: install-local @@ -319,7 +311,7 @@ install-local: all $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(pkgdatadir)/$$dest; \ done $(SHELL) $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1 - @list='$(bin_UTILITIES) $(GRUB_EMU)'; for file in $$list; do \ + @list='$(bin_UTILITIES) $(GRUB_EMU) $(GRUB_EMU_LITE)'; for file in $$list; do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ $(INSTALL_PROGRAM) $$dir$$file $(DESTDIR)$(bindir)/$$dest; \ @@ -395,7 +387,7 @@ uninstall: dest="`echo $$file | sed 's,.*/,,'`"; \ rm -f $(DESTDIR)$(pkgdatadir)/$$dest; \ done - @list='$(bin_UTILITIES) $(bin_SCRIPTS) $(GRUB_EMU)'; for file in $$list; do \ + @list='$(bin_UTILITIES) $(bin_SCRIPTS) $(GRUB_EMU) $(GRUB_EMU_LITE)'; for file in $$list; do \ dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ rm -f $(DESTDIR)$(bindir)/$$dest; \ rm -f $(DESTDIR)$(mandir)/man1/$$dest.1; \ diff --git a/commands/parttool.c b/commands/parttool.c index 528cf43d7..f2a62e581 100644 --- a/commands/parttool.c +++ b/commands/parttool.c @@ -175,7 +175,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), } /* Load modules. */ -#if !GRUB_NO_MODULES + if (! grub_no_autoload) { const char *prefix; prefix = grub_env_get ("prefix"); @@ -233,7 +233,6 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), /* Ignore errors. */ grub_errno = GRUB_ERR_NONE; } -#endif if (argc == 1) return show_help (); diff --git a/conf/any-emu.rmk b/conf/any-emu.rmk index cb0ec873f..4e940181b 100644 --- a/conf/any-emu.rmk +++ b/conf/any-emu.rmk @@ -20,16 +20,13 @@ kernel_img_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Wno-undef -I$(srcdir)/g kernel_img_LDFLAGS = $(COMMON_LDFLAGS) TARGET_NO_STRIP = yes -ifneq ($(TARGET_NO_MODULES), yes) -kernel_img_SOURCES += symlist.c kern/$(target_cpu)/dl.c -ifneq ($(target_cpu), i386) -ifneq ($(target_cpu), x86_64) -kernel_img_SOURCES += kern/$(target_cpu)/cache.S -endif -endif -else -kernel_img_SOURCES += grub_emu_init.c -endif +noinst_MODULES = emu-full.mod +emu_full_mod_SOURCES = kern/emu/full.c +emu_full_mod_CFLAGS = $(COMMON_CFLAGS) + +noinst_MODULES = emu-lite.mod +emu_lite_mod_SOURCES = kern/emu/lite.c kern/emu/cache.S symlist.c +emu_lite_mod_CFLAGS = $(COMMON_CFLAGS) # For halt.mod. pkglib_MODULES += halt.mod @@ -102,13 +99,16 @@ grub_emu_init.c: genemuinit.sh $(pkglib_MODULES) grub_emu_init.h rm -f $@; echo $(pkglib_MODULES) | sh $(srcdir)/genemuinit.sh $(NM) > $@ DISTCLEANFILES += grub_emu_init.c -CLEANFILES += grub-emu -ifneq ($(TARGET_NO_MODULES), yes) -grub-emu: $(pkglib_PROGRAMS) - $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) -else -grub-emu: $(pkglib_MODULES) $(pkglib_PROGRAMS) - $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) -endif -GRUB_EMU=grub-emu +grub_emu_init.o: grub_emu_init.c grub_emu_init.h + rm -f $@; $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"grub_init.c\" -c -o $@ $< +CLEANFILES += grub_emu_init.o +CLEANFILES += grub-emu-lite +grub-emu-lite: $(pkglib_PROGRAMS) emu-lite.mod + $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) +GRUB_EMU_LITE=grub-emu-lite + +CLEANFILES += grub-emu +grub-emu: $(pkglib_MODULES) $(pkglib_PROGRAMS) emu-full.mod grub_emu_init.o + $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) +GRUB_EMU=grub-emu diff --git a/configure.ac b/configure.ac index 4e1dd41d8..9462b32a3 100644 --- a/configure.ac +++ b/configure.ac @@ -54,14 +54,12 @@ case "$target_cpu" in amd64) target_cpu=x86_64 ;; sparc) target_cpu=sparc64 ;; mipsel|mips64el) - target_cpu=mips; - TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPSEL=1"; - CFLAGS="$CFLAGS -DGRUB_CPU_MIPSEL=1"; + target_cpu=mips; + cpu_CPPFLAGS="-DGRUB_CPU_MIPSEL=1"; ;; mips|mips64) - target_cpu=mips; - TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPS=1"; - CFLAGS="$CFLAGS -DGRUB_CPU_MIPS=1"; + target_cpu=mips; + cpu_CPPFLAGS="-DGRUB_CPU_MIPS=1"; ;; esac @@ -136,24 +134,27 @@ case "$host_os" in esac case "$platform" in - coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; - multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; - efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;; - ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; - qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;; - pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; - emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;; - yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; - qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + coreboot) machine_CPPFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CPPFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CPPFLAGS="-DGRUB_MACHINE_EFI=1" ;; + ieee1275) machine_CPPFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; + qemu) machine_CPPFLAGS="-DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CPPFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CPPFLAGS="-DGRUB_MACHINE_EMU=1" ;; + yeeloong) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + qemu-mips) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; esac case "$target_cpu" in - mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;; - sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;; + i386) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_I386";; + x86_64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_X86_64";; + powerpc) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_POWERPC";; + mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;; # cpu_CPPFLAGS handled above + sparc64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_SPARC64"; + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;; esac -CFLAGS="$CFLAGS $machine_CFLAGS" -TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CFLAGS" -TARGET_CFLAGS="$TARGET_CFLAGS $machine_CFLAGS" +CPPFLAGS="$CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" +TARGET_CFLAGS="$TARGET_CFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" AC_SUBST(host_cpu) AC_SUBST(host_os) @@ -608,10 +609,6 @@ AC_ARG_ENABLE([grub-emu-pci], [AS_HELP_STRING([--enable-grub-emu-pci], [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])]) -AC_ARG_ENABLE([grub-emu-modules], - [AS_HELP_STRING([--enable-grub-emu-modules], - [Support module loading in `grub-emu' debugging utility (default=no)])]) - if test "$platform" = emu; then missing_ncurses= [# Check for curses libraries.] @@ -630,19 +627,6 @@ if test x"$missing_ncurses" = xtrue ; then AC_MSG_ERROR([grub-emu can't be compiled without ncurses]) fi -if test x"$enable_grub_emu_modules" = xyes ; then - TARGET_NO_MODULES=no -else - TARGET_NO_MODULES=yes -fi -AC_SUBST(TARGET_NO_MODULES) - -if test "$TARGET_NO_MODULES" = yes ; then - # Do not convert modules, otherwise linkage may fail (Cygwin only). - # FIXME: Should be checked above before TARGET_OBJ2ELF is set first. - TARGET_OBJ2ELF= -fi - if test x"$enable_grub_emu_usb" = xno ; then grub_emu_usb_excuse="explicitly disabled" fi @@ -820,11 +804,6 @@ echo PCI support for grub-emu: Yes else echo PCI support for grub-emu: No "($grub_emu_pci_excuse)" fi -if [ x"$TARGET_NO_MODULES" = xno ]; then -echo Module support for grub-emu: Yes -else -echo Module support for grub-emu: No -fi fi if [ x"$enable_mm_debug" = xyes ]; then echo With memory debugging: Yes diff --git a/genmk.rb b/genmk.rb index e62dbd4f6..6b5ecd1d4 100644 --- a/genmk.rb +++ b/genmk.rb @@ -143,13 +143,6 @@ mostlyclean-module-#{@name}.#{@rule_count}: MOSTLYCLEAN_MODULE_TARGETS += mostlyclean-module-#{@name}.#{@rule_count} UNDSYMFILES += #{undsym} -ifeq ($(TARGET_NO_MODULES), yes) -#{@name}: #{pre_obj} $(TARGET_OBJ2ELF) - -rm -f $@ - $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} - if test ! -z \"$(TARGET_OBJ2ELF)\"; then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi - if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; fi -else ifneq ($(TARGET_APPLE_CC),1) #{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) -rm -f $@ @@ -164,7 +157,6 @@ else $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -ew2030 -ew2050 -nu -nd $@.bin $@ -rm -f $@.bin endif -endif #{pre_obj}: $(#{prefix}_DEPENDENCIES) #{objs_str} -rm -f $@ diff --git a/include/grub/dl.h b/include/grub/dl.h index cf5da7fd5..fde2e3163 100644 --- a/include/grub/dl.h +++ b/include/grub/dl.h @@ -91,22 +91,17 @@ grub_dl_t grub_dl_load_core (void *addr, grub_size_t size); int EXPORT_FUNC(grub_dl_unload) (grub_dl_t mod); void grub_dl_unload_unneeded (void); void grub_dl_unload_all (void); -#if defined (GRUB_UTIL) || defined (GRUB_TARGET_NO_MODULES) -#define GRUB_NO_MODULES 1 -#else -#define GRUB_NO_MODULES 0 -#endif int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); void EXPORT_FUNC(grub_dl_iterate) (int (*hook) (grub_dl_t mod)); grub_dl_t EXPORT_FUNC(grub_dl_get) (const char *name); -grub_err_t grub_dl_register_symbol (const char *name, void *addr, - grub_dl_t mod); +grub_err_t EXPORT_FUNC(grub_dl_register_symbol) (const char *name, void *addr, + grub_dl_t mod); grub_err_t grub_arch_dl_check_header (void *ehdr); grub_err_t grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr); -#if defined (_mips) && ! GRUB_NO_MODULES +#if defined (_mips) && ! GRUB_MACHINE_EMU #define GRUB_LINKER_HAVE_INIT 1 void grub_arch_dl_init_linker (void); #endif diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h index 146e64aa9..6d7fd8820 100644 --- a/include/grub/emu/misc.h +++ b/include/grub/emu/misc.h @@ -16,6 +16,7 @@ extern int verbosity; extern const char *program_name; +void grub_emu_init (void); void grub_init_all (void); void grub_fini_all (void); diff --git a/include/grub/misc.h b/include/grub/misc.h index 9bfc6974e..1ec8bbc5a 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -50,6 +50,9 @@ /* XXX: If grub_memmove is too slow, we must implement grub_memcpy. */ #define grub_memcpy(d,s,n) grub_memmove ((d), (s), (n)) +/* Flag to control module autoloading in normal mode. */ +extern int EXPORT_VAR(grub_no_autoload); + void *EXPORT_FUNC(grub_memmove) (void *dest, const void *src, grub_size_t n); char *EXPORT_FUNC(grub_strcpy) (char *dest, const char *src); char *EXPORT_FUNC(grub_strncpy) (char *dest, const char *src, int c); diff --git a/kern/emu/main.c b/kern/emu/main.c index fb5dbf19f..8d6118c93 100644 --- a/kern/emu/main.c +++ b/kern/emu/main.c @@ -57,25 +57,6 @@ grub_arch_modules_addr (void) return 0; } -#if GRUB_NO_MODULES -grub_err_t -grub_arch_dl_check_header (void *ehdr) -{ - (void) ehdr; - - return GRUB_ERR_BAD_MODULE; -} - -grub_err_t -grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) -{ - (void) mod; - (void) ehdr; - - return GRUB_ERR_BAD_MODULE; -} -#endif - void grub_reboot (void) { @@ -154,10 +135,7 @@ void grub_hostfs_init (void); void grub_hostfs_fini (void); void grub_host_init (void); void grub_host_fini (void); -#if GRUB_NO_MODULES -void grub_init_all (void); -void grub_fini_all (void); -#endif +void grub_emu_init (void); int main (int argc, char *argv[]) @@ -216,6 +194,7 @@ main (int argc, char *argv[]) } signal (SIGINT, SIG_IGN); + grub_emu_init (); grub_console_init (); grub_host_init (); grub_hostfs_init (); @@ -223,9 +202,7 @@ main (int argc, char *argv[]) /* XXX: This is a bit unportable. */ grub_util_biosdisk_init (dev_map); -#if GRUB_NO_MODULES grub_init_all (); -#endif /* Make sure that there is a root device. */ if (! root_dev) @@ -255,9 +232,7 @@ main (int argc, char *argv[]) if (setjmp (main_env) == 0) grub_main (); -#if GRUB_NO_MODULES grub_fini_all (); -#endif grub_hostfs_fini (); grub_host_fini (); @@ -287,10 +262,3 @@ grub_millisleep (grub_uint32_t ms) } #endif - -#if GRUB_NO_MODULES -void -grub_register_exported_symbols (void) -{ -} -#endif diff --git a/kern/main.c b/kern/main.c index 1fdf4ab07..2541d3295 100644 --- a/kern/main.c +++ b/kern/main.c @@ -30,6 +30,8 @@ #include #include +int grub_no_autoload; + void grub_module_iterate (int (*hook) (struct grub_module_header *header)) { diff --git a/normal/main.c b/normal/main.c index 4ed17e82c..2d493b897 100644 --- a/normal/main.c +++ b/normal/main.c @@ -476,10 +476,13 @@ grub_normal_init_page (struct grub_term_output *term) static void read_lists (const char *val) { - read_command_list (val); - read_fs_list (val); - read_crypto_list (val); - read_terminal_list (val); + if (! grub_no_autoload) + { + read_command_list (val); + read_fs_list (val); + read_crypto_list (val); + read_terminal_list (val); + } } static char * diff --git a/util/misc.c b/util/misc.c index 1656d6b5b..caec60552 100644 --- a/util/misc.c +++ b/util/misc.c @@ -193,12 +193,10 @@ grub_mm_init_region (void *addr __attribute__ ((unused)), { } -#if GRUB_NO_MODULES void grub_register_exported_symbols (void) { } -#endif #ifdef __MINGW32__ @@ -222,7 +220,7 @@ grub_millisleep (grub_uint32_t ms) #endif -#if !(defined (__i386__) || defined (__x86_64__)) && GRUB_NO_MODULES +#if !(defined (__i386__) || defined (__x86_64__)) && GRUB_MACHINE_EMU void grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) From c3a4565068d248737de7a5cc0d159cef8181732f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 4 May 2010 11:32:10 +0200 Subject: [PATCH 131/271] Don't access NULL in dprintf --- lib/relocator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index 5772ccc7d..c30177591 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -211,10 +211,10 @@ allocate_inreg (grub_phys_addr_t paddr, grub_size_t size, foll = (void *) ALIGN_UP (vaddr + size, GRUB_MM_ALIGN); foll->magic = GRUB_MM_FREE_MAGIC; foll->size = hb + hb->size - foll; + grub_dprintf ("relocator", "foll = %p, foll->size = %d\n", foll, + foll->size); } - grub_dprintf ("relocator", "foll = %p, foll->size = %d\n", foll, foll->size); - if (vaddr - (grub_addr_t) hb >= sizeof (*hb)) { hb->size = ((vaddr - (grub_addr_t) hb) >> GRUB_MM_ALIGN_LOG2); From 4e75dd1212e66914f83e360bf4e9056da8aaf776 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 4 May 2010 17:25:29 +0200 Subject: [PATCH 132/271] fix warnings on x86_64 --- lib/relocator.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/relocator.c b/lib/relocator.c index c30177591..9f9927929 100644 --- a/lib/relocator.c +++ b/lib/relocator.c @@ -201,9 +201,10 @@ allocate_inreg (grub_phys_addr_t paddr, grub_size_t size, struct grub_mm_header *foll = NULL; grub_addr_t vaddr = (grub_addr_t) hb + (paddr - grub_vtop (hb)); - grub_dprintf ("relocator", - "inreg paddr = 0x%x, size = %d, hb = %p, hbp = %p, rb = %p, vaddr = 0x%x\n", - paddr, size, hb, hbp, rb, vaddr); + grub_dprintf ("relocator", "inreg paddr = 0x%lx, size = %lu," + " hb = %p, hbp = %p, rb = %p, vaddr = 0x%lx\n", + (unsigned long) paddr, (unsigned long) size, hb, hbp, + rb, (unsigned long) vaddr); if (ALIGN_UP (vaddr + size, GRUB_MM_ALIGN) + GRUB_MM_ALIGN <= (grub_addr_t) (hb + hb->size)) @@ -211,8 +212,8 @@ allocate_inreg (grub_phys_addr_t paddr, grub_size_t size, foll = (void *) ALIGN_UP (vaddr + size, GRUB_MM_ALIGN); foll->magic = GRUB_MM_FREE_MAGIC; foll->size = hb + hb->size - foll; - grub_dprintf ("relocator", "foll = %p, foll->size = %d\n", foll, - foll->size); + grub_dprintf ("relocator", "foll = %p, foll->size = %lu\n", foll, + (unsigned long) foll->size); } if (vaddr - (grub_addr_t) hb >= sizeof (*hb)) From 0cd8e62cfa74e68a03f016286ce1937f6906f352 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 5 May 2010 21:41:25 +0200 Subject: [PATCH 133/271] remove leftover modules --- conf/i386-ieee1275.rmk | 2 +- conf/i386-multiboot.rmk | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk index 1b7460dc3..b12022780 100644 --- a/conf/i386-ieee1275.rmk +++ b/conf/i386-ieee1275.rmk @@ -36,7 +36,7 @@ sbin_SCRIPTS = grub-install grub_install_SOURCES = util/ieee1275/grub-install.in # Modules. -pkglib_MODULES = halt.mod suspend.mod aout.mod nand.mod datetime.mod mmap.mod +pkglib_MODULES = halt.mod suspend.mod nand.mod datetime.mod mmap.mod # For mmap.mod. mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c diff --git a/conf/i386-multiboot.rmk b/conf/i386-multiboot.rmk index ddfb7e283..6475e6763 100644 --- a/conf/i386-multiboot.rmk +++ b/conf/i386-multiboot.rmk @@ -36,7 +36,7 @@ bin_SCRIPTS += grub-mkrescue grub_mkrescue_SOURCES = util/grub-mkrescue.in # Modules. -pkglib_MODULES = linux.mod halt.mod datetime.mod mmap.mod +pkglib_MODULES = halt.mod datetime.mod mmap.mod # For mmap.mod. mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c @@ -44,11 +44,6 @@ mmap_mod_CFLAGS = $(COMMON_CFLAGS) mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For halt.mod. halt_mod_SOURCES = commands/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) From f948a3ffab9076be1db1f9146e8319c4aea0db81 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 5 May 2010 21:42:39 +0200 Subject: [PATCH 134/271] respect GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM --- lib/ieee1275/relocator.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/ieee1275/relocator.c b/lib/ieee1275/relocator.c index bf7f4a821..947346d46 100644 --- a/lib/ieee1275/relocator.c +++ b/lib/ieee1275/relocator.c @@ -54,6 +54,18 @@ grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events) if (type != GRUB_MACHINE_MEMORY_AVAILABLE) return 0; + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM)) + { + if (addr + len <= 0x180000) + return 0; + + if (addr < 0x180000) + { + len = addr + len - 0x180000; + addr = 0x180000; + } + } + events[counter].type = REG_FIRMWARE_START; events[counter].pos = addr; counter++; From 8c411768822a75c8c15108872191a05e84befa6e Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 6 May 2010 11:34:04 +0530 Subject: [PATCH 135/271] automake commit without merge history --- .bzrignore | 6 + ABOUT-NLS | 223 +++ Makefile.am | 87 + Makefile.in | 564 ------ autogen.sh | 39 +- configure.ac | 783 +------- configure.common | 804 +++++++++ docs/Makefile.am | 6 + geninit.sh | 30 +- geninitheader.sh | 45 - genkernsyms.sh.in | 27 - genmk.rb | 475 ----- gentpl.py | 460 +++++ grub-core/Makefile.am | 155 ++ grub-core/Makefile.extra-dist | 53 + grub-core/Makefile.kernel | 192 ++ grub-core/Makefile.vars | 80 + {boot => grub-core/boot}/i386/pc/boot.S | 0 {boot => grub-core/boot}/i386/pc/cdboot.S | 0 {boot => grub-core/boot}/i386/pc/diskboot.S | 0 {boot => grub-core/boot}/i386/pc/lnxboot.S | 0 {boot => grub-core/boot}/i386/pc/pxeboot.S | 0 {boot => grub-core/boot}/i386/qemu/boot.S | 0 .../boot}/sparc64/ieee1275/boot.S | 0 .../boot}/sparc64/ieee1275/diskboot.S | 0 {bus => grub-core/bus}/bonito.c | 0 {util => grub-core/bus/emu}/pci.c | 1 + {bus => grub-core/bus}/pci.c | 0 {util => grub-core/bus/usb/emu}/usb.c | 0 {bus => grub-core/bus}/usb/ohci.c | 0 {bus => grub-core/bus}/usb/uhci.c | 0 {bus => grub-core/bus}/usb/usb.c | 0 {bus => grub-core/bus}/usb/usbhub.c | 0 {bus => grub-core/bus}/usb/usbtrans.c | 0 {commands => grub-core/commands}/acpi.c | 0 {commands => grub-core/commands}/blocklist.c | 0 {commands => grub-core/commands}/boot.c | 0 {commands => grub-core/commands}/cat.c | 0 {commands => grub-core/commands}/cmp.c | 0 {commands => grub-core/commands}/configfile.c | 0 {commands => grub-core/commands}/crc.c | 0 {commands => grub-core/commands}/date.c | 0 {commands => grub-core/commands}/echo.c | 0 {commands => grub-core/commands}/efi/acpi.c | 0 .../commands}/efi/fixvideo.c | 0 .../commands}/efi/loadbios.c | 0 {commands => grub-core/commands}/extcmd.c | 0 {commands => grub-core/commands}/gptsync.c | 0 {commands => grub-core/commands}/halt.c | 0 {commands => grub-core/commands}/handler.c | 0 {commands => grub-core/commands}/hashsum.c | 0 {commands => grub-core/commands}/hdparm.c | 0 {commands => grub-core/commands}/help.c | 0 {commands => grub-core/commands}/hexdump.c | 0 {commands => grub-core/commands}/i386/cpuid.c | 0 .../commands}/i386/pc/acpi.c | 0 .../commands}/i386/pc/drivemap.c | 0 .../commands}/i386/pc/drivemap_int13h.S | 0 .../commands}/i386/pc/halt.c | 0 .../commands}/i386/pc/play.c | 0 .../commands}/i386/pc/pxecmd.c | 0 .../commands}/i386/pc/vbeinfo.c | 0 .../commands}/i386/pc/vbetest.c | 0 .../commands}/ieee1275/suspend.c | 0 {commands => grub-core/commands}/iorw.c | 0 {commands => grub-core/commands}/keystatus.c | 0 {commands => grub-core/commands}/loadenv.c | 0 {commands => grub-core/commands}/ls.c | 0 {commands => grub-core/commands}/lsmmap.c | 0 {commands => grub-core/commands}/lspci.c | 0 {commands => grub-core/commands}/memrw.c | 0 {commands => grub-core/commands}/minicmd.c | 0 {commands => grub-core/commands}/parttool.c | 2 +- {commands => grub-core/commands}/password.c | 0 .../commands}/password_pbkdf2.c | 0 {commands => grub-core/commands}/probe.c | 0 {commands => grub-core/commands}/read.c | 0 {commands => grub-core/commands}/reboot.c | 0 {commands => grub-core/commands}/regexp.c | 0 {commands => grub-core/commands}/search.c | 0 .../commands}/search_file.c | 0 .../commands}/search_label.c | 0 .../commands}/search_uuid.c | 0 .../commands}/search_wrap.c | 0 {commands => grub-core/commands}/setpci.c | 0 {commands => grub-core/commands}/sleep.c | 0 {commands => grub-core/commands}/terminal.c | 0 {commands => grub-core/commands}/test.c | 0 {commands => grub-core/commands}/true.c | 0 {commands => grub-core/commands}/usbtest.c | 0 {commands => grub-core/commands}/videotest.c | 0 {commands => grub-core/commands}/xnu_uuid.c | 0 {conf => grub-core/conf}/any-emu.rmk | 0 {conf => grub-core/conf}/common.rmk | 0 {conf => grub-core/conf}/i386-coreboot.rmk | 0 {conf => grub-core/conf}/i386-efi.rmk | 0 {conf => grub-core/conf}/i386-ieee1275.rmk | 0 {conf => grub-core/conf}/i386-multiboot.rmk | 0 .../conf}/i386-pc-cygwin-img-ld.sc | 0 {conf => grub-core/conf}/i386-pc.rmk | 0 {conf => grub-core/conf}/i386-qemu.rmk | 0 {conf => grub-core/conf}/i386.rmk | 0 {conf => grub-core/conf}/mips-qemu-mips.rmk | 0 {conf => grub-core/conf}/mips-yeeloong.rmk | 0 {conf => grub-core/conf}/mips.rmk | 0 {conf => grub-core/conf}/powerpc-ieee1275.rmk | 0 {conf => grub-core/conf}/sparc64-ieee1275.rmk | 0 {conf => grub-core/conf}/tests.rmk | 0 {conf => grub-core/conf}/x86-efi.rmk | 0 {conf => grub-core/conf}/x86_64-efi.rmk | 0 grub-core/configure.ac | 91 + {disk => grub-core/disk}/ata.c | 0 {disk => grub-core/disk}/ata_pthru.c | 0 {disk => grub-core/disk}/dmraid_nvidia.c | 0 {disk => grub-core/disk}/efi/efidisk.c | 0 {disk => grub-core/disk}/host.c | 0 {disk => grub-core/disk}/i386/pc/biosdisk.c | 0 {disk => grub-core/disk}/ieee1275/nand.c | 0 {disk => grub-core/disk}/ieee1275/ofdisk.c | 0 {disk => grub-core/disk}/loopback.c | 0 {disk => grub-core/disk}/lvm.c | 0 {disk => grub-core/disk}/mdraid_linux.c | 0 {disk => grub-core/disk}/memdisk.c | 0 {disk => grub-core/disk}/raid.c | 0 {disk => grub-core/disk}/raid5_recover.c | 0 {disk => grub-core/disk}/raid6_recover.c | 0 {disk => grub-core/disk}/scsi.c | 0 {disk => grub-core/disk}/usbms.c | 0 .../efiemu}/i386/coredetect.c | 0 .../efiemu}/i386/loadcore32.c | 0 .../efiemu}/i386/loadcore64.c | 0 .../efiemu}/i386/pc/cfgtables.c | 0 {efiemu => grub-core/efiemu}/loadcore.c | 0 {efiemu => grub-core/efiemu}/loadcore32.c | 0 {efiemu => grub-core/efiemu}/loadcore64.c | 0 .../efiemu}/loadcore_common.c | 0 {efiemu => grub-core/efiemu}/main.c | 0 {efiemu => grub-core/efiemu}/mm.c | 0 {efiemu => grub-core/efiemu}/pnvram.c | 0 {efiemu => grub-core/efiemu}/prepare.c | 0 {efiemu => grub-core/efiemu}/prepare32.c | 0 {efiemu => grub-core/efiemu}/prepare64.c | 0 {efiemu => grub-core/efiemu}/runtime/config.h | 0 {efiemu => grub-core/efiemu}/runtime/efiemu.S | 0 {efiemu => grub-core/efiemu}/runtime/efiemu.c | 0 .../efiemu}/runtime/efiemu.sh | 0 {efiemu => grub-core/efiemu}/symbols.c | 0 {font => grub-core/font}/font.c | 0 {font => grub-core/font}/font_cmd.c | 0 {fs => grub-core/fs}/affs.c | 0 {fs => grub-core/fs}/afs.c | 0 {fs => grub-core/fs}/afs_be.c | 0 {fs => grub-core/fs}/befs.c | 0 {fs => grub-core/fs}/befs_be.c | 0 {fs => grub-core/fs}/cpio.c | 0 {fs => grub-core/fs}/ext2.c | 0 {fs => grub-core/fs}/fat.c | 0 {fs => grub-core/fs}/fshelp.c | 0 {fs => grub-core/fs}/hfs.c | 0 {fs => grub-core/fs}/hfsplus.c | 0 {fs => grub-core/fs}/i386/pc/pxe.c | 0 {fs => grub-core/fs}/iso9660.c | 0 {fs => grub-core/fs}/jfs.c | 0 {fs => grub-core/fs}/minix.c | 0 {fs => grub-core/fs}/nilfs2.c | 0 {fs => grub-core/fs}/ntfs.c | 0 {fs => grub-core/fs}/ntfscomp.c | 0 {fs => grub-core/fs}/reiserfs.c | 0 {fs => grub-core/fs}/sfs.c | 0 {fs => grub-core/fs}/tar.c | 0 {fs => grub-core/fs}/udf.c | 0 {fs => grub-core/fs}/ufs.c | 0 {fs => grub-core/fs}/ufs2.c | 0 {fs => grub-core/fs}/xfs.c | 0 gencmdlist.sh => grub-core/gencmdlist.sh | 0 gendistlist.sh => grub-core/gendistlist.sh | 0 genemuinit.sh => grub-core/genemuinit.sh | 0 .../genemuinitheader.sh | 0 genfslist.sh => grub-core/genfslist.sh | 0 .../genhandlerlist.sh | 0 genmoddep.awk => grub-core/genmoddep.awk | 13 +- genmodsrc.sh => grub-core/genmodsrc.sh | 0 .../genpartmaplist.sh | 0 .../genparttoollist.sh | 0 gensymlist.sh.in => grub-core/gensymlist.sh | 13 +- .../genterminallist.sh | 0 gentrigtables.c => grub-core/gentrigtables.c | 3 +- genvideolist.sh => grub-core/genvideolist.sh | 0 {gettext => grub-core/gettext}/gettext.c | 0 {gfxmenu => grub-core/gfxmenu}/gfxmenu.c | 0 {gfxmenu => grub-core/gfxmenu}/gui_box.c | 0 {gfxmenu => grub-core/gfxmenu}/gui_canvas.c | 0 .../gfxmenu}/gui_circular_progress.c | 0 {gfxmenu => grub-core/gfxmenu}/gui_image.c | 0 {gfxmenu => grub-core/gfxmenu}/gui_label.c | 0 {gfxmenu => grub-core/gfxmenu}/gui_list.c | 0 .../gfxmenu}/gui_progress_bar.c | 0 .../gfxmenu}/gui_string_util.c | 0 {gfxmenu => grub-core/gfxmenu}/gui_util.c | 0 {gfxmenu => grub-core/gfxmenu}/icon_manager.c | 0 {gfxmenu => grub-core/gfxmenu}/model.c | 0 {gfxmenu => grub-core/gfxmenu}/named_colors.c | 0 {gfxmenu => grub-core/gfxmenu}/theme_loader.c | 0 {gfxmenu => grub-core/gfxmenu}/view.c | 0 {gfxmenu => grub-core/gfxmenu}/widget-box.c | 0 {gnulib => grub-core/gnulib}/alloca.h | 0 {gnulib => grub-core/gnulib}/argp-ba.c | 0 {gnulib => grub-core/gnulib}/argp-eexst.c | 0 {gnulib => grub-core/gnulib}/argp-fmtstream.c | 0 {gnulib => grub-core/gnulib}/argp-fmtstream.h | 0 {gnulib => grub-core/gnulib}/argp-fs-xinl.c | 0 {gnulib => grub-core/gnulib}/argp-help.c | 0 {gnulib => grub-core/gnulib}/argp-namefrob.h | 0 {gnulib => grub-core/gnulib}/argp-parse.c | 0 {gnulib => grub-core/gnulib}/argp-pin.c | 0 {gnulib => grub-core/gnulib}/argp-pv.c | 0 {gnulib => grub-core/gnulib}/argp-pvh.c | 0 .../gnulib}/argp-version-etc.c | 0 .../gnulib}/argp-version-etc.h | 0 {gnulib => grub-core/gnulib}/argp-xinl.c | 0 {gnulib => grub-core/gnulib}/argp.h | 0 {gnulib => grub-core/gnulib}/error.c | 0 {gnulib => grub-core/gnulib}/error.h | 0 {gnulib => grub-core/gnulib}/fnmatch.c | 0 {gnulib => grub-core/gnulib}/fnmatch.h | 0 {gnulib => grub-core/gnulib}/fnmatch_loop.c | 0 {gnulib => grub-core/gnulib}/getdelim.c | 0 {gnulib => grub-core/gnulib}/getline.c | 0 {gnulib => grub-core/gnulib}/getopt.c | 0 {gnulib => grub-core/gnulib}/getopt.h | 0 {gnulib => grub-core/gnulib}/getopt1.c | 0 {gnulib => grub-core/gnulib}/getopt_int.h | 0 {gnulib => grub-core/gnulib}/gettext.h | 0 {gnulib => grub-core/gnulib}/progname.c | 0 {gnulib => grub-core/gnulib}/progname.h | 0 {gnulib => grub-core/gnulib}/regcomp.c | 0 {gnulib => grub-core/gnulib}/regex.c | 0 {gnulib => grub-core/gnulib}/regex.h | 0 {gnulib => grub-core/gnulib}/regex_internal.c | 0 {gnulib => grub-core/gnulib}/regex_internal.h | 0 {gnulib => grub-core/gnulib}/regexec.c | 0 {hello => grub-core/hello}/hello.c | 0 {hook => grub-core/hook}/datehook.c | 0 {util => grub-core}/import_gcry.py | 0 .../include}/grub/acorn_filecore.h | 0 {include => grub-core/include}/grub/acpi.h | 0 {include => grub-core/include}/grub/aout.h | 0 .../include}/grub/at_keyboard.h | 0 {include => grub-core/include}/grub/ata.h | 0 {include => grub-core/include}/grub/auth.h | 0 {include => grub-core/include}/grub/autoefi.h | 0 {include => grub-core/include}/grub/bitmap.h | 0 .../include}/grub/bitmap_scale.h | 0 {include => grub-core/include}/grub/boot.h | 0 .../include}/grub/bsdlabel.h | 0 {include => grub-core/include}/grub/bufio.h | 0 {include => grub-core/include}/grub/cache.h | 0 {include => grub-core/include}/grub/charset.h | 0 {include => grub-core/include}/grub/cmos.h | 0 {include => grub-core/include}/grub/command.h | 0 {include => grub-core/include}/grub/crypto.h | 0 .../include}/grub/datetime.h | 0 {include => grub-core/include}/grub/device.h | 0 {include => grub-core/include}/grub/disk.h | 0 {include => grub-core/include}/grub/dl.h | 32 +- {include => grub-core/include}/grub/efi/api.h | 0 .../include}/grub/efi/console.h | 0 .../include}/grub/efi/console_control.h | 0 .../include}/grub/efi/disk.h | 0 {include => grub-core/include}/grub/efi/efi.h | 0 .../include}/grub/efi/graphics_output.h | 0 .../include}/grub/efi/memory.h | 0 .../include}/grub/efi/pe32.h | 0 .../include}/grub/efi/time.h | 0 .../include}/grub/efi/uga_draw.h | 0 .../include}/grub/efiemu/efiemu.h | 0 .../include}/grub/efiemu/runtime.h | 0 {include => grub-core/include}/grub/elf.h | 0 {include => grub-core/include}/grub/elfload.h | 0 .../include/grub/emu}/console.h | 0 .../include/grub/emu}/getroot.h | 1 + .../include/grub/emu}/hostdisk.h | 0 grub-core/include/grub/emu/misc.h | 22 + {include => grub-core/include}/grub/env.h | 0 .../include}/grub/env_private.h | 0 {include => grub-core/include}/grub/err.h | 0 {include => grub-core/include}/grub/extcmd.h | 0 {include => grub-core/include}/grub/fbblit.h | 0 {include => grub-core/include}/grub/fbfill.h | 0 {include => grub-core/include}/grub/fbutil.h | 0 {include => grub-core/include}/grub/file.h | 0 {include => grub-core/include}/grub/font.h | 0 .../include}/grub/fontformat.h | 0 {include => grub-core/include}/grub/fs.h | 0 {include => grub-core/include}/grub/fshelp.h | 0 .../include}/grub/gfxmenu_model.h | 0 .../include}/grub/gfxmenu_view.h | 0 {include => grub-core/include}/grub/gfxterm.h | 0 .../include}/grub/gfxwidgets.h | 0 .../include}/grub/gpt_partition.h | 0 {include => grub-core/include}/grub/gui.h | 0 .../include}/grub/gui_string_util.h | 0 {include => grub-core/include}/grub/gzio.h | 0 {include => grub-core/include}/grub/handler.h | 0 {include => grub-core/include}/grub/hfs.h | 0 {include => grub-core/include}/grub/i18n.h | 0 .../include}/grub/i386/at_keyboard.h | 0 .../include}/grub/i386/bsd.h | 0 .../include}/grub/i386/cmos.h | 0 .../include}/grub/i386/coreboot/boot.h | 0 .../include}/grub/i386/coreboot/console.h | 0 .../include}/grub/i386/coreboot/init.h | 0 .../include}/grub/i386/coreboot/kernel.h | 0 .../include}/grub/i386/coreboot/loader.h | 0 .../include}/grub/i386/coreboot/memory.h | 0 .../include}/grub/i386/coreboot/serial.h | 0 .../include}/grub/i386/coreboot/time.h | 0 .../include}/grub/i386/cpuid.h | 0 .../include}/grub/i386/efi/kernel.h | 0 .../include}/grub/i386/efi/loader.h | 0 .../include}/grub/i386/efi/memory.h | 0 .../include}/grub/i386/efi/serial.h | 0 .../include}/grub/i386/efi/time.h | 0 .../include}/grub/i386/efiemu.h | 0 .../include}/grub/i386/freebsd_linker.h | 0 .../include}/grub/i386/freebsd_reboot.h | 0 .../include}/grub/i386/ieee1275/console.h | 0 .../include}/grub/i386/ieee1275/ieee1275.h | 0 .../include}/grub/i386/ieee1275/kernel.h | 0 .../include}/grub/i386/ieee1275/loader.h | 0 .../include}/grub/i386/ieee1275/memory.h | 0 .../include}/grub/i386/ieee1275/serial.h | 0 .../include}/grub/i386/ieee1275/time.h | 0 {include => grub-core/include}/grub/i386/io.h | 0 .../include}/grub/i386/kernel.h | 0 .../include}/grub/i386/linux.h | 0 .../include}/grub/i386/loader.h | 0 .../include}/grub/i386/macho.h | 0 .../include}/grub/i386/memory.h | 0 .../include}/grub/i386/multiboot.h | 0 .../include}/grub/i386/multiboot/boot.h | 0 .../include}/grub/i386/multiboot/console.h | 0 .../include}/grub/i386/multiboot/init.h | 0 .../include}/grub/i386/multiboot/kernel.h | 0 .../include}/grub/i386/multiboot/loader.h | 0 .../include}/grub/i386/multiboot/memory.h | 0 .../include}/grub/i386/multiboot/serial.h | 0 .../include}/grub/i386/multiboot/time.h | 0 .../include}/grub/i386/netbsd_bootinfo.h | 0 .../include}/grub/i386/netbsd_reboot.h | 0 .../include}/grub/i386/openbsd_bootarg.h | 0 .../include}/grub/i386/openbsd_reboot.h | 0 .../include}/grub/i386/pc/biosdisk.h | 0 .../include}/grub/i386/pc/biosnum.h | 0 .../include}/grub/i386/pc/boot.h | 0 .../include}/grub/i386/pc/chainloader.h | 0 .../include}/grub/i386/pc/console.h | 0 .../include}/grub/i386/pc/efiemu.h | 0 .../include}/grub/i386/pc/init.h | 0 .../include}/grub/i386/pc/kernel.h | 0 .../include}/grub/i386/pc/loader.h | 0 .../include}/grub/i386/pc/memory.h | 0 .../include}/grub/i386/pc/pxe.h | 0 .../include}/grub/i386/pc/time.h | 0 .../include}/grub/i386/pc/vbe.h | 0 .../include}/grub/i386/pc/vga.h | 0 .../include}/grub/i386/pci.h | 0 .../include}/grub/i386/pit.h | 0 .../include}/grub/i386/qemu/boot.h | 0 .../include}/grub/i386/qemu/console.h | 0 .../include}/grub/i386/qemu/init.h | 0 .../include}/grub/i386/qemu/kernel.h | 0 .../include}/grub/i386/qemu/loader.h | 0 .../include}/grub/i386/qemu/memory.h | 0 .../include}/grub/i386/qemu/serial.h | 0 .../include}/grub/i386/qemu/time.h | 0 .../include}/grub/i386/relocator.h | 0 .../include}/grub/i386/setjmp.h | 0 .../include}/grub/i386/time.h | 0 .../include}/grub/i386/tsc.h | 0 .../include}/grub/i386/types.h | 0 .../include}/grub/i386/vga_common.h | 0 .../include}/grub/i386/xnu.h | 0 .../include}/grub/icon_manager.h | 0 .../include}/grub/ieee1275/ieee1275.h | 0 .../include}/grub/ieee1275/ofdisk.h | 0 {include => grub-core/include}/grub/kernel.h | 0 .../include}/grub/lib/LzFind.h | 0 .../include}/grub/lib/LzHash.h | 0 .../include}/grub/lib/LzmaDec.h | 0 .../include}/grub/lib/LzmaEnc.h | 0 .../include}/grub/lib/LzmaTypes.h | 0 {include => grub-core/include}/grub/lib/arg.h | 0 {include => grub-core/include}/grub/lib/crc.h | 0 .../include}/grub/lib/envblk.h | 0 .../include}/grub/lib/hexdump.h | 0 {include => grub-core/include}/grub/libgcc.h | 0 .../include}/grub/libpciaccess.h | 0 {include => grub-core/include}/grub/libusb.h | 0 {include => grub-core/include}/grub/list.h | 0 {include => grub-core/include}/grub/loader.h | 0 {include => grub-core/include}/grub/lvm.h | 0 {include => grub-core/include}/grub/macho.h | 0 .../include}/grub/machoload.h | 0 {include => grub-core/include}/grub/memory.h | 0 {include => grub-core/include}/grub/menu.h | 0 .../include}/grub/menu_viewer.h | 0 .../include}/grub/mips/at_keyboard.h | 0 .../include}/grub/mips/cache.h | 0 .../include}/grub/mips/cmos.h | 0 {include => grub-core/include}/grub/mips/io.h | 0 .../include}/grub/mips/kernel.h | 0 .../include}/grub/mips/multiboot.h | 0 .../include}/grub/mips/pci.h | 0 .../include}/grub/mips/qemu-mips/boot.h | 0 .../include}/grub/mips/qemu-mips/kernel.h | 0 .../include}/grub/mips/qemu-mips/loader.h | 0 .../include}/grub/mips/qemu-mips/memory.h | 0 .../include}/grub/mips/qemu-mips/serial.h | 0 .../include}/grub/mips/qemu-mips/time.h | 0 .../include}/grub/mips/relocator.h | 0 .../include}/grub/mips/setjmp.h | 0 .../include}/grub/mips/time.h | 0 .../include}/grub/mips/types.h | 0 .../include}/grub/mips/yeeloong/at_keyboard.h | 0 .../include}/grub/mips/yeeloong/boot.h | 0 .../include}/grub/mips/yeeloong/cmos.h | 0 .../include}/grub/mips/yeeloong/kernel.h | 0 .../include}/grub/mips/yeeloong/loader.h | 0 .../include}/grub/mips/yeeloong/memory.h | 0 .../include}/grub/mips/yeeloong/pci.h | 0 .../include}/grub/mips/yeeloong/serial.h | 0 .../include}/grub/mips/yeeloong/time.h | 0 {include => grub-core/include}/grub/misc.h | 0 {include => grub-core/include}/grub/mm.h | 0 .../include}/grub/msdos_partition.h | 0 .../include}/grub/multiboot.h | 0 .../include}/grub/multiboot_loader.h | 0 {include => grub-core/include}/grub/net.h | 0 {include => grub-core/include}/grub/normal.h | 0 {include => grub-core/include}/grub/ntfs.h | 0 {include => grub-core/include}/grub/parser.h | 0 .../include}/grub/partition.h | 0 .../include}/grub/parttool.h | 0 {include => grub-core/include}/grub/pci.h | 0 .../include}/grub/pciutils.h | 0 .../include}/grub/powerpc/ieee1275/biosdisk.h | 0 .../include}/grub/powerpc/ieee1275/console.h | 0 .../include}/grub/powerpc/ieee1275/ieee1275.h | 0 .../include}/grub/powerpc/ieee1275/kernel.h | 0 .../include}/grub/powerpc/ieee1275/loader.h | 0 .../include}/grub/powerpc/ieee1275/memory.h | 0 .../include}/grub/powerpc/ieee1275/time.h | 0 .../grub/powerpc/ieee1275/util/biosdisk.h | 0 .../include}/grub/powerpc/kernel.h | 0 .../include}/grub/powerpc/setjmp.h | 0 .../include}/grub/powerpc/time.h | 0 .../include}/grub/powerpc/types.h | 0 {include => grub-core/include}/grub/raid.h | 0 {include => grub-core/include}/grub/reader.h | 0 .../include}/grub/script_sh.h | 0 {include => grub-core/include}/grub/scsi.h | 0 {include => grub-core/include}/grub/scsicmd.h | 0 {include => grub-core/include}/grub/sdl.h | 0 {include => grub-core/include}/grub/search.h | 0 {include => grub-core/include}/grub/serial.h | 0 {include => grub-core/include}/grub/setjmp.h | 0 .../include}/grub/sparc64/ieee1275/boot.h | 0 .../include}/grub/sparc64/ieee1275/console.h | 0 .../include}/grub/sparc64/ieee1275/ieee1275.h | 0 .../include}/grub/sparc64/ieee1275/kernel.h | 0 .../include}/grub/sparc64/ieee1275/loader.h | 0 .../include}/grub/sparc64/ieee1275/memory.h | 0 .../include}/grub/sparc64/ieee1275/time.h | 0 .../include}/grub/sparc64/kernel.h | 0 .../include}/grub/sparc64/setjmp.h | 0 .../include}/grub/sparc64/time.h | 0 .../include}/grub/sparc64/types.h | 0 {include => grub-core/include}/grub/symbol.h | 0 {include => grub-core/include}/grub/term.h | 0 .../include}/grub/terminfo.h | 0 {include => grub-core/include}/grub/test.h | 8 +- {include => grub-core/include}/grub/time.h | 0 {include => grub-core/include}/grub/tparm.h | 0 {include => grub-core/include}/grub/trig.h | 0 {include => grub-core/include}/grub/types.h | 0 {include => grub-core/include}/grub/usb.h | 0 {include => grub-core/include}/grub/usbdesc.h | 0 .../include}/grub/usbtrans.h | 0 .../include}/grub/util/deviceiter.h | 0 .../include}/grub/util/lvm.h | 0 .../include}/grub/util/misc.h | 13 - .../include}/grub/util/ofpath.h | 0 .../include}/grub/util/raid.h | 0 .../include}/grub/util/resolve.h | 0 {include => grub-core/include}/grub/video.h | 0 .../include}/grub/video_fb.h | 0 .../include}/grub/x86_64/at_keyboard.h | 0 .../include}/grub/x86_64/efi/kernel.h | 0 .../include}/grub/x86_64/efi/loader.h | 0 .../include}/grub/x86_64/efi/memory.h | 0 .../include}/grub/x86_64/efi/serial.h | 0 .../include}/grub/x86_64/efi/time.h | 0 .../include}/grub/x86_64/io.h | 0 .../include}/grub/x86_64/kernel.h | 0 .../include}/grub/x86_64/linux.h | 0 .../include}/grub/x86_64/macho.h | 0 .../include}/grub/x86_64/multiboot.h | 0 .../include}/grub/x86_64/pci.h | 0 .../include}/grub/x86_64/relocator.h | 0 .../include}/grub/x86_64/setjmp.h | 0 .../include}/grub/x86_64/time.h | 0 .../include}/grub/x86_64/types.h | 0 .../include}/grub/x86_64/xnu.h | 0 {include => grub-core/include}/grub/xnu.h | 0 {include => grub-core/include}/multiboot.h | 0 {include => grub-core/include}/multiboot2.h | 0 {io => grub-core/io}/bufio.c | 0 {io => grub-core/io}/gzio.c | 0 {kern => grub-core/kern}/command.c | 0 {kern => grub-core/kern}/corecmd.c | 0 {kern => grub-core/kern}/device.c | 0 {kern => grub-core/kern}/disk.c | 0 {kern => grub-core/kern}/dl.c | 6 +- {kern => grub-core/kern}/efi/efi.c | 0 {kern => grub-core/kern}/efi/init.c | 0 {kern => grub-core/kern}/efi/mm.c | 0 {kern => grub-core/kern}/elf.c | 0 grub-core/kern/emu/cache.S | 17 + {util => grub-core/kern/emu}/console.c | 2 +- grub-core/kern/emu/dl.c | 19 + grub-core/kern/emu/dummy/dl.c | 51 + grub-core/kern/emu/dummy/symlist.c | 26 + {util => grub-core/kern/emu}/getroot.c | 109 +- {util => grub-core/kern/emu}/hostdisk.c | 4 +- {util => grub-core/kern/emu}/hostfs.c | 0 grub-core/kern/emu/lite.c | 16 + util/grub-emu.c => grub-core/kern/emu/main.c | 67 +- grub-core/kern/emu/misc.c | 199 +++ {util => grub-core/kern/emu}/time.c | 0 {kern => grub-core/kern}/env.c | 0 {kern => grub-core/kern}/err.c | 0 {kern => grub-core/kern}/file.c | 0 {kern => grub-core/kern}/fs.c | 0 {kern => grub-core/kern}/generic/millisleep.c | 0 .../kern}/generic/rtc_get_time_ms.c | 0 {kern => grub-core/kern}/handler.c | 0 {kern => grub-core/kern}/i386/coreboot/init.c | 0 {kern => grub-core/kern}/i386/coreboot/mmap.c | 0 .../kern}/i386/coreboot/startup.S | 0 {kern => grub-core/kern}/i386/dl.c | 0 {kern => grub-core/kern}/i386/efi/init.c | 0 {kern => grub-core/kern}/i386/efi/startup.S | 0 {kern => grub-core/kern}/i386/halt.c | 0 {kern => grub-core/kern}/i386/ieee1275/init.c | 0 .../kern}/i386/ieee1275/startup.S | 0 {kern => grub-core/kern}/i386/loader.S | 0 {kern => grub-core/kern}/i386/misc.S | 0 .../kern}/i386/multiboot_mmap.c | 0 {kern => grub-core/kern}/i386/pc/init.c | 0 .../kern}/i386/pc/lzma_decode.S | 0 {kern => grub-core/kern}/i386/pc/mmap.c | 0 {kern => grub-core/kern}/i386/pc/startup.S | 0 {kern => grub-core/kern}/i386/pit.c | 0 {kern => grub-core/kern}/i386/qemu/mmap.c | 0 {kern => grub-core/kern}/i386/qemu/startup.S | 0 {kern => grub-core/kern}/i386/realmode.S | 0 {kern => grub-core/kern}/i386/tsc.c | 0 {kern => grub-core/kern}/ieee1275/cmain.c | 0 {kern => grub-core/kern}/ieee1275/ieee1275.c | 0 {kern => grub-core/kern}/ieee1275/init.c | 0 {kern => grub-core/kern}/ieee1275/mmap.c | 0 {kern => grub-core/kern}/ieee1275/openfw.c | 0 {kern => grub-core/kern}/list.c | 0 {kern => grub-core/kern}/main.c | 0 {kern => grub-core/kern}/mips/cache.S | 0 {kern => grub-core/kern}/mips/cache_flush.S | 0 {kern => grub-core/kern}/mips/dl.c | 0 {kern => grub-core/kern}/mips/init.c | 0 .../kern}/mips/qemu-mips/init.c | 0 {kern => grub-core/kern}/mips/startup.S | 0 {kern => grub-core/kern}/mips/yeeloong/init.c | 0 {kern => grub-core/kern}/misc.c | 0 {kern => grub-core/kern}/mm.c | 0 {kern => grub-core/kern}/parser.c | 0 {kern => grub-core/kern}/partition.c | 0 {kern => grub-core/kern}/powerpc/cache.S | 0 {kern => grub-core/kern}/powerpc/dl.c | 0 .../kern}/powerpc/ieee1275/startup.S | 0 {kern => grub-core/kern}/rescue_parser.c | 0 {kern => grub-core/kern}/rescue_reader.c | 0 {kern => grub-core/kern}/sparc64/cache.S | 0 {kern => grub-core/kern}/sparc64/dl.c | 0 .../kern}/sparc64/ieee1275/crt0.S | 0 .../kern}/sparc64/ieee1275/ieee1275.c | 0 .../kern}/sparc64/ieee1275/init.c | 0 {kern => grub-core/kern}/term.c | 0 {kern => grub-core/kern}/time.c | 0 {kern => grub-core/kern}/x86_64/dl.c | 0 .../kern}/x86_64/efi/callwrap.S | 0 {kern => grub-core/kern}/x86_64/efi/startup.S | 0 {lib => grub-core/lib}/LzFind.c | 0 {lib => grub-core/lib}/LzmaDec.c | 0 {lib => grub-core/lib}/LzmaEnc.c | 0 {lib => grub-core/lib}/arg.c | 0 {lib => grub-core/lib}/charset.c | 0 {lib => grub-core/lib}/cmos_datetime.c | 0 {lib => grub-core/lib}/crc.c | 0 {lib => grub-core/lib}/crypto.c | 0 {lib => grub-core/lib}/efi/datetime.c | 0 {lib => grub-core/lib}/envblk.c | 0 {lib => grub-core/lib}/hexdump.c | 0 {lib => grub-core/lib}/i386/pc/biosnum.c | 0 {lib => grub-core/lib}/i386/relocator.c | 0 {lib => grub-core/lib}/i386/relocator_asm.S | 0 .../lib}/i386/relocator_backward.S | 0 {lib => grub-core/lib}/i386/setjmp.S | 0 {lib => grub-core/lib}/ieee1275/datetime.c | 0 .../lib}/libgcrypt/cipher/ChangeLog | 0 {lib => grub-core/lib}/libgcrypt/cipher/ac.c | 0 .../lib}/libgcrypt/cipher/arcfour.c | 0 .../lib}/libgcrypt/cipher/bithelp.h | 0 .../lib}/libgcrypt/cipher/blowfish.c | 0 .../lib}/libgcrypt/cipher/camellia-glue.c | 0 .../lib}/libgcrypt/cipher/camellia.c | 0 .../lib}/libgcrypt/cipher/camellia.h | 0 .../lib}/libgcrypt/cipher/cast5.c | 0 .../lib}/libgcrypt/cipher/cipher.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/crc.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/des.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/dsa.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/ecc.c | 0 .../lib}/libgcrypt/cipher/elgamal.c | 0 .../lib}/libgcrypt/cipher/hash-common.c | 0 .../lib}/libgcrypt/cipher/hash-common.h | 0 .../lib}/libgcrypt/cipher/hmac-tests.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/md.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/md4.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/md5.c | 0 .../lib}/libgcrypt/cipher/primegen.c | 0 .../lib}/libgcrypt/cipher/pubkey.c | 0 .../lib}/libgcrypt/cipher/rfc2268.c | 0 .../lib}/libgcrypt/cipher/rijndael-tables.h | 0 .../lib}/libgcrypt/cipher/rijndael.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/rmd.h | 0 .../lib}/libgcrypt/cipher/rmd160.c | 0 {lib => grub-core/lib}/libgcrypt/cipher/rsa.c | 0 .../lib}/libgcrypt/cipher/seed.c | 0 .../lib}/libgcrypt/cipher/serpent.c | 0 .../lib}/libgcrypt/cipher/sha1.c | 0 .../lib}/libgcrypt/cipher/sha256.c | 0 .../lib}/libgcrypt/cipher/sha512.c | 0 .../lib}/libgcrypt/cipher/tiger.c | 0 .../lib}/libgcrypt/cipher/twofish.c | 0 .../lib}/libgcrypt/cipher/whirlpool.c | 0 .../lib}/libgcrypt_wrap/cipher_wrap.h | 0 {lib => grub-core/lib}/mips/relocator.c | 0 {lib => grub-core/lib}/mips/relocator_asm.S | 0 {lib => grub-core/lib}/mips/setjmp.S | 0 {lib => grub-core/lib}/pbkdf2.c | 0 {lib => grub-core/lib}/posix_wrap/assert.h | 0 {lib => grub-core/lib}/posix_wrap/ctype.h | 0 {lib => grub-core/lib}/posix_wrap/errno.h | 0 {lib => grub-core/lib}/posix_wrap/langinfo.h | 0 {lib => grub-core/lib}/posix_wrap/limits.h | 0 .../lib}/posix_wrap/localcharset.h | 0 {lib => grub-core/lib}/posix_wrap/locale.h | 0 {lib => grub-core/lib}/posix_wrap/stdint.h | 0 {lib => grub-core/lib}/posix_wrap/stdio.h | 0 {lib => grub-core/lib}/posix_wrap/stdlib.h | 1 + {lib => grub-core/lib}/posix_wrap/string.h | 2 + {lib => grub-core/lib}/posix_wrap/sys/types.h | 0 {lib => grub-core/lib}/posix_wrap/unistd.h | 0 {lib => grub-core/lib}/posix_wrap/wchar.h | 0 {lib => grub-core/lib}/posix_wrap/wctype.h | 0 {lib => grub-core/lib}/powerpc/setjmp.S | 0 {lib => grub-core/lib}/relocator.c | 0 {lib => grub-core/lib}/sparc64/setjmp.S | 0 {lib => grub-core/lib}/x86_64/setjmp.S | 0 {loader => grub-core/loader}/aout.c | 0 .../loader}/efi/appleloader.c | 0 .../loader}/efi/chainloader.c | 0 {loader => grub-core/loader}/i386/bsd.c | 0 {loader => grub-core/loader}/i386/bsd32.c | 0 {loader => grub-core/loader}/i386/bsd64.c | 0 {loader => grub-core/loader}/i386/bsdXX.c | 0 .../loader}/i386/bsd_helper.S | 0 .../loader}/i386/bsd_pagetable.c | 0 .../loader}/i386/bsd_trampoline.S | 0 {loader => grub-core/loader}/i386/efi/linux.c | 0 {loader => grub-core/loader}/i386/efi/xnu.c | 0 .../loader}/i386/ieee1275/linux.c | 0 {loader => grub-core/loader}/i386/linux.c | 0 .../loader}/i386/linux_trampoline.S | 0 .../loader}/i386/multiboot_mbi.c | 0 .../loader}/i386/pc/chainloader.c | 0 {loader => grub-core/loader}/i386/pc/linux.c | 0 {loader => grub-core/loader}/i386/pc/xnu.c | 0 {loader => grub-core/loader}/i386/xnu.c | 0 {loader => grub-core/loader}/macho.c | 0 {loader => grub-core/loader}/macho32.c | 0 {loader => grub-core/loader}/macho64.c | 0 {loader => grub-core/loader}/machoXX.c | 0 {loader => grub-core/loader}/mips/linux.c | 0 {loader => grub-core/loader}/multiboot.c | 0 .../loader}/multiboot_elfxx.c | 0 {loader => grub-core/loader}/multiboot_mbi2.c | 0 .../loader}/powerpc/ieee1275/linux.c | 0 .../loader}/sparc64/ieee1275/linux.c | 0 {loader => grub-core/loader}/xnu.c | 0 {loader => grub-core/loader}/xnu_resume.c | 0 {mmap => grub-core/mmap}/efi/mmap.c | 0 {mmap => grub-core/mmap}/i386/mmap.c | 0 {mmap => grub-core/mmap}/i386/pc/mmap.c | 0 .../mmap}/i386/pc/mmap_helper.S | 0 {mmap => grub-core/mmap}/i386/uppermem.c | 0 .../mmap}/mips/yeeloong/uppermem.c | 0 {mmap => grub-core/mmap}/mmap.c | 0 grub-core/modules.def | 1592 +++++++++++++++++ {normal => grub-core/normal}/auth.c | 0 {normal => grub-core/normal}/autofs.c | 0 {normal => grub-core/normal}/cmdline.c | 0 {normal => grub-core/normal}/color.c | 0 {normal => grub-core/normal}/completion.c | 0 {normal => grub-core/normal}/context.c | 0 {normal => grub-core/normal}/crypto.c | 0 {normal => grub-core/normal}/datetime.c | 0 {normal => grub-core/normal}/dyncmd.c | 0 {normal => grub-core/normal}/handler.c | 0 {normal => grub-core/normal}/main.c | 0 {normal => grub-core/normal}/menu.c | 0 {normal => grub-core/normal}/menu_entry.c | 0 {normal => grub-core/normal}/menu_text.c | 0 {normal => grub-core/normal}/misc.c | 0 {normal => grub-core/normal}/term.c | 0 {partmap => grub-core/partmap}/acorn.c | 0 {partmap => grub-core/partmap}/amiga.c | 0 {partmap => grub-core/partmap}/apple.c | 0 {partmap => grub-core/partmap}/bsdlabel.c | 0 {partmap => grub-core/partmap}/gpt.c | 0 {partmap => grub-core/partmap}/msdos.c | 0 {partmap => grub-core/partmap}/sun.c | 0 {partmap => grub-core/partmap}/sunpc.c | 0 {parttool => grub-core/parttool}/msdospart.c | 0 grub-core/po/Makefile.am | 0 {po => grub-core/po}/POTFILES | 0 {po => grub-core/po}/POTFILES-shell | 0 {po => grub-core/po}/README | 0 {script => grub-core/script}/execute.c | 0 {script => grub-core/script}/function.c | 0 {script => grub-core/script}/lexer.c | 0 {script => grub-core/script}/main.c | 0 {script => grub-core/script}/parser.y | 0 {script => grub-core/script}/script.c | 0 {script => grub-core/script}/yylex.l | 0 {term => grub-core/term}/at_keyboard.c | 0 {term => grub-core/term}/efi/console.c | 0 {term => grub-core/term}/gfxterm.c | 0 {term => grub-core/term}/i386/pc/console.c | 0 {term => grub-core/term}/i386/pc/vga.c | 0 {term => grub-core/term}/i386/pc/vga_text.c | 0 {term => grub-core/term}/i386/vga_common.c | 0 {term => grub-core/term}/ieee1275/ofconsole.c | 0 {term => grub-core/term}/serial.c | 0 {term => grub-core/term}/terminfo.c | 0 {term => grub-core/term}/tparm.c | 0 {term => grub-core/term}/usb_keyboard.c | 0 .../tests}/example_functional_test.c | 2 +- .../tests}/lib/functional_test.c | 0 {tests => grub-core/tests}/lib/test.c | 0 {video => grub-core/video}/bitmap.c | 0 {video => grub-core/video}/bitmap_scale.c | 0 {video => grub-core/video}/efi_gop.c | 0 {video => grub-core/video}/efi_uga.c | 0 {util => grub-core/video/emu}/sdl.c | 0 {video => grub-core/video}/fb/fbblit.c | 0 {video => grub-core/video}/fb/fbfill.c | 0 {video => grub-core/video}/fb/fbutil.c | 0 {video => grub-core/video}/fb/video_fb.c | 0 {video => grub-core/video}/i386/pc/vbe.c | 0 {video => grub-core/video}/ieee1275.c | 0 {video => grub-core/video}/readers/jpeg.c | 0 {video => grub-core/video}/readers/png.c | 0 {video => grub-core/video}/readers/tga.c | 0 {video => grub-core/video}/sm712.c | 0 {video => grub-core/video}/video.c | 0 modules.def | 497 +++++ po/Makefile.am | 0 tests/example_grub_script_test.in | 2 +- tests/lib/unit_test.c | 3 +- tests/util/grub-shell-tester.in | 2 +- tests/util/grub-shell.in | 10 +- util/elf/grub-mkimage.c | 1 + util/grub-editenv.c | 19 +- util/grub-fstest.c | 24 +- util/grub-mkdevicemap.c | 1 + util/grub-mkfont.c | 2 + util/grub-mkpasswd-pbkdf2.c | 32 +- util/grub-mkrawimage.c | 1 + util/grub-mkrelpath.c | 3 +- util/grub-mkrescue.in | 23 +- util/grub-probe.c | 30 +- util/grub-script-check.c | 74 +- util/i386/efi/grub-mkimage.c | 1 + util/i386/pc/grub-setup.c | 30 +- util/lvm.c | 2 +- util/misc.c | 354 +--- util/raid.c | 1 + util/resolve.c | 3 +- util/sparc64/ieee1275/grub-setup.c | 32 +- 810 files changed, 4980 insertions(+), 2508 deletions(-) create mode 100644 ABOUT-NLS create mode 100644 Makefile.am delete mode 100644 Makefile.in create mode 100644 configure.common create mode 100644 docs/Makefile.am delete mode 100644 geninitheader.sh delete mode 100644 genkernsyms.sh.in delete mode 100644 genmk.rb create mode 100644 gentpl.py create mode 100644 grub-core/Makefile.am create mode 100644 grub-core/Makefile.extra-dist create mode 100644 grub-core/Makefile.kernel create mode 100644 grub-core/Makefile.vars rename {boot => grub-core/boot}/i386/pc/boot.S (100%) rename {boot => grub-core/boot}/i386/pc/cdboot.S (100%) rename {boot => grub-core/boot}/i386/pc/diskboot.S (100%) rename {boot => grub-core/boot}/i386/pc/lnxboot.S (100%) rename {boot => grub-core/boot}/i386/pc/pxeboot.S (100%) rename {boot => grub-core/boot}/i386/qemu/boot.S (100%) rename {boot => grub-core/boot}/sparc64/ieee1275/boot.S (100%) rename {boot => grub-core/boot}/sparc64/ieee1275/diskboot.S (100%) rename {bus => grub-core/bus}/bonito.c (100%) rename {util => grub-core/bus/emu}/pci.c (98%) rename {bus => grub-core/bus}/pci.c (100%) rename {util => grub-core/bus/usb/emu}/usb.c (100%) rename {bus => grub-core/bus}/usb/ohci.c (100%) rename {bus => grub-core/bus}/usb/uhci.c (100%) rename {bus => grub-core/bus}/usb/usb.c (100%) rename {bus => grub-core/bus}/usb/usbhub.c (100%) rename {bus => grub-core/bus}/usb/usbtrans.c (100%) rename {commands => grub-core/commands}/acpi.c (100%) rename {commands => grub-core/commands}/blocklist.c (100%) rename {commands => grub-core/commands}/boot.c (100%) rename {commands => grub-core/commands}/cat.c (100%) rename {commands => grub-core/commands}/cmp.c (100%) rename {commands => grub-core/commands}/configfile.c (100%) rename {commands => grub-core/commands}/crc.c (100%) rename {commands => grub-core/commands}/date.c (100%) rename {commands => grub-core/commands}/echo.c (100%) rename {commands => grub-core/commands}/efi/acpi.c (100%) rename {commands => grub-core/commands}/efi/fixvideo.c (100%) rename {commands => grub-core/commands}/efi/loadbios.c (100%) rename {commands => grub-core/commands}/extcmd.c (100%) rename {commands => grub-core/commands}/gptsync.c (100%) rename {commands => grub-core/commands}/halt.c (100%) rename {commands => grub-core/commands}/handler.c (100%) rename {commands => grub-core/commands}/hashsum.c (100%) rename {commands => grub-core/commands}/hdparm.c (100%) rename {commands => grub-core/commands}/help.c (100%) rename {commands => grub-core/commands}/hexdump.c (100%) rename {commands => grub-core/commands}/i386/cpuid.c (100%) rename {commands => grub-core/commands}/i386/pc/acpi.c (100%) rename {commands => grub-core/commands}/i386/pc/drivemap.c (100%) rename {commands => grub-core/commands}/i386/pc/drivemap_int13h.S (100%) rename {commands => grub-core/commands}/i386/pc/halt.c (100%) rename {commands => grub-core/commands}/i386/pc/play.c (100%) rename {commands => grub-core/commands}/i386/pc/pxecmd.c (100%) rename {commands => grub-core/commands}/i386/pc/vbeinfo.c (100%) rename {commands => grub-core/commands}/i386/pc/vbetest.c (100%) rename {commands => grub-core/commands}/ieee1275/suspend.c (100%) rename {commands => grub-core/commands}/iorw.c (100%) rename {commands => grub-core/commands}/keystatus.c (100%) rename {commands => grub-core/commands}/loadenv.c (100%) rename {commands => grub-core/commands}/ls.c (100%) rename {commands => grub-core/commands}/lsmmap.c (100%) rename {commands => grub-core/commands}/lspci.c (100%) rename {commands => grub-core/commands}/memrw.c (100%) rename {commands => grub-core/commands}/minicmd.c (100%) rename {commands => grub-core/commands}/parttool.c (99%) rename {commands => grub-core/commands}/password.c (100%) rename {commands => grub-core/commands}/password_pbkdf2.c (100%) rename {commands => grub-core/commands}/probe.c (100%) rename {commands => grub-core/commands}/read.c (100%) rename {commands => grub-core/commands}/reboot.c (100%) rename {commands => grub-core/commands}/regexp.c (100%) rename {commands => grub-core/commands}/search.c (100%) rename {commands => grub-core/commands}/search_file.c (100%) rename {commands => grub-core/commands}/search_label.c (100%) rename {commands => grub-core/commands}/search_uuid.c (100%) rename {commands => grub-core/commands}/search_wrap.c (100%) rename {commands => grub-core/commands}/setpci.c (100%) rename {commands => grub-core/commands}/sleep.c (100%) rename {commands => grub-core/commands}/terminal.c (100%) rename {commands => grub-core/commands}/test.c (100%) rename {commands => grub-core/commands}/true.c (100%) rename {commands => grub-core/commands}/usbtest.c (100%) rename {commands => grub-core/commands}/videotest.c (100%) rename {commands => grub-core/commands}/xnu_uuid.c (100%) rename {conf => grub-core/conf}/any-emu.rmk (100%) rename {conf => grub-core/conf}/common.rmk (100%) rename {conf => grub-core/conf}/i386-coreboot.rmk (100%) rename {conf => grub-core/conf}/i386-efi.rmk (100%) rename {conf => grub-core/conf}/i386-ieee1275.rmk (100%) rename {conf => grub-core/conf}/i386-multiboot.rmk (100%) rename {conf => grub-core/conf}/i386-pc-cygwin-img-ld.sc (100%) rename {conf => grub-core/conf}/i386-pc.rmk (100%) rename {conf => grub-core/conf}/i386-qemu.rmk (100%) rename {conf => grub-core/conf}/i386.rmk (100%) rename {conf => grub-core/conf}/mips-qemu-mips.rmk (100%) rename {conf => grub-core/conf}/mips-yeeloong.rmk (100%) rename {conf => grub-core/conf}/mips.rmk (100%) rename {conf => grub-core/conf}/powerpc-ieee1275.rmk (100%) rename {conf => grub-core/conf}/sparc64-ieee1275.rmk (100%) rename {conf => grub-core/conf}/tests.rmk (100%) rename {conf => grub-core/conf}/x86-efi.rmk (100%) rename {conf => grub-core/conf}/x86_64-efi.rmk (100%) create mode 100644 grub-core/configure.ac rename {disk => grub-core/disk}/ata.c (100%) rename {disk => grub-core/disk}/ata_pthru.c (100%) rename {disk => grub-core/disk}/dmraid_nvidia.c (100%) rename {disk => grub-core/disk}/efi/efidisk.c (100%) rename {disk => grub-core/disk}/host.c (100%) rename {disk => grub-core/disk}/i386/pc/biosdisk.c (100%) rename {disk => grub-core/disk}/ieee1275/nand.c (100%) rename {disk => grub-core/disk}/ieee1275/ofdisk.c (100%) rename {disk => grub-core/disk}/loopback.c (100%) rename {disk => grub-core/disk}/lvm.c (100%) rename {disk => grub-core/disk}/mdraid_linux.c (100%) rename {disk => grub-core/disk}/memdisk.c (100%) rename {disk => grub-core/disk}/raid.c (100%) rename {disk => grub-core/disk}/raid5_recover.c (100%) rename {disk => grub-core/disk}/raid6_recover.c (100%) rename {disk => grub-core/disk}/scsi.c (100%) rename {disk => grub-core/disk}/usbms.c (100%) rename {efiemu => grub-core/efiemu}/i386/coredetect.c (100%) rename {efiemu => grub-core/efiemu}/i386/loadcore32.c (100%) rename {efiemu => grub-core/efiemu}/i386/loadcore64.c (100%) rename {efiemu => grub-core/efiemu}/i386/pc/cfgtables.c (100%) rename {efiemu => grub-core/efiemu}/loadcore.c (100%) rename {efiemu => grub-core/efiemu}/loadcore32.c (100%) rename {efiemu => grub-core/efiemu}/loadcore64.c (100%) rename {efiemu => grub-core/efiemu}/loadcore_common.c (100%) rename {efiemu => grub-core/efiemu}/main.c (100%) rename {efiemu => grub-core/efiemu}/mm.c (100%) rename {efiemu => grub-core/efiemu}/pnvram.c (100%) rename {efiemu => grub-core/efiemu}/prepare.c (100%) rename {efiemu => grub-core/efiemu}/prepare32.c (100%) rename {efiemu => grub-core/efiemu}/prepare64.c (100%) rename {efiemu => grub-core/efiemu}/runtime/config.h (100%) rename {efiemu => grub-core/efiemu}/runtime/efiemu.S (100%) rename {efiemu => grub-core/efiemu}/runtime/efiemu.c (100%) rename {efiemu => grub-core/efiemu}/runtime/efiemu.sh (100%) rename {efiemu => grub-core/efiemu}/symbols.c (100%) rename {font => grub-core/font}/font.c (100%) rename {font => grub-core/font}/font_cmd.c (100%) rename {fs => grub-core/fs}/affs.c (100%) rename {fs => grub-core/fs}/afs.c (100%) rename {fs => grub-core/fs}/afs_be.c (100%) rename {fs => grub-core/fs}/befs.c (100%) rename {fs => grub-core/fs}/befs_be.c (100%) rename {fs => grub-core/fs}/cpio.c (100%) rename {fs => grub-core/fs}/ext2.c (100%) rename {fs => grub-core/fs}/fat.c (100%) rename {fs => grub-core/fs}/fshelp.c (100%) rename {fs => grub-core/fs}/hfs.c (100%) rename {fs => grub-core/fs}/hfsplus.c (100%) rename {fs => grub-core/fs}/i386/pc/pxe.c (100%) rename {fs => grub-core/fs}/iso9660.c (100%) rename {fs => grub-core/fs}/jfs.c (100%) rename {fs => grub-core/fs}/minix.c (100%) rename {fs => grub-core/fs}/nilfs2.c (100%) rename {fs => grub-core/fs}/ntfs.c (100%) rename {fs => grub-core/fs}/ntfscomp.c (100%) rename {fs => grub-core/fs}/reiserfs.c (100%) rename {fs => grub-core/fs}/sfs.c (100%) rename {fs => grub-core/fs}/tar.c (100%) rename {fs => grub-core/fs}/udf.c (100%) rename {fs => grub-core/fs}/ufs.c (100%) rename {fs => grub-core/fs}/ufs2.c (100%) rename {fs => grub-core/fs}/xfs.c (100%) rename gencmdlist.sh => grub-core/gencmdlist.sh (100%) rename gendistlist.sh => grub-core/gendistlist.sh (100%) rename genemuinit.sh => grub-core/genemuinit.sh (100%) rename genemuinitheader.sh => grub-core/genemuinitheader.sh (100%) rename genfslist.sh => grub-core/genfslist.sh (100%) rename genhandlerlist.sh => grub-core/genhandlerlist.sh (100%) rename genmoddep.awk => grub-core/genmoddep.awk (93%) rename genmodsrc.sh => grub-core/genmodsrc.sh (100%) rename genpartmaplist.sh => grub-core/genpartmaplist.sh (100%) rename genparttoollist.sh => grub-core/genparttoollist.sh (100%) rename gensymlist.sh.in => grub-core/gensymlist.sh (84%) rename genterminallist.sh => grub-core/genterminallist.sh (100%) rename gentrigtables.c => grub-core/gentrigtables.c (93%) rename genvideolist.sh => grub-core/genvideolist.sh (100%) rename {gettext => grub-core/gettext}/gettext.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gfxmenu.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_box.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_canvas.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_circular_progress.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_image.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_label.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_list.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_progress_bar.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_string_util.c (100%) rename {gfxmenu => grub-core/gfxmenu}/gui_util.c (100%) rename {gfxmenu => grub-core/gfxmenu}/icon_manager.c (100%) rename {gfxmenu => grub-core/gfxmenu}/model.c (100%) rename {gfxmenu => grub-core/gfxmenu}/named_colors.c (100%) rename {gfxmenu => grub-core/gfxmenu}/theme_loader.c (100%) rename {gfxmenu => grub-core/gfxmenu}/view.c (100%) rename {gfxmenu => grub-core/gfxmenu}/widget-box.c (100%) rename {gnulib => grub-core/gnulib}/alloca.h (100%) rename {gnulib => grub-core/gnulib}/argp-ba.c (100%) rename {gnulib => grub-core/gnulib}/argp-eexst.c (100%) rename {gnulib => grub-core/gnulib}/argp-fmtstream.c (100%) rename {gnulib => grub-core/gnulib}/argp-fmtstream.h (100%) rename {gnulib => grub-core/gnulib}/argp-fs-xinl.c (100%) rename {gnulib => grub-core/gnulib}/argp-help.c (100%) rename {gnulib => grub-core/gnulib}/argp-namefrob.h (100%) rename {gnulib => grub-core/gnulib}/argp-parse.c (100%) rename {gnulib => grub-core/gnulib}/argp-pin.c (100%) rename {gnulib => grub-core/gnulib}/argp-pv.c (100%) rename {gnulib => grub-core/gnulib}/argp-pvh.c (100%) rename {gnulib => grub-core/gnulib}/argp-version-etc.c (100%) rename {gnulib => grub-core/gnulib}/argp-version-etc.h (100%) rename {gnulib => grub-core/gnulib}/argp-xinl.c (100%) rename {gnulib => grub-core/gnulib}/argp.h (100%) rename {gnulib => grub-core/gnulib}/error.c (100%) rename {gnulib => grub-core/gnulib}/error.h (100%) rename {gnulib => grub-core/gnulib}/fnmatch.c (100%) rename {gnulib => grub-core/gnulib}/fnmatch.h (100%) rename {gnulib => grub-core/gnulib}/fnmatch_loop.c (100%) rename {gnulib => grub-core/gnulib}/getdelim.c (100%) rename {gnulib => grub-core/gnulib}/getline.c (100%) rename {gnulib => grub-core/gnulib}/getopt.c (100%) rename {gnulib => grub-core/gnulib}/getopt.h (100%) rename {gnulib => grub-core/gnulib}/getopt1.c (100%) rename {gnulib => grub-core/gnulib}/getopt_int.h (100%) rename {gnulib => grub-core/gnulib}/gettext.h (100%) rename {gnulib => grub-core/gnulib}/progname.c (100%) rename {gnulib => grub-core/gnulib}/progname.h (100%) rename {gnulib => grub-core/gnulib}/regcomp.c (100%) rename {gnulib => grub-core/gnulib}/regex.c (100%) rename {gnulib => grub-core/gnulib}/regex.h (100%) rename {gnulib => grub-core/gnulib}/regex_internal.c (100%) rename {gnulib => grub-core/gnulib}/regex_internal.h (100%) rename {gnulib => grub-core/gnulib}/regexec.c (100%) rename {hello => grub-core/hello}/hello.c (100%) rename {hook => grub-core/hook}/datehook.c (100%) rename {util => grub-core}/import_gcry.py (100%) rename {include => grub-core/include}/grub/acorn_filecore.h (100%) rename {include => grub-core/include}/grub/acpi.h (100%) rename {include => grub-core/include}/grub/aout.h (100%) rename {include => grub-core/include}/grub/at_keyboard.h (100%) rename {include => grub-core/include}/grub/ata.h (100%) rename {include => grub-core/include}/grub/auth.h (100%) rename {include => grub-core/include}/grub/autoefi.h (100%) rename {include => grub-core/include}/grub/bitmap.h (100%) rename {include => grub-core/include}/grub/bitmap_scale.h (100%) rename {include => grub-core/include}/grub/boot.h (100%) rename {include => grub-core/include}/grub/bsdlabel.h (100%) rename {include => grub-core/include}/grub/bufio.h (100%) rename {include => grub-core/include}/grub/cache.h (100%) rename {include => grub-core/include}/grub/charset.h (100%) rename {include => grub-core/include}/grub/cmos.h (100%) rename {include => grub-core/include}/grub/command.h (100%) rename {include => grub-core/include}/grub/crypto.h (100%) rename {include => grub-core/include}/grub/datetime.h (100%) rename {include => grub-core/include}/grub/device.h (100%) rename {include => grub-core/include}/grub/disk.h (100%) rename {include => grub-core/include}/grub/dl.h (90%) rename {include => grub-core/include}/grub/efi/api.h (100%) rename {include => grub-core/include}/grub/efi/console.h (100%) rename {include => grub-core/include}/grub/efi/console_control.h (100%) rename {include => grub-core/include}/grub/efi/disk.h (100%) rename {include => grub-core/include}/grub/efi/efi.h (100%) rename {include => grub-core/include}/grub/efi/graphics_output.h (100%) rename {include => grub-core/include}/grub/efi/memory.h (100%) rename {include => grub-core/include}/grub/efi/pe32.h (100%) rename {include => grub-core/include}/grub/efi/time.h (100%) rename {include => grub-core/include}/grub/efi/uga_draw.h (100%) rename {include => grub-core/include}/grub/efiemu/efiemu.h (100%) rename {include => grub-core/include}/grub/efiemu/runtime.h (100%) rename {include => grub-core/include}/grub/elf.h (100%) rename {include => grub-core/include}/grub/elfload.h (100%) rename {include/grub/util => grub-core/include/grub/emu}/console.h (100%) rename {include/grub/util => grub-core/include/grub/emu}/getroot.h (94%) rename {include/grub/util => grub-core/include/grub/emu}/hostdisk.h (100%) create mode 100644 grub-core/include/grub/emu/misc.h rename {include => grub-core/include}/grub/env.h (100%) rename {include => grub-core/include}/grub/env_private.h (100%) rename {include => grub-core/include}/grub/err.h (100%) rename {include => grub-core/include}/grub/extcmd.h (100%) rename {include => grub-core/include}/grub/fbblit.h (100%) rename {include => grub-core/include}/grub/fbfill.h (100%) rename {include => grub-core/include}/grub/fbutil.h (100%) rename {include => grub-core/include}/grub/file.h (100%) rename {include => grub-core/include}/grub/font.h (100%) rename {include => grub-core/include}/grub/fontformat.h (100%) rename {include => grub-core/include}/grub/fs.h (100%) rename {include => grub-core/include}/grub/fshelp.h (100%) rename {include => grub-core/include}/grub/gfxmenu_model.h (100%) rename {include => grub-core/include}/grub/gfxmenu_view.h (100%) rename {include => grub-core/include}/grub/gfxterm.h (100%) rename {include => grub-core/include}/grub/gfxwidgets.h (100%) rename {include => grub-core/include}/grub/gpt_partition.h (100%) rename {include => grub-core/include}/grub/gui.h (100%) rename {include => grub-core/include}/grub/gui_string_util.h (100%) rename {include => grub-core/include}/grub/gzio.h (100%) rename {include => grub-core/include}/grub/handler.h (100%) rename {include => grub-core/include}/grub/hfs.h (100%) rename {include => grub-core/include}/grub/i18n.h (100%) rename {include => grub-core/include}/grub/i386/at_keyboard.h (100%) rename {include => grub-core/include}/grub/i386/bsd.h (100%) rename {include => grub-core/include}/grub/i386/cmos.h (100%) rename {include => grub-core/include}/grub/i386/coreboot/boot.h (100%) rename {include => grub-core/include}/grub/i386/coreboot/console.h (100%) rename {include => grub-core/include}/grub/i386/coreboot/init.h (100%) rename {include => grub-core/include}/grub/i386/coreboot/kernel.h (100%) rename {include => grub-core/include}/grub/i386/coreboot/loader.h (100%) rename {include => grub-core/include}/grub/i386/coreboot/memory.h (100%) rename {include => grub-core/include}/grub/i386/coreboot/serial.h (100%) rename {include => grub-core/include}/grub/i386/coreboot/time.h (100%) rename {include => grub-core/include}/grub/i386/cpuid.h (100%) rename {include => grub-core/include}/grub/i386/efi/kernel.h (100%) rename {include => grub-core/include}/grub/i386/efi/loader.h (100%) rename {include => grub-core/include}/grub/i386/efi/memory.h (100%) rename {include => grub-core/include}/grub/i386/efi/serial.h (100%) rename {include => grub-core/include}/grub/i386/efi/time.h (100%) rename {include => grub-core/include}/grub/i386/efiemu.h (100%) rename {include => grub-core/include}/grub/i386/freebsd_linker.h (100%) rename {include => grub-core/include}/grub/i386/freebsd_reboot.h (100%) rename {include => grub-core/include}/grub/i386/ieee1275/console.h (100%) rename {include => grub-core/include}/grub/i386/ieee1275/ieee1275.h (100%) rename {include => grub-core/include}/grub/i386/ieee1275/kernel.h (100%) rename {include => grub-core/include}/grub/i386/ieee1275/loader.h (100%) rename {include => grub-core/include}/grub/i386/ieee1275/memory.h (100%) rename {include => grub-core/include}/grub/i386/ieee1275/serial.h (100%) rename {include => grub-core/include}/grub/i386/ieee1275/time.h (100%) rename {include => grub-core/include}/grub/i386/io.h (100%) rename {include => grub-core/include}/grub/i386/kernel.h (100%) rename {include => grub-core/include}/grub/i386/linux.h (100%) rename {include => grub-core/include}/grub/i386/loader.h (100%) rename {include => grub-core/include}/grub/i386/macho.h (100%) rename {include => grub-core/include}/grub/i386/memory.h (100%) rename {include => grub-core/include}/grub/i386/multiboot.h (100%) rename {include => grub-core/include}/grub/i386/multiboot/boot.h (100%) rename {include => grub-core/include}/grub/i386/multiboot/console.h (100%) rename {include => grub-core/include}/grub/i386/multiboot/init.h (100%) rename {include => grub-core/include}/grub/i386/multiboot/kernel.h (100%) rename {include => grub-core/include}/grub/i386/multiboot/loader.h (100%) rename {include => grub-core/include}/grub/i386/multiboot/memory.h (100%) rename {include => grub-core/include}/grub/i386/multiboot/serial.h (100%) rename {include => grub-core/include}/grub/i386/multiboot/time.h (100%) rename {include => grub-core/include}/grub/i386/netbsd_bootinfo.h (100%) rename {include => grub-core/include}/grub/i386/netbsd_reboot.h (100%) rename {include => grub-core/include}/grub/i386/openbsd_bootarg.h (100%) rename {include => grub-core/include}/grub/i386/openbsd_reboot.h (100%) rename {include => grub-core/include}/grub/i386/pc/biosdisk.h (100%) rename {include => grub-core/include}/grub/i386/pc/biosnum.h (100%) rename {include => grub-core/include}/grub/i386/pc/boot.h (100%) rename {include => grub-core/include}/grub/i386/pc/chainloader.h (100%) rename {include => grub-core/include}/grub/i386/pc/console.h (100%) rename {include => grub-core/include}/grub/i386/pc/efiemu.h (100%) rename {include => grub-core/include}/grub/i386/pc/init.h (100%) rename {include => grub-core/include}/grub/i386/pc/kernel.h (100%) rename {include => grub-core/include}/grub/i386/pc/loader.h (100%) rename {include => grub-core/include}/grub/i386/pc/memory.h (100%) rename {include => grub-core/include}/grub/i386/pc/pxe.h (100%) rename {include => grub-core/include}/grub/i386/pc/time.h (100%) rename {include => grub-core/include}/grub/i386/pc/vbe.h (100%) rename {include => grub-core/include}/grub/i386/pc/vga.h (100%) rename {include => grub-core/include}/grub/i386/pci.h (100%) rename {include => grub-core/include}/grub/i386/pit.h (100%) rename {include => grub-core/include}/grub/i386/qemu/boot.h (100%) rename {include => grub-core/include}/grub/i386/qemu/console.h (100%) rename {include => grub-core/include}/grub/i386/qemu/init.h (100%) rename {include => grub-core/include}/grub/i386/qemu/kernel.h (100%) rename {include => grub-core/include}/grub/i386/qemu/loader.h (100%) rename {include => grub-core/include}/grub/i386/qemu/memory.h (100%) rename {include => grub-core/include}/grub/i386/qemu/serial.h (100%) rename {include => grub-core/include}/grub/i386/qemu/time.h (100%) rename {include => grub-core/include}/grub/i386/relocator.h (100%) rename {include => grub-core/include}/grub/i386/setjmp.h (100%) rename {include => grub-core/include}/grub/i386/time.h (100%) rename {include => grub-core/include}/grub/i386/tsc.h (100%) rename {include => grub-core/include}/grub/i386/types.h (100%) rename {include => grub-core/include}/grub/i386/vga_common.h (100%) rename {include => grub-core/include}/grub/i386/xnu.h (100%) rename {include => grub-core/include}/grub/icon_manager.h (100%) rename {include => grub-core/include}/grub/ieee1275/ieee1275.h (100%) rename {include => grub-core/include}/grub/ieee1275/ofdisk.h (100%) rename {include => grub-core/include}/grub/kernel.h (100%) rename {include => grub-core/include}/grub/lib/LzFind.h (100%) rename {include => grub-core/include}/grub/lib/LzHash.h (100%) rename {include => grub-core/include}/grub/lib/LzmaDec.h (100%) rename {include => grub-core/include}/grub/lib/LzmaEnc.h (100%) rename {include => grub-core/include}/grub/lib/LzmaTypes.h (100%) rename {include => grub-core/include}/grub/lib/arg.h (100%) rename {include => grub-core/include}/grub/lib/crc.h (100%) rename {include => grub-core/include}/grub/lib/envblk.h (100%) rename {include => grub-core/include}/grub/lib/hexdump.h (100%) rename {include => grub-core/include}/grub/libgcc.h (100%) rename {include => grub-core/include}/grub/libpciaccess.h (100%) rename {include => grub-core/include}/grub/libusb.h (100%) rename {include => grub-core/include}/grub/list.h (100%) rename {include => grub-core/include}/grub/loader.h (100%) rename {include => grub-core/include}/grub/lvm.h (100%) rename {include => grub-core/include}/grub/macho.h (100%) rename {include => grub-core/include}/grub/machoload.h (100%) rename {include => grub-core/include}/grub/memory.h (100%) rename {include => grub-core/include}/grub/menu.h (100%) rename {include => grub-core/include}/grub/menu_viewer.h (100%) rename {include => grub-core/include}/grub/mips/at_keyboard.h (100%) rename {include => grub-core/include}/grub/mips/cache.h (100%) rename {include => grub-core/include}/grub/mips/cmos.h (100%) rename {include => grub-core/include}/grub/mips/io.h (100%) rename {include => grub-core/include}/grub/mips/kernel.h (100%) rename {include => grub-core/include}/grub/mips/multiboot.h (100%) rename {include => grub-core/include}/grub/mips/pci.h (100%) rename {include => grub-core/include}/grub/mips/qemu-mips/boot.h (100%) rename {include => grub-core/include}/grub/mips/qemu-mips/kernel.h (100%) rename {include => grub-core/include}/grub/mips/qemu-mips/loader.h (100%) rename {include => grub-core/include}/grub/mips/qemu-mips/memory.h (100%) rename {include => grub-core/include}/grub/mips/qemu-mips/serial.h (100%) rename {include => grub-core/include}/grub/mips/qemu-mips/time.h (100%) rename {include => grub-core/include}/grub/mips/relocator.h (100%) rename {include => grub-core/include}/grub/mips/setjmp.h (100%) rename {include => grub-core/include}/grub/mips/time.h (100%) rename {include => grub-core/include}/grub/mips/types.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/at_keyboard.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/boot.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/cmos.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/kernel.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/loader.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/memory.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/pci.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/serial.h (100%) rename {include => grub-core/include}/grub/mips/yeeloong/time.h (100%) rename {include => grub-core/include}/grub/misc.h (100%) rename {include => grub-core/include}/grub/mm.h (100%) rename {include => grub-core/include}/grub/msdos_partition.h (100%) rename {include => grub-core/include}/grub/multiboot.h (100%) rename {include => grub-core/include}/grub/multiboot_loader.h (100%) rename {include => grub-core/include}/grub/net.h (100%) rename {include => grub-core/include}/grub/normal.h (100%) rename {include => grub-core/include}/grub/ntfs.h (100%) rename {include => grub-core/include}/grub/parser.h (100%) rename {include => grub-core/include}/grub/partition.h (100%) rename {include => grub-core/include}/grub/parttool.h (100%) rename {include => grub-core/include}/grub/pci.h (100%) rename {include => grub-core/include}/grub/pciutils.h (100%) rename {include => grub-core/include}/grub/powerpc/ieee1275/biosdisk.h (100%) rename {include => grub-core/include}/grub/powerpc/ieee1275/console.h (100%) rename {include => grub-core/include}/grub/powerpc/ieee1275/ieee1275.h (100%) rename {include => grub-core/include}/grub/powerpc/ieee1275/kernel.h (100%) rename {include => grub-core/include}/grub/powerpc/ieee1275/loader.h (100%) rename {include => grub-core/include}/grub/powerpc/ieee1275/memory.h (100%) rename {include => grub-core/include}/grub/powerpc/ieee1275/time.h (100%) rename {include => grub-core/include}/grub/powerpc/ieee1275/util/biosdisk.h (100%) rename {include => grub-core/include}/grub/powerpc/kernel.h (100%) rename {include => grub-core/include}/grub/powerpc/setjmp.h (100%) rename {include => grub-core/include}/grub/powerpc/time.h (100%) rename {include => grub-core/include}/grub/powerpc/types.h (100%) rename {include => grub-core/include}/grub/raid.h (100%) rename {include => grub-core/include}/grub/reader.h (100%) rename {include => grub-core/include}/grub/script_sh.h (100%) rename {include => grub-core/include}/grub/scsi.h (100%) rename {include => grub-core/include}/grub/scsicmd.h (100%) rename {include => grub-core/include}/grub/sdl.h (100%) rename {include => grub-core/include}/grub/search.h (100%) rename {include => grub-core/include}/grub/serial.h (100%) rename {include => grub-core/include}/grub/setjmp.h (100%) rename {include => grub-core/include}/grub/sparc64/ieee1275/boot.h (100%) rename {include => grub-core/include}/grub/sparc64/ieee1275/console.h (100%) rename {include => grub-core/include}/grub/sparc64/ieee1275/ieee1275.h (100%) rename {include => grub-core/include}/grub/sparc64/ieee1275/kernel.h (100%) rename {include => grub-core/include}/grub/sparc64/ieee1275/loader.h (100%) rename {include => grub-core/include}/grub/sparc64/ieee1275/memory.h (100%) rename {include => grub-core/include}/grub/sparc64/ieee1275/time.h (100%) rename {include => grub-core/include}/grub/sparc64/kernel.h (100%) rename {include => grub-core/include}/grub/sparc64/setjmp.h (100%) rename {include => grub-core/include}/grub/sparc64/time.h (100%) rename {include => grub-core/include}/grub/sparc64/types.h (100%) rename {include => grub-core/include}/grub/symbol.h (100%) rename {include => grub-core/include}/grub/term.h (100%) rename {include => grub-core/include}/grub/terminfo.h (100%) rename {include => grub-core/include}/grub/test.h (93%) rename {include => grub-core/include}/grub/time.h (100%) rename {include => grub-core/include}/grub/tparm.h (100%) rename {include => grub-core/include}/grub/trig.h (100%) rename {include => grub-core/include}/grub/types.h (100%) rename {include => grub-core/include}/grub/usb.h (100%) rename {include => grub-core/include}/grub/usbdesc.h (100%) rename {include => grub-core/include}/grub/usbtrans.h (100%) rename {include => grub-core/include}/grub/util/deviceiter.h (100%) rename {include => grub-core/include}/grub/util/lvm.h (100%) rename {include => grub-core/include}/grub/util/misc.h (85%) rename {include => grub-core/include}/grub/util/ofpath.h (100%) rename {include => grub-core/include}/grub/util/raid.h (100%) rename {include => grub-core/include}/grub/util/resolve.h (100%) rename {include => grub-core/include}/grub/video.h (100%) rename {include => grub-core/include}/grub/video_fb.h (100%) rename {include => grub-core/include}/grub/x86_64/at_keyboard.h (100%) rename {include => grub-core/include}/grub/x86_64/efi/kernel.h (100%) rename {include => grub-core/include}/grub/x86_64/efi/loader.h (100%) rename {include => grub-core/include}/grub/x86_64/efi/memory.h (100%) rename {include => grub-core/include}/grub/x86_64/efi/serial.h (100%) rename {include => grub-core/include}/grub/x86_64/efi/time.h (100%) rename {include => grub-core/include}/grub/x86_64/io.h (100%) rename {include => grub-core/include}/grub/x86_64/kernel.h (100%) rename {include => grub-core/include}/grub/x86_64/linux.h (100%) rename {include => grub-core/include}/grub/x86_64/macho.h (100%) rename {include => grub-core/include}/grub/x86_64/multiboot.h (100%) rename {include => grub-core/include}/grub/x86_64/pci.h (100%) rename {include => grub-core/include}/grub/x86_64/relocator.h (100%) rename {include => grub-core/include}/grub/x86_64/setjmp.h (100%) rename {include => grub-core/include}/grub/x86_64/time.h (100%) rename {include => grub-core/include}/grub/x86_64/types.h (100%) rename {include => grub-core/include}/grub/x86_64/xnu.h (100%) rename {include => grub-core/include}/grub/xnu.h (100%) rename {include => grub-core/include}/multiboot.h (100%) rename {include => grub-core/include}/multiboot2.h (100%) rename {io => grub-core/io}/bufio.c (100%) rename {io => grub-core/io}/gzio.c (100%) rename {kern => grub-core/kern}/command.c (100%) rename {kern => grub-core/kern}/corecmd.c (100%) rename {kern => grub-core/kern}/device.c (100%) rename {kern => grub-core/kern}/disk.c (100%) rename {kern => grub-core/kern}/dl.c (99%) rename {kern => grub-core/kern}/efi/efi.c (100%) rename {kern => grub-core/kern}/efi/init.c (100%) rename {kern => grub-core/kern}/efi/mm.c (100%) rename {kern => grub-core/kern}/elf.c (100%) create mode 100644 grub-core/kern/emu/cache.S rename {util => grub-core/kern/emu}/console.c (99%) create mode 100644 grub-core/kern/emu/dl.c create mode 100644 grub-core/kern/emu/dummy/dl.c create mode 100644 grub-core/kern/emu/dummy/symlist.c rename {util => grub-core/kern/emu}/getroot.c (82%) rename {util => grub-core/kern/emu}/hostdisk.c (99%) rename {util => grub-core/kern/emu}/hostfs.c (100%) create mode 100644 grub-core/kern/emu/lite.c rename util/grub-emu.c => grub-core/kern/emu/main.c (90%) create mode 100644 grub-core/kern/emu/misc.c rename {util => grub-core/kern/emu}/time.c (100%) rename {kern => grub-core/kern}/env.c (100%) rename {kern => grub-core/kern}/err.c (100%) rename {kern => grub-core/kern}/file.c (100%) rename {kern => grub-core/kern}/fs.c (100%) rename {kern => grub-core/kern}/generic/millisleep.c (100%) rename {kern => grub-core/kern}/generic/rtc_get_time_ms.c (100%) rename {kern => grub-core/kern}/handler.c (100%) rename {kern => grub-core/kern}/i386/coreboot/init.c (100%) rename {kern => grub-core/kern}/i386/coreboot/mmap.c (100%) rename {kern => grub-core/kern}/i386/coreboot/startup.S (100%) rename {kern => grub-core/kern}/i386/dl.c (100%) rename {kern => grub-core/kern}/i386/efi/init.c (100%) rename {kern => grub-core/kern}/i386/efi/startup.S (100%) rename {kern => grub-core/kern}/i386/halt.c (100%) rename {kern => grub-core/kern}/i386/ieee1275/init.c (100%) rename {kern => grub-core/kern}/i386/ieee1275/startup.S (100%) rename {kern => grub-core/kern}/i386/loader.S (100%) rename {kern => grub-core/kern}/i386/misc.S (100%) rename {kern => grub-core/kern}/i386/multiboot_mmap.c (100%) rename {kern => grub-core/kern}/i386/pc/init.c (100%) rename {kern => grub-core/kern}/i386/pc/lzma_decode.S (100%) rename {kern => grub-core/kern}/i386/pc/mmap.c (100%) rename {kern => grub-core/kern}/i386/pc/startup.S (100%) rename {kern => grub-core/kern}/i386/pit.c (100%) rename {kern => grub-core/kern}/i386/qemu/mmap.c (100%) rename {kern => grub-core/kern}/i386/qemu/startup.S (100%) rename {kern => grub-core/kern}/i386/realmode.S (100%) rename {kern => grub-core/kern}/i386/tsc.c (100%) rename {kern => grub-core/kern}/ieee1275/cmain.c (100%) rename {kern => grub-core/kern}/ieee1275/ieee1275.c (100%) rename {kern => grub-core/kern}/ieee1275/init.c (100%) rename {kern => grub-core/kern}/ieee1275/mmap.c (100%) rename {kern => grub-core/kern}/ieee1275/openfw.c (100%) rename {kern => grub-core/kern}/list.c (100%) rename {kern => grub-core/kern}/main.c (100%) rename {kern => grub-core/kern}/mips/cache.S (100%) rename {kern => grub-core/kern}/mips/cache_flush.S (100%) rename {kern => grub-core/kern}/mips/dl.c (100%) rename {kern => grub-core/kern}/mips/init.c (100%) rename {kern => grub-core/kern}/mips/qemu-mips/init.c (100%) rename {kern => grub-core/kern}/mips/startup.S (100%) rename {kern => grub-core/kern}/mips/yeeloong/init.c (100%) rename {kern => grub-core/kern}/misc.c (100%) rename {kern => grub-core/kern}/mm.c (100%) rename {kern => grub-core/kern}/parser.c (100%) rename {kern => grub-core/kern}/partition.c (100%) rename {kern => grub-core/kern}/powerpc/cache.S (100%) rename {kern => grub-core/kern}/powerpc/dl.c (100%) rename {kern => grub-core/kern}/powerpc/ieee1275/startup.S (100%) rename {kern => grub-core/kern}/rescue_parser.c (100%) rename {kern => grub-core/kern}/rescue_reader.c (100%) rename {kern => grub-core/kern}/sparc64/cache.S (100%) rename {kern => grub-core/kern}/sparc64/dl.c (100%) rename {kern => grub-core/kern}/sparc64/ieee1275/crt0.S (100%) rename {kern => grub-core/kern}/sparc64/ieee1275/ieee1275.c (100%) rename {kern => grub-core/kern}/sparc64/ieee1275/init.c (100%) rename {kern => grub-core/kern}/term.c (100%) rename {kern => grub-core/kern}/time.c (100%) rename {kern => grub-core/kern}/x86_64/dl.c (100%) rename {kern => grub-core/kern}/x86_64/efi/callwrap.S (100%) rename {kern => grub-core/kern}/x86_64/efi/startup.S (100%) rename {lib => grub-core/lib}/LzFind.c (100%) rename {lib => grub-core/lib}/LzmaDec.c (100%) rename {lib => grub-core/lib}/LzmaEnc.c (100%) rename {lib => grub-core/lib}/arg.c (100%) rename {lib => grub-core/lib}/charset.c (100%) rename {lib => grub-core/lib}/cmos_datetime.c (100%) rename {lib => grub-core/lib}/crc.c (100%) rename {lib => grub-core/lib}/crypto.c (100%) rename {lib => grub-core/lib}/efi/datetime.c (100%) rename {lib => grub-core/lib}/envblk.c (100%) rename {lib => grub-core/lib}/hexdump.c (100%) rename {lib => grub-core/lib}/i386/pc/biosnum.c (100%) rename {lib => grub-core/lib}/i386/relocator.c (100%) rename {lib => grub-core/lib}/i386/relocator_asm.S (100%) rename {lib => grub-core/lib}/i386/relocator_backward.S (100%) rename {lib => grub-core/lib}/i386/setjmp.S (100%) rename {lib => grub-core/lib}/ieee1275/datetime.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/ChangeLog (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/ac.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/arcfour.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/bithelp.h (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/blowfish.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/camellia-glue.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/camellia.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/camellia.h (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/cast5.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/cipher.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/crc.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/des.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/dsa.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/ecc.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/elgamal.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/hash-common.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/hash-common.h (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/hmac-tests.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/md.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/md4.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/md5.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/primegen.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/pubkey.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/rfc2268.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/rijndael-tables.h (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/rijndael.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/rmd.h (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/rmd160.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/rsa.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/seed.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/serpent.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/sha1.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/sha256.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/sha512.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/tiger.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/twofish.c (100%) rename {lib => grub-core/lib}/libgcrypt/cipher/whirlpool.c (100%) rename {lib => grub-core/lib}/libgcrypt_wrap/cipher_wrap.h (100%) rename {lib => grub-core/lib}/mips/relocator.c (100%) rename {lib => grub-core/lib}/mips/relocator_asm.S (100%) rename {lib => grub-core/lib}/mips/setjmp.S (100%) rename {lib => grub-core/lib}/pbkdf2.c (100%) rename {lib => grub-core/lib}/posix_wrap/assert.h (100%) rename {lib => grub-core/lib}/posix_wrap/ctype.h (100%) rename {lib => grub-core/lib}/posix_wrap/errno.h (100%) rename {lib => grub-core/lib}/posix_wrap/langinfo.h (100%) rename {lib => grub-core/lib}/posix_wrap/limits.h (100%) rename {lib => grub-core/lib}/posix_wrap/localcharset.h (100%) rename {lib => grub-core/lib}/posix_wrap/locale.h (100%) rename {lib => grub-core/lib}/posix_wrap/stdint.h (100%) rename {lib => grub-core/lib}/posix_wrap/stdio.h (100%) rename {lib => grub-core/lib}/posix_wrap/stdlib.h (98%) rename {lib => grub-core/lib}/posix_wrap/string.h (97%) rename {lib => grub-core/lib}/posix_wrap/sys/types.h (100%) rename {lib => grub-core/lib}/posix_wrap/unistd.h (100%) rename {lib => grub-core/lib}/posix_wrap/wchar.h (100%) rename {lib => grub-core/lib}/posix_wrap/wctype.h (100%) rename {lib => grub-core/lib}/powerpc/setjmp.S (100%) rename {lib => grub-core/lib}/relocator.c (100%) rename {lib => grub-core/lib}/sparc64/setjmp.S (100%) rename {lib => grub-core/lib}/x86_64/setjmp.S (100%) rename {loader => grub-core/loader}/aout.c (100%) rename {loader => grub-core/loader}/efi/appleloader.c (100%) rename {loader => grub-core/loader}/efi/chainloader.c (100%) rename {loader => grub-core/loader}/i386/bsd.c (100%) rename {loader => grub-core/loader}/i386/bsd32.c (100%) rename {loader => grub-core/loader}/i386/bsd64.c (100%) rename {loader => grub-core/loader}/i386/bsdXX.c (100%) rename {loader => grub-core/loader}/i386/bsd_helper.S (100%) rename {loader => grub-core/loader}/i386/bsd_pagetable.c (100%) rename {loader => grub-core/loader}/i386/bsd_trampoline.S (100%) rename {loader => grub-core/loader}/i386/efi/linux.c (100%) rename {loader => grub-core/loader}/i386/efi/xnu.c (100%) rename {loader => grub-core/loader}/i386/ieee1275/linux.c (100%) rename {loader => grub-core/loader}/i386/linux.c (100%) rename {loader => grub-core/loader}/i386/linux_trampoline.S (100%) rename {loader => grub-core/loader}/i386/multiboot_mbi.c (100%) rename {loader => grub-core/loader}/i386/pc/chainloader.c (100%) rename {loader => grub-core/loader}/i386/pc/linux.c (100%) rename {loader => grub-core/loader}/i386/pc/xnu.c (100%) rename {loader => grub-core/loader}/i386/xnu.c (100%) rename {loader => grub-core/loader}/macho.c (100%) rename {loader => grub-core/loader}/macho32.c (100%) rename {loader => grub-core/loader}/macho64.c (100%) rename {loader => grub-core/loader}/machoXX.c (100%) rename {loader => grub-core/loader}/mips/linux.c (100%) rename {loader => grub-core/loader}/multiboot.c (100%) rename {loader => grub-core/loader}/multiboot_elfxx.c (100%) rename {loader => grub-core/loader}/multiboot_mbi2.c (100%) rename {loader => grub-core/loader}/powerpc/ieee1275/linux.c (100%) rename {loader => grub-core/loader}/sparc64/ieee1275/linux.c (100%) rename {loader => grub-core/loader}/xnu.c (100%) rename {loader => grub-core/loader}/xnu_resume.c (100%) rename {mmap => grub-core/mmap}/efi/mmap.c (100%) rename {mmap => grub-core/mmap}/i386/mmap.c (100%) rename {mmap => grub-core/mmap}/i386/pc/mmap.c (100%) rename {mmap => grub-core/mmap}/i386/pc/mmap_helper.S (100%) rename {mmap => grub-core/mmap}/i386/uppermem.c (100%) rename {mmap => grub-core/mmap}/mips/yeeloong/uppermem.c (100%) rename {mmap => grub-core/mmap}/mmap.c (100%) create mode 100644 grub-core/modules.def rename {normal => grub-core/normal}/auth.c (100%) rename {normal => grub-core/normal}/autofs.c (100%) rename {normal => grub-core/normal}/cmdline.c (100%) rename {normal => grub-core/normal}/color.c (100%) rename {normal => grub-core/normal}/completion.c (100%) rename {normal => grub-core/normal}/context.c (100%) rename {normal => grub-core/normal}/crypto.c (100%) rename {normal => grub-core/normal}/datetime.c (100%) rename {normal => grub-core/normal}/dyncmd.c (100%) rename {normal => grub-core/normal}/handler.c (100%) rename {normal => grub-core/normal}/main.c (100%) rename {normal => grub-core/normal}/menu.c (100%) rename {normal => grub-core/normal}/menu_entry.c (100%) rename {normal => grub-core/normal}/menu_text.c (100%) rename {normal => grub-core/normal}/misc.c (100%) rename {normal => grub-core/normal}/term.c (100%) rename {partmap => grub-core/partmap}/acorn.c (100%) rename {partmap => grub-core/partmap}/amiga.c (100%) rename {partmap => grub-core/partmap}/apple.c (100%) rename {partmap => grub-core/partmap}/bsdlabel.c (100%) rename {partmap => grub-core/partmap}/gpt.c (100%) rename {partmap => grub-core/partmap}/msdos.c (100%) rename {partmap => grub-core/partmap}/sun.c (100%) rename {partmap => grub-core/partmap}/sunpc.c (100%) rename {parttool => grub-core/parttool}/msdospart.c (100%) create mode 100644 grub-core/po/Makefile.am rename {po => grub-core/po}/POTFILES (100%) rename {po => grub-core/po}/POTFILES-shell (100%) rename {po => grub-core/po}/README (100%) rename {script => grub-core/script}/execute.c (100%) rename {script => grub-core/script}/function.c (100%) rename {script => grub-core/script}/lexer.c (100%) rename {script => grub-core/script}/main.c (100%) rename {script => grub-core/script}/parser.y (100%) rename {script => grub-core/script}/script.c (100%) rename {script => grub-core/script}/yylex.l (100%) rename {term => grub-core/term}/at_keyboard.c (100%) rename {term => grub-core/term}/efi/console.c (100%) rename {term => grub-core/term}/gfxterm.c (100%) rename {term => grub-core/term}/i386/pc/console.c (100%) rename {term => grub-core/term}/i386/pc/vga.c (100%) rename {term => grub-core/term}/i386/pc/vga_text.c (100%) rename {term => grub-core/term}/i386/vga_common.c (100%) rename {term => grub-core/term}/ieee1275/ofconsole.c (100%) rename {term => grub-core/term}/serial.c (100%) rename {term => grub-core/term}/terminfo.c (100%) rename {term => grub-core/term}/tparm.c (100%) rename {term => grub-core/term}/usb_keyboard.c (100%) rename {tests => grub-core/tests}/example_functional_test.c (95%) rename {tests => grub-core/tests}/lib/functional_test.c (100%) rename {tests => grub-core/tests}/lib/test.c (100%) rename {video => grub-core/video}/bitmap.c (100%) rename {video => grub-core/video}/bitmap_scale.c (100%) rename {video => grub-core/video}/efi_gop.c (100%) rename {video => grub-core/video}/efi_uga.c (100%) rename {util => grub-core/video/emu}/sdl.c (100%) rename {video => grub-core/video}/fb/fbblit.c (100%) rename {video => grub-core/video}/fb/fbfill.c (100%) rename {video => grub-core/video}/fb/fbutil.c (100%) rename {video => grub-core/video}/fb/video_fb.c (100%) rename {video => grub-core/video}/i386/pc/vbe.c (100%) rename {video => grub-core/video}/ieee1275.c (100%) rename {video => grub-core/video}/readers/jpeg.c (100%) rename {video => grub-core/video}/readers/png.c (100%) rename {video => grub-core/video}/readers/tga.c (100%) rename {video => grub-core/video}/sm712.c (100%) rename {video => grub-core/video}/video.c (100%) create mode 100644 modules.def create mode 100644 po/Makefile.am diff --git a/.bzrignore b/.bzrignore index 46e8637b6..f91e72efa 100644 --- a/.bzrignore +++ b/.bzrignore @@ -71,3 +71,9 @@ stamp-h.in symlist.c trigtables.c update-grub_lib +Makefile.in +modules.am +GPATH +GRTAGS +GSYMS +GTAGS \ No newline at end of file diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 000000000..866b904ec --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,223 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +1.1 Quick configuration advice +============================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +1.2 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the included GNU +`gettext' library will be used. This library is wholly contained +within this package, usually in the `intl/' subdirectory, so prior +installation of the GNU `gettext' package is _not_ required. +Installers may use special options at configuration time for changing +the default behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will, respectively, bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might not be desirable. You should use +the more recent version of the GNU `gettext' library. I.e. if the file +`intl/VERSION' shows that the library which comes with this package is +more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages usually have many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.3 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your language by running the +command `locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +1.4 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.5 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of October +2006. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + +# Matrix here is removed! + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If October 2006 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +1.6 Using `gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..d962963c1 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,87 @@ +AUTOMAKE_OPTIONS = subdir-objects +DEPDIR = .deps-util + +EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def \ + \ + geninit.sh \ + \ + gnulib/progname.h gnulib/fnmatch_loop.c gnulib/alloca.h \ + gnulib/error.h gnulib/fnmatch.h gnulib/getopt.h \ + gnulib/getopt_int.h gnulib/gettext.h gnulib/progname.h \ + \ + util/mkisofs/mkisofs.h util/mkisofs/iso9660.h \ + util/mkisofs/include/prototyp.h util/mkisofs/defaults.h \ + util/mkisofs/match.h util/mkisofs/exclude.h \ + util/mkisofs/msdos_partition.h util/mkisofs/include/fctldefs.h \ + util/mkisofs/include/mconfig.h util/mkisofs/include/statdefs.h + +SUBDIRS = . grub-core po docs + +include $(top_srcdir)/grub-core/Makefile.vars + +CFLAGS_PROGRAM = $(HOST_CFLAGS) $(CFLAGS_GNULIB) +LDFLAGS_PROGRAM = $(HOST_LDFLAGS) $(LDFLAGS_GNULIB) $(LIBINTL) +CPPFLAGS_PROGRAM = $(HOST_CPPFLAGS) $(CPPFLAGS_GNULIB) +CCASFLAGS_PROGRAM = $(HOST_CCASFLAGS) $(CCASFLAGS_GNULIB) + +CFLAGS_LIBRARY = $(CFLAGS_PROGRAM) +CPPFLAGS_LIBRARY = $(CPPFLAGS_PROGRAM) +CCASFLAGS_LIBRARY = $(CCASFLAGS_PROGRAM) + +AM_CFLAGS = +AM_LDFLAGS = +AM_CPPFLAGS = $(CPPFLAGS_GRUB) -DGRUB_FILE=\"$(subst $(top_srcdir)/,,$<)\" +AM_CCASFLAGS = -DASM_FILE=1 + +# XXX Use Automake's LEX & YACC support +grub_script.tab.c grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y + $(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/grub-core/script/parser.y +CLEANFILES += grub_script.tab.c grub_script.tab.h + +# For the lexer. +grub_script.yy.c grub_script.yy.h: $(top_srcdir)/grub-core/script/yylex.l + $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(top_srcdir)/grub-core/script/yylex.l +CLEANFILES += grub_script.yy.c grub_script.yy.h + +# For libutil.a +libutil_a_init.lst: grub_script.tab.h grub_script.yy.h $(libutil_a_SOURCES) + rm -f $@ + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) \ + -D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ \ + | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1) +CLEANFILES += libutil_a_init.lst + +libutil_a_init.c: libutil_a_init.lst $(top_srcdir)/geninit.sh + rm -f $@; sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1) +CLEANFILES += libutil_a_init.c + +if COND_GRUB_MKFONT +if COND_HAVE_FONT_SOURCE +pkgdata_DATA = unicode.pf2 ascii.pf2 ascii.h +endif +endif + +unicode.pf2: $(FONT_SOURCE) grub-mkfont + $(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) +CLEANFILES += unicode.pf2 + +# Arrows and lines are needed to draw the menu, so always include them +UNICODE_ARROWS=0x2190-0x2193 +UNICODE_LINES=0x2501-0x251B + +ascii.pf2: $(FONT_SOURCE) grub-mkfont + $(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) +CLEANFILES += ascii.pf2 + +ascii.bitmaps: $(FONT_SOURCE) grub-mkfont + $(builddir)/grub-mkfont --ascii-bitmaps -o $@ $(FONT_SOURCE) +CLEANFILES += ascii.bitmaps + +ascii.h: ascii.bitmaps grub-bin2h + $(builddir)/grub-bin2h ascii_bitmaps < $< > $@ + cp $@ $(top_builddir)/grub-core/include +CLEANFILES += ascii.h $(top_builddir)/grub-core/include/ascii.h + +platform_HEADERS = config.h + +include $(srcdir)/modules.am diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 822a08797..000000000 --- a/Makefile.in +++ /dev/null @@ -1,564 +0,0 @@ -# -*- makefile -*- -# -# Copyright (C) 1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. -# -# This Makefile.in is free software; the author -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -### The configure script will replace these variables. - -SHELL = /bin/sh - -@SET_MAKE@ - -transform = @program_transform_name@ - -srcdir = @srcdir@ -builddir = @builddir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datarootdir = @datarootdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -localedir = @localedir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -pkgdatadir = $(datadir)/`echo @PACKAGE_TARNAME@ | sed '$(transform)'` -pkglibdir = $(libdir)/`echo @PACKAGE_TARNAME@/$(target_cpu)-$(platform) | sed '$(transform)'` - -# Internationalization library. -LIBINTL = @LIBINTL@ -TARGET_NO_MODULES = @TARGET_NO_MODULES@ - -# Util library. -LIBUTIL = @LIBUTIL@ - -XGETTEXT = @XGETTEXT@ -MSGMERGE = @MSGMERGE@ -MSGFMT = @MSGFMT@ - -LINGUAS = $(shell for i in $(srcdir)/po/*.po ; do \ - if test -e $$i ; then echo $$i ; fi ; \ - done | sed -e "s,.*/po/\(.*\)\.po$$,\1,") - -PACKAGE = @PACKAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ - -host_os = @host_os@ -host_kernel = @host_kernel@ -host_cpu = @host_cpu@ - -target_cpu = @target_cpu@ -platform = @platform@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -MKDIR_P = @MKDIR_P@ - -mkinstalldirs = $(srcdir)/mkinstalldirs - -LIBS = @LIBS@ $(LIBINTL) $(LIBUTIL) - -CC = @CC@ -CFLAGS = @CFLAGS@ -POSIX_CFLAGS = -I$(srcdir)/lib/posix_wrap -GNULIB_UTIL_CFLAGS = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" -I$(srcdir)/gnulib -GNULIB_CFLAGS = $(GNULIB_UTIL_CFLAGS) $(POSIX_CFLAGS) -ASFLAGS = @ASFLAGS@ -LDFLAGS = @LDFLAGS@ $(LIBS) -CPPFLAGS = @CPPFLAGS@ -I$(builddir) -I$(builddir)/include -I$(srcdir)/gnulib -I$(srcdir)/include -Wall -W \ - -DGRUB_LIBDIR=\"$(pkglibdir)\" -DLOCALEDIR=\"$(localedir)\" -TARGET_CC = @TARGET_CC@ -TARGET_CFLAGS = -ffreestanding @TARGET_CFLAGS@ -TARGET_ASFLAGS = -nostdinc -fno-builtin @TARGET_ASFLAGS@ -TARGET_MODULE_FORMAT = @TARGET_MODULE_FORMAT@ -TARGET_APPLE_CC = @TARGET_APPLE_CC@ -OBJCONV = @OBJCONV@ -TARGET_CPPFLAGS = @TARGET_CPPFLAGS@ -I$(srcdir)/include -I$(builddir) -I$(builddir)/include \ - -Wall -W -TARGET_LDFLAGS = -nostdlib -static-libgcc @TARGET_LDFLAGS@ -TARGET_IMG_LDSCRIPT = @TARGET_IMG_LDSCRIPT@ -TARGET_IMG_LDFLAGS = -nostdlib @TARGET_IMG_LDFLAGS@ -TARGET_IMG_CFLAGS = @TARGET_IMG_CFLAGS@ -TARGET_OBJ2ELF = @TARGET_OBJ2ELF@ -kernel_img_LDFLAGS = -lgcc -EXEEXT = @EXEEXT@ -OBJCOPY = @OBJCOPY@ -STRIP = @STRIP@ -NM = @NM@ -RUBY = @RUBY@ -MAKEINFO = @MAKEINFO@ -ifeq (, $(MAKEINFO)) -MAKEINFO = true -endif -HELP2MAN = @HELP2MAN@ -ifeq (, $(HELP2MAN)) -HELP2MAN = true -else -HELP2MAN := LANG=C $(HELP2MAN) --no-info --source=FSF -endif -AWK = @AWK@ -LIBCURSES = @LIBCURSES@ -LIBUSB = @LIBUSB@ -LIBSDL = @LIBSDL@ -LIBPCIACCESS = @LIBPCIACCESS@ -LEX = @LEX@ -YACC = @YACC@ -FONT_SOURCE = @FONT_SOURCE@ - -# Options. -enable_grub_emu_usb = @enable_grub_emu_usb@ -enable_grub_emu_sdl = @enable_grub_emu_sdl@ -enable_grub_emu_pci = @enable_grub_emu_pci@ -enable_grub_fstest = @enable_grub_fstest@ -enable_grub_pe2elf = @enable_grub_pe2elf@ -enable_grub_mkfont = @enable_grub_mkfont@ -freetype_cflags = @freetype_cflags@ -freetype_libs = @freetype_libs@ -enable_efiemu = @enable_efiemu@ - -### General variables. - -RMKFILES = $(wildcard $(srcdir)/conf/*.rmk) - -MKFILES = $(patsubst %.rmk,%.mk,$(RMKFILES)) - -PKGLIB = $(pkglib_IMAGES) $(pkglib_MODULES) $(pkglib_PROGRAMS) \ - $(pkglib_DATA) $(pkglib_BUILDDIR) -PKGDATA = $(pkgdata_DATA) -PROGRAMS = $(bin_UTILITIES) $(sbin_UTILITIES) -SCRIPTS = $(bin_SCRIPTS) $(sbin_SCRIPTS) $(grub-mkconfig_SCRIPTS) \ - $(lib_SCRIPTS) -INFOS = $(info_INFOS) - -CLEANFILES = -MOSTLYCLEANFILES = -DISTCLEANFILES = config.status config.cache config.log config.h \ - Makefile stamp-h stamp-h1 include/grub/cpu include/grub/machine \ - gensymlist.sh genkernsyms.sh build_env.mk \ - docs/grub.info docs/version.texi docs/stamp-vti - -MAINTAINER_CLEANFILES = $(srcdir)/configure $(srcdir)/aclocal.m4 \ - $(MKFILES) $(srcdir)/config.guess \ - $(srcdir)/config.sub $(srcdir)/install-sh $(srcdir)/missing \ - $(srcdir)/DISTLIST $(srcdir)/config.h.in $(srcdir)/stamp-h.in $(INFOS) - -# The default target. -all: all-local - -### Include an arch-specific Makefile. -$(addprefix $(srcdir)/,$(MKFILES)): %.mk: %.rmk genmk.rb - if test "x$(RUBY)" = x; then \ - touch $@; \ - else \ - $(RUBY) $(srcdir)/genmk.rb < $< > $@; \ - fi - -ifeq ($(platform), emu) -include $(srcdir)/conf/any-emu.mk -else -include $(srcdir)/conf/$(target_cpu)-$(platform).mk -# For tests. -include $(srcdir)/conf/tests.mk -# For external modules. --include $(wildcard $(GRUB_CONTRIB)/*/conf/common.mk) -endif - -ifeq ($(TARGET_NO_MODULES), yes) - TARGET_CFLAGS += -DGRUB_TARGET_NO_MODULES=1 - CFLAGS += -DGRUB_TARGET_NO_MODULES=1 -endif - -### General targets. - -CLEANFILES += $(pkglib_DATA) $(pkgdata_DATA) po/*.mo -ifneq ($(TARGET_NO_MODULES), yes) -pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst -endif -moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep.awk - cat $(DEFSYMFILES) /dev/null \ - | $(AWK) -f $(srcdir)/genmoddep.awk $(UNDSYMFILES) > $@ \ - || (rm -f $@; exit 1) - -command.lst: $(COMMANDFILES) - cat $^ /dev/null | sort > $@ - -fs.lst: $(FSFILES) - cat $^ /dev/null | sort > $@ - -partmap.lst: $(PARTMAPFILES) - cat $^ /dev/null | sort > $@ - -handler.lst: $(HANDLERFILES) - cat $^ /dev/null | sort > $@ - -terminal.lst: $(TERMINALFILES) - cat $^ /dev/null | sort > $@ - -parttool.lst: $(PARTTOOLFILES) - cat $^ /dev/null | sort | uniq > $@ - -video.lst: $(VIDEOFILES) - cat $^ /dev/null | sort | uniq > $@ - -crypto.lst: lib/libgcrypt-grub/cipher/crypto.lst - cp $^ $@ - -ifneq (true, $(MAKEINFO)) -info_INFOS += docs/grub.info -endif - -MOSTLYCLEANFILES += vti.tmp -MAINTAINER_CLEANFILES += docs/stamp-vti docs/version.texi -docs/version.texi: docs/stamp-vti -docs/stamp-vti: docs/grub.texi configure.ac - $(MKDIR_P) docs - (set `$(SHELL) $(srcdir)/docs/mdate-sh $<`; \ - echo "@set UPDATED $$1 $$2 $$3"; \ - echo "@set UPDATED-MONTH $$2 $$3"; \ - echo "@set EDITION $(PACKAGE_VERSION)"; \ - echo "@set VERSION $(PACKAGE_VERSION)") > vti.tmp - @cmp -s vti.tmp $(builddir)/docs/version.texi \ - || (echo "Updating $(builddir)/docs/version.texi"; \ - cp vti.tmp $(builddir)/docs/version.texi) - -@rm -f vti.tmp - @cp $(builddir)/docs/version.texi $@ - -# Use --force until such time as the documentation is cleaned up. -docs/grub.info: docs/grub.texi docs/version.texi docs/fdl.texi - $(MKDIR_P) docs - -$(MAKEINFO) -P $(builddir)/docs --no-split --force $< -o $@ - -ifeq (, $(FONT_SOURCE)) -else - -ifeq ($(enable_grub_mkfont),yes) - -pkgdata_DATA += unicode.pf2 ascii.pf2 ascii.h -CLEANFILES += ascii.bitmaps - -# Arrows and lines are needed to draw the menu, so we always include them -UNICODE_ARROWS=0x2190-0x2193 -UNICODE_LINES=0x2501-0x251B - -unicode.pf2: $(FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) - -ascii.pf2: $(FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) - -ascii.bitmaps: $(FONT_SOURCE) grub-mkfont - $(builddir)/grub-mkfont --ascii-bitmaps -o $@ $(FONT_SOURCE) - -ascii.h: ascii.bitmaps grub-bin2h - $(builddir)/grub-bin2h ascii_bitmaps < $< > $@ - -TARGET_CFLAGS += -DUSE_ASCII_FAILBACK=1 -endif -endif - -# Used for building modules externally -pkglib_BUILDDIR += build_env.mk -build_env.mk: Makefile - (\ - echo "TARGET_CC=$(TARGET_CC)" ; \ - echo "TARGET_CFLAGS=$(TARGET_CFLAGS)" ; \ - echo "TARGET_ASFLAGS=$(TARGET_ASFLAGS)" ; \ - echo "TARGET_CPPFLAGS=$(TARGET_CPPFLAGS) -I$(pkglibdir) -I$(includedir)" ; \ - echo "STRIP=$(STRIP)" ; \ - echo "OBJCONV=$(OBJCONV)" ; \ - echo "TARGET_MODULE_FORMAT=$(TARGET_MODULE_FORMAT)" ; \ - echo "TARGET_APPLE_CC=$(TARGET_APPLE_CC)" ; \ - echo "COMMON_ASFLAGS=$(COMMON_ASFLAGS)" ; \ - echo "COMMON_CFLAGS=$(COMMON_CFLAGS)" ; \ - echo "COMMON_LDFLAGS=$(COMMON_LDFLAGS)"\ - ) > $@ -pkglib_BUILDDIR += config.h grub_script.tab.h - -all-local: $(PROGRAMS) $(GRUB_EMU) $(PKGLIB) $(PKGDATA) $(SCRIPTS) $(INFOS) $(MKFILES) $(foreach lang, $(LINGUAS), po/$(lang).mo) - -install: install-local - -install-local: all - $(SHELL) $(mkinstalldirs) $(DESTDIR)$(pkglibdir) - rm -f $(DESTDIR)$(pkglibdir)/* - @list='$(PKGLIB)'; \ - for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(pkglibdir)/$$dest; \ - done - $(SHELL) $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) - @list='$(PKGDATA)'; \ - for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(pkgdatadir)/$$dest; \ - done - $(SHELL) $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1 - @list='$(bin_UTILITIES) $(GRUB_EMU)'; for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - $(INSTALL_PROGRAM) $$dir$$file $(DESTDIR)$(bindir)/$$dest; \ - $(HELP2MAN) --section=1 -o $(DESTDIR)$(mandir)/man1/$$dest.1 $(builddir)/$$file; \ - done - $(SHELL) $(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(mandir)/man8 - @list='$(sbin_UTILITIES)'; for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - $(INSTALL_PROGRAM) $$dir$$file $(DESTDIR)$(sbindir)/$$dest; \ - $(HELP2MAN) --section=8 -o $(DESTDIR)$(mandir)/man8/$$dest.8 $(builddir)/$$file; \ - done - @list='$(bin_SCRIPTS)'; for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - $(INSTALL_SCRIPT) $$dir$$file $(DESTDIR)$(bindir)/$$dest; \ - $(HELP2MAN) --section=1 -o $(DESTDIR)$(mandir)/man1/$$dest.1 $(builddir)/$$file; \ - done - @list='$(sbin_SCRIPTS)'; for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - $(INSTALL_SCRIPT) $$dir$$file $(DESTDIR)$(sbindir)/$$dest; \ - $(HELP2MAN) --section=8 -o $(DESTDIR)$(mandir)/man8/$$dest.8 $(builddir)/$$file; \ - done - $(SHELL) $(mkinstalldirs) $(DESTDIR)$(sysconfdir)/grub.d - @list='$(grub-mkconfig_SCRIPTS)'; for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - $(INSTALL_SCRIPT) $$dir$$file $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \ - done - @list='$(grub-mkconfig_DATA)'; for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \ - done - $(SHELL) $(mkinstalldirs) $(DESTDIR)$(libdir)/grub - @list='$(lib_SCRIPTS)'; \ - for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(libdir)/grub/$$dest; \ - done - @langs='$(LINGUAS)'; \ - for lang in $$langs; do \ - $(SHELL) $(mkinstalldirs) $(DESTDIR)/$(datadir)/locale/$$lang/LC_MESSAGES; \ - file="po/$$lang.mo"; \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)/$(datadir)/locale/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ - done - $(SHELL) $(mkinstalldirs) $(DESTDIR)$(infodir) - @list='$(info_INFOS)'; \ - for file in $$list; do \ - if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(infodir); \ - if (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$dest" || :; \ - fi; \ - done - -install-strip: - $(MAKE) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" install - -uninstall: - @list='$(PKGLIB)'; \ - for file in $$list; do \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - rm -f $(DESTDIR)$(pkglibdir)/$$dest; \ - done - @list='$(PKGDATA)'; \ - for file in $$list; do \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - rm -f $(DESTDIR)$(pkgdatadir)/$$dest; \ - done - @list='$(bin_UTILITIES) $(bin_SCRIPTS) $(GRUB_EMU)'; for file in $$list; do \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - rm -f $(DESTDIR)$(bindir)/$$dest; \ - rm -f $(DESTDIR)$(mandir)/man1/$$dest.1; \ - done - @list='$(sbin_UTILITIES) $(sbin_SCRIPTS)'; for file in $$list; do \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - rm -f $(DESTDIR)$(sbindir)/$$dest; \ - rm -f $(DESTDIR)$(mandir)/man8/$$dest.8; \ - done - @list='$(grub-mkconfig_SCRIPTS) $(grub-mkconfig_DATA)'; for file in $$list; do \ - dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ - rm -f $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \ - done - @list='$(lib_SCRIPTS)'; \ - for file in $$list; do \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - rm -f $(DESTDIR)$(libdir)/grub/$$dest; \ - done - @list='$(info_INFOS)'; \ - for file in $$list; do \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - if (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$dest"; then \ - :; \ - else \ - test ! -f "$(DESTDIR)$(infodir)/$$dest" || exit 1; \ - fi; \ - fi; \ - rm -f $(DESTDIR)$(infodir)/$$dest; \ - done - -clean: $(CLEAN_IMAGE_TARGETS) $(CLEAN_MODULE_TARGETS) $(CLEAN_UTILITY_TARGETS) - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -mostlyclean: clean $(MOSTLYCLEAN_IMAGE_TARGETS) $(MOSTLYCLEAN_MODULE_TARGETS) $(MOSTLYCLEAN_UTILITY_TARGETS) - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -distclean: mostlyclean - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -rm -rf $(srcdir)/autom4te.cache - -maintainer-clean: distclean - -test -z "$(MAINTAINER_CLEANFILES)" || rm -f $(MAINTAINER_CLEANFILES) - -rmdir $(srcdir)/lib/libgcrypt-grub/cipher - -rmdir $(srcdir)/lib/libgcrypt-grub - -info: - -dvi: - -distdir=$(PACKAGE_TARNAME)-$(PACKAGE_VERSION) - -DISTLIST: gendistlist.sh - $(SHELL) $(srcdir)/gendistlist.sh > $(srcdir)/DISTLIST - -distdir: DISTLIST - -chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir) - $(SHELL) $(mkinstalldirs) $(distdir) - for i in `cat $(srcdir)/DISTLIST`; do \ - dir=`echo "$$i" | sed 's:/[^/]*$$::'`; \ - if test -d $(srcdir)/$$dir; then \ - $(SHELL) $(mkinstalldirs) $(distdir)/$$dir; \ - fi; \ - cp -p $(srcdir)/$$i $(distdir)/$$i || exit 1; \ - done - chmod -R a+r $(distdir) - -GZIP_ENV = --best - -dist: distdir - tar chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - -chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir) - -distcheck: dist - -chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir) - GZIP=$(GZIP_ENV) gzip -cd $(distdir).tar.gz | tar xf - - chmod -R a-w $(distdir) - chmod a+w $(distdir) - mkdir $(distdir)/=build - mkdir $(distdir)/=inst - chmod a-w $(distdir) - dc_instdir=`CDPATH=: && cd $(distdir)/=inst && pwd` \ - && cd $(distdir)/=build \ - && $(SHELL) ../configure --srcdir=.. --prefix=$$dc_instdir \ - && $(MAKE) all dvi check install && $(MAKE) uninstall \ - && (test `find $$dc_instdir -type f -print | wc -l` -le 1 \ - || (echo "Error: files left after uninstall" 1>&2; \ - exit 1)) \ - && $(MAKE) dist && $(MAKE) distclean \ - && rm -f $(distdir).tar.gz \ - && (test `find . -type f -print | wc -l` -eq 0 \ - || (echo "Error: files left after distclean" 1>&2; \ - exit 1)) - -chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir) - @echo "$(distdir).tar.gz is ready for distribution" | \ - sed 'h;s/./=/g;p;x;p;x' - -check: all $(UNIT_TESTS) $(FUNCTIONAL_TESTS) $(SCRIPTED_TESTS) - @list="$(UNIT_TESTS)"; \ - set -e; \ - for file in $$list; do \ - $(builddir)/$$file; \ - done - @list="$(FUNCTIONAL_TESTS)"; \ - set -e; \ - for file in $$list; do \ - mod=`basename $$file .mod`; \ - echo "insmod functional_test; insmod $$mod; functional_test" \ - | $(builddir)/grub-shell; \ - done - @list="$(SCRIPTED_TESTS)"; \ - set -e; \ - for file in $$list; do \ - $(builddir)/$$file; \ - done - -.SUFFIX: -.SUFFIX: .c .o .S .d - -# Regenerate configure and Makefile automatically. -$(srcdir)/aclocal.m4: configure.ac acinclude.m4 - cd $(srcdir) && aclocal - -$(srcdir)/configure: configure.ac aclocal.m4 - cd $(srcdir) && autoconf - -$(srcdir)/config.h.in: stamp-h.in -$(srcdir)/stamp-h.in: configure.ac aclocal.m4 - cd $(srcdir) && autoheader - echo timestamp > $(srcdir)/stamp-h.in - -config.h: stamp-h -stamp-h: config.h.in config.status - $(SHELL) ./config.status - -Makefile: Makefile.in config.status - $(SHELL) ./config.status - -config.status: configure - $(SHELL) ./config.status --recheck - -gensymlist.sh: gensymlist.sh.in config.status - $(SHELL) ./config.status - -genkernsyms.sh: genkernsyms.sh.in config.status - $(SHELL) ./config.status - -$(srcdir)/po/$(PACKAGE).pot: po/POTFILES po/POTFILES-shell - cd $(srcdir) && $(XGETTEXT) -ctranslate --from-code=utf-8 -o po/$(PACKAGE).pot -f po/POTFILES --keyword=_ --keyword=N_ - cd $(srcdir) && $(XGETTEXT) -ctranslate --from-code=utf-8 -o po/$(PACKAGE).pot -f po/POTFILES-shell -j --language=Shell - -$(foreach lang, $(LINGUAS), $(srcdir)/po/$(lang).po): po/$(PACKAGE).pot - $(MSGMERGE) -U $@ $^ - -po/%.mo: po/%.po - $(MKDIR_P) $$(dirname $@) - $(MSGFMT) -c --statistics -o $@ $^ - -.PHONY: all install install-strip uninstall clean mostlyclean distclean -.PHONY: maintainer-clean info dvi dist check - -# Prevent an overflow. -.NOEXPORT: - -.DELETE_ON_ERROR: diff --git a/autogen.sh b/autogen.sh index eb251f9f0..5358d45f1 100755 --- a/autogen.sh +++ b/autogen.sh @@ -2,22 +2,33 @@ set -e -aclocal -autoconf -autoheader +ln -sf ../NEWS grub-core/ +ln -sf ../README grub-core/ +ln -sf ../INSTALL grub-core/ +ln -sf ../AUTHORS grub-core/ +ln -sf ../COPYING grub-core/ +ln -sf ../ABOUT-NLS grub-core/ +ln -sf ../ChangeLog grub-core/ +ln -sf ../aclocal.m4 grub-core/ +ln -sf ../acinclude.m4 grub-core/ +ln -sf ../config.rpath grub-core/ +ln -sf ../gentpl.py grub-core/ +ln -sf ../configure.common grub-core/ -# FIXME: automake doesn't like that there's no Makefile.am -automake -a -c -f || true +ln -sf grub-core/include . +ln -sf grub-core/gnulib . +ln -sf grub-core/lib . + +python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl +autogen -T Makefile.tpl modules.def | sed -e '/^$/{N;/^\n$/D;}' > modules.am + +(cd grub-core && python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl) +(cd grub-core && autogen -T Makefile.tpl modules.def | sed -e '/^$/{N;/^\n$/D;}' > modules.am) + +(cd grub-core && echo timestamp > stamp-h.in) +(cd grub-core && python import_gcry.py lib/libgcrypt/ .) echo timestamp > stamp-h.in - -python util/import_gcry.py lib/libgcrypt/ . - -for rmk in conf/*.rmk ${GRUB_CONTRIB}/*/conf/*.rmk; do - if test -e $rmk ; then - ruby genmk.rb < $rmk > `echo $rmk | sed 's/\.rmk$/.mk/'` - fi -done -sh gendistlist.sh > DISTLIST +autoreconf -vi exit 0 diff --git a/configure.ac b/configure.ac index 4e1dd41d8..10c527565 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # Process this file with autoconf to produce a configure script. -# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# Copyright (C) 2010 Free Software Foundation, Inc. # # This configure.ac is free software; the author # gives unlimited permission to copy and/or distribute it, @@ -23,782 +23,50 @@ dnl which specifies the system running GRUB, such as firmware. dnl This is necessary because the target type in autoconf does not dnl describe such a system very well. dnl -dnl The current strategy is to use variables with no prefix (such as -dnl CC, CFLAGS, etc.) for the host type as well as the build type, -dnl because GRUB does not need to use those variables for the build -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. - +dnl The current strategy is to build utilities using host +dnl cross-compiler and grub core and modules using target +dnl cross-compiler. For this we use nested packages approach, where +dnl top-level package grub utilities is built with HOSTCC and nested +dnl package (in grub-core directory) builds with TARGETCC. +# NOTE: grub-core/configure.ac must also be updated. AC_INIT([GRUB],[1.98],[bug-grub@gnu.org]) -AM_INIT_AUTOMAKE() -AC_PREREQ(2.60) -AC_CONFIG_SRCDIR([include/grub/dl.h]) -AC_CONFIG_HEADER([config.h]) +AC_CONFIG_AUX_DIR([.]) # Checks for host and target systems. AC_CANONICAL_HOST AC_CANONICAL_TARGET -# Program name transformations -AC_ARG_PROGRAM +AM_INIT_AUTOMAKE() +AC_PREREQ(2.60) +AC_CONFIG_SRCDIR([grub-core/include/grub/dl.h]) +AC_CONFIG_HEADER([config.h]) -# Optimization flag. Allow user to override. -if test "x$TARGET_CFLAGS" = x; then - TARGET_CFLAGS="$TARGET_CFLAGS -Os" -fi - -case "$target_cpu" in - i[[3456]]86) target_cpu=i386 ;; - amd64) target_cpu=x86_64 ;; - sparc) target_cpu=sparc64 ;; - mipsel|mips64el) - target_cpu=mips; - TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPSEL=1"; - CFLAGS="$CFLAGS -DGRUB_CPU_MIPSEL=1"; - ;; - mips|mips64) - target_cpu=mips; - TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPS=1"; - CFLAGS="$CFLAGS -DGRUB_CPU_MIPS=1"; - ;; -esac - -# Specify the platform (such as firmware). -AC_ARG_WITH([platform], - AS_HELP_STRING([--with-platform=PLATFORM], - [select the host platform [[guessed]]])) - -# Guess the platform if not specified. -if test "x$with_platform" = x; then - case "$target_cpu"-"$target_vendor" in - i386-apple) platform=efi ;; - i386-*) platform=pc ;; - x86_64-apple) platform=efi ;; - x86_64-*) platform=pc ;; - powerpc-*) platform=ieee1275 ;; - powerpc64-*) platform=ieee1275 ;; - sparc64-*) platform=ieee1275 ;; - mips-*) platform=yeeloong ;; - *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;; - esac -else - platform="$with_platform" -fi - -# Adjust CPU unless target was explicitly specified. -if test -z "$target_alias"; then - case "$target_cpu"-"$platform" in - x86_64-efi) ;; - x86_64-emu) ;; - x86_64-*) target_cpu=i386 ;; - powerpc64-ieee1275) target_cpu=powerpc ;; - esac -fi - -# Check if the platform is supported, make final adjustments. -case "$target_cpu"-"$platform" in - i386-efi) ;; - x86_64-efi) ;; - i386-pc) ;; - i386-multiboot) ;; - i386-coreboot) ;; - i386-linuxbios) platform=coreboot ;; - i386-ieee1275) ;; - i386-qemu) ;; - powerpc-ieee1275) ;; - sparc64-ieee1275) ;; - mips-qemu-mips) ;; - mips-yeeloong) ;; - *-emu) ;; - *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;; -esac - -case "$target_cpu" in - i386 | powerpc) target_m32=1 ;; - x86_64 | sparc64) target_m64=1 ;; -esac - -case "$host_os" in - mingw32*) host_os=cygwin ;; -esac - -# This normalizes the names, and creates a new variable ("host_kernel") -# while at it, since the mapping is not always 1:1 (e.g. different OSes -# using the same kernel type). -case "$host_os" in - gnu*) host_kernel=hurd ;; - linux*) host_kernel=linux ;; - freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;; - netbsd*) host_kernel=netbsd ;; - cygwin) host_kernel=windows ;; -esac - -case "$platform" in - coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; - multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; - efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;; - ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; - qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;; - pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; - emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;; - yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; - qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; -esac -case "$target_cpu" in - mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;; - sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;; -esac - -CFLAGS="$CFLAGS $machine_CFLAGS" -TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CFLAGS" -TARGET_CFLAGS="$TARGET_CFLAGS $machine_CFLAGS" - -AC_SUBST(host_cpu) -AC_SUBST(host_os) -AC_SUBST(host_kernel) - -AC_SUBST(target_cpu) -AC_SUBST(platform) - -# -# Checks for build programs. -# - -# Although cmp is listed in the GNU Coding Standards as a command which -# can used directly, OpenBSD lacks cmp in the default installation. -AC_CHECK_PROGS([CMP], [cmp]) -if test "x$CMP" = x; then - AC_MSG_ERROR([cmp is not found]) -fi - -AC_CHECK_PROGS([YACC], [bison]) -if test "x$YACC" = x; then - AC_MSG_ERROR([bison is not found]) -fi - -for file in /usr/src/unifont.bdf /usr/share/fonts/X11/misc/unifont.pcf.gz /usr/share/fonts/unifont/unifont.pcf.gz; do - if test -e $file ; then - AC_SUBST([FONT_SOURCE], [$file]) - break - fi -done - -AC_PROG_INSTALL -AC_PROG_AWK -AC_PROG_LEX -AC_PROG_MAKE_SET -AC_PROG_MKDIR_P - -if test "x$LEX" = x; then - AC_MSG_ERROR([flex is not found]) -else - version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'` - if test -n "$version" -a "$version" -ge 20535; then - : - else - AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above]) - fi -fi - -# These are not a "must". -AC_PATH_PROG(RUBY, ruby) -AC_PATH_PROG(MAKEINFO, makeinfo) - -# -# Checks for host programs. -# - -AC_PROG_CC -# Must be GCC. -test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required]) - -AC_GNU_SOURCE -AM_GNU_GETTEXT([external]) -AC_SYS_LARGEFILE - -# Identify characteristics of the host architecture. -AC_C_BIGENDIAN -AC_CHECK_SIZEOF(void *) -AC_CHECK_SIZEOF(long) - -grub_apple_cc -if test x$grub_cv_apple_cc = xyes ; then - CFLAGS="$CFLAGS -DAPPLE_CC=1 -fnested-functions" - ASFLAGS="$ASFLAGS -DAPPLE_CC=1" -fi - -if test "x$cross_compiling" = xyes; then - AC_MSG_WARN([cannot generate manual pages while cross compiling]) -else - AC_PATH_PROG(HELP2MAN, help2man) -fi - -# Check for functions. -AC_CHECK_FUNCS(posix_memalign memalign asprintf vasprintf) - -# For grub-mkisofs -AC_HEADER_MAJOR -AC_HEADER_DIRENT -AC_CHECK_FUNCS(memmove sbrk strdup lstat getuid getgid) -AC_CHECK_HEADERS(sys/mkdev.h sys/sysmacros.h malloc.h termios.h sys/types.h) -AC_CHECK_HEADERS(unistd.h string.h strings.h sys/stat.h sys/fcntl.h limits.h) - -# For opendisk() and getrawpartition() on NetBSD. -# Used in util/deviceiter.c and in util/hostdisk.c. -AC_CHECK_HEADER([util.h], [ - AC_CHECK_LIB([util], [opendisk], [ - LIBUTIL="-lutil" - AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used]) - ]) - AC_CHECK_LIB([util], [getrawpartition], [ - LIBUTIL="-lutil" - AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used]) - ]) -]) -AC_SUBST([LIBUTIL]) - -# -# Check for target programs. -# - -# Find tools for the target. -if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then - tmp_ac_tool_prefix="$ac_tool_prefix" - ac_tool_prefix=$target_alias- - - AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc], - [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])]) - AC_CHECK_TOOL(OBJCOPY, objcopy) - AC_CHECK_TOOL(STRIP, strip) - AC_CHECK_TOOL(NM, nm) - - ac_tool_prefix="$tmp_ac_tool_prefix" -else - if test "x$TARGET_CC" = x; then - TARGET_CC=$CC - fi - AC_CHECK_TOOL(OBJCOPY, objcopy) - AC_CHECK_TOOL(STRIP, strip) - AC_CHECK_TOOL(NM, nm) -fi -AC_SUBST(TARGET_CC) - - -# Test the C compiler for the target environment. -tmp_CC="$CC" -tmp_CFLAGS="$CFLAGS" -tmp_LDFLAGS="$LDFLAGS" -tmp_CPPFLAGS="$CPPFLAGS" -tmp_LIBS="$LIBS" -CC="$TARGET_CC" -CFLAGS="$TARGET_CFLAGS" -CPPFLAGS="$TARGET_CPPFLAGS" -LDFLAGS="$TARGET_LDFLAGS" -LIBS="" - -# debug flags. -TARGET_CFLAGS="$TARGET_CFLAGS -Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \ - -Wundef -Wstrict-prototypes -g" - -# Force no alignment to save space on i386. -if test "x$target_cpu" = xi386; then - AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [ - CFLAGS="$CFLAGS -falign-loops=1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_falign_loop=yes], - [grub_cv_cc_falign_loop=no]) - ]) - - if test "x$grub_cv_cc_falign_loop" = xyes; then - TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" - else - TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" - fi - - # Some toolchains enable these features by default, but they need - # registers that aren't set up properly in GRUB. - TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow" -fi - -# By default, GCC 4.4 generates .eh_frame sections containing unwind -# information in some cases where it previously did not. GRUB doesn't need -# these and they just use up vital space. Restore the old compiler -# behaviour. -AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [ - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_fno_dwarf2_cfi_asm=yes], - [grub_cv_cc_fno_dwarf2_cfi_asm=no]) - CFLAGS="$SAVE_CFLAGS" -]) - -if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then - TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" -fi - -grub_apple_target_cc -if test x$grub_cv_apple_target_cc = xyes ; then - TARGET_CFLAGS="$TARGET_CFLAGS -DAPPLE_CC=1 -fnested-functions" - CFLAGS="$CFLAGS -DAPPLE_CC=1 -fnested-functions" - TARGET_ASFLAGS="$TARGET_ASFLAGS -DAPPLE_CC=1" - TARGET_APPLE_CC=1 - AC_CHECK_PROG([OBJCONV], [objconv], [objconv], []) - if test "x$OBJCONV" = x ; then - AC_CHECK_PROG([OBJCONV], [objconv], [./objconv], [], [.]) - fi - if test "x$OBJCONV" = x ; then - AC_MSG_ERROR([objconv not found which is required when building with apple compiler]) - fi - TARGET_IMG_LDSCRIPT= - TARGET_IMG_CFLAGS="-static" - TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20 -Wl,-image_base,' - TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20 -Wl,-image_base,' -else - TARGET_APPLE_CC=0 -# Use linker script if present, otherwise use builtin -N script. -if test -f "${srcdir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then - TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" - TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT} -Wl,-Ttext," - TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc -Wl,-Ttext," -else - TARGET_IMG_LDSCRIPT= - TARGET_IMG_LDFLAGS='-Wl,-N -Wl,-Ttext,' - TARGET_IMG_LDFLAGS_AC='-Wl,-N -Wl,-Ttext,' -fi -TARGET_IMG_CFLAGS= -fi - -AC_SUBST(TARGET_IMG_LDSCRIPT) -AC_SUBST(TARGET_IMG_LDFLAGS) -AC_SUBST(TARGET_IMG_CFLAGS) - -# For platforms where ELF is not the default link format. -AC_MSG_CHECKING([for command to convert module to ELF format]) -case "${host_os}" in - cygwin) TARGET_OBJ2ELF='grub-pe2elf'; -# FIXME: put proper test here - AC_DEFINE([NEED_REGISTER_FRAME_INFO], 1, - [Define to 1 if GCC generates calls to __register_frame_info()]) - ;; - *) ;; -esac -AC_SUBST(TARGET_OBJ2ELF) -AC_MSG_RESULT([$TARGET_OBJ2ELF]) - - -if test "x$target_m32" = x1; then - # Force 32-bit mode. - TARGET_CFLAGS="$TARGET_CFLAGS -m32" - TARGET_ASFLAGS="$TARGET_CFLAGS -m32" - TARGET_LDFLAGS="$TARGET_LDFLAGS -m32" - TARGET_MODULE_FORMAT="elf32" -fi - -if test "x$target_m64" = x1; then - # Force 64-bit mode. - TARGET_CFLAGS="$TARGET_CFLAGS -m64" - TARGET_ASFLAGS="$TARGET_ASFLAGS -m64" - TARGET_LDFLAGS="$TARGET_LDFLAGS -m64" - TARGET_MODULE_FORMAT="elf64" -fi - -if test "$target_cpu"-"$platform" = x86_64-efi; then - # Use large model to support 4G memory - AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [ - SAVED_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -m64 -mcmodel=large" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_mcmodel=yes], - [grub_cv_cc_mcmodel=no]) - ]) - if test "x$grub_cv_cc_mcmodel" = xno; then - AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.]) - else - TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" - fi - - # EFI writes to stack below %rsp, we must not use the red zone - AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [ - CFLAGS="$CFLAGS -m64 -mno-red-zone" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_no_red_zone=yes], - [grub_cv_cc_no_red_zone=no]) - ]) - if test "x$grub_cv_cc_no_red_zone" = xno; then - AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc]) - fi - - TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone" -fi - -# -# Compiler features. -# - -# Need __enable_execute_stack() for nested function trampolines? -grub_CHECK_ENABLE_EXECUTE_STACK - -# Position independent executable. -grub_CHECK_PIE -[# Need that, because some distributions ship compilers that include -# `-fPIE' in the default specs. -if [ x"$pie_possible" = xyes ]; then - TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE" -fi] - -# Smashing stack protector. -grub_CHECK_STACK_PROTECTOR -# Need that, because some distributions ship compilers that include -# `-fstack-protector' in the default specs. -if test "x$ssp_possible" = xyes; then - TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" -fi -grub_CHECK_STACK_ARG_PROBE -# Cygwin's GCC uses alloca() to probe the stackframe on static -# stack allocations above some threshold. -if test x"$sap_possible" = xyes; then - TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" -fi - -AC_ARG_ENABLE([werror], - [AS_HELP_STRING([--disable-werror], - [do not use -Werror when building GRUB])]) -if test x"$enable_werror" != xno ; then - TARGET_CFLAGS="$TARGET_CFLAGS -Werror" -fi - -AC_SUBST(TARGET_CFLAGS) -AC_SUBST(TARGET_MODULE_FORMAT) -AC_SUBST(OBJCONV) -AC_SUBST(TARGET_APPLE_CC) -AC_SUBST(TARGET_ASFLAGS) -AC_SUBST(TARGET_CPPFLAGS) -AC_SUBST(TARGET_LDFLAGS) - -# Set them to their new values for the tests below. -CC="$TARGET_CC" -if test "x$TARGET_APPLE_CC" = x1 ; then -CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error" -else -CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error" -fi -CPPFLAGS="$TARGET_CPPFLAGS" -LDFLAGS="$TARGET_LDFLAGS" -LIBS=-lgcc - -grub_ASM_USCORE -if test x$grub_cv_asm_uscore = xyes; then -CFLAGS="$CFLAGS -Wl,--defsym,_abort=_main" -else -CFLAGS="$CFLAGS -Wl,--defsym,abort=main" -fi - -# Check for libgcc symbols -AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __trampoline_setup __ucmpdi2 _restgpr_14_x) - -if test "x$TARGET_APPLE_CC" = x1 ; then -CFLAGS="$TARGET_CFLAGS -nostdlib" -else -CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100" -fi -LIBS="" - -# Defined in aclocal.m4. -grub_PROG_TARGET_CC -if test "x$TARGET_APPLE_CC" != x1 ; then -grub_PROG_OBJCOPY_ABSOLUTE -fi -grub_PROG_LD_BUILD_ID_NONE -if test "x$target_cpu" = xi386; then - if test "$platform" != emu && test "x$TARGET_APPLE_CC" != x1 ; then - if test ! -z "$TARGET_IMG_LDSCRIPT"; then - # Check symbols provided by linker script. - CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC}8000 -Wl,--defsym,___main=0x8100" - fi - grub_CHECK_BSS_START_SYMBOL - grub_CHECK_END_SYMBOL - fi - CFLAGS="$TARGET_CFLAGS" - grub_I386_ASM_PREFIX_REQUIREMENT - grub_I386_ASM_ADDR32 - grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK -else - AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug]) -fi - -AH_BOTTOM([#if defined(__i386__) && !defined(GRUB_UTIL) -#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1))) -#else -#define NESTED_FUNC_ATTR -#endif]) - -AC_ARG_ENABLE([efiemu], - [AS_HELP_STRING([--enable-efiemu], - [build and install the efiemu runtimes (default=guessed)])]) -if test x"$enable_efiemu" = xno ; then - efiemu_excuse="explicitly disabled" -fi -if test x"$efiemu_excuse" = x ; then - AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [ - CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_efiemu=yes], - [grub_cv_cc_efiemu=no]) - ]) - if test x$grub_cv_cc_efiemu = xno; then - efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" - fi -fi -if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then - AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled]) -fi -if test x"$efiemu_excuse" = x ; then -enable_efiemu=yes -else -enable_efiemu=no -fi -AC_SUBST([enable_efiemu]) - -if test "$platform" != emu; then -AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [ - SAVED_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -int va_arg_func (int fixed, va_list args);]], [[]])], - [grub_cv_cc_isystem=yes], - [grub_cv_cc_isystem=no]) - CPPFLAGS="$SAVED_CPPFLAGS" -]) - -if test x"$grub_cv_cc_isystem" = xyes ; then - TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" -fi -fi - -# Restore the flags. -CC="$tmp_CC" -CFLAGS="$tmp_CFLAGS" -CPPFLAGS="$tmp_CPPFLAGS" -LDFLAGS="$tmp_LDFLAGS" -LIBS="$tmp_LIBS" - -# -# Check for options. -# - -# Memory manager debugging. -AC_ARG_ENABLE([mm-debug], - AS_HELP_STRING([--enable-mm-debug], - [include memory manager debugging]), - [AC_DEFINE([MM_DEBUG], [1], - [Define to 1 if you enable memory manager debugging.])]) - -AC_ARG_ENABLE([grub-emu-usb], - [AS_HELP_STRING([--enable-grub-emu-usb], - [build and install the `grub-emu' debugging utility with USB support (default=guessed)])]) - -AC_ARG_ENABLE([grub-emu-sdl], - [AS_HELP_STRING([--enable-grub-emu-sdl], - [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])]) - -AC_ARG_ENABLE([grub-emu-pci], - [AS_HELP_STRING([--enable-grub-emu-pci], - [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])]) - -AC_ARG_ENABLE([grub-emu-modules], - [AS_HELP_STRING([--enable-grub-emu-modules], - [Support module loading in `grub-emu' debugging utility (default=no)])]) - -if test "$platform" = emu; then - missing_ncurses= -[# Check for curses libraries.] - AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"], - [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"], - [missing_ncurses=[true]])]) - AC_SUBST([LIBCURSES]) -[if [ x"$missing_ncurses" = x ]; then ] - [# Check for headers.] - AC_CHECK_HEADERS([ncurses/curses.h], [], - [AC_CHECK_HEADERS([ncurses.h], [], - [AC_CHECK_HEADERS([curses.h], [], - [missing_ncurses=[true]])])]) -[fi] -if test x"$missing_ncurses" = xtrue ; then - AC_MSG_ERROR([grub-emu can't be compiled without ncurses]) -fi - -if test x"$enable_grub_emu_modules" = xyes ; then - TARGET_NO_MODULES=no -else - TARGET_NO_MODULES=yes -fi -AC_SUBST(TARGET_NO_MODULES) - -if test "$TARGET_NO_MODULES" = yes ; then - # Do not convert modules, otherwise linkage may fail (Cygwin only). - # FIXME: Should be checked above before TARGET_OBJ2ELF is set first. - TARGET_OBJ2ELF= -fi - -if test x"$enable_grub_emu_usb" = xno ; then - grub_emu_usb_excuse="explicitly disabled" -fi - -if test x"$enable_grub_emu_pci" = xyes ; then - grub_emu_usb_excuse="conflicts with PCI support" -fi - -[if [ x"$grub_emu_usb_excuse" = x ]; then - # Check for libusb libraries.] -AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"], - [grub_emu_usb_excuse=["need libusb library"]]) - AC_SUBST([LIBUSB]) -[fi] -[if [ x"$grub_emu_usb_excuse" = x ]; then - # Check for headers.] - AC_CHECK_HEADERS([usb.h], [], - [grub_emu_usb_excuse=["need libusb headers"]]) -[fi] -if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then - AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled]) -fi -if test x"$grub_emu_usb_excuse" = x ; then -enable_grub_emu_usb=yes -else -enable_grub_emu_usb=no -fi - -if test x"$enable_grub_emu_sdl" = xno ; then - grub_emu_sdl_excuse="explicitely disabled" -fi -[if [ x"$grub_emu_sdl_excuse" = x ]; then - # Check for libSDL libraries.] -AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"], - [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]]) - AC_SUBST([LIBSDL]) -[fi] - -[if [ x"$grub_emu_sdl_excuse" = x ]; then - # Check for headers.] - AC_CHECK_HEADERS([SDL/SDL.h], [], - [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]]) -[fi] - -if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then - AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled]) -fi -if test x"$grub_emu_sdl_excuse" = x ; then -enable_grub_emu_sdl=yes -else -enable_grub_emu_sdl=no -fi - -if test x"$enable_grub_emu_pci" != xyes ; then - grub_emu_pci_excuse="not enabled" -fi - -if test x"$enable_grub_emu_usb" = xyes ; then - grub_emu_pci_excuse="conflicts with USB support" -fi - -[if [ x"$grub_emu_pci_excuse" = x ]; then - # Check for libpci libraries.] - AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"], - [grub_emu_pci_excuse=["need libpciaccess library"]]) - AC_SUBST([LIBPCIACCESS]) -[fi] -[if [ x"$grub_emu_pci_excuse" = x ]; then - # Check for headers.] - AC_CHECK_HEADERS([pci/pci.h], [], - [grub_emu_pci_excuse=["need libpciaccess headers"]]) -[fi] - -if test x"$grub_emu_pci_excuse" = x ; then -enable_grub_emu_pci=yes -else - -enable_grub_emu_pci=no -fi - -AC_SUBST([enable_grub_emu_sdl]) -AC_SUBST([enable_grub_emu_usb]) -AC_SUBST([enable_grub_emu_pci]) -fi - -AC_ARG_ENABLE([grub-fstest], - [AS_HELP_STRING([--enable-grub-fstest], - [build and install the `grub-fstest' debugging utility (default=guessed)])]) -if test x"$enable_grub_fstest" = xno ; then - grub_fstest_excuse="explicitly disabled" -fi -if test x"$grub_fstest_excuse" = x ; then -enable_grub_fstest=yes -else -enable_grub_fstest=no -fi -AC_SUBST([enable_grub_fstest]) - -AC_ARG_ENABLE([grub-mkfont], - [AS_HELP_STRING([--enable-grub-mkfont], - [build and install the `grub-mkfont' utility (default=guessed)])]) -if test x"$enable_grub_mkfont" = xno ; then - grub_mkfont_excuse="explicitly disabled" -fi - -if test x"$grub_mkfont_excuse" = x ; then - # Check for freetype libraries. - AC_CHECK_PROGS([FREETYPE], [freetype-config]) - if test "x$FREETYPE" = x ; then - grub_mkfont_excuse=["need freetype2 library"] - fi - freetype_cflags=`freetype-config --cflags` - freetype_libs=`freetype-config --libs` -fi - -if test x"$grub_mkfont_excuse" = x ; then - # Check for freetype libraries. - SAVED_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $freetype_cflags" - AC_CHECK_HEADERS([ft2build.h], [], - [grub_mkfont_excuse=["need freetype2 headers"]]) - CPPFLAGS="$SAVED_CPPFLAGS" -fi - -if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then - AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled]) -fi -if test x"$grub_mkfont_excuse" = x ; then -enable_grub_mkfont=yes -else -enable_grub_mkfont=no -fi -AC_SUBST([enable_grub_mkfont]) -AC_SUBST([freetype_cflags]) -AC_SUBST([freetype_libs]) - -AC_SUBST(ASFLAGS) +m4_include([configure.common]) # Output files. grub_CHECK_LINK_DIR if test x"$link_dir" = xyes ; then - AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu]) + AC_CONFIG_LINKS([include/grub/cpu:grub-core/include/grub/$target_cpu]) if test "$platform" != emu ; then - AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform]) + AC_CONFIG_LINKS([include/grub/machine:grub-core/include/grub/$target_cpu/$platform]) fi else mkdir -p include/grub 2>/dev/null rm -rf include/grub/cpu - cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null + cp -rp $srcdir/grub-core/include/grub/$target_cpu include/grub/cpu 2>/dev/null if test "$platform" != emu ; then rm -rf include/grub/machine - cp -rp $srcdir/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null + cp -rp $srcdir/grub-core/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null fi fi -AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh]) + +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([po/Makefile]) +AC_CONFIG_FILES([docs/Makefile]) AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h]) + +AC_CONFIG_SUBDIRS([grub-core]) AC_OUTPUT [ echo "*******************************************************" @@ -820,11 +88,6 @@ echo PCI support for grub-emu: Yes else echo PCI support for grub-emu: No "($grub_emu_pci_excuse)" fi -if [ x"$TARGET_NO_MODULES" = xno ]; then -echo Module support for grub-emu: Yes -else -echo Module support for grub-emu: No -fi fi if [ x"$enable_mm_debug" = xyes ]; then echo With memory debugging: Yes diff --git a/configure.common b/configure.common new file mode 100644 index 000000000..31bac7742 --- /dev/null +++ b/configure.common @@ -0,0 +1,804 @@ +# -*- autoconf -*- + +# Process this file with autoconf to produce a configure script. + +# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# This configure.ac is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# This file is shared between grub-core and util configure scripts. + +# Program name transformations +AC_ARG_PROGRAM + +# Optimization flag. Allow user to override. +if test "x$CFLAGS" = x; then + CFLAGS="$CFLAGS -Os" +fi + +# Default HOST_CPPFLAGS +CPPFLAGS='' +HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W" +HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/include" +HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include" +HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/gnulib" +HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1" +HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_LIBDIR=\\\"\$(pkglibdir)\\\"" +HOST_CPPFLAGS="$HOST_CPPFLAGS -DLOCALEDIR=\\\"\$(localedir)\\\"" + +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include" + +case "$target_cpu" in + i[[3456]]86) target_cpu=i386 ;; + amd64) target_cpu=x86_64 ;; + sparc) target_cpu=sparc64 ;; + mipsel|mips64el) + target_cpu=mips; + cpu_CPPFLAGS="-DGRUB_CPU_MIPSEL=1"; + ;; + mips|mips64) + target_cpu=mips; + cpu_CPPFLAGS="-DGRUB_CPU_MIPS=1"; + ;; +esac + +# Specify the platform (such as firmware). +AC_ARG_WITH([platform], + AS_HELP_STRING([--with-platform=PLATFORM], + [select the host platform [[guessed]]])) + +# Guess the platform if not specified. +if test "x$with_platform" = x; then + case "$target_cpu"-"$target_vendor" in + i386-apple) platform=efi ;; + i386-*) platform=pc ;; + x86_64-apple) platform=efi ;; + x86_64-*) platform=pc ;; + powerpc-*) platform=ieee1275 ;; + powerpc64-*) platform=ieee1275 ;; + sparc64-*) platform=ieee1275 ;; + mips-*) platform=yeeloong ;; + *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;; + esac +else + platform="$with_platform" +fi + +# Adjust CPU unless target was explicitly specified. +if test -z "$target_alias"; then + case "$target_cpu"-"$platform" in + x86_64-efi) ;; + x86_64-emu) ;; + x86_64-*) target_cpu=i386 ;; + powerpc64-ieee1275) target_cpu=powerpc ;; + esac +fi + +# Check if the platform is supported, make final adjustments. +case "$target_cpu"-"$platform" in + i386-efi) ;; + x86_64-efi) ;; + i386-pc) ;; + i386-multiboot) ;; + i386-coreboot) ;; + i386-linuxbios) platform=coreboot ;; + i386-ieee1275) ;; + i386-qemu) ;; + powerpc-ieee1275) ;; + sparc64-ieee1275) ;; + mips-qemu-mips) ;; + mips-yeeloong) ;; + *-emu) ;; + *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;; +esac + +case "$target_cpu" in + i386 | powerpc) target_m32=1 ;; + x86_64 | sparc64) target_m64=1 ;; +esac + +case "$host_os" in + mingw32*) host_os=cygwin ;; +esac + +# This normalizes the names, and creates a new variable ("host_kernel") +# while at it, since the mapping is not always 1:1 (e.g. different OSes +# using the same kernel type). +case "$host_os" in + gnu*) host_kernel=hurd ;; + linux*) host_kernel=linux ;; + freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;; + netbsd*) host_kernel=netbsd ;; + cygwin) host_kernel=windows ;; +esac + +case "$platform" in + coreboot) machine_CPPFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CPPFLAGS="-DGRUB_MACHINE_EFI=1" ;; + ieee1275) machine_CPPFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; + qemu) machine_CPPFLAGS="-DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CPPFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CPPFLAGS="-DGRUB_MACHINE_EMU=1" ;; + yeeloong) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + qemu-mips) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; +esac +case "$target_cpu" in + i386) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_I386";; + x86_64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_X86_64";; + powerpc) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_POWERPC";; + mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;; # cpu_CPPFLAGS handled above + sparc64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_SPARC64"; + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;; +esac + +HOST_CPPFLAGS="$HOST_CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" + +AC_SUBST(host_cpu) +AC_SUBST(host_os) +AC_SUBST(host_kernel) + +AC_SUBST(target_cpu) +AC_SUBST(platform) + +# +# Checks for build programs. +# + +# Although cmp is listed in the GNU Coding Standards as a command which +# can used directly, OpenBSD lacks cmp in the default installation. +AC_CHECK_PROGS([CMP], [cmp]) +if test "x$CMP" = x; then + AC_MSG_ERROR([cmp is not found]) +fi + +for file in /usr/src/unifont.bdf /usr/share/fonts/X11/misc/unifont.pcf.gz /usr/share/fonts/unifont/unifont.pcf.gz; do + if test -e $file ; then + FONT_SOURCE=$file + HOST_CPPFLAGS="$HOST_CPPFLAGS -DUSE_ASCII_FAILBACK=1" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DUSE_ASCII_FAILBACK=1" + break + fi +done + +AC_PROG_RANLIB +AC_PROG_INSTALL +AC_PROG_AWK +AC_PROG_LEX +AC_PROG_YACC +AC_PROG_MAKE_SET +AC_PROG_MKDIR_P + +if test "x$LEX" = x; then + AC_MSG_ERROR([flex is not found]) +else + version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'` + if test -n "$version" -a "$version" -ge 20535; then + : + else + AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above]) + fi +fi + +# These are not a "must". +AC_PATH_PROG(MAKEINFO, makeinfo) + +# +# Checks for host programs. +# + +AC_PROG_CC +AM_PROG_CC_C_O +AM_PROG_AS + +# Must be GCC. +test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required]) + +AC_GNU_SOURCE +AM_GNU_GETTEXT([external]) +AC_SYS_LARGEFILE + +# Identify characteristics of the host architecture. +AC_C_BIGENDIAN +AC_CHECK_SIZEOF(void *) +AC_CHECK_SIZEOF(long) + +grub_apple_cc +if test x$grub_cv_apple_cc = xyes ; then + HOST_CPPFLAGS="$HOST_CPPFLAGS -DAPPLE_CC=1" + HOST_CFLAGS="$HOST_CFLAGS -fnested-functions" +fi + +if test "x$cross_compiling" = xyes; then + AC_MSG_WARN([cannot generate manual pages while cross compiling]) +else + AC_PATH_PROG(HELP2MAN, help2man) +fi + +# Check for functions. +AC_CHECK_FUNCS(posix_memalign memalign asprintf vasprintf) + +# For grub-mkisofs +AC_HEADER_MAJOR +AC_HEADER_DIRENT +AC_CHECK_FUNCS(memmove sbrk strdup lstat getuid getgid) +AC_CHECK_HEADERS(sys/mkdev.h sys/sysmacros.h malloc.h termios.h sys/types.h) +AC_CHECK_HEADERS(unistd.h string.h strings.h sys/stat.h sys/fcntl.h limits.h) + +# For opendisk() and getrawpartition() on NetBSD. +# Used in util/deviceiter.c and in util/hostdisk.c. +AC_CHECK_HEADER([util.h], [ + AC_CHECK_LIB([util], [opendisk], [ + LIBUTIL="-lutil" + AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used]) + ]) + AC_CHECK_LIB([util], [getrawpartition], [ + LIBUTIL="-lutil" + AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used]) + ]) +]) +AC_SUBST([LIBUTIL]) + +# +# Check for host and build compilers. +# +HOST_CC=$CC +AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc], + [AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])]) + +# +# Check for target programs. +# + +# Find tools for the target. +if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then + tmp_ac_tool_prefix="$ac_tool_prefix" + ac_tool_prefix=$target_alias- + + AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc], + [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])]) + AC_CHECK_TOOL(OBJCOPY, objcopy) + AC_CHECK_TOOL(STRIP, strip) + AC_CHECK_TOOL(NM, nm) + + ac_tool_prefix="$tmp_ac_tool_prefix" +else + if test "x$TARGET_CC" = x; then + TARGET_CC=$CC + fi + AC_CHECK_TOOL(OBJCOPY, objcopy) + AC_CHECK_TOOL(STRIP, strip) + AC_CHECK_TOOL(NM, nm) +fi +AC_SUBST(HOST_CC) +AC_SUBST(BUILD_CC) +AC_SUBST(TARGET_CC) + +# Test the C compiler for the target environment. +tmp_CC="$CC" +tmp_CFLAGS="$CFLAGS" +tmp_LDFLAGS="$LDFLAGS" +tmp_CPPFLAGS="$CPPFLAGS" +tmp_LIBS="$LIBS" +CC="$TARGET_CC" +CFLAGS="$TARGET_CFLAGS" +CPPFLAGS="$TARGET_CPPFLAGS" +LDFLAGS="$TARGET_LDFLAGS" +LIBS="" + +# debug flags. +TARGET_CFLAGS="$TARGET_CFLAGS -Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes -Wundef -Wstrict-prototypes -g" +TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g" + +# Force no alignment to save space on i386. +if test "x$target_cpu" = xi386; then + AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [ + CFLAGS="$CFLAGS -falign-loops=1" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_falign_loop=yes], + [grub_cv_cc_falign_loop=no]) + ]) + + if test "x$grub_cv_cc_falign_loop" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" + else + TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" + fi + + # Some toolchains enable these features by default, but they need + # registers that aren't set up properly in GRUB. + TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow" +fi + +# By default, GCC 4.4 generates .eh_frame sections containing unwind +# information in some cases where it previously did not. GRUB doesn't need +# these and they just use up vital space. Restore the old compiler +# behaviour. +AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [ + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_fno_dwarf2_cfi_asm=yes], + [grub_cv_cc_fno_dwarf2_cfi_asm=no]) + CFLAGS="$SAVE_CFLAGS" +]) + +if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" +fi + +grub_apple_target_cc +if test x$grub_cv_apple_target_cc = xyes ; then + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DAPPLE_CC=1" + TARGET_CFLAGS="$TARGET_CFLAGS -fnested-functions" + + CFLAGS="$CFLAGS -DAPPLE_CC=1 -fnested-functions" + TARGET_APPLE_CC=1 + AC_CHECK_PROG([OBJCONV], [objconv], [objconv], []) + if test "x$OBJCONV" = x ; then + AC_CHECK_PROG([OBJCONV], [objconv], [./objconv], [], [.]) + fi + if test "x$OBJCONV" = x ; then + AC_MSG_ERROR([objconv not found which is required when building with apple compiler]) + fi + TARGET_IMG_LDSCRIPT= + TARGET_IMG_CFLAGS="-static" + TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20 -Wl,-image_base,' + TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20 -Wl,-image_base,' +else + TARGET_APPLE_CC=0 +# Use linker script if present, otherwise use builtin -N script. +if test -f "${srcdir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then + TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" + TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT} -Wl,-Ttext," + TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc -Wl,-Ttext," +else + TARGET_IMG_LDSCRIPT= + TARGET_IMG_LDFLAGS='-Wl,-N -Wl,-Ttext,' + TARGET_IMG_LDFLAGS_AC='-Wl,-N -Wl,-Ttext,' +fi +TARGET_IMG_CFLAGS= +fi + +# For platforms where ELF is not the default link format. +AC_MSG_CHECKING([for command to convert module to ELF format]) +case "${host_os}" in + cygwin) TARGET_OBJ2ELF='grub-pe2elf'; +# FIXME: put proper test here + AC_DEFINE([NEED_REGISTER_FRAME_INFO], 1, + [Define to 1 if GCC generates calls to __register_frame_info()]) + ;; + *) ;; +esac +AC_MSG_RESULT([$TARGET_OBJ2ELF]) + +if test "x$target_m32" = x1; then + # Force 32-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m32" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m32" + TARGET_MODULE_FORMAT="elf32" +fi + +if test "x$target_m64" = x1; then + # Force 64-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m64" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m64" + TARGET_MODULE_FORMAT="elf64" +fi + +if test "$target_cpu"-"$platform" = x86_64-efi; then + # Use large model to support 4G memory + AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [ + SAVED_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -m64 -mcmodel=large" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_mcmodel=yes], + [grub_cv_cc_mcmodel=no]) + ]) + if test "x$grub_cv_cc_mcmodel" = xno; then + AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.]) + else + TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" + fi + + # EFI writes to stack below %rsp, we must not use the red zone + AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [ + CFLAGS="$CFLAGS -m64 -mno-red-zone" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_no_red_zone=yes], + [grub_cv_cc_no_red_zone=no]) + ]) + if test "x$grub_cv_cc_no_red_zone" = xno; then + AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc]) + fi + + TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone" +fi + +# +# Compiler features. +# + +# Need __enable_execute_stack() for nested function trampolines? +grub_CHECK_ENABLE_EXECUTE_STACK + +# Position independent executable. +grub_CHECK_PIE +[# Need that, because some distributions ship compilers that include +# `-fPIE' in the default specs. +if [ x"$pie_possible" = xyes ]; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE" +fi] + +# Smashing stack protector. +grub_CHECK_STACK_PROTECTOR +# Need that, because some distributions ship compilers that include +# `-fstack-protector' in the default specs. +if test "x$ssp_possible" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" +fi +grub_CHECK_STACK_ARG_PROBE +# Cygwin's GCC uses alloca() to probe the stackframe on static +# stack allocations above some threshold. +if test x"$sap_possible" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" +fi + +AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--disable-werror], + [do not use -Werror when building GRUB])]) +if test x"$enable_werror" != xno ; then + TARGET_CFLAGS="$TARGET_CFLAGS -Werror" +fi + +AC_SUBST(TARGET_MODULE_FORMAT) +AC_SUBST(OBJCONV) +AC_SUBST(TARGET_APPLE_CC) + +AC_SUBST(TARGET_CFLAGS) +AC_SUBST(TARGET_LDFLAGS) +AC_SUBST(TARGET_CPPFLAGS) +AC_SUBST(TARGET_CCASFLAGS) + +AC_SUBST(HOST_CFLAGS) +AC_SUBST(HOST_LDFLAGS) +AC_SUBST(HOST_CPPFLAGS) +AC_SUBST(HOST_CCASFLAGS) + +# Set them to their new values for the tests below. +CC="$TARGET_CC" +if test "x$TARGET_APPLE_CC" = x1 ; then +CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error" +else +CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error" +fi +CPPFLAGS="$TARGET_CPPFLAGS" +LDFLAGS="$TARGET_LDFLAGS" +LIBS=-lgcc + +grub_ASM_USCORE +if test x$grub_cv_asm_uscore = xyes; then +CFLAGS="$CFLAGS -Wl,--defsym,_abort=_main" +else +CFLAGS="$CFLAGS -Wl,--defsym,abort=main" +fi + +# Check for libgcc symbols +AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __trampoline_setup __ucmpdi2 _restgpr_14_x) + +if test "x$TARGET_APPLE_CC" = x1 ; then +CFLAGS="$TARGET_CFLAGS -nostdlib" +else +CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100" +fi +LIBS="" + +# Defined in aclocal.m4. +grub_PROG_TARGET_CC +if test "x$TARGET_APPLE_CC" != x1 ; then +grub_PROG_OBJCOPY_ABSOLUTE +fi +grub_PROG_LD_BUILD_ID_NONE +if test "x$target_cpu" = xi386; then + if test "$platform" != emu && test "x$TARGET_APPLE_CC" != x1 ; then + if test ! -z "$TARGET_IMG_LDSCRIPT"; then + # Check symbols provided by linker script. + CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC}8000 -Wl,--defsym,___main=0x8100" + fi + grub_CHECK_BSS_START_SYMBOL + grub_CHECK_END_SYMBOL + fi + CFLAGS="$TARGET_CFLAGS" + grub_I386_ASM_PREFIX_REQUIREMENT + grub_I386_ASM_ADDR32 + grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK +else + AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug]) +fi + +AH_BOTTOM([#if defined(__i386__) && !defined(GRUB_UTIL) +#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1))) +#else +#define NESTED_FUNC_ATTR +#endif]) + +AC_ARG_ENABLE([efiemu], + [AS_HELP_STRING([--enable-efiemu], + [build and install the efiemu runtimes (default=guessed)])]) +if test x"$enable_efiemu" = xno ; then + efiemu_excuse="explicitly disabled" +fi +if test x"$efiemu_excuse" = x ; then + AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [ + CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_efiemu=yes], + [grub_cv_cc_efiemu=no]) + ]) + if test x$grub_cv_cc_efiemu = xno; then + efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" + fi +fi +if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then + AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled]) +fi +if test x"$efiemu_excuse" = x ; then +enable_efiemu=yes +else +enable_efiemu=no +fi +AC_SUBST([enable_efiemu]) + +if test "$platform" != emu; then +AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [ + SAVED_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +int va_arg_func (int fixed, va_list args);]], [[]])], + [grub_cv_cc_isystem=yes], + [grub_cv_cc_isystem=no]) + CPPFLAGS="$SAVED_CPPFLAGS" +]) + +if test x"$grub_cv_cc_isystem" = xyes ; then + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" +fi +fi + +# Restore the flags. +CC="$tmp_CC" +CFLAGS="$tmp_CFLAGS" +CPPFLAGS="$tmp_CPPFLAGS" +LDFLAGS="$tmp_LDFLAGS" +LIBS="$tmp_LIBS" + +# +# Check for options. +# + +# Memory manager debugging. +AC_ARG_ENABLE([mm-debug], + AS_HELP_STRING([--enable-mm-debug], + [include memory manager debugging]), + [AC_DEFINE([MM_DEBUG], [1], + [Define to 1 if you enable memory manager debugging.])]) + +AC_ARG_ENABLE([grub-emu-usb], + [AS_HELP_STRING([--enable-grub-emu-usb], + [build and install the `grub-emu' debugging utility with USB support (default=guessed)])]) + +AC_ARG_ENABLE([grub-emu-sdl], + [AS_HELP_STRING([--enable-grub-emu-sdl], + [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])]) + +AC_ARG_ENABLE([grub-emu-pci], + [AS_HELP_STRING([--enable-grub-emu-pci], + [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])]) + +if test "$platform" = emu; then + missing_ncurses= +[# Check for curses libraries.] + AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"], + [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"], + [missing_ncurses=[true]])]) + AC_SUBST([LIBCURSES]) +[if [ x"$missing_ncurses" = x ]; then ] + [# Check for headers.] + AC_CHECK_HEADERS([ncurses/curses.h], [], + [AC_CHECK_HEADERS([ncurses.h], [], + [AC_CHECK_HEADERS([curses.h], [], + [missing_ncurses=[true]])])]) +[fi] +if test x"$missing_ncurses" = xtrue ; then + AC_MSG_ERROR([grub-emu can't be compiled without ncurses]) +fi + +if test x"$enable_grub_emu_usb" = xno ; then + grub_emu_usb_excuse="explicitly disabled" +fi + +if test x"$enable_grub_emu_pci" = xyes ; then + grub_emu_usb_excuse="conflicts with PCI support" +fi + +[if [ x"$grub_emu_usb_excuse" = x ]; then + # Check for libusb libraries.] +AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"], + [grub_emu_usb_excuse=["need libusb library"]]) + AC_SUBST([LIBUSB]) +[fi] +[if [ x"$grub_emu_usb_excuse" = x ]; then + # Check for headers.] + AC_CHECK_HEADERS([usb.h], [], + [grub_emu_usb_excuse=["need libusb headers"]]) +[fi] +if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then + AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled]) +fi +if test x"$grub_emu_usb_excuse" = x ; then +enable_grub_emu_usb=yes +else +enable_grub_emu_usb=no +fi + +if test x"$enable_grub_emu_sdl" = xno ; then + grub_emu_sdl_excuse="explicitely disabled" +fi +[if [ x"$grub_emu_sdl_excuse" = x ]; then + # Check for libSDL libraries.] +AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"], + [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]]) + AC_SUBST([LIBSDL]) +[fi] + +[if [ x"$grub_emu_sdl_excuse" = x ]; then + # Check for headers.] + AC_CHECK_HEADERS([SDL/SDL.h], [], + [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]]) +[fi] + +if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then + AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled]) +fi +if test x"$grub_emu_sdl_excuse" = x ; then +enable_grub_emu_sdl=yes +else +enable_grub_emu_sdl=no +fi + +if test x"$enable_grub_emu_pci" != xyes ; then + grub_emu_pci_excuse="not enabled" +fi + +if test x"$enable_grub_emu_usb" = xyes ; then + grub_emu_pci_excuse="conflicts with USB support" +fi + +[if [ x"$grub_emu_pci_excuse" = x ]; then + # Check for libpci libraries.] + AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"], + [grub_emu_pci_excuse=["need libpciaccess library"]]) + AC_SUBST([LIBPCIACCESS]) +[fi] +[if [ x"$grub_emu_pci_excuse" = x ]; then + # Check for headers.] + AC_CHECK_HEADERS([pci/pci.h], [], + [grub_emu_pci_excuse=["need libpciaccess headers"]]) +[fi] + +if test x"$grub_emu_pci_excuse" = x ; then +enable_grub_emu_pci=yes +else + +enable_grub_emu_pci=no +fi + +AC_SUBST([enable_grub_emu_sdl]) +AC_SUBST([enable_grub_emu_usb]) +AC_SUBST([enable_grub_emu_pci]) +fi + +AC_ARG_ENABLE([grub-fstest], + [AS_HELP_STRING([--enable-grub-fstest], + [build and install the `grub-fstest' debugging utility (default=guessed)])]) +if test x"$enable_grub_fstest" = xno ; then + grub_fstest_excuse="explicitly disabled" +fi +if test x"$grub_fstest_excuse" = x ; then +enable_grub_fstest=yes +else +enable_grub_fstest=no +fi +AC_SUBST([enable_grub_fstest]) + +AC_ARG_ENABLE([grub-mkfont], + [AS_HELP_STRING([--enable-grub-mkfont], + [build and install the `grub-mkfont' utility (default=guessed)])]) +if test x"$enable_grub_mkfont" = xno ; then + grub_mkfont_excuse="explicitly disabled" +fi + +if test x"$grub_mkfont_excuse" = x ; then + # Check for freetype libraries. + AC_CHECK_PROGS([FREETYPE], [freetype-config]) + if test "x$FREETYPE" = x ; then + grub_mkfont_excuse=["need freetype2 library"] + fi + freetype_cflags=`freetype-config --cflags` + freetype_libs=`freetype-config --libs` +fi + +if test x"$grub_mkfont_excuse" = x ; then + # Check for freetype libraries. + SAVED_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $freetype_cflags" + AC_CHECK_HEADERS([ft2build.h], [], + [grub_mkfont_excuse=["need freetype2 headers"]]) + CPPFLAGS="$SAVED_CPPFLAGS" +fi + +if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then + AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled]) +fi +if test x"$grub_mkfont_excuse" = x ; then +enable_grub_mkfont=yes +else +enable_grub_mkfont=no +fi +AC_SUBST([enable_grub_mkfont]) +AC_SUBST([freetype_cflags]) +AC_SUBST([freetype_libs]) + +AC_SUBST([FONT_SOURCE]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xpc], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xcoreboot], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) +AS_IF([test x$target_cpu = xmips -a x$platform = xyeeloong], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x80200000)]) +AS_IF([test x$target_cpu = xpowerpc -a x$platform = xieee1275], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x200000)]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu], + [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xieee1275], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x10000)]) +AS_IF([test x$TARGET_APPLE_CC = x1], + [AC_SUBST([USE_APPLE_CC_FIXES], yes)]) + +# +# Automake conditionals +# + +AM_CONDITIONAL([COND_emu], [test x$platform = xemu]) +AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc]) +AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi]) +AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot]) +AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu]) +AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi]) +AM_CONDITIONAL([COND_mips_yeeloong], [test x$target_cpu = xmips -a x$platform = xyeeloong]) +AM_CONDITIONAL([COND_mips_qemu_mips], [test x$target_cpu = xmips -a x$platform = xqemu_mips]) +AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) + +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]) +AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes]) +AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes]) +AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) +AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) +AM_CONDITIONAL([COND_GRUB_FSTEST], [test x$enable_grub_fstest = xyes]) +AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) + diff --git a/docs/Makefile.am b/docs/Makefile.am new file mode 100644 index 000000000..ab65a8dd2 --- /dev/null +++ b/docs/Makefile.am @@ -0,0 +1,6 @@ +AUTOMAKE_OPTIONS = subdir-objects +AM_MAKEINFOFLAGS = --force --no-split --no-validate + +info_TEXINFOS = grub.texi +grub_TEXINFOS = fdl.texi + diff --git a/geninit.sh b/geninit.sh index 43d2d1640..f0810120f 100644 --- a/geninit.sh +++ b/geninit.sh @@ -11,11 +11,6 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -lst="$1" -shift - -header=`echo "${lst}" | sed -e "s/\.lst$/.h/g"` - cat <. */ -#include <$header> +#include EOF +for mod in "$@"; do + echo "extern void grub_${mod}_init (void);" + echo "extern void grub_${mod}_fini (void);" +done + cat </dev/null; then - echo $line | sed -e 's/.*GRUB_MOD_INIT *(\([a-zA-Z0-9_]*\)).*/ grub_\1_init ();/' - fi -done < ${lst} +for mod in "$@"; do + echo "grub_${mod}_init ();" +done cat </dev/null; then - echo $line | sed -e 's/.*GRUB_MOD_INIT *(\([a-zA-Z0-9_]*\)).*/ grub_\1_fini ();/' - fi -done < ${lst} +for mod in "$@"; do + echo "grub_${mod}_fini ();" +done cat <. - */ - -EOF - -cat </dev/null 2>&1 && u="_" - -$CC @TARGET_CFLAGS@ -DGRUB_SYMBOL_GENERATOR=1 -E -I. -Iinclude -I"$srcdir/include" $* \ - | grep -v '^#' \ - | sed -n \ - -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/'"$u"'\1 kernel/;p;}' \ - -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/'"$u"'\1 kernel/;p;}' \ - | sort -u diff --git a/genmk.rb b/genmk.rb deleted file mode 100644 index e62dbd4f6..000000000 --- a/genmk.rb +++ /dev/null @@ -1,475 +0,0 @@ -#! /usr/bin/ruby -w -# -# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. -# -# This genmk.rb is free software; the author -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -module Enumerable - def collect_with_index - ret = [] - self.each_with_index do |item, index| - ret.push(yield(item, index)) - end - ret - end -end - -class String - def to_var - self.gsub(/[^a-zA-Z0-9_@]/, '_') - end - - def suffix(str) - self.sub(/\.[^\.]*$/, '') + '.' + str - end - - def to_obj - self.sub(/\.[^\.]*$/, '').to_var + '.o' - end -end - -class Image - def initialize(dir, name) - @dir = dir - @name = name - @rule_count = 0 - end - attr_reader :dir, :name - - def rule(sources) - prefix = @name.to_var - @rule_count += 1 - exe = @name.suffix('exec') - objs = sources.collect do |src| - raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src - prefix + '-' + src.to_obj - end - objs_str = objs.join(' ') - deps = objs.collect {|obj| obj.suffix('d')} - deps_str = deps.join(' ') - -" -clean-image-#{@name}.#{@rule_count}: - rm -f #{@name} #{exe} #{objs_str} - -CLEAN_IMAGE_TARGETS += clean-image-#{@name}.#{@rule_count} - -mostlyclean-image-#{@name}.#{@rule_count}: - rm -f #{deps_str} - -MOSTLYCLEAN_IMAGE_TARGETS += mostlyclean-image-#{@name}.#{@rule_count} - -ifneq ($(TARGET_APPLE_CC),1) -#{@name}: #{exe} - $(OBJCOPY) -O $(#{prefix}_FORMAT) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@ -else -ifneq (#{exe},kernel.exec) -#{@name}: #{exe} ./grub-macho2img - ./grub-macho2img $< $@ -else -#{@name}: #{exe} ./grub-macho2img - ./grub-macho2img --bss $< $@ -endif -endif - -#{exe}: #{objs_str} - $(TARGET_CC) -o $@ $^ $(TARGET_LDFLAGS) $(#{prefix}_LDFLAGS) - -" + objs.collect_with_index do |obj, i| - src = sources[i] - fake_obj = File.basename(src).suffix('o') - dep = deps[i] - flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end - extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end - dir = File.dirname(src) - - "#{obj}: #{src} $(#{src}_DEPENDENCIES) - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -DGRUB_FILE=\\\"#{src}\\\" -MD -c -o $@ $< --include #{dep} - -" - end.join('') - end -end - -# Use PModule instead Module, to avoid name conflicting. -class PModule - def initialize(dir, name) - @dir = dir - @name = name - @rule_count = 0 - end - attr_reader :dir, :name - - def rule(sources) - prefix = @name.to_var - @rule_count += 1 - objs = sources.collect do |src| - raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src - prefix + '-' + src.to_obj - end - objs_str = objs.join(' ') - deps = objs.collect {|obj| obj.suffix('d')} - deps_str = deps.join(' ') - pre_obj = 'pre-' + @name.suffix('o') - mod_src = 'mod-' + @name.suffix('c') - mod_obj = mod_src.suffix('o') - defsym = 'def-' + @name.suffix('lst') - undsym = 'und-' + @name.suffix('lst') - mod_name = File.basename(@name, '.mod') - symbolic_name = mod_name.sub(/\.[^\.]*$/, '') - -" -clean-module-#{@name}.#{@rule_count}: - rm -f #{@name} #{mod_obj} #{mod_src} #{pre_obj} #{objs_str} #{undsym} - -CLEAN_MODULE_TARGETS += clean-module-#{@name}.#{@rule_count} - -clean-module-#{@name}-symbol.#{@rule_count}: - rm -f #{defsym} - -CLEAN_MODULE_TARGETS += clean-module-#{@name}-symbol.#{@rule_count} -DEFSYMFILES += #{defsym} -mostlyclean-module-#{@name}.#{@rule_count}: - rm -f #{deps_str} - -MOSTLYCLEAN_MODULE_TARGETS += mostlyclean-module-#{@name}.#{@rule_count} -UNDSYMFILES += #{undsym} - -ifeq ($(TARGET_NO_MODULES), yes) -#{@name}: #{pre_obj} $(TARGET_OBJ2ELF) - -rm -f $@ - $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} - if test ! -z \"$(TARGET_OBJ2ELF)\"; then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi - if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; fi -else -ifneq ($(TARGET_APPLE_CC),1) -#{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) - -rm -f $@ - $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} #{mod_obj} - if test ! -z \"$(TARGET_OBJ2ELF)\"; then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi - if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; fi -else -#{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) - -rm -f $@ - -rm -f $@.bin - $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@.bin #{pre_obj} #{mod_obj} - $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -ew2030 -ew2050 -nu -nd $@.bin $@ - -rm -f $@.bin -endif -endif - -#{pre_obj}: $(#{prefix}_DEPENDENCIES) #{objs_str} - -rm -f $@ - $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{objs_str} - -#{mod_obj}: #{mod_src} - $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(#{prefix}_CFLAGS) -DGRUB_FILE=\\\"#{mod_src}\\\" -c -o $@ $< - -#{mod_src}: $(builddir)/moddep.lst $(srcdir)/genmodsrc.sh - sh $(srcdir)/genmodsrc.sh '#{mod_name}' $< > $@ || (rm -f $@; exit 1) - -ifneq ($(TARGET_APPLE_CC),1) -#{defsym}: #{pre_obj} - $(NM) -g --defined-only -P -p $< | sed 's/^\\([^ ]*\\).*/\\1 #{mod_name}/' > $@ -else -#{defsym}: #{pre_obj} - $(NM) -g -P -p $< | grep -E '^[a-zA-Z0-9_]* [TDS]' | sed 's/^\\([^ ]*\\).*/\\1 #{mod_name}/' > $@ -endif - -#{undsym}: #{pre_obj} - echo '#{mod_name}' > $@ - $(NM) -u -P -p $< | cut -f1 -d' ' >> $@ - -" + objs.collect_with_index do |obj, i| - src = sources[i] - fake_obj = File.basename(src).suffix('o') - extra_target = obj.sub(/\.[^\.]*$/, '') + '-extra' - command = 'cmd-' + obj.suffix('lst') - fs = 'fs-' + obj.suffix('lst') - partmap = 'partmap-' + obj.suffix('lst') - handler = 'handler-' + obj.suffix('lst') - terminal = 'terminal-' + obj.suffix('lst') - parttool = 'parttool-' + obj.suffix('lst') - video = 'video-' + obj.suffix('lst') - dep = deps[i] - flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end - extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end - dir = File.dirname(src) - - "#{obj}: #{src} $(#{src}_DEPENDENCIES) - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -DGRUB_FILE=\\\"#{src}\\\" -MD -c -o $@ $< --include #{dep} - -clean-module-#{extra_target}.#{@rule_count}: - rm -f #{command} #{fs} #{partmap} #{handler} #{parttool} #{video} #{terminal} - -CLEAN_MODULE_TARGETS += clean-module-#{extra_target}.#{@rule_count} - -COMMANDFILES += #{command} -FSFILES += #{fs} -PARTTOOLFILES += #{parttool} -PARTMAPFILES += #{partmap} -HANDLERFILES += #{handler} -TERMINALFILES += #{terminal} -VIDEOFILES += #{video} - -#{command}: #{src} $(#{src}_DEPENDENCIES) gencmdlist.sh - set -e; \ - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ - | sh $(srcdir)/gencmdlist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) - -#{fs}: #{src} $(#{src}_DEPENDENCIES) genfslist.sh - set -e; \ - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ - | sh $(srcdir)/genfslist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) - -#{parttool}: #{src} $(#{src}_DEPENDENCIES) genparttoollist.sh - set -e; \ - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ - | sh $(srcdir)/genparttoollist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) - -#{partmap}: #{src} $(#{src}_DEPENDENCIES) genpartmaplist.sh - set -e; \ - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ - | sh $(srcdir)/genpartmaplist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) - -#{handler}: #{src} $(#{src}_DEPENDENCIES) genhandlerlist.sh - set -e; \ - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ - | sh $(srcdir)/genhandlerlist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) - -#{terminal}: #{src} $(#{src}_DEPENDENCIES) genterminallist.sh - set -e; \ - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ - | sh $(srcdir)/genterminallist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) - -#{video}: #{src} $(#{src}_DEPENDENCIES) genvideolist.sh - set -e; \ - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ - | sh $(srcdir)/genvideolist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) - -" - end.join('') - end -end - -class Utility - def initialize(dir, name) - @dir = dir - @name = name - @rule_count = 0 - end - def print_tail() - prefix = @name.to_var - print "#{@name}: $(#{prefix}_DEPENDENCIES) $(#{prefix}_OBJECTS) - $(CC) -o $@ $(#{prefix}_OBJECTS) $(LDFLAGS) $(#{prefix}_LDFLAGS) - -" - end - attr_reader :dir, :name - - def rule(sources) - prefix = @name.to_var - @rule_count += 1 - objs = sources.collect do |src| - raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src - prefix + '-' + src.to_obj - end - objs_str = objs.join(' '); - deps = objs.collect {|obj| obj.suffix('d')} - deps_str = deps.join(' '); - - " -clean-utility-#{@name}.#{@rule_count}: - rm -f #{@name}$(EXEEXT) #{objs_str} - -CLEAN_UTILITY_TARGETS += clean-utility-#{@name}.#{@rule_count} - -mostlyclean-utility-#{@name}.#{@rule_count}: - rm -f #{deps_str} - -MOSTLYCLEAN_UTILITY_TARGETS += mostlyclean-utility-#{@name}.#{@rule_count} - -#{prefix}_OBJECTS += #{objs_str} - -" + objs.collect_with_index do |obj, i| - src = sources[i] - fake_obj = File.basename(src).suffix('o') - dep = deps[i] - dir = File.dirname(src) - - "#{obj}: #{src} $(#{src}_DEPENDENCIES) - $(CC) -I#{dir} -I$(srcdir)/#{dir} $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(#{prefix}_CFLAGS) -DGRUB_FILE=\\\"#{src}\\\" -MD -c -o $@ $< --include #{dep} - -" - end.join('') - end -end - -class Program - def initialize(dir, name) - @dir = dir - @name = name - end - attr_reader :dir, :name - - def print_tail() - prefix = @name.to_var - print "CLEANFILES += #{@name} $(#{prefix}_OBJECTS) -ifeq ($(#{prefix}_RELOCATABLE),yes) -#{@name}: $(#{prefix}_DEPENDENCIES) $(#{prefix}_OBJECTS) - $(TARGET_CC) -Wl,-r,-d -o $@ $(#{prefix}_OBJECTS) $(TARGET_LDFLAGS) $(#{prefix}_LDFLAGS) - if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) --strip-unneeded -K start -R .note -R .comment $@; fi -else -#{@name}: $(#{prefix}_DEPENDENCIES) $(#{prefix}_OBJECTS) - $(TARGET_CC) -o $@ $(#{prefix}_OBJECTS) $(TARGET_LDFLAGS) $(#{prefix}_LDFLAGS) - if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) -R .rel.dyn -R .reginfo -R .note -R .comment $@; fi -endif - -" - end - - def rule(sources) - prefix = @name.to_var - objs = sources.collect do |src| - raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src - prefix + '-' + src.to_obj - end - deps = objs.collect {|obj| obj.suffix('d')} - deps_str = deps.join(' '); - - "MOSTLYCLEANFILES += #{deps_str} - -" + objs.collect_with_index do |obj, i| - src = sources[i] - fake_obj = File.basename(src).suffix('o') - dep = deps[i] - flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end - extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end - dir = File.dirname(src) - - "#{obj}: #{src} $(#{src}_DEPENDENCIES) - $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -DGRUB_FILE=\\\"#{src}\\\" -MD -c -o $@ $< - --include #{dep} - -#{prefix}_OBJECTS += #{obj} -" - end.join('') - end -end - -class Script - def initialize(dir, name) - @dir = dir - @name = name - end - attr_reader :dir, :name - - def rule(sources) - if sources.length != 1 - raise "only a single source file must be specified for a script" - end - src = sources[0] - if /\.in$/ !~ src - raise "unknown source file `#{src}'" - end - - "CLEANFILES += #{@name} - -#{@name}: #{src} $(#{src}_DEPENDENCIES) config.status - ./config.status --file=-:#{src} | sed -e 's,@pkglib_DATA@,$(pkglib_DATA),g' > $@ - chmod +x $@ - -" - end -end - -images = [] -utils = [] -pmodules = [] -programs = [] -scripts = [] - -l = gets -print l -print "# Generated by genmk.rb, please don't edit!\n" - -cont = false -str = nil -while l = gets - if cont - str += l - else - str = l - end - - print l - cont = (/\\$/ =~ l) - unless cont - str.gsub!(/\\\n/, ' ') - - if /^([a-zA-Z0-9_]+)\s*\+?=\s*(.*?)\s*$/ =~ str - var, args = $1, $2 - - if var =~ /^([a-zA-Z0-9_]+)_([A-Z]+)$/ - prefix, type = $1, $2 - - case type - when 'IMAGES' - images += args.split(/\s+/).collect do |img| - Image.new(prefix, img) - end - - when 'MODULES' - pmodules += args.split(/\s+/).collect do |pmod| - PModule.new(prefix, pmod) - end - - when 'UTILITIES' - utils += args.split(/\s+/).collect do |util| - Utility.new(prefix, util) - end - - when 'PROGRAMS' - programs += args.split(/\s+/).collect do |prog| - Program.new(prefix, prog) - end - - when 'SCRIPTS' - scripts += args.split(/\s+/).collect do |script| - Script.new(prefix, script) - end - - when 'SOURCES' - if img = images.detect() {|i| i.name.to_var == prefix} - print img.rule(args.split(/\s+/)) - elsif pmod = pmodules.detect() {|m| m.name.to_var == prefix} - print pmod.rule(args.split(/\s+/)) - elsif util = utils.detect() {|u| u.name.to_var == prefix} - print util.rule(args.split(/\s+/)) - elsif program = programs.detect() {|u| u.name.to_var == prefix} - print program.rule(args.split(/\s+/)) - elsif script = scripts.detect() {|s| s.name.to_var == prefix} - print script.rule(args.split(/\s+/)) - end - end - end - - end - - end - -end -utils.each {|util| util.print_tail()} -programs.each {|program| program.print_tail()} - diff --git a/gentpl.py b/gentpl.py new file mode 100644 index 000000000..214b58afd --- /dev/null +++ b/gentpl.py @@ -0,0 +1,460 @@ +#! /usr/bin/python + +# +# This is the python script used to generate Makefile.tpl +# + +GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", + "i386_ieee1275", "x86_64_efi", "mips_yeeloong", "sparc64_ieee1275", + "powerpc_ieee1275" ] + +GROUPS = {} +GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_ieee1275" ] +GROUPS["x86_64"] = [ "x86_64_efi" ] +GROUPS["mips"] = [ "mips_yeeloong" ] +GROUPS["sparc64"] = [ "sparc64_ieee1275" ] +GROUPS["powerpc"] = [ "powerpc_ieee1275" ] +GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"] +GROUPS["x86_efi"] = [ "i386_efi", "x86_64_efi" ] +GROUPS["common"] = GRUB_PLATFORMS[:] +GROUPS["nonemu"] = GRUB_PLATFORMS[:] +GROUPS["nonemu"].remove("emu") + +# +# Create platform => groups reverse map, where groups covering that +# platform are ordered by their sizes +# +RMAP = {} +for platform in GRUB_PLATFORMS: + # initialize with platform itself as a group + RMAP[platform] = [ platform ] + + for k in GROUPS.keys(): + v = GROUPS[k] + # skip groups that don't cover this platform + if platform not in v: continue + + bigger = [] + smaller = [] + # partition currently known groups based on their size + for group in RMAP[platform]: + if group in GRUB_PLATFORMS: smaller.append(group) + elif len(GROUPS[group]) < len(v): smaller.append(group) + else: bigger.append(group) + # insert in the middle + RMAP[platform] = smaller + [ k ] + bigger + +# +# Global variables +# +GVARS = [] + +def gvar_add(var, value): + if var not in GVARS: + GVARS.append(var) + return var + " += " + value + "\n" + +def global_variable_initializers(): + r = "" + for var in GVARS: + r += var + " ?= \n" + return r + +# +# Per PROGRAM/SCRIPT variables +# + +def var_set(var, value): + return var + " = " + value + "\n" + +def var_add(var, value): + return var + " += " + value + "\n" + +# +# Autogen constructs +# + +def if_tag(tag, closure): + return "[+ IF " + tag + " +]" + closure() + "[+ ENDIF +]" + +def if_tag_defined(tag, closure): + return "[+ IF " + tag + " defined +]" + closure() + "[+ ENDIF +]" + +def for_tag(tag, closure): + return "[+ FOR ." + tag + " +]" + closure() + "[+ ENDFOR +]" + +def collect_values(tag, prefix=""): + return for_tag(tag, lambda: prefix + "[+ ." + tag + " +] ") + +def each_group(platform, suffix, closure): + r = None + for group in RMAP[platform]: + if r == None: + r = "[+ IF ." + group + suffix + " +]" + else: + r += "[+ ELIF ." + group + suffix + " +]" + + r += closure(group) + + if r: + r += "[+ ELSE +]" + r += closure(None) + r += "[+ ENDIF +]" + else: + r = closure(None) + + return r + +def each_platform(closure): + r = "" + for platform in GRUB_PLATFORMS: + for group in RMAP[platform]: + if group == RMAP[platform][0]: + r += "[+ IF ." + group + " defined +]" + else: + r += "[+ ELIF ." + group + " defined +]" + + r += "if COND_" + platform + "\n" + r += closure(platform) + r += "endif\n" + r += "[+ ENDIF +]" + return r + +def canonical_name(): return "[+ % name `echo -n %s | sed -e 's/[^0-9A-Za-z@_]/_/g'` +]" +def canonical_module(): return canonical_name() + "_module" +def canonical_kernel(): return canonical_name() + "_exec" +def canonical_image(): return canonical_name() + "_image" + +def shared_sources(prefix=""): return collect_values("shared", prefix) +def shared_nodist_sources(prefix=""): return collect_values("nodist_shared", prefix) + +def default_sources(prefix=""): return collect_values("source", prefix) +def default_nodist_sources(prefix=""): return collect_values("nodist", prefix) +def default_ldadd(): return collect_values("ldadd") +def default_cflags(): return collect_values("cflags") +def default_ldflags(): return collect_values("ldflags") +def default_cppflags(): return collect_values("cppflags") +def default_ccasflags(): return collect_values("ccasflags") + +def group_sources(group, prefix=""): return collect_values(group, prefix) if group else default_sources(prefix) +def group_nodist_sources(group, prefix=""): return collect_values(group + "_nodist", prefix) if group else default_nodist_sources(prefix) + +def platform_sources(platform, prefix=""): return each_group(platform, "", lambda g: collect_values(g, prefix) if g else default_sources(prefix)) +def platform_nodist_sources(platform, prefix=""): return each_group(platform, "_nodist", lambda g: collect_values(g + "_nodist", prefix) if g else default_nodist_sources(prefix)) + +def platform_ldadd(platform): return each_group(platform, "_ldadd", lambda g: collect_values(g + "_ldadd") if g else default_ldadd()) +def platform_cflags(platform): return each_group(platform, "_cflags", lambda g: collect_values(g + "_cflags") if g else default_cflags()) +def platform_ldflags(platform): return each_group(platform, "_ldflags", lambda g: collect_values(g + "_ldflags") if g else default_ldflags()) +def platform_cppflags(platform): return each_group(platform, "_cppflags", lambda g: collect_values(g + "_cppflags") if g else default_cppflags()) +def platform_ccasflags(platform): return each_group(platform, "_ccasflags", lambda g: collect_values(g + "_ccasflags") if g else default_ccasflags()) +def platform_format(platform): return each_group(platform, "_format", lambda g: collect_values(g + "_format") if g else "binary") + +def module(platform): + r = gvar_add("noinst_PROGRAMS", "[+ name +].module") + r += gvar_add("MODULE_FILES", "[+ name +].module") + + r += var_set(canonical_module() + "_SOURCES", platform_sources(platform) + "## platform sources") + r += var_add(canonical_module() + "_SOURCES", shared_sources() + "## shared sources") + r += var_set("nodist_" + canonical_module() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") + r += var_add("nodist_" + canonical_module() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") + r += var_set(canonical_module() + "_LDADD", platform_ldadd(platform)) + r += var_set(canonical_module() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_MODULE) " + platform_cflags(platform)) + r += var_set(canonical_module() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_MODULE) " + platform_ldflags(platform)) + r += var_set(canonical_module() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_MODULE) " + platform_cppflags(platform)) + r += var_set(canonical_module() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(platform)) + + r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_module() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + canonical_module() + "_SOURCES)") + + r += gvar_add("DEF_FILES", "def-[+ name +].lst") + r += gvar_add("UND_FILES", "und-[+ name +].lst") + r += gvar_add("MOD_FILES", "[+ name +].mod") + r += gvar_add("platform_DATA", "[+ name +].mod") + r += gvar_add("CLEANFILES", "def-[+ name +].lst und-[+ name +].lst mod-[+ name +].c mod-[+ name +].o [+ name +].mod") + + r += gvar_add("COMMAND_FILES", "command-[+ name +].lst") + r += gvar_add("FS_FILES", "fs-[+ name +].lst") + r += gvar_add("VIDEO_FILES", "video-[+ name +].lst") + r += gvar_add("PARTMAP_FILES", "partmap-[+ name +].lst") + r += gvar_add("HANDLER_FILES", "handler-[+ name +].lst") + r += gvar_add("PARTTOOL_FILES", "parttool-[+ name +].lst") + r += gvar_add("TERMINAL_FILES", "terminal-[+ name +].lst") + r += gvar_add("CLEANFILES", "command-[+ name +].lst fs-[+ name +].lst") + r += gvar_add("CLEANFILES", "handler-[+ name +].lst terminal-[+ name +].lst") + r += gvar_add("CLEANFILES", "video-[+ name +].lst partmap-[+ name +].lst parttool-[+ name +].lst") + + r += """ +[+ name +].pp: $(""" + canonical_module() + """_SOURCES) $(nodist_""" + canonical_module() + """_SOURCES) + $(TARGET_CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + canonical_module() + """_CPPFLAGS) $(CPPFLAGS) $^ > $@ || (rm -f $@; exit 1) + +def-[+ name +].lst: [+ name +].module + if test x$(USE_APPLE_CC_FIXES) = xyes; then \ + $(NM) -g -P -p $< | grep -E '^[a-zA-Z0-9_]* [TDS]' | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@; \ + else \ + $(NM) -g --defined-only -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@; \ + fi + +und-[+ name +].lst: [+ name +].module + $(NM) -u -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@ + +mod-[+ name +].c: [+ name +].module $(top_builddir)/moddep.lst $(top_srcdir)/genmodsrc.sh + sh $(top_srcdir)/genmodsrc.sh [+ name +] $(top_builddir)/moddep.lst > $@ || (rm -f $@; exit 1) + +mod-[+ name +].o: mod-[+ name +].c + $(TARGET_CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS_MODULE) $(CPPFLAGS) $(CFLAGS_MODULE) $(CFLAGS) -c -o $@ $< + +[+ name +].mod: [+ name +].module mod-[+ name +].o + if test x$(USE_APPLE_CC_FIXES) = xyes; then \ + $(CCLD) $(LDFLAGS_MODULE) $(LDFLAGS) -o $@.bin $^; \ + $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -nu -nd $@.bin $@; \ + rm -f $@.bin; \ + else \ + $(CCLD) -o $@ $(LDFLAGS_MODULE) $(LDFLAGS) $^; \ + if test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \ + $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; \ + fi + +command-[+ name +].lst: [+ name +].pp $(top_srcdir)/gencmdlist.sh + cat $< | sh $(top_srcdir)/gencmdlist.sh [+ name +] > $@ || (rm -f $@; exit 1) + +fs-[+ name +].lst: [+ name +].pp $(top_srcdir)/genfslist.sh + cat $< | sh $(top_srcdir)/genfslist.sh [+ name +] > $@ || (rm -f $@; exit 1) + +video-[+ name +].lst: [+ name +].pp $(top_srcdir)/genvideolist.sh + cat $< | sh $(top_srcdir)/genvideolist.sh [+ name +] > $@ || (rm -f $@; exit 1) + +partmap-[+ name +].lst: [+ name +].pp $(top_srcdir)/genpartmaplist.sh + cat $< | sh $(top_srcdir)/genpartmaplist.sh [+ name +] > $@ || (rm -f $@; exit 1) + +parttool-[+ name +].lst: [+ name +].pp $(top_srcdir)/genparttoollist.sh + cat $< | sh $(top_srcdir)/genparttoollist.sh [+ name +] > $@ || (rm -f $@; exit 1) + +handler-[+ name +].lst: [+ name +].pp $(top_srcdir)/genhandlerlist.sh + cat $< | sh $(top_srcdir)/genhandlerlist.sh [+ name +] > $@ || (rm -f $@; exit 1) + +terminal-[+ name +].lst: [+ name +].pp $(top_srcdir)/genterminallist.sh + cat $< | sh $(top_srcdir)/genterminallist.sh [+ name +] > $@ || (rm -f $@; exit 1) +""" + return r + +def rule(target, source, cmd): + if cmd[0] == "\n": + return "\n" + target + ": " + source + cmd.replace("\n", "\n\t") + "\n" + else: + return "\n" + target + ": " + source + "\n\t" + cmd.replace("\n", "\n\t") + "\n" + +def image_nostrip(platform): + return if_tag_defined("image_nostrip." + platform, lambda: rule("[+ name +].img", "[+ name +].exec", "cp $< $@")) + +def image_strip(platform): + return if_tag_defined("image_strip." + platform, lambda: rule("[+ name +].img", "[+ name +].exec", "$(STRIP) -o $@ -R .rel.dyn -R .reginfo -R .note -R .comment $<")) + +def image_strip_keep_kernel(platform): + return if_tag_defined("image_strip_keep_kernel." + platform, lambda: rule("[+ name +].img", "[+ name +].exec", "$(STRIP) -o $@ --strip-unneeded -K start -R .note -R .comment $<")) + +def image_strip_macho2img(platform): + return if_tag_defined("image_strip_macho2img." + platform, lambda: rule("[+ name +].img", "[+ name +].exec", """ +if test "x$(TARGET_APPLE_CC)" = x1; then \ + $(MACHO2IMG) --bss $< $@ || exit 1; \ +else \ + $(STRIP) -o $@ -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< || exit 1; \ +fi +""")) + +def kernel(platform): + r = gvar_add("noinst_PROGRAMS", "[+ name +].exec") + r += var_set(canonical_kernel() + "_SOURCES", platform_sources(platform)) + r += var_add(canonical_kernel() + "_SOURCES", shared_sources()) + r += var_set("nodist_" + canonical_kernel() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") + r += var_add("nodist_" + canonical_kernel() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") + r += var_set(canonical_kernel() + "_LDADD", platform_ldadd(platform)) + r += var_set(canonical_kernel() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_KERNEL) " + platform_cflags(platform)) + r += var_set(canonical_kernel() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_KERNEL) " + platform_ldflags(platform)) + r += var_set(canonical_kernel() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) " + platform_cppflags(platform)) + r += var_set(canonical_kernel() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) " + platform_ccasflags(platform)) + + r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_kernel() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + canonical_kernel() + "_SOURCES)") + + r += gvar_add("platform_DATA", "[+ name +].img") + r += image_nostrip(platform) + r += image_strip(platform) + r += image_strip_keep_kernel(platform) + r += image_strip_macho2img(platform) + return r + +def image(platform): + r = gvar_add("noinst_PROGRAMS", "[+ name +].image") + r += var_set(canonical_image() + "_SOURCES", platform_sources(platform)) + r += var_add(canonical_image() + "_SOURCES", shared_sources()) + r += var_set("nodist_" + canonical_image() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") + r += var_add("nodist_" + canonical_image() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") + r += var_set(canonical_image() + "_LDADD", platform_ldadd(platform)) + r += var_set(canonical_image() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_IMAGE) " + platform_cflags(platform)) + r += var_set(canonical_image() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_IMAGE) " + platform_ldflags(platform)) + r += var_set(canonical_image() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) " + platform_cppflags(platform)) + r += var_set(canonical_image() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) " + platform_ccasflags(platform)) + + r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_image() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + canonical_image() + "_SOURCES)") + + r += gvar_add("platform_DATA", "[+ name +].img") + r += rule("[+ name +].img", "[+ name +].image", """ +if test x$(USE_APPLE_CC_FIXES) = xyes; then \ + $(MACHO2IMG) $< $@; \ +else \ + $(OBJCOPY) -O """ + platform_format(platform) + """ --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; \ +fi +""") + return r + +def library(platform): + r = gvar_add("noinst_LIBRARIES", "[+ name +]") + r += var_set(canonical_name() + "_SOURCES", platform_sources(platform)) + r += var_add(canonical_name() + "_SOURCES", shared_sources()) + r += var_set("nodist_" + canonical_name() + "_SOURCES", platform_nodist_sources(platform)) + r += var_add("nodist_" + canonical_name() + "_SOURCES", shared_nodist_sources()) + r += var_set(canonical_name() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_LIBRARY) " + platform_cflags(platform)) + r += var_set(canonical_name() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) " + platform_cppflags(platform)) + r += var_set(canonical_name() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) " + platform_ccasflags(platform)) + + r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_name() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + canonical_name() + "_SOURCES)") + + return r + +def installdir(default="bin"): + return "[+ IF installdir +][+ installdir +][+ ELSE +]" + default + "[+ ENDIF +]" + +def manpage(): + r = "if COND_MAN_PAGES\n" + r += "man_MANS += [+ name +].[+ mansection +]\n" + r += rule("[+ name +].[+ mansection +]", "", """ +$(MAKE) $(AM_MAKEFLAGS) [+ name +] +chmod a+x [+ name +] +$(HELP2MAN) --section=[+ mansection +] -o $@ ./[+ name +] +""") + r += gvar_add("CLEANFILES", "[+ name +].[+ mansection +]") + r += "endif\n" + return r + +def program(platform, test=False): + if test: + r = gvar_add("check_PROGRAMS", "[+ name +]") + else: + r = gvar_add(installdir() + "_PROGRAMS", "[+ name +]") + + r += var_set(canonical_name() + "_SOURCES", platform_sources(platform)) + r += var_add(canonical_name() + "_SOURCES", shared_sources()) + r += var_set("nodist_" + canonical_name() + "_SOURCES", platform_nodist_sources(platform)) + r += var_add("nodist_" + canonical_name() + "_SOURCES", shared_nodist_sources()) + r += var_set(canonical_name() + "_LDADD", platform_ldadd(platform)) + r += var_set(canonical_name() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_PROGRAM) " + platform_cflags(platform)) + r += var_set(canonical_name() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_PROGRAM) " + platform_ldflags(platform)) + r += var_set(canonical_name() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) " + platform_cppflags(platform)) + r += var_set(canonical_name() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(platform)) + + r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_name() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + canonical_name() + "_SOURCES)") + + if test: + r += if_tag_defined("enable", lambda: gvar_add("TESTS", "[+ name +]")) + else: + r += if_tag("mansection", lambda: manpage()) + + return r + +def test_program(platform): + return program(platform, True) + +def data(platform): + return gvar_add(installdir() + "_DATA", platform_sources(platform)) + +def script(platform, test=False): + if test: + r = gvar_add("check_SCRIPTS", "[+ name +]") + else: + r = gvar_add(installdir() + "_SCRIPTS", "[+ name +]") + + r += rule("[+ name +]", "$(top_builddir)/config.status " + platform_sources(platform), """ +$(top_builddir)/config.status --file=-:""" + platform_sources(platform) + """ \ + | sed -e 's,@pkglib_DATA@,$(pkglib_DATA),g' > $@ +chmod a+x [+ name +] +""") + + r += gvar_add("CLEANFILES", "[+ name +]") + r += gvar_add("EXTRA_DIST", platform_sources(platform)) + + if test: + r += if_tag_defined("enable", lambda: gvar_add("TESTS", "[+ name +]")) + else: + r += if_tag("mansection", lambda: manpage()) + + return r + +def test_script(platform): + return script(platform, True) + +def with_enable_condition(x): + return "[+ IF enable +]if [+ enable +]\n" + x + "endif\n[+ ELSE +]" + x + "[+ ENDIF +]" + +def module_rules(): + return for_tag("module", lambda: with_enable_condition(each_platform(lambda p: module(p)))) + +def kernel_rules(): + return for_tag("kernel", lambda: with_enable_condition(each_platform(lambda p: kernel(p)))) + +def image_rules(): + return for_tag("image", lambda: with_enable_condition(each_platform(lambda p: image(p)))) + +def library_rules(): + return for_tag("library", lambda: with_enable_condition(each_platform(lambda p: library(p)))) + +def program_rules(): + return for_tag("program", lambda: with_enable_condition(each_platform(lambda p: program(p)))) + +def script_rules(): + return for_tag("script", lambda: with_enable_condition(each_platform(lambda p: script(p)))) + +def data_rules(): + return for_tag("data", lambda: with_enable_condition(each_platform(lambda p: data(p)))) + +def test_program_rules(): + return for_tag("test_program", lambda: with_enable_condition(each_platform(lambda p: test_program(p)))) + +def test_script_rules(): + return for_tag("test_script", lambda: with_enable_condition(each_platform(lambda p: test_script(p)))) + +print "[+ AutoGen5 template +]\n" +a = module_rules() +b = kernel_rules() +c = image_rules() +d = library_rules() +e = program_rules() +f = script_rules() +g = data_rules() +h = test_program_rules() +i = test_script_rules() +z = global_variable_initializers() + +print z # initializer for all vars +print a +print b +print c +print d +print e +print f +print g +print h +print i + +print """.PRECIOUS: modules.am +$(srcdir)/modules.am: $(srcdir)/modules.def $(top_srcdir)/Makefile.tpl + autogen -T $(top_srcdir)/Makefile.tpl $(srcdir)/modules.def | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +.PRECIOUS: $(top_srcdir)/Makefile.tpl +$(top_srcdir)/Makefile.tpl: $(top_srcdir)/gentpl.py + python $(top_srcdir)/gentpl.py | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ +""" diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am new file mode 100644 index 000000000..1f2657656 --- /dev/null +++ b/grub-core/Makefile.am @@ -0,0 +1,155 @@ +AUTOMAKE_OPTIONS = subdir-objects +SUBDIRS = po +DEPDIR = .deps-core + +include $(top_srcdir)/Makefile.extra-dist +include $(top_srcdir)/Makefile.vars + +LDADD_KERNEL = -lgcc +CFLAGS_KERNEL = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_KERNEL = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N -static-libgcc +CPPFLAGS_KERNEL = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_KERNEL = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_MODULE = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_MODULE = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N,-r,-d +CPPFLAGS_MODULE = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_MODULE = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_IMAGE = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -fno-builtin +LDFLAGS_IMAGE = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N,-S +CPPFLAGS_IMAGE = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_IMAGE = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_LIBRARY = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -fno-builtin +CPPFLAGS_LIBRARY = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_LIBRARY = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_PROGRAM = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) +LDFLAGS_PROGRAM = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) +CPPFLAGS_PROGRAM = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_PROGRAM = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +AM_CFLAGS = +AM_LDFLAGS = +AM_CPPFLAGS = $(CPPFLAGS_GRUB) -DGRUB_FILE=\"$(subst $(top_srcdir)/,,$<)\" +AM_CCASFLAGS = -DASM_FILE=1 + +# gentrigtables +gentrigtables: $(top_srcdir)/gentrigtables.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(CPPFLAGS) -lm $< +CLEANFILES += gentrigtables + +# trigtables.c +trigtables.c: gentrigtables.c configure.ac + $(MAKE) $(AM_MAKEFLAGS) gentrigtables + $(top_builddir)/gentrigtables > $@ +CLEANFILES += trigtables.c + +# XXX Use Automake's LEX & YACC support +# See Recording Dependencies Manually in automake doc for below rules +script/sh_module-lexer.$(OBJEXT):grub_script.tab.h +grub_script.tab.c grub_script.tab.h: $(top_srcdir)/script/parser.y + $(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/script/parser.y +CLEANFILES += grub_script.tab.c grub_script.tab.h + +# For the lexer. +# See Recording Dependencies Manually in automake doc for below rules +script/sh_module-lexer.$(OBJEXT):grub_script.yy.h +grub_script.yy.c grub_script.yy.h: $(top_srcdir)/script/yylex.l + $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(top_srcdir)/script/yylex.l +CLEANFILES += grub_script.yy.c grub_script.yy.h + +include $(srcdir)/modules.am +include $(srcdir)/Makefile.kernel + +# .lst files +platform_DATA += moddep.lst +platform_DATA += fs.lst +platform_DATA += command.lst +platform_DATA += partmap.lst +platform_DATA += handler.lst +platform_DATA += terminal.lst +platform_DATA += parttool.lst +platform_DATA += video.lst +platform_DATA += crypto.lst +CLEANFILES += moddep.lst +CLEANFILES += fs.lst +CLEANFILES += command.lst +CLEANFILES += partmap.lst +CLEANFILES += handler.lst +CLEANFILES += terminal.lst +CLEANFILES += parttool.lst +CLEANFILES += video.lst +CLEANFILES += crypto.lst + +fs.lst: $(FS_FILES) + cat $^ /dev/null | sort | uniq > $@ +command.lst: $(COMMAND_FILES) + cat $^ /dev/null | sort | uniq > $@ +partmap.lst: $(PARTMAP_FILES) + cat $^ /dev/null | sort | uniq > $@ +handler.lst: $(HANDLER_FILES) + cat $^ /dev/null | sort | uniq > $@ +terminal.lst: $(TERMINAL_FILES) + cat $^ /dev/null | sort | uniq > $@ +parttool.lst: $(PARTTOOL_FILES) + cat $^ /dev/null | sort | uniq > $@ +video.lst: $(VIDEO_FILES) + cat $^ /dev/null | sort | uniq > $@ + +# but, crypto.lst is simply copied +crypto.lst: $(top_srcdir)/lib/libgcrypt-grub/cipher/crypto.lst + cp $^ $@ + +# generate global module dependencies list +moddep.lst: kernel_syms.lst genmoddep.awk $(DEF_FILES) $(UND_FILES) + cat $(DEF_FILES) kernel_syms.lst /dev/null \ + | $(AWK) -f $(top_srcdir)/genmoddep.awk $(UND_FILES) > $@ \ + || (rm -f $@; exit 1) + +if COND_i386_pc +if COND_ENABLE_EFIEMU +efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) + -rm -f $@; \ + if test "x$(TARGET_APPLE_CC)" = x1; then \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF32 -DAPPLE_CC -m32 -Wall -Werror -nostdlib -O2 -c -o $@.bin $< || exit 1; \ + $(OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \ + rm -f $@.bin; \ + else \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF32 -m32 -Wall -Werror -nostdlib -O2 -c -o $@ $< || exit 1; \ + if test ! -z "$(TARGET_OBJ2ELF)"; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \ + fi + +efiemu64_c.o: efiemu/runtime/efiemu.c + if test "x$(TARGET_APPLE_CC)" = x1; then \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF64 -DAPPLE_CC=1 -m64 -nostdlib -Wall -Werror -mno-red-zone -c -o $@ $< || exit 1; \ + else \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF64 -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large -mno-red-zone -c -o $@ $< || exit 1; \ + fi + +efiemu64_s.o: efiemu/runtime/efiemu.S + -rm -f $@ + if test "x$(TARGET_APPLE_CC)" = x1; then \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF64 -DAPPLE_CC=1 -m64 -Wall -Werror -nostdlib -O2 -mno-red-zone -c -o $@ $< || exit 1; \ + else \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF64 -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $< || exit 1; \ + fi + +efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF) + -rm -f $@; \ + if test "x$(TARGET_APPLE_CC)" = x1; then \ + rm -f $@.bin; \ + $(TARGET_CC) -m64 -Wl,-r -nostdlib -o $@.bin $^ || exit 1; \ + $(OBJCONV) -felf64 -nu -nd $@.bin $@ || exit 1; \ + rm -f $@.bin; \ + else \ + $(TARGET_CC) -m64 -nostdlib -Wl,-r -o $@ $^ || exit 1; \ + if test ! -z "$(TARGET_OBJ2ELF)"; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \ + fi + +platform_DATA += efiemu32.o efiemu64.o +CLEANFILES += efiemu32.o efiemu64.o efiemu64_c.o efiemu64_s.o +endif +endif + diff --git a/grub-core/Makefile.extra-dist b/grub-core/Makefile.extra-dist new file mode 100644 index 000000000..c6516f06a --- /dev/null +++ b/grub-core/Makefile.extra-dist @@ -0,0 +1,53 @@ +# +# Extra files that need to be distributed (in .tar.gz) to build +# successfully on user site. +# +# XXX Remove wildcards; See 27.3 in automake.info +# + +EXTRA_DIST = + +EXTRA_DIST += gentpl.py +EXTRA_DIST += Makefile.tpl +EXTRA_DIST += modules.def + +EXTRA_DIST += gentrigtables.c + +EXTRA_DIST += genmoddep.awk +EXTRA_DIST += genmodsrc.sh +EXTRA_DIST += gensymlist.sh + +EXTRA_DIST += genemuinit.sh +EXTRA_DIST += genemuinitheader.sh + +EXTRA_DIST += genfslist.sh +EXTRA_DIST += gencmdlist.sh +EXTRA_DIST += genvideolist.sh +EXTRA_DIST += genhandlerlist.sh +EXTRA_DIST += genpartmaplist.sh +EXTRA_DIST += genparttoollist.sh +EXTRA_DIST += genterminallist.sh +EXTRA_DIST += lib/libgcrypt-grub/cipher/crypto.lst + +EXTRA_DIST += script/yylex.l +EXTRA_DIST += script/parser.y + +EXTRA_DIST += lib/relocator.c + +EXTRA_DIST += efiemu/loadcore.c +EXTRA_DIST += efiemu/prepare.c + +EXTRA_DIST += loader/machoXX.c + + +EXTRA_DIST += kern/i386/loader.S +EXTRA_DIST += kern/i386/realmode.S +EXTRA_DIST += loader/i386/bsdXX.c +EXTRA_DIST += loader/i386/bsd_pagetable.c +EXTRA_DIST += loader/i386/multiboot_elfxx.c +EXTRA_DIST += commands/search.c + +EXTRA_DIST += kern/i386/pc/lzma_decode.S + +EXTRA_DIST += $(shell find $(top_srcdir) -name '*.h') + diff --git a/grub-core/Makefile.kernel b/grub-core/Makefile.kernel new file mode 100644 index 000000000..58e464805 --- /dev/null +++ b/grub-core/Makefile.kernel @@ -0,0 +1,192 @@ +# -*- makefile -*- + +KERNEL_HEADER_FILES = +KERNEL_HEADER_FILES += include/grub/cache.h +KERNEL_HEADER_FILES += include/grub/command.h +KERNEL_HEADER_FILES += include/grub/device.h +KERNEL_HEADER_FILES += include/grub/disk.h +KERNEL_HEADER_FILES += include/grub/dl.h +KERNEL_HEADER_FILES += include/grub/elf.h +KERNEL_HEADER_FILES += include/grub/elfload.h +KERNEL_HEADER_FILES += include/grub/env.h +KERNEL_HEADER_FILES += include/grub/env_private.h +KERNEL_HEADER_FILES += include/grub/err.h +KERNEL_HEADER_FILES += include/grub/file.h +KERNEL_HEADER_FILES += include/grub/fs.h +KERNEL_HEADER_FILES += include/grub/handler.h +KERNEL_HEADER_FILES += include/grub/i18n.h +KERNEL_HEADER_FILES += include/grub/kernel.h +KERNEL_HEADER_FILES += include/grub/list.h +KERNEL_HEADER_FILES += include/grub/misc.h +KERNEL_HEADER_FILES += include/grub/mm.h +KERNEL_HEADER_FILES += include/grub/net.h +KERNEL_HEADER_FILES += include/grub/parser.h +KERNEL_HEADER_FILES += include/grub/partition.h +KERNEL_HEADER_FILES += include/grub/reader.h +KERNEL_HEADER_FILES += include/grub/symbol.h +KERNEL_HEADER_FILES += include/grub/term.h +KERNEL_HEADER_FILES += include/grub/time.h +KERNEL_HEADER_FILES += include/grub/types.h + +if COND_i386_pc +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/machine/biosdisk.h +KERNEL_HEADER_FILES += include/grub/machine/boot.h +KERNEL_HEADER_FILES += include/grub/machine/console.h +KERNEL_HEADER_FILES += include/grub/machine/memory.h +KERNEL_HEADER_FILES += include/grub/machine/loader.h +KERNEL_HEADER_FILES += include/grub/machine/vga.h +KERNEL_HEADER_FILES += include/grub/machine/vbe.h +KERNEL_HEADER_FILES += include/grub/machine/kernel.h +KERNEL_HEADER_FILES += include/grub/machine/pxe.h +KERNEL_HEADER_FILES += include/grub/i386/pit.h +endif + +if COND_i386_efi +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/efi/efi.h +KERNEL_HEADER_FILES += include/grub/efi/time.h +KERNEL_HEADER_FILES += include/grub/efi/disk.h +KERNEL_HEADER_FILES += include/grub/i386/pit.h +endif + +if COND_i386_coreboot +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/machine/boot.h +KERNEL_HEADER_FILES += include/grub/machine/console.h +KERNEL_HEADER_FILES += include/grub/machine/init.h +KERNEL_HEADER_FILES += include/grub/machine/memory.h +KERNEL_HEADER_FILES += include/grub/machine/loader.h +endif + +if COND_i386_qemu +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/machine/boot.h +KERNEL_HEADER_FILES += include/grub/machine/console.h +KERNEL_HEADER_FILES += include/grub/machine/init.h +KERNEL_HEADER_FILES += include/grub/machine/memory.h +KERNEL_HEADER_FILES += include/grub/machine/loader.h +endif + +if COND_i386_ieee1275 +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += include/grub/machine/kernel.h +KERNEL_HEADER_FILES += include/grub/machine/loader.h +KERNEL_HEADER_FILES += include/grub/machine/memory.h +endif + +if COND_x86_64_efi +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/efi/efi.h +KERNEL_HEADER_FILES += include/grub/efi/time.h +KERNEL_HEADER_FILES += include/grub/efi/disk.h +KERNEL_HEADER_FILES += include/grub/machine/loader.h +KERNEL_HEADER_FILES += include/grub/i386/pit.h +endif + +if COND_mips_yeeloong +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/machine/kernel.h +KERNEL_HEADER_FILES += include/grub/machine/memory.h +KERNEL_HEADER_FILES += include/grub/cpu/cache.h +KERNEL_HEADER_FILES += include/grub/bitmap.h +KERNEL_HEADER_FILES += include/grub/video.h +KERNEL_HEADER_FILES += include/grub/gfxterm.h +KERNEL_HEADER_FILES += include/grub/font.h +KERNEL_HEADER_FILES += include/grub/bitmap_scale.h +KERNEL_HEADER_FILES += include/grub/bufio.h +KERNEL_HEADER_FILES += include/grub/pci.h +KERNEL_HEADER_FILES += include/grub/libgcc.h +endif + +if COND_powerpc_ieee1275 +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += include/grub/machine/kernel.h +KERNEL_HEADER_FILES += include/grub/libgcc.h +endif + +if COND_sparc64_ieee1275 +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/libgcc.h +KERNEL_HEADER_FILES += include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += include/grub/machine/kernel.h +KERNEL_HEADER_FILES += include/grub/sparc64/ieee1275/ieee1275.h +endif + +if COND_emu +KERNEL_HEADER_FILES += include/grub/cpu/time.h +KERNEL_HEADER_FILES += include/grub/cpu/types.h +KERNEL_HEADER_FILES += include/grub/gzio.h +KERNEL_HEADER_FILES += include/grub/menu.h +KERNEL_HEADER_FILES += include/grub/datetime.h +KERNEL_HEADER_FILES += include/grub/emu/misc.h +if COND_GRUB_EMU_SDL +KERNEL_HEADER_FILES += include/grub/sdl.h +endif +if COND_GRUB_EMU_USB +KERNEL_HEADER_FILES += include/grub/libusb.h +endif +if COND_GRUB_EMU_PCI +KERNEL_HEADER_FILES += include/grub/libpciaccess.h +endif +endif + +symlist.h: config.h $(KERNEL_HEADER_FILES) + @list='$^'; \ + for p in $$list; do \ + echo "#include <$$p>" >> $@ || (rm -f $@; exit 1); \ + done +CLEANFILES += symlist.h +BUILT_SOURCES += symlist.h + +symlist.c: symlist.h gensymlist.sh + $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1) + cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1) + rm -f symlist.p +CLEANFILES += symlist.c +BUILT_SOURCES += symlist.c + +noinst_DATA += kernel_syms.lst +kernel_syms.lst: $(KERNEL_HEADER_FILES) config.h + if grep "^#define HAVE_ASM_USCORE" config.h; then u="_"; else u=""; fi + $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) $(CFLAGS) -DGRUB_SYMBOL_GENERATOR=1 $^ >kernel_syms.input + cat kernel_syms.input | grep -v '^#' | sed -n \ + -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ + -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ + | sort -u >$@ + rm -f kernel_syms.input +CLEANFILES += kernel_syms.lst + +if COND_emu +kern/emu/grub_emu-main.$(OBJEXT):grub_emu_init.h +grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h +kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h +grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h + +grub_emu_init.h: genemuinitheader.sh $(MOD_FILES) + rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinitheader.sh $(NM) > $@ +CLEANFILES += grub_emu_init.h + +grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MOD_FILES) + rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinit.sh $(NM) > $@ +CLEANFILES += grub_emu_init.c +endif diff --git a/grub-core/Makefile.vars b/grub-core/Makefile.vars new file mode 100644 index 000000000..710a8fd0b --- /dev/null +++ b/grub-core/Makefile.vars @@ -0,0 +1,80 @@ +# -*- makefile -*- + +# Platform specific options +if COND_i386_pc + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_efi + LDFLAGS_PLATFORM = -melf_i386 +endif +if COND_x86_64_efi + LDFLAGS_PLATFORM = -melf_x86_64 +endif +if COND_i386_qemu + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_coreboot + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_ieee1275 + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_mips_yeeloong + CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache + CCASFLAGS_PLATFORM = -march=mips3 +endif +if COND_sparc64_ieee1275 + CFLAGS_PLATFORM = -mno-app-regs + LDFLAGS_PLATFORM = -melf64_sparc -mno-relax +endif + +CPPFLAGS_GRUB = -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) +CPPFLAGS_GRUB += -I$(top_srcdir)/include -I$(top_builddir)/include + +CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers +CPPFLAGS_GCRY = -I$(top_srcdir)/lib/libgcrypt_wrap + +CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" +CPPFLAGS_GNULIB = -I$(top_srcdir)/gnulib + +CFLAGS_MKISOFS = -Wno-all -Werror +CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include + +CFLAGS_POSIX = -fno-builtin +CPPFLAGS_POSIX = -I$(top_srcdir)/lib/posix_wrap + +CPPFLAGS_EFIEMU = -I$(top_srcdir)/efiemu/runtime + +grubconfdir = $(sysconfdir)/grub.d +platformdir = $(pkglibdir)/$(target_cpu)-$(platform) + +# to calm down automake +BUILT_SOURCES = +CLEANFILES = +COMMAND_FILES = +DEF_FILES = +FS_FILES = +HANDLER_FILES = +IMG_FILES = +MOD_FILES = +MODULE_FILES = +PARTMAP_FILES = +PARTTOOL_FILES = +TERMINAL_FILES = +TESTS = +UND_FILES = +VIDEO_FILES = +bin_PROGRAMS = +bin_SCRIPTS = +check_PROGRAMS = +check_SCRIPTS = +grubconf_DATA = +grubconf_SCRIPTS = +man_MANS = +noinst_DATA = +noinst_LIBRARIES = +noinst_PROGRAMS = +pkglib_SCRIPTS = +platform_DATA = +sbin_PROGRAMS = +sbin_SCRIPTS = diff --git a/boot/i386/pc/boot.S b/grub-core/boot/i386/pc/boot.S similarity index 100% rename from boot/i386/pc/boot.S rename to grub-core/boot/i386/pc/boot.S diff --git a/boot/i386/pc/cdboot.S b/grub-core/boot/i386/pc/cdboot.S similarity index 100% rename from boot/i386/pc/cdboot.S rename to grub-core/boot/i386/pc/cdboot.S diff --git a/boot/i386/pc/diskboot.S b/grub-core/boot/i386/pc/diskboot.S similarity index 100% rename from boot/i386/pc/diskboot.S rename to grub-core/boot/i386/pc/diskboot.S diff --git a/boot/i386/pc/lnxboot.S b/grub-core/boot/i386/pc/lnxboot.S similarity index 100% rename from boot/i386/pc/lnxboot.S rename to grub-core/boot/i386/pc/lnxboot.S diff --git a/boot/i386/pc/pxeboot.S b/grub-core/boot/i386/pc/pxeboot.S similarity index 100% rename from boot/i386/pc/pxeboot.S rename to grub-core/boot/i386/pc/pxeboot.S diff --git a/boot/i386/qemu/boot.S b/grub-core/boot/i386/qemu/boot.S similarity index 100% rename from boot/i386/qemu/boot.S rename to grub-core/boot/i386/qemu/boot.S diff --git a/boot/sparc64/ieee1275/boot.S b/grub-core/boot/sparc64/ieee1275/boot.S similarity index 100% rename from boot/sparc64/ieee1275/boot.S rename to grub-core/boot/sparc64/ieee1275/boot.S diff --git a/boot/sparc64/ieee1275/diskboot.S b/grub-core/boot/sparc64/ieee1275/diskboot.S similarity index 100% rename from boot/sparc64/ieee1275/diskboot.S rename to grub-core/boot/sparc64/ieee1275/diskboot.S diff --git a/bus/bonito.c b/grub-core/bus/bonito.c similarity index 100% rename from bus/bonito.c rename to grub-core/bus/bonito.c diff --git a/util/pci.c b/grub-core/bus/emu/pci.c similarity index 98% rename from util/pci.c rename to grub-core/bus/emu/pci.c index 420ae320b..d1beb561d 100644 --- a/util/pci.c +++ b/grub-core/bus/emu/pci.c @@ -19,6 +19,7 @@ #include #include +#include #include grub_pci_address_t diff --git a/bus/pci.c b/grub-core/bus/pci.c similarity index 100% rename from bus/pci.c rename to grub-core/bus/pci.c diff --git a/util/usb.c b/grub-core/bus/usb/emu/usb.c similarity index 100% rename from util/usb.c rename to grub-core/bus/usb/emu/usb.c diff --git a/bus/usb/ohci.c b/grub-core/bus/usb/ohci.c similarity index 100% rename from bus/usb/ohci.c rename to grub-core/bus/usb/ohci.c diff --git a/bus/usb/uhci.c b/grub-core/bus/usb/uhci.c similarity index 100% rename from bus/usb/uhci.c rename to grub-core/bus/usb/uhci.c diff --git a/bus/usb/usb.c b/grub-core/bus/usb/usb.c similarity index 100% rename from bus/usb/usb.c rename to grub-core/bus/usb/usb.c diff --git a/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c similarity index 100% rename from bus/usb/usbhub.c rename to grub-core/bus/usb/usbhub.c diff --git a/bus/usb/usbtrans.c b/grub-core/bus/usb/usbtrans.c similarity index 100% rename from bus/usb/usbtrans.c rename to grub-core/bus/usb/usbtrans.c diff --git a/commands/acpi.c b/grub-core/commands/acpi.c similarity index 100% rename from commands/acpi.c rename to grub-core/commands/acpi.c diff --git a/commands/blocklist.c b/grub-core/commands/blocklist.c similarity index 100% rename from commands/blocklist.c rename to grub-core/commands/blocklist.c diff --git a/commands/boot.c b/grub-core/commands/boot.c similarity index 100% rename from commands/boot.c rename to grub-core/commands/boot.c diff --git a/commands/cat.c b/grub-core/commands/cat.c similarity index 100% rename from commands/cat.c rename to grub-core/commands/cat.c diff --git a/commands/cmp.c b/grub-core/commands/cmp.c similarity index 100% rename from commands/cmp.c rename to grub-core/commands/cmp.c diff --git a/commands/configfile.c b/grub-core/commands/configfile.c similarity index 100% rename from commands/configfile.c rename to grub-core/commands/configfile.c diff --git a/commands/crc.c b/grub-core/commands/crc.c similarity index 100% rename from commands/crc.c rename to grub-core/commands/crc.c diff --git a/commands/date.c b/grub-core/commands/date.c similarity index 100% rename from commands/date.c rename to grub-core/commands/date.c diff --git a/commands/echo.c b/grub-core/commands/echo.c similarity index 100% rename from commands/echo.c rename to grub-core/commands/echo.c diff --git a/commands/efi/acpi.c b/grub-core/commands/efi/acpi.c similarity index 100% rename from commands/efi/acpi.c rename to grub-core/commands/efi/acpi.c diff --git a/commands/efi/fixvideo.c b/grub-core/commands/efi/fixvideo.c similarity index 100% rename from commands/efi/fixvideo.c rename to grub-core/commands/efi/fixvideo.c diff --git a/commands/efi/loadbios.c b/grub-core/commands/efi/loadbios.c similarity index 100% rename from commands/efi/loadbios.c rename to grub-core/commands/efi/loadbios.c diff --git a/commands/extcmd.c b/grub-core/commands/extcmd.c similarity index 100% rename from commands/extcmd.c rename to grub-core/commands/extcmd.c diff --git a/commands/gptsync.c b/grub-core/commands/gptsync.c similarity index 100% rename from commands/gptsync.c rename to grub-core/commands/gptsync.c diff --git a/commands/halt.c b/grub-core/commands/halt.c similarity index 100% rename from commands/halt.c rename to grub-core/commands/halt.c diff --git a/commands/handler.c b/grub-core/commands/handler.c similarity index 100% rename from commands/handler.c rename to grub-core/commands/handler.c diff --git a/commands/hashsum.c b/grub-core/commands/hashsum.c similarity index 100% rename from commands/hashsum.c rename to grub-core/commands/hashsum.c diff --git a/commands/hdparm.c b/grub-core/commands/hdparm.c similarity index 100% rename from commands/hdparm.c rename to grub-core/commands/hdparm.c diff --git a/commands/help.c b/grub-core/commands/help.c similarity index 100% rename from commands/help.c rename to grub-core/commands/help.c diff --git a/commands/hexdump.c b/grub-core/commands/hexdump.c similarity index 100% rename from commands/hexdump.c rename to grub-core/commands/hexdump.c diff --git a/commands/i386/cpuid.c b/grub-core/commands/i386/cpuid.c similarity index 100% rename from commands/i386/cpuid.c rename to grub-core/commands/i386/cpuid.c diff --git a/commands/i386/pc/acpi.c b/grub-core/commands/i386/pc/acpi.c similarity index 100% rename from commands/i386/pc/acpi.c rename to grub-core/commands/i386/pc/acpi.c diff --git a/commands/i386/pc/drivemap.c b/grub-core/commands/i386/pc/drivemap.c similarity index 100% rename from commands/i386/pc/drivemap.c rename to grub-core/commands/i386/pc/drivemap.c diff --git a/commands/i386/pc/drivemap_int13h.S b/grub-core/commands/i386/pc/drivemap_int13h.S similarity index 100% rename from commands/i386/pc/drivemap_int13h.S rename to grub-core/commands/i386/pc/drivemap_int13h.S diff --git a/commands/i386/pc/halt.c b/grub-core/commands/i386/pc/halt.c similarity index 100% rename from commands/i386/pc/halt.c rename to grub-core/commands/i386/pc/halt.c diff --git a/commands/i386/pc/play.c b/grub-core/commands/i386/pc/play.c similarity index 100% rename from commands/i386/pc/play.c rename to grub-core/commands/i386/pc/play.c diff --git a/commands/i386/pc/pxecmd.c b/grub-core/commands/i386/pc/pxecmd.c similarity index 100% rename from commands/i386/pc/pxecmd.c rename to grub-core/commands/i386/pc/pxecmd.c diff --git a/commands/i386/pc/vbeinfo.c b/grub-core/commands/i386/pc/vbeinfo.c similarity index 100% rename from commands/i386/pc/vbeinfo.c rename to grub-core/commands/i386/pc/vbeinfo.c diff --git a/commands/i386/pc/vbetest.c b/grub-core/commands/i386/pc/vbetest.c similarity index 100% rename from commands/i386/pc/vbetest.c rename to grub-core/commands/i386/pc/vbetest.c diff --git a/commands/ieee1275/suspend.c b/grub-core/commands/ieee1275/suspend.c similarity index 100% rename from commands/ieee1275/suspend.c rename to grub-core/commands/ieee1275/suspend.c diff --git a/commands/iorw.c b/grub-core/commands/iorw.c similarity index 100% rename from commands/iorw.c rename to grub-core/commands/iorw.c diff --git a/commands/keystatus.c b/grub-core/commands/keystatus.c similarity index 100% rename from commands/keystatus.c rename to grub-core/commands/keystatus.c diff --git a/commands/loadenv.c b/grub-core/commands/loadenv.c similarity index 100% rename from commands/loadenv.c rename to grub-core/commands/loadenv.c diff --git a/commands/ls.c b/grub-core/commands/ls.c similarity index 100% rename from commands/ls.c rename to grub-core/commands/ls.c diff --git a/commands/lsmmap.c b/grub-core/commands/lsmmap.c similarity index 100% rename from commands/lsmmap.c rename to grub-core/commands/lsmmap.c diff --git a/commands/lspci.c b/grub-core/commands/lspci.c similarity index 100% rename from commands/lspci.c rename to grub-core/commands/lspci.c diff --git a/commands/memrw.c b/grub-core/commands/memrw.c similarity index 100% rename from commands/memrw.c rename to grub-core/commands/memrw.c diff --git a/commands/minicmd.c b/grub-core/commands/minicmd.c similarity index 100% rename from commands/minicmd.c rename to grub-core/commands/minicmd.c diff --git a/commands/parttool.c b/grub-core/commands/parttool.c similarity index 99% rename from commands/parttool.c rename to grub-core/commands/parttool.c index 528cf43d7..d38a8a98f 100644 --- a/commands/parttool.c +++ b/grub-core/commands/parttool.c @@ -175,7 +175,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), } /* Load modules. */ -#if !GRUB_NO_MODULES +#if defined(GRUB_MACHINE_EMU) { const char *prefix; prefix = grub_env_get ("prefix"); diff --git a/commands/password.c b/grub-core/commands/password.c similarity index 100% rename from commands/password.c rename to grub-core/commands/password.c diff --git a/commands/password_pbkdf2.c b/grub-core/commands/password_pbkdf2.c similarity index 100% rename from commands/password_pbkdf2.c rename to grub-core/commands/password_pbkdf2.c diff --git a/commands/probe.c b/grub-core/commands/probe.c similarity index 100% rename from commands/probe.c rename to grub-core/commands/probe.c diff --git a/commands/read.c b/grub-core/commands/read.c similarity index 100% rename from commands/read.c rename to grub-core/commands/read.c diff --git a/commands/reboot.c b/grub-core/commands/reboot.c similarity index 100% rename from commands/reboot.c rename to grub-core/commands/reboot.c diff --git a/commands/regexp.c b/grub-core/commands/regexp.c similarity index 100% rename from commands/regexp.c rename to grub-core/commands/regexp.c diff --git a/commands/search.c b/grub-core/commands/search.c similarity index 100% rename from commands/search.c rename to grub-core/commands/search.c diff --git a/commands/search_file.c b/grub-core/commands/search_file.c similarity index 100% rename from commands/search_file.c rename to grub-core/commands/search_file.c diff --git a/commands/search_label.c b/grub-core/commands/search_label.c similarity index 100% rename from commands/search_label.c rename to grub-core/commands/search_label.c diff --git a/commands/search_uuid.c b/grub-core/commands/search_uuid.c similarity index 100% rename from commands/search_uuid.c rename to grub-core/commands/search_uuid.c diff --git a/commands/search_wrap.c b/grub-core/commands/search_wrap.c similarity index 100% rename from commands/search_wrap.c rename to grub-core/commands/search_wrap.c diff --git a/commands/setpci.c b/grub-core/commands/setpci.c similarity index 100% rename from commands/setpci.c rename to grub-core/commands/setpci.c diff --git a/commands/sleep.c b/grub-core/commands/sleep.c similarity index 100% rename from commands/sleep.c rename to grub-core/commands/sleep.c diff --git a/commands/terminal.c b/grub-core/commands/terminal.c similarity index 100% rename from commands/terminal.c rename to grub-core/commands/terminal.c diff --git a/commands/test.c b/grub-core/commands/test.c similarity index 100% rename from commands/test.c rename to grub-core/commands/test.c diff --git a/commands/true.c b/grub-core/commands/true.c similarity index 100% rename from commands/true.c rename to grub-core/commands/true.c diff --git a/commands/usbtest.c b/grub-core/commands/usbtest.c similarity index 100% rename from commands/usbtest.c rename to grub-core/commands/usbtest.c diff --git a/commands/videotest.c b/grub-core/commands/videotest.c similarity index 100% rename from commands/videotest.c rename to grub-core/commands/videotest.c diff --git a/commands/xnu_uuid.c b/grub-core/commands/xnu_uuid.c similarity index 100% rename from commands/xnu_uuid.c rename to grub-core/commands/xnu_uuid.c diff --git a/conf/any-emu.rmk b/grub-core/conf/any-emu.rmk similarity index 100% rename from conf/any-emu.rmk rename to grub-core/conf/any-emu.rmk diff --git a/conf/common.rmk b/grub-core/conf/common.rmk similarity index 100% rename from conf/common.rmk rename to grub-core/conf/common.rmk diff --git a/conf/i386-coreboot.rmk b/grub-core/conf/i386-coreboot.rmk similarity index 100% rename from conf/i386-coreboot.rmk rename to grub-core/conf/i386-coreboot.rmk diff --git a/conf/i386-efi.rmk b/grub-core/conf/i386-efi.rmk similarity index 100% rename from conf/i386-efi.rmk rename to grub-core/conf/i386-efi.rmk diff --git a/conf/i386-ieee1275.rmk b/grub-core/conf/i386-ieee1275.rmk similarity index 100% rename from conf/i386-ieee1275.rmk rename to grub-core/conf/i386-ieee1275.rmk diff --git a/conf/i386-multiboot.rmk b/grub-core/conf/i386-multiboot.rmk similarity index 100% rename from conf/i386-multiboot.rmk rename to grub-core/conf/i386-multiboot.rmk diff --git a/conf/i386-pc-cygwin-img-ld.sc b/grub-core/conf/i386-pc-cygwin-img-ld.sc similarity index 100% rename from conf/i386-pc-cygwin-img-ld.sc rename to grub-core/conf/i386-pc-cygwin-img-ld.sc diff --git a/conf/i386-pc.rmk b/grub-core/conf/i386-pc.rmk similarity index 100% rename from conf/i386-pc.rmk rename to grub-core/conf/i386-pc.rmk diff --git a/conf/i386-qemu.rmk b/grub-core/conf/i386-qemu.rmk similarity index 100% rename from conf/i386-qemu.rmk rename to grub-core/conf/i386-qemu.rmk diff --git a/conf/i386.rmk b/grub-core/conf/i386.rmk similarity index 100% rename from conf/i386.rmk rename to grub-core/conf/i386.rmk diff --git a/conf/mips-qemu-mips.rmk b/grub-core/conf/mips-qemu-mips.rmk similarity index 100% rename from conf/mips-qemu-mips.rmk rename to grub-core/conf/mips-qemu-mips.rmk diff --git a/conf/mips-yeeloong.rmk b/grub-core/conf/mips-yeeloong.rmk similarity index 100% rename from conf/mips-yeeloong.rmk rename to grub-core/conf/mips-yeeloong.rmk diff --git a/conf/mips.rmk b/grub-core/conf/mips.rmk similarity index 100% rename from conf/mips.rmk rename to grub-core/conf/mips.rmk diff --git a/conf/powerpc-ieee1275.rmk b/grub-core/conf/powerpc-ieee1275.rmk similarity index 100% rename from conf/powerpc-ieee1275.rmk rename to grub-core/conf/powerpc-ieee1275.rmk diff --git a/conf/sparc64-ieee1275.rmk b/grub-core/conf/sparc64-ieee1275.rmk similarity index 100% rename from conf/sparc64-ieee1275.rmk rename to grub-core/conf/sparc64-ieee1275.rmk diff --git a/conf/tests.rmk b/grub-core/conf/tests.rmk similarity index 100% rename from conf/tests.rmk rename to grub-core/conf/tests.rmk diff --git a/conf/x86-efi.rmk b/grub-core/conf/x86-efi.rmk similarity index 100% rename from conf/x86-efi.rmk rename to grub-core/conf/x86-efi.rmk diff --git a/conf/x86_64-efi.rmk b/grub-core/conf/x86_64-efi.rmk similarity index 100% rename from conf/x86_64-efi.rmk rename to grub-core/conf/x86_64-efi.rmk diff --git a/grub-core/configure.ac b/grub-core/configure.ac new file mode 100644 index 000000000..ac462ea77 --- /dev/null +++ b/grub-core/configure.ac @@ -0,0 +1,91 @@ +# Process this file with autoconf to produce a configure script. + +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# This configure.ac is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +dnl This configure script is complicated, because GRUB needs to deal +dnl with three potentially different types: +dnl +dnl build -- the environment for building GRUB +dnl host -- the environment for running utilities +dnl target -- the environment for running GRUB +dnl +dnl In addition, GRUB needs to deal with a platform specification +dnl which specifies the system running GRUB, such as firmware. +dnl This is necessary because the target type in autoconf does not +dnl describe such a system very well. +dnl +dnl The current strategy is to build utilities using host +dnl cross-compiler and grub core and modules using target +dnl cross-compiler. For this we use nested packages approach, where +dnl top-level package grub utilities is built with HOSTCC and nested +dnl package (in grub-core directory) builds with TARGETCC. + +# NOTE: ../configure.ac must also be updated. +AC_INIT([GRUB],[1.98],[bug-grub@gnu.org]) +AC_CONFIG_AUX_DIR([.]) + +# Checks for host and target systems. +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +AM_INIT_AUTOMAKE() +AC_PREREQ(2.60) +AC_CONFIG_SRCDIR([include/grub/dl.h]) +AC_CONFIG_HEADER([config.h]) + +m4_include([configure.common]) + +TARGET_CPP="$TARGET_CC -E" +TARGET_CCAS=$TARGET_CC + +CC=$TARGET_CC +CPP=$TARGET_CC +CCAS=$TARGET_CC + +AC_SUBST(TARGET_CC) +AC_SUBST(TARGET_CPP) +AC_SUBST(TARGET_CCAS) +AC_SUBST(TARGET_IMG_LDSCRIPT) +AC_SUBST(TARGET_IMG_LDFLAGS) +AC_SUBST(TARGET_IMG_CFLAGS) +AC_SUBST(TARGET_OBJ2ELF) +AC_SUBST(TARGET_MODULE_FORMAT) +AC_SUBST(OBJCONV) +AC_SUBST(TARGET_APPLE_CC) +AC_SUBST(ASFLAGS) +AC_SUBST(TARGET_CFLAGS) +AC_SUBST(TARGET_ASFLAGS) +AC_SUBST(TARGET_LDFLAGS) +AC_SUBST(TARGET_CPPFLAGS) + +# Output files. +grub_CHECK_LINK_DIR +if test x"$link_dir" = xyes ; then + AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu]) + if test "$platform" != emu ; then + AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform]) + fi +else + mkdir -p include/grub 2>/dev/null + rm -rf include/grub/cpu + cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null + if test "$platform" != emu ; then + rm -rf include/grub/machine + cp -rp $srcdir/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null + fi +fi + +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([po/Makefile]) +AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h]) + +AC_OUTPUT diff --git a/disk/ata.c b/grub-core/disk/ata.c similarity index 100% rename from disk/ata.c rename to grub-core/disk/ata.c diff --git a/disk/ata_pthru.c b/grub-core/disk/ata_pthru.c similarity index 100% rename from disk/ata_pthru.c rename to grub-core/disk/ata_pthru.c diff --git a/disk/dmraid_nvidia.c b/grub-core/disk/dmraid_nvidia.c similarity index 100% rename from disk/dmraid_nvidia.c rename to grub-core/disk/dmraid_nvidia.c diff --git a/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c similarity index 100% rename from disk/efi/efidisk.c rename to grub-core/disk/efi/efidisk.c diff --git a/disk/host.c b/grub-core/disk/host.c similarity index 100% rename from disk/host.c rename to grub-core/disk/host.c diff --git a/disk/i386/pc/biosdisk.c b/grub-core/disk/i386/pc/biosdisk.c similarity index 100% rename from disk/i386/pc/biosdisk.c rename to grub-core/disk/i386/pc/biosdisk.c diff --git a/disk/ieee1275/nand.c b/grub-core/disk/ieee1275/nand.c similarity index 100% rename from disk/ieee1275/nand.c rename to grub-core/disk/ieee1275/nand.c diff --git a/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c similarity index 100% rename from disk/ieee1275/ofdisk.c rename to grub-core/disk/ieee1275/ofdisk.c diff --git a/disk/loopback.c b/grub-core/disk/loopback.c similarity index 100% rename from disk/loopback.c rename to grub-core/disk/loopback.c diff --git a/disk/lvm.c b/grub-core/disk/lvm.c similarity index 100% rename from disk/lvm.c rename to grub-core/disk/lvm.c diff --git a/disk/mdraid_linux.c b/grub-core/disk/mdraid_linux.c similarity index 100% rename from disk/mdraid_linux.c rename to grub-core/disk/mdraid_linux.c diff --git a/disk/memdisk.c b/grub-core/disk/memdisk.c similarity index 100% rename from disk/memdisk.c rename to grub-core/disk/memdisk.c diff --git a/disk/raid.c b/grub-core/disk/raid.c similarity index 100% rename from disk/raid.c rename to grub-core/disk/raid.c diff --git a/disk/raid5_recover.c b/grub-core/disk/raid5_recover.c similarity index 100% rename from disk/raid5_recover.c rename to grub-core/disk/raid5_recover.c diff --git a/disk/raid6_recover.c b/grub-core/disk/raid6_recover.c similarity index 100% rename from disk/raid6_recover.c rename to grub-core/disk/raid6_recover.c diff --git a/disk/scsi.c b/grub-core/disk/scsi.c similarity index 100% rename from disk/scsi.c rename to grub-core/disk/scsi.c diff --git a/disk/usbms.c b/grub-core/disk/usbms.c similarity index 100% rename from disk/usbms.c rename to grub-core/disk/usbms.c diff --git a/efiemu/i386/coredetect.c b/grub-core/efiemu/i386/coredetect.c similarity index 100% rename from efiemu/i386/coredetect.c rename to grub-core/efiemu/i386/coredetect.c diff --git a/efiemu/i386/loadcore32.c b/grub-core/efiemu/i386/loadcore32.c similarity index 100% rename from efiemu/i386/loadcore32.c rename to grub-core/efiemu/i386/loadcore32.c diff --git a/efiemu/i386/loadcore64.c b/grub-core/efiemu/i386/loadcore64.c similarity index 100% rename from efiemu/i386/loadcore64.c rename to grub-core/efiemu/i386/loadcore64.c diff --git a/efiemu/i386/pc/cfgtables.c b/grub-core/efiemu/i386/pc/cfgtables.c similarity index 100% rename from efiemu/i386/pc/cfgtables.c rename to grub-core/efiemu/i386/pc/cfgtables.c diff --git a/efiemu/loadcore.c b/grub-core/efiemu/loadcore.c similarity index 100% rename from efiemu/loadcore.c rename to grub-core/efiemu/loadcore.c diff --git a/efiemu/loadcore32.c b/grub-core/efiemu/loadcore32.c similarity index 100% rename from efiemu/loadcore32.c rename to grub-core/efiemu/loadcore32.c diff --git a/efiemu/loadcore64.c b/grub-core/efiemu/loadcore64.c similarity index 100% rename from efiemu/loadcore64.c rename to grub-core/efiemu/loadcore64.c diff --git a/efiemu/loadcore_common.c b/grub-core/efiemu/loadcore_common.c similarity index 100% rename from efiemu/loadcore_common.c rename to grub-core/efiemu/loadcore_common.c diff --git a/efiemu/main.c b/grub-core/efiemu/main.c similarity index 100% rename from efiemu/main.c rename to grub-core/efiemu/main.c diff --git a/efiemu/mm.c b/grub-core/efiemu/mm.c similarity index 100% rename from efiemu/mm.c rename to grub-core/efiemu/mm.c diff --git a/efiemu/pnvram.c b/grub-core/efiemu/pnvram.c similarity index 100% rename from efiemu/pnvram.c rename to grub-core/efiemu/pnvram.c diff --git a/efiemu/prepare.c b/grub-core/efiemu/prepare.c similarity index 100% rename from efiemu/prepare.c rename to grub-core/efiemu/prepare.c diff --git a/efiemu/prepare32.c b/grub-core/efiemu/prepare32.c similarity index 100% rename from efiemu/prepare32.c rename to grub-core/efiemu/prepare32.c diff --git a/efiemu/prepare64.c b/grub-core/efiemu/prepare64.c similarity index 100% rename from efiemu/prepare64.c rename to grub-core/efiemu/prepare64.c diff --git a/efiemu/runtime/config.h b/grub-core/efiemu/runtime/config.h similarity index 100% rename from efiemu/runtime/config.h rename to grub-core/efiemu/runtime/config.h diff --git a/efiemu/runtime/efiemu.S b/grub-core/efiemu/runtime/efiemu.S similarity index 100% rename from efiemu/runtime/efiemu.S rename to grub-core/efiemu/runtime/efiemu.S diff --git a/efiemu/runtime/efiemu.c b/grub-core/efiemu/runtime/efiemu.c similarity index 100% rename from efiemu/runtime/efiemu.c rename to grub-core/efiemu/runtime/efiemu.c diff --git a/efiemu/runtime/efiemu.sh b/grub-core/efiemu/runtime/efiemu.sh similarity index 100% rename from efiemu/runtime/efiemu.sh rename to grub-core/efiemu/runtime/efiemu.sh diff --git a/efiemu/symbols.c b/grub-core/efiemu/symbols.c similarity index 100% rename from efiemu/symbols.c rename to grub-core/efiemu/symbols.c diff --git a/font/font.c b/grub-core/font/font.c similarity index 100% rename from font/font.c rename to grub-core/font/font.c diff --git a/font/font_cmd.c b/grub-core/font/font_cmd.c similarity index 100% rename from font/font_cmd.c rename to grub-core/font/font_cmd.c diff --git a/fs/affs.c b/grub-core/fs/affs.c similarity index 100% rename from fs/affs.c rename to grub-core/fs/affs.c diff --git a/fs/afs.c b/grub-core/fs/afs.c similarity index 100% rename from fs/afs.c rename to grub-core/fs/afs.c diff --git a/fs/afs_be.c b/grub-core/fs/afs_be.c similarity index 100% rename from fs/afs_be.c rename to grub-core/fs/afs_be.c diff --git a/fs/befs.c b/grub-core/fs/befs.c similarity index 100% rename from fs/befs.c rename to grub-core/fs/befs.c diff --git a/fs/befs_be.c b/grub-core/fs/befs_be.c similarity index 100% rename from fs/befs_be.c rename to grub-core/fs/befs_be.c diff --git a/fs/cpio.c b/grub-core/fs/cpio.c similarity index 100% rename from fs/cpio.c rename to grub-core/fs/cpio.c diff --git a/fs/ext2.c b/grub-core/fs/ext2.c similarity index 100% rename from fs/ext2.c rename to grub-core/fs/ext2.c diff --git a/fs/fat.c b/grub-core/fs/fat.c similarity index 100% rename from fs/fat.c rename to grub-core/fs/fat.c diff --git a/fs/fshelp.c b/grub-core/fs/fshelp.c similarity index 100% rename from fs/fshelp.c rename to grub-core/fs/fshelp.c diff --git a/fs/hfs.c b/grub-core/fs/hfs.c similarity index 100% rename from fs/hfs.c rename to grub-core/fs/hfs.c diff --git a/fs/hfsplus.c b/grub-core/fs/hfsplus.c similarity index 100% rename from fs/hfsplus.c rename to grub-core/fs/hfsplus.c diff --git a/fs/i386/pc/pxe.c b/grub-core/fs/i386/pc/pxe.c similarity index 100% rename from fs/i386/pc/pxe.c rename to grub-core/fs/i386/pc/pxe.c diff --git a/fs/iso9660.c b/grub-core/fs/iso9660.c similarity index 100% rename from fs/iso9660.c rename to grub-core/fs/iso9660.c diff --git a/fs/jfs.c b/grub-core/fs/jfs.c similarity index 100% rename from fs/jfs.c rename to grub-core/fs/jfs.c diff --git a/fs/minix.c b/grub-core/fs/minix.c similarity index 100% rename from fs/minix.c rename to grub-core/fs/minix.c diff --git a/fs/nilfs2.c b/grub-core/fs/nilfs2.c similarity index 100% rename from fs/nilfs2.c rename to grub-core/fs/nilfs2.c diff --git a/fs/ntfs.c b/grub-core/fs/ntfs.c similarity index 100% rename from fs/ntfs.c rename to grub-core/fs/ntfs.c diff --git a/fs/ntfscomp.c b/grub-core/fs/ntfscomp.c similarity index 100% rename from fs/ntfscomp.c rename to grub-core/fs/ntfscomp.c diff --git a/fs/reiserfs.c b/grub-core/fs/reiserfs.c similarity index 100% rename from fs/reiserfs.c rename to grub-core/fs/reiserfs.c diff --git a/fs/sfs.c b/grub-core/fs/sfs.c similarity index 100% rename from fs/sfs.c rename to grub-core/fs/sfs.c diff --git a/fs/tar.c b/grub-core/fs/tar.c similarity index 100% rename from fs/tar.c rename to grub-core/fs/tar.c diff --git a/fs/udf.c b/grub-core/fs/udf.c similarity index 100% rename from fs/udf.c rename to grub-core/fs/udf.c diff --git a/fs/ufs.c b/grub-core/fs/ufs.c similarity index 100% rename from fs/ufs.c rename to grub-core/fs/ufs.c diff --git a/fs/ufs2.c b/grub-core/fs/ufs2.c similarity index 100% rename from fs/ufs2.c rename to grub-core/fs/ufs2.c diff --git a/fs/xfs.c b/grub-core/fs/xfs.c similarity index 100% rename from fs/xfs.c rename to grub-core/fs/xfs.c diff --git a/gencmdlist.sh b/grub-core/gencmdlist.sh similarity index 100% rename from gencmdlist.sh rename to grub-core/gencmdlist.sh diff --git a/gendistlist.sh b/grub-core/gendistlist.sh similarity index 100% rename from gendistlist.sh rename to grub-core/gendistlist.sh diff --git a/genemuinit.sh b/grub-core/genemuinit.sh similarity index 100% rename from genemuinit.sh rename to grub-core/genemuinit.sh diff --git a/genemuinitheader.sh b/grub-core/genemuinitheader.sh similarity index 100% rename from genemuinitheader.sh rename to grub-core/genemuinitheader.sh diff --git a/genfslist.sh b/grub-core/genfslist.sh similarity index 100% rename from genfslist.sh rename to grub-core/genfslist.sh diff --git a/genhandlerlist.sh b/grub-core/genhandlerlist.sh similarity index 100% rename from genhandlerlist.sh rename to grub-core/genhandlerlist.sh diff --git a/genmoddep.awk b/grub-core/genmoddep.awk similarity index 93% rename from genmoddep.awk rename to grub-core/genmoddep.awk index 48419a091..6c92e2fc7 100644 --- a/genmoddep.awk +++ b/grub-core/genmoddep.awk @@ -18,15 +18,14 @@ BEGIN { } } -# The first line contains a module name. -FNR == 1 { - module = $1 - next -}; - # The rest is undefined symbols. { - if ($1 in symtab) { + module = $2 + + # skip if empty + if ($1 == "" || $2 == "") + ; + else if ($1 in symtab) { modtab[module] = modtab[module] " " symtab[$1]; } else if ($1 != "__gnu_local_gp") { diff --git a/genmodsrc.sh b/grub-core/genmodsrc.sh similarity index 100% rename from genmodsrc.sh rename to grub-core/genmodsrc.sh diff --git a/genpartmaplist.sh b/grub-core/genpartmaplist.sh similarity index 100% rename from genpartmaplist.sh rename to grub-core/genpartmaplist.sh diff --git a/genparttoollist.sh b/grub-core/genparttoollist.sh similarity index 100% rename from genparttoollist.sh rename to grub-core/genparttoollist.sh diff --git a/gensymlist.sh.in b/grub-core/gensymlist.sh similarity index 84% rename from gensymlist.sh.in rename to grub-core/gensymlist.sh index 3c3ddfa6c..0ab56e9cb 100644 --- a/gensymlist.sh.in +++ b/grub-core/gensymlist.sh @@ -1,6 +1,6 @@ #! /bin/sh # -# Copyright (C) 2002,2006,2007,2008 Free Software Foundation, Inc. +# Copyright (C) 2002,2006,2007,2008,2009,2010 Free Software Foundation, Inc. # # This gensymlist.sh.in is free software; the author # gives unlimited permission to copy and/or distribute it, @@ -11,17 +11,11 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -### The configure script will replace these variables. - -: ${srcdir=@srcdir@} -: ${CC=@TARGET_CC@} - - cat <. */ -#include EOF for i in $*; do @@ -60,7 +53,7 @@ cat < int -main () +main (int argc __attribute__ ((unused)), + char **argv __attribute__ ((unused))) { int i; diff --git a/genvideolist.sh b/grub-core/genvideolist.sh similarity index 100% rename from genvideolist.sh rename to grub-core/genvideolist.sh diff --git a/gettext/gettext.c b/grub-core/gettext/gettext.c similarity index 100% rename from gettext/gettext.c rename to grub-core/gettext/gettext.c diff --git a/gfxmenu/gfxmenu.c b/grub-core/gfxmenu/gfxmenu.c similarity index 100% rename from gfxmenu/gfxmenu.c rename to grub-core/gfxmenu/gfxmenu.c diff --git a/gfxmenu/gui_box.c b/grub-core/gfxmenu/gui_box.c similarity index 100% rename from gfxmenu/gui_box.c rename to grub-core/gfxmenu/gui_box.c diff --git a/gfxmenu/gui_canvas.c b/grub-core/gfxmenu/gui_canvas.c similarity index 100% rename from gfxmenu/gui_canvas.c rename to grub-core/gfxmenu/gui_canvas.c diff --git a/gfxmenu/gui_circular_progress.c b/grub-core/gfxmenu/gui_circular_progress.c similarity index 100% rename from gfxmenu/gui_circular_progress.c rename to grub-core/gfxmenu/gui_circular_progress.c diff --git a/gfxmenu/gui_image.c b/grub-core/gfxmenu/gui_image.c similarity index 100% rename from gfxmenu/gui_image.c rename to grub-core/gfxmenu/gui_image.c diff --git a/gfxmenu/gui_label.c b/grub-core/gfxmenu/gui_label.c similarity index 100% rename from gfxmenu/gui_label.c rename to grub-core/gfxmenu/gui_label.c diff --git a/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c similarity index 100% rename from gfxmenu/gui_list.c rename to grub-core/gfxmenu/gui_list.c diff --git a/gfxmenu/gui_progress_bar.c b/grub-core/gfxmenu/gui_progress_bar.c similarity index 100% rename from gfxmenu/gui_progress_bar.c rename to grub-core/gfxmenu/gui_progress_bar.c diff --git a/gfxmenu/gui_string_util.c b/grub-core/gfxmenu/gui_string_util.c similarity index 100% rename from gfxmenu/gui_string_util.c rename to grub-core/gfxmenu/gui_string_util.c diff --git a/gfxmenu/gui_util.c b/grub-core/gfxmenu/gui_util.c similarity index 100% rename from gfxmenu/gui_util.c rename to grub-core/gfxmenu/gui_util.c diff --git a/gfxmenu/icon_manager.c b/grub-core/gfxmenu/icon_manager.c similarity index 100% rename from gfxmenu/icon_manager.c rename to grub-core/gfxmenu/icon_manager.c diff --git a/gfxmenu/model.c b/grub-core/gfxmenu/model.c similarity index 100% rename from gfxmenu/model.c rename to grub-core/gfxmenu/model.c diff --git a/gfxmenu/named_colors.c b/grub-core/gfxmenu/named_colors.c similarity index 100% rename from gfxmenu/named_colors.c rename to grub-core/gfxmenu/named_colors.c diff --git a/gfxmenu/theme_loader.c b/grub-core/gfxmenu/theme_loader.c similarity index 100% rename from gfxmenu/theme_loader.c rename to grub-core/gfxmenu/theme_loader.c diff --git a/gfxmenu/view.c b/grub-core/gfxmenu/view.c similarity index 100% rename from gfxmenu/view.c rename to grub-core/gfxmenu/view.c diff --git a/gfxmenu/widget-box.c b/grub-core/gfxmenu/widget-box.c similarity index 100% rename from gfxmenu/widget-box.c rename to grub-core/gfxmenu/widget-box.c diff --git a/gnulib/alloca.h b/grub-core/gnulib/alloca.h similarity index 100% rename from gnulib/alloca.h rename to grub-core/gnulib/alloca.h diff --git a/gnulib/argp-ba.c b/grub-core/gnulib/argp-ba.c similarity index 100% rename from gnulib/argp-ba.c rename to grub-core/gnulib/argp-ba.c diff --git a/gnulib/argp-eexst.c b/grub-core/gnulib/argp-eexst.c similarity index 100% rename from gnulib/argp-eexst.c rename to grub-core/gnulib/argp-eexst.c diff --git a/gnulib/argp-fmtstream.c b/grub-core/gnulib/argp-fmtstream.c similarity index 100% rename from gnulib/argp-fmtstream.c rename to grub-core/gnulib/argp-fmtstream.c diff --git a/gnulib/argp-fmtstream.h b/grub-core/gnulib/argp-fmtstream.h similarity index 100% rename from gnulib/argp-fmtstream.h rename to grub-core/gnulib/argp-fmtstream.h diff --git a/gnulib/argp-fs-xinl.c b/grub-core/gnulib/argp-fs-xinl.c similarity index 100% rename from gnulib/argp-fs-xinl.c rename to grub-core/gnulib/argp-fs-xinl.c diff --git a/gnulib/argp-help.c b/grub-core/gnulib/argp-help.c similarity index 100% rename from gnulib/argp-help.c rename to grub-core/gnulib/argp-help.c diff --git a/gnulib/argp-namefrob.h b/grub-core/gnulib/argp-namefrob.h similarity index 100% rename from gnulib/argp-namefrob.h rename to grub-core/gnulib/argp-namefrob.h diff --git a/gnulib/argp-parse.c b/grub-core/gnulib/argp-parse.c similarity index 100% rename from gnulib/argp-parse.c rename to grub-core/gnulib/argp-parse.c diff --git a/gnulib/argp-pin.c b/grub-core/gnulib/argp-pin.c similarity index 100% rename from gnulib/argp-pin.c rename to grub-core/gnulib/argp-pin.c diff --git a/gnulib/argp-pv.c b/grub-core/gnulib/argp-pv.c similarity index 100% rename from gnulib/argp-pv.c rename to grub-core/gnulib/argp-pv.c diff --git a/gnulib/argp-pvh.c b/grub-core/gnulib/argp-pvh.c similarity index 100% rename from gnulib/argp-pvh.c rename to grub-core/gnulib/argp-pvh.c diff --git a/gnulib/argp-version-etc.c b/grub-core/gnulib/argp-version-etc.c similarity index 100% rename from gnulib/argp-version-etc.c rename to grub-core/gnulib/argp-version-etc.c diff --git a/gnulib/argp-version-etc.h b/grub-core/gnulib/argp-version-etc.h similarity index 100% rename from gnulib/argp-version-etc.h rename to grub-core/gnulib/argp-version-etc.h diff --git a/gnulib/argp-xinl.c b/grub-core/gnulib/argp-xinl.c similarity index 100% rename from gnulib/argp-xinl.c rename to grub-core/gnulib/argp-xinl.c diff --git a/gnulib/argp.h b/grub-core/gnulib/argp.h similarity index 100% rename from gnulib/argp.h rename to grub-core/gnulib/argp.h diff --git a/gnulib/error.c b/grub-core/gnulib/error.c similarity index 100% rename from gnulib/error.c rename to grub-core/gnulib/error.c diff --git a/gnulib/error.h b/grub-core/gnulib/error.h similarity index 100% rename from gnulib/error.h rename to grub-core/gnulib/error.h diff --git a/gnulib/fnmatch.c b/grub-core/gnulib/fnmatch.c similarity index 100% rename from gnulib/fnmatch.c rename to grub-core/gnulib/fnmatch.c diff --git a/gnulib/fnmatch.h b/grub-core/gnulib/fnmatch.h similarity index 100% rename from gnulib/fnmatch.h rename to grub-core/gnulib/fnmatch.h diff --git a/gnulib/fnmatch_loop.c b/grub-core/gnulib/fnmatch_loop.c similarity index 100% rename from gnulib/fnmatch_loop.c rename to grub-core/gnulib/fnmatch_loop.c diff --git a/gnulib/getdelim.c b/grub-core/gnulib/getdelim.c similarity index 100% rename from gnulib/getdelim.c rename to grub-core/gnulib/getdelim.c diff --git a/gnulib/getline.c b/grub-core/gnulib/getline.c similarity index 100% rename from gnulib/getline.c rename to grub-core/gnulib/getline.c diff --git a/gnulib/getopt.c b/grub-core/gnulib/getopt.c similarity index 100% rename from gnulib/getopt.c rename to grub-core/gnulib/getopt.c diff --git a/gnulib/getopt.h b/grub-core/gnulib/getopt.h similarity index 100% rename from gnulib/getopt.h rename to grub-core/gnulib/getopt.h diff --git a/gnulib/getopt1.c b/grub-core/gnulib/getopt1.c similarity index 100% rename from gnulib/getopt1.c rename to grub-core/gnulib/getopt1.c diff --git a/gnulib/getopt_int.h b/grub-core/gnulib/getopt_int.h similarity index 100% rename from gnulib/getopt_int.h rename to grub-core/gnulib/getopt_int.h diff --git a/gnulib/gettext.h b/grub-core/gnulib/gettext.h similarity index 100% rename from gnulib/gettext.h rename to grub-core/gnulib/gettext.h diff --git a/gnulib/progname.c b/grub-core/gnulib/progname.c similarity index 100% rename from gnulib/progname.c rename to grub-core/gnulib/progname.c diff --git a/gnulib/progname.h b/grub-core/gnulib/progname.h similarity index 100% rename from gnulib/progname.h rename to grub-core/gnulib/progname.h diff --git a/gnulib/regcomp.c b/grub-core/gnulib/regcomp.c similarity index 100% rename from gnulib/regcomp.c rename to grub-core/gnulib/regcomp.c diff --git a/gnulib/regex.c b/grub-core/gnulib/regex.c similarity index 100% rename from gnulib/regex.c rename to grub-core/gnulib/regex.c diff --git a/gnulib/regex.h b/grub-core/gnulib/regex.h similarity index 100% rename from gnulib/regex.h rename to grub-core/gnulib/regex.h diff --git a/gnulib/regex_internal.c b/grub-core/gnulib/regex_internal.c similarity index 100% rename from gnulib/regex_internal.c rename to grub-core/gnulib/regex_internal.c diff --git a/gnulib/regex_internal.h b/grub-core/gnulib/regex_internal.h similarity index 100% rename from gnulib/regex_internal.h rename to grub-core/gnulib/regex_internal.h diff --git a/gnulib/regexec.c b/grub-core/gnulib/regexec.c similarity index 100% rename from gnulib/regexec.c rename to grub-core/gnulib/regexec.c diff --git a/hello/hello.c b/grub-core/hello/hello.c similarity index 100% rename from hello/hello.c rename to grub-core/hello/hello.c diff --git a/hook/datehook.c b/grub-core/hook/datehook.c similarity index 100% rename from hook/datehook.c rename to grub-core/hook/datehook.c diff --git a/util/import_gcry.py b/grub-core/import_gcry.py similarity index 100% rename from util/import_gcry.py rename to grub-core/import_gcry.py diff --git a/include/grub/acorn_filecore.h b/grub-core/include/grub/acorn_filecore.h similarity index 100% rename from include/grub/acorn_filecore.h rename to grub-core/include/grub/acorn_filecore.h diff --git a/include/grub/acpi.h b/grub-core/include/grub/acpi.h similarity index 100% rename from include/grub/acpi.h rename to grub-core/include/grub/acpi.h diff --git a/include/grub/aout.h b/grub-core/include/grub/aout.h similarity index 100% rename from include/grub/aout.h rename to grub-core/include/grub/aout.h diff --git a/include/grub/at_keyboard.h b/grub-core/include/grub/at_keyboard.h similarity index 100% rename from include/grub/at_keyboard.h rename to grub-core/include/grub/at_keyboard.h diff --git a/include/grub/ata.h b/grub-core/include/grub/ata.h similarity index 100% rename from include/grub/ata.h rename to grub-core/include/grub/ata.h diff --git a/include/grub/auth.h b/grub-core/include/grub/auth.h similarity index 100% rename from include/grub/auth.h rename to grub-core/include/grub/auth.h diff --git a/include/grub/autoefi.h b/grub-core/include/grub/autoefi.h similarity index 100% rename from include/grub/autoefi.h rename to grub-core/include/grub/autoefi.h diff --git a/include/grub/bitmap.h b/grub-core/include/grub/bitmap.h similarity index 100% rename from include/grub/bitmap.h rename to grub-core/include/grub/bitmap.h diff --git a/include/grub/bitmap_scale.h b/grub-core/include/grub/bitmap_scale.h similarity index 100% rename from include/grub/bitmap_scale.h rename to grub-core/include/grub/bitmap_scale.h diff --git a/include/grub/boot.h b/grub-core/include/grub/boot.h similarity index 100% rename from include/grub/boot.h rename to grub-core/include/grub/boot.h diff --git a/include/grub/bsdlabel.h b/grub-core/include/grub/bsdlabel.h similarity index 100% rename from include/grub/bsdlabel.h rename to grub-core/include/grub/bsdlabel.h diff --git a/include/grub/bufio.h b/grub-core/include/grub/bufio.h similarity index 100% rename from include/grub/bufio.h rename to grub-core/include/grub/bufio.h diff --git a/include/grub/cache.h b/grub-core/include/grub/cache.h similarity index 100% rename from include/grub/cache.h rename to grub-core/include/grub/cache.h diff --git a/include/grub/charset.h b/grub-core/include/grub/charset.h similarity index 100% rename from include/grub/charset.h rename to grub-core/include/grub/charset.h diff --git a/include/grub/cmos.h b/grub-core/include/grub/cmos.h similarity index 100% rename from include/grub/cmos.h rename to grub-core/include/grub/cmos.h diff --git a/include/grub/command.h b/grub-core/include/grub/command.h similarity index 100% rename from include/grub/command.h rename to grub-core/include/grub/command.h diff --git a/include/grub/crypto.h b/grub-core/include/grub/crypto.h similarity index 100% rename from include/grub/crypto.h rename to grub-core/include/grub/crypto.h diff --git a/include/grub/datetime.h b/grub-core/include/grub/datetime.h similarity index 100% rename from include/grub/datetime.h rename to grub-core/include/grub/datetime.h diff --git a/include/grub/device.h b/grub-core/include/grub/device.h similarity index 100% rename from include/grub/device.h rename to grub-core/include/grub/device.h diff --git a/include/grub/disk.h b/grub-core/include/grub/disk.h similarity index 100% rename from include/grub/disk.h rename to grub-core/include/grub/disk.h diff --git a/include/grub/dl.h b/grub-core/include/grub/dl.h similarity index 90% rename from include/grub/dl.h rename to grub-core/include/grub/dl.h index cfb7c2f99..f98539a4e 100644 --- a/include/grub/dl.h +++ b/grub-core/include/grub/dl.h @@ -25,6 +25,13 @@ #include #include +/* + * Macros GRUB_MOD_INIT and GRUB_MOD_FINI are also used by build rules + * to collect module names, so we define them only when they are not + * defined already. + */ + +#ifndef GRUB_MOD_INIT #define GRUB_MOD_INIT(name) \ static void grub_mod_init (grub_dl_t mod __attribute__ ((unused))) __attribute__ ((used)); \ void grub_##name##_init (void); \ @@ -32,7 +39,9 @@ void \ grub_##name##_init (void) { grub_mod_init (0); } \ static void \ grub_mod_init (grub_dl_t mod __attribute__ ((unused))) +#endif +#ifndef GRUB_MOD_FINI #define GRUB_MOD_FINI(name) \ static void grub_mod_fini (void) __attribute__ ((used)); \ void grub_##name##_fini (void); \ @@ -40,6 +49,7 @@ void \ grub_##name##_fini (void) { grub_mod_fini (); } \ static void \ grub_mod_fini (void) +#endif #ifdef APPLE_CC #define GRUB_MOD_NAME(name) \ @@ -91,28 +101,8 @@ grub_dl_t grub_dl_load_core (void *addr, grub_size_t size); int EXPORT_FUNC(grub_dl_unload) (grub_dl_t mod); void grub_dl_unload_unneeded (void); void grub_dl_unload_all (void); -#if defined (GRUB_UTIL) || defined (GRUB_TARGET_NO_MODULES) -#define GRUB_NO_MODULES 1 -#else -#define GRUB_NO_MODULES 0 -#endif -#if GRUB_NO_MODULES -static inline int -grub_dl_ref (grub_dl_t mod) -{ - (void) mod; - return 0; -} -static inline int -grub_dl_unref (grub_dl_t mod) -{ - (void) mod; - return 0; -} -#else int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); -#endif void EXPORT_FUNC(grub_dl_iterate) (int (*hook) (grub_dl_t mod)); grub_dl_t EXPORT_FUNC(grub_dl_get) (const char *name); grub_err_t grub_dl_register_symbol (const char *name, void *addr, @@ -121,7 +111,7 @@ grub_err_t grub_dl_register_symbol (const char *name, void *addr, grub_err_t grub_arch_dl_check_header (void *ehdr); grub_err_t grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr); -#if defined (_mips) && ! GRUB_NO_MODULES +#if defined (_mips) #define GRUB_LINKER_HAVE_INIT 1 void grub_arch_dl_init_linker (void); #endif diff --git a/include/grub/efi/api.h b/grub-core/include/grub/efi/api.h similarity index 100% rename from include/grub/efi/api.h rename to grub-core/include/grub/efi/api.h diff --git a/include/grub/efi/console.h b/grub-core/include/grub/efi/console.h similarity index 100% rename from include/grub/efi/console.h rename to grub-core/include/grub/efi/console.h diff --git a/include/grub/efi/console_control.h b/grub-core/include/grub/efi/console_control.h similarity index 100% rename from include/grub/efi/console_control.h rename to grub-core/include/grub/efi/console_control.h diff --git a/include/grub/efi/disk.h b/grub-core/include/grub/efi/disk.h similarity index 100% rename from include/grub/efi/disk.h rename to grub-core/include/grub/efi/disk.h diff --git a/include/grub/efi/efi.h b/grub-core/include/grub/efi/efi.h similarity index 100% rename from include/grub/efi/efi.h rename to grub-core/include/grub/efi/efi.h diff --git a/include/grub/efi/graphics_output.h b/grub-core/include/grub/efi/graphics_output.h similarity index 100% rename from include/grub/efi/graphics_output.h rename to grub-core/include/grub/efi/graphics_output.h diff --git a/include/grub/efi/memory.h b/grub-core/include/grub/efi/memory.h similarity index 100% rename from include/grub/efi/memory.h rename to grub-core/include/grub/efi/memory.h diff --git a/include/grub/efi/pe32.h b/grub-core/include/grub/efi/pe32.h similarity index 100% rename from include/grub/efi/pe32.h rename to grub-core/include/grub/efi/pe32.h diff --git a/include/grub/efi/time.h b/grub-core/include/grub/efi/time.h similarity index 100% rename from include/grub/efi/time.h rename to grub-core/include/grub/efi/time.h diff --git a/include/grub/efi/uga_draw.h b/grub-core/include/grub/efi/uga_draw.h similarity index 100% rename from include/grub/efi/uga_draw.h rename to grub-core/include/grub/efi/uga_draw.h diff --git a/include/grub/efiemu/efiemu.h b/grub-core/include/grub/efiemu/efiemu.h similarity index 100% rename from include/grub/efiemu/efiemu.h rename to grub-core/include/grub/efiemu/efiemu.h diff --git a/include/grub/efiemu/runtime.h b/grub-core/include/grub/efiemu/runtime.h similarity index 100% rename from include/grub/efiemu/runtime.h rename to grub-core/include/grub/efiemu/runtime.h diff --git a/include/grub/elf.h b/grub-core/include/grub/elf.h similarity index 100% rename from include/grub/elf.h rename to grub-core/include/grub/elf.h diff --git a/include/grub/elfload.h b/grub-core/include/grub/elfload.h similarity index 100% rename from include/grub/elfload.h rename to grub-core/include/grub/elfload.h diff --git a/include/grub/util/console.h b/grub-core/include/grub/emu/console.h similarity index 100% rename from include/grub/util/console.h rename to grub-core/include/grub/emu/console.h diff --git a/include/grub/util/getroot.h b/grub-core/include/grub/emu/getroot.h similarity index 94% rename from include/grub/util/getroot.h rename to grub-core/include/grub/emu/getroot.h index dff7b4df7..04a2805c8 100644 --- a/include/grub/util/getroot.h +++ b/grub-core/include/grub/emu/getroot.h @@ -28,6 +28,7 @@ enum grub_dev_abstraction_types { char *grub_guess_root_device (const char *dir); int grub_util_get_dev_abstraction (const char *os_dev); char *grub_util_get_grub_dev (const char *os_dev); +char *grub_make_system_path_relative_to_its_root (const char *path); const char *grub_util_check_block_device (const char *blk_dev); const char *grub_util_check_char_device (const char *blk_dev); diff --git a/include/grub/util/hostdisk.h b/grub-core/include/grub/emu/hostdisk.h similarity index 100% rename from include/grub/util/hostdisk.h rename to grub-core/include/grub/emu/hostdisk.h diff --git a/grub-core/include/grub/emu/misc.h b/grub-core/include/grub/emu/misc.h new file mode 100644 index 000000000..29c1d4a73 --- /dev/null +++ b/grub-core/include/grub/emu/misc.h @@ -0,0 +1,22 @@ +#ifndef GRUB_EMU_MISC_H +#define GRUB_EMU_MISC_H 1 + +#include +#include + +extern int verbosity; +extern const char *program_name; + +void grub_init_all (void); +void grub_fini_all (void); + +void * EXPORT_FUNC(xmalloc) (grub_size_t size); +void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size); +char * EXPORT_FUNC(xstrdup) (const char *str); +char * EXPORT_FUNC(xasprintf) (const char *fmt, ...); + +void EXPORT_FUNC(grub_util_warn) (const char *fmt, ...); +void EXPORT_FUNC(grub_util_info) (const char *fmt, ...); +void EXPORT_FUNC(grub_util_error) (const char *fmt, ...) __attribute__ ((noreturn)); + +#endif /* GRUB_EMU_MISC_H */ diff --git a/include/grub/env.h b/grub-core/include/grub/env.h similarity index 100% rename from include/grub/env.h rename to grub-core/include/grub/env.h diff --git a/include/grub/env_private.h b/grub-core/include/grub/env_private.h similarity index 100% rename from include/grub/env_private.h rename to grub-core/include/grub/env_private.h diff --git a/include/grub/err.h b/grub-core/include/grub/err.h similarity index 100% rename from include/grub/err.h rename to grub-core/include/grub/err.h diff --git a/include/grub/extcmd.h b/grub-core/include/grub/extcmd.h similarity index 100% rename from include/grub/extcmd.h rename to grub-core/include/grub/extcmd.h diff --git a/include/grub/fbblit.h b/grub-core/include/grub/fbblit.h similarity index 100% rename from include/grub/fbblit.h rename to grub-core/include/grub/fbblit.h diff --git a/include/grub/fbfill.h b/grub-core/include/grub/fbfill.h similarity index 100% rename from include/grub/fbfill.h rename to grub-core/include/grub/fbfill.h diff --git a/include/grub/fbutil.h b/grub-core/include/grub/fbutil.h similarity index 100% rename from include/grub/fbutil.h rename to grub-core/include/grub/fbutil.h diff --git a/include/grub/file.h b/grub-core/include/grub/file.h similarity index 100% rename from include/grub/file.h rename to grub-core/include/grub/file.h diff --git a/include/grub/font.h b/grub-core/include/grub/font.h similarity index 100% rename from include/grub/font.h rename to grub-core/include/grub/font.h diff --git a/include/grub/fontformat.h b/grub-core/include/grub/fontformat.h similarity index 100% rename from include/grub/fontformat.h rename to grub-core/include/grub/fontformat.h diff --git a/include/grub/fs.h b/grub-core/include/grub/fs.h similarity index 100% rename from include/grub/fs.h rename to grub-core/include/grub/fs.h diff --git a/include/grub/fshelp.h b/grub-core/include/grub/fshelp.h similarity index 100% rename from include/grub/fshelp.h rename to grub-core/include/grub/fshelp.h diff --git a/include/grub/gfxmenu_model.h b/grub-core/include/grub/gfxmenu_model.h similarity index 100% rename from include/grub/gfxmenu_model.h rename to grub-core/include/grub/gfxmenu_model.h diff --git a/include/grub/gfxmenu_view.h b/grub-core/include/grub/gfxmenu_view.h similarity index 100% rename from include/grub/gfxmenu_view.h rename to grub-core/include/grub/gfxmenu_view.h diff --git a/include/grub/gfxterm.h b/grub-core/include/grub/gfxterm.h similarity index 100% rename from include/grub/gfxterm.h rename to grub-core/include/grub/gfxterm.h diff --git a/include/grub/gfxwidgets.h b/grub-core/include/grub/gfxwidgets.h similarity index 100% rename from include/grub/gfxwidgets.h rename to grub-core/include/grub/gfxwidgets.h diff --git a/include/grub/gpt_partition.h b/grub-core/include/grub/gpt_partition.h similarity index 100% rename from include/grub/gpt_partition.h rename to grub-core/include/grub/gpt_partition.h diff --git a/include/grub/gui.h b/grub-core/include/grub/gui.h similarity index 100% rename from include/grub/gui.h rename to grub-core/include/grub/gui.h diff --git a/include/grub/gui_string_util.h b/grub-core/include/grub/gui_string_util.h similarity index 100% rename from include/grub/gui_string_util.h rename to grub-core/include/grub/gui_string_util.h diff --git a/include/grub/gzio.h b/grub-core/include/grub/gzio.h similarity index 100% rename from include/grub/gzio.h rename to grub-core/include/grub/gzio.h diff --git a/include/grub/handler.h b/grub-core/include/grub/handler.h similarity index 100% rename from include/grub/handler.h rename to grub-core/include/grub/handler.h diff --git a/include/grub/hfs.h b/grub-core/include/grub/hfs.h similarity index 100% rename from include/grub/hfs.h rename to grub-core/include/grub/hfs.h diff --git a/include/grub/i18n.h b/grub-core/include/grub/i18n.h similarity index 100% rename from include/grub/i18n.h rename to grub-core/include/grub/i18n.h diff --git a/include/grub/i386/at_keyboard.h b/grub-core/include/grub/i386/at_keyboard.h similarity index 100% rename from include/grub/i386/at_keyboard.h rename to grub-core/include/grub/i386/at_keyboard.h diff --git a/include/grub/i386/bsd.h b/grub-core/include/grub/i386/bsd.h similarity index 100% rename from include/grub/i386/bsd.h rename to grub-core/include/grub/i386/bsd.h diff --git a/include/grub/i386/cmos.h b/grub-core/include/grub/i386/cmos.h similarity index 100% rename from include/grub/i386/cmos.h rename to grub-core/include/grub/i386/cmos.h diff --git a/include/grub/i386/coreboot/boot.h b/grub-core/include/grub/i386/coreboot/boot.h similarity index 100% rename from include/grub/i386/coreboot/boot.h rename to grub-core/include/grub/i386/coreboot/boot.h diff --git a/include/grub/i386/coreboot/console.h b/grub-core/include/grub/i386/coreboot/console.h similarity index 100% rename from include/grub/i386/coreboot/console.h rename to grub-core/include/grub/i386/coreboot/console.h diff --git a/include/grub/i386/coreboot/init.h b/grub-core/include/grub/i386/coreboot/init.h similarity index 100% rename from include/grub/i386/coreboot/init.h rename to grub-core/include/grub/i386/coreboot/init.h diff --git a/include/grub/i386/coreboot/kernel.h b/grub-core/include/grub/i386/coreboot/kernel.h similarity index 100% rename from include/grub/i386/coreboot/kernel.h rename to grub-core/include/grub/i386/coreboot/kernel.h diff --git a/include/grub/i386/coreboot/loader.h b/grub-core/include/grub/i386/coreboot/loader.h similarity index 100% rename from include/grub/i386/coreboot/loader.h rename to grub-core/include/grub/i386/coreboot/loader.h diff --git a/include/grub/i386/coreboot/memory.h b/grub-core/include/grub/i386/coreboot/memory.h similarity index 100% rename from include/grub/i386/coreboot/memory.h rename to grub-core/include/grub/i386/coreboot/memory.h diff --git a/include/grub/i386/coreboot/serial.h b/grub-core/include/grub/i386/coreboot/serial.h similarity index 100% rename from include/grub/i386/coreboot/serial.h rename to grub-core/include/grub/i386/coreboot/serial.h diff --git a/include/grub/i386/coreboot/time.h b/grub-core/include/grub/i386/coreboot/time.h similarity index 100% rename from include/grub/i386/coreboot/time.h rename to grub-core/include/grub/i386/coreboot/time.h diff --git a/include/grub/i386/cpuid.h b/grub-core/include/grub/i386/cpuid.h similarity index 100% rename from include/grub/i386/cpuid.h rename to grub-core/include/grub/i386/cpuid.h diff --git a/include/grub/i386/efi/kernel.h b/grub-core/include/grub/i386/efi/kernel.h similarity index 100% rename from include/grub/i386/efi/kernel.h rename to grub-core/include/grub/i386/efi/kernel.h diff --git a/include/grub/i386/efi/loader.h b/grub-core/include/grub/i386/efi/loader.h similarity index 100% rename from include/grub/i386/efi/loader.h rename to grub-core/include/grub/i386/efi/loader.h diff --git a/include/grub/i386/efi/memory.h b/grub-core/include/grub/i386/efi/memory.h similarity index 100% rename from include/grub/i386/efi/memory.h rename to grub-core/include/grub/i386/efi/memory.h diff --git a/include/grub/i386/efi/serial.h b/grub-core/include/grub/i386/efi/serial.h similarity index 100% rename from include/grub/i386/efi/serial.h rename to grub-core/include/grub/i386/efi/serial.h diff --git a/include/grub/i386/efi/time.h b/grub-core/include/grub/i386/efi/time.h similarity index 100% rename from include/grub/i386/efi/time.h rename to grub-core/include/grub/i386/efi/time.h diff --git a/include/grub/i386/efiemu.h b/grub-core/include/grub/i386/efiemu.h similarity index 100% rename from include/grub/i386/efiemu.h rename to grub-core/include/grub/i386/efiemu.h diff --git a/include/grub/i386/freebsd_linker.h b/grub-core/include/grub/i386/freebsd_linker.h similarity index 100% rename from include/grub/i386/freebsd_linker.h rename to grub-core/include/grub/i386/freebsd_linker.h diff --git a/include/grub/i386/freebsd_reboot.h b/grub-core/include/grub/i386/freebsd_reboot.h similarity index 100% rename from include/grub/i386/freebsd_reboot.h rename to grub-core/include/grub/i386/freebsd_reboot.h diff --git a/include/grub/i386/ieee1275/console.h b/grub-core/include/grub/i386/ieee1275/console.h similarity index 100% rename from include/grub/i386/ieee1275/console.h rename to grub-core/include/grub/i386/ieee1275/console.h diff --git a/include/grub/i386/ieee1275/ieee1275.h b/grub-core/include/grub/i386/ieee1275/ieee1275.h similarity index 100% rename from include/grub/i386/ieee1275/ieee1275.h rename to grub-core/include/grub/i386/ieee1275/ieee1275.h diff --git a/include/grub/i386/ieee1275/kernel.h b/grub-core/include/grub/i386/ieee1275/kernel.h similarity index 100% rename from include/grub/i386/ieee1275/kernel.h rename to grub-core/include/grub/i386/ieee1275/kernel.h diff --git a/include/grub/i386/ieee1275/loader.h b/grub-core/include/grub/i386/ieee1275/loader.h similarity index 100% rename from include/grub/i386/ieee1275/loader.h rename to grub-core/include/grub/i386/ieee1275/loader.h diff --git a/include/grub/i386/ieee1275/memory.h b/grub-core/include/grub/i386/ieee1275/memory.h similarity index 100% rename from include/grub/i386/ieee1275/memory.h rename to grub-core/include/grub/i386/ieee1275/memory.h diff --git a/include/grub/i386/ieee1275/serial.h b/grub-core/include/grub/i386/ieee1275/serial.h similarity index 100% rename from include/grub/i386/ieee1275/serial.h rename to grub-core/include/grub/i386/ieee1275/serial.h diff --git a/include/grub/i386/ieee1275/time.h b/grub-core/include/grub/i386/ieee1275/time.h similarity index 100% rename from include/grub/i386/ieee1275/time.h rename to grub-core/include/grub/i386/ieee1275/time.h diff --git a/include/grub/i386/io.h b/grub-core/include/grub/i386/io.h similarity index 100% rename from include/grub/i386/io.h rename to grub-core/include/grub/i386/io.h diff --git a/include/grub/i386/kernel.h b/grub-core/include/grub/i386/kernel.h similarity index 100% rename from include/grub/i386/kernel.h rename to grub-core/include/grub/i386/kernel.h diff --git a/include/grub/i386/linux.h b/grub-core/include/grub/i386/linux.h similarity index 100% rename from include/grub/i386/linux.h rename to grub-core/include/grub/i386/linux.h diff --git a/include/grub/i386/loader.h b/grub-core/include/grub/i386/loader.h similarity index 100% rename from include/grub/i386/loader.h rename to grub-core/include/grub/i386/loader.h diff --git a/include/grub/i386/macho.h b/grub-core/include/grub/i386/macho.h similarity index 100% rename from include/grub/i386/macho.h rename to grub-core/include/grub/i386/macho.h diff --git a/include/grub/i386/memory.h b/grub-core/include/grub/i386/memory.h similarity index 100% rename from include/grub/i386/memory.h rename to grub-core/include/grub/i386/memory.h diff --git a/include/grub/i386/multiboot.h b/grub-core/include/grub/i386/multiboot.h similarity index 100% rename from include/grub/i386/multiboot.h rename to grub-core/include/grub/i386/multiboot.h diff --git a/include/grub/i386/multiboot/boot.h b/grub-core/include/grub/i386/multiboot/boot.h similarity index 100% rename from include/grub/i386/multiboot/boot.h rename to grub-core/include/grub/i386/multiboot/boot.h diff --git a/include/grub/i386/multiboot/console.h b/grub-core/include/grub/i386/multiboot/console.h similarity index 100% rename from include/grub/i386/multiboot/console.h rename to grub-core/include/grub/i386/multiboot/console.h diff --git a/include/grub/i386/multiboot/init.h b/grub-core/include/grub/i386/multiboot/init.h similarity index 100% rename from include/grub/i386/multiboot/init.h rename to grub-core/include/grub/i386/multiboot/init.h diff --git a/include/grub/i386/multiboot/kernel.h b/grub-core/include/grub/i386/multiboot/kernel.h similarity index 100% rename from include/grub/i386/multiboot/kernel.h rename to grub-core/include/grub/i386/multiboot/kernel.h diff --git a/include/grub/i386/multiboot/loader.h b/grub-core/include/grub/i386/multiboot/loader.h similarity index 100% rename from include/grub/i386/multiboot/loader.h rename to grub-core/include/grub/i386/multiboot/loader.h diff --git a/include/grub/i386/multiboot/memory.h b/grub-core/include/grub/i386/multiboot/memory.h similarity index 100% rename from include/grub/i386/multiboot/memory.h rename to grub-core/include/grub/i386/multiboot/memory.h diff --git a/include/grub/i386/multiboot/serial.h b/grub-core/include/grub/i386/multiboot/serial.h similarity index 100% rename from include/grub/i386/multiboot/serial.h rename to grub-core/include/grub/i386/multiboot/serial.h diff --git a/include/grub/i386/multiboot/time.h b/grub-core/include/grub/i386/multiboot/time.h similarity index 100% rename from include/grub/i386/multiboot/time.h rename to grub-core/include/grub/i386/multiboot/time.h diff --git a/include/grub/i386/netbsd_bootinfo.h b/grub-core/include/grub/i386/netbsd_bootinfo.h similarity index 100% rename from include/grub/i386/netbsd_bootinfo.h rename to grub-core/include/grub/i386/netbsd_bootinfo.h diff --git a/include/grub/i386/netbsd_reboot.h b/grub-core/include/grub/i386/netbsd_reboot.h similarity index 100% rename from include/grub/i386/netbsd_reboot.h rename to grub-core/include/grub/i386/netbsd_reboot.h diff --git a/include/grub/i386/openbsd_bootarg.h b/grub-core/include/grub/i386/openbsd_bootarg.h similarity index 100% rename from include/grub/i386/openbsd_bootarg.h rename to grub-core/include/grub/i386/openbsd_bootarg.h diff --git a/include/grub/i386/openbsd_reboot.h b/grub-core/include/grub/i386/openbsd_reboot.h similarity index 100% rename from include/grub/i386/openbsd_reboot.h rename to grub-core/include/grub/i386/openbsd_reboot.h diff --git a/include/grub/i386/pc/biosdisk.h b/grub-core/include/grub/i386/pc/biosdisk.h similarity index 100% rename from include/grub/i386/pc/biosdisk.h rename to grub-core/include/grub/i386/pc/biosdisk.h diff --git a/include/grub/i386/pc/biosnum.h b/grub-core/include/grub/i386/pc/biosnum.h similarity index 100% rename from include/grub/i386/pc/biosnum.h rename to grub-core/include/grub/i386/pc/biosnum.h diff --git a/include/grub/i386/pc/boot.h b/grub-core/include/grub/i386/pc/boot.h similarity index 100% rename from include/grub/i386/pc/boot.h rename to grub-core/include/grub/i386/pc/boot.h diff --git a/include/grub/i386/pc/chainloader.h b/grub-core/include/grub/i386/pc/chainloader.h similarity index 100% rename from include/grub/i386/pc/chainloader.h rename to grub-core/include/grub/i386/pc/chainloader.h diff --git a/include/grub/i386/pc/console.h b/grub-core/include/grub/i386/pc/console.h similarity index 100% rename from include/grub/i386/pc/console.h rename to grub-core/include/grub/i386/pc/console.h diff --git a/include/grub/i386/pc/efiemu.h b/grub-core/include/grub/i386/pc/efiemu.h similarity index 100% rename from include/grub/i386/pc/efiemu.h rename to grub-core/include/grub/i386/pc/efiemu.h diff --git a/include/grub/i386/pc/init.h b/grub-core/include/grub/i386/pc/init.h similarity index 100% rename from include/grub/i386/pc/init.h rename to grub-core/include/grub/i386/pc/init.h diff --git a/include/grub/i386/pc/kernel.h b/grub-core/include/grub/i386/pc/kernel.h similarity index 100% rename from include/grub/i386/pc/kernel.h rename to grub-core/include/grub/i386/pc/kernel.h diff --git a/include/grub/i386/pc/loader.h b/grub-core/include/grub/i386/pc/loader.h similarity index 100% rename from include/grub/i386/pc/loader.h rename to grub-core/include/grub/i386/pc/loader.h diff --git a/include/grub/i386/pc/memory.h b/grub-core/include/grub/i386/pc/memory.h similarity index 100% rename from include/grub/i386/pc/memory.h rename to grub-core/include/grub/i386/pc/memory.h diff --git a/include/grub/i386/pc/pxe.h b/grub-core/include/grub/i386/pc/pxe.h similarity index 100% rename from include/grub/i386/pc/pxe.h rename to grub-core/include/grub/i386/pc/pxe.h diff --git a/include/grub/i386/pc/time.h b/grub-core/include/grub/i386/pc/time.h similarity index 100% rename from include/grub/i386/pc/time.h rename to grub-core/include/grub/i386/pc/time.h diff --git a/include/grub/i386/pc/vbe.h b/grub-core/include/grub/i386/pc/vbe.h similarity index 100% rename from include/grub/i386/pc/vbe.h rename to grub-core/include/grub/i386/pc/vbe.h diff --git a/include/grub/i386/pc/vga.h b/grub-core/include/grub/i386/pc/vga.h similarity index 100% rename from include/grub/i386/pc/vga.h rename to grub-core/include/grub/i386/pc/vga.h diff --git a/include/grub/i386/pci.h b/grub-core/include/grub/i386/pci.h similarity index 100% rename from include/grub/i386/pci.h rename to grub-core/include/grub/i386/pci.h diff --git a/include/grub/i386/pit.h b/grub-core/include/grub/i386/pit.h similarity index 100% rename from include/grub/i386/pit.h rename to grub-core/include/grub/i386/pit.h diff --git a/include/grub/i386/qemu/boot.h b/grub-core/include/grub/i386/qemu/boot.h similarity index 100% rename from include/grub/i386/qemu/boot.h rename to grub-core/include/grub/i386/qemu/boot.h diff --git a/include/grub/i386/qemu/console.h b/grub-core/include/grub/i386/qemu/console.h similarity index 100% rename from include/grub/i386/qemu/console.h rename to grub-core/include/grub/i386/qemu/console.h diff --git a/include/grub/i386/qemu/init.h b/grub-core/include/grub/i386/qemu/init.h similarity index 100% rename from include/grub/i386/qemu/init.h rename to grub-core/include/grub/i386/qemu/init.h diff --git a/include/grub/i386/qemu/kernel.h b/grub-core/include/grub/i386/qemu/kernel.h similarity index 100% rename from include/grub/i386/qemu/kernel.h rename to grub-core/include/grub/i386/qemu/kernel.h diff --git a/include/grub/i386/qemu/loader.h b/grub-core/include/grub/i386/qemu/loader.h similarity index 100% rename from include/grub/i386/qemu/loader.h rename to grub-core/include/grub/i386/qemu/loader.h diff --git a/include/grub/i386/qemu/memory.h b/grub-core/include/grub/i386/qemu/memory.h similarity index 100% rename from include/grub/i386/qemu/memory.h rename to grub-core/include/grub/i386/qemu/memory.h diff --git a/include/grub/i386/qemu/serial.h b/grub-core/include/grub/i386/qemu/serial.h similarity index 100% rename from include/grub/i386/qemu/serial.h rename to grub-core/include/grub/i386/qemu/serial.h diff --git a/include/grub/i386/qemu/time.h b/grub-core/include/grub/i386/qemu/time.h similarity index 100% rename from include/grub/i386/qemu/time.h rename to grub-core/include/grub/i386/qemu/time.h diff --git a/include/grub/i386/relocator.h b/grub-core/include/grub/i386/relocator.h similarity index 100% rename from include/grub/i386/relocator.h rename to grub-core/include/grub/i386/relocator.h diff --git a/include/grub/i386/setjmp.h b/grub-core/include/grub/i386/setjmp.h similarity index 100% rename from include/grub/i386/setjmp.h rename to grub-core/include/grub/i386/setjmp.h diff --git a/include/grub/i386/time.h b/grub-core/include/grub/i386/time.h similarity index 100% rename from include/grub/i386/time.h rename to grub-core/include/grub/i386/time.h diff --git a/include/grub/i386/tsc.h b/grub-core/include/grub/i386/tsc.h similarity index 100% rename from include/grub/i386/tsc.h rename to grub-core/include/grub/i386/tsc.h diff --git a/include/grub/i386/types.h b/grub-core/include/grub/i386/types.h similarity index 100% rename from include/grub/i386/types.h rename to grub-core/include/grub/i386/types.h diff --git a/include/grub/i386/vga_common.h b/grub-core/include/grub/i386/vga_common.h similarity index 100% rename from include/grub/i386/vga_common.h rename to grub-core/include/grub/i386/vga_common.h diff --git a/include/grub/i386/xnu.h b/grub-core/include/grub/i386/xnu.h similarity index 100% rename from include/grub/i386/xnu.h rename to grub-core/include/grub/i386/xnu.h diff --git a/include/grub/icon_manager.h b/grub-core/include/grub/icon_manager.h similarity index 100% rename from include/grub/icon_manager.h rename to grub-core/include/grub/icon_manager.h diff --git a/include/grub/ieee1275/ieee1275.h b/grub-core/include/grub/ieee1275/ieee1275.h similarity index 100% rename from include/grub/ieee1275/ieee1275.h rename to grub-core/include/grub/ieee1275/ieee1275.h diff --git a/include/grub/ieee1275/ofdisk.h b/grub-core/include/grub/ieee1275/ofdisk.h similarity index 100% rename from include/grub/ieee1275/ofdisk.h rename to grub-core/include/grub/ieee1275/ofdisk.h diff --git a/include/grub/kernel.h b/grub-core/include/grub/kernel.h similarity index 100% rename from include/grub/kernel.h rename to grub-core/include/grub/kernel.h diff --git a/include/grub/lib/LzFind.h b/grub-core/include/grub/lib/LzFind.h similarity index 100% rename from include/grub/lib/LzFind.h rename to grub-core/include/grub/lib/LzFind.h diff --git a/include/grub/lib/LzHash.h b/grub-core/include/grub/lib/LzHash.h similarity index 100% rename from include/grub/lib/LzHash.h rename to grub-core/include/grub/lib/LzHash.h diff --git a/include/grub/lib/LzmaDec.h b/grub-core/include/grub/lib/LzmaDec.h similarity index 100% rename from include/grub/lib/LzmaDec.h rename to grub-core/include/grub/lib/LzmaDec.h diff --git a/include/grub/lib/LzmaEnc.h b/grub-core/include/grub/lib/LzmaEnc.h similarity index 100% rename from include/grub/lib/LzmaEnc.h rename to grub-core/include/grub/lib/LzmaEnc.h diff --git a/include/grub/lib/LzmaTypes.h b/grub-core/include/grub/lib/LzmaTypes.h similarity index 100% rename from include/grub/lib/LzmaTypes.h rename to grub-core/include/grub/lib/LzmaTypes.h diff --git a/include/grub/lib/arg.h b/grub-core/include/grub/lib/arg.h similarity index 100% rename from include/grub/lib/arg.h rename to grub-core/include/grub/lib/arg.h diff --git a/include/grub/lib/crc.h b/grub-core/include/grub/lib/crc.h similarity index 100% rename from include/grub/lib/crc.h rename to grub-core/include/grub/lib/crc.h diff --git a/include/grub/lib/envblk.h b/grub-core/include/grub/lib/envblk.h similarity index 100% rename from include/grub/lib/envblk.h rename to grub-core/include/grub/lib/envblk.h diff --git a/include/grub/lib/hexdump.h b/grub-core/include/grub/lib/hexdump.h similarity index 100% rename from include/grub/lib/hexdump.h rename to grub-core/include/grub/lib/hexdump.h diff --git a/include/grub/libgcc.h b/grub-core/include/grub/libgcc.h similarity index 100% rename from include/grub/libgcc.h rename to grub-core/include/grub/libgcc.h diff --git a/include/grub/libpciaccess.h b/grub-core/include/grub/libpciaccess.h similarity index 100% rename from include/grub/libpciaccess.h rename to grub-core/include/grub/libpciaccess.h diff --git a/include/grub/libusb.h b/grub-core/include/grub/libusb.h similarity index 100% rename from include/grub/libusb.h rename to grub-core/include/grub/libusb.h diff --git a/include/grub/list.h b/grub-core/include/grub/list.h similarity index 100% rename from include/grub/list.h rename to grub-core/include/grub/list.h diff --git a/include/grub/loader.h b/grub-core/include/grub/loader.h similarity index 100% rename from include/grub/loader.h rename to grub-core/include/grub/loader.h diff --git a/include/grub/lvm.h b/grub-core/include/grub/lvm.h similarity index 100% rename from include/grub/lvm.h rename to grub-core/include/grub/lvm.h diff --git a/include/grub/macho.h b/grub-core/include/grub/macho.h similarity index 100% rename from include/grub/macho.h rename to grub-core/include/grub/macho.h diff --git a/include/grub/machoload.h b/grub-core/include/grub/machoload.h similarity index 100% rename from include/grub/machoload.h rename to grub-core/include/grub/machoload.h diff --git a/include/grub/memory.h b/grub-core/include/grub/memory.h similarity index 100% rename from include/grub/memory.h rename to grub-core/include/grub/memory.h diff --git a/include/grub/menu.h b/grub-core/include/grub/menu.h similarity index 100% rename from include/grub/menu.h rename to grub-core/include/grub/menu.h diff --git a/include/grub/menu_viewer.h b/grub-core/include/grub/menu_viewer.h similarity index 100% rename from include/grub/menu_viewer.h rename to grub-core/include/grub/menu_viewer.h diff --git a/include/grub/mips/at_keyboard.h b/grub-core/include/grub/mips/at_keyboard.h similarity index 100% rename from include/grub/mips/at_keyboard.h rename to grub-core/include/grub/mips/at_keyboard.h diff --git a/include/grub/mips/cache.h b/grub-core/include/grub/mips/cache.h similarity index 100% rename from include/grub/mips/cache.h rename to grub-core/include/grub/mips/cache.h diff --git a/include/grub/mips/cmos.h b/grub-core/include/grub/mips/cmos.h similarity index 100% rename from include/grub/mips/cmos.h rename to grub-core/include/grub/mips/cmos.h diff --git a/include/grub/mips/io.h b/grub-core/include/grub/mips/io.h similarity index 100% rename from include/grub/mips/io.h rename to grub-core/include/grub/mips/io.h diff --git a/include/grub/mips/kernel.h b/grub-core/include/grub/mips/kernel.h similarity index 100% rename from include/grub/mips/kernel.h rename to grub-core/include/grub/mips/kernel.h diff --git a/include/grub/mips/multiboot.h b/grub-core/include/grub/mips/multiboot.h similarity index 100% rename from include/grub/mips/multiboot.h rename to grub-core/include/grub/mips/multiboot.h diff --git a/include/grub/mips/pci.h b/grub-core/include/grub/mips/pci.h similarity index 100% rename from include/grub/mips/pci.h rename to grub-core/include/grub/mips/pci.h diff --git a/include/grub/mips/qemu-mips/boot.h b/grub-core/include/grub/mips/qemu-mips/boot.h similarity index 100% rename from include/grub/mips/qemu-mips/boot.h rename to grub-core/include/grub/mips/qemu-mips/boot.h diff --git a/include/grub/mips/qemu-mips/kernel.h b/grub-core/include/grub/mips/qemu-mips/kernel.h similarity index 100% rename from include/grub/mips/qemu-mips/kernel.h rename to grub-core/include/grub/mips/qemu-mips/kernel.h diff --git a/include/grub/mips/qemu-mips/loader.h b/grub-core/include/grub/mips/qemu-mips/loader.h similarity index 100% rename from include/grub/mips/qemu-mips/loader.h rename to grub-core/include/grub/mips/qemu-mips/loader.h diff --git a/include/grub/mips/qemu-mips/memory.h b/grub-core/include/grub/mips/qemu-mips/memory.h similarity index 100% rename from include/grub/mips/qemu-mips/memory.h rename to grub-core/include/grub/mips/qemu-mips/memory.h diff --git a/include/grub/mips/qemu-mips/serial.h b/grub-core/include/grub/mips/qemu-mips/serial.h similarity index 100% rename from include/grub/mips/qemu-mips/serial.h rename to grub-core/include/grub/mips/qemu-mips/serial.h diff --git a/include/grub/mips/qemu-mips/time.h b/grub-core/include/grub/mips/qemu-mips/time.h similarity index 100% rename from include/grub/mips/qemu-mips/time.h rename to grub-core/include/grub/mips/qemu-mips/time.h diff --git a/include/grub/mips/relocator.h b/grub-core/include/grub/mips/relocator.h similarity index 100% rename from include/grub/mips/relocator.h rename to grub-core/include/grub/mips/relocator.h diff --git a/include/grub/mips/setjmp.h b/grub-core/include/grub/mips/setjmp.h similarity index 100% rename from include/grub/mips/setjmp.h rename to grub-core/include/grub/mips/setjmp.h diff --git a/include/grub/mips/time.h b/grub-core/include/grub/mips/time.h similarity index 100% rename from include/grub/mips/time.h rename to grub-core/include/grub/mips/time.h diff --git a/include/grub/mips/types.h b/grub-core/include/grub/mips/types.h similarity index 100% rename from include/grub/mips/types.h rename to grub-core/include/grub/mips/types.h diff --git a/include/grub/mips/yeeloong/at_keyboard.h b/grub-core/include/grub/mips/yeeloong/at_keyboard.h similarity index 100% rename from include/grub/mips/yeeloong/at_keyboard.h rename to grub-core/include/grub/mips/yeeloong/at_keyboard.h diff --git a/include/grub/mips/yeeloong/boot.h b/grub-core/include/grub/mips/yeeloong/boot.h similarity index 100% rename from include/grub/mips/yeeloong/boot.h rename to grub-core/include/grub/mips/yeeloong/boot.h diff --git a/include/grub/mips/yeeloong/cmos.h b/grub-core/include/grub/mips/yeeloong/cmos.h similarity index 100% rename from include/grub/mips/yeeloong/cmos.h rename to grub-core/include/grub/mips/yeeloong/cmos.h diff --git a/include/grub/mips/yeeloong/kernel.h b/grub-core/include/grub/mips/yeeloong/kernel.h similarity index 100% rename from include/grub/mips/yeeloong/kernel.h rename to grub-core/include/grub/mips/yeeloong/kernel.h diff --git a/include/grub/mips/yeeloong/loader.h b/grub-core/include/grub/mips/yeeloong/loader.h similarity index 100% rename from include/grub/mips/yeeloong/loader.h rename to grub-core/include/grub/mips/yeeloong/loader.h diff --git a/include/grub/mips/yeeloong/memory.h b/grub-core/include/grub/mips/yeeloong/memory.h similarity index 100% rename from include/grub/mips/yeeloong/memory.h rename to grub-core/include/grub/mips/yeeloong/memory.h diff --git a/include/grub/mips/yeeloong/pci.h b/grub-core/include/grub/mips/yeeloong/pci.h similarity index 100% rename from include/grub/mips/yeeloong/pci.h rename to grub-core/include/grub/mips/yeeloong/pci.h diff --git a/include/grub/mips/yeeloong/serial.h b/grub-core/include/grub/mips/yeeloong/serial.h similarity index 100% rename from include/grub/mips/yeeloong/serial.h rename to grub-core/include/grub/mips/yeeloong/serial.h diff --git a/include/grub/mips/yeeloong/time.h b/grub-core/include/grub/mips/yeeloong/time.h similarity index 100% rename from include/grub/mips/yeeloong/time.h rename to grub-core/include/grub/mips/yeeloong/time.h diff --git a/include/grub/misc.h b/grub-core/include/grub/misc.h similarity index 100% rename from include/grub/misc.h rename to grub-core/include/grub/misc.h diff --git a/include/grub/mm.h b/grub-core/include/grub/mm.h similarity index 100% rename from include/grub/mm.h rename to grub-core/include/grub/mm.h diff --git a/include/grub/msdos_partition.h b/grub-core/include/grub/msdos_partition.h similarity index 100% rename from include/grub/msdos_partition.h rename to grub-core/include/grub/msdos_partition.h diff --git a/include/grub/multiboot.h b/grub-core/include/grub/multiboot.h similarity index 100% rename from include/grub/multiboot.h rename to grub-core/include/grub/multiboot.h diff --git a/include/grub/multiboot_loader.h b/grub-core/include/grub/multiboot_loader.h similarity index 100% rename from include/grub/multiboot_loader.h rename to grub-core/include/grub/multiboot_loader.h diff --git a/include/grub/net.h b/grub-core/include/grub/net.h similarity index 100% rename from include/grub/net.h rename to grub-core/include/grub/net.h diff --git a/include/grub/normal.h b/grub-core/include/grub/normal.h similarity index 100% rename from include/grub/normal.h rename to grub-core/include/grub/normal.h diff --git a/include/grub/ntfs.h b/grub-core/include/grub/ntfs.h similarity index 100% rename from include/grub/ntfs.h rename to grub-core/include/grub/ntfs.h diff --git a/include/grub/parser.h b/grub-core/include/grub/parser.h similarity index 100% rename from include/grub/parser.h rename to grub-core/include/grub/parser.h diff --git a/include/grub/partition.h b/grub-core/include/grub/partition.h similarity index 100% rename from include/grub/partition.h rename to grub-core/include/grub/partition.h diff --git a/include/grub/parttool.h b/grub-core/include/grub/parttool.h similarity index 100% rename from include/grub/parttool.h rename to grub-core/include/grub/parttool.h diff --git a/include/grub/pci.h b/grub-core/include/grub/pci.h similarity index 100% rename from include/grub/pci.h rename to grub-core/include/grub/pci.h diff --git a/include/grub/pciutils.h b/grub-core/include/grub/pciutils.h similarity index 100% rename from include/grub/pciutils.h rename to grub-core/include/grub/pciutils.h diff --git a/include/grub/powerpc/ieee1275/biosdisk.h b/grub-core/include/grub/powerpc/ieee1275/biosdisk.h similarity index 100% rename from include/grub/powerpc/ieee1275/biosdisk.h rename to grub-core/include/grub/powerpc/ieee1275/biosdisk.h diff --git a/include/grub/powerpc/ieee1275/console.h b/grub-core/include/grub/powerpc/ieee1275/console.h similarity index 100% rename from include/grub/powerpc/ieee1275/console.h rename to grub-core/include/grub/powerpc/ieee1275/console.h diff --git a/include/grub/powerpc/ieee1275/ieee1275.h b/grub-core/include/grub/powerpc/ieee1275/ieee1275.h similarity index 100% rename from include/grub/powerpc/ieee1275/ieee1275.h rename to grub-core/include/grub/powerpc/ieee1275/ieee1275.h diff --git a/include/grub/powerpc/ieee1275/kernel.h b/grub-core/include/grub/powerpc/ieee1275/kernel.h similarity index 100% rename from include/grub/powerpc/ieee1275/kernel.h rename to grub-core/include/grub/powerpc/ieee1275/kernel.h diff --git a/include/grub/powerpc/ieee1275/loader.h b/grub-core/include/grub/powerpc/ieee1275/loader.h similarity index 100% rename from include/grub/powerpc/ieee1275/loader.h rename to grub-core/include/grub/powerpc/ieee1275/loader.h diff --git a/include/grub/powerpc/ieee1275/memory.h b/grub-core/include/grub/powerpc/ieee1275/memory.h similarity index 100% rename from include/grub/powerpc/ieee1275/memory.h rename to grub-core/include/grub/powerpc/ieee1275/memory.h diff --git a/include/grub/powerpc/ieee1275/time.h b/grub-core/include/grub/powerpc/ieee1275/time.h similarity index 100% rename from include/grub/powerpc/ieee1275/time.h rename to grub-core/include/grub/powerpc/ieee1275/time.h diff --git a/include/grub/powerpc/ieee1275/util/biosdisk.h b/grub-core/include/grub/powerpc/ieee1275/util/biosdisk.h similarity index 100% rename from include/grub/powerpc/ieee1275/util/biosdisk.h rename to grub-core/include/grub/powerpc/ieee1275/util/biosdisk.h diff --git a/include/grub/powerpc/kernel.h b/grub-core/include/grub/powerpc/kernel.h similarity index 100% rename from include/grub/powerpc/kernel.h rename to grub-core/include/grub/powerpc/kernel.h diff --git a/include/grub/powerpc/setjmp.h b/grub-core/include/grub/powerpc/setjmp.h similarity index 100% rename from include/grub/powerpc/setjmp.h rename to grub-core/include/grub/powerpc/setjmp.h diff --git a/include/grub/powerpc/time.h b/grub-core/include/grub/powerpc/time.h similarity index 100% rename from include/grub/powerpc/time.h rename to grub-core/include/grub/powerpc/time.h diff --git a/include/grub/powerpc/types.h b/grub-core/include/grub/powerpc/types.h similarity index 100% rename from include/grub/powerpc/types.h rename to grub-core/include/grub/powerpc/types.h diff --git a/include/grub/raid.h b/grub-core/include/grub/raid.h similarity index 100% rename from include/grub/raid.h rename to grub-core/include/grub/raid.h diff --git a/include/grub/reader.h b/grub-core/include/grub/reader.h similarity index 100% rename from include/grub/reader.h rename to grub-core/include/grub/reader.h diff --git a/include/grub/script_sh.h b/grub-core/include/grub/script_sh.h similarity index 100% rename from include/grub/script_sh.h rename to grub-core/include/grub/script_sh.h diff --git a/include/grub/scsi.h b/grub-core/include/grub/scsi.h similarity index 100% rename from include/grub/scsi.h rename to grub-core/include/grub/scsi.h diff --git a/include/grub/scsicmd.h b/grub-core/include/grub/scsicmd.h similarity index 100% rename from include/grub/scsicmd.h rename to grub-core/include/grub/scsicmd.h diff --git a/include/grub/sdl.h b/grub-core/include/grub/sdl.h similarity index 100% rename from include/grub/sdl.h rename to grub-core/include/grub/sdl.h diff --git a/include/grub/search.h b/grub-core/include/grub/search.h similarity index 100% rename from include/grub/search.h rename to grub-core/include/grub/search.h diff --git a/include/grub/serial.h b/grub-core/include/grub/serial.h similarity index 100% rename from include/grub/serial.h rename to grub-core/include/grub/serial.h diff --git a/include/grub/setjmp.h b/grub-core/include/grub/setjmp.h similarity index 100% rename from include/grub/setjmp.h rename to grub-core/include/grub/setjmp.h diff --git a/include/grub/sparc64/ieee1275/boot.h b/grub-core/include/grub/sparc64/ieee1275/boot.h similarity index 100% rename from include/grub/sparc64/ieee1275/boot.h rename to grub-core/include/grub/sparc64/ieee1275/boot.h diff --git a/include/grub/sparc64/ieee1275/console.h b/grub-core/include/grub/sparc64/ieee1275/console.h similarity index 100% rename from include/grub/sparc64/ieee1275/console.h rename to grub-core/include/grub/sparc64/ieee1275/console.h diff --git a/include/grub/sparc64/ieee1275/ieee1275.h b/grub-core/include/grub/sparc64/ieee1275/ieee1275.h similarity index 100% rename from include/grub/sparc64/ieee1275/ieee1275.h rename to grub-core/include/grub/sparc64/ieee1275/ieee1275.h diff --git a/include/grub/sparc64/ieee1275/kernel.h b/grub-core/include/grub/sparc64/ieee1275/kernel.h similarity index 100% rename from include/grub/sparc64/ieee1275/kernel.h rename to grub-core/include/grub/sparc64/ieee1275/kernel.h diff --git a/include/grub/sparc64/ieee1275/loader.h b/grub-core/include/grub/sparc64/ieee1275/loader.h similarity index 100% rename from include/grub/sparc64/ieee1275/loader.h rename to grub-core/include/grub/sparc64/ieee1275/loader.h diff --git a/include/grub/sparc64/ieee1275/memory.h b/grub-core/include/grub/sparc64/ieee1275/memory.h similarity index 100% rename from include/grub/sparc64/ieee1275/memory.h rename to grub-core/include/grub/sparc64/ieee1275/memory.h diff --git a/include/grub/sparc64/ieee1275/time.h b/grub-core/include/grub/sparc64/ieee1275/time.h similarity index 100% rename from include/grub/sparc64/ieee1275/time.h rename to grub-core/include/grub/sparc64/ieee1275/time.h diff --git a/include/grub/sparc64/kernel.h b/grub-core/include/grub/sparc64/kernel.h similarity index 100% rename from include/grub/sparc64/kernel.h rename to grub-core/include/grub/sparc64/kernel.h diff --git a/include/grub/sparc64/setjmp.h b/grub-core/include/grub/sparc64/setjmp.h similarity index 100% rename from include/grub/sparc64/setjmp.h rename to grub-core/include/grub/sparc64/setjmp.h diff --git a/include/grub/sparc64/time.h b/grub-core/include/grub/sparc64/time.h similarity index 100% rename from include/grub/sparc64/time.h rename to grub-core/include/grub/sparc64/time.h diff --git a/include/grub/sparc64/types.h b/grub-core/include/grub/sparc64/types.h similarity index 100% rename from include/grub/sparc64/types.h rename to grub-core/include/grub/sparc64/types.h diff --git a/include/grub/symbol.h b/grub-core/include/grub/symbol.h similarity index 100% rename from include/grub/symbol.h rename to grub-core/include/grub/symbol.h diff --git a/include/grub/term.h b/grub-core/include/grub/term.h similarity index 100% rename from include/grub/term.h rename to grub-core/include/grub/term.h diff --git a/include/grub/terminfo.h b/grub-core/include/grub/terminfo.h similarity index 100% rename from include/grub/terminfo.h rename to grub-core/include/grub/terminfo.h diff --git a/include/grub/test.h b/grub-core/include/grub/test.h similarity index 93% rename from include/grub/test.h rename to grub-core/include/grub/test.h index 27591cca2..336d3b672 100644 --- a/include/grub/test.h +++ b/grub-core/include/grub/test.h @@ -72,14 +72,14 @@ void grub_test_nonzero (int cond, const char *file, /* Macro to define a functional test. */ #define GRUB_FUNCTIONAL_TEST(name, funp) \ - GRUB_MOD_INIT(functional_test_##funp) \ + GRUB_MOD_INIT(name) \ { \ - grub_test_register (name, funp); \ + grub_test_register (#name, funp); \ } \ \ - GRUB_MOD_FINI(functional_test_##funp) \ + GRUB_MOD_FINI(name) \ { \ - grub_test_unregister (name); \ + grub_test_unregister (#name); \ } #endif /* ! GRUB_TEST_HEADER */ diff --git a/include/grub/time.h b/grub-core/include/grub/time.h similarity index 100% rename from include/grub/time.h rename to grub-core/include/grub/time.h diff --git a/include/grub/tparm.h b/grub-core/include/grub/tparm.h similarity index 100% rename from include/grub/tparm.h rename to grub-core/include/grub/tparm.h diff --git a/include/grub/trig.h b/grub-core/include/grub/trig.h similarity index 100% rename from include/grub/trig.h rename to grub-core/include/grub/trig.h diff --git a/include/grub/types.h b/grub-core/include/grub/types.h similarity index 100% rename from include/grub/types.h rename to grub-core/include/grub/types.h diff --git a/include/grub/usb.h b/grub-core/include/grub/usb.h similarity index 100% rename from include/grub/usb.h rename to grub-core/include/grub/usb.h diff --git a/include/grub/usbdesc.h b/grub-core/include/grub/usbdesc.h similarity index 100% rename from include/grub/usbdesc.h rename to grub-core/include/grub/usbdesc.h diff --git a/include/grub/usbtrans.h b/grub-core/include/grub/usbtrans.h similarity index 100% rename from include/grub/usbtrans.h rename to grub-core/include/grub/usbtrans.h diff --git a/include/grub/util/deviceiter.h b/grub-core/include/grub/util/deviceiter.h similarity index 100% rename from include/grub/util/deviceiter.h rename to grub-core/include/grub/util/deviceiter.h diff --git a/include/grub/util/lvm.h b/grub-core/include/grub/util/lvm.h similarity index 100% rename from include/grub/util/lvm.h rename to grub-core/include/grub/util/lvm.h diff --git a/include/grub/util/misc.h b/grub-core/include/grub/util/misc.h similarity index 85% rename from include/grub/util/misc.h rename to grub-core/include/grub/util/misc.h index 8b78b92ea..ed71acdcd 100644 --- a/include/grub/util/misc.h +++ b/grub-core/include/grub/util/misc.h @@ -38,17 +38,6 @@ #define DEFAULT_DEVICE_MAP DEFAULT_DIRECTORY "/device.map" -extern char *progname; -extern int verbosity; - -void EXPORT_FUNC(grub_util_warn) (const char *fmt, ...); -void EXPORT_FUNC(grub_util_info) (const char *fmt, ...); -void EXPORT_FUNC(grub_util_error) (const char *fmt, ...) __attribute__ ((noreturn)); - -void *xmalloc (size_t size); -void *xrealloc (void *ptr, size_t size); -char *xstrdup (const char *str); - char *grub_util_get_path (const char *dir, const char *file); size_t grub_util_get_fp_size (FILE *fp); size_t grub_util_get_image_size (const char *path); @@ -71,8 +60,6 @@ int asprintf (char **buf, const char *fmt, ...); #endif -char *xasprintf (const char *fmt, ...); - #ifdef __MINGW32__ #define fseeko fseeko64 diff --git a/include/grub/util/ofpath.h b/grub-core/include/grub/util/ofpath.h similarity index 100% rename from include/grub/util/ofpath.h rename to grub-core/include/grub/util/ofpath.h diff --git a/include/grub/util/raid.h b/grub-core/include/grub/util/raid.h similarity index 100% rename from include/grub/util/raid.h rename to grub-core/include/grub/util/raid.h diff --git a/include/grub/util/resolve.h b/grub-core/include/grub/util/resolve.h similarity index 100% rename from include/grub/util/resolve.h rename to grub-core/include/grub/util/resolve.h diff --git a/include/grub/video.h b/grub-core/include/grub/video.h similarity index 100% rename from include/grub/video.h rename to grub-core/include/grub/video.h diff --git a/include/grub/video_fb.h b/grub-core/include/grub/video_fb.h similarity index 100% rename from include/grub/video_fb.h rename to grub-core/include/grub/video_fb.h diff --git a/include/grub/x86_64/at_keyboard.h b/grub-core/include/grub/x86_64/at_keyboard.h similarity index 100% rename from include/grub/x86_64/at_keyboard.h rename to grub-core/include/grub/x86_64/at_keyboard.h diff --git a/include/grub/x86_64/efi/kernel.h b/grub-core/include/grub/x86_64/efi/kernel.h similarity index 100% rename from include/grub/x86_64/efi/kernel.h rename to grub-core/include/grub/x86_64/efi/kernel.h diff --git a/include/grub/x86_64/efi/loader.h b/grub-core/include/grub/x86_64/efi/loader.h similarity index 100% rename from include/grub/x86_64/efi/loader.h rename to grub-core/include/grub/x86_64/efi/loader.h diff --git a/include/grub/x86_64/efi/memory.h b/grub-core/include/grub/x86_64/efi/memory.h similarity index 100% rename from include/grub/x86_64/efi/memory.h rename to grub-core/include/grub/x86_64/efi/memory.h diff --git a/include/grub/x86_64/efi/serial.h b/grub-core/include/grub/x86_64/efi/serial.h similarity index 100% rename from include/grub/x86_64/efi/serial.h rename to grub-core/include/grub/x86_64/efi/serial.h diff --git a/include/grub/x86_64/efi/time.h b/grub-core/include/grub/x86_64/efi/time.h similarity index 100% rename from include/grub/x86_64/efi/time.h rename to grub-core/include/grub/x86_64/efi/time.h diff --git a/include/grub/x86_64/io.h b/grub-core/include/grub/x86_64/io.h similarity index 100% rename from include/grub/x86_64/io.h rename to grub-core/include/grub/x86_64/io.h diff --git a/include/grub/x86_64/kernel.h b/grub-core/include/grub/x86_64/kernel.h similarity index 100% rename from include/grub/x86_64/kernel.h rename to grub-core/include/grub/x86_64/kernel.h diff --git a/include/grub/x86_64/linux.h b/grub-core/include/grub/x86_64/linux.h similarity index 100% rename from include/grub/x86_64/linux.h rename to grub-core/include/grub/x86_64/linux.h diff --git a/include/grub/x86_64/macho.h b/grub-core/include/grub/x86_64/macho.h similarity index 100% rename from include/grub/x86_64/macho.h rename to grub-core/include/grub/x86_64/macho.h diff --git a/include/grub/x86_64/multiboot.h b/grub-core/include/grub/x86_64/multiboot.h similarity index 100% rename from include/grub/x86_64/multiboot.h rename to grub-core/include/grub/x86_64/multiboot.h diff --git a/include/grub/x86_64/pci.h b/grub-core/include/grub/x86_64/pci.h similarity index 100% rename from include/grub/x86_64/pci.h rename to grub-core/include/grub/x86_64/pci.h diff --git a/include/grub/x86_64/relocator.h b/grub-core/include/grub/x86_64/relocator.h similarity index 100% rename from include/grub/x86_64/relocator.h rename to grub-core/include/grub/x86_64/relocator.h diff --git a/include/grub/x86_64/setjmp.h b/grub-core/include/grub/x86_64/setjmp.h similarity index 100% rename from include/grub/x86_64/setjmp.h rename to grub-core/include/grub/x86_64/setjmp.h diff --git a/include/grub/x86_64/time.h b/grub-core/include/grub/x86_64/time.h similarity index 100% rename from include/grub/x86_64/time.h rename to grub-core/include/grub/x86_64/time.h diff --git a/include/grub/x86_64/types.h b/grub-core/include/grub/x86_64/types.h similarity index 100% rename from include/grub/x86_64/types.h rename to grub-core/include/grub/x86_64/types.h diff --git a/include/grub/x86_64/xnu.h b/grub-core/include/grub/x86_64/xnu.h similarity index 100% rename from include/grub/x86_64/xnu.h rename to grub-core/include/grub/x86_64/xnu.h diff --git a/include/grub/xnu.h b/grub-core/include/grub/xnu.h similarity index 100% rename from include/grub/xnu.h rename to grub-core/include/grub/xnu.h diff --git a/include/multiboot.h b/grub-core/include/multiboot.h similarity index 100% rename from include/multiboot.h rename to grub-core/include/multiboot.h diff --git a/include/multiboot2.h b/grub-core/include/multiboot2.h similarity index 100% rename from include/multiboot2.h rename to grub-core/include/multiboot2.h diff --git a/io/bufio.c b/grub-core/io/bufio.c similarity index 100% rename from io/bufio.c rename to grub-core/io/bufio.c diff --git a/io/gzio.c b/grub-core/io/gzio.c similarity index 100% rename from io/gzio.c rename to grub-core/io/gzio.c diff --git a/kern/command.c b/grub-core/kern/command.c similarity index 100% rename from kern/command.c rename to grub-core/kern/command.c diff --git a/kern/corecmd.c b/grub-core/kern/corecmd.c similarity index 100% rename from kern/corecmd.c rename to grub-core/kern/corecmd.c diff --git a/kern/device.c b/grub-core/kern/device.c similarity index 100% rename from kern/device.c rename to grub-core/kern/device.c diff --git a/kern/disk.c b/grub-core/kern/disk.c similarity index 100% rename from kern/disk.c rename to grub-core/kern/disk.c diff --git a/kern/dl.c b/grub-core/kern/dl.c similarity index 99% rename from kern/dl.c rename to grub-core/kern/dl.c index 19ee13243..12391ced9 100644 --- a/kern/dl.c +++ b/grub-core/kern/dl.c @@ -469,12 +469,13 @@ grub_dl_resolve_dependencies (grub_dl_t mod, Elf_Ehdr *e) return GRUB_ERR_NONE; } -#if !GRUB_NO_MODULES int grub_dl_ref (grub_dl_t mod) { grub_dl_dep_t dep; + if (!mod) return 0; + for (dep = mod->dep; dep; dep = dep->next) grub_dl_ref (dep->mod); @@ -486,12 +487,13 @@ grub_dl_unref (grub_dl_t mod) { grub_dl_dep_t dep; + if (!mod) return 0; + for (dep = mod->dep; dep; dep = dep->next) grub_dl_unref (dep->mod); return --mod->ref_count; } -#endif static void grub_dl_flush_cache (grub_dl_t mod) diff --git a/kern/efi/efi.c b/grub-core/kern/efi/efi.c similarity index 100% rename from kern/efi/efi.c rename to grub-core/kern/efi/efi.c diff --git a/kern/efi/init.c b/grub-core/kern/efi/init.c similarity index 100% rename from kern/efi/init.c rename to grub-core/kern/efi/init.c diff --git a/kern/efi/mm.c b/grub-core/kern/efi/mm.c similarity index 100% rename from kern/efi/mm.c rename to grub-core/kern/efi/mm.c diff --git a/kern/elf.c b/grub-core/kern/elf.c similarity index 100% rename from kern/elf.c rename to grub-core/kern/elf.c diff --git a/grub-core/kern/emu/cache.S b/grub-core/kern/emu/cache.S new file mode 100644 index 000000000..087b2b495 --- /dev/null +++ b/grub-core/kern/emu/cache.S @@ -0,0 +1,17 @@ +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if GRUB_CPU_I386 +#elif GRUB_CPU_X86_64 +#elif GRUB_CPU_SPARC64 +#include "../sparc64/cache.S" +#elif GRUB_CPU_MIPS +#include "../mips/cache.S" +#elif GRUB_CPU_MIPSEL +#include "../mips/cache.S" +#elif GRUB_CPU_POWERPC +#include "../powerpc/cache.S" +#else +#error "No target cpu type is defined" +#endif diff --git a/util/console.c b/grub-core/kern/emu/console.c similarity index 99% rename from util/console.c rename to grub-core/kern/emu/console.c index 382fd7f89..f7fbc899a 100644 --- a/util/console.c +++ b/grub-core/kern/emu/console.c @@ -27,7 +27,7 @@ # define A_STANDOUT 0 #endif /* ! A_STANDOUT */ -#include +#include #include #include diff --git a/grub-core/kern/emu/dl.c b/grub-core/kern/emu/dl.c new file mode 100644 index 000000000..4266376a2 --- /dev/null +++ b/grub-core/kern/emu/dl.c @@ -0,0 +1,19 @@ +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if GRUB_CPU_I386 +#include "../i386/dl.c" +#elif GRUB_CPU_X86_64 +#include "../x86_64/dl.c" +#elif GRUB_CPU_SPARC64 +#include "../sparc64/dl.c" +#elif GRUB_CPU_MIPS +#include "../mips/dl.c" +#elif GRUB_CPU_MIPSEL +#include "../mips/dl.c" +#elif GRUB_CPU_POWERPC +#include "../powerpc/dl.c" +#else +#error "No target cpu type is defined" +#endif diff --git a/grub-core/kern/emu/dummy/dl.c b/grub-core/kern/emu/dummy/dl.c new file mode 100644 index 000000000..8e9fabfc2 --- /dev/null +++ b/grub-core/kern/emu/dummy/dl.c @@ -0,0 +1,51 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + (void) ehdr; + + return GRUB_ERR_BAD_MODULE; +} + +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) +{ + (void) mod; + (void) ehdr; + + return GRUB_ERR_BAD_MODULE; +} + +/* int */ +/* grub_dl_ref (grub_dl_t mod) */ +/* { */ +/* (void) mod; */ +/* return 0; */ +/* } */ + +/* int */ +/* grub_dl_unref (grub_dl_t mod) */ +/* { */ +/* (void) mod; */ +/* return 0; */ +/* } */ diff --git a/grub-core/kern/emu/dummy/symlist.c b/grub-core/kern/emu/dummy/symlist.c new file mode 100644 index 000000000..d1445a347 --- /dev/null +++ b/grub-core/kern/emu/dummy/symlist.c @@ -0,0 +1,26 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +void +grub_register_exported_symbols (void) +{ +} diff --git a/util/getroot.c b/grub-core/kern/emu/getroot.c similarity index 82% rename from util/getroot.c rename to grub-core/kern/emu/getroot.c index 891bd0f10..ba357d861 100644 --- a/util/getroot.c +++ b/grub-core/kern/emu/getroot.c @@ -22,6 +22,10 @@ #include #include #include +#include +#include +#include +#include #ifdef __CYGWIN__ # include @@ -36,9 +40,11 @@ #include #endif -#include -#include -#include +#include +#include +#include +#include +#include static void strip_extra_slashes (char *dir) @@ -541,3 +547,100 @@ grub_util_check_char_device (const char *blk_dev) return 0; } +/* This function never prints trailing slashes (so that its output + can be appended a slash unconditionally). */ +char * +grub_make_system_path_relative_to_its_root (const char *path) +{ + struct stat st; + char *p, *buf, *buf2, *buf3; + uintptr_t offset = 0; + dev_t num; + size_t len; + + /* canonicalize. */ + p = canonicalize_file_name (path); + + if (p == NULL) + grub_util_error ("failed to get canonical path of %s", path); + + len = strlen (p) + 1; + buf = xstrdup (p); + free (p); + + if (stat (buf, &st) < 0) + grub_util_error ("cannot stat %s: %s", buf, strerror (errno)); + + buf2 = xstrdup (buf); + num = st.st_dev; + + /* This loop sets offset to the number of chars of the root + directory we're inspecting. */ + while (1) + { + p = strrchr (buf, '/'); + if (p == NULL) + /* This should never happen. */ + grub_util_error ("FIXME: no / in buf. (make_system_path_relative_to_its_root)"); + if (p != buf) + *p = 0; + else + *++p = 0; + + if (stat (buf, &st) < 0) + grub_util_error ("cannot stat %s: %s", buf, strerror (errno)); + + /* buf is another filesystem; we found it. */ + if (st.st_dev != num) + { + /* offset == 0 means path given is the mount point. + This works around special-casing of "/" in Un*x. This function never + prints trailing slashes (so that its output can be appended a slash + unconditionally). Each slash in is considered a preceding slash, and + therefore the root directory is an empty string. */ + if (offset == 0) + { + free (buf); + free (buf2); + return xstrdup (""); + } + else + break; + } + + offset = p - buf; + /* offset == 1 means root directory. */ + if (offset == 1) + { + /* Include leading slash. */ + offset = 0; + break; + } + } + free (buf); + buf3 = xstrdup (buf2 + offset); + free (buf2); + +#ifdef __CYGWIN__ + if (st.st_dev != (DEV_CYGDRIVE_MAJOR << 16)) + { + /* Reached some mount point not below /cygdrive. + GRUB does not know Cygwin's emulated mounts, + convert to Win32 path. */ + grub_util_info ("Cygwin path = %s\n", buf3); + char * temp = get_win32_path (buf3); + free (buf3); + buf3 = temp; + } +#endif + + /* Remove trailing slashes, return empty string if root directory. */ + len = strlen (buf3); + while (len > 0 && buf3[len - 1] == '/') + { + buf3[len - 1] = '\0'; + len--; + } + + return buf3; +} diff --git a/util/hostdisk.c b/grub-core/kern/emu/hostdisk.c similarity index 99% rename from util/hostdisk.c rename to grub-core/kern/emu/hostdisk.c index 8be487461..983f101ae 100644 --- a/util/hostdisk.c +++ b/grub-core/kern/emu/hostdisk.c @@ -22,8 +22,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include diff --git a/util/hostfs.c b/grub-core/kern/emu/hostfs.c similarity index 100% rename from util/hostfs.c rename to grub-core/kern/emu/hostfs.c diff --git a/grub-core/kern/emu/lite.c b/grub-core/kern/emu/lite.c new file mode 100644 index 000000000..1f06e39dc --- /dev/null +++ b/grub-core/kern/emu/lite.c @@ -0,0 +1,16 @@ +#include +#include + +/* grub-emu-lite supports dynamic module loading, so it won't have any + embedded modules. */ +void +grub_init_all(void) +{ + return; +} + +void +grub_fini_all(void) +{ + return; +} diff --git a/util/grub-emu.c b/grub-core/kern/emu/main.c similarity index 90% rename from util/grub-emu.c rename to grub-core/kern/emu/main.c index 8c53b0aca..9083e27a0 100644 --- a/util/grub-emu.c +++ b/grub-core/kern/emu/main.c @@ -16,7 +16,10 @@ * along with GRUB. If not, see . */ +#include +#include #include +#include #include #include #include @@ -27,20 +30,22 @@ #include #include #include -#include -#include -#include +#include +#include +#include +#include #include #include #include -#include +#include #include #include #include -#define ENABLE_RELOCATABLE 0 #include "progname.h" +#define ENABLE_RELOCATABLE 0 + /* Used for going back to the main function. */ static jmp_buf main_env; @@ -53,25 +58,6 @@ grub_arch_modules_addr (void) return 0; } -#if GRUB_NO_MODULES -grub_err_t -grub_arch_dl_check_header (void *ehdr) -{ - (void) ehdr; - - return GRUB_ERR_BAD_MODULE; -} - -grub_err_t -grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) -{ - (void) mod; - (void) ehdr; - - return GRUB_ERR_BAD_MODULE; -} -#endif - void grub_reboot (void) { @@ -150,10 +136,6 @@ void grub_hostfs_init (void); void grub_hostfs_fini (void); void grub_host_init (void); void grub_host_fini (void); -#if GRUB_NO_MODULES -void grub_init_all (void); -void grub_fini_all (void); -#endif int main (int argc, char *argv[]) @@ -219,9 +201,8 @@ main (int argc, char *argv[]) /* XXX: This is a bit unportable. */ grub_util_biosdisk_init (dev_map); -#if GRUB_NO_MODULES + /* Initialize all embedded modules. */ grub_init_all (); -#endif /* Make sure that there is a root device. */ if (! root_dev) @@ -242,7 +223,7 @@ main (int argc, char *argv[]) if (strcmp (root_dev, "host") == 0) dir = xstrdup (dir); else - dir = make_system_path_relative_to_its_root (dir); + dir = grub_make_system_path_relative_to_its_root (dir); prefix = xmalloc (strlen (root_dev) + 2 + strlen (dir) + 1); sprintf (prefix, "(%s)%s", root_dev, dir); free (dir); @@ -251,9 +232,7 @@ main (int argc, char *argv[]) if (setjmp (main_env) == 0) grub_main (); -#if GRUB_NO_MODULES grub_fini_all (); -#endif grub_hostfs_fini (); grub_host_fini (); @@ -261,3 +240,25 @@ main (int argc, char *argv[]) return 0; } + +#ifdef __MINGW32__ + +void +grub_millisleep (grub_uint32_t ms) +{ + Sleep (ms); +} + +#else + +void +grub_millisleep (grub_uint32_t ms) +{ + struct timespec ts; + + ts.tv_sec = ms / 1000; + ts.tv_nsec = (ms % 1000) * 1000000; + nanosleep (&ts, NULL); +} + +#endif diff --git a/grub-core/kern/emu/misc.c b/grub-core/kern/emu/misc.c new file mode 100644 index 000000000..d8dfc938d --- /dev/null +++ b/grub-core/kern/emu/misc.c @@ -0,0 +1,199 @@ +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +int verbosity; + +void +grub_util_warn (const char *fmt, ...) +{ + va_list ap; + + fprintf (stderr, _("%s: warn:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + fflush (stderr); +} + +void +grub_util_info (const char *fmt, ...) +{ + if (verbosity > 0) + { + va_list ap; + + fprintf (stderr, _("%s: info:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + fflush (stderr); + } +} + +void +grub_util_error (const char *fmt, ...) +{ + va_list ap; + + fprintf (stderr, _("%s: error:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + exit (1); +} + +void * +grub_malloc (grub_size_t size) +{ + return malloc (size); +} + +void * +grub_zalloc (grub_size_t size) +{ + void *ret; + + ret = malloc (size); + memset (ret, 0, size); + return ret; +} + +void +grub_free (void *ptr) +{ + free (ptr); +} + +void * +grub_realloc (void *ptr, grub_size_t size) +{ + return realloc (ptr, size); +} + +void * +grub_memalign (grub_size_t align, grub_size_t size) +{ + void *p; + +#if defined(HAVE_POSIX_MEMALIGN) + if (align < sizeof (void *)) + align = sizeof (void *); + + else if (align % sizeof (void *)) + grub_fatal ("bad alignment"); + + if (posix_memalign (&p, align, size) != 0) + p = 0; +#elif defined(HAVE_MEMALIGN) + p = memalign (align, size); +#else + (void) align; + (void) size; + grub_fatal ("grub_memalign is not supported"); +#endif + + if (! p) + grub_fatal ("out of memory"); + + return p; +} + +void * +xmalloc (grub_size_t size) +{ + void *p; + + p = grub_malloc (size); + if (! p) + grub_fatal ("out of memory"); + + return p; +} + +void * +xrealloc (void *ptr, grub_size_t size) +{ + ptr = grub_realloc (ptr, size); + if (! ptr) + grub_fatal ("out of memory"); + + return ptr; +} + +char * +xstrdup (const char *str) +{ + size_t len; + char *newstr; + + len = grub_strlen (str); + newstr = (char *) xmalloc (len + 1); + grub_memcpy (newstr, str, len + 1); + + return newstr; +} + +char * +xasprintf (const char *fmt, ...) +{ + va_list ap; + char *result; + + va_start (ap, fmt); + if (vasprintf (&result, fmt, ap) < 0) + { + if (errno == ENOMEM) + grub_util_error ("out of memory"); + return NULL; + } + + return result; +} + +void +grub_exit (void) +{ + exit (1); +} + +grub_uint64_t +grub_get_time_ms (void) +{ + struct timeval tv; + + gettimeofday (&tv, 0); + + return (tv.tv_sec * 1000 + tv.tv_usec / 1000); +} + +grub_uint32_t +grub_get_rtc (void) +{ + struct timeval tv; + + gettimeofday (&tv, 0); + + return (tv.tv_sec * GRUB_TICKS_PER_SECOND + + (((tv.tv_sec % GRUB_TICKS_PER_SECOND) * 1000000 + tv.tv_usec) + * GRUB_TICKS_PER_SECOND / 1000000)); +} diff --git a/util/time.c b/grub-core/kern/emu/time.c similarity index 100% rename from util/time.c rename to grub-core/kern/emu/time.c diff --git a/kern/env.c b/grub-core/kern/env.c similarity index 100% rename from kern/env.c rename to grub-core/kern/env.c diff --git a/kern/err.c b/grub-core/kern/err.c similarity index 100% rename from kern/err.c rename to grub-core/kern/err.c diff --git a/kern/file.c b/grub-core/kern/file.c similarity index 100% rename from kern/file.c rename to grub-core/kern/file.c diff --git a/kern/fs.c b/grub-core/kern/fs.c similarity index 100% rename from kern/fs.c rename to grub-core/kern/fs.c diff --git a/kern/generic/millisleep.c b/grub-core/kern/generic/millisleep.c similarity index 100% rename from kern/generic/millisleep.c rename to grub-core/kern/generic/millisleep.c diff --git a/kern/generic/rtc_get_time_ms.c b/grub-core/kern/generic/rtc_get_time_ms.c similarity index 100% rename from kern/generic/rtc_get_time_ms.c rename to grub-core/kern/generic/rtc_get_time_ms.c diff --git a/kern/handler.c b/grub-core/kern/handler.c similarity index 100% rename from kern/handler.c rename to grub-core/kern/handler.c diff --git a/kern/i386/coreboot/init.c b/grub-core/kern/i386/coreboot/init.c similarity index 100% rename from kern/i386/coreboot/init.c rename to grub-core/kern/i386/coreboot/init.c diff --git a/kern/i386/coreboot/mmap.c b/grub-core/kern/i386/coreboot/mmap.c similarity index 100% rename from kern/i386/coreboot/mmap.c rename to grub-core/kern/i386/coreboot/mmap.c diff --git a/kern/i386/coreboot/startup.S b/grub-core/kern/i386/coreboot/startup.S similarity index 100% rename from kern/i386/coreboot/startup.S rename to grub-core/kern/i386/coreboot/startup.S diff --git a/kern/i386/dl.c b/grub-core/kern/i386/dl.c similarity index 100% rename from kern/i386/dl.c rename to grub-core/kern/i386/dl.c diff --git a/kern/i386/efi/init.c b/grub-core/kern/i386/efi/init.c similarity index 100% rename from kern/i386/efi/init.c rename to grub-core/kern/i386/efi/init.c diff --git a/kern/i386/efi/startup.S b/grub-core/kern/i386/efi/startup.S similarity index 100% rename from kern/i386/efi/startup.S rename to grub-core/kern/i386/efi/startup.S diff --git a/kern/i386/halt.c b/grub-core/kern/i386/halt.c similarity index 100% rename from kern/i386/halt.c rename to grub-core/kern/i386/halt.c diff --git a/kern/i386/ieee1275/init.c b/grub-core/kern/i386/ieee1275/init.c similarity index 100% rename from kern/i386/ieee1275/init.c rename to grub-core/kern/i386/ieee1275/init.c diff --git a/kern/i386/ieee1275/startup.S b/grub-core/kern/i386/ieee1275/startup.S similarity index 100% rename from kern/i386/ieee1275/startup.S rename to grub-core/kern/i386/ieee1275/startup.S diff --git a/kern/i386/loader.S b/grub-core/kern/i386/loader.S similarity index 100% rename from kern/i386/loader.S rename to grub-core/kern/i386/loader.S diff --git a/kern/i386/misc.S b/grub-core/kern/i386/misc.S similarity index 100% rename from kern/i386/misc.S rename to grub-core/kern/i386/misc.S diff --git a/kern/i386/multiboot_mmap.c b/grub-core/kern/i386/multiboot_mmap.c similarity index 100% rename from kern/i386/multiboot_mmap.c rename to grub-core/kern/i386/multiboot_mmap.c diff --git a/kern/i386/pc/init.c b/grub-core/kern/i386/pc/init.c similarity index 100% rename from kern/i386/pc/init.c rename to grub-core/kern/i386/pc/init.c diff --git a/kern/i386/pc/lzma_decode.S b/grub-core/kern/i386/pc/lzma_decode.S similarity index 100% rename from kern/i386/pc/lzma_decode.S rename to grub-core/kern/i386/pc/lzma_decode.S diff --git a/kern/i386/pc/mmap.c b/grub-core/kern/i386/pc/mmap.c similarity index 100% rename from kern/i386/pc/mmap.c rename to grub-core/kern/i386/pc/mmap.c diff --git a/kern/i386/pc/startup.S b/grub-core/kern/i386/pc/startup.S similarity index 100% rename from kern/i386/pc/startup.S rename to grub-core/kern/i386/pc/startup.S diff --git a/kern/i386/pit.c b/grub-core/kern/i386/pit.c similarity index 100% rename from kern/i386/pit.c rename to grub-core/kern/i386/pit.c diff --git a/kern/i386/qemu/mmap.c b/grub-core/kern/i386/qemu/mmap.c similarity index 100% rename from kern/i386/qemu/mmap.c rename to grub-core/kern/i386/qemu/mmap.c diff --git a/kern/i386/qemu/startup.S b/grub-core/kern/i386/qemu/startup.S similarity index 100% rename from kern/i386/qemu/startup.S rename to grub-core/kern/i386/qemu/startup.S diff --git a/kern/i386/realmode.S b/grub-core/kern/i386/realmode.S similarity index 100% rename from kern/i386/realmode.S rename to grub-core/kern/i386/realmode.S diff --git a/kern/i386/tsc.c b/grub-core/kern/i386/tsc.c similarity index 100% rename from kern/i386/tsc.c rename to grub-core/kern/i386/tsc.c diff --git a/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c similarity index 100% rename from kern/ieee1275/cmain.c rename to grub-core/kern/ieee1275/cmain.c diff --git a/kern/ieee1275/ieee1275.c b/grub-core/kern/ieee1275/ieee1275.c similarity index 100% rename from kern/ieee1275/ieee1275.c rename to grub-core/kern/ieee1275/ieee1275.c diff --git a/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c similarity index 100% rename from kern/ieee1275/init.c rename to grub-core/kern/ieee1275/init.c diff --git a/kern/ieee1275/mmap.c b/grub-core/kern/ieee1275/mmap.c similarity index 100% rename from kern/ieee1275/mmap.c rename to grub-core/kern/ieee1275/mmap.c diff --git a/kern/ieee1275/openfw.c b/grub-core/kern/ieee1275/openfw.c similarity index 100% rename from kern/ieee1275/openfw.c rename to grub-core/kern/ieee1275/openfw.c diff --git a/kern/list.c b/grub-core/kern/list.c similarity index 100% rename from kern/list.c rename to grub-core/kern/list.c diff --git a/kern/main.c b/grub-core/kern/main.c similarity index 100% rename from kern/main.c rename to grub-core/kern/main.c diff --git a/kern/mips/cache.S b/grub-core/kern/mips/cache.S similarity index 100% rename from kern/mips/cache.S rename to grub-core/kern/mips/cache.S diff --git a/kern/mips/cache_flush.S b/grub-core/kern/mips/cache_flush.S similarity index 100% rename from kern/mips/cache_flush.S rename to grub-core/kern/mips/cache_flush.S diff --git a/kern/mips/dl.c b/grub-core/kern/mips/dl.c similarity index 100% rename from kern/mips/dl.c rename to grub-core/kern/mips/dl.c diff --git a/kern/mips/init.c b/grub-core/kern/mips/init.c similarity index 100% rename from kern/mips/init.c rename to grub-core/kern/mips/init.c diff --git a/kern/mips/qemu-mips/init.c b/grub-core/kern/mips/qemu-mips/init.c similarity index 100% rename from kern/mips/qemu-mips/init.c rename to grub-core/kern/mips/qemu-mips/init.c diff --git a/kern/mips/startup.S b/grub-core/kern/mips/startup.S similarity index 100% rename from kern/mips/startup.S rename to grub-core/kern/mips/startup.S diff --git a/kern/mips/yeeloong/init.c b/grub-core/kern/mips/yeeloong/init.c similarity index 100% rename from kern/mips/yeeloong/init.c rename to grub-core/kern/mips/yeeloong/init.c diff --git a/kern/misc.c b/grub-core/kern/misc.c similarity index 100% rename from kern/misc.c rename to grub-core/kern/misc.c diff --git a/kern/mm.c b/grub-core/kern/mm.c similarity index 100% rename from kern/mm.c rename to grub-core/kern/mm.c diff --git a/kern/parser.c b/grub-core/kern/parser.c similarity index 100% rename from kern/parser.c rename to grub-core/kern/parser.c diff --git a/kern/partition.c b/grub-core/kern/partition.c similarity index 100% rename from kern/partition.c rename to grub-core/kern/partition.c diff --git a/kern/powerpc/cache.S b/grub-core/kern/powerpc/cache.S similarity index 100% rename from kern/powerpc/cache.S rename to grub-core/kern/powerpc/cache.S diff --git a/kern/powerpc/dl.c b/grub-core/kern/powerpc/dl.c similarity index 100% rename from kern/powerpc/dl.c rename to grub-core/kern/powerpc/dl.c diff --git a/kern/powerpc/ieee1275/startup.S b/grub-core/kern/powerpc/ieee1275/startup.S similarity index 100% rename from kern/powerpc/ieee1275/startup.S rename to grub-core/kern/powerpc/ieee1275/startup.S diff --git a/kern/rescue_parser.c b/grub-core/kern/rescue_parser.c similarity index 100% rename from kern/rescue_parser.c rename to grub-core/kern/rescue_parser.c diff --git a/kern/rescue_reader.c b/grub-core/kern/rescue_reader.c similarity index 100% rename from kern/rescue_reader.c rename to grub-core/kern/rescue_reader.c diff --git a/kern/sparc64/cache.S b/grub-core/kern/sparc64/cache.S similarity index 100% rename from kern/sparc64/cache.S rename to grub-core/kern/sparc64/cache.S diff --git a/kern/sparc64/dl.c b/grub-core/kern/sparc64/dl.c similarity index 100% rename from kern/sparc64/dl.c rename to grub-core/kern/sparc64/dl.c diff --git a/kern/sparc64/ieee1275/crt0.S b/grub-core/kern/sparc64/ieee1275/crt0.S similarity index 100% rename from kern/sparc64/ieee1275/crt0.S rename to grub-core/kern/sparc64/ieee1275/crt0.S diff --git a/kern/sparc64/ieee1275/ieee1275.c b/grub-core/kern/sparc64/ieee1275/ieee1275.c similarity index 100% rename from kern/sparc64/ieee1275/ieee1275.c rename to grub-core/kern/sparc64/ieee1275/ieee1275.c diff --git a/kern/sparc64/ieee1275/init.c b/grub-core/kern/sparc64/ieee1275/init.c similarity index 100% rename from kern/sparc64/ieee1275/init.c rename to grub-core/kern/sparc64/ieee1275/init.c diff --git a/kern/term.c b/grub-core/kern/term.c similarity index 100% rename from kern/term.c rename to grub-core/kern/term.c diff --git a/kern/time.c b/grub-core/kern/time.c similarity index 100% rename from kern/time.c rename to grub-core/kern/time.c diff --git a/kern/x86_64/dl.c b/grub-core/kern/x86_64/dl.c similarity index 100% rename from kern/x86_64/dl.c rename to grub-core/kern/x86_64/dl.c diff --git a/kern/x86_64/efi/callwrap.S b/grub-core/kern/x86_64/efi/callwrap.S similarity index 100% rename from kern/x86_64/efi/callwrap.S rename to grub-core/kern/x86_64/efi/callwrap.S diff --git a/kern/x86_64/efi/startup.S b/grub-core/kern/x86_64/efi/startup.S similarity index 100% rename from kern/x86_64/efi/startup.S rename to grub-core/kern/x86_64/efi/startup.S diff --git a/lib/LzFind.c b/grub-core/lib/LzFind.c similarity index 100% rename from lib/LzFind.c rename to grub-core/lib/LzFind.c diff --git a/lib/LzmaDec.c b/grub-core/lib/LzmaDec.c similarity index 100% rename from lib/LzmaDec.c rename to grub-core/lib/LzmaDec.c diff --git a/lib/LzmaEnc.c b/grub-core/lib/LzmaEnc.c similarity index 100% rename from lib/LzmaEnc.c rename to grub-core/lib/LzmaEnc.c diff --git a/lib/arg.c b/grub-core/lib/arg.c similarity index 100% rename from lib/arg.c rename to grub-core/lib/arg.c diff --git a/lib/charset.c b/grub-core/lib/charset.c similarity index 100% rename from lib/charset.c rename to grub-core/lib/charset.c diff --git a/lib/cmos_datetime.c b/grub-core/lib/cmos_datetime.c similarity index 100% rename from lib/cmos_datetime.c rename to grub-core/lib/cmos_datetime.c diff --git a/lib/crc.c b/grub-core/lib/crc.c similarity index 100% rename from lib/crc.c rename to grub-core/lib/crc.c diff --git a/lib/crypto.c b/grub-core/lib/crypto.c similarity index 100% rename from lib/crypto.c rename to grub-core/lib/crypto.c diff --git a/lib/efi/datetime.c b/grub-core/lib/efi/datetime.c similarity index 100% rename from lib/efi/datetime.c rename to grub-core/lib/efi/datetime.c diff --git a/lib/envblk.c b/grub-core/lib/envblk.c similarity index 100% rename from lib/envblk.c rename to grub-core/lib/envblk.c diff --git a/lib/hexdump.c b/grub-core/lib/hexdump.c similarity index 100% rename from lib/hexdump.c rename to grub-core/lib/hexdump.c diff --git a/lib/i386/pc/biosnum.c b/grub-core/lib/i386/pc/biosnum.c similarity index 100% rename from lib/i386/pc/biosnum.c rename to grub-core/lib/i386/pc/biosnum.c diff --git a/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c similarity index 100% rename from lib/i386/relocator.c rename to grub-core/lib/i386/relocator.c diff --git a/lib/i386/relocator_asm.S b/grub-core/lib/i386/relocator_asm.S similarity index 100% rename from lib/i386/relocator_asm.S rename to grub-core/lib/i386/relocator_asm.S diff --git a/lib/i386/relocator_backward.S b/grub-core/lib/i386/relocator_backward.S similarity index 100% rename from lib/i386/relocator_backward.S rename to grub-core/lib/i386/relocator_backward.S diff --git a/lib/i386/setjmp.S b/grub-core/lib/i386/setjmp.S similarity index 100% rename from lib/i386/setjmp.S rename to grub-core/lib/i386/setjmp.S diff --git a/lib/ieee1275/datetime.c b/grub-core/lib/ieee1275/datetime.c similarity index 100% rename from lib/ieee1275/datetime.c rename to grub-core/lib/ieee1275/datetime.c diff --git a/lib/libgcrypt/cipher/ChangeLog b/grub-core/lib/libgcrypt/cipher/ChangeLog similarity index 100% rename from lib/libgcrypt/cipher/ChangeLog rename to grub-core/lib/libgcrypt/cipher/ChangeLog diff --git a/lib/libgcrypt/cipher/ac.c b/grub-core/lib/libgcrypt/cipher/ac.c similarity index 100% rename from lib/libgcrypt/cipher/ac.c rename to grub-core/lib/libgcrypt/cipher/ac.c diff --git a/lib/libgcrypt/cipher/arcfour.c b/grub-core/lib/libgcrypt/cipher/arcfour.c similarity index 100% rename from lib/libgcrypt/cipher/arcfour.c rename to grub-core/lib/libgcrypt/cipher/arcfour.c diff --git a/lib/libgcrypt/cipher/bithelp.h b/grub-core/lib/libgcrypt/cipher/bithelp.h similarity index 100% rename from lib/libgcrypt/cipher/bithelp.h rename to grub-core/lib/libgcrypt/cipher/bithelp.h diff --git a/lib/libgcrypt/cipher/blowfish.c b/grub-core/lib/libgcrypt/cipher/blowfish.c similarity index 100% rename from lib/libgcrypt/cipher/blowfish.c rename to grub-core/lib/libgcrypt/cipher/blowfish.c diff --git a/lib/libgcrypt/cipher/camellia-glue.c b/grub-core/lib/libgcrypt/cipher/camellia-glue.c similarity index 100% rename from lib/libgcrypt/cipher/camellia-glue.c rename to grub-core/lib/libgcrypt/cipher/camellia-glue.c diff --git a/lib/libgcrypt/cipher/camellia.c b/grub-core/lib/libgcrypt/cipher/camellia.c similarity index 100% rename from lib/libgcrypt/cipher/camellia.c rename to grub-core/lib/libgcrypt/cipher/camellia.c diff --git a/lib/libgcrypt/cipher/camellia.h b/grub-core/lib/libgcrypt/cipher/camellia.h similarity index 100% rename from lib/libgcrypt/cipher/camellia.h rename to grub-core/lib/libgcrypt/cipher/camellia.h diff --git a/lib/libgcrypt/cipher/cast5.c b/grub-core/lib/libgcrypt/cipher/cast5.c similarity index 100% rename from lib/libgcrypt/cipher/cast5.c rename to grub-core/lib/libgcrypt/cipher/cast5.c diff --git a/lib/libgcrypt/cipher/cipher.c b/grub-core/lib/libgcrypt/cipher/cipher.c similarity index 100% rename from lib/libgcrypt/cipher/cipher.c rename to grub-core/lib/libgcrypt/cipher/cipher.c diff --git a/lib/libgcrypt/cipher/crc.c b/grub-core/lib/libgcrypt/cipher/crc.c similarity index 100% rename from lib/libgcrypt/cipher/crc.c rename to grub-core/lib/libgcrypt/cipher/crc.c diff --git a/lib/libgcrypt/cipher/des.c b/grub-core/lib/libgcrypt/cipher/des.c similarity index 100% rename from lib/libgcrypt/cipher/des.c rename to grub-core/lib/libgcrypt/cipher/des.c diff --git a/lib/libgcrypt/cipher/dsa.c b/grub-core/lib/libgcrypt/cipher/dsa.c similarity index 100% rename from lib/libgcrypt/cipher/dsa.c rename to grub-core/lib/libgcrypt/cipher/dsa.c diff --git a/lib/libgcrypt/cipher/ecc.c b/grub-core/lib/libgcrypt/cipher/ecc.c similarity index 100% rename from lib/libgcrypt/cipher/ecc.c rename to grub-core/lib/libgcrypt/cipher/ecc.c diff --git a/lib/libgcrypt/cipher/elgamal.c b/grub-core/lib/libgcrypt/cipher/elgamal.c similarity index 100% rename from lib/libgcrypt/cipher/elgamal.c rename to grub-core/lib/libgcrypt/cipher/elgamal.c diff --git a/lib/libgcrypt/cipher/hash-common.c b/grub-core/lib/libgcrypt/cipher/hash-common.c similarity index 100% rename from lib/libgcrypt/cipher/hash-common.c rename to grub-core/lib/libgcrypt/cipher/hash-common.c diff --git a/lib/libgcrypt/cipher/hash-common.h b/grub-core/lib/libgcrypt/cipher/hash-common.h similarity index 100% rename from lib/libgcrypt/cipher/hash-common.h rename to grub-core/lib/libgcrypt/cipher/hash-common.h diff --git a/lib/libgcrypt/cipher/hmac-tests.c b/grub-core/lib/libgcrypt/cipher/hmac-tests.c similarity index 100% rename from lib/libgcrypt/cipher/hmac-tests.c rename to grub-core/lib/libgcrypt/cipher/hmac-tests.c diff --git a/lib/libgcrypt/cipher/md.c b/grub-core/lib/libgcrypt/cipher/md.c similarity index 100% rename from lib/libgcrypt/cipher/md.c rename to grub-core/lib/libgcrypt/cipher/md.c diff --git a/lib/libgcrypt/cipher/md4.c b/grub-core/lib/libgcrypt/cipher/md4.c similarity index 100% rename from lib/libgcrypt/cipher/md4.c rename to grub-core/lib/libgcrypt/cipher/md4.c diff --git a/lib/libgcrypt/cipher/md5.c b/grub-core/lib/libgcrypt/cipher/md5.c similarity index 100% rename from lib/libgcrypt/cipher/md5.c rename to grub-core/lib/libgcrypt/cipher/md5.c diff --git a/lib/libgcrypt/cipher/primegen.c b/grub-core/lib/libgcrypt/cipher/primegen.c similarity index 100% rename from lib/libgcrypt/cipher/primegen.c rename to grub-core/lib/libgcrypt/cipher/primegen.c diff --git a/lib/libgcrypt/cipher/pubkey.c b/grub-core/lib/libgcrypt/cipher/pubkey.c similarity index 100% rename from lib/libgcrypt/cipher/pubkey.c rename to grub-core/lib/libgcrypt/cipher/pubkey.c diff --git a/lib/libgcrypt/cipher/rfc2268.c b/grub-core/lib/libgcrypt/cipher/rfc2268.c similarity index 100% rename from lib/libgcrypt/cipher/rfc2268.c rename to grub-core/lib/libgcrypt/cipher/rfc2268.c diff --git a/lib/libgcrypt/cipher/rijndael-tables.h b/grub-core/lib/libgcrypt/cipher/rijndael-tables.h similarity index 100% rename from lib/libgcrypt/cipher/rijndael-tables.h rename to grub-core/lib/libgcrypt/cipher/rijndael-tables.h diff --git a/lib/libgcrypt/cipher/rijndael.c b/grub-core/lib/libgcrypt/cipher/rijndael.c similarity index 100% rename from lib/libgcrypt/cipher/rijndael.c rename to grub-core/lib/libgcrypt/cipher/rijndael.c diff --git a/lib/libgcrypt/cipher/rmd.h b/grub-core/lib/libgcrypt/cipher/rmd.h similarity index 100% rename from lib/libgcrypt/cipher/rmd.h rename to grub-core/lib/libgcrypt/cipher/rmd.h diff --git a/lib/libgcrypt/cipher/rmd160.c b/grub-core/lib/libgcrypt/cipher/rmd160.c similarity index 100% rename from lib/libgcrypt/cipher/rmd160.c rename to grub-core/lib/libgcrypt/cipher/rmd160.c diff --git a/lib/libgcrypt/cipher/rsa.c b/grub-core/lib/libgcrypt/cipher/rsa.c similarity index 100% rename from lib/libgcrypt/cipher/rsa.c rename to grub-core/lib/libgcrypt/cipher/rsa.c diff --git a/lib/libgcrypt/cipher/seed.c b/grub-core/lib/libgcrypt/cipher/seed.c similarity index 100% rename from lib/libgcrypt/cipher/seed.c rename to grub-core/lib/libgcrypt/cipher/seed.c diff --git a/lib/libgcrypt/cipher/serpent.c b/grub-core/lib/libgcrypt/cipher/serpent.c similarity index 100% rename from lib/libgcrypt/cipher/serpent.c rename to grub-core/lib/libgcrypt/cipher/serpent.c diff --git a/lib/libgcrypt/cipher/sha1.c b/grub-core/lib/libgcrypt/cipher/sha1.c similarity index 100% rename from lib/libgcrypt/cipher/sha1.c rename to grub-core/lib/libgcrypt/cipher/sha1.c diff --git a/lib/libgcrypt/cipher/sha256.c b/grub-core/lib/libgcrypt/cipher/sha256.c similarity index 100% rename from lib/libgcrypt/cipher/sha256.c rename to grub-core/lib/libgcrypt/cipher/sha256.c diff --git a/lib/libgcrypt/cipher/sha512.c b/grub-core/lib/libgcrypt/cipher/sha512.c similarity index 100% rename from lib/libgcrypt/cipher/sha512.c rename to grub-core/lib/libgcrypt/cipher/sha512.c diff --git a/lib/libgcrypt/cipher/tiger.c b/grub-core/lib/libgcrypt/cipher/tiger.c similarity index 100% rename from lib/libgcrypt/cipher/tiger.c rename to grub-core/lib/libgcrypt/cipher/tiger.c diff --git a/lib/libgcrypt/cipher/twofish.c b/grub-core/lib/libgcrypt/cipher/twofish.c similarity index 100% rename from lib/libgcrypt/cipher/twofish.c rename to grub-core/lib/libgcrypt/cipher/twofish.c diff --git a/lib/libgcrypt/cipher/whirlpool.c b/grub-core/lib/libgcrypt/cipher/whirlpool.c similarity index 100% rename from lib/libgcrypt/cipher/whirlpool.c rename to grub-core/lib/libgcrypt/cipher/whirlpool.c diff --git a/lib/libgcrypt_wrap/cipher_wrap.h b/grub-core/lib/libgcrypt_wrap/cipher_wrap.h similarity index 100% rename from lib/libgcrypt_wrap/cipher_wrap.h rename to grub-core/lib/libgcrypt_wrap/cipher_wrap.h diff --git a/lib/mips/relocator.c b/grub-core/lib/mips/relocator.c similarity index 100% rename from lib/mips/relocator.c rename to grub-core/lib/mips/relocator.c diff --git a/lib/mips/relocator_asm.S b/grub-core/lib/mips/relocator_asm.S similarity index 100% rename from lib/mips/relocator_asm.S rename to grub-core/lib/mips/relocator_asm.S diff --git a/lib/mips/setjmp.S b/grub-core/lib/mips/setjmp.S similarity index 100% rename from lib/mips/setjmp.S rename to grub-core/lib/mips/setjmp.S diff --git a/lib/pbkdf2.c b/grub-core/lib/pbkdf2.c similarity index 100% rename from lib/pbkdf2.c rename to grub-core/lib/pbkdf2.c diff --git a/lib/posix_wrap/assert.h b/grub-core/lib/posix_wrap/assert.h similarity index 100% rename from lib/posix_wrap/assert.h rename to grub-core/lib/posix_wrap/assert.h diff --git a/lib/posix_wrap/ctype.h b/grub-core/lib/posix_wrap/ctype.h similarity index 100% rename from lib/posix_wrap/ctype.h rename to grub-core/lib/posix_wrap/ctype.h diff --git a/lib/posix_wrap/errno.h b/grub-core/lib/posix_wrap/errno.h similarity index 100% rename from lib/posix_wrap/errno.h rename to grub-core/lib/posix_wrap/errno.h diff --git a/lib/posix_wrap/langinfo.h b/grub-core/lib/posix_wrap/langinfo.h similarity index 100% rename from lib/posix_wrap/langinfo.h rename to grub-core/lib/posix_wrap/langinfo.h diff --git a/lib/posix_wrap/limits.h b/grub-core/lib/posix_wrap/limits.h similarity index 100% rename from lib/posix_wrap/limits.h rename to grub-core/lib/posix_wrap/limits.h diff --git a/lib/posix_wrap/localcharset.h b/grub-core/lib/posix_wrap/localcharset.h similarity index 100% rename from lib/posix_wrap/localcharset.h rename to grub-core/lib/posix_wrap/localcharset.h diff --git a/lib/posix_wrap/locale.h b/grub-core/lib/posix_wrap/locale.h similarity index 100% rename from lib/posix_wrap/locale.h rename to grub-core/lib/posix_wrap/locale.h diff --git a/lib/posix_wrap/stdint.h b/grub-core/lib/posix_wrap/stdint.h similarity index 100% rename from lib/posix_wrap/stdint.h rename to grub-core/lib/posix_wrap/stdint.h diff --git a/lib/posix_wrap/stdio.h b/grub-core/lib/posix_wrap/stdio.h similarity index 100% rename from lib/posix_wrap/stdio.h rename to grub-core/lib/posix_wrap/stdio.h diff --git a/lib/posix_wrap/stdlib.h b/grub-core/lib/posix_wrap/stdlib.h similarity index 98% rename from lib/posix_wrap/stdlib.h rename to grub-core/lib/posix_wrap/stdlib.h index 5ef6159ef..4c725f6e2 100644 --- a/lib/posix_wrap/stdlib.h +++ b/grub-core/lib/posix_wrap/stdlib.h @@ -20,6 +20,7 @@ #define GRUB_POSIX_STDLIB_H 1 #include +#include static inline void free (void *ptr) diff --git a/lib/posix_wrap/string.h b/grub-core/lib/posix_wrap/string.h similarity index 97% rename from lib/posix_wrap/string.h rename to grub-core/lib/posix_wrap/string.h index 7bb6f1e6f..4224836e2 100644 --- a/lib/posix_wrap/string.h +++ b/grub-core/lib/posix_wrap/string.h @@ -19,6 +19,8 @@ #ifndef GRUB_POSIX_STRING_H #define GRUB_POSIX_STRING_H 1 +#include + static inline grub_size_t strlen (const char *s) { diff --git a/lib/posix_wrap/sys/types.h b/grub-core/lib/posix_wrap/sys/types.h similarity index 100% rename from lib/posix_wrap/sys/types.h rename to grub-core/lib/posix_wrap/sys/types.h diff --git a/lib/posix_wrap/unistd.h b/grub-core/lib/posix_wrap/unistd.h similarity index 100% rename from lib/posix_wrap/unistd.h rename to grub-core/lib/posix_wrap/unistd.h diff --git a/lib/posix_wrap/wchar.h b/grub-core/lib/posix_wrap/wchar.h similarity index 100% rename from lib/posix_wrap/wchar.h rename to grub-core/lib/posix_wrap/wchar.h diff --git a/lib/posix_wrap/wctype.h b/grub-core/lib/posix_wrap/wctype.h similarity index 100% rename from lib/posix_wrap/wctype.h rename to grub-core/lib/posix_wrap/wctype.h diff --git a/lib/powerpc/setjmp.S b/grub-core/lib/powerpc/setjmp.S similarity index 100% rename from lib/powerpc/setjmp.S rename to grub-core/lib/powerpc/setjmp.S diff --git a/lib/relocator.c b/grub-core/lib/relocator.c similarity index 100% rename from lib/relocator.c rename to grub-core/lib/relocator.c diff --git a/lib/sparc64/setjmp.S b/grub-core/lib/sparc64/setjmp.S similarity index 100% rename from lib/sparc64/setjmp.S rename to grub-core/lib/sparc64/setjmp.S diff --git a/lib/x86_64/setjmp.S b/grub-core/lib/x86_64/setjmp.S similarity index 100% rename from lib/x86_64/setjmp.S rename to grub-core/lib/x86_64/setjmp.S diff --git a/loader/aout.c b/grub-core/loader/aout.c similarity index 100% rename from loader/aout.c rename to grub-core/loader/aout.c diff --git a/loader/efi/appleloader.c b/grub-core/loader/efi/appleloader.c similarity index 100% rename from loader/efi/appleloader.c rename to grub-core/loader/efi/appleloader.c diff --git a/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c similarity index 100% rename from loader/efi/chainloader.c rename to grub-core/loader/efi/chainloader.c diff --git a/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c similarity index 100% rename from loader/i386/bsd.c rename to grub-core/loader/i386/bsd.c diff --git a/loader/i386/bsd32.c b/grub-core/loader/i386/bsd32.c similarity index 100% rename from loader/i386/bsd32.c rename to grub-core/loader/i386/bsd32.c diff --git a/loader/i386/bsd64.c b/grub-core/loader/i386/bsd64.c similarity index 100% rename from loader/i386/bsd64.c rename to grub-core/loader/i386/bsd64.c diff --git a/loader/i386/bsdXX.c b/grub-core/loader/i386/bsdXX.c similarity index 100% rename from loader/i386/bsdXX.c rename to grub-core/loader/i386/bsdXX.c diff --git a/loader/i386/bsd_helper.S b/grub-core/loader/i386/bsd_helper.S similarity index 100% rename from loader/i386/bsd_helper.S rename to grub-core/loader/i386/bsd_helper.S diff --git a/loader/i386/bsd_pagetable.c b/grub-core/loader/i386/bsd_pagetable.c similarity index 100% rename from loader/i386/bsd_pagetable.c rename to grub-core/loader/i386/bsd_pagetable.c diff --git a/loader/i386/bsd_trampoline.S b/grub-core/loader/i386/bsd_trampoline.S similarity index 100% rename from loader/i386/bsd_trampoline.S rename to grub-core/loader/i386/bsd_trampoline.S diff --git a/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c similarity index 100% rename from loader/i386/efi/linux.c rename to grub-core/loader/i386/efi/linux.c diff --git a/loader/i386/efi/xnu.c b/grub-core/loader/i386/efi/xnu.c similarity index 100% rename from loader/i386/efi/xnu.c rename to grub-core/loader/i386/efi/xnu.c diff --git a/loader/i386/ieee1275/linux.c b/grub-core/loader/i386/ieee1275/linux.c similarity index 100% rename from loader/i386/ieee1275/linux.c rename to grub-core/loader/i386/ieee1275/linux.c diff --git a/loader/i386/linux.c b/grub-core/loader/i386/linux.c similarity index 100% rename from loader/i386/linux.c rename to grub-core/loader/i386/linux.c diff --git a/loader/i386/linux_trampoline.S b/grub-core/loader/i386/linux_trampoline.S similarity index 100% rename from loader/i386/linux_trampoline.S rename to grub-core/loader/i386/linux_trampoline.S diff --git a/loader/i386/multiboot_mbi.c b/grub-core/loader/i386/multiboot_mbi.c similarity index 100% rename from loader/i386/multiboot_mbi.c rename to grub-core/loader/i386/multiboot_mbi.c diff --git a/loader/i386/pc/chainloader.c b/grub-core/loader/i386/pc/chainloader.c similarity index 100% rename from loader/i386/pc/chainloader.c rename to grub-core/loader/i386/pc/chainloader.c diff --git a/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c similarity index 100% rename from loader/i386/pc/linux.c rename to grub-core/loader/i386/pc/linux.c diff --git a/loader/i386/pc/xnu.c b/grub-core/loader/i386/pc/xnu.c similarity index 100% rename from loader/i386/pc/xnu.c rename to grub-core/loader/i386/pc/xnu.c diff --git a/loader/i386/xnu.c b/grub-core/loader/i386/xnu.c similarity index 100% rename from loader/i386/xnu.c rename to grub-core/loader/i386/xnu.c diff --git a/loader/macho.c b/grub-core/loader/macho.c similarity index 100% rename from loader/macho.c rename to grub-core/loader/macho.c diff --git a/loader/macho32.c b/grub-core/loader/macho32.c similarity index 100% rename from loader/macho32.c rename to grub-core/loader/macho32.c diff --git a/loader/macho64.c b/grub-core/loader/macho64.c similarity index 100% rename from loader/macho64.c rename to grub-core/loader/macho64.c diff --git a/loader/machoXX.c b/grub-core/loader/machoXX.c similarity index 100% rename from loader/machoXX.c rename to grub-core/loader/machoXX.c diff --git a/loader/mips/linux.c b/grub-core/loader/mips/linux.c similarity index 100% rename from loader/mips/linux.c rename to grub-core/loader/mips/linux.c diff --git a/loader/multiboot.c b/grub-core/loader/multiboot.c similarity index 100% rename from loader/multiboot.c rename to grub-core/loader/multiboot.c diff --git a/loader/multiboot_elfxx.c b/grub-core/loader/multiboot_elfxx.c similarity index 100% rename from loader/multiboot_elfxx.c rename to grub-core/loader/multiboot_elfxx.c diff --git a/loader/multiboot_mbi2.c b/grub-core/loader/multiboot_mbi2.c similarity index 100% rename from loader/multiboot_mbi2.c rename to grub-core/loader/multiboot_mbi2.c diff --git a/loader/powerpc/ieee1275/linux.c b/grub-core/loader/powerpc/ieee1275/linux.c similarity index 100% rename from loader/powerpc/ieee1275/linux.c rename to grub-core/loader/powerpc/ieee1275/linux.c diff --git a/loader/sparc64/ieee1275/linux.c b/grub-core/loader/sparc64/ieee1275/linux.c similarity index 100% rename from loader/sparc64/ieee1275/linux.c rename to grub-core/loader/sparc64/ieee1275/linux.c diff --git a/loader/xnu.c b/grub-core/loader/xnu.c similarity index 100% rename from loader/xnu.c rename to grub-core/loader/xnu.c diff --git a/loader/xnu_resume.c b/grub-core/loader/xnu_resume.c similarity index 100% rename from loader/xnu_resume.c rename to grub-core/loader/xnu_resume.c diff --git a/mmap/efi/mmap.c b/grub-core/mmap/efi/mmap.c similarity index 100% rename from mmap/efi/mmap.c rename to grub-core/mmap/efi/mmap.c diff --git a/mmap/i386/mmap.c b/grub-core/mmap/i386/mmap.c similarity index 100% rename from mmap/i386/mmap.c rename to grub-core/mmap/i386/mmap.c diff --git a/mmap/i386/pc/mmap.c b/grub-core/mmap/i386/pc/mmap.c similarity index 100% rename from mmap/i386/pc/mmap.c rename to grub-core/mmap/i386/pc/mmap.c diff --git a/mmap/i386/pc/mmap_helper.S b/grub-core/mmap/i386/pc/mmap_helper.S similarity index 100% rename from mmap/i386/pc/mmap_helper.S rename to grub-core/mmap/i386/pc/mmap_helper.S diff --git a/mmap/i386/uppermem.c b/grub-core/mmap/i386/uppermem.c similarity index 100% rename from mmap/i386/uppermem.c rename to grub-core/mmap/i386/uppermem.c diff --git a/mmap/mips/yeeloong/uppermem.c b/grub-core/mmap/mips/yeeloong/uppermem.c similarity index 100% rename from mmap/mips/yeeloong/uppermem.c rename to grub-core/mmap/mips/yeeloong/uppermem.c diff --git a/mmap/mmap.c b/grub-core/mmap/mmap.c similarity index 100% rename from mmap/mmap.c rename to grub-core/mmap/mmap.c diff --git a/grub-core/modules.def b/grub-core/modules.def new file mode 100644 index 000000000..ae3ede5f1 --- /dev/null +++ b/grub-core/modules.def @@ -0,0 +1,1592 @@ +AutoGen definitions Makefile.tpl; + +kernel = { + name = kernel; + + emu_ldflags = '-Wl,-r'; + x86_efi_ldflags = '-Wl,-r'; + i386_pc_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + i386_coreboot_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + i386_qemu_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + i386_ieee1275_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + mips_yeeloong_ldflags = '-Wl,-Ttext,$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + powerpc_ieee1275_ldflags = '-Wl,-Ttext,$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + + mips_yeeloong_cppflags = '-DUSE_ASCII_FAILBACK'; + i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; + i386_qemu_ccasflags = '-DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + + mips_ldadd = '-lgcc'; + powerpc_ldadd = '-lgcc'; + sparc64_ldadd = '-lgcc'; + + nonemu_nodist = symlist.c; + + shared = kern/command.c; + shared = kern/corecmd.c; + shared = kern/device.c; + shared = kern/disk.c; + shared = kern/dl.c; + shared = kern/env.c; + shared = kern/err.c; + shared = kern/file.c; + shared = kern/fs.c; + shared = kern/handler.c; + shared = kern/list.c; + shared = kern/main.c; + shared = kern/misc.c; + shared = kern/parser.c; + shared = kern/partition.c; + shared = kern/rescue_parser.c; + shared = kern/rescue_reader.c; + shared = kern/term.c; + + i386_pc = kern/i386/pc/startup.S; + i386_pc = kern/i386/misc.S; + i386_pc = kern/mm.c; + i386_pc = kern/time.c; + i386_pc = kern/i386/dl.c; + i386_pc = kern/i386/pc/init.c; + i386_pc = kern/i386/pc/mmap.c; + i386_pc = kern/i386/tsc.c; + i386_pc = kern/i386/pit.c; + i386_pc = kern/generic/rtc_get_time_ms.c; + i386_pc = kern/generic/millisleep.c; + i386_pc = term/i386/pc/console.c; + i386_pc = term/i386/vga_common.c; + + i386_efi = kern/i386/efi/startup.S; + i386_efi = kern/mm.c; + i386_efi = kern/i386/dl.c; + i386_efi = kern/i386/efi/init.c; + i386_efi = kern/efi/efi.c; + i386_efi = kern/efi/init.c; + i386_efi = kern/efi/mm.c; + i386_efi = kern/time.c; + i386_efi = kern/i386/tsc.c; + i386_efi = kern/i386/pit.c; + i386_efi = kern/generic/rtc_get_time_ms.c; + i386_efi = kern/generic/millisleep.c; + i386_efi = term/efi/console.c; + i386_efi = disk/efi/efidisk.c; + + i386_coreboot = kern/i386/coreboot/startup.S; + i386_coreboot = kern/i386/misc.S; + i386_coreboot = kern/i386/coreboot/init.c; + i386_coreboot = kern/i386/coreboot/mmap.c; + i386_coreboot = kern/i386/halt.c; + i386_coreboot = kern/mm.c; + i386_coreboot = kern/time.c; + i386_coreboot = kern/i386/dl.c; + i386_coreboot = kern/i386/tsc.c; + i386_coreboot = kern/i386/pit.c; + i386_coreboot = kern/generic/rtc_get_time_ms.c; + i386_coreboot = kern/generic/millisleep.c; + i386_coreboot = term/i386/pc/vga_text.c; + i386_coreboot = term/i386/vga_common.c; + + i386_qemu = kern/i386/qemu/startup.S; + i386_qemu = kern/i386/misc.S; + i386_qemu = kern/i386/coreboot/init.c; + i386_qemu = kern/i386/qemu/mmap.c; + i386_qemu = kern/i386/halt.c; + i386_qemu = kern/mm.c; + i386_qemu = kern/time.c; + i386_qemu = kern/i386/dl.c; + i386_qemu = kern/i386/tsc.c; + i386_qemu = kern/i386/pit.c; + i386_qemu = kern/generic/rtc_get_time_ms.c; + i386_qemu = kern/generic/millisleep.c; + i386_qemu = term/i386/pc/vga_text.c; + i386_qemu = term/i386/vga_common.c; + + i386_ieee1275 = kern/i386/ieee1275/startup.S; + i386_ieee1275 = kern/i386/misc.S; + i386_ieee1275 = kern/i386/ieee1275/init.c; + i386_ieee1275 = kern/ieee1275/init.c; + i386_ieee1275 = kern/ieee1275/mmap.c; + i386_ieee1275 = kern/ieee1275/cmain.c; + i386_ieee1275 = kern/ieee1275/openfw.c; + i386_ieee1275 = kern/mm.c; + i386_ieee1275 = kern/i386/dl.c; + i386_ieee1275 = kern/time.c; + i386_ieee1275 = kern/generic/millisleep.c; + i386_ieee1275 = kern/ieee1275/ieee1275.c; + i386_ieee1275 = term/ieee1275/ofconsole.c; + i386_ieee1275 = disk/ieee1275/ofdisk.c; + + x86_64_efi = kern/x86_64/efi/startup.S; + x86_64_efi = kern/x86_64/efi/callwrap.S; + x86_64_efi = kern/mm.c; + x86_64_efi = kern/x86_64/dl.c; + x86_64_efi = kern/i386/efi/init.c; + x86_64_efi = kern/efi/efi.c; + x86_64_efi = kern/efi/init.c; + x86_64_efi = kern/efi/mm.c; + x86_64_efi = kern/time.c; + x86_64_efi = kern/i386/tsc.c; + x86_64_efi = kern/i386/pit.c; + x86_64_efi = kern/generic/millisleep.c; + x86_64_efi = kern/generic/rtc_get_time_ms.c; + x86_64_efi = term/efi/console.c; + x86_64_efi = disk/efi/efidisk.c; + + mips_yeeloong = kern/mips/startup.S; + mips_yeeloong = kern/mips/init.c; + mips_yeeloong = kern/mips/yeeloong/init.c; + mips_yeeloong = kern/mm.c; + mips_yeeloong = kern/mips/dl.c; + mips_yeeloong = kern/generic/millisleep.c; + mips_yeeloong = kern/generic/rtc_get_time_ms.c; + mips_yeeloong = kern/time.c; + mips_yeeloong = kern/mips/cache.S; + mips_yeeloong = io/bufio.c; + mips_yeeloong = lib/arg.c; + mips_yeeloong = commands/extcmd.c; + mips_yeeloong = bus/pci.c; + mips_yeeloong = bus/bonito.c; + mips_yeeloong = font/font_cmd.c; + mips_yeeloong = font/font.c; + mips_yeeloong = term/at_keyboard.c; + mips_yeeloong = term/gfxterm.c; + mips_yeeloong = video/video.c; + mips_yeeloong = video/fb/video_fb.c; + mips_yeeloong = video/fb/fbblit.c; + mips_yeeloong = video/fb/fbfill.c; + mips_yeeloong = video/fb/fbutil.c; + mips_yeeloong = video/bitmap.c; + mips_yeeloong = video/bitmap_scale.c; + mips_yeeloong = video/sm712.c; + + powerpc_ieee1275 = kern/powerpc/ieee1275/startup.S; + powerpc_ieee1275 = kern/ieee1275/cmain.c; + powerpc_ieee1275 = kern/ieee1275/ieee1275.c; + powerpc_ieee1275 = kern/mm.c; + powerpc_ieee1275 = kern/ieee1275/init.c; + powerpc_ieee1275 = kern/ieee1275/mmap.c; + powerpc_ieee1275 = kern/ieee1275/openfw.c; + powerpc_ieee1275 = kern/powerpc/dl.c; + powerpc_ieee1275 = kern/generic/millisleep.c; + powerpc_ieee1275 = kern/time.c; + powerpc_ieee1275 = kern/powerpc/cache.S; + powerpc_ieee1275 = term/ieee1275/ofconsole.c; + powerpc_ieee1275 = disk/ieee1275/ofdisk.c; + + sparc64_ieee1275 = kern/sparc64/ieee1275/crt0.S; + sparc64_ieee1275 = kern/ieee1275/cmain.c; + sparc64_ieee1275 = kern/ieee1275/ieee1275.c; + sparc64_ieee1275 = kern/mm.c; + sparc64_ieee1275 = kern/sparc64/ieee1275/ieee1275.c; + sparc64_ieee1275 = kern/sparc64/ieee1275/init.c; + sparc64_ieee1275 = kern/ieee1275/mmap.c; + sparc64_ieee1275 = kern/ieee1275/openfw.c; + sparc64_ieee1275 = kern/sparc64/dl.c; + sparc64_ieee1275 = kern/generic/millisleep.c; + sparc64_ieee1275 = kern/time.c; + sparc64_ieee1275 = kern/sparc64/cache.S; + sparc64_ieee1275 = disk/ieee1275/ofdisk.c; + sparc64_ieee1275 = term/ieee1275/ofconsole.c; + + emu = kern/emu/misc.c; + emu = kern/emu/getroot.c; + emu = kern/emu/time.c; + emu = kern/emu/hostdisk.c; + emu = kern/emu/hostfs.c; + emu = kern/emu/console.c; + emu = disk/host.c; + + image_nostrip = { emu; }; + image_strip_keep_kernel = { i386_efi; x86_64_efi; }; + image_strip = { powerpc_ieee1275; i386_coreboot; i386_ieee1275; }; + image_strip_macho2img = { mips_yeeloong; i386_pc; i386_qemu; sparc64_ieee1275; }; +}; + +program = { + name = grub-emu; + mansection = 1; + + source = kern/emu/main.c; + source = kern/emu/dummy/dl.c; + source = kern/emu/dummy/symlist.c; + source = gnulib/progname.c; + + nodist = grub_emu_init.c; + + cflags = '$(CFLAGS_GNULIB)'; + cppflags = '$(CPPFLAGS_GNULIB)'; + + ldadd = kernel.exec; + ldadd = '$(MODULE_FILES)'; + ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS)'; + + emu; +}; + +program = { + name = grub-emu-lite; + + source = kern/emu/main.c; + source = kern/emu/lite.c; + source = kern/emu/dl.c; + source = kern/emu/cache.S; + source = gnulib/progname.c; + nodist = symlist.c; + + cflags = '$(CFLAGS_GNULIB)'; + cppflags = '$(CPPFLAGS_GNULIB)'; + + ldadd = kernel.exec; + ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS)'; + + emu; +}; + +module = { + name = trig; + nodist = trigtables.c; + common; +}; + +image = { + name = boot; + i386_pc = boot/i386/pc/boot.S; + i386_pc_ldflags = "-Wl,-Ttext=0x7C00"; + + i386_qemu = boot/i386/qemu/boot.S; + i386_qemu_ldflags = '-Wl,-Ttext,$(GRUB_BOOT_MACHINE_LINK_ADDR)'; + i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; + + sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S; + sparc64_ieee1275_format = a.out-sunos-big; + sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000'; +}; + +image = { + name = cdboot; + source = boot/i386/pc/cdboot.S; + ldflags = "-Wl,-Ttext=0x7C00"; + + i386_pc; +}; + +image = { + name = pxeboot; + source = boot/i386/pc/pxeboot.S; + ldflags = '-Wl,-Ttext=0x7C00'; + + i386_pc; +}; + +image = { + name = diskboot; + i386_pc = boot/i386/pc/diskboot.S; + i386_pc_ldflags = '-Wl,-Ttext=0x8000'; + + sparc64_ieee1275 = boot/sparc64/ieee1275/diskboot.S; + sparc64_ieee1275_ldflags = '-Wl,-Ttext=0x4200'; +}; + +image = { + name = lnxboot; + source = boot/i386/pc/lnxboot.S; + ldflags = '-Wl,-Ttext=0x6000'; + + i386_pc; +}; + +module = { + name = libusb; + source = bus/usb/emu/usb.c; + emu; + enable = COND_GRUB_EMU_USB; +}; + +module = { + name = pci; + source = bus/emu/pci.c; + source = commands/lspci.c; + emu; + enable = COND_GRUB_EMU_PCI; +}; + +module = { + name = usb; + source = bus/usb/usb.c; + source = bus/usb/usbtrans.c; + source = bus/usb/usbhub.c; + i386; +}; + +module = { + name = usb; + source = bus/usb/usb.c; + emu; + enable = COND_GRUB_EMU_USB; +}; + +module = { + name = uhci; + source = bus/usb/uhci.c; + x86; +}; + +module = { + name = ohci; + source = bus/usb/ohci.c; + x86; +}; + +module = { + name = pci; + source = bus/pci.c; + x86; +}; + +library = { + name = libgnulib.a; + source = gnulib/regex.c; + cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; + cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; + common; +}; + +module = { + name = iorw; + source = commands/iorw.c; + i386; +}; + +module = { + name = regexp; + source = commands/regexp.c; + ldadd = libgnulib.a; + cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; + cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; + common; +}; + +module = { + name = acpi; + + x86_efi = commands/acpi.c; + x86_efi = commands/efi/acpi.c; + + i386_pc = commands/acpi.c; + i386_pc = commands/i386/pc/acpi.c; +}; + +module = { + common; + name = blocklist; + source = commands/blocklist.c; +}; + +module = { + common; + name = boot; + source = commands/boot.c; + + i386_pc = commands/boot.c; + i386_pc = lib/i386/pc/biosnum.c; +}; + +module = { + common; + name = cat; + source = commands/cat.c; +}; + +module = { + common; + name = cmp; + source = commands/cmp.c; +}; + +module = { + common; + name = configfile; + source = commands/configfile.c; +}; + +module = { + name = cpuid; + source = commands/i386/cpuid.c; + + x86; +}; + +module = { + common; + name = crc; + source = commands/crc.c; + source = lib/crc.c; +}; + +module = { + common; + name = date; + source = commands/date.c; + + x86; + mips; +}; + +module = { + name = drivemap; + + i386_pc = commands/i386/pc/drivemap.c; + i386_pc = commands/i386/pc/drivemap_int13h.S; +}; + +module = { + common; + name = echo; + source = commands/echo.c; +}; + +module = { + common; + name = extcmd; + source = commands/extcmd.c; + source = lib/arg.c; +}; + +module = { + name = fixvideo; + x86_efi = commands/efi/fixvideo.c; +}; + +module = { + common; + name = gptsync; + source = commands/gptsync.c; +}; + +module = { + name = halt; + source = commands/halt.c; + + i386_pc = commands/i386/pc/halt.c; + emu; + x86; + sparc64; + powerpc; +}; + +module = { + common; + name = handler; + source = commands/handler.c; +}; + +module = { + common; + name = hashsum; + source = commands/hashsum.c; +}; + +module = { + name = hdparm; + source = commands/hdparm.c; + source = lib/hexdump.c; + + i386_pc; +}; + +module = { + common; + name = help; + source = commands/help.c; +}; + +module = { + common; + name = hexdump; + source = commands/hexdump.c; + source = lib/hexdump.c; +}; + +module = { + common; + name = keystatus; + source = commands/keystatus.c; +}; + +module = { + name = loadbios; + x86_efi = commands/efi/loadbios.c; +}; + +module = { + common; + name = loadenv; + source = commands/loadenv.c; + source = lib/envblk.c; +}; + +module = { + common; + name = ls; + source = commands/ls.c; +}; + +module = { + common; + name = lsmmap; + source = commands/lsmmap.c; + + i386_pc; + i386_qemu; + i386_coreboot; + i386_ieee1275; + mips_yeeloong; + powerpc_ieee1275; +}; + +module = { + name = lspci; + source = commands/lspci.c; + + x86; + mips; +}; + +module = { + common; + name = memrw; + source = commands/memrw.c; +}; + +module = { + common; + name = minicmd; + source = commands/minicmd.c; +}; + +module = { + common; + name = parttool; + source = commands/parttool.c; +}; + +module = { + common; + name = password; + source = commands/password.c; +}; + +module = { + common; + name = password_pbkdf2; + source = commands/password_pbkdf2.c; +}; + +module = { + name = play; + source = commands/i386/pc/play.c; + i386; +}; + +module = { + common; + name = probe; + source = commands/probe.c; +}; + +module = { + name = pxecmd; + i386_pc = commands/i386/pc/pxecmd.c; +}; + +module = { + common; + name = read; + source = commands/read.c; +}; + +module = { + common; + name = reboot; + source = commands/reboot.c; + + x86; powerpc; sparc64; +}; + +module = { + common; + name = search; + source = commands/search_wrap.c; +}; + +module = { + common; + name = search_fs_file; + source = commands/search_file.c; +}; + +module = { + common; + name = search_fs_uuid; + source = commands/search_uuid.c; +}; + +module = { + common; + name = search_label; + source = commands/search_label.c; +}; + +module = { + name = setpci; + source = commands/setpci.c; + + x86; +}; + +module = { + common; + name = sleep; + source = commands/sleep.c; +}; + +module = { + name = suspend; + source = commands/ieee1275/suspend.c; + i386_ieee1275; + powerpc_ieee1275; +}; + +module = { + common; + name = terminal; + source = commands/terminal.c; +}; + +module = { + common; + name = test; + source = commands/test.c; +}; + +module = { + common; + name = true; + source = commands/true.c; +}; + +module = { + name = usbtest; + source = commands/usbtest.c; + i386_pc; +}; + +module = { + name = usbtest; + source = commands/usbtest.c; + emu; + enable = COND_GRUB_EMU_USB; +}; + +module = { + name = vbeinfo; + i386_pc = commands/i386/pc/vbeinfo.c; +}; + +module = { + name = vbetest; + i386_pc = commands/i386/pc/vbetest.c; +}; + +module = { + common; + name = videotest; + source = commands/videotest.c; +}; + +module = { + common; + name = xnu_uuid; + source = commands/xnu_uuid.c; +}; + +module = { + common; + name = dm_nv; + source = disk/dmraid_nvidia.c; +}; + +module = { + common; + name = loopback; + source = disk/loopback.c; +}; + +module = { + common; + name = lvm; + source = disk/lvm.c; +}; + +module = { + common; + name = mdraid; + source = disk/mdraid_linux.c; +}; + +module = { + common; + name = raid; + source = disk/raid.c; +}; + +module = { + common; + name = raid5rec; + source = disk/raid5_recover.c; +}; + +module = { + common; + name = raid6rec; + source = disk/raid6_recover.c; +}; + +module = { + common; + name = scsi; + source = disk/scsi.c; +}; + +module = { + common; + name = memdisk; + source = disk/memdisk.c; +}; + +module = { + name = ata; + source = disk/ata.c; + + x86; + mips; +}; + +module = { + name = ata_pthru; + source = disk/ata_pthru.c; + + x86; + mips_yeeloong; +}; + +module = { + name = biosdisk; + i386_pc = disk/i386/pc/biosdisk.c; +}; + +module = { + name = usbms; + source = disk/usbms.c; + i386_pc; +}; + +module = { + name = usbms; + source = disk/usbms.c; + emu; + enable = COND_GRUB_EMU_USB; +}; + +module = { + name = nand; + source = disk/ieee1275/nand.c; + + i386_ieee1275; +}; + +module = { + name = efiemu; + i386_pc = efiemu/main.c; + i386_pc = efiemu/i386/loadcore32.c; + i386_pc = efiemu/i386/loadcore64.c; + i386_pc = efiemu/i386/pc/cfgtables.c; + i386_pc = efiemu/mm.c; + i386_pc = efiemu/loadcore_common.c; + i386_pc = efiemu/symbols.c; + i386_pc = efiemu/loadcore32.c; + i386_pc = efiemu/loadcore64.c; + i386_pc = efiemu/prepare32.c; + i386_pc = efiemu/prepare64.c; + i386_pc = efiemu/pnvram.c; + i386_pc = efiemu/i386/coredetect.c; +}; + +module = { + name = font; + source = font/font.c; + source = font/font_cmd.c; + emu; + x86; + sparc64; + powerpc; +}; + +module = { + common; + name = affs; + source = fs/affs.c; +}; + +module = { + common; + name = afs; + source = fs/afs.c; +}; + +module = { + common; + name = afs_be; + source = fs/afs_be.c; +}; + +module = { + common; + name = befs; + source = fs/befs.c; +}; + +module = { + common; + name = befs_be; + source = fs/befs_be.c; +}; + +module = { + common; + name = cpio; + source = fs/cpio.c; +}; + +module = { + common; + name = ext2; + source = fs/ext2.c; +}; + +module = { + common; + name = fat; + source = fs/fat.c; +}; + +module = { + common; + name = fshelp; + source = fs/fshelp.c; +}; + +module = { + common; + name = hfs; + source = fs/hfs.c; +}; + +module = { + common; + name = hfsplus; + source = fs/hfsplus.c; +}; + +module = { + common; + name = iso9660; + source = fs/iso9660.c; +}; + +module = { + common; + name = jfs; + source = fs/jfs.c; +}; + +module = { + common; + name = minix; + source = fs/minix.c; +}; + +module = { + common; + name = nilfs2; + source = fs/nilfs2.c; +}; + +module = { + common; + name = ntfs; + source = fs/ntfs.c; +}; + +module = { + common; + name = ntfscomp; + source = fs/ntfscomp.c; +}; + +module = { + common; + name = reiserfs; + source = fs/reiserfs.c; +}; + +module = { + common; + name = sfs; + source = fs/sfs.c; +}; + +module = { + common; + name = tar; + source = fs/tar.c; +}; + +module = { + common; + name = udf; + source = fs/udf.c; +}; + +module = { + common; + name = ufs1; + source = fs/ufs.c; +}; + +module = { + common; + name = ufs2; + source = fs/ufs2.c; +}; + +module = { + common; + name = xfs; + source = fs/xfs.c; +}; + +module = { + name = pxe; + i386_pc = fs/i386/pc/pxe.c; +}; + +module = { + name = gettext; + source = gettext/gettext.c; + common; +}; + +module = { + common; + name = gfxmenu; + source = gfxmenu/gfxmenu.c; + source = gfxmenu/model.c; + source = gfxmenu/view.c; + source = gfxmenu/icon_manager.c; + source = gfxmenu/theme_loader.c; + source = gfxmenu/widget-box.c; + source = gfxmenu/gui_canvas.c; + source = gfxmenu/gui_circular_progress.c; + source = gfxmenu/gui_box.c; + source = gfxmenu/gui_label.c; + source = gfxmenu/gui_list.c; + source = gfxmenu/gui_image.c; + source = gfxmenu/gui_progress_bar.c; + source = gfxmenu/gui_util.c; + source = gfxmenu/gui_string_util.c; + source = gfxmenu/named_colors.c; +}; + +module = { + common; + name = hello; + source = hello/hello.c; +}; + +module = { + common; + name = gzio; + source = io/gzio.c; +}; + +module = { + name = bufio; + source = io/bufio.c; + emu; + x86; + sparc64; + powerpc; +}; + +module = { + common; + name = elf; + source = kern/elf.c; +}; + +module = { + common; + name = charset; + source = lib/charset.c; +}; + +module = { + common; + name = crypto; + source = lib/crypto.c; +}; + +module = { + common; + name = gcry_arcfour; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/arcfour.c; +}; + +module = { + common; + name = gcry_blowfish; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/blowfish.c; +}; + +module = { + common; + name = gcry_camellia; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/camellia.c; + source = lib/libgcrypt-grub/cipher/camellia-glue.c; +}; + +module = { + common; + name = gcry_cast5; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/cast5.c; +}; + +module = { + common; + name = gcry_crc; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/crc.c; +}; + +module = { + common; + name = gcry_des; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/des.c; +}; + +module = { + common; + name = gcry_md4; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/md4.c; +}; + +module = { + common; + name = gcry_md5; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/md5.c; +}; + +module = { + common; + name = gcry_rfc2268; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/rfc2268.c; +}; + +module = { + common; + name = gcry_rijndael; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/rijndael.c; +}; + +module = { + common; + name = gcry_rmd160; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/rmd160.c; +}; + +module = { + common; + name = gcry_seed; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/seed.c; +}; + +module = { + common; + name = gcry_serpent; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/serpent.c; +}; + +module = { + common; + name = gcry_sha1; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/sha1.c; +}; + +module = { + common; + name = gcry_sha256; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/sha256.c; +}; + +module = { + common; + name = gcry_sha512; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/sha512.c; +}; + +module = { + common; + name = gcry_tiger; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/tiger.c; +}; + +module = { + common; + name = gcry_twofish; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/twofish.c; +}; + +module = { + common; + name = gcry_whirlpool; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + source = lib/libgcrypt-grub/cipher/whirlpool.c; +}; + +module = { + common; + name = pbkdf2; + source = lib/pbkdf2.c; +}; + +module = { + name = relocator; + mips = lib/mips/relocator.c; + mips = lib/mips/relocator_asm.S; + x86 = lib/i386/relocator.c; + x86 = lib/i386/relocator_asm.S; + x86 = lib/i386/relocator_backward.S; +}; + +module = { + name = datetime; + source = lib/cmos_datetime.c; + x86_efi = lib/efi/datetime.c; + sparc64_ieee1275 = lib/ieee1275/datetime.c; + powerpc_ieee1275 = lib/ieee1275/datetime.c; + x86; + mips; +}; + +module = { + name = setjmp; + i386 = lib/i386/setjmp.S; + x86_64 = lib/x86_64/setjmp.S; + mips = lib/mips/setjmp.S; + sparc64 = lib/sparc64/setjmp.S; + powerpc = lib/powerpc/setjmp.S; +}; + +module = { + name = aout; + source = loader/aout.c; + i386_pc; + i386_qemu; + i386_coreboot; + i386_ieee1275; +}; + +module = { + name = bsd; + source = loader/i386/bsd.c; + source = loader/i386/bsd32.c; + source = loader/i386/bsd64.c; + source = loader/i386/bsd_helper.S; + source = loader/i386/bsd_trampoline.S; + i386_pc; + i386_qemu; + i386_coreboot; +}; + +module = { + name = linux16; + source = loader/i386/pc/linux.c; + i386_pc; +}; + +module = { + name = multiboot2; + cppflags = "-DGRUB_USE_MULTIBOOT2"; + + source = loader/multiboot.c; + source = loader/multiboot_mbi2.c; + x86; + mips; +}; + +module = { + name = multiboot; + source = loader/multiboot.c; + source = loader/i386/multiboot_mbi.c; + x86; +}; + +module = { + name = linux; + i386 = loader/i386/linux.c; + i386_efi = loader/i386/efi/linux.c; + i386_ieee1275 = loader/i386/ieee1275/linux.c; + x86_64_efi = loader/i386/efi/linux.c; + x86_64_efi = loader/i386/linux_trampoline.S; + mips = loader/mips/linux.c; + powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c; + sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c; +}; + +module = { + name = xnu; + x86_efi = loader/xnu_resume.c; + x86_efi = loader/i386/xnu.c; + x86_efi = loader/i386/efi/xnu.c; + x86_efi = loader/macho32.c; + x86_efi = loader/macho64.c; + x86_efi = loader/macho.c; + x86_efi = loader/xnu.c; + + i386_pc = loader/xnu_resume.c; + i386_pc = loader/i386/xnu.c; + i386_pc = loader/i386/pc/xnu.c; + i386_pc = loader/macho32.c; + i386_pc = loader/macho64.c; + i386_pc = loader/macho.c; + i386_pc = loader/xnu.c; +}; + +module = { + name = appleldr; + x86_efi = loader/efi/appleloader.c; +}; + +module = { + name = chain; + x86_efi = loader/efi/chainloader.c; + i386_pc = loader/i386/pc/chainloader.c; +}; + +module = { + name = mmap; + i386_pc = mmap/mmap.c; + i386_pc = mmap/i386/uppermem.c; + i386_pc = mmap/i386/mmap.c; + i386_pc = mmap/i386/pc/mmap.c; + i386_pc = mmap/i386/pc/mmap_helper.S; + + x86_efi = mmap/mmap.c; + x86_efi = mmap/i386/uppermem.c; + x86_efi = mmap/i386/mmap.c; + x86_efi = mmap/efi/mmap.c; + + i386_coreboot = mmap/mmap.c; + i386_coreboot = mmap/i386/uppermem.c; + i386_coreboot = mmap/i386/mmap.c; + + i386_qemu = mmap/mmap.c; + i386_qemu = mmap/i386/uppermem.c; + i386_qemu = mmap/i386/mmap.c; + + i386_ieee1275 = mmap/mmap.c; + i386_ieee1275 = mmap/i386/uppermem.c; + i386_ieee1275 = mmap/i386/mmap.c; + + mips_yeeloong = mmap/mmap.c; + mips_yeeloong = mmap/mips/yeeloong/uppermem.c; +}; + +module = { + common; + name = normal; + source = normal/main.c; + source = normal/cmdline.c; + source = normal/dyncmd.c; + source = normal/auth.c; + source = normal/autofs.c; + source = normal/handler.c; + source = normal/color.c; + source = normal/completion.c; + source = normal/datetime.c; + source = normal/menu.c; + source = normal/menu_entry.c; + source = normal/menu_text.c; + source = normal/misc.c; + source = normal/crypto.c; + source = normal/term.c; + source = normal/context.c; +}; + +module = { + common; + name = part_acorn; + source = partmap/acorn.c; +}; + +module = { + common; + name = part_amiga; + source = partmap/amiga.c; +}; + +module = { + common; + name = part_apple; + source = partmap/apple.c; +}; + +module = { + common; + name = part_gpt; + source = partmap/gpt.c; +}; + +module = { + common; + name = part_msdos; + source = partmap/msdos.c; +}; + +module = { + common; + name = part_sun; + source = partmap/sun.c; +}; + +module = { + common; + name = part_bsd; + source = partmap/bsdlabel.c; +}; + +module = { + common; + name = part_sunpc; + source = partmap/sunpc.c; +}; + +module = { + common; + name = msdospart; + source = parttool/msdospart.c; +}; + +module = { + common; + name = sh; + source = script/main.c; + source = script/script.c; + source = script/execute.c; + source = script/function.c; + source = script/lexer.c; + nodist = grub_script.tab.c; + nodist = grub_script.yy.c; + nodist = grub_script.tab.h; + nodist = grub_script.yy.h; + cflags = '$(CFLAGS_POSIX) -Wno-error'; + cppflags = '$(CPPFLAGS_POSIX)'; +}; + +module = { + name = at_keyboard; + source = term/at_keyboard.c; + x86; +}; + +module = { + name = gfxterm; + source = term/gfxterm.c; + emu; + x86; + sparc64; + powerpc; +}; + +module = { + name = serial; + source = term/serial.c; + mips; + i386; +}; + +module = { + common; + name = terminfo; + source = term/terminfo.c; + source = term/tparm.c; +}; + +module = { + name = usb_keyboard; + source = term/usb_keyboard.c; + i386_pc; +}; + +module = { + name = vga; + i386_pc = term/i386/pc/vga.c; +}; + +module = { + name = vga_text; + x86 = term/i386/pc/vga_text.c; + x86 = term/i386/vga_common.c; +}; + +module = { + name = functional_test; + source = tests/lib/functional_test.c; + source = tests/lib/test.c; + common; +}; + +module = { + name = example_functional_test; + source = tests/example_functional_test.c; + cflags = -Wno-format; + common; +}; + +module = { + name = bitmap; + source = video/bitmap.c; + emu; + x86; + sparc64; + powerpc; +}; + +module = { + name = bitmap_scale; + source = video/bitmap_scale.c; + emu; + x86; + sparc64; + powerpc; +}; + +module = { + name = efi_gop; + x86_efi = video/efi_gop.c; +}; + +module = { + name = efi_uga; + x86_efi = video/efi_uga.c; +}; + +module = { + common; + name = jpeg; + source = video/readers/jpeg.c; +}; + +module = { + common; + name = png; + source = video/readers/png.c; +}; + +module = { + common; + name = tga; + source = video/readers/tga.c; +}; + +module = { + name = vbe; + i386_pc = video/i386/pc/vbe.c; +}; + +module = { + name = video_fb; + source = video/fb/video_fb.c; + source = video/fb/fbblit.c; + source = video/fb/fbfill.c; + source = video/fb/fbutil.c; + emu; + x86; + sparc64; + powerpc; +}; + +module = { + name = video; + source = video/video.c; + emu; + x86; + sparc64; + powerpc; +}; + +module = { + name = ieee1275_fb; + source = video/ieee1275.c; + powerpc; + sparc64; +}; + +module = { + name = sdl; + source = video/emu/sdl.c; + enable = COND_GRUB_EMU_SDL; + emu; +}; + +module = { + name = datehook; + source = hook/datehook.c; + common; +}; diff --git a/normal/auth.c b/grub-core/normal/auth.c similarity index 100% rename from normal/auth.c rename to grub-core/normal/auth.c diff --git a/normal/autofs.c b/grub-core/normal/autofs.c similarity index 100% rename from normal/autofs.c rename to grub-core/normal/autofs.c diff --git a/normal/cmdline.c b/grub-core/normal/cmdline.c similarity index 100% rename from normal/cmdline.c rename to grub-core/normal/cmdline.c diff --git a/normal/color.c b/grub-core/normal/color.c similarity index 100% rename from normal/color.c rename to grub-core/normal/color.c diff --git a/normal/completion.c b/grub-core/normal/completion.c similarity index 100% rename from normal/completion.c rename to grub-core/normal/completion.c diff --git a/normal/context.c b/grub-core/normal/context.c similarity index 100% rename from normal/context.c rename to grub-core/normal/context.c diff --git a/normal/crypto.c b/grub-core/normal/crypto.c similarity index 100% rename from normal/crypto.c rename to grub-core/normal/crypto.c diff --git a/normal/datetime.c b/grub-core/normal/datetime.c similarity index 100% rename from normal/datetime.c rename to grub-core/normal/datetime.c diff --git a/normal/dyncmd.c b/grub-core/normal/dyncmd.c similarity index 100% rename from normal/dyncmd.c rename to grub-core/normal/dyncmd.c diff --git a/normal/handler.c b/grub-core/normal/handler.c similarity index 100% rename from normal/handler.c rename to grub-core/normal/handler.c diff --git a/normal/main.c b/grub-core/normal/main.c similarity index 100% rename from normal/main.c rename to grub-core/normal/main.c diff --git a/normal/menu.c b/grub-core/normal/menu.c similarity index 100% rename from normal/menu.c rename to grub-core/normal/menu.c diff --git a/normal/menu_entry.c b/grub-core/normal/menu_entry.c similarity index 100% rename from normal/menu_entry.c rename to grub-core/normal/menu_entry.c diff --git a/normal/menu_text.c b/grub-core/normal/menu_text.c similarity index 100% rename from normal/menu_text.c rename to grub-core/normal/menu_text.c diff --git a/normal/misc.c b/grub-core/normal/misc.c similarity index 100% rename from normal/misc.c rename to grub-core/normal/misc.c diff --git a/normal/term.c b/grub-core/normal/term.c similarity index 100% rename from normal/term.c rename to grub-core/normal/term.c diff --git a/partmap/acorn.c b/grub-core/partmap/acorn.c similarity index 100% rename from partmap/acorn.c rename to grub-core/partmap/acorn.c diff --git a/partmap/amiga.c b/grub-core/partmap/amiga.c similarity index 100% rename from partmap/amiga.c rename to grub-core/partmap/amiga.c diff --git a/partmap/apple.c b/grub-core/partmap/apple.c similarity index 100% rename from partmap/apple.c rename to grub-core/partmap/apple.c diff --git a/partmap/bsdlabel.c b/grub-core/partmap/bsdlabel.c similarity index 100% rename from partmap/bsdlabel.c rename to grub-core/partmap/bsdlabel.c diff --git a/partmap/gpt.c b/grub-core/partmap/gpt.c similarity index 100% rename from partmap/gpt.c rename to grub-core/partmap/gpt.c diff --git a/partmap/msdos.c b/grub-core/partmap/msdos.c similarity index 100% rename from partmap/msdos.c rename to grub-core/partmap/msdos.c diff --git a/partmap/sun.c b/grub-core/partmap/sun.c similarity index 100% rename from partmap/sun.c rename to grub-core/partmap/sun.c diff --git a/partmap/sunpc.c b/grub-core/partmap/sunpc.c similarity index 100% rename from partmap/sunpc.c rename to grub-core/partmap/sunpc.c diff --git a/parttool/msdospart.c b/grub-core/parttool/msdospart.c similarity index 100% rename from parttool/msdospart.c rename to grub-core/parttool/msdospart.c diff --git a/grub-core/po/Makefile.am b/grub-core/po/Makefile.am new file mode 100644 index 000000000..e69de29bb diff --git a/po/POTFILES b/grub-core/po/POTFILES similarity index 100% rename from po/POTFILES rename to grub-core/po/POTFILES diff --git a/po/POTFILES-shell b/grub-core/po/POTFILES-shell similarity index 100% rename from po/POTFILES-shell rename to grub-core/po/POTFILES-shell diff --git a/po/README b/grub-core/po/README similarity index 100% rename from po/README rename to grub-core/po/README diff --git a/script/execute.c b/grub-core/script/execute.c similarity index 100% rename from script/execute.c rename to grub-core/script/execute.c diff --git a/script/function.c b/grub-core/script/function.c similarity index 100% rename from script/function.c rename to grub-core/script/function.c diff --git a/script/lexer.c b/grub-core/script/lexer.c similarity index 100% rename from script/lexer.c rename to grub-core/script/lexer.c diff --git a/script/main.c b/grub-core/script/main.c similarity index 100% rename from script/main.c rename to grub-core/script/main.c diff --git a/script/parser.y b/grub-core/script/parser.y similarity index 100% rename from script/parser.y rename to grub-core/script/parser.y diff --git a/script/script.c b/grub-core/script/script.c similarity index 100% rename from script/script.c rename to grub-core/script/script.c diff --git a/script/yylex.l b/grub-core/script/yylex.l similarity index 100% rename from script/yylex.l rename to grub-core/script/yylex.l diff --git a/term/at_keyboard.c b/grub-core/term/at_keyboard.c similarity index 100% rename from term/at_keyboard.c rename to grub-core/term/at_keyboard.c diff --git a/term/efi/console.c b/grub-core/term/efi/console.c similarity index 100% rename from term/efi/console.c rename to grub-core/term/efi/console.c diff --git a/term/gfxterm.c b/grub-core/term/gfxterm.c similarity index 100% rename from term/gfxterm.c rename to grub-core/term/gfxterm.c diff --git a/term/i386/pc/console.c b/grub-core/term/i386/pc/console.c similarity index 100% rename from term/i386/pc/console.c rename to grub-core/term/i386/pc/console.c diff --git a/term/i386/pc/vga.c b/grub-core/term/i386/pc/vga.c similarity index 100% rename from term/i386/pc/vga.c rename to grub-core/term/i386/pc/vga.c diff --git a/term/i386/pc/vga_text.c b/grub-core/term/i386/pc/vga_text.c similarity index 100% rename from term/i386/pc/vga_text.c rename to grub-core/term/i386/pc/vga_text.c diff --git a/term/i386/vga_common.c b/grub-core/term/i386/vga_common.c similarity index 100% rename from term/i386/vga_common.c rename to grub-core/term/i386/vga_common.c diff --git a/term/ieee1275/ofconsole.c b/grub-core/term/ieee1275/ofconsole.c similarity index 100% rename from term/ieee1275/ofconsole.c rename to grub-core/term/ieee1275/ofconsole.c diff --git a/term/serial.c b/grub-core/term/serial.c similarity index 100% rename from term/serial.c rename to grub-core/term/serial.c diff --git a/term/terminfo.c b/grub-core/term/terminfo.c similarity index 100% rename from term/terminfo.c rename to grub-core/term/terminfo.c diff --git a/term/tparm.c b/grub-core/term/tparm.c similarity index 100% rename from term/tparm.c rename to grub-core/term/tparm.c diff --git a/term/usb_keyboard.c b/grub-core/term/usb_keyboard.c similarity index 100% rename from term/usb_keyboard.c rename to grub-core/term/usb_keyboard.c diff --git a/tests/example_functional_test.c b/grub-core/tests/example_functional_test.c similarity index 95% rename from tests/example_functional_test.c rename to grub-core/tests/example_functional_test.c index 6802d2d53..525988145 100644 --- a/tests/example_functional_test.c +++ b/grub-core/tests/example_functional_test.c @@ -32,4 +32,4 @@ example_test (void) } /* Register example_test method as a functional test. */ -GRUB_FUNCTIONAL_TEST ("example_functional_test", example_test); +GRUB_FUNCTIONAL_TEST (example_functional_test, example_test); diff --git a/tests/lib/functional_test.c b/grub-core/tests/lib/functional_test.c similarity index 100% rename from tests/lib/functional_test.c rename to grub-core/tests/lib/functional_test.c diff --git a/tests/lib/test.c b/grub-core/tests/lib/test.c similarity index 100% rename from tests/lib/test.c rename to grub-core/tests/lib/test.c diff --git a/video/bitmap.c b/grub-core/video/bitmap.c similarity index 100% rename from video/bitmap.c rename to grub-core/video/bitmap.c diff --git a/video/bitmap_scale.c b/grub-core/video/bitmap_scale.c similarity index 100% rename from video/bitmap_scale.c rename to grub-core/video/bitmap_scale.c diff --git a/video/efi_gop.c b/grub-core/video/efi_gop.c similarity index 100% rename from video/efi_gop.c rename to grub-core/video/efi_gop.c diff --git a/video/efi_uga.c b/grub-core/video/efi_uga.c similarity index 100% rename from video/efi_uga.c rename to grub-core/video/efi_uga.c diff --git a/util/sdl.c b/grub-core/video/emu/sdl.c similarity index 100% rename from util/sdl.c rename to grub-core/video/emu/sdl.c diff --git a/video/fb/fbblit.c b/grub-core/video/fb/fbblit.c similarity index 100% rename from video/fb/fbblit.c rename to grub-core/video/fb/fbblit.c diff --git a/video/fb/fbfill.c b/grub-core/video/fb/fbfill.c similarity index 100% rename from video/fb/fbfill.c rename to grub-core/video/fb/fbfill.c diff --git a/video/fb/fbutil.c b/grub-core/video/fb/fbutil.c similarity index 100% rename from video/fb/fbutil.c rename to grub-core/video/fb/fbutil.c diff --git a/video/fb/video_fb.c b/grub-core/video/fb/video_fb.c similarity index 100% rename from video/fb/video_fb.c rename to grub-core/video/fb/video_fb.c diff --git a/video/i386/pc/vbe.c b/grub-core/video/i386/pc/vbe.c similarity index 100% rename from video/i386/pc/vbe.c rename to grub-core/video/i386/pc/vbe.c diff --git a/video/ieee1275.c b/grub-core/video/ieee1275.c similarity index 100% rename from video/ieee1275.c rename to grub-core/video/ieee1275.c diff --git a/video/readers/jpeg.c b/grub-core/video/readers/jpeg.c similarity index 100% rename from video/readers/jpeg.c rename to grub-core/video/readers/jpeg.c diff --git a/video/readers/png.c b/grub-core/video/readers/png.c similarity index 100% rename from video/readers/png.c rename to grub-core/video/readers/png.c diff --git a/video/readers/tga.c b/grub-core/video/readers/tga.c similarity index 100% rename from video/readers/tga.c rename to grub-core/video/readers/tga.c diff --git a/video/sm712.c b/grub-core/video/sm712.c similarity index 100% rename from video/sm712.c rename to grub-core/video/sm712.c diff --git a/video/video.c b/grub-core/video/video.c similarity index 100% rename from video/video.c rename to grub-core/video/video.c diff --git a/modules.def b/modules.def new file mode 100644 index 000000000..4877533ef --- /dev/null +++ b/modules.def @@ -0,0 +1,497 @@ +AutoGen definitions Makefile.tpl; + +library = { + name = libutil.a; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + + nodist = grub_script.tab.c; + nodist = grub_script.yy.c; + nodist = libutil_a_init.c; + + source = grub-core/gnulib/error.c; + source = grub-core/gnulib/fnmatch.c; + source = grub-core/gnulib/getdelim.c; + source = grub-core/gnulib/getline.c; + source = grub-core/gnulib/getopt1.c; + source = grub-core/gnulib/getopt.c; + source = grub-core/gnulib/progname.c; + + source = util/misc.c; + source = grub-core/kern/misc.c; + source = grub-core/kern/emu/misc.c; + source = grub-core/kern/emu/hostfs.c; + source = grub-core/kern/emu/getroot.c; + source = grub-core/kern/emu/hostdisk.c; + + source = grub-core/commands/blocklist.c; + source = grub-core/commands/extcmd.c; + source = grub-core/commands/ls.c; + source = grub-core/disk/dmraid_nvidia.c; + source = grub-core/disk/host.c; + source = grub-core/disk/loopback.c; + source = grub-core/disk/lvm.c; + source = grub-core/disk/mdraid_linux.c; + source = grub-core/disk/raid5_recover.c; + source = grub-core/disk/raid6_recover.c; + source = grub-core/disk/raid.c; + source = grub-core/fs/affs.c; + source = grub-core/fs/afs_be.c; + source = grub-core/fs/afs.c; + source = grub-core/fs/befs_be.c; + source = grub-core/fs/befs.c; + source = grub-core/fs/cpio.c; + source = grub-core/fs/ext2.c; + source = grub-core/fs/fat.c; + source = grub-core/fs/fshelp.c; + source = grub-core/fs/hfs.c; + source = grub-core/fs/hfsplus.c; + source = grub-core/fs/iso9660.c; + source = grub-core/fs/jfs.c; + source = grub-core/fs/minix.c; + source = grub-core/fs/nilfs2.c; + source = grub-core/fs/ntfs.c; + source = grub-core/fs/ntfscomp.c; + source = grub-core/fs/reiserfs.c; + source = grub-core/fs/sfs.c; + source = grub-core/fs/tar.c; + source = grub-core/fs/udf.c; + source = grub-core/fs/ufs2.c; + source = grub-core/fs/ufs.c; + source = grub-core/fs/xfs.c; + source = grub-core/kern/command.c; + source = grub-core/kern/device.c; + source = grub-core/kern/disk.c; + source = grub-core/kern/env.c; + source = grub-core/kern/err.c; + source = grub-core/kern/file.c; + source = grub-core/kern/fs.c; + source = grub-core/kern/handler.c; + source = grub-core/kern/list.c; + source = grub-core/kern/parser.c; + source = grub-core/kern/partition.c; + source = grub-core/lib/arg.c; + source = grub-core/lib/crc.c; + source = grub-core/lib/crypto.c; + source = grub-core/lib/envblk.c; + source = grub-core/lib/hexdump.c; + source = grub-core/lib/libgcrypt-grub/cipher/sha512.c; + source = grub-core/lib/LzFind.c; + source = grub-core/lib/LzmaEnc.c; + source = grub-core/lib/pbkdf2.c; + source = grub-core/normal/datetime.c; + source = grub-core/normal/misc.c; + source = grub-core/partmap/acorn.c; + source = grub-core/partmap/amiga.c; + source = grub-core/partmap/apple.c; + source = grub-core/partmap/gpt.c; + source = grub-core/partmap/msdos.c; + source = grub-core/partmap/sun.c; + source = grub-core/script/function.c; + source = grub-core/script/lexer.c; + source = grub-core/script/main.c; + source = grub-core/script/script.c; + common; +}; + +program = { + name = grub-bin2h; + source = util/bin2h.c; + ldadd = libutil.a; + mansection = 1; + common; +}; + +program = { + name = grub-mkimage; + mansection = 1; + + source = util/grub-mkrawimage.c; + source = util/resolve.c; + + x86_efi = util/i386/efi/grub-mkimage.c; + x86_efi = util/resolve.c; + + ldadd = libutil.a; + + sparc64_ieee1275_cppflags = '-DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + mips_cppflags = '-DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + i386_pc_cppflags = '-DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + i386_qemu_cppflags = '-DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + + i386_pc; i386_qemu; mips; sparc64_ieee1275; +}; + +program = { + name = grub-mkelfimage; + mansection = 1; + source = util/elf/grub-mkimage.c; + source = util/resolve.c; + + ldadd = libutil.a; + common; +}; + +program = { + name = grub-mkisofs; + mansection = 1; + source = util/mkisofs/eltorito.c; + source = util/mkisofs/hash.c; + source = util/mkisofs/joliet.c; + source = util/mkisofs/match.c; + source = util/mkisofs/mkisofs.c; + source = util/mkisofs/multi.c; + source = util/mkisofs/name.c; + source = util/mkisofs/rock.c; + source = util/mkisofs/tree.c; + source = util/mkisofs/write.c; + source = grub-core/gnulib/progname.c; + source = grub-core/gnulib/error.c; + cflags = '$(CFLAGS_MKISOFS)'; + cppflags = '$(CPPFLAGS_MKISOFS)'; + common; +}; + +program = { + name = grub-mkrelpath; + mansection = 1; + + source = util/grub-mkrelpath.c; + + ldadd = libutil.a; + common; +}; + +program = { + name = grub-script-check; + mansection = 1; + + source = util/grub-script-check.c; + + ldadd = libutil.a; + common; +}; + +program = { + name = grub-editenv; + mansection = 1; + + source = util/grub-editenv.c; + + ldadd = libutil.a; + common; +}; + +program = { + name = grub-mkpasswd-pbkdf2; + mansection = 1; + + source = util/grub-mkpasswd-pbkdf2.c; + + ldadd = libutil.a; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + common; +}; + +program = { + name = grub-macho2img; + mansection = 1; + source = util/grub-macho2img.c; +}; + +program = { + name = grub-pe2elf; + mansection = 1; + source = util/grub-pe2elf.c; + + ldadd = libutil.a; +}; + +program = { + name = grub-fstest; + mansection = 1; + source = util/grub-fstest.c; + + ldadd = libutil.a; + enable = COND_GRUB_FSTEST; + common; +}; + +program = { + name = grub-mkfont; + mansection = 1; + source = util/grub-mkfont.c; + + ldadd = libutil.a; + cflags = '$(freetype_cflags)'; + ldflags = '$(freetype_libs)'; + common; + enable = COND_GRUB_MKFONT; +}; + +program = { + name = grub-mkdevicemap; + installdir = sbin; + mansection = 8; + source = util/grub-mkdevicemap.c; + source = util/deviceiter.c; + source = util/devicemap.c; + + sparc64_ieee1275 = util/grub-mkdevicemap.c; + sparc64_ieee1275 = util/deviceiter.c; + sparc64_ieee1275 = util/ieee1275/ofpath.c; + sparc64_ieee1275 = util/ieee1275/devicemap.c; + + ldadd = libutil.a; + common; +}; + +program = { + name = grub-probe; + installdir = sbin; + mansection = 8; + source = util/grub-probe.c; + + ldadd = libutil.a; + common; +}; + +program = { + name = grub-setup; + installdir = sbin; + mansection = 8; + i386_pc = util/i386/pc/grub-setup.c; + i386_pc = util/raid.c; + i386_pc = util/lvm.c; + + sparc64_ieee1275 = util/ieee1275/ofpath.c; + sparc64_ieee1275 = util/sparc64/ieee1275/grub-setup.c; + sparc64_ieee1275 = util/raid.c; + sparc64_ieee1275 = util/lvm.c; + + ldadd = libutil.a; +}; + +program = { + name = grub-ofpathname; + installdir = sbin; + source = util/ieee1275/grub-ofpathname.c; + source = util/ieee1275/ofpath.c; + + ldadd = libutil.a; + sparc64_ieee1275; +}; + +data = { + source = util/grub.d/README; + installdir = grubconf; + common; +}; + +script = { + name = '00_header'; + source = util/grub.d/00_header.in; + installdir = grubconf; + common; +}; + +script = { + name = '10_windows'; + source = util/grub.d/10_windows.in; + installdir = grubconf; +}; + +script = { + name = '10_hurd'; + source = util/grub.d/10_hurd.in; + installdir = grubconf; +}; + +script = { + name = '10_linux'; + source = util/grub.d/10_linux.in; + installdir = grubconf; + common; +}; + +script = { + name = '30_os-prober'; + source = util/grub.d/30_os-prober.in; + installdir = grubconf; + common; +}; + +script = { + name = '40_custom'; + source = util/grub.d/40_custom.in; + installdir = grubconf; + common; +}; + +script = { + mansection = 1; + name = grub-mkrescue; + source = util/grub-mkrescue.in; + powerpc_ieee1275 = util/powerpc/ieee1275/grub-mkrescue.in; + i386_pc; + i386_qemu; + i386_coreboot; +}; + +script = { + mansection = 8; + installdir = sbin; + name = grub-install; + source = util/grub-install.in; + x86_efi = util/i386/efi/grub-install.in; + i386_ieee1275 = util/ieee1275/grub-install.in; + powerpc_ieee1275 = util/ieee1275/grub-install.in; + mips; + i386_pc; + i386_qemu; + i386_coreboot; +}; + +script = { + name = grub-mkconfig; + source = util/grub-mkconfig.in; + mansection = 8; + installdir = sbin; + common; +}; + +script = { + name = grub-set-default; + source = util/grub-set-default.in; + mansection = 8; + installdir = sbin; + common; +}; + +script = { + name = grub-reboot; + source = util/grub-reboot.in; + mansection = 8; + installdir = sbin; + common; +}; + +script = { + name = grub-mkconfig_lib; + source = util/grub-mkconfig_lib.in; + installdir = pkglib; + common; +}; + +script = { + name = update-grub_lib; + source = util/update-grub_lib.in; + installdir = pkglib; + common; +}; + +test_script = { + name = grub-shell; + source = tests/util/grub-shell.in; + common; +}; + +test_script = { + name = grub-shell-tester; + source = tests/util/grub-shell-tester.in; + common; +}; + +test_script = { + name = example_scripted_test; + source = tests/example_scripted_test.in; + common; +}; + +test_script = { + name = example_grub_script_test; + source = tests/example_grub_script_test.in; + common; +}; + +test_script = { + name = grub_script_echo1; + source = tests/grub_script_echo1.in; + common; + enable; +}; + +test_script = { + name = grub_script_echo_keywords; + source = tests/grub_script_echo_keywords.in; + common; + enable; +}; + +test_script = { + name = grub_script_vars1; + source = tests/grub_script_vars1.in; + common; + enable; +}; + +test_script = { + name = grub_script_for1; + source = tests/grub_script_for1.in; + common; + enable; +}; + +test_script = { + name = grub_script_while1; + source = tests/grub_script_while1.in; + common; + enable; +}; + +test_script = { + name = grub_script_if; + source = tests/grub_script_if.in; + common; + enable; +}; + +test_script = { + name = grub_script_blanklines; + source = tests/grub_script_blanklines.in; + common; + enable; +}; + +test_script = { + name = grub_script_final_semicolon; + source = tests/grub_script_final_semicolon.in; + common; + enable; +}; + +test_script = { + name = grub_script_dollar; + source = tests/grub_script_dollar.in; + common; + enable; +}; + +test_script = { + name = grub_script_comments; + source = tests/grub_script_comments.in; + common; + enable; +}; + +test_program = { + name = example_unit_test; + source = tests/example_unit_test.c; + source = tests/lib/unit_test.c; + source = grub-core/kern/list.c; + source = grub-core/kern/misc.c; + source = grub-core/tests/lib/test.c; + cflags = -Wno-format; + common; +}; diff --git a/po/Makefile.am b/po/Makefile.am new file mode 100644 index 000000000..e69de29bb diff --git a/tests/example_grub_script_test.in b/tests/example_grub_script_test.in index 93a90a18e..6fa3dc98a 100644 --- a/tests/example_grub_script_test.in +++ b/tests/example_grub_script_test.in @@ -1,3 +1,3 @@ -#! @builddir@/grub-shell-tester --modules=echo +#! @abs_top_builddir@/grub-shell-tester --modules=echo echo "hello world" diff --git a/tests/lib/unit_test.c b/tests/lib/unit_test.c index e461150de..92c8ae33a 100644 --- a/tests/lib/unit_test.c +++ b/tests/lib/unit_test.c @@ -105,5 +105,4 @@ grub_exit (void) exit (1); } -struct grub_handler_class grub_term_input_class; -struct grub_handler_class grub_term_output_class; +struct grub_term_input *grub_term_inputs; diff --git a/tests/util/grub-shell-tester.in b/tests/util/grub-shell-tester.in index e9507c8f5..f1e91f561 100644 --- a/tests/util/grub-shell-tester.in +++ b/tests/util/grub-shell-tester.in @@ -91,7 +91,7 @@ if [ "x${source}" = x ] ; then fi outfile1=`mktemp` -@builddir@/grub-shell --qemu-opts="${qemuopts}" --modules=${modules} ${source} >${outfile1} +@abs_top_builddir@/grub-shell --qemu-opts="${qemuopts}" --modules=${modules} ${source} >${outfile1} outfile2=`mktemp` bash ${source} >${outfile2} diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index a41a6f6f4..8324beb97 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -123,10 +123,14 @@ source /boot/grub/testcase.cfg halt EOF +rootdir=`mktemp -d` +(cd @abs_top_builddir@ && make DESTDIR=$rootdir install) >/dev/null 2>&1 + isofile=`mktemp` -grub-mkrescue --output=${isofile} --override-directory=${builddir} \ - /boot/grub/grub.cfg=${cfgfile} /boot/grub/testcase.cfg=${source} \ - >/dev/null 2>&1 +sh @abs_top_builddir@/grub-mkrescue --output=${isofile} \ + --root-directory=${rootdir} /boot/grub/grub.cfg=${cfgfile} \ + /boot/grub/testcase.cfg=${source} >/dev/null 2>&1 +rm -rf $rootdir hdafile=`mktemp` cp ${isofile} ${hdafile} diff --git a/util/elf/grub-mkimage.c b/util/elf/grub-mkimage.c index 04a19bc4e..fa9b202eb 100644 --- a/util/elf/grub-mkimage.c +++ b/util/elf/grub-mkimage.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include diff --git a/util/grub-editenv.c b/util/grub-editenv.c index f21042c97..24c36329c 100644 --- a/util/grub-editenv.c +++ b/util/grub-editenv.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -34,24 +35,6 @@ #define DEFAULT_ENVBLK_SIZE 1024 -void -grub_putchar (int c) -{ - putchar (c); -} - -void -grub_refresh (void) -{ - fflush (stdout); -} - -int -grub_getkey (void) -{ - return 0; -} - char * grub_env_get (const char *name __attribute__ ((unused))) { diff --git a/util/grub-fstest.c b/util/grub-fstest.c index c03c43451..9ac5cf550 100644 --- a/util/grub-fstest.c +++ b/util/grub-fstest.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -33,8 +34,6 @@ #include #include -#include - #include #include #include @@ -43,27 +42,6 @@ #include "progname.h" -void -grub_putchar (int c) -{ - putchar (c); -} - -int -grub_getkey (void) -{ - return -1; -} - -struct grub_handler_class grub_term_input_class; -struct grub_handler_class grub_term_output_class; - -void -grub_refresh (void) -{ - fflush (stdout); -} - static grub_err_t execute_command (char *name, int n, char **args) { diff --git a/util/grub-mkdevicemap.c b/util/grub-mkdevicemap.c index c68482af1..d534ff9ef 100644 --- a/util/grub-mkdevicemap.c +++ b/util/grub-mkdevicemap.c @@ -29,6 +29,7 @@ #include #include +#include #include #include #include diff --git a/util/grub-mkfont.c b/util/grub-mkfont.c index 51e2e494c..30dd96a21 100644 --- a/util/grub-mkfont.c +++ b/util/grub-mkfont.c @@ -18,6 +18,8 @@ #include #include +#include +#include #include #include #include diff --git a/util/grub-mkpasswd-pbkdf2.c b/util/grub-mkpasswd-pbkdf2.c index a00b1e990..4a218bc82 100644 --- a/util/grub-mkpasswd-pbkdf2.c +++ b/util/grub-mkpasswd-pbkdf2.c @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -30,37 +31,6 @@ #include "progname.h" -/* Few functions to make crypto happy. */ -void * -grub_memmove (void *dest, const void *src, grub_size_t n) -{ - return memmove (dest, src, n); -} - -void * -grub_memset (void *s, int c, grub_size_t n) -{ - return memset (s, c, n); -} - -int -grub_vprintf (const char *fmt, va_list args) -{ - return vprintf (fmt, args); -} - -int -grub_vsnprintf (char *str, grub_size_t n, const char *fmt, va_list args) -{ - return vsnprintf (str, n, fmt, args); -} - -void -grub_abort (void) -{ - abort (); -} - static struct option options[] = { {"iteration_count", required_argument, 0, 'c'}, diff --git a/util/grub-mkrawimage.c b/util/grub-mkrawimage.c index 20a344d04..ff3b9df83 100644 --- a/util/grub-mkrawimage.c +++ b/util/grub-mkrawimage.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include diff --git a/util/grub-mkrelpath.c b/util/grub-mkrelpath.c index 327f0c866..4e9d0ed63 100644 --- a/util/grub-mkrelpath.c +++ b/util/grub-mkrelpath.c @@ -18,6 +18,7 @@ */ #include +#include #include #include @@ -97,7 +98,7 @@ main (int argc, char *argv[]) argument = argv[optind]; - relpath = make_system_path_relative_to_its_root (argument); + relpath = grub_make_system_path_relative_to_its_root (argument); printf ("%s\n", relpath); free (relpath); diff --git a/util/grub-mkrescue.in b/util/grub-mkrescue.in index 44e80b106..2fdb58114 100644 --- a/util/grub-mkrescue.in +++ b/util/grub-mkrescue.in @@ -1,7 +1,7 @@ #! /bin/sh -e # Make GRUB rescue image -# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. +# Copyright (C) 1999,2000,2001,2002,2003,2004,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 @@ -28,8 +28,11 @@ PACKAGE_TARNAME=@PACKAGE_TARNAME@ PACKAGE_VERSION=@PACKAGE_VERSION@ target_cpu=@target_cpu@ native_platform=@platform@ -pkglib_DATA="@pkglib_DATA@" +pkglib_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst" +mkimage=${bindir}/grub-mkimage +mkisofs=${bindir}/grub-mkisofs +mkelfimage=${bindir}/grub-mkelfimage multiboot_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/${target_cpu}-multiboot pc_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/${target_cpu}-pc @@ -70,6 +73,8 @@ for option in "$@"; do PATH=${override_dir}:$PATH export PATH ;; + --root-directory=*) + rootdir=`echo "${option}/" | sed 's/--root-directory=//'` ;; -*) echo "Unrecognized option \`$option'" 1>&2 usage @@ -121,6 +126,14 @@ process_input_dir () done } +if [ "${rootdir}" != "" ] ; then + coreboot_dir="${rootdir}/${coreboot_dir}" + pc_dir="${rootdir}/${pc_dir}" + mkimage="${rootdir}/${mkimage}" + mkisofs="${rootdir}/${mkisofs}" + mkelfimage="${rootdir}/${mkelfimage}" +fi + if [ "${override_dir}" = "" ] ; then if test -e "${multiboot_dir}" ; then process_input_dir ${multiboot_dir} multiboot @@ -160,7 +173,7 @@ EOF tar -C ${memdisk_dir} -cf ${memdisk_img} boot rm -rf ${memdisk_dir} - grub-mkelfimage -d ${multiboot_dir}/ -m ${memdisk_img} -o ${iso9660_dir}/boot/multiboot.img \ + ${mkelfimage} -d ${multiboot_dir}/ -m ${memdisk_img} -o ${iso9660_dir}/boot/multiboot.img \ memdisk tar search iso9660 configfile sh \ ata at_keyboard rm -f ${memdisk_img} @@ -171,7 +184,7 @@ fi if test -e "${pc_dir}" ; then echo "Enabling BIOS support ..." core_img=`mktemp "$MKTEMP_TEMPLATE"` - grub-mkimage -d ${pc_dir}/ -o ${core_img} --prefix=/boot/grub/i386-pc \ + ${mkimage} -d ${pc_dir}/ -o ${core_img} --prefix=/boot/grub/i386-pc \ iso9660 biosdisk cat ${pc_dir}/cdboot.img ${core_img} > ${iso9660_dir}/boot/grub/i386-pc/eltorito.img @@ -192,7 +205,7 @@ if test -e "${pc_dir}" ; then fi # build iso image -grub-mkisofs ${grub_mkisofs_arguments} --protective-msdos-label -o ${output_image} -r ${iso9660_dir} ${source} +${mkisofs} ${grub_mkisofs_arguments} --protective-msdos-label -o ${output_image} -r ${iso9660_dir} ${source} rm -rf ${iso9660_dir} rm -f ${embed_img} diff --git a/util/grub-probe.c b/util/grub-probe.c index bb41480e2..0cc35d4c5 100644 --- a/util/grub-probe.c +++ b/util/grub-probe.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -26,15 +27,13 @@ #include #include #include -#include -#include +#include +#include #include #include #include #include -#include - #include #include #include @@ -58,27 +57,6 @@ enum { int print = PRINT_FS; static unsigned int argument_is_device = 0; -void -grub_putchar (int c) -{ - putchar (c); -} - -int -grub_getkey (void) -{ - return -1; -} - -struct grub_handler_class grub_term_input_class; -struct grub_handler_class grub_term_output_class; - -void -grub_refresh (void) -{ - fflush (stdout); -} - static void probe_partmap (grub_disk_t disk) { @@ -261,7 +239,7 @@ probe (const char *path, char *device_name) grub_util_info ("reading %s via OS facilities", path); filebuf_via_sys = grub_util_read_image (path); - rel_path = make_system_path_relative_to_its_root (path); + rel_path = grub_make_system_path_relative_to_its_root (path); grub_path = xasprintf ("(%s)%s", drive_name, rel_path); free (rel_path); grub_util_info ("reading %s via GRUB facilities", grub_path); diff --git a/util/grub-script-check.c b/util/grub-script-check.c index dc732aa01..fa2459306 100644 --- a/util/grub-script-check.c +++ b/util/grub-script-check.c @@ -21,13 +21,12 @@ #include #include #include +#include #include #include #include #include -#include - #define _GNU_SOURCE 1 #include @@ -39,75 +38,6 @@ #include "progname.h" -void -grub_putchar (int c) -{ - putchar (c); -} - -int -grub_getkey (void) -{ - return -1; -} - -void -grub_refresh (void) -{ - fflush (stdout); -} - -char * -grub_script_execute_argument_to_string (struct grub_script_arg *arg __attribute__ ((unused))) -{ - return 0; -} - -grub_err_t -grub_script_execute_cmdline (struct grub_script_cmd *cmd __attribute__ ((unused))) -{ - return 0; -} - -grub_err_t -grub_script_execute_cmdblock (struct grub_script_cmd *cmd __attribute__ ((unused))) -{ - return 0; -} - -grub_err_t -grub_script_execute_cmdif (struct grub_script_cmd *cmd __attribute__ ((unused))) -{ - return 0; -} - -grub_err_t -grub_script_execute_cmdfor (struct grub_script_cmd *cmd __attribute__ ((unused))) -{ - return 0; -} - -grub_err_t -grub_script_execute_cmdwhile (struct grub_script_cmd *cmd __attribute__ ((unused))) -{ - return 0; -} - -grub_err_t -grub_script_execute_menuentry (struct grub_script_cmd *cmd __attribute__ ((unused))) -{ - return 0; -} - -grub_err_t -grub_script_execute (struct grub_script *script) -{ - if (script == 0 || script->cmd == 0) - return 0; - - return script->cmd->exec (script->cmd); -} - static struct option options[] = { {"help", no_argument, 0, 'h'}, @@ -145,7 +75,7 @@ main (int argc, char *argv[]) char *input; FILE *file = 0; int verbose = 0; - struct grub_script *script; + struct grub_script *script = 0; auto grub_err_t get_config_line (char **line, int cont); grub_err_t get_config_line (char **line, int cont __attribute__ ((unused))) diff --git a/util/i386/efi/grub-mkimage.c b/util/i386/efi/grub-mkimage.c index f8c0f152e..57fba9168 100644 --- a/util/i386/efi/grub-mkimage.c +++ b/util/i386/efi/grub-mkimage.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include diff --git a/util/i386/pc/grub-setup.c b/util/i386/pc/grub-setup.c index 63fa8c328..66d45620c 100644 --- a/util/i386/pc/grub-setup.c +++ b/util/i386/pc/grub-setup.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -28,19 +29,17 @@ #include #include #include -#include +#include #include #include #include #include #include #include -#include +#include static const grub_gpt_part_type_t grub_gpt_partition_type_bios_boot = GRUB_GPT_PARTITION_TYPE_BIOS_BOOT; -#include - #include #include #include @@ -57,27 +56,6 @@ static const grub_gpt_part_type_t grub_gpt_partition_type_bios_boot = GRUB_GPT_P #define DEFAULT_BOOT_FILE "boot.img" #define DEFAULT_CORE_FILE "core.img" -void -grub_putchar (int c) -{ - putchar (c); -} - -int -grub_getkey (void) -{ - return -1; -} - -struct grub_handler_class grub_term_input_class; -struct grub_handler_class grub_term_output_class; - -void -grub_refresh (void) -{ - fflush (stdout); -} - static void setup (const char *dir, const char *boot_file, const char *core_file, @@ -423,7 +401,7 @@ unable_to_embed: /* Make sure that GRUB reads the identical image as the OS. */ tmp_img = xmalloc (core_size); core_path_dev_full = grub_util_get_path (dir, core_file); - core_path_dev = make_system_path_relative_to_its_root (core_path_dev_full); + core_path_dev = grub_make_system_path_relative_to_its_root (core_path_dev_full); free (core_path_dev_full); /* It is a Good Thing to sync two times. */ diff --git a/util/lvm.c b/util/lvm.c index 0a0916344..bb2c19fe3 100644 --- a/util/lvm.c +++ b/util/lvm.c @@ -19,7 +19,7 @@ /* We only support LVM on Linux. */ #ifdef __linux__ - +#include #include #include diff --git a/util/misc.c b/util/misc.c index f9d860d9a..a7d555092 100644 --- a/util/misc.c +++ b/util/misc.c @@ -38,11 +38,13 @@ #include #include #include +#include #include #include #include #include #include +#include #define ENABLE_RELOCATABLE 0 #include "progname.h" @@ -63,53 +65,6 @@ #include #endif -int verbosity = 0; - -void -grub_util_warn (const char *fmt, ...) -{ - va_list ap; - - fprintf (stderr, _("%s: warn:"), program_name); - fprintf (stderr, " "); - va_start (ap, fmt); - vfprintf (stderr, fmt, ap); - va_end (ap); - fprintf (stderr, ".\n"); - fflush (stderr); -} - -void -grub_util_info (const char *fmt, ...) -{ - if (verbosity > 0) - { - va_list ap; - - fprintf (stderr, _("%s: info:"), program_name); - fprintf (stderr, " "); - va_start (ap, fmt); - vfprintf (stderr, fmt, ap); - va_end (ap); - fprintf (stderr, ".\n"); - fflush (stderr); - } -} - -void -grub_util_error (const char *fmt, ...) -{ - va_list ap; - - fprintf (stderr, _("%s: error:"), program_name); - fprintf (stderr, " "); - va_start (ap, fmt); - vfprintf (stderr, fmt, ap); - va_end (ap); - fprintf (stderr, ".\n"); - exit (1); -} - #ifdef GRUB_UTIL int grub_err_printf (const char *fmt, ...) @@ -125,41 +80,6 @@ grub_err_printf (const char *fmt, ...) } #endif -void * -xmalloc (size_t size) -{ - void *p; - - p = malloc (size); - if (! p) - grub_util_error ("out of memory"); - - return p; -} - -void * -xrealloc (void *ptr, size_t size) -{ - ptr = realloc (ptr, size); - if (! ptr) - grub_util_error ("out of memory"); - - return ptr; -} - -char * -xstrdup (const char *str) -{ - size_t len; - char *newstr; - - len = strlen (str); - newstr = (char *) xmalloc (len + 1); - memcpy (newstr, str, len + 1); - - return newstr; -} - char * grub_util_get_path (const char *dir, const char *file) { @@ -268,6 +188,89 @@ grub_util_write_image (const char *img, size_t size, FILE *out) grub_util_error ("write failed"); } +char * +grub_script_execute_argument_to_string (struct grub_script_arg *arg __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdline (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdblock (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdif (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdfor (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdwhile (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_menuentry (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute (struct grub_script *script) +{ + if (script == 0 || script->cmd == 0) + return 0; + + return script->cmd->exec (script->cmd); +} + +void +grub_putchar (int c) +{ + putchar (c); +} + +int +grub_getkey (void) +{ + return -1; +} + +void +grub_refresh (void) +{ + fflush (stdout); +} + +int +grub_dl_ref (grub_dl_t mod) +{ + (void) mod; + return 0; +} + +int +grub_dl_unref (grub_dl_t mod) +{ + (void) mod; + return 0; +} + /* Some functions that we don't use. */ void grub_mm_init_region (void *addr __attribute__ ((unused)), @@ -275,64 +278,7 @@ grub_mm_init_region (void *addr __attribute__ ((unused)), { } -#if GRUB_NO_MODULES -void -grub_register_exported_symbols (void) -{ -} -#endif - -void -grub_exit (void) -{ - exit (1); -} - -grub_uint32_t -grub_get_rtc (void) -{ - struct timeval tv; - - gettimeofday (&tv, 0); - - return (tv.tv_sec * GRUB_TICKS_PER_SECOND - + (((tv.tv_sec % GRUB_TICKS_PER_SECOND) * 1000000 + tv.tv_usec) - * GRUB_TICKS_PER_SECOND / 1000000)); -} - -grub_uint64_t -grub_get_time_ms (void) -{ - struct timeval tv; - - gettimeofday (&tv, 0); - - return (tv.tv_sec * 1000 + tv.tv_usec / 1000); -} - -#ifdef __MINGW32__ - -void -grub_millisleep (grub_uint32_t ms) -{ - Sleep (ms); -} - -#else - -void -grub_millisleep (grub_uint32_t ms) -{ - struct timespec ts; - - ts.tv_sec = ms / 1000; - ts.tv_nsec = (ms % 1000) * 1000000; - nanosleep (&ts, NULL); -} - -#endif - -#if !(defined (__i386__) || defined (__x86_64__)) && GRUB_NO_MODULES +#if !(defined (__i386__) || defined (__x86_64__)) void grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) @@ -340,19 +286,6 @@ grub_arch_sync_caches (void *address __attribute__ ((unused)), } #endif -#ifndef HAVE_VASPRINTF - -int -vasprintf (char **buf, const char *fmt, va_list ap) -{ - /* Should be large enough. */ - *buf = xmalloc (512); - - return vsprintf (*buf, fmt, ap); -} - -#endif - #ifndef HAVE_ASPRINTF int @@ -370,23 +303,6 @@ asprintf (char **buf, const char *fmt, ...) #endif -char * -xasprintf (const char *fmt, ...) -{ - va_list ap; - char *result; - - va_start (ap, fmt); - if (vasprintf (&result, fmt, ap) < 0) - { - if (errno == ENOMEM) - grub_util_error ("out of memory"); - return NULL; - } - - return result; -} - #ifdef __MINGW32__ void sync (void) @@ -482,104 +398,6 @@ get_win32_path (const char *path) } #endif -/* This function never prints trailing slashes (so that its output - can be appended a slash unconditionally). */ -char * -make_system_path_relative_to_its_root (const char *path) -{ - struct stat st; - char *p, *buf, *buf2, *buf3; - uintptr_t offset = 0; - dev_t num; - size_t len; - - /* canonicalize. */ - p = canonicalize_file_name (path); - - if (p == NULL) - grub_util_error ("failed to get canonical path of %s", path); - - len = strlen (p) + 1; - buf = xstrdup (p); - free (p); - - if (stat (buf, &st) < 0) - grub_util_error ("cannot stat %s: %s", buf, strerror (errno)); - - buf2 = xstrdup (buf); - num = st.st_dev; - - /* This loop sets offset to the number of chars of the root - directory we're inspecting. */ - while (1) - { - p = strrchr (buf, '/'); - if (p == NULL) - /* This should never happen. */ - grub_util_error ("FIXME: no / in buf. (make_system_path_relative_to_its_root)"); - if (p != buf) - *p = 0; - else - *++p = 0; - - if (stat (buf, &st) < 0) - grub_util_error ("cannot stat %s: %s", buf, strerror (errno)); - - /* buf is another filesystem; we found it. */ - if (st.st_dev != num) - { - /* offset == 0 means path given is the mount point. - This works around special-casing of "/" in Un*x. This function never - prints trailing slashes (so that its output can be appended a slash - unconditionally). Each slash in is considered a preceding slash, and - therefore the root directory is an empty string. */ - if (offset == 0) - { - free (buf); - free (buf2); - return xstrdup (""); - } - else - break; - } - - offset = p - buf; - /* offset == 1 means root directory. */ - if (offset == 1) - { - /* Include leading slash. */ - offset = 0; - break; - } - } - free (buf); - buf3 = xstrdup (buf2 + offset); - free (buf2); - -#ifdef __CYGWIN__ - if (st.st_dev != (DEV_CYGDRIVE_MAJOR << 16)) - { - /* Reached some mount point not below /cygdrive. - GRUB does not know Cygwin's emulated mounts, - convert to Win32 path. */ - grub_util_info ("Cygwin path = %s\n", buf3); - char * temp = get_win32_path (buf3); - free (buf3); - buf3 = temp; - } -#endif - - /* Remove trailing slashes, return empty string if root directory. */ - len = strlen (buf3); - while (len > 0 && buf3[len - 1] == '/') - { - buf3[len - 1] = '\0'; - len--; - } - - return buf3; -} - #ifdef GRUB_UTIL void grub_util_init_nls (void) diff --git a/util/raid.c b/util/raid.c index ec3ecd26e..edf865aa7 100644 --- a/util/raid.c +++ b/util/raid.c @@ -19,6 +19,7 @@ /* We only support RAID on Linux. */ #ifdef __linux__ +#include #include #include diff --git a/util/resolve.c b/util/resolve.c index 8b33beba0..7eadffd38 100644 --- a/util/resolve.c +++ b/util/resolve.c @@ -21,8 +21,9 @@ #include #include -#include +#include #include +#include /* Module. */ struct mod_list diff --git a/util/sparc64/ieee1275/grub-setup.c b/util/sparc64/ieee1275/grub-setup.c index 06bc16795..7051fd078 100644 --- a/util/sparc64/ieee1275/grub-setup.c +++ b/util/sparc64/ieee1275/grub-setup.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -29,7 +30,7 @@ #include #include #include -#include +#include #include #include #include @@ -37,8 +38,6 @@ #include #include -#include - #include #include #include @@ -46,7 +45,7 @@ #include #include #include -#include +#include #define _GNU_SOURCE 1 #include @@ -83,27 +82,6 @@ struct boot_blocklist grub_uint32_t len; } __attribute__ ((packed)); -void -grub_putchar (int c) -{ - putchar (c); -} - -int -grub_getkey (void) -{ - return -1; -} - -struct grub_handler_class grub_term_input_class; -struct grub_handler_class grub_term_output_class; - -void -grub_refresh (void) -{ - fflush (stdout); -} - static void setup (const char *prefix, const char *dir, const char *boot_file, const char *core_file, @@ -627,8 +605,8 @@ main (int argc, char *argv[]) find_dest_dev (&ginfo, argv); - ginfo.prefix = make_system_path_relative_to_its_root (ginfo.dir ? - : DEFAULT_DIRECTORY); + ginfo.prefix = grub_make_system_path_relative_to_its_root (ginfo.dir ? + : DEFAULT_DIRECTORY); check_root_dev (&ginfo); From 7ad9681655c4203a2a38e5a0b97ae7d654b1f609 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 6 May 2010 11:38:35 +0530 Subject: [PATCH 136/271] add missing files --- kern/emu/cache.S | 19 ++++++++++++++++++ kern/emu/dl.c | 19 ++++++++++++++++++ kern/emu/full.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ kern/emu/lite.c | 42 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 130 insertions(+) create mode 100644 kern/emu/cache.S create mode 100644 kern/emu/dl.c create mode 100644 kern/emu/full.c create mode 100644 kern/emu/lite.c diff --git a/kern/emu/cache.S b/kern/emu/cache.S new file mode 100644 index 000000000..9975578b8 --- /dev/null +++ b/kern/emu/cache.S @@ -0,0 +1,19 @@ +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if defined(GRUB_CPU_I386) +/* Nothing is necessary. */ +#elif defined(GRUB_CPU_X86_64) +/* Nothing is necessary. */ +#elif defined(GRUB_CPU_SPARC64) +#include "../sparc64/cache.S" +#elif defined(GRUB_CPU_MIPS) +#include "../mips/cache.S" +#elif defined(GRUB_CPU_MIPSEL) +#include "../mips/cache.S" +#elif defined(GRUB_CPU_POWERPC) +#include "../powerpc/cache.S" +#else +#error "No target cpu type is defined" +#endif diff --git a/kern/emu/dl.c b/kern/emu/dl.c new file mode 100644 index 000000000..09e2f4a7a --- /dev/null +++ b/kern/emu/dl.c @@ -0,0 +1,19 @@ +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if defined(GRUB_CPU_I386) +#include "../i386/dl.c" +#elif defined(GRUB_CPU_X86_64) +#include "../x86_64/dl.c" +#elif defined(GRUB_CPU_SPARC64) +#include "../sparc64/dl.c" +#elif defined(GRUB_CPU_MIPS) +#include "../mips/dl.c" +#elif defined(GRUB_CPU_MIPSEL) +#include "../mips/dl.c" +#elif defined(GRUB_CPU_POWERPC) +#include "../powerpc/dl.c" +#else +#error "No target cpu type is defined" +#endif diff --git a/kern/emu/full.c b/kern/emu/full.c new file mode 100644 index 000000000..0bd33337f --- /dev/null +++ b/kern/emu/full.c @@ -0,0 +1,50 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +void +grub_register_exported_symbols (void) +{ +} + +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + (void) ehdr; + return GRUB_ERR_BAD_MODULE; +} + +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) +{ + (void) mod; + (void) ehdr; + return GRUB_ERR_BAD_MODULE; +} + +void +grub_emu_init (void) +{ + grub_no_autoload = 1; +} diff --git a/kern/emu/lite.c b/kern/emu/lite.c new file mode 100644 index 000000000..884ddee10 --- /dev/null +++ b/kern/emu/lite.c @@ -0,0 +1,42 @@ +#include +#include + +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if defined(GRUB_CPU_I386) +#include "../i386/dl.c" +#elif defined(GRUB_CPU_X86_64) +#include "../x86_64/dl.c" +#elif defined(GRUB_CPU_SPARC64) +#include "../sparc64/dl.c" +#elif defined(GRUB_CPU_MIPS) +#include "../mips/dl.c" +#elif defined(GRUB_CPU_MIPSEL) +#include "../mips/dl.c" +#elif defined(GRUB_CPU_POWERPC) +#include "../powerpc/dl.c" +#else +#error "No target cpu type is defined" +#endif + +/* grub-emu-lite supports dynamic module loading, so it won't have any + embedded modules. */ +void +grub_init_all (void) +{ + return; +} + +void +grub_fini_all (void) +{ + return; +} + +void +grub_emu_init (void) +{ + return; +} From 062cdbc1ca22c1cfb5c984da0872c18f1ce97036 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 10 May 2010 13:50:43 +0530 Subject: [PATCH 137/271] added i386-multiboot support --- configure.common | 7 +++++-- gentpl.py | 5 +++-- grub-core/Makefile.kernel | 11 +++++++++++ grub-core/modules.def | 25 ++++++++++++++++++++++++- 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/configure.common b/configure.common index cf40fca0f..a18bc803f 100644 --- a/configure.common +++ b/configure.common @@ -766,6 +766,8 @@ AS_IF([test x$target_cpu = xi386 -a x$platform = xpc], [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) AS_IF([test x$target_cpu = xi386 -a x$platform = xcoreboot], [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xmultiboot], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) AS_IF([test x$target_cpu = xmips -a x$platform = xyeeloong], [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x80200000)]) AS_IF([test x$target_cpu = xpowerpc -a x$platform = xieee1275], @@ -784,9 +786,10 @@ AS_IF([test x$TARGET_APPLE_CC = x1], AM_CONDITIONAL([COND_emu], [test x$platform = xemu]) AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc]) AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi]) -AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot]) -AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275]) AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu]) +AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot]) +AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot]) AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi]) AM_CONDITIONAL([COND_mips_yeeloong], [test x$target_cpu = xmips -a x$platform = xyeeloong]) AM_CONDITIONAL([COND_mips_qemu_mips], [test x$target_cpu = xmips -a x$platform = xqemu_mips]) diff --git a/gentpl.py b/gentpl.py index 214b58afd..d6043d05c 100644 --- a/gentpl.py +++ b/gentpl.py @@ -5,11 +5,12 @@ # GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", - "i386_ieee1275", "x86_64_efi", "mips_yeeloong", "sparc64_ieee1275", + "i386_multiboot", "i386_ieee1275", "x86_64_efi", + "mips_yeeloong", "sparc64_ieee1275", "powerpc_ieee1275" ] GROUPS = {} -GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_ieee1275" ] +GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275" ] GROUPS["x86_64"] = [ "x86_64_efi" ] GROUPS["mips"] = [ "mips_yeeloong" ] GROUPS["sparc64"] = [ "sparc64_ieee1275" ] diff --git a/grub-core/Makefile.kernel b/grub-core/Makefile.kernel index 58e464805..38e2e0ab7 100644 --- a/grub-core/Makefile.kernel +++ b/grub-core/Makefile.kernel @@ -65,6 +65,17 @@ KERNEL_HEADER_FILES += include/grub/machine/memory.h KERNEL_HEADER_FILES += include/grub/machine/loader.h endif +if COND_i386_multiboot +KERNEL_HEADER_FILES += include/grub/boot.h +KERNEL_HEADER_FILES += include/grub/loader.h +KERNEL_HEADER_FILES += include/grub/msdos_partition.h +KERNEL_HEADER_FILES += include/grub/machine/boot.h +KERNEL_HEADER_FILES += include/grub/machine/console.h +KERNEL_HEADER_FILES += include/grub/machine/init.h +KERNEL_HEADER_FILES += include/grub/machine/memory.h +KERNEL_HEADER_FILES += include/grub/machine/loader.h +endif + if COND_i386_qemu KERNEL_HEADER_FILES += include/grub/boot.h KERNEL_HEADER_FILES += include/grub/loader.h diff --git a/grub-core/modules.def b/grub-core/modules.def index c3d90009b..b09516294 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -7,6 +7,7 @@ kernel = { x86_efi_ldflags = '-Wl,-r'; i386_pc_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; i386_coreboot_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + i386_multiboot_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; i386_qemu_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; i386_ieee1275_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; mips_yeeloong_ldflags = '-Wl,-Ttext,$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; @@ -87,6 +88,21 @@ kernel = { i386_coreboot = term/i386/pc/vga_text.c; i386_coreboot = term/i386/vga_common.c; + i386_multiboot = kern/i386/coreboot/startup.S; + i386_multiboot = kern/i386/misc.S; + i386_multiboot = kern/i386/coreboot/init.c; + i386_multiboot = kern/i386/multiboot_mmap.c; + i386_multiboot = kern/i386/halt.c; + i386_multiboot = kern/mm.c; + i386_multiboot = kern/time.c; + i386_multiboot = kern/i386/dl.c; + i386_multiboot = kern/i386/tsc.c; + i386_multiboot = kern/i386/pit.c; + i386_multiboot = kern/generic/rtc_get_time_ms.c; + i386_multiboot = kern/generic/millisleep.c; + i386_multiboot = term/i386/pc/vga_text.c; + i386_multiboot = term/i386/vga_common.c; + i386_qemu = kern/i386/qemu/startup.S; i386_qemu = kern/i386/misc.S; i386_qemu = kern/i386/coreboot/init.c; @@ -202,7 +218,7 @@ kernel = { image_nostrip = { emu; }; image_strip_keep_kernel = { i386_efi; x86_64_efi; }; - image_strip = { powerpc_ieee1275; i386_coreboot; i386_ieee1275; }; + image_strip = { powerpc_ieee1275; i386_coreboot; i386_multiboot; i386_ieee1275; }; image_strip_macho2img = { mips_yeeloong; i386_pc; i386_qemu; sparc64_ieee1275; }; }; @@ -530,6 +546,7 @@ module = { i386_pc; i386_qemu; i386_coreboot; + i386_multiboot; i386_ieee1275; mips_yeeloong; powerpc_ieee1275; @@ -1231,6 +1248,7 @@ module = { i386_pc; i386_qemu; i386_coreboot; + i386_multiboot; i386_ieee1275; }; @@ -1244,6 +1262,7 @@ module = { i386_pc; i386_qemu; i386_coreboot; + i386_multiboot; }; module = { @@ -1328,6 +1347,10 @@ module = { i386_coreboot = mmap/i386/uppermem.c; i386_coreboot = mmap/i386/mmap.c; + i386_multiboot = mmap/mmap.c; + i386_multiboot = mmap/i386/uppermem.c; + i386_multiboot = mmap/i386/mmap.c; + i386_qemu = mmap/mmap.c; i386_qemu = mmap/i386/uppermem.c; i386_qemu = mmap/i386/mmap.c; From 8be3ced19f8b81fcfa852a63b857a2328248ff6c Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 10 May 2010 14:05:10 +0530 Subject: [PATCH 138/271] fix mips build --- grub-core/include/grub/dl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/include/grub/dl.h b/grub-core/include/grub/dl.h index 8c5f4bb2d..218de996c 100644 --- a/grub-core/include/grub/dl.h +++ b/grub-core/include/grub/dl.h @@ -111,7 +111,7 @@ grub_err_t EXPORT_FUNC(grub_dl_register_symbol) (const char *name, void *addr, grub_err_t grub_arch_dl_check_header (void *ehdr); grub_err_t grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr); -#if defined (_mips) && ! GRUB_MACHINE_EMU +#if defined (_mips) && ! defined (GRUB_MACHINE_EMU) #define GRUB_LINKER_HAVE_INIT 1 void grub_arch_dl_init_linker (void); #endif From 1426af206ccb5cd61930d208de7b46f3359ece30 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 10 May 2010 15:08:02 +0530 Subject: [PATCH 139/271] fix vga.c --- grub-core/modules.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/modules.def b/grub-core/modules.def index b09516294..fe77c4cbd 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -1491,7 +1491,7 @@ module = { module = { name = vga; - i386_pc = term/i386/pc/vga.c; + i386_pc = video/i386/pc/vga.c; }; module = { From 2e33ae0d1b334535ecb113fc5c36ac0e6965741d Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 10 May 2010 15:37:18 +0530 Subject: [PATCH 140/271] few minor fixes --- Makefile.am | 4 ++-- gentpl.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile.am b/Makefile.am index d962963c1..c0d6d003b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -33,6 +33,8 @@ AM_LDFLAGS = AM_CPPFLAGS = $(CPPFLAGS_GRUB) -DGRUB_FILE=\"$(subst $(top_srcdir)/,,$<)\" AM_CCASFLAGS = -DASM_FILE=1 +include $(srcdir)/modules.am + # XXX Use Automake's LEX & YACC support grub_script.tab.c grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y $(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/grub-core/script/parser.y @@ -83,5 +85,3 @@ ascii.h: ascii.bitmaps grub-bin2h CLEANFILES += ascii.h $(top_builddir)/grub-core/include/ascii.h platform_HEADERS = config.h - -include $(srcdir)/modules.am diff --git a/gentpl.py b/gentpl.py index d6043d05c..f906bd6d1 100644 --- a/gentpl.py +++ b/gentpl.py @@ -329,7 +329,7 @@ def installdir(default="bin"): def manpage(): r = "if COND_MAN_PAGES\n" - r += "man_MANS += [+ name +].[+ mansection +]\n" + r += gvar_add("man_MANS", "[+ name +].[+ mansection +]\n") r += rule("[+ name +].[+ mansection +]", "", """ $(MAKE) $(AM_MAKEFLAGS) [+ name +] chmod a+x [+ name +] From 65ce0931d0a8ef08395b2174f2e16914b2528b7e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 13 May 2010 14:42:22 +0200 Subject: [PATCH 141/271] Fix inconsistent grub_efiemu_finish_boot_services return type --- efiemu/mm.c | 19 +++++++++++++++++++ include/grub/efiemu/efiemu.h | 10 +++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/efiemu/mm.c b/efiemu/mm.c index 4b293606f..de7d309be 100644 --- a/efiemu/mm.c +++ b/efiemu/mm.c @@ -323,6 +323,25 @@ grub_efiemu_get_memory_map (grub_efi_uintn_t *memory_map_size, return 1; } +grub_err_t +grub_efiemu_finish_boot_services (grub_efi_uintn_t *memory_map_size, + grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t *map_key, + grub_efi_uintn_t *descriptor_size, + grub_efi_uint32_t *descriptor_version) +{ + int val = grub_efiemu_get_memory_map (memory_map_size, + memory_map, map_key, + descriptor_size, + descriptor_version); + if (val == 1) + return GRUB_ERR_NONE; + if (val == -1) + return grub_errno; + return grub_error (GRUB_ERR_IO, "memory map buffer is too small"); +} + + /* Free everything */ grub_err_t grub_efiemu_mm_unload (void) diff --git a/include/grub/efiemu/efiemu.h b/include/grub/efiemu/efiemu.h index fb1b69751..56d4ea8ee 100644 --- a/include/grub/efiemu/efiemu.h +++ b/include/grub/efiemu/efiemu.h @@ -217,7 +217,15 @@ int grub_efiemu_get_memory_map (grub_efi_uintn_t *memory_map_size, grub_efi_uintn_t *map_key, grub_efi_uintn_t *descriptor_size, grub_efi_uint32_t *descriptor_version); -#define grub_efiemu_finish_boot_services grub_efiemu_get_memory_map + + +grub_err_t +grub_efiemu_finish_boot_services (grub_efi_uintn_t *memory_map_size, + grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t *map_key, + grub_efi_uintn_t *descriptor_size, + grub_efi_uint32_t *descriptor_version); + grub_err_t grub_efiemu_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t, From fff60aba9e0f1d8a6d4800bd6fc3a7b14bb36984 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 18 May 2010 14:29:33 +0200 Subject: [PATCH 142/271] Remove leftovers from i386-coreboot.rmk --- conf/i386-coreboot.rmk | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk index c9eea6470..821431cbb 100644 --- a/conf/i386-coreboot.rmk +++ b/conf/i386-coreboot.rmk @@ -34,7 +34,7 @@ bin_SCRIPTS += grub-mkrescue grub_mkrescue_SOURCES = util/grub-mkrescue.in # Modules. -pkglib_MODULES = aout.mod halt.mod datetime.mod mmap.mod +pkglib_MODULES = halt.mod datetime.mod mmap.mod # For mmap.mod. mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c @@ -47,26 +47,6 @@ halt_mod_SOURCES = commands/halt.c halt_mod_CFLAGS = $(COMMON_CFLAGS) halt_mod_LDFLAGS = $(COMMON_LDFLAGS) -# For play.mod. -play_mod_SOURCES = commands/i386/pc/play.c -play_mod_CFLAGS = $(COMMON_CFLAGS) -play_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For memdisk.mod. -memdisk_mod_SOURCES = disk/memdisk.c -memdisk_mod_CFLAGS = $(COMMON_CFLAGS) -memdisk_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For pci.mod -pci_mod_SOURCES = bus/pci.c -pci_mod_CFLAGS = $(COMMON_CFLAGS) -pci_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For lspci.mod -lspci_mod_SOURCES = commands/lspci.c -lspci_mod_CFLAGS = $(COMMON_CFLAGS) -lspci_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For datetime.mod datetime_mod_SOURCES = lib/cmos_datetime.c datetime_mod_CFLAGS = $(COMMON_CFLAGS) From 5f02926bbcebc1acaa7475a4c3d39c915605c147 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 26 May 2010 09:56:59 +0530 Subject: [PATCH 143/271] emu build fixes for sparc64 and freebsd --- conf/any-emu.rmk | 7 ++++++- include/grub/cache.h | 3 ++- include/grub/emu/misc.h | 1 + util/misc.c | 8 -------- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/conf/any-emu.rmk b/conf/any-emu.rmk index 3f0df06aa..17abc8911 100644 --- a/conf/any-emu.rmk +++ b/conf/any-emu.rmk @@ -1,6 +1,8 @@ # -*- makefile -*- -COMMON_CFLAGS += -nostdinc -isystem $(shell $(TARGET_CC) -print-file-name=include) +ifeq ($(target_cpu), sparc64) +COMMON_LDFLAGS += -mno-relax +endif kernel_img_RELOCATABLE = yes pkglib_PROGRAMS = kernel.img @@ -45,6 +47,9 @@ cpuid_mod_LDFLAGS = $(COMMON_LDFLAGS) endif grub_emu_LDFLAGS = $(LIBCURSES) +ifeq ($(target_cpu), sparc64) +grub_emu_LDFLAGS += -m64 -mno-relax +endif ifeq ($(enable_grub_emu_usb), yes) kernel_img_HEADERS += libusb.h diff --git a/include/grub/cache.h b/include/grub/cache.h index 27e44f0a2..a54bc00f8 100644 --- a/include/grub/cache.h +++ b/include/grub/cache.h @@ -23,7 +23,8 @@ #include #include -#if defined (__i386__) || defined (__x86_64__) +#if defined (__i386__) || defined (__x86_64__) || \ + (defined (GRUB_MACHINE_EMU) && GRUB_MACHINE_EMU) static inline void grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h index e037e6be7..1492e757a 100644 --- a/include/grub/emu/misc.h +++ b/include/grub/emu/misc.h @@ -46,5 +46,6 @@ int EXPORT_FUNC(asprintf) (char **buf, const char *fmt, ...); #endif char * EXPORT_FUNC(xasprintf) (const char *fmt, ...); +char * canonicalize_file_name (const char *path); #endif /* GRUB_EMU_MISC_H */ diff --git a/util/misc.c b/util/misc.c index 91bc25a55..dd0077d72 100644 --- a/util/misc.c +++ b/util/misc.c @@ -214,14 +214,6 @@ grub_millisleep (grub_uint32_t ms) #endif -#if !(defined (__i386__) || defined (__x86_64__)) && GRUB_NO_MODULES -void -grub_arch_sync_caches (void *address __attribute__ ((unused)), - grub_size_t len __attribute__ ((unused))) -{ -} -#endif - #ifdef __MINGW32__ void sync (void) From c53fe8dfbbf70dcc7f46963015d1636afb3a464a Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 26 May 2010 16:53:43 +0530 Subject: [PATCH 144/271] build fixes for sparc64 and freebsd platforms --- conf/any-emu.rmk | 5 ++++- configure.ac | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/conf/any-emu.rmk b/conf/any-emu.rmk index 7560c8aba..77ba4f2b7 100644 --- a/conf/any-emu.rmk +++ b/conf/any-emu.rmk @@ -1,6 +1,7 @@ # -*- makefile -*- ifeq ($(target_cpu), sparc64) +COMMON_CFLAGS += -mno-app-regs COMMON_LDFLAGS += -mno-relax endif @@ -25,10 +26,12 @@ TARGET_NO_STRIP = yes noinst_MODULES = emu-full.mod emu_full_mod_SOURCES = kern/emu/full.c emu_full_mod_CFLAGS = $(COMMON_CFLAGS) +emu_full_mod_LDFLAGS = $(COMMON_LDFLAGS) noinst_MODULES = emu-lite.mod emu_lite_mod_SOURCES = kern/emu/lite.c kern/emu/cache.S symlist.c emu_lite_mod_CFLAGS = $(COMMON_CFLAGS) +emu_lite_mod_LDFLAGS = $(COMMON_LDFLAGS) # For halt.mod. pkglib_MODULES += halt.mod @@ -45,7 +48,7 @@ endif grub_emu_LDFLAGS = $(LIBCURSES) ifeq ($(target_cpu), sparc64) -grub_emu_LDFLAGS += -m64 -mno-relax +grub_emu_LDFLAGS += -m64 -melf64_sparc -mno-relax endif ifeq ($(enable_grub_emu_usb), yes) diff --git a/configure.ac b/configure.ac index 9448f792d..54622e5e9 100644 --- a/configure.ac +++ b/configure.ac @@ -155,7 +155,7 @@ esac machine_CPPFLAGS="$machine_CPPFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" CPPFLAGS="$CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" -TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CPPFLAGS" +TARGET_ASFLAGS="$TARGET_ASFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" TARGET_CFLAGS="$TARGET_CFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" AC_SUBST(host_cpu) From ac4d5ab78330f12c253f39fb6ac6d5a0a244d64b Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 26 May 2010 16:58:29 +0530 Subject: [PATCH 145/271] removed kern/emu/dl.c --- kern/emu/dl.c | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 kern/emu/dl.c diff --git a/kern/emu/dl.c b/kern/emu/dl.c deleted file mode 100644 index 09e2f4a7a..000000000 --- a/kern/emu/dl.c +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef GRUB_MACHINE_EMU -#error "This source is only meant for grub-emu platform" -#endif - -#if defined(GRUB_CPU_I386) -#include "../i386/dl.c" -#elif defined(GRUB_CPU_X86_64) -#include "../x86_64/dl.c" -#elif defined(GRUB_CPU_SPARC64) -#include "../sparc64/dl.c" -#elif defined(GRUB_CPU_MIPS) -#include "../mips/dl.c" -#elif defined(GRUB_CPU_MIPSEL) -#include "../mips/dl.c" -#elif defined(GRUB_CPU_POWERPC) -#include "../powerpc/dl.c" -#else -#error "No target cpu type is defined" -#endif From f17ead43f9e1a27b7b92694c464f61216e2770d5 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 27 May 2010 17:04:31 -0700 Subject: [PATCH 146/271] cygwin fixes --- conf/any-emu.rmk | 30 ++++++++++++++++++------------ genmk.rb | 1 + 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/conf/any-emu.rmk b/conf/any-emu.rmk index 77ba4f2b7..0324898d3 100644 --- a/conf/any-emu.rmk +++ b/conf/any-emu.rmk @@ -23,16 +23,6 @@ kernel_img_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Wno-char-subscripts -Wn kernel_img_LDFLAGS = $(COMMON_LDFLAGS) TARGET_NO_STRIP = yes -noinst_MODULES = emu-full.mod -emu_full_mod_SOURCES = kern/emu/full.c -emu_full_mod_CFLAGS = $(COMMON_CFLAGS) -emu_full_mod_LDFLAGS = $(COMMON_LDFLAGS) - -noinst_MODULES = emu-lite.mod -emu_lite_mod_SOURCES = kern/emu/lite.c kern/emu/cache.S symlist.c -emu_lite_mod_CFLAGS = $(COMMON_CFLAGS) -emu_lite_mod_LDFLAGS = $(COMMON_LDFLAGS) - # For halt.mod. pkglib_MODULES += halt.mod halt_mod_SOURCES = commands/halt.c @@ -111,12 +101,28 @@ grub_emu_init.o: grub_emu_init.c grub_emu_init.h rm -f $@; $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"grub_init.c\" -c -o $@ $< CLEANFILES += grub_emu_init.o +kern_emu_lite.o: kern/emu/lite.c + $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"kern/emu/lite.c\" -c -o $@ $< +CLEANFILES += kern_emu_lite.o + +kern_emu_full.o: kern/emu/full.c + $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"kern/emu/full.c\" -c -o $@ $< +CLEANFILES += kern_emu_full.o + +kern_emu_cache.o: kern/emu/cache.S + $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(TARGET_ASFLAGS) -DGRUB_FILE=\"kern/emu/cache.S\" -c -o $@ $< +CLEANFILES += kern_emu_cache.o + +symlist.o: symlist.c + $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"symlist.c\" -c -o $@ $< +CLEANFILES += symlist.o + CLEANFILES += grub-emu-lite -grub-emu-lite: $(pkglib_PROGRAMS) emu-lite.mod +grub-emu-lite: kern_emu_lite.o kern_emu_cache.o symlist.o kernel.img $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) GRUB_EMU_LITE=grub-emu-lite CLEANFILES += grub-emu -grub-emu: $(pkglib_MODULES) $(pkglib_PROGRAMS) emu-full.mod grub_emu_init.o +grub-emu: $(PREMODFILES) kern_emu_full.o grub_emu_init.o kernel.img $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) GRUB_EMU=grub-emu diff --git a/genmk.rb b/genmk.rb index 6b5ecd1d4..5d06d1153 100644 --- a/genmk.rb +++ b/genmk.rb @@ -161,6 +161,7 @@ endif #{pre_obj}: $(#{prefix}_DEPENDENCIES) #{objs_str} -rm -f $@ $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{objs_str} +PREMODFILES += #{pre_obj} #{mod_obj}: #{mod_src} $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(#{prefix}_CFLAGS) -DGRUB_FILE=\\\"#{mod_src}\\\" -c -o $@ $< From 16eaf6f7c6470e2a7d065ae92e3022f2b640755e Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 28 May 2010 16:18:22 +0530 Subject: [PATCH 147/271] fixes for netbsd build --- kern/misc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kern/misc.c b/kern/misc.c index ccc01d43f..be50c671b 100644 --- a/kern/misc.c +++ b/kern/misc.c @@ -1058,7 +1058,7 @@ grub_abort (void) void abort (void) __attribute__ ((alias ("grub_abort"))); #endif -#if defined(NEED_ENABLE_EXECUTE_STACK) && !defined(GRUB_UTIL) +#if defined(NEED_ENABLE_EXECUTE_STACK) && !defined(GRUB_UTIL) && !defined(GRUB_MACHINE_EMU) /* Some gcc versions generate a call to this function in trampolines for nested functions. */ void __enable_execute_stack (void *addr __attribute__ ((unused))) From e5089776308459f799a0c6fc8be6a512373a6417 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 2 Jun 2010 13:51:05 +0530 Subject: [PATCH 148/271] review fixes --- commands/parttool.c | 6 ++++++ configure.ac | 44 ++++++++++++++++++++--------------------- include/grub/cache.h | 3 +-- include/grub/emu/misc.h | 3 +++ include/grub/misc.h | 3 --- kern/emu/cache.S | 12 ++++------- kern/emu/lite.c | 12 +++++------ kern/emu/main.c | 3 +++ kern/main.c | 2 -- normal/main.c | 6 ++++++ 10 files changed, 49 insertions(+), 45 deletions(-) diff --git a/commands/parttool.c b/commands/parttool.c index f2a62e581..3dbe129bf 100644 --- a/commands/parttool.c +++ b/commands/parttool.c @@ -31,6 +31,10 @@ #include #include +#if defined (GRUB_MACHINE_EMU) +#include +#endif + static struct grub_parttool *parts = 0; static int curhandle = 0; static grub_dl_t mymod; @@ -175,7 +179,9 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), } /* Load modules. */ +#if defined(GRUB_MACHINE_EMU) if (! grub_no_autoload) +#endif { const char *prefix; prefix = grub_env_get ("prefix"); diff --git a/configure.ac b/configure.ac index 12f89d85e..4cfa29308 100644 --- a/configure.ac +++ b/configure.ac @@ -54,12 +54,14 @@ case "$target_cpu" in amd64) target_cpu=x86_64 ;; sparc) target_cpu=sparc64 ;; mipsel|mips64el) - target_cpu=mips; - cpu_CPPFLAGS="-DGRUB_CPU_MIPSEL=1"; + target_cpu=mips; + TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPSEL=1"; + CFLAGS="$CFLAGS -DGRUB_CPU_MIPSEL=1"; ;; mips|mips64) - target_cpu=mips; - cpu_CPPFLAGS="-DGRUB_CPU_MIPS=1"; + target_cpu=mips; + TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPS=1"; + CFLAGS="$CFLAGS -DGRUB_CPU_MIPS=1"; ;; esac @@ -134,29 +136,25 @@ case "$host_os" in esac case "$platform" in - coreboot) machine_CPPFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; - multiboot) machine_CPPFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; - efi) machine_CPPFLAGS="-DGRUB_MACHINE_EFI=1" ;; - ieee1275) machine_CPPFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; - qemu) machine_CPPFLAGS="-DGRUB_MACHINE_QEMU=1" ;; - pc) machine_CPPFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; - emu) machine_CPPFLAGS="-DGRUB_MACHINE_EMU=1" ;; - yeeloong) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; - qemu-mips) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;; + ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; + qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;; + yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; esac case "$target_cpu" in - i386) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_I386";; - x86_64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_X86_64";; - powerpc) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_POWERPC";; - mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;; # cpu_CPPFLAGS handled above - sparc64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_SPARC64"; - machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;; + mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;; + sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;; esac -machine_CPPFLAGS="$machine_CPPFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" +machine_CFLAGS="$machine_CFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" -CPPFLAGS="$CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" -TARGET_ASFLAGS="$TARGET_ASFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" -TARGET_CFLAGS="$TARGET_CFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" +CFLAGS="$CFLAGS $machine_CFLAGS" +TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CFLAGS" +TARGET_CFLAGS="$TARGET_CFLAGS $machine_CFLAGS" AC_SUBST(host_cpu) AC_SUBST(host_os) diff --git a/include/grub/cache.h b/include/grub/cache.h index a54bc00f8..27e44f0a2 100644 --- a/include/grub/cache.h +++ b/include/grub/cache.h @@ -23,8 +23,7 @@ #include #include -#if defined (__i386__) || defined (__x86_64__) || \ - (defined (GRUB_MACHINE_EMU) && GRUB_MACHINE_EMU) +#if defined (__i386__) || defined (__x86_64__) static inline void grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h index bad00de71..32a5e29f8 100644 --- a/include/grub/emu/misc.h +++ b/include/grub/emu/misc.h @@ -49,4 +49,7 @@ int EXPORT_FUNC(asprintf) (char **buf, const char *fmt, ...); char * EXPORT_FUNC(xasprintf) (const char *fmt, ...); extern char * canonicalize_file_name (const char *path); +/* Flag to control module autoloading in normal mode. */ +extern int EXPORT_VAR(grub_no_autoload); + #endif /* GRUB_EMU_MISC_H */ diff --git a/include/grub/misc.h b/include/grub/misc.h index 1ec8bbc5a..9bfc6974e 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -50,9 +50,6 @@ /* XXX: If grub_memmove is too slow, we must implement grub_memcpy. */ #define grub_memcpy(d,s,n) grub_memmove ((d), (s), (n)) -/* Flag to control module autoloading in normal mode. */ -extern int EXPORT_VAR(grub_no_autoload); - void *EXPORT_FUNC(grub_memmove) (void *dest, const void *src, grub_size_t n); char *EXPORT_FUNC(grub_strcpy) (char *dest, const char *src); char *EXPORT_FUNC(grub_strncpy) (char *dest, const char *src, int c); diff --git a/kern/emu/cache.S b/kern/emu/cache.S index 9975578b8..90a5b5396 100644 --- a/kern/emu/cache.S +++ b/kern/emu/cache.S @@ -2,17 +2,13 @@ #error "This source is only meant for grub-emu platform" #endif -#if defined(GRUB_CPU_I386) +#if defined(__i386__) || defined(__x86_64__) /* Nothing is necessary. */ -#elif defined(GRUB_CPU_X86_64) -/* Nothing is necessary. */ -#elif defined(GRUB_CPU_SPARC64) +#elif defined(__sparc__) #include "../sparc64/cache.S" -#elif defined(GRUB_CPU_MIPS) +#elif defined(__mips__) #include "../mips/cache.S" -#elif defined(GRUB_CPU_MIPSEL) -#include "../mips/cache.S" -#elif defined(GRUB_CPU_POWERPC) +#elif defined(__powerpc__) #include "../powerpc/cache.S" #else #error "No target cpu type is defined" diff --git a/kern/emu/lite.c b/kern/emu/lite.c index 884ddee10..9b3728717 100644 --- a/kern/emu/lite.c +++ b/kern/emu/lite.c @@ -5,17 +5,15 @@ #error "This source is only meant for grub-emu platform" #endif -#if defined(GRUB_CPU_I386) +#if defined(__i386__) #include "../i386/dl.c" -#elif defined(GRUB_CPU_X86_64) +#elif defined(__x86_64__) #include "../x86_64/dl.c" -#elif defined(GRUB_CPU_SPARC64) +#elif defined(__sparc__) #include "../sparc64/dl.c" -#elif defined(GRUB_CPU_MIPS) +#elif defined(__mips__) #include "../mips/dl.c" -#elif defined(GRUB_CPU_MIPSEL) -#include "../mips/dl.c" -#elif defined(GRUB_CPU_POWERPC) +#elif defined(__powerpc__) #include "../powerpc/dl.c" #else #error "No target cpu type is defined" diff --git a/kern/emu/main.c b/kern/emu/main.c index 8d6118c93..1915e1a7c 100644 --- a/kern/emu/main.c +++ b/kern/emu/main.c @@ -51,6 +51,9 @@ static jmp_buf main_env; /* Store the prefix specified by an argument. */ static char *prefix = NULL; +/* Flag to control module autoloading in normal mode. */ +int grub_no_autoload; + grub_addr_t grub_arch_modules_addr (void) { diff --git a/kern/main.c b/kern/main.c index 2541d3295..1fdf4ab07 100644 --- a/kern/main.c +++ b/kern/main.c @@ -30,8 +30,6 @@ #include #include -int grub_no_autoload; - void grub_module_iterate (int (*hook) (struct grub_module_header *header)) { diff --git a/normal/main.c b/normal/main.c index b3544b99f..d1e95d9b5 100644 --- a/normal/main.c +++ b/normal/main.c @@ -32,6 +32,10 @@ #include #include +#if defined (GRUB_MACHINE_EMU) +#include +#endif + #define GRUB_DEFAULT_HISTORY_SIZE 50 static int nested_level = 0; @@ -476,7 +480,9 @@ grub_normal_init_page (struct grub_term_output *term) static void read_lists (const char *val) { +#if defined(GRUB_MACHINE_EMU) if (! grub_no_autoload) +#endif { read_command_list (val); read_fs_list (val); From 6d6f13934992f6f59b626b0fab49ef260659a112 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 2 Jun 2010 14:45:07 +0530 Subject: [PATCH 149/271] review fixes --- commands/parttool.c | 6 ------ include/grub/dl.h | 6 +++--- include/grub/emu/misc.h | 3 --- include/grub/misc.h | 7 +++++++ kern/emu/main.c | 1 - normal/main.c | 6 ------ 6 files changed, 10 insertions(+), 19 deletions(-) diff --git a/commands/parttool.c b/commands/parttool.c index 3dbe129bf..f2a62e581 100644 --- a/commands/parttool.c +++ b/commands/parttool.c @@ -31,10 +31,6 @@ #include #include -#if defined (GRUB_MACHINE_EMU) -#include -#endif - static struct grub_parttool *parts = 0; static int curhandle = 0; static grub_dl_t mymod; @@ -179,9 +175,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), } /* Load modules. */ -#if defined(GRUB_MACHINE_EMU) if (! grub_no_autoload) -#endif { const char *prefix; prefix = grub_env_get ("prefix"); diff --git a/include/grub/dl.h b/include/grub/dl.h index 9d5f2af2d..b66b7641e 100644 --- a/include/grub/dl.h +++ b/include/grub/dl.h @@ -95,13 +95,13 @@ int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); void EXPORT_FUNC(grub_dl_iterate) (int (*hook) (grub_dl_t mod)); grub_dl_t EXPORT_FUNC(grub_dl_get) (const char *name); -grub_err_t EXPORT_FUNC(grub_dl_register_symbol) (const char *name, void *addr, - grub_dl_t mod); +grub_err_t grub_dl_register_symbol (const char *name, void *addr, + grub_dl_t mod); grub_err_t grub_arch_dl_check_header (void *ehdr); grub_err_t grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr); -#if defined (_mips) && (! defined (GRUB_MACHINE_EMU) || ! GRUB_MACHINE_EMU) +#if defined (_mips) #define GRUB_LINKER_HAVE_INIT 1 void grub_arch_dl_init_linker (void); #endif diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h index 32a5e29f8..bad00de71 100644 --- a/include/grub/emu/misc.h +++ b/include/grub/emu/misc.h @@ -49,7 +49,4 @@ int EXPORT_FUNC(asprintf) (char **buf, const char *fmt, ...); char * EXPORT_FUNC(xasprintf) (const char *fmt, ...); extern char * canonicalize_file_name (const char *path); -/* Flag to control module autoloading in normal mode. */ -extern int EXPORT_VAR(grub_no_autoload); - #endif /* GRUB_EMU_MISC_H */ diff --git a/include/grub/misc.h b/include/grub/misc.h index 9bfc6974e..077069934 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -308,4 +308,11 @@ void EXPORT_FUNC (grub_halt) (int no_apm); void EXPORT_FUNC (grub_halt) (void); #endif +#ifdef GRUB_MACHINE_EMU +/* Flag to control module autoloading in normal mode. */ +extern int EXPORT_VAR(grub_no_autoload); +#else +#define grub_no_autoload 0 +#endif + #endif /* ! GRUB_MISC_HEADER */ diff --git a/kern/emu/main.c b/kern/emu/main.c index 1915e1a7c..e2efd262f 100644 --- a/kern/emu/main.c +++ b/kern/emu/main.c @@ -51,7 +51,6 @@ static jmp_buf main_env; /* Store the prefix specified by an argument. */ static char *prefix = NULL; -/* Flag to control module autoloading in normal mode. */ int grub_no_autoload; grub_addr_t diff --git a/normal/main.c b/normal/main.c index d1e95d9b5..b3544b99f 100644 --- a/normal/main.c +++ b/normal/main.c @@ -32,10 +32,6 @@ #include #include -#if defined (GRUB_MACHINE_EMU) -#include -#endif - #define GRUB_DEFAULT_HISTORY_SIZE 50 static int nested_level = 0; @@ -480,9 +476,7 @@ grub_normal_init_page (struct grub_term_output *term) static void read_lists (const char *val) { -#if defined(GRUB_MACHINE_EMU) if (! grub_no_autoload) -#endif { read_command_list (val); read_fs_list (val); From a60f6ee1ac67f2145259ab9674789bbced6078cb Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 3 Jun 2010 11:52:33 +0530 Subject: [PATCH 150/271] cleanup --- Makefile.am | 27 ++---- autogen.sh | 42 +++++---- configure.ac | 19 +--- configure.common | 55 +++++++----- gentpl.py | 35 +++++--- grub-core/Makefile.extra-dist | 14 +-- grub-core/Makefile.vars | 11 +-- grub-core/configure.ac | 24 +---- grub-core/gendistlist.sh | 46 ---------- grub-core/genmoddep.awk | 5 +- grub-core/include/grub/dl.h | 4 +- grub-core/modules.def | 26 ++++++ mkinstalldirs | 161 ---------------------------------- modules.def | 1 + tests/util/grub-shell.in | 4 - 15 files changed, 131 insertions(+), 343 deletions(-) delete mode 100755 grub-core/gendistlist.sh delete mode 100644 mkinstalldirs diff --git a/Makefile.am b/Makefile.am index c0d6d003b..6b6f9e10c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,19 +1,6 @@ AUTOMAKE_OPTIONS = subdir-objects DEPDIR = .deps-util - -EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def \ - \ - geninit.sh \ - \ - gnulib/progname.h gnulib/fnmatch_loop.c gnulib/alloca.h \ - gnulib/error.h gnulib/fnmatch.h gnulib/getopt.h \ - gnulib/getopt_int.h gnulib/gettext.h gnulib/progname.h \ - \ - util/mkisofs/mkisofs.h util/mkisofs/iso9660.h \ - util/mkisofs/include/prototyp.h util/mkisofs/defaults.h \ - util/mkisofs/match.h util/mkisofs/exclude.h \ - util/mkisofs/msdos_partition.h util/mkisofs/include/fctldefs.h \ - util/mkisofs/include/mconfig.h util/mkisofs/include/statdefs.h +EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh SUBDIRS = . grub-core po docs @@ -46,15 +33,17 @@ grub_script.yy.c grub_script.yy.h: $(top_srcdir)/grub-core/script/yylex.l CLEANFILES += grub_script.yy.c grub_script.yy.h # For libutil.a -libutil_a_init.lst: grub_script.tab.h grub_script.yy.h $(libutil_a_SOURCES) - rm -f $@ +libutil.pp: grub_script.tab.h grub_script.yy.h $(libutil_a_SOURCES) $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) \ - -D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ \ - | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1) + -D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1) +CLEANFILES += libutil.pp + +libutil_a_init.lst: libutil.pp + cat $< | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1) CLEANFILES += libutil_a_init.lst libutil_a_init.c: libutil_a_init.lst $(top_srcdir)/geninit.sh - rm -f $@; sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1) + sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1) CLEANFILES += libutil_a_init.c if COND_GRUB_MKFONT diff --git a/autogen.sh b/autogen.sh index 5358d45f1..db640702b 100755 --- a/autogen.sh +++ b/autogen.sh @@ -2,33 +2,39 @@ set -e -ln -sf ../NEWS grub-core/ -ln -sf ../README grub-core/ -ln -sf ../INSTALL grub-core/ -ln -sf ../AUTHORS grub-core/ -ln -sf ../COPYING grub-core/ -ln -sf ../ABOUT-NLS grub-core/ -ln -sf ../ChangeLog grub-core/ -ln -sf ../aclocal.m4 grub-core/ -ln -sf ../acinclude.m4 grub-core/ -ln -sf ../config.rpath grub-core/ -ln -sf ../gentpl.py grub-core/ -ln -sf ../configure.common grub-core/ - -ln -sf grub-core/include . -ln -sf grub-core/gnulib . -ln -sf grub-core/lib . +echo "Creating symlinks..." +ln -svf ../NEWS grub-core/ +ln -svf ../TODO grub-core/ +ln -svf ../THANKS grub-core/ +ln -svf ../README grub-core/ +ln -svf ../INSTALL grub-core/ +ln -svf ../AUTHORS grub-core/ +ln -svf ../COPYING grub-core/ +ln -svf ../ABOUT-NLS grub-core/ +ln -svf ../ChangeLog grub-core/ +ln -svf ../aclocal.m4 grub-core/ +ln -svf ../acinclude.m4 grub-core/ +ln -svf ../config.rpath grub-core/ +ln -svf ../gentpl.py grub-core/ +ln -svf ../configure.common grub-core/ +echo "Creating Makefile.tpl..." python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl +echo "Running autogen..." autogen -T Makefile.tpl modules.def | sed -e '/^$/{N;/^\n$/D;}' > modules.am +echo "Creating grub-core/Makefile.tpl..." (cd grub-core && python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl) +echo "Running autogen..." (cd grub-core && autogen -T Makefile.tpl modules.def | sed -e '/^$/{N;/^\n$/D;}' > modules.am) -(cd grub-core && echo timestamp > stamp-h.in) +echo "Importing libgcrypt..." (cd grub-core && python import_gcry.py lib/libgcrypt/ .) +echo "Saving timestamps..." echo timestamp > stamp-h.in -autoreconf -vi +(cd grub-core && echo timestamp > stamp-h.in) +echo "Running autoreconf..." +autoreconf -vi exit 0 diff --git a/configure.ac b/configure.ac index 10c527565..dfbc6b8be 100644 --- a/configure.ac +++ b/configure.ac @@ -44,23 +44,10 @@ AC_CONFIG_HEADER([config.h]) m4_include([configure.common]) -# Output files. -grub_CHECK_LINK_DIR -if test x"$link_dir" = xyes ; then - AC_CONFIG_LINKS([include/grub/cpu:grub-core/include/grub/$target_cpu]) - if test "$platform" != emu ; then - AC_CONFIG_LINKS([include/grub/machine:grub-core/include/grub/$target_cpu/$platform]) - fi -else - mkdir -p include/grub 2>/dev/null - rm -rf include/grub/cpu - cp -rp $srcdir/grub-core/include/grub/$target_cpu include/grub/cpu 2>/dev/null - if test "$platform" != emu ; then - rm -rf include/grub/machine - cp -rp $srcdir/grub-core/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null - fi -fi +grub_coredir='grub-core' +AC_SUBST(grub_coredir) +# Output files. AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([po/Makefile]) AC_CONFIG_FILES([docs/Makefile]) diff --git a/configure.common b/configure.common index 8c100e2da..ecd9ff190 100644 --- a/configure.common +++ b/configure.common @@ -19,12 +19,11 @@ AC_ARG_PROGRAM # Optimization flag. Allow user to override. -if test "x$CFLAGS" = x; then - CFLAGS="$CFLAGS -Os" +if test "x$TARGET_CFLAGS" = x; then + TARGET_CFLAGS="$TARGET_CFLAGS -Os" fi # Default HOST_CPPFLAGS -CPPFLAGS='' HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W" HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/include" HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include" @@ -43,11 +42,13 @@ case "$target_cpu" in sparc) target_cpu=sparc64 ;; mipsel|mips64el) target_cpu=mips; - cpu_CPPFLAGS="-DGRUB_CPU_MIPSEL=1"; + HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; ;; mips|mips64) target_cpu=mips; - cpu_CPPFLAGS="-DGRUB_CPU_MIPS=1"; + HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_CPU_MIPS=1"; + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_CPU_MIPS=1"; ;; esac @@ -122,28 +123,24 @@ case "$host_os" in esac case "$platform" in - coreboot) machine_CPPFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; - multiboot) machine_CPPFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; - efi) machine_CPPFLAGS="-DGRUB_MACHINE_EFI=1" ;; - ieee1275) machine_CPPFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; - qemu) machine_CPPFLAGS="-DGRUB_MACHINE_QEMU=1" ;; - pc) machine_CPPFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; - emu) machine_CPPFLAGS="-DGRUB_MACHINE_EMU=1" ;; - yeeloong) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; - qemu-mips) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;; + ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; + qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;; + yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; esac case "$target_cpu" in - i386) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_I386";; - x86_64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_X86_64";; - powerpc) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_POWERPC";; - mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;; # cpu_CPPFLAGS handled above - sparc64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_SPARC64"; - machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;; + mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;; + sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;; esac -machine_CPPFLAGS="$machine_CPPFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" +machine_CFLAGS="$machine_CFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" -HOST_CPPFLAGS="$HOST_CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" -TARGET_CPPFLAGS="$TARGET_CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" +HOST_CPPFLAGS="$HOST_CPPFLAGS $machine_CFLAGS" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CFLAGS" AC_SUBST(host_cpu) AC_SUBST(host_os) @@ -464,15 +461,25 @@ if test x"$enable_werror" != xno ; then TARGET_CFLAGS="$TARGET_CFLAGS -Werror" fi -AC_SUBST(TARGET_MODULE_FORMAT) +TARGET_CPP="$TARGET_CC -E" +TARGET_CCAS=$TARGET_CC + AC_SUBST(OBJCONV) +AC_SUBST(TARGET_CPP) +AC_SUBST(TARGET_CCAS) +AC_SUBST(TARGET_OBJ2ELF) AC_SUBST(TARGET_APPLE_CC) +AC_SUBST(TARGET_MODULE_FORMAT) AC_SUBST(TARGET_CFLAGS) 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(HOST_CFLAGS) AC_SUBST(HOST_LDFLAGS) AC_SUBST(HOST_CPPFLAGS) diff --git a/gentpl.py b/gentpl.py index 9f1828d49..02369d843 100644 --- a/gentpl.py +++ b/gentpl.py @@ -131,11 +131,12 @@ def shared_nodist_sources(prefix=""): return collect_values("nodist_shared", pre def default_sources(prefix=""): return collect_values("source", prefix) def default_nodist_sources(prefix=""): return collect_values("nodist", prefix) -def default_ldadd(): return collect_values("ldadd") -def default_cflags(): return collect_values("cflags") -def default_ldflags(): return collect_values("ldflags") -def default_cppflags(): return collect_values("cppflags") -def default_ccasflags(): return collect_values("ccasflags") +def default_ldadd(): return collect_values("ldadd") +def default_cflags(): return collect_values("cflags") +def default_ldflags(): return collect_values("ldflags") +def default_cppflags(): return collect_values("cppflags") +def default_ccasflags(): return collect_values("ccasflags") +def default_extra_dist(): return collect_values("extra_dist") def group_sources(group, prefix=""): return collect_values(group, prefix) if group else default_sources(prefix) def group_nodist_sources(group, prefix=""): return collect_values(group + "_nodist", prefix) if group else default_nodist_sources(prefix) @@ -143,12 +144,13 @@ def group_nodist_sources(group, prefix=""): return collect_values(group + "_nodi def platform_sources(platform, prefix=""): return each_group(platform, "", lambda g: collect_values(g, prefix) if g else default_sources(prefix)) def platform_nodist_sources(platform, prefix=""): return each_group(platform, "_nodist", lambda g: collect_values(g + "_nodist", prefix) if g else default_nodist_sources(prefix)) -def platform_ldadd(platform): return each_group(platform, "_ldadd", lambda g: collect_values(g + "_ldadd") if g else default_ldadd()) -def platform_cflags(platform): return each_group(platform, "_cflags", lambda g: collect_values(g + "_cflags") if g else default_cflags()) -def platform_ldflags(platform): return each_group(platform, "_ldflags", lambda g: collect_values(g + "_ldflags") if g else default_ldflags()) -def platform_cppflags(platform): return each_group(platform, "_cppflags", lambda g: collect_values(g + "_cppflags") if g else default_cppflags()) -def platform_ccasflags(platform): return each_group(platform, "_ccasflags", lambda g: collect_values(g + "_ccasflags") if g else default_ccasflags()) -def platform_format(platform): return each_group(platform, "_format", lambda g: collect_values(g + "_format") if g else "binary") +def platform_ldadd(platform): return each_group(platform, "_ldadd", lambda g: collect_values(g + "_ldadd") if g else default_ldadd()) +def platform_cflags(platform): return each_group(platform, "_cflags", lambda g: collect_values(g + "_cflags") if g else default_cflags()) +def platform_ldflags(platform): return each_group(platform, "_ldflags", lambda g: collect_values(g + "_ldflags") if g else default_ldflags()) +def platform_cppflags(platform): return each_group(platform, "_cppflags", lambda g: collect_values(g + "_cppflags") if g else default_cppflags()) +def platform_ccasflags(platform): return each_group(platform, "_ccasflags", lambda g: collect_values(g + "_ccasflags") if g else default_ccasflags()) +def platform_extra_dist(platform): return each_group(platform, "_extra_dist", lambda g: collect_values(g + "_extra_dist") if g else default_extra_dist()) +def platform_format(platform): return each_group(platform, "_format", lambda g: collect_values(g + "_format") if g else "binary") def module(platform): r = gvar_add("noinst_PROGRAMS", "[+ name +].module") @@ -164,6 +166,7 @@ def module(platform): r += var_set(canonical_module() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_MODULE) " + platform_cppflags(platform)) r += var_set(canonical_module() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(platform)) + r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_module() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + canonical_module() + "_SOURCES)") @@ -275,6 +278,7 @@ def kernel(platform): r += var_set(canonical_kernel() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) " + platform_cppflags(platform)) r += var_set(canonical_kernel() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) " + platform_ccasflags(platform)) + r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_kernel() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + canonical_kernel() + "_SOURCES)") @@ -293,10 +297,12 @@ def image(platform): r += var_set(canonical_image() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) " + platform_cppflags(platform)) r += var_set(canonical_image() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) " + platform_ccasflags(platform)) + r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_image() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + canonical_image() + "_SOURCES)") r += gvar_add("platform_DATA", "[+ name +].img") + r += gvar_add("CLEANFILES", "[+ name +].img") r += rule("[+ name +].img", "[+ name +].image", """ if test x$(USE_APPLE_CC_FIXES) = xyes; then \ $(MACHO2IMG) $< $@; \ @@ -316,6 +322,7 @@ def library(platform): r += var_set(canonical_name() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) " + platform_cppflags(platform)) r += var_set(canonical_name() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) " + platform_ccasflags(platform)) + r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_name() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + canonical_name() + "_SOURCES)") @@ -352,6 +359,7 @@ def program(platform, test=False): r += var_set(canonical_name() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) " + platform_cppflags(platform)) r += var_set(canonical_name() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(platform)) + r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_name() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + canonical_name() + "_SOURCES)") @@ -366,7 +374,10 @@ def test_program(platform): return program(platform, True) def data(platform): - return gvar_add(installdir() + "_DATA", platform_sources(platform)) + r = gvar_add("EXTRA_DIST", platform_sources(platform)) + r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) + r += gvar_add(installdir() + "_DATA", platform_sources(platform)) + return r def script(platform, test=False): if test: diff --git a/grub-core/Makefile.extra-dist b/grub-core/Makefile.extra-dist index c6516f06a..9979c875b 100644 --- a/grub-core/Makefile.extra-dist +++ b/grub-core/Makefile.extra-dist @@ -27,24 +27,14 @@ EXTRA_DIST += genhandlerlist.sh EXTRA_DIST += genpartmaplist.sh EXTRA_DIST += genparttoollist.sh EXTRA_DIST += genterminallist.sh + +EXTRA_DIST += lib/libgcrypt_wrap/cipher_wrap.h EXTRA_DIST += lib/libgcrypt-grub/cipher/crypto.lst -EXTRA_DIST += script/yylex.l -EXTRA_DIST += script/parser.y - -EXTRA_DIST += lib/relocator.c - -EXTRA_DIST += efiemu/loadcore.c -EXTRA_DIST += efiemu/prepare.c - -EXTRA_DIST += loader/machoXX.c - - EXTRA_DIST += kern/i386/loader.S EXTRA_DIST += kern/i386/realmode.S EXTRA_DIST += loader/i386/bsdXX.c EXTRA_DIST += loader/i386/bsd_pagetable.c -EXTRA_DIST += loader/i386/multiboot_elfxx.c EXTRA_DIST += commands/search.c EXTRA_DIST += kern/i386/pc/lzma_decode.S diff --git a/grub-core/Makefile.vars b/grub-core/Makefile.vars index dd4ee8d56..7d398b4c9 100644 --- a/grub-core/Makefile.vars +++ b/grub-core/Makefile.vars @@ -33,21 +33,22 @@ if COND_sparc64_ieee1275 endif CPPFLAGS_GRUB = -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) -CPPFLAGS_GRUB += -I$(top_srcdir)/include -I$(top_builddir)/include +CPPFLAGS_GRUB += -I$(top_srcdir)/$(grub_coredir)/include +CPPFLAGS_GRUB += -I$(top_builddir)/$(grub_coredir)/include CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -CPPFLAGS_GCRY = -I$(top_srcdir)/lib/libgcrypt_wrap +CPPFLAGS_GCRY = -I$(top_srcdir)/$(grub_coredir)/lib/libgcrypt_wrap CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" -CPPFLAGS_GNULIB = -I$(top_srcdir)/gnulib +CPPFLAGS_GNULIB = -I$(top_srcdir)/$(grub_coredir)/gnulib CFLAGS_MKISOFS = -Wno-all -Werror CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include CFLAGS_POSIX = -fno-builtin -CPPFLAGS_POSIX = -I$(top_srcdir)/lib/posix_wrap +CPPFLAGS_POSIX = -I$(top_srcdir)/$(grub_coredir)/lib/posix_wrap -CPPFLAGS_EFIEMU = -I$(top_srcdir)/efiemu/runtime +CPPFLAGS_EFIEMU = -I$(top_srcdir)/$(grub_coredir)/efiemu/runtime # to calm down automake BUILT_SOURCES = diff --git a/grub-core/configure.ac b/grub-core/configure.ac index ac462ea77..6cac2e75c 100644 --- a/grub-core/configure.ac +++ b/grub-core/configure.ac @@ -44,28 +44,12 @@ AC_CONFIG_HEADER([config.h]) m4_include([configure.common]) -TARGET_CPP="$TARGET_CC -E" -TARGET_CCAS=$TARGET_CC - CC=$TARGET_CC CPP=$TARGET_CC CCAS=$TARGET_CC -AC_SUBST(TARGET_CC) -AC_SUBST(TARGET_CPP) -AC_SUBST(TARGET_CCAS) -AC_SUBST(TARGET_IMG_LDSCRIPT) -AC_SUBST(TARGET_IMG_LDFLAGS) -AC_SUBST(TARGET_IMG_CFLAGS) -AC_SUBST(TARGET_OBJ2ELF) -AC_SUBST(TARGET_MODULE_FORMAT) -AC_SUBST(OBJCONV) -AC_SUBST(TARGET_APPLE_CC) -AC_SUBST(ASFLAGS) -AC_SUBST(TARGET_CFLAGS) -AC_SUBST(TARGET_ASFLAGS) -AC_SUBST(TARGET_LDFLAGS) -AC_SUBST(TARGET_CPPFLAGS) +grub_coredir='.' +AC_SUBST(grub_coredir) # Output files. grub_CHECK_LINK_DIR @@ -77,10 +61,10 @@ if test x"$link_dir" = xyes ; then else mkdir -p include/grub 2>/dev/null rm -rf include/grub/cpu - cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null + cp -rp $srcdir/grub-core/include/grub/$target_cpu include/grub/cpu 2>/dev/null if test "$platform" != emu ; then rm -rf include/grub/machine - cp -rp $srcdir/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null + cp -rp $srcdir/grub-core/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null fi fi diff --git a/grub-core/gendistlist.sh b/grub-core/gendistlist.sh deleted file mode 100755 index 102c0c11c..000000000 --- a/grub-core/gendistlist.sh +++ /dev/null @@ -1,46 +0,0 @@ -#! /bin/sh -# -# Copyright (C) 2005, 2008, 2009 Free Software Foundation, Inc. -# -# This gendistlist.sh is free software; the author -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -# Generate a list of distributed files. - -EXTRA_DISTFILES="AUTHORS COPYING ChangeLog DISTLIST INSTALL NEWS README \ - THANKS TODO Makefile.in aclocal.m4 autogen.sh config.guess \ - config.h.in config.sub configure configure.ac gencmdlist.sh \ - gendistlist.sh genfslist.sh genhandlerlist.sh geninit.sh \ - geninitheader.sh genkernsyms.sh.in genmk.rb genmoddep.awk \ - genmodsrc.sh genpartmaplist.sh genparttoollist.sh \ - genvideolist.sh \ - gensymlist.sh.in install-sh mkinstalldirs stamp-h.in" - -DISTDIRS="boot bus commands conf disk docs efiemu font fs hello hook include io \ - kern lib loader mmap normal partmap parttool script term util video" - -LC_COLLATE=C -export LC_COLLATE - -for f in $EXTRA_DISTFILES; do - echo $f -done - -dir=`dirname $0` -cd $dir - -for dir in $DISTDIRS; do - for d in `find $dir -type d ! -name .svn ! -name .bzr | sort`; do - find $d -maxdepth 1 -name '*.[chSy]' -o -name '*.mk' -o -name '*.rmk' \ - -o -name '*.rb' -o -name '*.in' -o -name '*.tex' -o -name '*.texi' \ - -o -name '*.info' -o -name 'grub.cfg' -o -name 'README' \ - -o -name '*.sc' -o -name 'mdate-sh' -o -name '*.sh' \ - -o -name 'grub-dumpdevtree' -o -name '*.lua' | sort - done -done diff --git a/grub-core/genmoddep.awk b/grub-core/genmoddep.awk index 6c92e2fc7..74487eabf 100644 --- a/grub-core/genmoddep.awk +++ b/grub-core/genmoddep.awk @@ -22,10 +22,7 @@ BEGIN { { module = $2 - # skip if empty - if ($1 == "" || $2 == "") - ; - else if ($1 in symtab) { + if ($1 in symtab) { modtab[module] = modtab[module] " " symtab[$1]; } else if ($1 != "__gnu_local_gp") { diff --git a/grub-core/include/grub/dl.h b/grub-core/include/grub/dl.h index 4ed68b69a..f98539a4e 100644 --- a/grub-core/include/grub/dl.h +++ b/grub-core/include/grub/dl.h @@ -105,8 +105,8 @@ int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); void EXPORT_FUNC(grub_dl_iterate) (int (*hook) (grub_dl_t mod)); grub_dl_t EXPORT_FUNC(grub_dl_get) (const char *name); -grub_err_t EXPORT_FUNC(grub_dl_register_symbol) (const char *name, void *addr, - grub_dl_t mod); +grub_err_t grub_dl_register_symbol (const char *name, void *addr, + grub_dl_t mod); grub_err_t grub_arch_dl_check_header (void *ehdr); grub_err_t grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr); diff --git a/grub-core/modules.def b/grub-core/modules.def index 80bb1cbdd..348738971 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -348,6 +348,19 @@ module = { library = { name = libgnulib.a; source = gnulib/regex.c; + + extra_dist = gnulib/progname.h; + extra_dist = gnulib/alloca.h; + extra_dist = gnulib/error.h; + extra_dist = gnulib/fnmatch.h; + extra_dist = gnulib/getopt.h; + extra_dist = gnulib/getopt_int.h; + extra_dist = gnulib/gettext.h; + extra_dist = gnulib/regcomp.c; + extra_dist = gnulib/regexec.c; + extra_dist = gnulib/fnmatch_loop.c; + extra_dist = gnulib/regex_internal.c; + cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; common; @@ -823,6 +836,11 @@ module = { i386_pc = efiemu/prepare64.c; i386_pc = efiemu/pnvram.c; i386_pc = efiemu/i386/coredetect.c; + + extra_dist = efiemu/prepare.c; + extra_dist = efiemu/loadcore.c; + extra_dist = efiemu/runtime/efiemu.S; + extra_dist = efiemu/runtime/efiemu.c; }; module = { @@ -1216,6 +1234,7 @@ module = { x86 = lib/i386/relocator.c; x86 = lib/i386/relocator_asm.S; x86 = lib/i386/relocator_backward.S; + extra_dist = lib/relocator.c; }; module = { @@ -1280,6 +1299,7 @@ module = { name = multiboot; source = loader/multiboot.c; source = loader/i386/multiboot_mbi.c; + extra_dist = loader/multiboot_elfxx.c; x86; }; @@ -1312,6 +1332,8 @@ module = { i386_pc = loader/macho64.c; i386_pc = loader/macho.c; i386_pc = loader/xnu.c; + + extra_dist = loader/machoXX.c; }; module = { @@ -1445,6 +1467,10 @@ module = { nodist = grub_script.yy.c; nodist = grub_script.tab.h; nodist = grub_script.yy.h; + + extra_dist = script/yylex.l; + extra_dist = script/parser.y; + cflags = '$(CFLAGS_POSIX) -Wno-error'; cppflags = '$(CPPFLAGS_POSIX)'; }; diff --git a/mkinstalldirs b/mkinstalldirs deleted file mode 100644 index ef7e16fda..000000000 --- a/mkinstalldirs +++ /dev/null @@ -1,161 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy - -scriptversion=2006-05-11.19 - -# Original author: Noah Friedman -# Created: 1993-05-16 -# Public domain. -# -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' -IFS=" "" $nl" -errstatus=0 -dirmode= - -usage="\ -Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... - -Create each directory DIR (with mode MODE, if specified), including all -leading file name components. - -Report bugs to ." - -# process command line arguments -while test $# -gt 0 ; do - case $1 in - -h | --help | --h*) # -h for help - echo "$usage" - exit $? - ;; - -m) # -m PERM arg - shift - test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } - dirmode=$1 - shift - ;; - --version) - echo "$0 $scriptversion" - exit $? - ;; - --) # stop option processing - shift - break - ;; - -*) # unknown option - echo "$usage" 1>&2 - exit 1 - ;; - *) # first non-opt arg - break - ;; - esac -done - -for file -do - if test -d "$file"; then - shift - else - break - fi -done - -case $# in - 0) exit 0 ;; -esac - -# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and -# mkdir -p a/c at the same time, both will detect that a is missing, -# one will create a, then the other will try to create a and die with -# a "File exists" error. This is a problem when calling mkinstalldirs -# from a parallel make. We use --version in the probe to restrict -# ourselves to GNU mkdir, which is thread-safe. -case $dirmode in - '') - if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - echo "mkdir -p -- $*" - exec mkdir -p -- "$@" - else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - test -d ./-p && rmdir ./-p - test -d ./--version && rmdir ./--version - fi - ;; - *) - if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && - test ! -d ./--version; then - echo "mkdir -m $dirmode -p -- $*" - exec mkdir -m "$dirmode" -p -- "$@" - else - # Clean up after NextStep and OpenStep mkdir. - for d in ./-m ./-p ./--version "./$dirmode"; - do - test -d $d && rmdir $d - done - fi - ;; -esac - -for file -do - case $file in - /*) pathcomp=/ ;; - *) pathcomp= ;; - esac - oIFS=$IFS - IFS=/ - set fnord $file - shift - IFS=$oIFS - - for d - do - test "x$d" = x && continue - - pathcomp=$pathcomp$d - case $pathcomp in - -*) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - lasterr= - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - fi - fi - - pathcomp=$pathcomp/ - done -done - -exit $errstatus - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/modules.def b/modules.def index d9758423f..a91aed83e 100644 --- a/modules.def +++ b/modules.def @@ -109,6 +109,7 @@ program = { source = util/grub-mkimage.c; source = util/resolve.c; + extra_dist = util/grub-mkimagexx.c; ldadd = libutil.a; diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index 4af6a71e3..670494031 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -123,15 +123,11 @@ source /boot/grub/testcase.cfg halt EOF -rootdir=`mktemp -d` -(cd @abs_top_builddir@ && make DESTDIR=$rootdir install) >/dev/null 2>&1 - isofile=`mktemp` sh @abs_top_builddir@/grub-mkrescue --grub-mkimage=${builddir}/grub-mkimage \ --override-directory=${builddir}/grub-core --output=${isofile} \ boot/grub/grub.cfg=${cfgfile} \ /boot/grub/testcase.cfg=${source} >/dev/null 2>&1 -rm -rf $rootdir hdafile=`mktemp` cp ${isofile} ${hdafile} From 610c1efd103a09991eb8123490a812f6900e0f02 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 3 Jun 2010 15:30:15 +0530 Subject: [PATCH 151/271] more cleanup --- Makefile.am | 5 ++-- configure.common | 6 +++-- grub-core/Makefile.am | 12 ++++++---- grub-core/Makefile.extra-dist | 43 ----------------------------------- grub-core/Makefile.vars | 7 +++--- grub-core/modules.def | 19 ++++++++++------ 6 files changed, 31 insertions(+), 61 deletions(-) delete mode 100644 grub-core/Makefile.extra-dist diff --git a/Makefile.am b/Makefile.am index 6b6f9e10c..9ced44636 100644 --- a/Makefile.am +++ b/Makefile.am @@ -17,8 +17,8 @@ CCASFLAGS_LIBRARY = $(CCASFLAGS_PROGRAM) AM_CFLAGS = AM_LDFLAGS = -AM_CPPFLAGS = $(CPPFLAGS_GRUB) -DGRUB_FILE=\"$(subst $(top_srcdir)/,,$<)\" -AM_CCASFLAGS = -DASM_FILE=1 +AM_CPPFLAGS = $(CPPFLAGS_GRUB) +AM_CCASFLAGS = $(CCASFLAGS_GRUB) include $(srcdir)/modules.am @@ -73,4 +73,5 @@ ascii.h: ascii.bitmaps grub-bin2h cp $@ $(top_builddir)/grub-core/include CLEANFILES += ascii.h $(top_builddir)/grub-core/include/ascii.h +# Install config.h into platformdir platform_HEADERS = config.h diff --git a/configure.common b/configure.common index ecd9ff190..815c76c53 100644 --- a/configure.common +++ b/configure.common @@ -779,12 +779,14 @@ fi if test x"$device_mapper_excuse" = x ; then # Check for device-mapper library. AC_CHECK_LIB([devmapper], [dm_task_create], - [LDFLAGS="$LDFLAGS -ldevmapper" + [HOST_LDFLAGS="$HOST_LDFLAGS -ldevmapper" AC_DEFINE([HAVE_DEVICE_MAPPER], [1], [Define to 1 if you have the devmapper library.])], [device_mapper_excuse="need devmapper library"]) fi -AC_SUBST(ASFLAGS) + +pkglibrootdir='$(libdir)'/`echo $PACKAGE | sed "$program_transform_name"` +AC_SUBST(pkglibrootdir) AC_SUBST([FONT_SOURCE]) AS_IF([test x$target_cpu = xi386 -a x$platform = xpc], diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 1f2657656..71abb5a7a 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -1,8 +1,12 @@ AUTOMAKE_OPTIONS = subdir-objects SUBDIRS = po DEPDIR = .deps-core +EXTRA_DIST = gentpl.py modules.def Makefile.tpl genmoddep.awk +EXTRA_DIST += genmodsrc.sh gensymlist.sh genemuinit.sh genemuinitheader.sh +EXTRA_DIST += genfslist.sh gencmdlist.sh genvideolist.sh genhandlerlist.sh +EXTRA_DIST += genpartmaplist.sh genparttoollist.sh genterminallist.sh +EXTRA_DIST += $(shell find $(top_srcdir) -name '*.h') -include $(top_srcdir)/Makefile.extra-dist include $(top_srcdir)/Makefile.vars LDADD_KERNEL = -lgcc @@ -30,10 +34,10 @@ LDFLAGS_PROGRAM = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) CPPFLAGS_PROGRAM = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) CCASFLAGS_PROGRAM = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) -AM_CFLAGS = +AM_CFLAGS = AM_LDFLAGS = -AM_CPPFLAGS = $(CPPFLAGS_GRUB) -DGRUB_FILE=\"$(subst $(top_srcdir)/,,$<)\" -AM_CCASFLAGS = -DASM_FILE=1 +AM_CPPFLAGS = $(CPPFLAGS_GRUB) +AM_CCASFLAGS = $(CCASFLAGS_GRUB) # gentrigtables gentrigtables: $(top_srcdir)/gentrigtables.c diff --git a/grub-core/Makefile.extra-dist b/grub-core/Makefile.extra-dist deleted file mode 100644 index 9979c875b..000000000 --- a/grub-core/Makefile.extra-dist +++ /dev/null @@ -1,43 +0,0 @@ -# -# Extra files that need to be distributed (in .tar.gz) to build -# successfully on user site. -# -# XXX Remove wildcards; See 27.3 in automake.info -# - -EXTRA_DIST = - -EXTRA_DIST += gentpl.py -EXTRA_DIST += Makefile.tpl -EXTRA_DIST += modules.def - -EXTRA_DIST += gentrigtables.c - -EXTRA_DIST += genmoddep.awk -EXTRA_DIST += genmodsrc.sh -EXTRA_DIST += gensymlist.sh - -EXTRA_DIST += genemuinit.sh -EXTRA_DIST += genemuinitheader.sh - -EXTRA_DIST += genfslist.sh -EXTRA_DIST += gencmdlist.sh -EXTRA_DIST += genvideolist.sh -EXTRA_DIST += genhandlerlist.sh -EXTRA_DIST += genpartmaplist.sh -EXTRA_DIST += genparttoollist.sh -EXTRA_DIST += genterminallist.sh - -EXTRA_DIST += lib/libgcrypt_wrap/cipher_wrap.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/crypto.lst - -EXTRA_DIST += kern/i386/loader.S -EXTRA_DIST += kern/i386/realmode.S -EXTRA_DIST += loader/i386/bsdXX.c -EXTRA_DIST += loader/i386/bsd_pagetable.c -EXTRA_DIST += commands/search.c - -EXTRA_DIST += kern/i386/pc/lzma_decode.S - -EXTRA_DIST += $(shell find $(top_srcdir) -name '*.h') - diff --git a/grub-core/Makefile.vars b/grub-core/Makefile.vars index 7d398b4c9..db3c2a7db 100644 --- a/grub-core/Makefile.vars +++ b/grub-core/Makefile.vars @@ -1,8 +1,7 @@ # -*- makefile -*- -pkglibroot = $(libdir)/$(shell echo $(PACKAGE) | sed "$(transform)") grubconfdir = $(sysconfdir)/grub.d -platformdir = $(pkglibroot)/$(target_cpu)-$(platform) +platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) # Platform specific options if COND_i386_pc @@ -32,9 +31,11 @@ if COND_sparc64_ieee1275 LDFLAGS_PLATFORM = -melf64_sparc -mno-relax endif -CPPFLAGS_GRUB = -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) +CPPFLAGS_GRUB = -DGRUB_FILE=\"`basename $<`\" +CPPFLAGS_GRUB += -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) CPPFLAGS_GRUB += -I$(top_srcdir)/$(grub_coredir)/include CPPFLAGS_GRUB += -I$(top_builddir)/$(grub_coredir)/include +CCASFLAGS_GRUB = -DASM_FILE=1 CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers CPPFLAGS_GCRY = -I$(top_srcdir)/$(grub_coredir)/lib/libgcrypt_wrap diff --git a/grub-core/modules.def b/grub-core/modules.def index 348738971..c64217d5d 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -215,6 +215,10 @@ kernel = { emu = kern/emu/console.c; emu = disk/host.c; emu = gnulib/progname.c; + + extra_dist = kern/i386/loader.S; + extra_dist = kern/i386/realmode.S; + extra_dist = kern/i386/pc/lzma_decode.S; }; program = { @@ -247,6 +251,7 @@ program = { module = { name = trig; nodist = trigtables.c; + extra_dist = gentrigtables.c; common; }; @@ -349,13 +354,6 @@ library = { name = libgnulib.a; source = gnulib/regex.c; - extra_dist = gnulib/progname.h; - extra_dist = gnulib/alloca.h; - extra_dist = gnulib/error.h; - extra_dist = gnulib/fnmatch.h; - extra_dist = gnulib/getopt.h; - extra_dist = gnulib/getopt_int.h; - extra_dist = gnulib/gettext.h; extra_dist = gnulib/regcomp.c; extra_dist = gnulib/regexec.c; extra_dist = gnulib/fnmatch_loop.c; @@ -633,6 +631,7 @@ module = { common; name = search; source = commands/search_wrap.c; + extra_dist = commands/search.c; }; module = { @@ -1066,6 +1065,8 @@ module = { common; name = crypto; source = lib/crypto.c; + + extra_dist = lib/libgcrypt-grub/cipher/crypto.lst; }; module = { @@ -1273,6 +1274,10 @@ module = { source = loader/i386/bsd64.c; source = loader/i386/bsd_helper.S; source = loader/i386/bsd_trampoline.S; + + extra_dist = loader/i386/bsdXX.c; + extra_dist = loader/i386/bsd_pagetable.c; + i386_pc; i386_qemu; i386_coreboot; From 1896a4aacb5ab8e6b446039f88b6536e4f8fb265 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 3 Jun 2010 15:32:21 +0530 Subject: [PATCH 152/271] bzignore updates --- .bzrignore | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/.bzrignore b/.bzrignore index f91e72efa..a2fdef858 100644 --- a/.bzrignore +++ b/.bzrignore @@ -76,4 +76,29 @@ modules.am GPATH GRTAGS GSYMS -GTAGS \ No newline at end of file +GTAGS +Makefile.tpl +compile +depcomp +mdate-sh +texinfo.tex +grub-core/ABOUT-NLS +grub-core/AUTHORS +grub-core/COPYING +grub-core/ChangeLog +grub-core/INSTALL +grub-core/Makefile.tpl +grub-core/NEWS +grub-core/README +grub-core/THANKS +grub-core/TODO +grub-core/acinclude.m4 +grub-core/compile +grub-core/config.rpath +grub-core/configure.common +grub-core/depcomp +grub-core/gentpl.py +grub-core/conf/gcry.rmk +grub-core/lib/libgcrypt-grub +grub-core/include/grub/cpu +grub-core/include/grub/machine From d5c3b7ce0144fc8bc566b2a069a6af3a6efd8671 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 4 Jun 2010 09:34:28 +0530 Subject: [PATCH 153/271] rename libutil to libgrub --- Makefile.am | 20 ++++++++++---------- grub-core/Makefile.am | 1 + modules.def | 30 +++++++++++++++--------------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/Makefile.am b/Makefile.am index 9ced44636..99fd490c2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,8 +1,8 @@ AUTOMAKE_OPTIONS = subdir-objects -DEPDIR = .deps-util -EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh +DEPDIR = .deps-util SUBDIRS = . grub-core po docs +EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh include $(top_srcdir)/grub-core/Makefile.vars @@ -32,19 +32,19 @@ grub_script.yy.c grub_script.yy.h: $(top_srcdir)/grub-core/script/yylex.l $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(top_srcdir)/grub-core/script/yylex.l CLEANFILES += grub_script.yy.c grub_script.yy.h -# For libutil.a -libutil.pp: grub_script.tab.h grub_script.yy.h $(libutil_a_SOURCES) - $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) \ +# For libgrub.a +libgrub.pp: grub_script.tab.h grub_script.yy.h $(libgrub_a_SOURCES) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrub_a_CPPFLAGS) $(CPPFLAGS) \ -D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1) -CLEANFILES += libutil.pp +CLEANFILES += libgrub.pp -libutil_a_init.lst: libutil.pp +libgrub_a_init.lst: libgrub.pp cat $< | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1) -CLEANFILES += libutil_a_init.lst +CLEANFILES += libgrub_a_init.lst -libutil_a_init.c: libutil_a_init.lst $(top_srcdir)/geninit.sh +libgrub_a_init.c: libgrub_a_init.lst $(top_srcdir)/geninit.sh sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1) -CLEANFILES += libutil_a_init.c +CLEANFILES += libgrub_a_init.c if COND_GRUB_MKFONT if COND_HAVE_FONT_SOURCE diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 71abb5a7a..61a69fca6 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -1,4 +1,5 @@ AUTOMAKE_OPTIONS = subdir-objects + SUBDIRS = po DEPDIR = .deps-core EXTRA_DIST = gentpl.py modules.def Makefile.tpl genmoddep.awk diff --git a/modules.def b/modules.def index a91aed83e..5a485f9a5 100644 --- a/modules.def +++ b/modules.def @@ -1,13 +1,13 @@ AutoGen definitions Makefile.tpl; library = { - name = libutil.a; + name = libgrub.a; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; nodist = grub_script.tab.c; nodist = grub_script.yy.c; - nodist = libutil_a_init.c; + nodist = libgrub_a_init.c; source = grub-core/gnulib/error.c; source = grub-core/gnulib/fnmatch.c; @@ -98,7 +98,7 @@ library = { program = { name = grub-bin2h; source = util/bin2h.c; - ldadd = libutil.a; + ldadd = libgrub.a; mansection = 1; common; }; @@ -111,7 +111,7 @@ program = { source = util/resolve.c; extra_dist = util/grub-mkimagexx.c; - ldadd = libutil.a; + ldadd = libgrub.a; cppflags = '-DGRUB_PKGLIBROOTDIR=\"$(pkglibroot)\"'; common; @@ -123,7 +123,7 @@ program = { source = util/grub-mkrelpath.c; - ldadd = libutil.a; + ldadd = libgrub.a; common; }; @@ -133,7 +133,7 @@ program = { source = util/grub-script-check.c; - ldadd = libutil.a; + ldadd = libgrub.a; common; }; @@ -143,7 +143,7 @@ program = { source = util/grub-editenv.c; - ldadd = libutil.a; + ldadd = libgrub.a; common; }; @@ -153,7 +153,7 @@ program = { source = util/grub-mkpasswd-pbkdf2.c; - ldadd = libutil.a; + ldadd = libgrub.a; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; common; @@ -170,7 +170,7 @@ program = { mansection = 1; source = util/grub-pe2elf.c; - ldadd = libutil.a; + ldadd = libgrub.a; }; program = { @@ -178,7 +178,7 @@ program = { mansection = 1; source = util/grub-fstest.c; - ldadd = libutil.a; + ldadd = libgrub.a; enable = COND_GRUB_FSTEST; common; }; @@ -188,7 +188,7 @@ program = { mansection = 1; source = util/grub-mkfont.c; - ldadd = libutil.a; + ldadd = libgrub.a; cflags = '$(freetype_cflags)'; ldflags = '$(freetype_libs)'; common; @@ -208,7 +208,7 @@ program = { sparc64_ieee1275 = util/ieee1275/ofpath.c; sparc64_ieee1275 = util/ieee1275/devicemap.c; - ldadd = libutil.a; + ldadd = libgrub.a; common; }; @@ -218,7 +218,7 @@ program = { mansection = 8; source = util/grub-probe.c; - ldadd = libutil.a; + ldadd = libgrub.a; common; }; @@ -235,7 +235,7 @@ program = { sparc64_ieee1275 = util/raid.c; sparc64_ieee1275 = util/lvm.c; - ldadd = libutil.a; + ldadd = libgrub.a; }; program = { @@ -244,7 +244,7 @@ program = { source = util/ieee1275/grub-ofpathname.c; source = util/ieee1275/ofpath.c; - ldadd = libutil.a; + ldadd = libgrub.a; sparc64_ieee1275; }; From c0bb7fb68fd1ea581d135a5f9ebef14e52289c92 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 4 Jun 2010 10:30:25 +0530 Subject: [PATCH 154/271] add -lutil for netbsd --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 99fd490c2..8e26d3403 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,7 +7,7 @@ EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh include $(top_srcdir)/grub-core/Makefile.vars CFLAGS_PROGRAM = $(HOST_CFLAGS) $(CFLAGS_GNULIB) -LDFLAGS_PROGRAM = $(HOST_LDFLAGS) $(LDFLAGS_GNULIB) $(LIBINTL) +LDFLAGS_PROGRAM = $(HOST_LDFLAGS) $(LDFLAGS_GNULIB) $(LIBINTL) $(LIBUTIL) CPPFLAGS_PROGRAM = $(HOST_CPPFLAGS) $(CPPFLAGS_GNULIB) CCASFLAGS_PROGRAM = $(HOST_CCASFLAGS) $(CCASFLAGS_GNULIB) From b89561390ca9464072f373de1963758c20090cf5 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 4 Jun 2010 15:00:59 +0530 Subject: [PATCH 155/271] remove Ruby requirement from INSTALL --- INSTALL | 1 - 1 file changed, 1 deletion(-) diff --git a/INSTALL b/INSTALL index 7186d20db..585c7e0b4 100644 --- a/INSTALL +++ b/INSTALL @@ -22,7 +22,6 @@ configuring the GRUB. If you use a development snapshot or want to hack on GRUB you may need the following. -* Ruby 1.6 or later * Python 2.5.2 or later * Autoconf 2.60 or later * Automake 1.10.1 or later From d3ff5a05ebd200dad68632fbed0d408a8633335a Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 4 Jun 2010 16:48:42 +0530 Subject: [PATCH 156/271] fix for cygwin build --- configure.ac | 4 ++-- configure.common | 6 +++--- grub-core/Makefile.am | 1 + grub-core/configure.ac | 6 +++--- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index dfbc6b8be..9ea1486b7 100644 --- a/configure.ac +++ b/configure.ac @@ -42,11 +42,11 @@ AC_PREREQ(2.60) AC_CONFIG_SRCDIR([grub-core/include/grub/dl.h]) AC_CONFIG_HEADER([config.h]) -m4_include([configure.common]) - grub_coredir='grub-core' AC_SUBST(grub_coredir) +m4_include([configure.common]) + # Output files. AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([po/Makefile]) diff --git a/configure.common b/configure.common index 815c76c53..ac3c4edd4 100644 --- a/configure.common +++ b/configure.common @@ -356,10 +356,10 @@ if test x$grub_cv_apple_target_cc = xyes ; then else TARGET_APPLE_CC=0 # Use linker script if present, otherwise use builtin -N script. -if test -f "${srcdir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then - TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" +if test -f "${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then + TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT} -Wl,-Ttext," - TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc -Wl,-Ttext," + TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc -Wl,-Ttext," else TARGET_IMG_LDSCRIPT= TARGET_IMG_LDFLAGS='-Wl,-N -Wl,-Ttext,' diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 61a69fca6..85433431d 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -6,6 +6,7 @@ EXTRA_DIST = gentpl.py modules.def Makefile.tpl genmoddep.awk EXTRA_DIST += genmodsrc.sh gensymlist.sh genemuinit.sh genemuinitheader.sh EXTRA_DIST += genfslist.sh gencmdlist.sh genvideolist.sh genhandlerlist.sh EXTRA_DIST += genpartmaplist.sh genparttoollist.sh genterminallist.sh +EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc EXTRA_DIST += $(shell find $(top_srcdir) -name '*.h') include $(top_srcdir)/Makefile.vars diff --git a/grub-core/configure.ac b/grub-core/configure.ac index 6cac2e75c..8d7d760ac 100644 --- a/grub-core/configure.ac +++ b/grub-core/configure.ac @@ -42,15 +42,15 @@ AC_PREREQ(2.60) AC_CONFIG_SRCDIR([include/grub/dl.h]) AC_CONFIG_HEADER([config.h]) +grub_coredir='.' +AC_SUBST(grub_coredir) + m4_include([configure.common]) CC=$TARGET_CC CPP=$TARGET_CC CCAS=$TARGET_CC -grub_coredir='.' -AC_SUBST(grub_coredir) - # Output files. grub_CHECK_LINK_DIR if test x"$link_dir" = xyes ; then From 40f8acbc5b0bc14ca023e071013283f76dd24b64 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 5 Jun 2010 11:40:25 +0530 Subject: [PATCH 157/271] cleanup --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 8e26d3403..181f3e9ca 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,7 +7,7 @@ EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh include $(top_srcdir)/grub-core/Makefile.vars CFLAGS_PROGRAM = $(HOST_CFLAGS) $(CFLAGS_GNULIB) -LDFLAGS_PROGRAM = $(HOST_LDFLAGS) $(LDFLAGS_GNULIB) $(LIBINTL) $(LIBUTIL) +LDFLAGS_PROGRAM = $(HOST_LDFLAGS) $(LDFLAGS_GNULIB) CPPFLAGS_PROGRAM = $(HOST_CPPFLAGS) $(CPPFLAGS_GNULIB) CCASFLAGS_PROGRAM = $(HOST_CCASFLAGS) $(CCASFLAGS_GNULIB) From bf14a41c81b2c743d60a208bf45bd4ff3a2aa1fa Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 5 Jun 2010 12:20:37 +0530 Subject: [PATCH 158/271] fixes for netbsd --- modules.def | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules.def b/modules.def index 5a485f9a5..910065083 100644 --- a/modules.def +++ b/modules.def @@ -209,6 +209,7 @@ program = { sparc64_ieee1275 = util/ieee1275/devicemap.c; ldadd = libgrub.a; + ldadd = '$(LIBUTIL)'; common; }; @@ -219,6 +220,7 @@ program = { source = util/grub-probe.c; ldadd = libgrub.a; + ldadd = '$(LIBUTIL)'; common; }; @@ -236,6 +238,7 @@ program = { sparc64_ieee1275 = util/lvm.c; ldadd = libgrub.a; + ldadd = '$(LIBUTIL)'; }; program = { From 83fb6e1d48ab01a197986056b51303ba870ec6ba Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 5 Jun 2010 13:15:18 +0530 Subject: [PATCH 159/271] freebsd fixes --- modules.def | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules.def b/modules.def index 910065083..d62c5566f 100644 --- a/modules.def +++ b/modules.def @@ -99,6 +99,7 @@ program = { name = grub-bin2h; source = util/bin2h.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; mansection = 1; common; }; @@ -112,6 +113,7 @@ program = { extra_dist = util/grub-mkimagexx.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; cppflags = '-DGRUB_PKGLIBROOTDIR=\"$(pkglibroot)\"'; common; @@ -124,6 +126,7 @@ program = { source = util/grub-mkrelpath.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; common; }; @@ -134,6 +137,7 @@ program = { source = util/grub-script-check.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; common; }; @@ -144,6 +148,7 @@ program = { source = util/grub-editenv.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; common; }; @@ -154,6 +159,7 @@ program = { source = util/grub-mkpasswd-pbkdf2.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; common; @@ -179,6 +185,7 @@ program = { source = util/grub-fstest.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; enable = COND_GRUB_FSTEST; common; }; @@ -188,6 +195,7 @@ program = { mansection = 1; source = util/grub-mkfont.c; + ldadd = '$(LIBINTL)'; ldadd = libgrub.a; cflags = '$(freetype_cflags)'; ldflags = '$(freetype_libs)'; @@ -209,6 +217,7 @@ program = { sparc64_ieee1275 = util/ieee1275/devicemap.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; ldadd = '$(LIBUTIL)'; common; }; @@ -220,6 +229,7 @@ program = { source = util/grub-probe.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; ldadd = '$(LIBUTIL)'; common; }; @@ -238,6 +248,7 @@ program = { sparc64_ieee1275 = util/lvm.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; ldadd = '$(LIBUTIL)'; }; From 2d465fb052397edff7b3f1b0c72d552b26d3d367 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 7 Jun 2010 17:23:54 +0530 Subject: [PATCH 160/271] cygwin fixes --- acinclude.m4 | 2 +- configure.ac | 3 +++ configure.common | 21 ++++++++++++-------- grub-core/Makefile.kernel | 2 +- grub-core/configure.ac | 3 +++ grub-core/modules.def | 41 ++++++++++++++++++++++++--------------- modules.def | 11 ++++++++--- 7 files changed, 54 insertions(+), 29 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 72483b5d0..0615c863a 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -93,7 +93,7 @@ else fi grub_cv_prog_objcopy_absolute=yes for link_addr in 0x2000 0x8000 0x7C00; do - if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC}$link_addr conftest.o -o conftest.exec]); then : + if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec]); then : else AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr]) fi diff --git a/configure.ac b/configure.ac index 9ea1486b7..9b9db0ac4 100644 --- a/configure.ac +++ b/configure.ac @@ -45,6 +45,9 @@ AC_CONFIG_HEADER([config.h]) grub_coredir='grub-core' AC_SUBST(grub_coredir) +grub_utildir='.' +AC_SUBST(grub_utildir) + m4_include([configure.common]) # Output files. diff --git a/configure.common b/configure.common index ac3c4edd4..f19e107b1 100644 --- a/configure.common +++ b/configure.common @@ -351,19 +351,22 @@ if test x$grub_cv_apple_target_cc = xyes ; then fi TARGET_IMG_LDSCRIPT= TARGET_IMG_CFLAGS="-static" - TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20 -Wl,-image_base,' - TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20 -Wl,-image_base,' + TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20' + TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20' + TARGET_IMG_BASE_LDOPT="-Wl,-image_base" else TARGET_APPLE_CC=0 # Use linker script if present, otherwise use builtin -N script. if test -f "${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" - TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT} -Wl,-Ttext," - TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc -Wl,-Ttext," + TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}" + TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" + TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" else TARGET_IMG_LDSCRIPT= - TARGET_IMG_LDFLAGS='-Wl,-N -Wl,-Ttext,' - TARGET_IMG_LDFLAGS_AC='-Wl,-N -Wl,-Ttext,' + TARGET_IMG_LDFLAGS='-Wl,-N' + TARGET_IMG_LDFLAGS_AC='-Wl,-N' + TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" fi TARGET_IMG_CFLAGS= fi @@ -371,7 +374,7 @@ fi # For platforms where ELF is not the default link format. AC_MSG_CHECKING([for command to convert module to ELF format]) case "${host_os}" in - cygwin) TARGET_OBJ2ELF='grub-pe2elf'; + cygwin) TARGET_OBJ2ELF='$(grub_utildir)/grub-pe2elf'; # FIXME: put proper test here AC_DEFINE([NEED_REGISTER_FRAME_INFO], 1, [Define to 1 if GCC generates calls to __register_frame_info()]) @@ -479,6 +482,7 @@ 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) AC_SUBST(HOST_CFLAGS) AC_SUBST(HOST_LDFLAGS) @@ -523,7 +527,7 @@ if test "x$target_cpu" = xi386; then if test "$platform" != emu && test "x$TARGET_APPLE_CC" != x1 ; then if test ! -z "$TARGET_IMG_LDSCRIPT"; then # Check symbols provided by linker script. - CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC}8000 -Wl,--defsym,___main=0x8100" + CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},8000 -Wl,--defsym,___main=0x8100" fi grub_CHECK_BSS_START_SYMBOL grub_CHECK_END_SYMBOL @@ -830,4 +834,5 @@ AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes]) AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) AM_CONDITIONAL([COND_GRUB_FSTEST], [test x$enable_grub_fstest = xyes]) +AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x]) AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) diff --git a/grub-core/Makefile.kernel b/grub-core/Makefile.kernel index 8b48cf153..866626c7a 100644 --- a/grub-core/Makefile.kernel +++ b/grub-core/Makefile.kernel @@ -176,8 +176,8 @@ BUILT_SOURCES += symlist.c noinst_DATA += kernel_syms.lst kernel_syms.lst: $(KERNEL_HEADER_FILES) config.h - if grep "^#define HAVE_ASM_USCORE" config.h; then u="_"; else u=""; fi $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) $(CFLAGS) -DGRUB_SYMBOL_GENERATOR=1 $^ >kernel_syms.input + if grep "^#define HAVE_ASM_USCORE" config.h; then u="_"; else u=""; fi; \ cat kernel_syms.input | grep -v '^#' | sed -n \ -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ diff --git a/grub-core/configure.ac b/grub-core/configure.ac index 8d7d760ac..7c3175fea 100644 --- a/grub-core/configure.ac +++ b/grub-core/configure.ac @@ -45,6 +45,9 @@ AC_CONFIG_HEADER([config.h]) grub_coredir='.' AC_SUBST(grub_coredir) +grub_utildir='..' +AC_SUBST(grub_utildir) + m4_include([configure.common]) CC=$TARGET_CC diff --git a/grub-core/modules.def b/grub-core/modules.def index c64217d5d..0e3b53fd8 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -5,10 +5,15 @@ kernel = { emu_ldflags = '-Wl,-r'; x86_efi_ldflags = '-Wl,-r'; - i386_pc_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + + i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; + i386_coreboot_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; i386_multiboot_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; - i386_qemu_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; i386_ieee1275_ldflags = '-Wl,-Ttext=$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; mips_yeeloong_ldflags = '-Wl,-Ttext,$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; powerpc_ieee1275_ldflags = '-Wl,-Ttext,$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; @@ -258,10 +263,13 @@ module = { image = { name = boot; i386_pc = boot/i386/pc/boot.S; - i386_pc_ldflags = "-Wl,-Ttext=0x7C00"; - i386_qemu = boot/i386/qemu/boot.S; - i386_qemu_ldflags = '-Wl,-Ttext,$(GRUB_BOOT_MACHINE_LINK_ADDR)'; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; + + i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR)'; i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S; @@ -271,24 +279,25 @@ image = { image = { name = cdboot; - source = boot/i386/pc/cdboot.S; - ldflags = "-Wl,-Ttext=0x7C00"; - - i386_pc; + i386_pc = boot/i386/pc/cdboot.S; + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; }; image = { name = pxeboot; - source = boot/i386/pc/pxeboot.S; - ldflags = '-Wl,-Ttext=0x7C00'; + i386_pc = boot/i386/pc/pxeboot.S; - i386_pc; + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; }; image = { name = diskboot; i386_pc = boot/i386/pc/diskboot.S; - i386_pc_ldflags = '-Wl,-Ttext=0x8000'; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8000'; sparc64_ieee1275 = boot/sparc64/ieee1275/diskboot.S; sparc64_ieee1275_ldflags = '-Wl,-Ttext=0x4200'; @@ -296,10 +305,10 @@ image = { image = { name = lnxboot; - source = boot/i386/pc/lnxboot.S; - ldflags = '-Wl,-Ttext=0x6000'; + i386_pc = boot/i386/pc/lnxboot.S; - i386_pc; + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x6000'; }; module = { diff --git a/modules.def b/modules.def index d62c5566f..766c8a604 100644 --- a/modules.def +++ b/modules.def @@ -177,6 +177,9 @@ program = { source = util/grub-pe2elf.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; + enable = COND_GRUB_PE2ELF; + common; }; program = { @@ -195,10 +198,12 @@ program = { mansection = 1; source = util/grub-mkfont.c; - ldadd = '$(LIBINTL)'; - ldadd = libgrub.a; cflags = '$(freetype_cflags)'; - ldflags = '$(freetype_libs)'; + + ldadd = libgrub.a; + ldadd = '$(LIBINTL)'; + ldadd = '$(freetype_libs)'; + common; enable = COND_GRUB_MKFONT; }; From e235a2289dcdb5181a91e78cffeb78a65880a71e Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 7 Jun 2010 21:28:37 +0530 Subject: [PATCH 161/271] more cygwin fixes --- gentpl.py | 12 ++++++------ grub-core/modules.def | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gentpl.py b/gentpl.py index 02369d843..7a5986a9e 100644 --- a/gentpl.py +++ b/gentpl.py @@ -154,7 +154,7 @@ def platform_format(platform): return each_group(platform, "_format", lamb def module(platform): r = gvar_add("noinst_PROGRAMS", "[+ name +].module") - r += gvar_add("MODULE_FILES", "[+ name +].module") + r += gvar_add("MODULE_FILES", "[+ name +].module$(EXEEXT)") r += var_set(canonical_module() + "_SOURCES", platform_sources(platform) + "## platform sources") r += var_add(canonical_module() + "_SOURCES", shared_sources() + "## shared sources") @@ -192,23 +192,23 @@ def module(platform): [+ name +].pp: $(""" + canonical_module() + """_SOURCES) $(nodist_""" + canonical_module() + """_SOURCES) $(TARGET_CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + canonical_module() + """_CPPFLAGS) $(CPPFLAGS) $^ > $@ || (rm -f $@; exit 1) -def-[+ name +].lst: [+ name +].module +def-[+ name +].lst: [+ name +].module$(EXEEXT) if test x$(USE_APPLE_CC_FIXES) = xyes; then \ $(NM) -g -P -p $< | grep -E '^[a-zA-Z0-9_]* [TDS]' | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@; \ else \ $(NM) -g --defined-only -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@; \ fi -und-[+ name +].lst: [+ name +].module +und-[+ name +].lst: [+ name +].module$(EXEEXT) $(NM) -u -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@ -mod-[+ name +].c: [+ name +].module $(top_builddir)/moddep.lst $(top_srcdir)/genmodsrc.sh +mod-[+ name +].c: [+ name +].module$(EXEEXT) $(top_builddir)/moddep.lst $(top_srcdir)/genmodsrc.sh sh $(top_srcdir)/genmodsrc.sh [+ name +] $(top_builddir)/moddep.lst > $@ || (rm -f $@; exit 1) mod-[+ name +].o: mod-[+ name +].c $(TARGET_CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS_MODULE) $(CPPFLAGS) $(CFLAGS_MODULE) $(CFLAGS) -c -o $@ $< -[+ name +].mod: [+ name +].module mod-[+ name +].o +[+ name +].mod: [+ name +].module$(EXEEXT) mod-[+ name +].o if test x$(USE_APPLE_CC_FIXES) = xyes; then \ $(CCLD) $(LDFLAGS_MODULE) $(LDFLAGS) -o $@.bin $^; \ $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -nu -nd $@.bin $@; \ @@ -303,7 +303,7 @@ def image(platform): r += gvar_add("platform_DATA", "[+ name +].img") r += gvar_add("CLEANFILES", "[+ name +].img") - r += rule("[+ name +].img", "[+ name +].image", """ + r += rule("[+ name +].img", "[+ name +].image$(EXEEXT)", """ if test x$(USE_APPLE_CC_FIXES) = xyes; then \ $(MACHO2IMG) $< $@; \ else \ diff --git a/grub-core/modules.def b/grub-core/modules.def index 0e3b53fd8..42c6398a1 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -233,7 +233,7 @@ program = { source = kern/emu/full.c; nodist = grub_emu_init.c; - ldadd = kernel.img; + ldadd = 'kernel.img$(EXEEXT)'; ldadd = '$(MODULE_FILES)'; ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS)'; @@ -247,19 +247,12 @@ program = { source = kern/emu/cache.S; nodist = symlist.c; - ldadd = kernel.img; + ldadd = 'kernel.img$(EXEEXT)'; ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS)'; emu; }; -module = { - name = trig; - nodist = trigtables.c; - extra_dist = gentrigtables.c; - common; -}; - image = { name = boot; i386_pc = boot/i386/pc/boot.S; @@ -311,6 +304,13 @@ image = { i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x6000'; }; +module = { + name = trig; + nodist = trigtables.c; + extra_dist = gentrigtables.c; + common; +}; + module = { name = libusb; source = bus/usb/emu/usb.c; From ff174dbea117ef33d06176e09b8ce648c3d4ae72 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 8 Jun 2010 17:37:17 +0530 Subject: [PATCH 162/271] add autogen to INSTALL --- INSTALL | 1 + autogen.sh | 2 ++ 2 files changed, 3 insertions(+) diff --git a/INSTALL b/INSTALL index 418b3002d..bbfa01f0a 100644 --- a/INSTALL +++ b/INSTALL @@ -40,6 +40,7 @@ need the following. * Python 2.5.2 or later * Autoconf 2.60 or later * Automake 1.10.1 or later +* Autogen 5.10 or later Prerequisites for make-check: diff --git a/autogen.sh b/autogen.sh index db640702b..46ccc0627 100755 --- a/autogen.sh +++ b/autogen.sh @@ -2,6 +2,8 @@ set -e +autogen --version >/dev/null || (echo autogen missing; exit 1) + echo "Creating symlinks..." ln -svf ../NEWS grub-core/ ln -svf ../TODO grub-core/ From d270972ab046a49798cabe73d1e9c1bacc5aad18 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 8 Jun 2010 18:08:45 +0530 Subject: [PATCH 163/271] fix pkglibrootdir for grub-mkimage --- modules.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.def b/modules.def index 766c8a604..8b709a869 100644 --- a/modules.def +++ b/modules.def @@ -115,7 +115,7 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; - cppflags = '-DGRUB_PKGLIBROOTDIR=\"$(pkglibroot)\"'; + cppflags = '-DGRUB_PKGLIBROOTDIR=\"$(pkglibrootdir)\"'; common; }; From 911bd64013d0f9398df278e41dd53ca8995a34eb Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 13 Jul 2010 23:35:24 +0530 Subject: [PATCH 164/271] make build by default --- configure.common | 1 + gentpl.py | 350 ++++++++++++++++--------------------- grub-core/configure.ac | 2 + grub-core/modules.def | 381 +++++++++++++++++------------------------ modules.def | 119 +++++-------- 5 files changed, 354 insertions(+), 499 deletions(-) diff --git a/configure.common b/configure.common index 46a3fd5e4..a9e5665dd 100644 --- a/configure.common +++ b/configure.common @@ -848,4 +848,5 @@ AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) AM_CONDITIONAL([COND_GRUB_FSTEST], [test x$enable_grub_fstest = xyes]) AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x]) +AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC != x]) AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) diff --git a/gentpl.py b/gentpl.py index de2efe80a..5081cf483 100644 --- a/gentpl.py +++ b/gentpl.py @@ -17,7 +17,6 @@ GROUPS["sparc64"] = [ "sparc64_ieee1275" ] GROUPS["powerpc"] = [ "powerpc_ieee1275" ] GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"] GROUPS["x86_efi"] = [ "i386_efi", "x86_64_efi" ] -GROUPS["common"] = GRUB_PLATFORMS[:] GROUPS["nonemu"] = GRUB_PLATFORMS[:] GROUPS["nonemu"].remove("emu") @@ -75,100 +74,92 @@ def var_add(var, value): # Autogen constructs # -def if_tag(tag, closure): - return "[+ IF " + tag + " +]" + closure() + "[+ ENDIF +]" +def set_canonical_name_suffix(suffix): return "[+ % name `export cname=$(echo -n %s" + suffix + " | sed -e 's/[^0-9A-Za-z@_]/_/g')` +]" +def cname(): return "[+ % name `echo $cname` +]" -def if_tag_defined(tag, closure): - return "[+ IF " + tag + " defined +]" + closure() + "[+ ENDIF +]" - -def for_tag(tag, closure): - return "[+ FOR ." + tag + " +]" + closure() + "[+ ENDFOR +]" - -def collect_values(tag, prefix=""): - return for_tag(tag, lambda: prefix + "[+ ." + tag + " +] ") - -def each_group(platform, suffix, closure): - r = None - for group in RMAP[platform]: - if r == None: - r = "[+ IF ." + group + suffix + " +]" - else: - r += "[+ ELIF ." + group + suffix + " +]" - - r += closure(group) - - if r: - r += "[+ ELSE +]" - r += closure(None) - r += "[+ ENDIF +]" +def rule(target, source, cmd): + if cmd[0] == "\n": + return "\n" + target + ": " + source + cmd.replace("\n", "\n\t") + "\n" else: - r = closure(None) + return "\n" + target + ": " + source + "\n\t" + cmd.replace("\n", "\n\t") + "\n" +def if_platform_tagged(platform, tag, closure, c2=None): + r = "" + r += "[+ IF " + tag + " defined +]" + r += "[+ FOR " + tag + " +][+ CASE " + tag + " +]" + for group in RMAP[platform]: + r += "[+ = \"" + group + "\" +]" + closure() + r += "[+ ESAC +][+ ENDFOR +]" + + if c2 == None: + r += "[+ ENDIF +]" + return r + + r += "[+ ELSE +]" + c2() + "[+ ENDIF +]" return r +def platform_values(platform, group_tag, default_tag): + r = "" + for group in RMAP[platform]: + gtag = group + group_tag + + if group == RMAP[platform][0]: + r += "[+ IF " + gtag + " +]" + else: + r += "[+ ELIF " + gtag + " +]" + + r += "[+ FOR " + gtag + " +][+ ." + gtag + " +] [+ ENDFOR +]" + r += "[+ ELSE +][+ FOR " + default_tag + " +][+ ." + default_tag + " +] [+ ENDFOR +][+ ENDIF +]" + return r + +def under_conditional(x): + return "[+ IF condition +]\nif [+ condition +]\n[+ ENDIF +]" + x + "[+ IF condition +]\nendif\n[+ ENDIF +]" + def each_platform(closure): - r = "" + r = "[+ IF - enable undefined +]" for platform in GRUB_PLATFORMS: - for group in RMAP[platform]: - if group == RMAP[platform][0]: - r += "[+ IF ." + group + " defined +]" - else: - r += "[+ ELIF ." + group + " defined +]" + r += "\nif COND_" + platform + "\n" + closure(platform) + "endif\n" + r += "[+ ELSE +]" + for platform in GRUB_PLATFORMS: + x = "\nif COND_" + platform + "\n" + closure(platform) + "endif\n" + r += if_platform_tagged(platform, "enable", lambda: x) + r += "[+ ENDIF +]" + return r; - r += "if COND_" + platform + "\n" - r += closure(platform) - r += "endif\n" - r += "[+ ENDIF +]" - return r +def shared_sources(): return "[+ FOR shared +][+ .shared +] [+ ENDFOR +]" +def shared_nodist_sources(): return "[+ FOR nodist_shared +] [+ .nodist_shared +][+ ENDFOR +]" -def canonical_name(): return "[+ % name `echo -n %s | sed -e 's/[^0-9A-Za-z@_]/_/g'` +]" -def canonical_module(): return canonical_name() + "_module" -def canonical_kernel(): return canonical_name() + "_img" -def canonical_image(): return canonical_name() + "_image" +def platform_sources(p): return platform_values(p, "", "source") +def platform_nodist_sources(p): return platform_values(p, "_nodist", "nodist") +def platform_extra_dist(p): return platform_values(p, "_extra_dist", "extra_dist") -def shared_sources(prefix=""): return collect_values("shared", prefix) -def shared_nodist_sources(prefix=""): return collect_values("nodist_shared", prefix) - -def default_sources(prefix=""): return collect_values("source", prefix) -def default_nodist_sources(prefix=""): return collect_values("nodist", prefix) -def default_ldadd(): return collect_values("ldadd") -def default_cflags(): return collect_values("cflags") -def default_ldflags(): return collect_values("ldflags") -def default_cppflags(): return collect_values("cppflags") -def default_ccasflags(): return collect_values("ccasflags") -def default_extra_dist(): return collect_values("extra_dist") - -def group_sources(group, prefix=""): return collect_values(group, prefix) if group else default_sources(prefix) -def group_nodist_sources(group, prefix=""): return collect_values(group + "_nodist", prefix) if group else default_nodist_sources(prefix) - -def platform_sources(platform, prefix=""): return each_group(platform, "", lambda g: collect_values(g, prefix) if g else default_sources(prefix)) -def platform_nodist_sources(platform, prefix=""): return each_group(platform, "_nodist", lambda g: collect_values(g + "_nodist", prefix) if g else default_nodist_sources(prefix)) - -def platform_ldadd(platform): return each_group(platform, "_ldadd", lambda g: collect_values(g + "_ldadd") if g else default_ldadd()) -def platform_cflags(platform): return each_group(platform, "_cflags", lambda g: collect_values(g + "_cflags") if g else default_cflags()) -def platform_ldflags(platform): return each_group(platform, "_ldflags", lambda g: collect_values(g + "_ldflags") if g else default_ldflags()) -def platform_cppflags(platform): return each_group(platform, "_cppflags", lambda g: collect_values(g + "_cppflags") if g else default_cppflags()) -def platform_ccasflags(platform): return each_group(platform, "_ccasflags", lambda g: collect_values(g + "_ccasflags") if g else default_ccasflags()) -def platform_extra_dist(platform): return each_group(platform, "_extra_dist", lambda g: collect_values(g + "_extra_dist") if g else default_extra_dist()) -def platform_format(platform): return each_group(platform, "_format", lambda g: collect_values(g + "_format") if g else "binary") +def platform_ldadd(p): return platform_values(p, "_ldadd", "ldadd") +def platform_cflags(p): return platform_values(p, "_cflags", "cflags") +def platform_ldflags(p): return platform_values(p, "_ldflags", "ldflags") +def platform_cppflags(p): return platform_values(p, "_cppflags", "cppflags") +def platform_ccasflags(p): return platform_values(p, "_ccasflags", "ccasflags") +def platform_stripflags(p): return platform_values(p, "_stripflags", "stripflags") +def platform_objcopyflags(p): return platform_values(p, "_objcopyflags", "objcopyflags") def module(platform): - r = gvar_add("noinst_PROGRAMS", "[+ name +].module") + r = set_canonical_name_suffix(".module") + + r += gvar_add("noinst_PROGRAMS", "[+ name +].module") r += gvar_add("MODULE_FILES", "[+ name +].module$(EXEEXT)") - r += var_set(canonical_module() + "_SOURCES", platform_sources(platform) + "## platform sources") - r += var_add(canonical_module() + "_SOURCES", shared_sources() + "## shared sources") - r += var_set("nodist_" + canonical_module() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") - r += var_add("nodist_" + canonical_module() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") - r += var_set(canonical_module() + "_LDADD", platform_ldadd(platform)) - r += var_set(canonical_module() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_MODULE) " + platform_cflags(platform)) - r += var_set(canonical_module() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_MODULE) " + platform_ldflags(platform)) - r += var_set(canonical_module() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_MODULE) " + platform_cppflags(platform)) - r += var_set(canonical_module() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(platform)) + r += var_set(cname() + "_SOURCES", platform_sources(platform) + " ## platform sources") + r += var_add(cname() + "_SOURCES", shared_sources() + " ## shared sources") + r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + " ## platform nodist sources") + r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + " ## shared nodist sources") + r += var_set(cname() + "_LDADD", platform_ldadd(platform)) + r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_MODULE) " + platform_cflags(platform)) + r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_MODULE) " + platform_ldflags(platform)) + r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_MODULE) " + platform_cppflags(platform)) + r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) - r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_module() + "_SOURCES)") - r += gvar_add("CLEANFILES", "$(nodist_" + canonical_module() + "_SOURCES)") + r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("DEF_FILES", "def-[+ name +].lst") r += gvar_add("UND_FILES", "und-[+ name +].lst") @@ -189,8 +180,8 @@ def module(platform): r += gvar_add("CLEANFILES", "[+ name +].pp") r += """ -[+ name +].pp: $(""" + canonical_module() + """_SOURCES) $(nodist_""" + canonical_module() + """_SOURCES) - $(TARGET_CPP) -DGRUB_LST_GENERATOR $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + canonical_module() + """_CPPFLAGS) $(CPPFLAGS) $^ > $@ || (rm -f $@; exit 1) +[+ name +].pp: $(""" + cname() + """_SOURCES) $(nodist_""" + cname() + """_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname() + """_CPPFLAGS) $(CPPFLAGS) $^ > $@ || (rm -f $@; exit 1) def-[+ name +].lst: [+ name +].module$(EXEEXT) if test x$(USE_APPLE_CC_FIXES) = xyes; then \ @@ -242,64 +233,47 @@ terminal-[+ name +].lst: [+ name +].pp $(top_srcdir)/genterminallist.sh """ return r -def rule(target, source, cmd): - if cmd[0] == "\n": - return "\n" + target + ": " + source + cmd.replace("\n", "\n\t") + "\n" - else: - return "\n" + target + ": " + source + "\n\t" + cmd.replace("\n", "\n\t") + "\n" - -def image_nostrip(platform): - return if_tag_defined("image_nostrip." + platform, lambda: rule("[+ name +].img", "[+ name +].exec", "cp $< $@")) - -def image_strip(platform): - return if_tag_defined("image_strip." + platform, lambda: rule("[+ name +].img", "[+ name +].exec", "$(STRIP) -o $@ -R .rel.dyn -R .reginfo -R .note -R .comment $<")) - -def image_strip_keep_kernel(platform): - return if_tag_defined("image_strip_keep_kernel." + platform, lambda: rule("[+ name +].img", "[+ name +].exec", "$(STRIP) -o $@ --strip-unneeded -K start -R .note -R .comment $<")) - -def image_strip_macho2img(platform): - return if_tag_defined("image_strip_macho2img." + platform, lambda: rule("[+ name +].img", "[+ name +].exec", """ -if test "x$(TARGET_APPLE_CC)" = x1; then \ - $(MACHO2IMG) --bss $< $@ || exit 1; \ -else \ - $(STRIP) -o $@ -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< || exit 1; \ -fi -""")) - def kernel(platform): - r = gvar_add("noinst_PROGRAMS", "[+ name +].img") - r += var_set(canonical_kernel() + "_SOURCES", platform_sources(platform)) - r += var_add(canonical_kernel() + "_SOURCES", shared_sources()) - r += var_set("nodist_" + canonical_kernel() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") - r += var_add("nodist_" + canonical_kernel() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") - r += var_set(canonical_kernel() + "_LDADD", platform_ldadd(platform)) - r += var_set(canonical_kernel() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_KERNEL) " + platform_cflags(platform)) - r += var_set(canonical_kernel() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_KERNEL) " + platform_ldflags(platform)) - r += var_set(canonical_kernel() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) " + platform_cppflags(platform)) - r += var_set(canonical_kernel() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) " + platform_ccasflags(platform)) + r = set_canonical_name_suffix(".exec") + r += gvar_add("noinst_PROGRAMS", "[+ name +].exec") + r += var_set(cname() + "_SOURCES", platform_sources(platform)) + r += var_add(cname() + "_SOURCES", shared_sources()) + r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + " ## platform nodist sources") + r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + " ## shared nodist sources") + r += var_set(cname() + "_LDADD", platform_ldadd(platform)) + r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_KERNEL) " + platform_cflags(platform)) + r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_KERNEL) " + platform_ldflags(platform)) + r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) " + platform_cppflags(platform)) + r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) " + platform_ccasflags(platform)) + r += var_set(cname() + "_STRIPFLAGS", "$(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) " + platform_stripflags(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) - r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_kernel() + "_SOURCES)") - r += gvar_add("CLEANFILES", "$(nodist_" + canonical_kernel() + "_SOURCES)") + r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("platform_DATA", "[+ name +].img") + r += gvar_add("CLEANFILES", "[+ name +].img") + r += rule("[+ name +].img", "[+ name +].exec$(EXEEXT)", + if_platform_tagged(platform, "nostrip", lambda: "cp $@ $<", + lambda: "$(STRIP) $(" + cname() + "_STRIPFLAGS) -o $@ $<")) return r def image(platform): - r = gvar_add("noinst_PROGRAMS", "[+ name +].image") - r += var_set(canonical_image() + "_SOURCES", platform_sources(platform)) - r += var_add(canonical_image() + "_SOURCES", shared_sources()) - r += var_set("nodist_" + canonical_image() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") - r += var_add("nodist_" + canonical_image() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") - r += var_set(canonical_image() + "_LDADD", platform_ldadd(platform)) - r += var_set(canonical_image() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_IMAGE) " + platform_cflags(platform)) - r += var_set(canonical_image() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_IMAGE) " + platform_ldflags(platform)) - r += var_set(canonical_image() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) " + platform_cppflags(platform)) - r += var_set(canonical_image() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) " + platform_ccasflags(platform)) + r = set_canonical_name_suffix(".image") + r += gvar_add("noinst_PROGRAMS", "[+ name +].image") + r += var_set(cname() + "_SOURCES", platform_sources(platform)) + r += var_add(cname() + "_SOURCES", shared_sources()) + r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") + r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") + r += var_set(cname() + "_LDADD", platform_ldadd(platform)) + r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_IMAGE) " + platform_cflags(platform)) + r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_IMAGE) " + platform_ldflags(platform)) + r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) " + platform_cppflags(platform)) + r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) " + platform_ccasflags(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) - r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_image() + "_SOURCES)") - r += gvar_add("CLEANFILES", "$(nodist_" + canonical_image() + "_SOURCES)") + r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("platform_DATA", "[+ name +].img") r += gvar_add("CLEANFILES", "[+ name +].img") @@ -307,24 +281,25 @@ def image(platform): if test x$(USE_APPLE_CC_FIXES) = xyes; then \ $(MACHO2IMG) $< $@; \ else \ - $(OBJCOPY) -O """ + platform_format(platform) + """ --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; \ + $(OBJCOPY) """ + platform_objcopyflags(platform) + """ --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; \ fi """) return r def library(platform): - r = gvar_add("noinst_LIBRARIES", "[+ name +]") - r += var_set(canonical_name() + "_SOURCES", platform_sources(platform)) - r += var_add(canonical_name() + "_SOURCES", shared_sources()) - r += var_set("nodist_" + canonical_name() + "_SOURCES", platform_nodist_sources(platform)) - r += var_add("nodist_" + canonical_name() + "_SOURCES", shared_nodist_sources()) - r += var_set(canonical_name() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_LIBRARY) " + platform_cflags(platform)) - r += var_set(canonical_name() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) " + platform_cppflags(platform)) - r += var_set(canonical_name() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) " + platform_ccasflags(platform)) + r = set_canonical_name_suffix("") + r += gvar_add("noinst_LIBRARIES", "[+ name +]") + r += var_set(cname() + "_SOURCES", platform_sources(platform)) + r += var_add(cname() + "_SOURCES", shared_sources()) + r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform)) + r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources()) + r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_LIBRARY) " + platform_cflags(platform)) + r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) " + platform_cppflags(platform)) + r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) " + platform_ccasflags(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) - r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_name() + "_SOURCES)") - r += gvar_add("CLEANFILES", "$(nodist_" + canonical_name() + "_SOURCES)") + r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") return r @@ -344,46 +319,45 @@ PATH=$(builddir):$$PATH $(HELP2MAN) --section=[+ mansection +] -i $(top_srcdir)/ return r def program(platform, test=False): - if test: - r = gvar_add("check_PROGRAMS", "[+ name +]") - else: - r = gvar_add(installdir() + "_PROGRAMS", "[+ name +]") + r = set_canonical_name_suffix("") - r += var_set(canonical_name() + "_SOURCES", platform_sources(platform)) - r += var_add(canonical_name() + "_SOURCES", shared_sources()) - r += var_set("nodist_" + canonical_name() + "_SOURCES", platform_nodist_sources(platform)) - r += var_add("nodist_" + canonical_name() + "_SOURCES", shared_nodist_sources()) - r += var_set(canonical_name() + "_LDADD", platform_ldadd(platform)) - r += var_set(canonical_name() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_PROGRAM) " + platform_cflags(platform)) - r += var_set(canonical_name() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_PROGRAM) " + platform_ldflags(platform)) - r += var_set(canonical_name() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) " + platform_cppflags(platform)) - r += var_set(canonical_name() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(platform)) + r += "[+ IF testcase defined +]" + r += gvar_add("check_PROGRAMS", "[+ name +]") + r += gvar_add("TESTS", "[+ name +]") + r += "[+ ELSE +]" + r += gvar_add(installdir() + "_PROGRAMS", "[+ name +]") + r += "[+ IF mansection +]" + manpage() + "[+ ENDIF +]" + r += "[+ ENDIF +]" + + r += var_set(cname() + "_SOURCES", platform_sources(platform)) + r += var_add(cname() + "_SOURCES", shared_sources()) + r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform)) + r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources()) + r += var_set(cname() + "_LDADD", platform_ldadd(platform)) + r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_PROGRAM) " + platform_cflags(platform)) + r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_PROGRAM) " + platform_ldflags(platform)) + r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) " + platform_cppflags(platform)) + r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) - r += gvar_add("BUILT_SOURCES", "$(nodist_" + canonical_name() + "_SOURCES)") - r += gvar_add("CLEANFILES", "$(nodist_" + canonical_name() + "_SOURCES)") - - if test: - r += if_tag_defined("enable", lambda: gvar_add("TESTS", "[+ name +]")) - else: - r += if_tag("mansection", lambda: manpage()) - + r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") + r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") return r -def test_program(platform): - return program(platform, True) - def data(platform): r = gvar_add("EXTRA_DIST", platform_sources(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add(installdir() + "_DATA", platform_sources(platform)) return r -def script(platform, test=False): - if test: - r = gvar_add("check_SCRIPTS", "[+ name +]") - else: - r = gvar_add(installdir() + "_SCRIPTS", "[+ name +]") +def script(platform): + r = "[+ IF testcase defined +]" + r += gvar_add("check_SCRIPTS", "[+ name +]") + r += gvar_add ("TESTS", "[+ name +]") + r += "[+ ELSE +]" + r += gvar_add(installdir() + "_SCRIPTS", "[+ name +]") + r += "[+ IF mansection +]" + manpage() + "[+ ENDIF +]" + r += "[+ ENDIF +]" r += rule("[+ name +]", "$(top_builddir)/config.status " + platform_sources(platform), """ $(top_builddir)/config.status --file=-:""" + platform_sources(platform) + """ \ @@ -393,46 +367,28 @@ chmod a+x [+ name +] r += gvar_add("CLEANFILES", "[+ name +]") r += gvar_add("EXTRA_DIST", platform_sources(platform)) - - if test: - r += if_tag_defined("enable", lambda: gvar_add("TESTS", "[+ name +]")) - else: - r += if_tag("mansection", lambda: manpage()) - return r -def test_script(platform): - return script(platform, True) - -def with_enable_condition(x): - return "[+ IF enable +]if [+ enable +]\n" + x + "endif\n[+ ELSE +]" + x + "[+ ENDIF +]" - def module_rules(): - return for_tag("module", lambda: with_enable_condition(each_platform(lambda p: module(p)))) + return "[+ FOR module +]" + under_conditional(each_platform(lambda p: module(p))) + "[+ ENDFOR +]" def kernel_rules(): - return for_tag("kernel", lambda: with_enable_condition(each_platform(lambda p: kernel(p)))) + return "[+ FOR kernel +]" + under_conditional(each_platform(lambda p: kernel(p))) + "[+ ENDFOR +]" def image_rules(): - return for_tag("image", lambda: with_enable_condition(each_platform(lambda p: image(p)))) + return "[+ FOR image +]" + under_conditional(each_platform(lambda p: image(p))) + "[+ ENDFOR +]" def library_rules(): - return for_tag("library", lambda: with_enable_condition(each_platform(lambda p: library(p)))) + return "[+ FOR library +]" + under_conditional(each_platform(lambda p: library(p))) + "[+ ENDFOR +]" def program_rules(): - return for_tag("program", lambda: with_enable_condition(each_platform(lambda p: program(p)))) + return "[+ FOR program +]" + under_conditional(each_platform(lambda p: program(p))) + "[+ ENDFOR +]" def script_rules(): - return for_tag("script", lambda: with_enable_condition(each_platform(lambda p: script(p)))) + return "[+ FOR script +]" + under_conditional(each_platform(lambda p: script(p))) + "[+ ENDFOR +]" def data_rules(): - return for_tag("data", lambda: with_enable_condition(each_platform(lambda p: data(p)))) - -def test_program_rules(): - return for_tag("test_program", lambda: with_enable_condition(each_platform(lambda p: test_program(p)))) - -def test_script_rules(): - return for_tag("test_script", lambda: with_enable_condition(each_platform(lambda p: test_script(p)))) + return "[+ FOR data +]" + under_conditional(each_platform(lambda p: data(p))) + "[+ ENDFOR +]" print "[+ AutoGen5 template +]\n" a = module_rules() @@ -442,11 +398,9 @@ d = library_rules() e = program_rules() f = script_rules() g = data_rules() -h = test_program_rules() -i = test_script_rules() z = global_variable_initializers() -print z # initializer for all vars +# print z # initializer for all vars print a print b print c @@ -454,8 +408,6 @@ print d print e print f print g -print h -print i print """.PRECIOUS: modules.am $(srcdir)/modules.am: $(srcdir)/modules.def $(top_srcdir)/Makefile.tpl diff --git a/grub-core/configure.ac b/grub-core/configure.ac index 7c3175fea..5ba5962a3 100644 --- a/grub-core/configure.ac +++ b/grub-core/configure.ac @@ -33,6 +33,8 @@ dnl package (in grub-core directory) builds with TARGETCC. AC_INIT([GRUB],[1.98],[bug-grub@gnu.org]) AC_CONFIG_AUX_DIR([.]) +: ${CFLAGS=""} # We don't want -g -O2 + # Checks for host and target systems. AC_CANONICAL_HOST AC_CANONICAL_TARGET diff --git a/grub-core/modules.def b/grub-core/modules.def index 08eb6e4ea..b63c70922 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -3,8 +3,9 @@ AutoGen definitions Makefile.tpl; kernel = { name = kernel; - emu_ldflags = '-Wl,-r'; - x86_efi_ldflags = '-Wl,-r'; + emu_ldflags = '-Wl,-r,-d'; + x86_efi_ldflags = '-Wl,-r,-d'; + x86_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment'; i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_KERNEL_MACHINE_LINK_ADDR)'; @@ -246,7 +247,7 @@ program = { ldadd = '$(MODULE_FILES)'; ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS)'; - emu; + enable = emu; }; program = { @@ -259,7 +260,7 @@ program = { ldadd = 'kernel.img$(EXEEXT)'; ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS)'; - emu; + enable = emu; }; image = { @@ -275,8 +276,13 @@ image = { i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S; - sparc64_ieee1275_format = a.out-sunos-big; + sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big'; sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000'; + + objcopyflags = '-O binary'; + enable = i386_pc; + enable = i386_qemu; + enable = sparc64_ieee1275; }; image = { @@ -284,6 +290,8 @@ image = { i386_pc = boot/i386/pc/cdboot.S; i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; + objcopyflags = '-O binary'; + enable = i386_pc; }; image = { @@ -292,6 +300,9 @@ image = { i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; + + objcopyflags = '-O binary'; + enable = i386_pc; }; image = { @@ -303,6 +314,11 @@ image = { sparc64_ieee1275 = boot/sparc64/ieee1275/diskboot.S; sparc64_ieee1275_ldflags = '-Wl,-Ttext=0x4200'; + + objcopyflags = '-O binary'; + + enable = i386_pc; + enable = sparc64_ieee1275; }; image = { @@ -311,44 +327,49 @@ image = { i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x6000'; + + objcopyflags = '-O binary'; + enable = i386_pc; }; image = { name = fwstart; mips_yeeloong = boot/mips/yeeloong/fwstart.S; + objcopyflags = '-O binary'; + enable = mips_yeeloong; }; module = { name = trig; nodist = trigtables.c; extra_dist = gentrigtables.c; - common; }; module = { name = cs5536; source = bus/cs5536.c; - i386; + enable = i386; }; module = { name = libusb; source = bus/usb/emu/usb.c; - emu; - enable = COND_GRUB_EMU_USB; + enable = emu; + condition = COND_GRUB_EMU_USB; }; module = { name = lsspd; mips_yeeloong = commands/mips/yeeloong/lsspd.c; + enable = mips_yeeloong; }; module = { name = pci; source = bus/emu/pci.c; source = commands/lspci.c; - emu; - enable = COND_GRUB_EMU_PCI; + enable = emu; + condition = COND_GRUB_EMU_PCI; }; module = { @@ -356,37 +377,37 @@ module = { source = bus/usb/usb.c; source = bus/usb/usbtrans.c; source = bus/usb/usbhub.c; - i386; - mips_yeeloong; + enable = i386; + enable = mips_yeeloong; }; module = { name = usb; source = bus/usb/usb.c; - emu; - enable = COND_GRUB_EMU_USB; + enable = emu; + condition = COND_GRUB_EMU_USB; }; module = { name = uhci; source = bus/usb/uhci.c; - x86; + enable = x86; }; module = { name = ohci; source = bus/usb/ohci.c; - x86; - mips_yeeloong; + enable = x86; + enable = mips_yeeloong; }; module = { name = pci; source = bus/pci.c; - i386_pc; - i386_efi; - i386_ieee1275; - i386_coreboot; + enable = i386_pc; + enable = i386_efi; + enable = i386_ieee1275; + enable = i386_coreboot; }; library = { @@ -400,13 +421,12 @@ library = { cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; - common; }; module = { name = iorw; source = commands/iorw.c; - i386; + enable = i386; }; module = { @@ -415,7 +435,6 @@ module = { ldadd = libgnulib.a; cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; - common; }; module = { @@ -426,16 +445,17 @@ module = { i386_pc = commands/acpi.c; i386_pc = commands/i386/pc/acpi.c; + + enable = x86_efi; + enable = i386_pc; }; module = { - common; name = blocklist; source = commands/blocklist.c; }; module = { - common; name = boot; source = commands/boot.c; @@ -444,19 +464,16 @@ module = { }; module = { - common; name = cat; source = commands/cat.c; }; module = { - common; name = cmp; source = commands/cmp.c; }; module = { - common; name = configfile; source = commands/configfile.c; }; @@ -465,23 +482,18 @@ module = { name = cpuid; source = commands/i386/cpuid.c; - x86; + enable = x86; }; module = { - common; name = crc; source = commands/crc.c; source = lib/crc.c; }; module = { - common; name = date; source = commands/date.c; - - x86; - mips; }; module = { @@ -489,16 +501,15 @@ module = { i386_pc = commands/i386/pc/drivemap.c; i386_pc = commands/i386/pc/drivemap_int13h.S; + enable = i386_pc; }; module = { - common; name = echo; source = commands/echo.c; }; module = { - common; name = extcmd; source = commands/extcmd.c; source = lib/arg.c; @@ -507,10 +518,10 @@ module = { module = { name = fixvideo; x86_efi = commands/efi/fixvideo.c; + enable = x86_efi; }; module = { - common; name = gptsync; source = commands/gptsync.c; }; @@ -520,15 +531,9 @@ module = { source = commands/halt.c; i386_pc = commands/i386/pc/halt.c; - emu; - x86; - sparc64; - powerpc; - mips_yeeloong; }; module = { - common; name = hashsum; source = commands/hashsum.c; }; @@ -538,24 +543,21 @@ module = { source = commands/hdparm.c; source = lib/hexdump.c; - i386_pc; + enable = i386_pc; }; module = { - common; name = help; source = commands/help.c; }; module = { - common; name = hexdump; source = commands/hexdump.c; source = lib/hexdump.c; }; module = { - common; name = keystatus; source = commands/keystatus.c; }; @@ -563,69 +565,62 @@ module = { module = { name = loadbios; x86_efi = commands/efi/loadbios.c; + enable = x86_efi; }; module = { - common; name = loadenv; source = commands/loadenv.c; source = lib/envblk.c; }; module = { - common; name = ls; source = commands/ls.c; }; module = { - common; name = lsmmap; source = commands/lsmmap.c; - i386_pc; - i386_qemu; - i386_coreboot; - i386_multiboot; - i386_ieee1275; - mips_yeeloong; - powerpc_ieee1275; + enable = i386_pc; + enable = i386_qemu; + enable = i386_coreboot; + enable = i386_multiboot; + enable = i386_ieee1275; + enable = mips_yeeloong; + enable = powerpc_ieee1275; }; module = { name = lspci; source = commands/lspci.c; - x86; - mips; + enable = x86; + enable = mips; }; module = { - common; name = memrw; source = commands/memrw.c; }; module = { - common; name = minicmd; source = commands/minicmd.c; }; module = { - common; name = parttool; source = commands/parttool.c; }; module = { - common; name = password; source = commands/password.c; }; module = { - common; name = password_pbkdf2; source = commands/password_pbkdf2.c; }; @@ -633,11 +628,10 @@ module = { module = { name = play; source = commands/i386/pc/play.c; - i386; + enable = i386; }; module = { - common; name = probe; source = commands/probe.c; }; @@ -645,43 +639,36 @@ module = { module = { name = pxecmd; i386_pc = commands/i386/pc/pxecmd.c; + enable = i386_pc; }; module = { - common; name = read; source = commands/read.c; }; module = { - common; name = reboot; source = commands/reboot.c; - - x86; powerpc; sparc64; }; module = { - common; name = search; source = commands/search_wrap.c; extra_dist = commands/search.c; }; module = { - common; name = search_fs_file; source = commands/search_file.c; }; module = { - common; name = search_fs_uuid; source = commands/search_uuid.c; }; module = { - common; name = search_label; source = commands/search_label.c; }; @@ -690,11 +677,10 @@ module = { name = setpci; source = commands/setpci.c; - x86; + enable = x86; }; module = { - common; name = sleep; source = commands/sleep.c; }; @@ -702,24 +688,21 @@ module = { module = { name = suspend; source = commands/ieee1275/suspend.c; - i386_ieee1275; - powerpc_ieee1275; + enable = i386_ieee1275; + enable = powerpc_ieee1275; }; module = { - common; name = terminal; source = commands/terminal.c; }; module = { - common; name = test; source = commands/test.c; }; module = { - common; name = true; source = commands/true.c; }; @@ -727,89 +710,80 @@ module = { module = { name = usbtest; source = commands/usbtest.c; - i386_pc; - mips_yeeloong; + enable = i386_pc; + enable = mips_yeeloong; }; module = { name = usbtest; source = commands/usbtest.c; - emu; - enable = COND_GRUB_EMU_USB; + enable = emu; + condition = COND_GRUB_EMU_USB; }; module = { name = vbeinfo; i386_pc = commands/i386/pc/vbeinfo.c; + enable = i386_pc; }; module = { name = vbetest; i386_pc = commands/i386/pc/vbetest.c; + enable = i386_pc; }; module = { - common; name = videotest; source = commands/videotest.c; }; module = { - common; name = xnu_uuid; source = commands/xnu_uuid.c; }; module = { - common; name = dm_nv; source = disk/dmraid_nvidia.c; }; module = { - common; name = loopback; source = disk/loopback.c; }; module = { - common; name = lvm; source = disk/lvm.c; }; module = { - common; name = mdraid; source = disk/mdraid_linux.c; }; module = { - common; name = raid; source = disk/raid.c; }; module = { - common; name = raid5rec; source = disk/raid5_recover.c; }; module = { - common; name = raid6rec; source = disk/raid6_recover.c; }; module = { - common; name = scsi; source = disk/scsi.c; }; module = { - common; name = memdisk; source = disk/memdisk.c; }; @@ -818,42 +792,43 @@ module = { name = ata; source = disk/ata.c; - x86; - mips; + enable = x86; + enable = mips; }; module = { name = ata_pthru; source = disk/ata_pthru.c; - x86; - mips_yeeloong; + enable = x86; + enable = mips_yeeloong; }; module = { name = biosdisk; i386_pc = disk/i386/pc/biosdisk.c; + enable = i386_pc; }; module = { name = usbms; source = disk/usbms.c; - i386_pc; - mips_yeeloong; + enable = i386_pc; + enable = mips_yeeloong; }; module = { name = usbms; source = disk/usbms.c; - emu; - enable = COND_GRUB_EMU_USB; + enable = emu; + condition = COND_GRUB_EMU_USB; }; module = { name = nand; source = disk/ieee1275/nand.c; - i386_ieee1275; + enable = i386_ieee1275; }; module = { @@ -876,158 +851,136 @@ module = { extra_dist = efiemu/loadcore.c; extra_dist = efiemu/runtime/efiemu.S; extra_dist = efiemu/runtime/efiemu.c; + + enable = i386_pc; }; module = { name = font; source = font/font.c; source = font/font_cmd.c; - emu; - x86; - sparc64; - powerpc; + enable = emu; + enable = x86; + enable = sparc64; + enable = powerpc; }; module = { - common; name = affs; source = fs/affs.c; }; module = { - common; name = afs; source = fs/afs.c; }; module = { - common; name = afs_be; source = fs/afs_be.c; }; module = { - common; name = befs; source = fs/befs.c; }; module = { - common; name = befs_be; source = fs/befs_be.c; }; module = { - common; name = cpio; source = fs/cpio.c; }; module = { - common; name = ext2; source = fs/ext2.c; }; module = { - common; name = fat; source = fs/fat.c; }; module = { - common; name = fshelp; source = fs/fshelp.c; }; module = { - common; name = hfs; source = fs/hfs.c; }; module = { - common; name = hfsplus; source = fs/hfsplus.c; }; module = { - common; name = iso9660; source = fs/iso9660.c; }; module = { - common; name = jfs; source = fs/jfs.c; }; module = { - common; name = minix; source = fs/minix.c; }; module = { - common; name = nilfs2; source = fs/nilfs2.c; }; module = { - common; name = ntfs; source = fs/ntfs.c; }; module = { - common; name = ntfscomp; source = fs/ntfscomp.c; }; module = { - common; name = reiserfs; source = fs/reiserfs.c; }; module = { - common; name = sfs; source = fs/sfs.c; }; module = { - common; name = tar; source = fs/tar.c; }; module = { - common; name = udf; source = fs/udf.c; }; module = { - common; name = ufs1; source = fs/ufs.c; }; module = { - common; name = ufs2; source = fs/ufs2.c; }; module = { - common; name = xfs; source = fs/xfs.c; }; @@ -1035,16 +988,15 @@ module = { module = { name = pxe; i386_pc = fs/i386/pc/pxe.c; + enable = i386_pc; }; module = { name = gettext; source = gettext/gettext.c; - common; }; module = { - common; name = gfxmenu; source = gfxmenu/gfxmenu.c; source = gfxmenu/model.c; @@ -1066,13 +1018,11 @@ module = { }; module = { - common; name = hello; source = hello/hello.c; }; module = { - common; name = gzio; source = io/gzio.c; }; @@ -1080,20 +1030,18 @@ module = { module = { name = bufio; source = io/bufio.c; - emu; - x86; - sparc64; - powerpc; + enable = emu; + enable = x86; + enable = sparc64; + enable = powerpc; }; module = { - common; name = elf; source = kern/elf.c; }; module = { - common; name = crypto; source = lib/crypto.c; @@ -1101,7 +1049,6 @@ module = { }; module = { - common; name = gcry_arcfour; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1109,7 +1056,6 @@ module = { }; module = { - common; name = gcry_blowfish; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1117,7 +1063,6 @@ module = { }; module = { - common; name = gcry_camellia; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1126,7 +1071,6 @@ module = { }; module = { - common; name = gcry_cast5; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1134,7 +1078,6 @@ module = { }; module = { - common; name = gcry_crc; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1142,7 +1085,6 @@ module = { }; module = { - common; name = gcry_des; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1150,7 +1092,6 @@ module = { }; module = { - common; name = gcry_md4; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1158,7 +1099,6 @@ module = { }; module = { - common; name = gcry_md5; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1166,7 +1106,6 @@ module = { }; module = { - common; name = gcry_rfc2268; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1174,7 +1113,6 @@ module = { }; module = { - common; name = gcry_rijndael; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1182,7 +1120,6 @@ module = { }; module = { - common; name = gcry_rmd160; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1190,7 +1127,6 @@ module = { }; module = { - common; name = gcry_seed; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1198,7 +1134,6 @@ module = { }; module = { - common; name = gcry_serpent; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1206,7 +1141,6 @@ module = { }; module = { - common; name = gcry_sha1; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1214,7 +1148,6 @@ module = { }; module = { - common; name = gcry_sha256; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1222,7 +1155,6 @@ module = { }; module = { - common; name = gcry_sha512; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1230,7 +1162,6 @@ module = { }; module = { - common; name = gcry_tiger; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1238,7 +1169,6 @@ module = { }; module = { - common; name = gcry_twofish; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1246,7 +1176,6 @@ module = { }; module = { - common; name = gcry_whirlpool; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; @@ -1254,7 +1183,6 @@ module = { }; module = { - common; name = pbkdf2; source = lib/pbkdf2.c; }; @@ -1267,6 +1195,8 @@ module = { x86 = lib/i386/relocator_asm.S; x86 = lib/i386/relocator_backward.S; extra_dist = lib/relocator.c; + enable = mips; + enable = x86; }; module = { @@ -1275,8 +1205,10 @@ module = { x86_efi = lib/efi/datetime.c; sparc64_ieee1275 = lib/ieee1275/datetime.c; powerpc_ieee1275 = lib/ieee1275/datetime.c; - x86; - mips; + enable = x86; + enable = mips; + enable = sparc64_ieee1275; + enable = powerpc_ieee1275; }; module = { @@ -1291,11 +1223,11 @@ module = { module = { name = aout; source = loader/aout.c; - i386_pc; - i386_qemu; - i386_coreboot; - i386_multiboot; - i386_ieee1275; + enable = i386_pc; + enable = i386_qemu; + enable = i386_coreboot; + enable = i386_multiboot; + enable = i386_ieee1275; }; module = { @@ -1309,16 +1241,16 @@ module = { extra_dist = loader/i386/bsdXX.c; extra_dist = loader/i386/bsd_pagetable.c; - i386_pc; - i386_qemu; - i386_coreboot; - i386_multiboot; + enable = i386_pc; + enable = i386_qemu; + enable = i386_coreboot; + enable = i386_multiboot; }; module = { name = linux16; source = loader/i386/pc/linux.c; - i386_pc; + enable = i386_pc; }; module = { @@ -1327,8 +1259,8 @@ module = { source = loader/multiboot.c; source = loader/multiboot_mbi2.c; - x86; - mips; + enable = x86; + enable = mips; }; module = { @@ -1336,7 +1268,7 @@ module = { source = loader/multiboot.c; source = loader/i386/multiboot_mbi.c; extra_dist = loader/multiboot_elfxx.c; - x86; + enable = x86; }; module = { @@ -1349,6 +1281,7 @@ module = { mips = loader/mips/linux.c; powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c; sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c; + enable = nonemu; }; module = { @@ -1368,17 +1301,22 @@ module = { i386_pc = loader/xnu.c; extra_dist = loader/machoXX.c; + enable = i386_pc; + enable = x86_efi; }; module = { name = appleldr; x86_efi = loader/efi/appleloader.c; + enable = x86_efi; }; module = { name = chain; x86_efi = loader/efi/chainloader.c; i386_pc = loader/i386/pc/chainloader.c; + enable = i386_pc; + enable = x86_efi; }; module = { @@ -1412,10 +1350,12 @@ module = { mips_yeeloong = mmap/mmap.c; mips_yeeloong = mmap/mips/yeeloong/uppermem.c; + + enable = x86; + enable = mips_yeeloong; }; module = { - common; name = normal; source = normal/main.c; source = normal/cmdline.c; @@ -1454,55 +1394,46 @@ module = { }; module = { - common; name = part_acorn; source = partmap/acorn.c; }; module = { - common; name = part_amiga; source = partmap/amiga.c; }; module = { - common; name = part_apple; source = partmap/apple.c; }; module = { - common; name = part_gpt; source = partmap/gpt.c; }; module = { - common; name = part_msdos; source = partmap/msdos.c; }; module = { - common; name = part_sun; source = partmap/sun.c; }; module = { - common; name = part_bsd; source = partmap/bsdlabel.c; }; module = { - common; name = part_sunpc; source = partmap/sunpc.c; }; module = { - common; name = msdospart; source = parttool/msdospart.c; }; @@ -1510,26 +1441,25 @@ module = { module = { name = at_keyboard; source = term/at_keyboard.c; - x86; + enable = x86; }; module = { name = gfxterm; source = term/gfxterm.c; - emu; - x86; - sparc64; - powerpc; + enable = emu; + enable = x86; + enable = sparc64; + enable = powerpc; }; module = { name = serial; source = term/serial.c; - i386; + enable = i386; }; module = { - common; name = terminfo; source = term/terminfo.c; source = term/tparm.c; @@ -1538,87 +1468,88 @@ module = { module = { name = usb_keyboard; source = term/usb_keyboard.c; - i386_pc; - mips_yeeloong; + enable = i386_pc; + enable = mips_yeeloong; }; module = { name = vga; i386_pc = video/i386/pc/vga.c; + enable = i386_pc; }; module = { name = vga_text; x86 = term/i386/pc/vga_text.c; x86 = term/i386/vga_common.c; + enable = x86; }; module = { name = video_cirrus; i386 = video/cirrus.c; + enable = i386; }; module = { name = video_bochs; i386 = video/bochs.c; + enable = i386; }; module = { name = functional_test; source = tests/lib/functional_test.c; source = tests/lib/test.c; - common; }; module = { name = example_functional_test; source = tests/example_functional_test.c; cflags = -Wno-format; - common; }; module = { name = bitmap; source = video/bitmap.c; - emu; - x86; - sparc64; - powerpc; + enable = emu; + enable = x86; + enable = sparc64; + enable = powerpc; }; module = { name = bitmap_scale; source = video/bitmap_scale.c; - emu; - x86; - sparc64; - powerpc; + enable = emu; + enable = x86; + enable = sparc64; + enable = powerpc; }; module = { name = efi_gop; x86_efi = video/efi_gop.c; + enable = x86_efi; }; module = { name = efi_uga; x86_efi = video/efi_uga.c; + enable = x86_efi; }; module = { - common; name = jpeg; source = video/readers/jpeg.c; }; module = { - common; name = png; source = video/readers/png.c; }; module = { - common; name = tga; source = video/readers/tga.c; }; @@ -1626,6 +1557,7 @@ module = { module = { name = vbe; i386_pc = video/i386/pc/vbe.c; + enable = i386_pc; }; module = { @@ -1634,37 +1566,36 @@ module = { source = video/fb/fbblit.c; source = video/fb/fbfill.c; source = video/fb/fbutil.c; - emu; - x86; - sparc64; - powerpc; + enable = emu; + enable = x86; + enable = sparc64; + enable = powerpc; }; module = { name = video; source = video/video.c; - emu; - x86; - sparc64; - powerpc; + enable = emu; + enable = x86; + enable = sparc64; + enable = powerpc; }; module = { name = ieee1275_fb; source = video/ieee1275.c; - powerpc; - sparc64; + enable = powerpc; + enable = sparc64; }; module = { name = sdl; source = video/emu/sdl.c; - enable = COND_GRUB_EMU_SDL; - emu; + condition = COND_GRUB_EMU_SDL; + enable = emu; }; module = { name = datehook; source = hook/datehook.c; - common; }; diff --git a/modules.def b/modules.def index c8ce44cbe..23d7d14cd 100644 --- a/modules.def +++ b/modules.def @@ -90,7 +90,6 @@ library = { source = grub-core/script/lexer.c; source = grub-core/script/main.c; source = grub-core/script/script.c; - common; }; program = { @@ -99,7 +98,6 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; mansection = 1; - common; }; program = { @@ -114,7 +112,6 @@ program = { ldadd = '$(LIBINTL)'; cppflags = '-DGRUB_PKGLIBROOTDIR=\"$(pkglibrootdir)\"'; - common; }; program = { @@ -125,7 +122,6 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; - common; }; program = { @@ -136,7 +132,6 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; - common; }; program = { @@ -147,7 +142,6 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; - common; }; program = { @@ -160,13 +154,13 @@ program = { ldadd = '$(LIBINTL)'; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; - common; }; program = { name = grub-macho2img; mansection = 1; source = util/grub-macho2img.c; + condition = COND_APPLE_CC; }; program = { @@ -176,8 +170,7 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; - enable = COND_GRUB_PE2ELF; - common; + condition = COND_GRUB_PE2ELF; }; program = { @@ -187,8 +180,7 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; - enable = COND_GRUB_FSTEST; - common; + condition = COND_GRUB_FSTEST; }; program = { @@ -202,9 +194,7 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; ldadd = '$(freetype_libs)'; - - common; - enable = COND_GRUB_MKFONT; + condition = COND_GRUB_MKFONT; }; program = { @@ -223,7 +213,6 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; ldadd = '$(LIBUTIL)'; - common; }; program = { @@ -235,7 +224,6 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; ldadd = '$(LIBUTIL)'; - common; }; program = { @@ -254,6 +242,9 @@ program = { ldadd = libgrub.a; ldadd = '$(LIBINTL)'; ldadd = '$(LIBUTIL)'; + + enable = i386_pc; + enable = sparc64_ieee1275; }; program = { @@ -263,20 +254,18 @@ program = { source = util/ieee1275/ofpath.c; ldadd = libgrub.a; - sparc64_ieee1275; + enable = sparc64_ieee1275; }; data = { source = util/grub.d/README; installdir = grubconf; - common; }; script = { name = '00_header'; source = util/grub.d/00_header.in; installdir = grubconf; - common; }; script = { @@ -295,28 +284,24 @@ script = { name = '10_linux'; source = util/grub.d/10_linux.in; installdir = grubconf; - common; }; script = { name = '30_os-prober'; source = util/grub.d/30_os-prober.in; installdir = grubconf; - common; }; script = { name = '40_custom'; source = util/grub.d/40_custom.in; installdir = grubconf; - common; }; script = { name = '41_custom'; source = util/grub.d/41_custom.in; installdir = grubconf; - common; }; script = { @@ -324,9 +309,10 @@ script = { name = grub-mkrescue; source = util/grub-mkrescue.in; powerpc_ieee1275 = util/powerpc/ieee1275/grub-mkrescue.in; - i386_pc; - i386_qemu; - i386_coreboot; + enable = i386_pc; + enable = i386_qemu; + enable = i386_coreboot; + enable = powerpc_ieee1275; }; script = { @@ -337,10 +323,10 @@ script = { x86_efi = util/i386/efi/grub-install.in; i386_ieee1275 = util/ieee1275/grub-install.in; powerpc_ieee1275 = util/ieee1275/grub-install.in; - mips; - i386_pc; - i386_qemu; - i386_coreboot; + + enable = x86; + enable = mips; + enable = powerpc_ieee1275; }; script = { @@ -348,7 +334,6 @@ script = { source = util/grub-mkconfig.in; mansection = 8; installdir = sbin; - common; }; script = { @@ -356,7 +341,6 @@ script = { source = util/grub-set-default.in; mansection = 8; installdir = sbin; - common; }; script = { @@ -364,118 +348,104 @@ script = { source = util/grub-reboot.in; mansection = 8; installdir = sbin; - common; }; script = { name = grub-mkconfig_lib; source = util/grub-mkconfig_lib.in; installdir = pkglib; - common; }; script = { name = update-grub_lib; source = util/update-grub_lib.in; installdir = pkglib; - common; }; -test_script = { +script = { name = grub-shell; source = tests/util/grub-shell.in; - common; }; -test_script = { +script = { name = grub-shell-tester; source = tests/util/grub-shell-tester.in; - common; }; -test_script = { +script = { + testcase; name = example_scripted_test; source = tests/example_scripted_test.in; - common; }; -test_script = { +script = { + testcase; name = example_grub_script_test; source = tests/example_grub_script_test.in; - common; }; -test_script = { +script = { + testcase; name = grub_script_echo1; source = tests/grub_script_echo1.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_echo_keywords; source = tests/grub_script_echo_keywords.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_vars1; source = tests/grub_script_vars1.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_for1; source = tests/grub_script_for1.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_while1; source = tests/grub_script_while1.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_if; source = tests/grub_script_if.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_blanklines; source = tests/grub_script_blanklines.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_final_semicolon; source = tests/grub_script_final_semicolon.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_dollar; source = tests/grub_script_dollar.in; - common; - enable; }; -test_script = { +script = { + testcase; name = grub_script_comments; source = tests/grub_script_comments.in; - common; - enable; }; -test_program = { +program = { + testcase; name = example_unit_test; source = tests/example_unit_test.c; source = tests/lib/unit_test.c; @@ -484,5 +454,4 @@ test_program = { source = grub-core/tests/lib/test.c; cflags = -Wno-format; ldadd = libgrub.a; - common; }; From c1c6e4c0176baf20a4dc60296a1ac781bb93ab8b Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 13 Jul 2010 23:58:30 +0530 Subject: [PATCH 165/271] emu platform fixes --- gentpl.py | 2 +- grub-core/modules.def | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/gentpl.py b/gentpl.py index 5081cf483..a85dd3ed9 100644 --- a/gentpl.py +++ b/gentpl.py @@ -254,7 +254,7 @@ def kernel(platform): r += gvar_add("platform_DATA", "[+ name +].img") r += gvar_add("CLEANFILES", "[+ name +].img") r += rule("[+ name +].img", "[+ name +].exec$(EXEEXT)", - if_platform_tagged(platform, "nostrip", lambda: "cp $@ $<", + if_platform_tagged(platform, "nostrip", lambda: "cp $< $@", lambda: "$(STRIP) $(" + cname() + "_STRIPFLAGS) -o $@ $<")) return r diff --git a/grub-core/modules.def b/grub-core/modules.def index b63c70922..b2d57a6fd 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -3,6 +3,8 @@ AutoGen definitions Makefile.tpl; kernel = { name = kernel; + nostrip = emu; + emu_ldflags = '-Wl,-r,-d'; x86_efi_ldflags = '-Wl,-r,-d'; x86_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment'; @@ -1218,6 +1220,7 @@ module = { mips = lib/mips/setjmp.S; sparc64 = lib/sparc64/setjmp.S; powerpc = lib/powerpc/setjmp.S; + emu = 'lib/$(target_cpu)/setjmp.S'; }; module = { From d9b78bce4a1c8d9334712890fc44008197cd4b92 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 15 Jul 2010 02:02:01 +0530 Subject: [PATCH 166/271] more build fixes --- .bzrignore | 2 + autogen.sh | 3 ++ gentpl.py | 98 ++++++++++++++++++++++++++++--------------- grub-core/modules.def | 22 +++++----- 4 files changed, 81 insertions(+), 44 deletions(-) diff --git a/.bzrignore b/.bzrignore index a1835ce07..ac5e3f86d 100644 --- a/.bzrignore +++ b/.bzrignore @@ -105,6 +105,8 @@ grub-core/configure.common grub-core/depcomp grub-core/gentpl.py grub-core/conf/gcry.rmk +grub-core/docs +grub-core/docs/man grub-core/lib/libgcrypt-grub grub-core/include/grub/cpu grub-core/include/grub/machine diff --git a/autogen.sh b/autogen.sh index e41caa5f2..49cd1fca5 100755 --- a/autogen.sh +++ b/autogen.sh @@ -20,6 +20,9 @@ ln -svf ../config.rpath grub-core/ ln -svf ../gentpl.py grub-core/ ln -svf ../configure.common grub-core/ +mkdir -vp grub-core/docs/man +ln -svf ../../../docs/man/grub-emu.h2m grub-core/docs/man + echo "Creating Makefile.tpl..." python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl echo "Running autogen..." diff --git a/gentpl.py b/gentpl.py index a85dd3ed9..baaae51bc 100644 --- a/gentpl.py +++ b/gentpl.py @@ -83,38 +83,53 @@ def rule(target, source, cmd): else: return "\n" + target + ": " + source + "\n\t" + cmd.replace("\n", "\n\t") + "\n" -def if_platform_tagged(platform, tag, closure, c2=None): +# +# Template for keys with platform names as values, for example: +# +# kernel = { +# nostrip = emu; +# nostrip = i386_pc; +# } +# +def if_platform_tagged(platform, tag, snippet_if, snippet_else=None): r = "" r += "[+ IF " + tag + " defined +]" r += "[+ FOR " + tag + " +][+ CASE " + tag + " +]" for group in RMAP[platform]: - r += "[+ = \"" + group + "\" +]" + closure() + r += "[+ = \"" + group + "\" +]" + snippet_if + + if snippet_else != None: r += "[+ * +]" + snippet_if r += "[+ ESAC +][+ ENDFOR +]" - if c2 == None: + if snippet_else == None: r += "[+ ENDIF +]" return r - r += "[+ ELSE +]" + c2() + "[+ ENDIF +]" + r += "[+ ELSE +]" + snippet_else + "[+ ENDIF +]" return r -def platform_values(platform, group_tag, default_tag): +# +# Template for handling platform specific values, for example: +# +# module = { +# cflags = '-Wall'; +# emu_cflags = '-Wall -DGRUB_EMU=1'; +# } +# +def foreach_platform_value(platform, tag, suffix, closure): r = "" for group in RMAP[platform]: - gtag = group + group_tag + gtag = group + suffix if group == RMAP[platform][0]: r += "[+ IF " + gtag + " +]" else: r += "[+ ELIF " + gtag + " +]" - r += "[+ FOR " + gtag + " +][+ ." + gtag + " +] [+ ENDFOR +]" - r += "[+ ELSE +][+ FOR " + default_tag + " +][+ ." + default_tag + " +] [+ ENDFOR +][+ ENDIF +]" + r += "[+ FOR " + gtag + " +]" + closure("[+ ." + gtag + " +]") + "[+ ENDFOR +]" + r += "[+ ELSE +][+ FOR " + tag + " +]" + closure("[+ ." + tag + " +]") + "[+ ENDFOR +][+ ENDIF +]" return r -def under_conditional(x): - return "[+ IF condition +]\nif [+ condition +]\n[+ ENDIF +]" + x + "[+ IF condition +]\nendif\n[+ ENDIF +]" - def each_platform(closure): r = "[+ IF - enable undefined +]" for platform in GRUB_PLATFORMS: @@ -122,24 +137,33 @@ def each_platform(closure): r += "[+ ELSE +]" for platform in GRUB_PLATFORMS: x = "\nif COND_" + platform + "\n" + closure(platform) + "endif\n" - r += if_platform_tagged(platform, "enable", lambda: x) + r += if_platform_tagged(platform, "enable", x) r += "[+ ENDIF +]" - return r; + return r + +def under_platform_specific_conditionals(platform, snippet): + r = foreach_platform_value(platform, "condition", "_condition", lambda cond: "if " + cond + "\n") + r += snippet + r += foreach_platform_value(platform, "condition", "_condition", lambda cond: "endif " + cond + "\n") + return r + +def platform_specific_values(platform, tag, suffix): + return foreach_platform_value(platform, tag, suffix, lambda value: value + " ") def shared_sources(): return "[+ FOR shared +][+ .shared +] [+ ENDFOR +]" def shared_nodist_sources(): return "[+ FOR nodist_shared +] [+ .nodist_shared +][+ ENDFOR +]" -def platform_sources(p): return platform_values(p, "", "source") -def platform_nodist_sources(p): return platform_values(p, "_nodist", "nodist") -def platform_extra_dist(p): return platform_values(p, "_extra_dist", "extra_dist") +def platform_sources(p): return platform_specific_values(p, "source", "") +def platform_nodist_sources(p): return platform_specific_values(p, "nodist", "_nodist") +def platform_extra_dist(p): return platform_specific_values(p, "extra_dist", "_extra_dist") -def platform_ldadd(p): return platform_values(p, "_ldadd", "ldadd") -def platform_cflags(p): return platform_values(p, "_cflags", "cflags") -def platform_ldflags(p): return platform_values(p, "_ldflags", "ldflags") -def platform_cppflags(p): return platform_values(p, "_cppflags", "cppflags") -def platform_ccasflags(p): return platform_values(p, "_ccasflags", "ccasflags") -def platform_stripflags(p): return platform_values(p, "_stripflags", "stripflags") -def platform_objcopyflags(p): return platform_values(p, "_objcopyflags", "objcopyflags") +def platform_ldadd(p): return platform_specific_values(p, "ldadd", "_ldadd") +def platform_cflags(p): return platform_specific_values(p, "cflags", "_cflags") +def platform_ldflags(p): return platform_specific_values(p, "ldflags", "_ldflags") +def platform_cppflags(p): return platform_specific_values(p, "cppflags", "_cppflags") +def platform_ccasflags(p): return platform_specific_values(p, "ccasflags", "_ccasflags") +def platform_stripflags(p): return platform_specific_values(p, "stripflags", "_stripflags") +def platform_objcopyflags(p): return platform_specific_values(p, "objcopyflags", "_objcopyflags") def module(platform): r = set_canonical_name_suffix(".module") @@ -254,8 +278,8 @@ def kernel(platform): r += gvar_add("platform_DATA", "[+ name +].img") r += gvar_add("CLEANFILES", "[+ name +].img") r += rule("[+ name +].img", "[+ name +].exec$(EXEEXT)", - if_platform_tagged(platform, "nostrip", lambda: "cp $< $@", - lambda: "$(STRIP) $(" + cname() + "_STRIPFLAGS) -o $@ $<")) + if_platform_tagged(platform, "nostrip", "cp $< $@", + "$(STRIP) $(" + cname() + "_STRIPFLAGS) -o $@ $<")) return r def image(platform): @@ -270,6 +294,7 @@ def image(platform): r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_IMAGE) " + platform_ldflags(platform)) r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) " + platform_cppflags(platform)) r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) " + platform_ccasflags(platform)) + r += var_set(cname() + "_OBJCOPYFLAGS", "$(OBJCOPYFLAGS_IMAGE) " + platform_objcopyflags(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") @@ -281,7 +306,7 @@ def image(platform): if test x$(USE_APPLE_CC_FIXES) = xyes; then \ $(MACHO2IMG) $< $@; \ else \ - $(OBJCOPY) """ + platform_objcopyflags(platform) + """ --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; \ + $(OBJCOPY) $(""" + cname() + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; \ fi """) return r @@ -370,25 +395,32 @@ chmod a+x [+ name +] return r def module_rules(): - return "[+ FOR module +]" + under_conditional(each_platform(lambda p: module(p))) + "[+ ENDFOR +]" + return "[+ FOR module +]" + each_platform( + lambda p: under_platform_specific_conditionals(p, module(p))) + "[+ ENDFOR +]" def kernel_rules(): - return "[+ FOR kernel +]" + under_conditional(each_platform(lambda p: kernel(p))) + "[+ ENDFOR +]" + return "[+ FOR kernel +]" + each_platform( + lambda p: under_platform_specific_conditionals(p, kernel(p))) + "[+ ENDFOR +]" def image_rules(): - return "[+ FOR image +]" + under_conditional(each_platform(lambda p: image(p))) + "[+ ENDFOR +]" + return "[+ FOR image +]" + each_platform( + lambda p: under_platform_specific_conditionals(p, image(p))) + "[+ ENDFOR +]" def library_rules(): - return "[+ FOR library +]" + under_conditional(each_platform(lambda p: library(p))) + "[+ ENDFOR +]" + return "[+ FOR library +]" + each_platform( + lambda p: under_platform_specific_conditionals(p, library(p))) + "[+ ENDFOR +]" def program_rules(): - return "[+ FOR program +]" + under_conditional(each_platform(lambda p: program(p))) + "[+ ENDFOR +]" + return "[+ FOR program +]" + each_platform( + lambda p: under_platform_specific_conditionals(p, program(p))) + "[+ ENDFOR +]" def script_rules(): - return "[+ FOR script +]" + under_conditional(each_platform(lambda p: script(p))) + "[+ ENDFOR +]" + return "[+ FOR script +]" + each_platform( + lambda p: under_platform_specific_conditionals(p, script(p))) + "[+ ENDFOR +]" def data_rules(): - return "[+ FOR data +]" + under_conditional(each_platform(lambda p: data(p))) + "[+ ENDFOR +]" + return "[+ FOR data +]" + each_platform( + lambda p: under_platform_specific_conditionals(p, data(p))) + "[+ ENDFOR +]" print "[+ AutoGen5 template +]\n" a = module_rules() diff --git a/grub-core/modules.def b/grub-core/modules.def index b2d57a6fd..4e4db8d36 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -141,6 +141,8 @@ kernel = { i386_ieee1275 = kern/ieee1275/ieee1275.c; i386_ieee1275 = term/ieee1275/ofconsole.c; i386_ieee1275 = disk/ieee1275/ofdisk.c; + i386_ieee1275 = term/terminfo.c; + i386_ieee1275 = term/tparm.c; x86_64_efi = kern/x86_64/efi/startup.S; x86_64_efi = kern/x86_64/efi/callwrap.S; @@ -366,14 +368,6 @@ module = { enable = mips_yeeloong; }; -module = { - name = pci; - source = bus/emu/pci.c; - source = commands/lspci.c; - enable = emu; - condition = COND_GRUB_EMU_PCI; -}; - module = { name = usb; source = bus/usb/usb.c; @@ -393,23 +387,29 @@ module = { module = { name = uhci; source = bus/usb/uhci.c; - enable = x86; + enable = i386_pc; }; module = { name = ohci; source = bus/usb/ohci.c; - enable = x86; + enable = i386_pc; enable = mips_yeeloong; }; module = { name = pci; source = bus/pci.c; + emu = bus/emu/pci.c; + emu = commands/lspci.c; + + enable = emu; enable = i386_pc; - enable = i386_efi; + enable = x86_efi; enable = i386_ieee1275; enable = i386_coreboot; + + emu_condition = COND_GRUB_EMU_PCI; }; library = { From f6023b613f46ae5bd884a656d3d9b054244a72b3 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 17 Jul 2010 01:32:36 +0530 Subject: [PATCH 167/271] comments --- gentpl.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gentpl.py b/gentpl.py index baaae51bc..d584a0b7d 100644 --- a/gentpl.py +++ b/gentpl.py @@ -88,7 +88,7 @@ def rule(target, source, cmd): # # kernel = { # nostrip = emu; -# nostrip = i386_pc; +# ... # } # def if_platform_tagged(platform, tag, snippet_if, snippet_else=None): @@ -114,6 +114,7 @@ def if_platform_tagged(platform, tag, snippet_if, snippet_else=None): # module = { # cflags = '-Wall'; # emu_cflags = '-Wall -DGRUB_EMU=1'; +# ... # } # def foreach_platform_value(platform, tag, suffix, closure): From 02c9030aaeced235008b7ea8a01bf0ab450884a6 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 6 Aug 2010 10:01:54 +0530 Subject: [PATCH 168/271] builds w/o custom DEPDIR --- Makefile.am | 7 ++++--- docs/Makefile.am | 2 +- gentpl.py | 8 ++++++++ grub-core/Makefile.am | 11 ++++------- grub-core/configure.ac | 4 +++- grub-core/modules.def | 36 ++++++++---------------------------- modules.def | 38 ++++++++++++++++++++------------------ 7 files changed, 48 insertions(+), 58 deletions(-) diff --git a/Makefile.am b/Makefile.am index c181a5f77..c7f3614d4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,5 @@ AUTOMAKE_OPTIONS = subdir-objects -DEPDIR = .deps-util SUBDIRS = . grub-core po docs EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh @@ -23,13 +22,15 @@ AM_CCASFLAGS = $(CCASFLAGS_GRUB) include $(srcdir)/modules.am # XXX Use Automake's LEX & YACC support -grub_script.tab.c grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y +grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y $(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/grub-core/script/parser.y +grub_script.tab.c: grub_script.tab.h CLEANFILES += grub_script.tab.c grub_script.tab.h # For the lexer. -grub_script.yy.c grub_script.yy.h: $(top_srcdir)/grub-core/script/yylex.l +grub_script.yy.h: $(top_srcdir)/grub-core/script/yylex.l $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(top_srcdir)/grub-core/script/yylex.l +grub_script.yy.c: grub_script.yy.h CLEANFILES += grub_script.yy.c grub_script.yy.h # For libgrub.a diff --git a/docs/Makefile.am b/docs/Makefile.am index ab65a8dd2..1b302d262 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1,6 +1,6 @@ AUTOMAKE_OPTIONS = subdir-objects -AM_MAKEINFOFLAGS = --force --no-split --no-validate +AM_MAKEINFOFLAGS = --force --no-split --no-validate info_TEXINFOS = grub.texi grub_TEXINFOS = fdl.texi diff --git a/gentpl.py b/gentpl.py index d584a0b7d..ba776d642 100644 --- a/gentpl.py +++ b/gentpl.py @@ -17,6 +17,8 @@ GROUPS["sparc64"] = [ "sparc64_ieee1275" ] GROUPS["powerpc"] = [ "powerpc_ieee1275" ] GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"] GROUPS["x86_efi"] = [ "i386_efi", "x86_64_efi" ] +GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ] +GROUPS["pci"] = GROUPS["x86"] + GROUPS["mips"] GROUPS["nonemu"] = GRUB_PLATFORMS[:] GROUPS["nonemu"].remove("emu") @@ -157,6 +159,7 @@ def shared_nodist_sources(): return "[+ FOR nodist_shared +] [+ .nodist_shared + def platform_sources(p): return platform_specific_values(p, "source", "") def platform_nodist_sources(p): return platform_specific_values(p, "nodist", "_nodist") def platform_extra_dist(p): return platform_specific_values(p, "extra_dist", "_extra_dist") +def platform_dependencies(p): return platform_specific_values(p, "dependencies", "_dependencies") def platform_ldadd(p): return platform_specific_values(p, "ldadd", "_ldadd") def platform_cflags(p): return platform_specific_values(p, "cflags", "_cflags") @@ -181,6 +184,7 @@ def module(platform): r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_MODULE) " + platform_ldflags(platform)) r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_MODULE) " + platform_cppflags(platform)) r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(platform)) + # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") @@ -271,6 +275,7 @@ def kernel(platform): r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) " + platform_cppflags(platform)) r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) " + platform_ccasflags(platform)) r += var_set(cname() + "_STRIPFLAGS", "$(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) " + platform_stripflags(platform)) + # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") @@ -296,6 +301,7 @@ def image(platform): r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) " + platform_cppflags(platform)) r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) " + platform_ccasflags(platform)) r += var_set(cname() + "_OBJCOPYFLAGS", "$(OBJCOPYFLAGS_IMAGE) " + platform_objcopyflags(platform)) + # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") @@ -322,6 +328,7 @@ def library(platform): r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_LIBRARY) " + platform_cflags(platform)) r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) " + platform_cppflags(platform)) r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) " + platform_ccasflags(platform)) + # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") @@ -364,6 +371,7 @@ def program(platform, test=False): r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_PROGRAM) " + platform_ldflags(platform)) r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) " + platform_cppflags(platform)) r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(platform)) + # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 85433431d..654a7e9a4 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -1,7 +1,6 @@ AUTOMAKE_OPTIONS = subdir-objects SUBDIRS = po -DEPDIR = .deps-core EXTRA_DIST = gentpl.py modules.def Makefile.tpl genmoddep.awk EXTRA_DIST += genmodsrc.sh gensymlist.sh genemuinit.sh genemuinitheader.sh EXTRA_DIST += genfslist.sh gencmdlist.sh genvideolist.sh genhandlerlist.sh @@ -53,17 +52,15 @@ trigtables.c: gentrigtables.c configure.ac CLEANFILES += trigtables.c # XXX Use Automake's LEX & YACC support -# See Recording Dependencies Manually in automake doc for below rules -script/sh_module-lexer.$(OBJEXT):grub_script.tab.h -grub_script.tab.c grub_script.tab.h: $(top_srcdir)/script/parser.y +grub_script.tab.h: $(top_srcdir)/script/parser.y $(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/script/parser.y +grub_script.tab.c: grub_script.tab.h CLEANFILES += grub_script.tab.c grub_script.tab.h # For the lexer. -# See Recording Dependencies Manually in automake doc for below rules -script/sh_module-lexer.$(OBJEXT):grub_script.yy.h -grub_script.yy.c grub_script.yy.h: $(top_srcdir)/script/yylex.l +grub_script.yy.h: $(top_srcdir)/script/yylex.l $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(top_srcdir)/script/yylex.l +grub_script.yy.c: grub_script.yy.h CLEANFILES += grub_script.yy.c grub_script.yy.h include $(srcdir)/modules.am diff --git a/grub-core/configure.ac b/grub-core/configure.ac index 5ba5962a3..691876cac 100644 --- a/grub-core/configure.ac +++ b/grub-core/configure.ac @@ -60,13 +60,15 @@ CCAS=$TARGET_CC grub_CHECK_LINK_DIR if test x"$link_dir" = xyes ; then AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu]) + cp -rp $srcdir/lib/$target_cpu lib/target_cpu if test "$platform" != emu ; then AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform]) fi else mkdir -p include/grub 2>/dev/null rm -rf include/grub/cpu - cp -rp $srcdir/grub-core/include/grub/$target_cpu include/grub/cpu 2>/dev/null + cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null + cp -rp $srcdir/lib/$target_cpu lib/target_cpu 2>/dev/null if test "$platform" != emu ; then rm -rf include/grub/machine cp -rp $srcdir/grub-core/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null diff --git a/grub-core/modules.def b/grub-core/modules.def index 4e4db8d36..8e65f277c 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -584,14 +584,6 @@ module = { module = { name = lsmmap; source = commands/lsmmap.c; - - enable = i386_pc; - enable = i386_qemu; - enable = i386_coreboot; - enable = i386_multiboot; - enable = i386_ieee1275; - enable = mips_yeeloong; - enable = powerpc_ieee1275; }; module = { @@ -1215,12 +1207,7 @@ module = { module = { name = setjmp; - i386 = lib/i386/setjmp.S; - x86_64 = lib/x86_64/setjmp.S; - mips = lib/mips/setjmp.S; - sparc64 = lib/sparc64/setjmp.S; - powerpc = lib/powerpc/setjmp.S; - emu = 'lib/$(target_cpu)/setjmp.S'; + source = lib/target_cpu/setjmp.S; }; module = { @@ -1289,19 +1276,12 @@ module = { module = { name = xnu; - x86_efi = loader/xnu_resume.c; - x86_efi = loader/i386/xnu.c; - x86_efi = loader/macho32.c; - x86_efi = loader/macho64.c; - x86_efi = loader/macho.c; - x86_efi = loader/xnu.c; - - i386_pc = loader/xnu_resume.c; - i386_pc = loader/i386/xnu.c; - i386_pc = loader/macho32.c; - i386_pc = loader/macho64.c; - i386_pc = loader/macho.c; - i386_pc = loader/xnu.c; + source = loader/xnu_resume.c; + source = loader/i386/xnu.c; + source = loader/macho32.c; + source = loader/macho64.c; + source = loader/macho.c; + source = loader/xnu.c; extra_dist = loader/machoXX.c; enable = i386_pc; @@ -1383,7 +1363,7 @@ module = { source = script/function.c; source = script/lexer.c; - nodist = unidata.c; + source = unidata.c; nodist = grub_script.tab.c; nodist = grub_script.yy.c; nodist = grub_script.tab.h; diff --git a/modules.def b/modules.def index 23d7d14cd..8fb97cd40 100644 --- a/modules.def +++ b/modules.def @@ -90,13 +90,16 @@ library = { source = grub-core/script/lexer.c; source = grub-core/script/main.c; source = grub-core/script/script.c; + + nodist = grub_script.yy.h; + nodist = grub_script.tab.h; }; program = { name = grub-bin2h; source = util/bin2h.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; + ldflags = '$(LIBINTL)'; mansection = 1; }; @@ -109,8 +112,7 @@ program = { extra_dist = util/grub-mkimagexx.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; - + ldflags = '$(LIBINTL)'; cppflags = '-DGRUB_PKGLIBROOTDIR=\"$(pkglibrootdir)\"'; }; @@ -121,7 +123,7 @@ program = { source = util/grub-mkrelpath.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; + ldflags = '$(LIBINTL)'; }; program = { @@ -131,7 +133,7 @@ program = { source = util/grub-script-check.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; + ldflags = '$(LIBINTL)'; }; program = { @@ -141,7 +143,7 @@ program = { source = util/grub-editenv.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; + ldflags = '$(LIBINTL)'; }; program = { @@ -151,7 +153,7 @@ program = { source = util/grub-mkpasswd-pbkdf2.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; + ldflags = '$(LIBINTL)'; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; }; @@ -169,7 +171,7 @@ program = { source = util/grub-pe2elf.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; + ldflags = '$(LIBINTL)'; condition = COND_GRUB_PE2ELF; }; @@ -179,7 +181,7 @@ program = { source = util/grub-fstest.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; + ldflags = '$(LIBINTL)'; condition = COND_GRUB_FSTEST; }; @@ -187,13 +189,13 @@ program = { name = grub-mkfont; mansection = 1; source = util/grub-mkfont.c; - nodist = grub-core/unidata.c; + source = grub-core/unidata.c; cflags = '$(freetype_cflags)'; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; - ldadd = '$(freetype_libs)'; + ldflags = '$(LIBINTL)'; + ldflags = '$(freetype_libs)'; condition = COND_GRUB_MKFONT; }; @@ -211,8 +213,8 @@ program = { sparc64_ieee1275 = util/ieee1275/devicemap.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; - ldadd = '$(LIBUTIL)'; + ldflags = '$(LIBINTL)'; + ldflags = '$(LIBUTIL)'; }; program = { @@ -222,8 +224,8 @@ program = { source = util/grub-probe.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; - ldadd = '$(LIBUTIL)'; + ldflags = '$(LIBINTL)'; + ldflags = '$(LIBUTIL)'; }; program = { @@ -240,8 +242,8 @@ program = { sparc64_ieee1275 = util/lvm.c; ldadd = libgrub.a; - ldadd = '$(LIBINTL)'; - ldadd = '$(LIBUTIL)'; + ldflags = '$(LIBINTL)'; + ldflags = '$(LIBUTIL)'; enable = i386_pc; enable = sparc64_ieee1275; From db4122ba305f95060232e80c5b8c5578cad3e970 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sun, 15 Aug 2010 20:40:24 +0530 Subject: [PATCH 169/271] fix for grub-core parallel build failure --- grub-core/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/configure.ac b/grub-core/configure.ac index 691876cac..eed7f354f 100644 --- a/grub-core/configure.ac +++ b/grub-core/configure.ac @@ -60,7 +60,7 @@ CCAS=$TARGET_CC grub_CHECK_LINK_DIR if test x"$link_dir" = xyes ; then AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu]) - cp -rp $srcdir/lib/$target_cpu lib/target_cpu + cp -r $srcdir/lib/$target_cpu/* lib/target_cpu if test "$platform" != emu ; then AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform]) fi From 0a4fc180ec48e4a84c23b83ebd664b764a3bea25 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sun, 15 Aug 2010 21:09:37 +0530 Subject: [PATCH 170/271] parallel build fix for utils --- gentpl.py | 3 +-- grub-core/configure.ac | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gentpl.py b/gentpl.py index ba776d642..6dd5e84a2 100644 --- a/gentpl.py +++ b/gentpl.py @@ -342,8 +342,7 @@ def installdir(default="bin"): def manpage(): r = "if COND_MAN_PAGES\n" r += gvar_add("man_MANS", "[+ name +].[+ mansection +]\n") - r += rule("[+ name +].[+ mansection +]", "", """ -$(MAKE) $(AM_MAKEFLAGS) [+ name +] + r += rule("[+ name +].[+ mansection +]", "[+ name +]", """ chmod a+x [+ name +] PATH=$(builddir):$$PATH $(HELP2MAN) --section=[+ mansection +] -i $(top_srcdir)/docs/man/[+ name +].h2m -o $@ [+ name +] """) diff --git a/grub-core/configure.ac b/grub-core/configure.ac index eed7f354f..6a84c16e1 100644 --- a/grub-core/configure.ac +++ b/grub-core/configure.ac @@ -60,6 +60,7 @@ CCAS=$TARGET_CC grub_CHECK_LINK_DIR if test x"$link_dir" = xyes ; then AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu]) + mkdir -p lib/target_cpu cp -r $srcdir/lib/$target_cpu/* lib/target_cpu if test "$platform" != emu ; then AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform]) From 1ec4a279280d34ad2c5f19ef8a8024321aff8607 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 16 Aug 2010 15:04:30 +0530 Subject: [PATCH 171/271] export command supports multiple args --- normal/context.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/normal/context.c b/normal/context.c index 27adf287a..68f7626b9 100644 --- a/normal/context.c +++ b/normal/context.c @@ -158,11 +158,15 @@ static grub_err_t grub_cmd_export (struct grub_command *cmd __attribute__ ((unused)), int argc, char **args) { + int i; + if (argc < 1) return grub_error (GRUB_ERR_BAD_ARGUMENT, "no environment variable specified"); - grub_env_export (args[0]); + for (i = 0; i < argc; i++) + grub_env_export (args[i]); + return 0; } @@ -173,7 +177,8 @@ grub_context_init (void) grub_env_export ("prefix"); export_cmd = grub_register_command ("export", grub_cmd_export, - N_("ENVVAR"), N_("Export a variable.")); + N_("ENVVAR..."), + N_("Export variables.")); } void From 6304d2925501183585ad37573ba2a88dc9e8b640 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 17 Aug 2010 19:03:22 +0530 Subject: [PATCH 172/271] working copy, wo nested packaging --- autogen.sh | 29 +- {grub-core/conf => conf}/any-emu.rmk | 0 {grub-core/conf => conf}/common.rmk | 0 {grub-core/conf => conf}/i386-coreboot.rmk | 0 {grub-core/conf => conf}/i386-efi.rmk | 0 {grub-core/conf => conf}/i386-ieee1275.rmk | 0 {grub-core/conf => conf}/i386-multiboot.rmk | 0 .../conf => conf}/i386-pc-cygwin-img-ld.sc | 0 {grub-core/conf => conf}/i386-pc.rmk | 0 {grub-core/conf => conf}/i386-qemu.rmk | 0 {grub-core/conf => conf}/i386.rmk | 0 {grub-core/conf => conf}/mips-qemu-mips.rmk | 0 {grub-core/conf => conf}/mips-yeeloong.rmk | 0 {grub-core/conf => conf}/mips.rmk | 0 {grub-core/conf => conf}/powerpc-ieee1275.rmk | 0 {grub-core/conf => conf}/sparc64-ieee1275.rmk | 0 {grub-core/conf => conf}/tests.rmk | 0 {grub-core/conf => conf}/x86-efi.rmk | 0 {grub-core/conf => conf}/x86_64-efi.rmk | 0 configure.ac | 25 +- gentpl.py | 32 +- grub-core/Makefile.am | 326 +++++++++++++++++- grub-core/Makefile.kernel | 250 +++++++------- grub-core/Makefile.vars | 4 +- .../include => include}/grub/acorn_filecore.h | 0 {grub-core/include => include}/grub/acpi.h | 0 {grub-core/include => include}/grub/aout.h | 0 .../include => include}/grub/at_keyboard.h | 0 {grub-core/include => include}/grub/ata.h | 0 {grub-core/include => include}/grub/auth.h | 0 {grub-core/include => include}/grub/autoefi.h | 0 {grub-core/include => include}/grub/bitmap.h | 0 .../include => include}/grub/bitmap_scale.h | 0 {grub-core/include => include}/grub/boot.h | 0 .../include => include}/grub/bsdlabel.h | 0 {grub-core/include => include}/grub/bufio.h | 0 {grub-core/include => include}/grub/cache.h | 0 {grub-core/include => include}/grub/charset.h | 0 {grub-core/include => include}/grub/cmos.h | 0 {grub-core/include => include}/grub/command.h | 0 {grub-core/include => include}/grub/crypto.h | 0 {grub-core/include => include}/grub/cs5536.h | 0 .../include => include}/grub/datetime.h | 0 {grub-core/include => include}/grub/device.h | 0 {grub-core/include => include}/grub/disk.h | 0 {grub-core/include => include}/grub/dl.h | 0 {grub-core/include => include}/grub/efi/api.h | 0 .../include => include}/grub/efi/console.h | 0 .../grub/efi/console_control.h | 0 .../include => include}/grub/efi/disk.h | 0 {grub-core/include => include}/grub/efi/efi.h | 0 .../grub/efi/graphics_output.h | 0 .../include => include}/grub/efi/memory.h | 0 .../include => include}/grub/efi/pe32.h | 0 .../include => include}/grub/efi/time.h | 0 .../include => include}/grub/efi/uga_draw.h | 0 .../include => include}/grub/efiemu/efiemu.h | 0 .../include => include}/grub/efiemu/runtime.h | 0 {grub-core/include => include}/grub/elf.h | 0 {grub-core/include => include}/grub/elfload.h | 0 .../include => include}/grub/emu/console.h | 0 .../include => include}/grub/emu/getroot.h | 0 .../include => include}/grub/emu/hostdisk.h | 0 .../include => include}/grub/emu/misc.h | 0 {grub-core/include => include}/grub/env.h | 0 .../include => include}/grub/env_private.h | 0 {grub-core/include => include}/grub/err.h | 0 {grub-core/include => include}/grub/extcmd.h | 0 {grub-core/include => include}/grub/fbblit.h | 0 {grub-core/include => include}/grub/fbfill.h | 0 {grub-core/include => include}/grub/fbutil.h | 0 {grub-core/include => include}/grub/file.h | 0 {grub-core/include => include}/grub/font.h | 0 .../include => include}/grub/fontformat.h | 0 {grub-core/include => include}/grub/fs.h | 0 {grub-core/include => include}/grub/fshelp.h | 0 .../include => include}/grub/gfxmenu_model.h | 0 .../include => include}/grub/gfxmenu_view.h | 0 {grub-core/include => include}/grub/gfxterm.h | 0 .../include => include}/grub/gfxwidgets.h | 0 .../include => include}/grub/gpt_partition.h | 0 {grub-core/include => include}/grub/gui.h | 0 .../grub/gui_string_util.h | 0 {grub-core/include => include}/grub/gzio.h | 0 {grub-core/include => include}/grub/hfs.h | 0 {grub-core/include => include}/grub/i18n.h | 0 .../grub/i386/at_keyboard.h | 0 .../include => include}/grub/i386/bsd.h | 0 .../include => include}/grub/i386/cmos.h | 0 .../grub/i386/coreboot/boot.h | 0 .../grub/i386/coreboot/console.h | 0 .../grub/i386/coreboot/init.h | 0 .../grub/i386/coreboot/loader.h | 0 .../grub/i386/coreboot/memory.h | 0 .../grub/i386/coreboot/serial.h | 0 .../grub/i386/coreboot/time.h | 0 .../include => include}/grub/i386/cpuid.h | 0 .../grub/i386/efi/loader.h | 0 .../grub/i386/efi/memory.h | 0 .../grub/i386/efi/serial.h | 0 .../include => include}/grub/i386/efi/time.h | 0 .../include => include}/grub/i386/efiemu.h | 0 .../grub/i386/freebsd_linker.h | 0 .../grub/i386/freebsd_reboot.h | 0 .../grub/i386/ieee1275/ieee1275.h | 0 .../grub/i386/ieee1275/loader.h | 0 .../grub/i386/ieee1275/memory.h | 0 .../grub/i386/ieee1275/serial.h | 0 .../grub/i386/ieee1275/time.h | 0 {grub-core/include => include}/grub/i386/io.h | 0 .../include => include}/grub/i386/linux.h | 0 .../include => include}/grub/i386/loader.h | 0 .../include => include}/grub/i386/macho.h | 0 .../include => include}/grub/i386/memory.h | 0 .../include => include}/grub/i386/multiboot.h | 0 .../grub/i386/multiboot/boot.h | 0 .../grub/i386/multiboot/console.h | 0 .../grub/i386/multiboot/init.h | 0 .../grub/i386/multiboot/kernel.h | 0 .../grub/i386/multiboot/loader.h | 0 .../grub/i386/multiboot/memory.h | 0 .../grub/i386/multiboot/serial.h | 0 .../grub/i386/multiboot/time.h | 0 .../grub/i386/netbsd_bootinfo.h | 0 .../grub/i386/netbsd_reboot.h | 0 .../grub/i386/openbsd_bootarg.h | 0 .../grub/i386/openbsd_reboot.h | 0 .../grub/i386/pc/biosdisk.h | 0 .../grub/i386/pc/biosnum.h | 0 .../include => include}/grub/i386/pc/boot.h | 0 .../grub/i386/pc/chainloader.h | 0 .../grub/i386/pc/console.h | 0 .../include => include}/grub/i386/pc/efiemu.h | 0 .../include => include}/grub/i386/pc/init.h | 0 .../include => include}/grub/i386/pc/kernel.h | 0 .../include => include}/grub/i386/pc/loader.h | 0 .../include => include}/grub/i386/pc/memory.h | 0 .../include => include}/grub/i386/pc/pxe.h | 0 .../include => include}/grub/i386/pc/time.h | 0 .../include => include}/grub/i386/pc/vbe.h | 0 .../include => include}/grub/i386/pc/vga.h | 0 .../include => include}/grub/i386/pci.h | 0 .../include => include}/grub/i386/pit.h | 0 .../include => include}/grub/i386/qemu/boot.h | 0 .../grub/i386/qemu/console.h | 0 .../include => include}/grub/i386/qemu/init.h | 0 .../grub/i386/qemu/kernel.h | 0 .../grub/i386/qemu/loader.h | 0 .../grub/i386/qemu/memory.h | 0 .../grub/i386/qemu/serial.h | 0 .../include => include}/grub/i386/qemu/time.h | 0 .../include => include}/grub/i386/relocator.h | 0 .../include => include}/grub/i386/setjmp.h | 0 .../include => include}/grub/i386/time.h | 0 .../include => include}/grub/i386/tsc.h | 0 .../include => include}/grub/i386/types.h | 0 .../grub/i386/vga_common.h | 0 .../include => include}/grub/i386/xnu.h | 0 .../include => include}/grub/icon_manager.h | 0 .../grub/ieee1275/console.h | 0 .../grub/ieee1275/ieee1275.h | 0 .../grub/ieee1275/ofdisk.h | 0 {grub-core/include => include}/grub/kernel.h | 0 .../include => include}/grub/lib/LzFind.h | 0 .../include => include}/grub/lib/LzHash.h | 0 .../include => include}/grub/lib/LzmaDec.h | 0 .../include => include}/grub/lib/LzmaEnc.h | 0 .../include => include}/grub/lib/LzmaTypes.h | 0 {grub-core/include => include}/grub/lib/arg.h | 0 {grub-core/include => include}/grub/lib/crc.h | 0 .../include => include}/grub/lib/envblk.h | 0 .../include => include}/grub/lib/hexdump.h | 0 {grub-core/include => include}/grub/libgcc.h | 0 .../include => include}/grub/libpciaccess.h | 0 {grub-core/include => include}/grub/libusb.h | 0 {grub-core/include => include}/grub/list.h | 0 {grub-core/include => include}/grub/loader.h | 0 {grub-core/include => include}/grub/lvm.h | 0 {grub-core/include => include}/grub/macho.h | 0 .../include => include}/grub/machoload.h | 0 {grub-core/include => include}/grub/memory.h | 0 {grub-core/include => include}/grub/menu.h | 0 .../include => include}/grub/menu_viewer.h | 0 .../grub/mips/at_keyboard.h | 0 .../include => include}/grub/mips/cache.h | 0 .../include => include}/grub/mips/cmos.h | 0 {grub-core/include => include}/grub/mips/io.h | 0 .../include => include}/grub/mips/loongson.h | 0 .../include => include}/grub/mips/multiboot.h | 0 .../include => include}/grub/mips/pci.h | 0 .../grub/mips/qemu-mips/kernel.h | 0 .../grub/mips/qemu-mips/loader.h | 0 .../grub/mips/qemu-mips/memory.h | 0 .../grub/mips/qemu-mips/serial.h | 0 .../grub/mips/qemu-mips/time.h | 0 .../include => include}/grub/mips/relocator.h | 0 .../include => include}/grub/mips/setjmp.h | 0 .../include => include}/grub/mips/time.h | 0 .../include => include}/grub/mips/types.h | 0 .../grub/mips/yeeloong/at_keyboard.h | 0 .../grub/mips/yeeloong/cmos.h | 0 .../grub/mips/yeeloong/ec.h | 0 .../grub/mips/yeeloong/kernel.h | 0 .../grub/mips/yeeloong/loader.h | 0 .../grub/mips/yeeloong/memory.h | 0 .../grub/mips/yeeloong/pci.h | 0 .../grub/mips/yeeloong/serial.h | 0 .../grub/mips/yeeloong/time.h | 0 {grub-core/include => include}/grub/misc.h | 0 {grub-core/include => include}/grub/mm.h | 0 .../grub/msdos_partition.h | 0 .../include => include}/grub/multiboot.h | 0 .../grub/multiboot_loader.h | 0 {grub-core/include => include}/grub/net.h | 0 {grub-core/include => include}/grub/normal.h | 0 {grub-core/include => include}/grub/ntfs.h | 0 {grub-core/include => include}/grub/offsets.h | 0 {grub-core/include => include}/grub/parser.h | 0 .../include => include}/grub/partition.h | 0 .../include => include}/grub/parttool.h | 0 {grub-core/include => include}/grub/pci.h | 0 .../include => include}/grub/pciutils.h | 0 .../grub/powerpc/ieee1275/biosdisk.h | 0 .../grub/powerpc/ieee1275/ieee1275.h | 0 .../grub/powerpc/ieee1275/loader.h | 0 .../grub/powerpc/ieee1275/memory.h | 0 .../grub/powerpc/ieee1275/time.h | 0 .../grub/powerpc/ieee1275/util/biosdisk.h | 0 .../include => include}/grub/powerpc/kernel.h | 0 .../include => include}/grub/powerpc/setjmp.h | 0 .../include => include}/grub/powerpc/time.h | 0 .../include => include}/grub/powerpc/types.h | 0 {grub-core/include => include}/grub/raid.h | 0 {grub-core/include => include}/grub/reader.h | 0 .../include => include}/grub/script_sh.h | 0 {grub-core/include => include}/grub/scsi.h | 0 {grub-core/include => include}/grub/scsicmd.h | 0 {grub-core/include => include}/grub/sdl.h | 0 {grub-core/include => include}/grub/search.h | 0 {grub-core/include => include}/grub/serial.h | 0 {grub-core/include => include}/grub/setjmp.h | 0 {grub-core/include => include}/grub/smbus.h | 0 .../grub/sparc64/ieee1275/boot.h | 0 .../grub/sparc64/ieee1275/ieee1275.h | 0 .../grub/sparc64/ieee1275/kernel.h | 0 .../grub/sparc64/ieee1275/loader.h | 0 .../grub/sparc64/ieee1275/memory.h | 0 .../grub/sparc64/ieee1275/time.h | 0 .../include => include}/grub/sparc64/setjmp.h | 0 .../include => include}/grub/sparc64/time.h | 0 .../include => include}/grub/sparc64/types.h | 0 {grub-core/include => include}/grub/symbol.h | 0 {grub-core/include => include}/grub/term.h | 0 .../include => include}/grub/terminfo.h | 0 {grub-core/include => include}/grub/test.h | 0 {grub-core/include => include}/grub/time.h | 0 {grub-core/include => include}/grub/tparm.h | 0 {grub-core/include => include}/grub/trig.h | 0 {grub-core/include => include}/grub/types.h | 0 {grub-core/include => include}/grub/unicode.h | 0 {grub-core/include => include}/grub/usb.h | 0 {grub-core/include => include}/grub/usbdesc.h | 0 .../include => include}/grub/usbtrans.h | 0 .../grub/util/deviceiter.h | 0 .../include => include}/grub/util/lvm.h | 0 .../include => include}/grub/util/misc.h | 0 .../include => include}/grub/util/ofpath.h | 0 .../include => include}/grub/util/raid.h | 0 .../include => include}/grub/util/resolve.h | 0 {grub-core/include => include}/grub/vga.h | 0 {grub-core/include => include}/grub/video.h | 0 .../include => include}/grub/video_fb.h | 0 .../grub/x86_64/at_keyboard.h | 0 .../grub/x86_64/efi/boot.h | 0 .../grub/x86_64/efi/loader.h | 0 .../grub/x86_64/efi/memory.h | 0 .../grub/x86_64/efi/serial.h | 0 .../grub/x86_64/efi/time.h | 0 .../include => include}/grub/x86_64/io.h | 0 .../include => include}/grub/x86_64/linux.h | 0 .../include => include}/grub/x86_64/macho.h | 0 .../grub/x86_64/multiboot.h | 0 .../include => include}/grub/x86_64/pci.h | 0 .../grub/x86_64/relocator.h | 0 .../include => include}/grub/x86_64/setjmp.h | 0 .../include => include}/grub/x86_64/time.h | 0 .../include => include}/grub/x86_64/types.h | 0 .../include => include}/grub/x86_64/xnu.h | 0 {grub-core/include => include}/grub/xnu.h | 0 {grub-core/include => include}/multiboot.h | 0 {grub-core/include => include}/multiboot2.h | 0 {grub-core => util}/import_gcry.py | 2 +- 292 files changed, 481 insertions(+), 187 deletions(-) rename {grub-core/conf => conf}/any-emu.rmk (100%) rename {grub-core/conf => conf}/common.rmk (100%) rename {grub-core/conf => conf}/i386-coreboot.rmk (100%) rename {grub-core/conf => conf}/i386-efi.rmk (100%) rename {grub-core/conf => conf}/i386-ieee1275.rmk (100%) rename {grub-core/conf => conf}/i386-multiboot.rmk (100%) rename {grub-core/conf => conf}/i386-pc-cygwin-img-ld.sc (100%) rename {grub-core/conf => conf}/i386-pc.rmk (100%) rename {grub-core/conf => conf}/i386-qemu.rmk (100%) rename {grub-core/conf => conf}/i386.rmk (100%) rename {grub-core/conf => conf}/mips-qemu-mips.rmk (100%) rename {grub-core/conf => conf}/mips-yeeloong.rmk (100%) rename {grub-core/conf => conf}/mips.rmk (100%) rename {grub-core/conf => conf}/powerpc-ieee1275.rmk (100%) rename {grub-core/conf => conf}/sparc64-ieee1275.rmk (100%) rename {grub-core/conf => conf}/tests.rmk (100%) rename {grub-core/conf => conf}/x86-efi.rmk (100%) rename {grub-core/conf => conf}/x86_64-efi.rmk (100%) rename {grub-core/include => include}/grub/acorn_filecore.h (100%) rename {grub-core/include => include}/grub/acpi.h (100%) rename {grub-core/include => include}/grub/aout.h (100%) rename {grub-core/include => include}/grub/at_keyboard.h (100%) rename {grub-core/include => include}/grub/ata.h (100%) rename {grub-core/include => include}/grub/auth.h (100%) rename {grub-core/include => include}/grub/autoefi.h (100%) rename {grub-core/include => include}/grub/bitmap.h (100%) rename {grub-core/include => include}/grub/bitmap_scale.h (100%) rename {grub-core/include => include}/grub/boot.h (100%) rename {grub-core/include => include}/grub/bsdlabel.h (100%) rename {grub-core/include => include}/grub/bufio.h (100%) rename {grub-core/include => include}/grub/cache.h (100%) rename {grub-core/include => include}/grub/charset.h (100%) rename {grub-core/include => include}/grub/cmos.h (100%) rename {grub-core/include => include}/grub/command.h (100%) rename {grub-core/include => include}/grub/crypto.h (100%) rename {grub-core/include => include}/grub/cs5536.h (100%) rename {grub-core/include => include}/grub/datetime.h (100%) rename {grub-core/include => include}/grub/device.h (100%) rename {grub-core/include => include}/grub/disk.h (100%) rename {grub-core/include => include}/grub/dl.h (100%) rename {grub-core/include => include}/grub/efi/api.h (100%) rename {grub-core/include => include}/grub/efi/console.h (100%) rename {grub-core/include => include}/grub/efi/console_control.h (100%) rename {grub-core/include => include}/grub/efi/disk.h (100%) rename {grub-core/include => include}/grub/efi/efi.h (100%) rename {grub-core/include => include}/grub/efi/graphics_output.h (100%) rename {grub-core/include => include}/grub/efi/memory.h (100%) rename {grub-core/include => include}/grub/efi/pe32.h (100%) rename {grub-core/include => include}/grub/efi/time.h (100%) rename {grub-core/include => include}/grub/efi/uga_draw.h (100%) rename {grub-core/include => include}/grub/efiemu/efiemu.h (100%) rename {grub-core/include => include}/grub/efiemu/runtime.h (100%) rename {grub-core/include => include}/grub/elf.h (100%) rename {grub-core/include => include}/grub/elfload.h (100%) rename {grub-core/include => include}/grub/emu/console.h (100%) rename {grub-core/include => include}/grub/emu/getroot.h (100%) rename {grub-core/include => include}/grub/emu/hostdisk.h (100%) rename {grub-core/include => include}/grub/emu/misc.h (100%) rename {grub-core/include => include}/grub/env.h (100%) rename {grub-core/include => include}/grub/env_private.h (100%) rename {grub-core/include => include}/grub/err.h (100%) rename {grub-core/include => include}/grub/extcmd.h (100%) rename {grub-core/include => include}/grub/fbblit.h (100%) rename {grub-core/include => include}/grub/fbfill.h (100%) rename {grub-core/include => include}/grub/fbutil.h (100%) rename {grub-core/include => include}/grub/file.h (100%) rename {grub-core/include => include}/grub/font.h (100%) rename {grub-core/include => include}/grub/fontformat.h (100%) rename {grub-core/include => include}/grub/fs.h (100%) rename {grub-core/include => include}/grub/fshelp.h (100%) rename {grub-core/include => include}/grub/gfxmenu_model.h (100%) rename {grub-core/include => include}/grub/gfxmenu_view.h (100%) rename {grub-core/include => include}/grub/gfxterm.h (100%) rename {grub-core/include => include}/grub/gfxwidgets.h (100%) rename {grub-core/include => include}/grub/gpt_partition.h (100%) rename {grub-core/include => include}/grub/gui.h (100%) rename {grub-core/include => include}/grub/gui_string_util.h (100%) rename {grub-core/include => include}/grub/gzio.h (100%) rename {grub-core/include => include}/grub/hfs.h (100%) rename {grub-core/include => include}/grub/i18n.h (100%) rename {grub-core/include => include}/grub/i386/at_keyboard.h (100%) rename {grub-core/include => include}/grub/i386/bsd.h (100%) rename {grub-core/include => include}/grub/i386/cmos.h (100%) rename {grub-core/include => include}/grub/i386/coreboot/boot.h (100%) rename {grub-core/include => include}/grub/i386/coreboot/console.h (100%) rename {grub-core/include => include}/grub/i386/coreboot/init.h (100%) rename {grub-core/include => include}/grub/i386/coreboot/loader.h (100%) rename {grub-core/include => include}/grub/i386/coreboot/memory.h (100%) rename {grub-core/include => include}/grub/i386/coreboot/serial.h (100%) rename {grub-core/include => include}/grub/i386/coreboot/time.h (100%) rename {grub-core/include => include}/grub/i386/cpuid.h (100%) rename {grub-core/include => include}/grub/i386/efi/loader.h (100%) rename {grub-core/include => include}/grub/i386/efi/memory.h (100%) rename {grub-core/include => include}/grub/i386/efi/serial.h (100%) rename {grub-core/include => include}/grub/i386/efi/time.h (100%) rename {grub-core/include => include}/grub/i386/efiemu.h (100%) rename {grub-core/include => include}/grub/i386/freebsd_linker.h (100%) rename {grub-core/include => include}/grub/i386/freebsd_reboot.h (100%) rename {grub-core/include => include}/grub/i386/ieee1275/ieee1275.h (100%) rename {grub-core/include => include}/grub/i386/ieee1275/loader.h (100%) rename {grub-core/include => include}/grub/i386/ieee1275/memory.h (100%) rename {grub-core/include => include}/grub/i386/ieee1275/serial.h (100%) rename {grub-core/include => include}/grub/i386/ieee1275/time.h (100%) rename {grub-core/include => include}/grub/i386/io.h (100%) rename {grub-core/include => include}/grub/i386/linux.h (100%) rename {grub-core/include => include}/grub/i386/loader.h (100%) rename {grub-core/include => include}/grub/i386/macho.h (100%) rename {grub-core/include => include}/grub/i386/memory.h (100%) rename {grub-core/include => include}/grub/i386/multiboot.h (100%) rename {grub-core/include => include}/grub/i386/multiboot/boot.h (100%) rename {grub-core/include => include}/grub/i386/multiboot/console.h (100%) rename {grub-core/include => include}/grub/i386/multiboot/init.h (100%) rename {grub-core/include => include}/grub/i386/multiboot/kernel.h (100%) rename {grub-core/include => include}/grub/i386/multiboot/loader.h (100%) rename {grub-core/include => include}/grub/i386/multiboot/memory.h (100%) rename {grub-core/include => include}/grub/i386/multiboot/serial.h (100%) rename {grub-core/include => include}/grub/i386/multiboot/time.h (100%) rename {grub-core/include => include}/grub/i386/netbsd_bootinfo.h (100%) rename {grub-core/include => include}/grub/i386/netbsd_reboot.h (100%) rename {grub-core/include => include}/grub/i386/openbsd_bootarg.h (100%) rename {grub-core/include => include}/grub/i386/openbsd_reboot.h (100%) rename {grub-core/include => include}/grub/i386/pc/biosdisk.h (100%) rename {grub-core/include => include}/grub/i386/pc/biosnum.h (100%) rename {grub-core/include => include}/grub/i386/pc/boot.h (100%) rename {grub-core/include => include}/grub/i386/pc/chainloader.h (100%) rename {grub-core/include => include}/grub/i386/pc/console.h (100%) rename {grub-core/include => include}/grub/i386/pc/efiemu.h (100%) rename {grub-core/include => include}/grub/i386/pc/init.h (100%) rename {grub-core/include => include}/grub/i386/pc/kernel.h (100%) rename {grub-core/include => include}/grub/i386/pc/loader.h (100%) rename {grub-core/include => include}/grub/i386/pc/memory.h (100%) rename {grub-core/include => include}/grub/i386/pc/pxe.h (100%) rename {grub-core/include => include}/grub/i386/pc/time.h (100%) rename {grub-core/include => include}/grub/i386/pc/vbe.h (100%) rename {grub-core/include => include}/grub/i386/pc/vga.h (100%) rename {grub-core/include => include}/grub/i386/pci.h (100%) rename {grub-core/include => include}/grub/i386/pit.h (100%) rename {grub-core/include => include}/grub/i386/qemu/boot.h (100%) rename {grub-core/include => include}/grub/i386/qemu/console.h (100%) rename {grub-core/include => include}/grub/i386/qemu/init.h (100%) rename {grub-core/include => include}/grub/i386/qemu/kernel.h (100%) rename {grub-core/include => include}/grub/i386/qemu/loader.h (100%) rename {grub-core/include => include}/grub/i386/qemu/memory.h (100%) rename {grub-core/include => include}/grub/i386/qemu/serial.h (100%) rename {grub-core/include => include}/grub/i386/qemu/time.h (100%) rename {grub-core/include => include}/grub/i386/relocator.h (100%) rename {grub-core/include => include}/grub/i386/setjmp.h (100%) rename {grub-core/include => include}/grub/i386/time.h (100%) rename {grub-core/include => include}/grub/i386/tsc.h (100%) rename {grub-core/include => include}/grub/i386/types.h (100%) rename {grub-core/include => include}/grub/i386/vga_common.h (100%) rename {grub-core/include => include}/grub/i386/xnu.h (100%) rename {grub-core/include => include}/grub/icon_manager.h (100%) rename {grub-core/include => include}/grub/ieee1275/console.h (100%) rename {grub-core/include => include}/grub/ieee1275/ieee1275.h (100%) rename {grub-core/include => include}/grub/ieee1275/ofdisk.h (100%) rename {grub-core/include => include}/grub/kernel.h (100%) rename {grub-core/include => include}/grub/lib/LzFind.h (100%) rename {grub-core/include => include}/grub/lib/LzHash.h (100%) rename {grub-core/include => include}/grub/lib/LzmaDec.h (100%) rename {grub-core/include => include}/grub/lib/LzmaEnc.h (100%) rename {grub-core/include => include}/grub/lib/LzmaTypes.h (100%) rename {grub-core/include => include}/grub/lib/arg.h (100%) rename {grub-core/include => include}/grub/lib/crc.h (100%) rename {grub-core/include => include}/grub/lib/envblk.h (100%) rename {grub-core/include => include}/grub/lib/hexdump.h (100%) rename {grub-core/include => include}/grub/libgcc.h (100%) rename {grub-core/include => include}/grub/libpciaccess.h (100%) rename {grub-core/include => include}/grub/libusb.h (100%) rename {grub-core/include => include}/grub/list.h (100%) rename {grub-core/include => include}/grub/loader.h (100%) rename {grub-core/include => include}/grub/lvm.h (100%) rename {grub-core/include => include}/grub/macho.h (100%) rename {grub-core/include => include}/grub/machoload.h (100%) rename {grub-core/include => include}/grub/memory.h (100%) rename {grub-core/include => include}/grub/menu.h (100%) rename {grub-core/include => include}/grub/menu_viewer.h (100%) rename {grub-core/include => include}/grub/mips/at_keyboard.h (100%) rename {grub-core/include => include}/grub/mips/cache.h (100%) rename {grub-core/include => include}/grub/mips/cmos.h (100%) rename {grub-core/include => include}/grub/mips/io.h (100%) rename {grub-core/include => include}/grub/mips/loongson.h (100%) rename {grub-core/include => include}/grub/mips/multiboot.h (100%) rename {grub-core/include => include}/grub/mips/pci.h (100%) rename {grub-core/include => include}/grub/mips/qemu-mips/kernel.h (100%) rename {grub-core/include => include}/grub/mips/qemu-mips/loader.h (100%) rename {grub-core/include => include}/grub/mips/qemu-mips/memory.h (100%) rename {grub-core/include => include}/grub/mips/qemu-mips/serial.h (100%) rename {grub-core/include => include}/grub/mips/qemu-mips/time.h (100%) rename {grub-core/include => include}/grub/mips/relocator.h (100%) rename {grub-core/include => include}/grub/mips/setjmp.h (100%) rename {grub-core/include => include}/grub/mips/time.h (100%) rename {grub-core/include => include}/grub/mips/types.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/at_keyboard.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/cmos.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/ec.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/kernel.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/loader.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/memory.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/pci.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/serial.h (100%) rename {grub-core/include => include}/grub/mips/yeeloong/time.h (100%) rename {grub-core/include => include}/grub/misc.h (100%) rename {grub-core/include => include}/grub/mm.h (100%) rename {grub-core/include => include}/grub/msdos_partition.h (100%) rename {grub-core/include => include}/grub/multiboot.h (100%) rename {grub-core/include => include}/grub/multiboot_loader.h (100%) rename {grub-core/include => include}/grub/net.h (100%) rename {grub-core/include => include}/grub/normal.h (100%) rename {grub-core/include => include}/grub/ntfs.h (100%) rename {grub-core/include => include}/grub/offsets.h (100%) rename {grub-core/include => include}/grub/parser.h (100%) rename {grub-core/include => include}/grub/partition.h (100%) rename {grub-core/include => include}/grub/parttool.h (100%) rename {grub-core/include => include}/grub/pci.h (100%) rename {grub-core/include => include}/grub/pciutils.h (100%) rename {grub-core/include => include}/grub/powerpc/ieee1275/biosdisk.h (100%) rename {grub-core/include => include}/grub/powerpc/ieee1275/ieee1275.h (100%) rename {grub-core/include => include}/grub/powerpc/ieee1275/loader.h (100%) rename {grub-core/include => include}/grub/powerpc/ieee1275/memory.h (100%) rename {grub-core/include => include}/grub/powerpc/ieee1275/time.h (100%) rename {grub-core/include => include}/grub/powerpc/ieee1275/util/biosdisk.h (100%) rename {grub-core/include => include}/grub/powerpc/kernel.h (100%) rename {grub-core/include => include}/grub/powerpc/setjmp.h (100%) rename {grub-core/include => include}/grub/powerpc/time.h (100%) rename {grub-core/include => include}/grub/powerpc/types.h (100%) rename {grub-core/include => include}/grub/raid.h (100%) rename {grub-core/include => include}/grub/reader.h (100%) rename {grub-core/include => include}/grub/script_sh.h (100%) rename {grub-core/include => include}/grub/scsi.h (100%) rename {grub-core/include => include}/grub/scsicmd.h (100%) rename {grub-core/include => include}/grub/sdl.h (100%) rename {grub-core/include => include}/grub/search.h (100%) rename {grub-core/include => include}/grub/serial.h (100%) rename {grub-core/include => include}/grub/setjmp.h (100%) rename {grub-core/include => include}/grub/smbus.h (100%) rename {grub-core/include => include}/grub/sparc64/ieee1275/boot.h (100%) rename {grub-core/include => include}/grub/sparc64/ieee1275/ieee1275.h (100%) rename {grub-core/include => include}/grub/sparc64/ieee1275/kernel.h (100%) rename {grub-core/include => include}/grub/sparc64/ieee1275/loader.h (100%) rename {grub-core/include => include}/grub/sparc64/ieee1275/memory.h (100%) rename {grub-core/include => include}/grub/sparc64/ieee1275/time.h (100%) rename {grub-core/include => include}/grub/sparc64/setjmp.h (100%) rename {grub-core/include => include}/grub/sparc64/time.h (100%) rename {grub-core/include => include}/grub/sparc64/types.h (100%) rename {grub-core/include => include}/grub/symbol.h (100%) rename {grub-core/include => include}/grub/term.h (100%) rename {grub-core/include => include}/grub/terminfo.h (100%) rename {grub-core/include => include}/grub/test.h (100%) rename {grub-core/include => include}/grub/time.h (100%) rename {grub-core/include => include}/grub/tparm.h (100%) rename {grub-core/include => include}/grub/trig.h (100%) rename {grub-core/include => include}/grub/types.h (100%) rename {grub-core/include => include}/grub/unicode.h (100%) rename {grub-core/include => include}/grub/usb.h (100%) rename {grub-core/include => include}/grub/usbdesc.h (100%) rename {grub-core/include => include}/grub/usbtrans.h (100%) rename {grub-core/include => include}/grub/util/deviceiter.h (100%) rename {grub-core/include => include}/grub/util/lvm.h (100%) rename {grub-core/include => include}/grub/util/misc.h (100%) rename {grub-core/include => include}/grub/util/ofpath.h (100%) rename {grub-core/include => include}/grub/util/raid.h (100%) rename {grub-core/include => include}/grub/util/resolve.h (100%) rename {grub-core/include => include}/grub/vga.h (100%) rename {grub-core/include => include}/grub/video.h (100%) rename {grub-core/include => include}/grub/video_fb.h (100%) rename {grub-core/include => include}/grub/x86_64/at_keyboard.h (100%) rename {grub-core/include => include}/grub/x86_64/efi/boot.h (100%) rename {grub-core/include => include}/grub/x86_64/efi/loader.h (100%) rename {grub-core/include => include}/grub/x86_64/efi/memory.h (100%) rename {grub-core/include => include}/grub/x86_64/efi/serial.h (100%) rename {grub-core/include => include}/grub/x86_64/efi/time.h (100%) rename {grub-core/include => include}/grub/x86_64/io.h (100%) rename {grub-core/include => include}/grub/x86_64/linux.h (100%) rename {grub-core/include => include}/grub/x86_64/macho.h (100%) rename {grub-core/include => include}/grub/x86_64/multiboot.h (100%) rename {grub-core/include => include}/grub/x86_64/pci.h (100%) rename {grub-core/include => include}/grub/x86_64/relocator.h (100%) rename {grub-core/include => include}/grub/x86_64/setjmp.h (100%) rename {grub-core/include => include}/grub/x86_64/time.h (100%) rename {grub-core/include => include}/grub/x86_64/types.h (100%) rename {grub-core/include => include}/grub/x86_64/xnu.h (100%) rename {grub-core/include => include}/grub/xnu.h (100%) rename {grub-core/include => include}/multiboot.h (100%) rename {grub-core/include => include}/multiboot2.h (100%) rename {grub-core => util}/import_gcry.py (99%) diff --git a/autogen.sh b/autogen.sh index 49cd1fca5..60139cfb3 100755 --- a/autogen.sh +++ b/autogen.sh @@ -4,44 +4,21 @@ set -e autogen --version >/dev/null || (echo autogen missing; exit 1) -echo "Creating symlinks..." -ln -svf ../NEWS grub-core/ -ln -svf ../TODO grub-core/ -ln -svf ../THANKS grub-core/ -ln -svf ../README grub-core/ -ln -svf ../INSTALL grub-core/ -ln -svf ../AUTHORS grub-core/ -ln -svf ../COPYING grub-core/ -ln -svf ../ABOUT-NLS grub-core/ -ln -svf ../ChangeLog grub-core/ -ln -svf ../aclocal.m4 grub-core/ -ln -svf ../acinclude.m4 grub-core/ -ln -svf ../config.rpath grub-core/ -ln -svf ../gentpl.py grub-core/ -ln -svf ../configure.common grub-core/ - -mkdir -vp grub-core/docs/man -ln -svf ../../../docs/man/grub-emu.h2m grub-core/docs/man - echo "Creating Makefile.tpl..." python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl + echo "Running autogen..." autogen -T Makefile.tpl modules.def | sed -e '/^$/{N;/^\n$/D;}' > modules.am - -echo "Creating grub-core/Makefile.tpl..." -(cd grub-core && python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl) -echo "Running autogen..." -(cd grub-core && autogen -T Makefile.tpl modules.def | sed -e '/^$/{N;/^\n$/D;}' > modules.am) +autogen -T Makefile.tpl grub-core/modules.def | sed -e '/^$/{N;/^\n$/D;}' > grub-core/modules.am echo "Importing unicode..." python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c echo "Importing libgcrypt..." -(cd grub-core && python import_gcry.py lib/libgcrypt/ .) +python util/import_gcry.py grub-core/lib/libgcrypt/ grub-core echo "Saving timestamps..." echo timestamp > stamp-h.in -(cd grub-core && echo timestamp > stamp-h.in) echo "Running autoreconf..." autoreconf -vi diff --git a/grub-core/conf/any-emu.rmk b/conf/any-emu.rmk similarity index 100% rename from grub-core/conf/any-emu.rmk rename to conf/any-emu.rmk diff --git a/grub-core/conf/common.rmk b/conf/common.rmk similarity index 100% rename from grub-core/conf/common.rmk rename to conf/common.rmk diff --git a/grub-core/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk similarity index 100% rename from grub-core/conf/i386-coreboot.rmk rename to conf/i386-coreboot.rmk diff --git a/grub-core/conf/i386-efi.rmk b/conf/i386-efi.rmk similarity index 100% rename from grub-core/conf/i386-efi.rmk rename to conf/i386-efi.rmk diff --git a/grub-core/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk similarity index 100% rename from grub-core/conf/i386-ieee1275.rmk rename to conf/i386-ieee1275.rmk diff --git a/grub-core/conf/i386-multiboot.rmk b/conf/i386-multiboot.rmk similarity index 100% rename from grub-core/conf/i386-multiboot.rmk rename to conf/i386-multiboot.rmk diff --git a/grub-core/conf/i386-pc-cygwin-img-ld.sc b/conf/i386-pc-cygwin-img-ld.sc similarity index 100% rename from grub-core/conf/i386-pc-cygwin-img-ld.sc rename to conf/i386-pc-cygwin-img-ld.sc diff --git a/grub-core/conf/i386-pc.rmk b/conf/i386-pc.rmk similarity index 100% rename from grub-core/conf/i386-pc.rmk rename to conf/i386-pc.rmk diff --git a/grub-core/conf/i386-qemu.rmk b/conf/i386-qemu.rmk similarity index 100% rename from grub-core/conf/i386-qemu.rmk rename to conf/i386-qemu.rmk diff --git a/grub-core/conf/i386.rmk b/conf/i386.rmk similarity index 100% rename from grub-core/conf/i386.rmk rename to conf/i386.rmk diff --git a/grub-core/conf/mips-qemu-mips.rmk b/conf/mips-qemu-mips.rmk similarity index 100% rename from grub-core/conf/mips-qemu-mips.rmk rename to conf/mips-qemu-mips.rmk diff --git a/grub-core/conf/mips-yeeloong.rmk b/conf/mips-yeeloong.rmk similarity index 100% rename from grub-core/conf/mips-yeeloong.rmk rename to conf/mips-yeeloong.rmk diff --git a/grub-core/conf/mips.rmk b/conf/mips.rmk similarity index 100% rename from grub-core/conf/mips.rmk rename to conf/mips.rmk diff --git a/grub-core/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk similarity index 100% rename from grub-core/conf/powerpc-ieee1275.rmk rename to conf/powerpc-ieee1275.rmk diff --git a/grub-core/conf/sparc64-ieee1275.rmk b/conf/sparc64-ieee1275.rmk similarity index 100% rename from grub-core/conf/sparc64-ieee1275.rmk rename to conf/sparc64-ieee1275.rmk diff --git a/grub-core/conf/tests.rmk b/conf/tests.rmk similarity index 100% rename from grub-core/conf/tests.rmk rename to conf/tests.rmk diff --git a/grub-core/conf/x86-efi.rmk b/conf/x86-efi.rmk similarity index 100% rename from grub-core/conf/x86-efi.rmk rename to conf/x86-efi.rmk diff --git a/grub-core/conf/x86_64-efi.rmk b/conf/x86_64-efi.rmk similarity index 100% rename from grub-core/conf/x86_64-efi.rmk rename to conf/x86_64-efi.rmk diff --git a/configure.ac b/configure.ac index 9b9db0ac4..dafea4545 100644 --- a/configure.ac +++ b/configure.ac @@ -33,13 +33,15 @@ dnl package (in grub-core directory) builds with TARGETCC. AC_INIT([GRUB],[1.98],[bug-grub@gnu.org]) AC_CONFIG_AUX_DIR([.]) +: ${CFLAGS=""} # We don't want -g -O2 + # Checks for host and target systems. AC_CANONICAL_HOST AC_CANONICAL_TARGET AM_INIT_AUTOMAKE() AC_PREREQ(2.60) -AC_CONFIG_SRCDIR([grub-core/include/grub/dl.h]) +AC_CONFIG_SRCDIR([include/grub/dl.h]) AC_CONFIG_HEADER([config.h]) grub_coredir='grub-core' @@ -51,12 +53,31 @@ AC_SUBST(grub_utildir) m4_include([configure.common]) # Output files. +grub_CHECK_LINK_DIR +if test x"$link_dir" = xyes ; then + AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu]) + mkdir -p grub-core/lib + cp -rp $srcdir/grub-core/lib/$target_cpu grub-core/lib/target_cpu + if test "$platform" != emu ; then + AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform]) + fi +else + mkdir -p include/grub 2>/dev/null + rm -rf include/grub/cpu + cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null + cp -rp $srcdir/grub-core/lib/$target_cpu grub-core/lib/target_cpu 2>/dev/null + if test "$platform" != emu ; then + rm -rf include/grub/machine + cp -rp $srcdir/grub-core/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null + fi +fi + AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([grub-core/Makefile]) AC_CONFIG_FILES([po/Makefile]) AC_CONFIG_FILES([docs/Makefile]) AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h]) -AC_CONFIG_SUBDIRS([grub-core]) AC_OUTPUT [ echo "*******************************************************" diff --git a/gentpl.py b/gentpl.py index 6dd5e84a2..4d7ed0aa3 100644 --- a/gentpl.py +++ b/gentpl.py @@ -222,8 +222,8 @@ def-[+ name +].lst: [+ name +].module$(EXEEXT) und-[+ name +].lst: [+ name +].module$(EXEEXT) $(NM) -u -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@ -mod-[+ name +].c: [+ name +].module$(EXEEXT) $(top_builddir)/moddep.lst $(top_srcdir)/genmodsrc.sh - sh $(top_srcdir)/genmodsrc.sh [+ name +] $(top_builddir)/moddep.lst > $@ || (rm -f $@; exit 1) +mod-[+ name +].c: [+ name +].module$(EXEEXT) moddep.lst genmodsrc.sh + sh $(srcdir)/genmodsrc.sh [+ name +] moddep.lst > $@ || (rm -f $@; exit 1) mod-[+ name +].o: mod-[+ name +].c $(TARGET_CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS_MODULE) $(CPPFLAGS) $(CFLAGS_MODULE) $(CFLAGS) -c -o $@ $< @@ -239,26 +239,26 @@ mod-[+ name +].o: mod-[+ name +].c $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; \ fi -command-[+ name +].lst: [+ name +].pp $(top_srcdir)/gencmdlist.sh - cat $< | sh $(top_srcdir)/gencmdlist.sh [+ name +] > $@ || (rm -f $@; exit 1) +command-[+ name +].lst: [+ name +].pp $(srcdir)/gencmdlist.sh + cat $< | sh $(srcdir)/gencmdlist.sh [+ name +] > $@ || (rm -f $@; exit 1) -fs-[+ name +].lst: [+ name +].pp $(top_srcdir)/genfslist.sh - cat $< | sh $(top_srcdir)/genfslist.sh [+ name +] > $@ || (rm -f $@; exit 1) +fs-[+ name +].lst: [+ name +].pp $(srcdir)/genfslist.sh + cat $< | sh $(srcdir)/genfslist.sh [+ name +] > $@ || (rm -f $@; exit 1) -video-[+ name +].lst: [+ name +].pp $(top_srcdir)/genvideolist.sh - cat $< | sh $(top_srcdir)/genvideolist.sh [+ name +] > $@ || (rm -f $@; exit 1) +video-[+ name +].lst: [+ name +].pp $(srcdir)/genvideolist.sh + cat $< | sh $(srcdir)/genvideolist.sh [+ name +] > $@ || (rm -f $@; exit 1) -partmap-[+ name +].lst: [+ name +].pp $(top_srcdir)/genpartmaplist.sh - cat $< | sh $(top_srcdir)/genpartmaplist.sh [+ name +] > $@ || (rm -f $@; exit 1) +partmap-[+ name +].lst: [+ name +].pp $(srcdir)/genpartmaplist.sh + cat $< | sh $(srcdir)/genpartmaplist.sh [+ name +] > $@ || (rm -f $@; exit 1) -parttool-[+ name +].lst: [+ name +].pp $(top_srcdir)/genparttoollist.sh - cat $< | sh $(top_srcdir)/genparttoollist.sh [+ name +] > $@ || (rm -f $@; exit 1) +parttool-[+ name +].lst: [+ name +].pp $(srcdir)/genparttoollist.sh + cat $< | sh $(srcdir)/genparttoollist.sh [+ name +] > $@ || (rm -f $@; exit 1) -handler-[+ name +].lst: [+ name +].pp $(top_srcdir)/genhandlerlist.sh - cat $< | sh $(top_srcdir)/genhandlerlist.sh [+ name +] > $@ || (rm -f $@; exit 1) +handler-[+ name +].lst: [+ name +].pp $(srcdir)/genhandlerlist.sh + cat $< | sh $(srcdir)/genhandlerlist.sh [+ name +] > $@ || (rm -f $@; exit 1) -terminal-[+ name +].lst: [+ name +].pp $(top_srcdir)/genterminallist.sh - cat $< | sh $(top_srcdir)/genterminallist.sh [+ name +] > $@ || (rm -f $@; exit 1) +terminal-[+ name +].lst: [+ name +].pp $(srcdir)/genterminallist.sh + cat $< | sh $(srcdir)/genterminallist.sh [+ name +] > $@ || (rm -f $@; exit 1) """ return r diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 654a7e9a4..437835c83 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -1,6 +1,9 @@ AUTOMAKE_OPTIONS = subdir-objects -SUBDIRS = po +CC=$(TARGET_CC) +CPP=$(TARGET_CC) +CCAS=$(TARGET_CC) + EXTRA_DIST = gentpl.py modules.def Makefile.tpl genmoddep.awk EXTRA_DIST += genmodsrc.sh gensymlist.sh genemuinit.sh genemuinitheader.sh EXTRA_DIST += genfslist.sh gencmdlist.sh genvideolist.sh genhandlerlist.sh @@ -8,7 +11,88 @@ EXTRA_DIST += genpartmaplist.sh genparttoollist.sh genterminallist.sh EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc EXTRA_DIST += $(shell find $(top_srcdir) -name '*.h') -include $(top_srcdir)/Makefile.vars +grubconfdir = $(sysconfdir)/grub.d +platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) + +# to calm down automake +BUILT_SOURCES = +CLEANFILES = +COMMAND_FILES = +DEF_FILES = +FS_FILES = +HANDLER_FILES = +IMG_FILES = +MOD_FILES = +MODULE_FILES = +PARTMAP_FILES = +PARTTOOL_FILES = +TERMINAL_FILES = +TESTS = +UND_FILES = +VIDEO_FILES = +bin_PROGRAMS = +bin_SCRIPTS = +check_PROGRAMS = +check_SCRIPTS = +grubconf_DATA = +grubconf_SCRIPTS = +man_MANS = +noinst_DATA = +noinst_LIBRARIES = +noinst_PROGRAMS = +pkglib_SCRIPTS = +platform_DATA = +sbin_PROGRAMS = +sbin_SCRIPTS = +KERNEL_HEADER_FILES = + +# Platform specific options +if COND_i386_pc + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_efi + LDFLAGS_PLATFORM = -melf_i386 +endif +if COND_x86_64_efi + LDFLAGS_PLATFORM = -melf_x86_64 +endif +if COND_i386_qemu + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_coreboot + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_ieee1275 + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_mips_yeeloong + CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache + CCASFLAGS_PLATFORM = -march=mips3 +endif +if COND_sparc64_ieee1275 + CFLAGS_PLATFORM = -mno-app-regs + LDFLAGS_PLATFORM = -melf64_sparc -mno-relax +endif + +CPPFLAGS_GRUB = -DGRUB_FILE=\"`basename $<`\" +CPPFLAGS_GRUB += -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) +CPPFLAGS_GRUB += -I$(top_srcdir)/include +CPPFLAGS_GRUB += -I$(top_builddir)/include +CCASFLAGS_GRUB = -DASM_FILE=1 + +CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers +CPPFLAGS_GCRY = -I$(top_srcdir)/$(grub_coredir)/lib/libgcrypt_wrap + +CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" +CPPFLAGS_GNULIB = -I$(top_srcdir)/$(grub_coredir)/gnulib + +CFLAGS_MKISOFS = -Wno-all -Werror +CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include + +CFLAGS_POSIX = -fno-builtin +CPPFLAGS_POSIX = -I$(top_srcdir)/$(grub_coredir)/lib/posix_wrap + +CPPFLAGS_EFIEMU = -I$(top_srcdir)/$(grub_coredir)/efiemu/runtime LDADD_KERNEL = -lgcc CFLAGS_KERNEL = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding @@ -41,30 +125,231 @@ AM_CPPFLAGS = $(CPPFLAGS_GRUB) AM_CCASFLAGS = $(CCASFLAGS_GRUB) # gentrigtables -gentrigtables: $(top_srcdir)/gentrigtables.c +gentrigtables: gentrigtables.c $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(CPPFLAGS) -lm $< CLEANFILES += gentrigtables # trigtables.c -trigtables.c: gentrigtables.c configure.ac +trigtables.c: gentrigtables.c $(top_srcdir)/configure.ac $(MAKE) $(AM_MAKEFLAGS) gentrigtables - $(top_builddir)/gentrigtables > $@ + $(builddir)/gentrigtables > $@ CLEANFILES += trigtables.c # XXX Use Automake's LEX & YACC support -grub_script.tab.h: $(top_srcdir)/script/parser.y - $(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/script/parser.y +grub_script.tab.h: script/parser.y + $(YACC) -d -p grub_script_yy -b grub_script $< grub_script.tab.c: grub_script.tab.h CLEANFILES += grub_script.tab.c grub_script.tab.h # For the lexer. -grub_script.yy.h: $(top_srcdir)/script/yylex.l - $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(top_srcdir)/script/yylex.l +grub_script.yy.h: script/yylex.l + $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $< grub_script.yy.c: grub_script.yy.h CLEANFILES += grub_script.yy.c grub_script.yy.h include $(srcdir)/modules.am -include $(srcdir)/Makefile.kernel + +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cache.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/command.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/device.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dl.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/elf.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/elfload.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env_private.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/err.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/file.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fs.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/reader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/symbol.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/types.h + +if COND_i386_pc +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/biosdisk.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/vga.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/vbe.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pxe.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h +endif + +if COND_i386_efi +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/time.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h +endif + +if COND_i386_coreboot +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +endif + +if COND_i386_multiboot +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +endif + +if COND_i386_qemu +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h +endif + +if COND_i386_ieee1275 +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +endif + +if COND_x86_64_efi +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/time.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h +endif + +if COND_mips_yeeloong +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap_scale.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cs5536.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pci.h +endif + +if COND_powerpc_ieee1275 +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h +endif + +if COND_sparc64_ieee1275 +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sparc64/ieee1275/ieee1275.h +endif + +if COND_emu +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/time.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/types.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gzio.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/menu.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/datetime.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/misc.h +if COND_GRUB_EMU_SDL +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h +endif +if COND_GRUB_EMU_USB +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libusb.h +endif +if COND_GRUB_EMU_PCI +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h +endif +endif + +symlist.h: $(top_builddir)/config.h $(KERNEL_HEADER_FILES) + @list='$^'; \ + for p in $$list; do \ + echo "#include <$$p>" >> $@ || (rm -f $@; exit 1); \ + done +CLEANFILES += symlist.h +BUILT_SOURCES += symlist.h + +symlist.c: symlist.h gensymlist.sh + $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1) + cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1) + rm -f symlist.p +CLEANFILES += symlist.c +BUILT_SOURCES += symlist.c + +noinst_DATA += kernel_syms.lst +kernel_syms.lst: $(KERNEL_HEADER_FILES) $(top_builddir)/config.h + $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) $(CFLAGS) -DGRUB_SYMBOL_GENERATOR=1 $^ >kernel_syms.input + if grep "^#define HAVE_ASM_USCORE" $(top_builddir)/config.h; then u="_"; else u=""; fi; \ + cat kernel_syms.input | grep -v '^#' | sed -n \ + -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ + -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ + | sort -u >$@ + rm -f kernel_syms.input +CLEANFILES += kernel_syms.lst + +if COND_emu +kern/emu/grub_emu-main.$(OBJEXT):grub_emu_init.h +grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h +kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h +grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h + +grub_emu_init.h: genemuinitheader.sh $(MOD_FILES) + rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinitheader.sh $(NM) > $@ +CLEANFILES += grub_emu_init.h + +grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MOD_FILES) + rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinit.sh $(NM) > $@ +CLEANFILES += grub_emu_init.c +endif # .lst files platform_DATA += moddep.lst @@ -77,9 +362,6 @@ platform_DATA += parttool.lst platform_DATA += video.lst platform_DATA += crypto.lst CLEANFILES += moddep.lst -CLEANFILES += fs.lst -CLEANFILES += command.lst -CLEANFILES += partmap.lst CLEANFILES += handler.lst CLEANFILES += terminal.lst CLEANFILES += parttool.lst @@ -88,27 +370,41 @@ CLEANFILES += crypto.lst fs.lst: $(FS_FILES) cat $^ /dev/null | sort | uniq > $@ +CLEANFILES += fs.lst + command.lst: $(COMMAND_FILES) cat $^ /dev/null | sort | uniq > $@ +CLEANFILES += command.lst + partmap.lst: $(PARTMAP_FILES) cat $^ /dev/null | sort | uniq > $@ +CLEANFILES += partmap.lst + handler.lst: $(HANDLER_FILES) cat $^ /dev/null | sort | uniq > $@ +CLEANFILES += handler.lst + terminal.lst: $(TERMINAL_FILES) cat $^ /dev/null | sort | uniq > $@ +CLEANFILES += terminal.lst + parttool.lst: $(PARTTOOL_FILES) cat $^ /dev/null | sort | uniq > $@ +CLEANFILES += parttool.lst + video.lst: $(VIDEO_FILES) cat $^ /dev/null | sort | uniq > $@ +CLEANFILES += video.lst # but, crypto.lst is simply copied -crypto.lst: $(top_srcdir)/lib/libgcrypt-grub/cipher/crypto.lst +crypto.lst: $(srcdir)/lib/libgcrypt-grub/cipher/crypto.lst cp $^ $@ +CLEANFILES += crypto.lst # generate global module dependencies list moddep.lst: kernel_syms.lst genmoddep.awk $(DEF_FILES) $(UND_FILES) cat $(DEF_FILES) kernel_syms.lst /dev/null \ - | $(AWK) -f $(top_srcdir)/genmoddep.awk $(UND_FILES) > $@ \ + | $(AWK) -f $(srcdir)/genmoddep.awk $(UND_FILES) > $@ \ || (rm -f $@; exit 1) if COND_i386_pc diff --git a/grub-core/Makefile.kernel b/grub-core/Makefile.kernel index b03563676..69c20a4fc 100644 --- a/grub-core/Makefile.kernel +++ b/grub-core/Makefile.kernel @@ -1,168 +1,168 @@ # -*- makefile -*- KERNEL_HEADER_FILES = -KERNEL_HEADER_FILES += include/grub/cache.h -KERNEL_HEADER_FILES += include/grub/command.h -KERNEL_HEADER_FILES += include/grub/device.h -KERNEL_HEADER_FILES += include/grub/disk.h -KERNEL_HEADER_FILES += include/grub/dl.h -KERNEL_HEADER_FILES += include/grub/elf.h -KERNEL_HEADER_FILES += include/grub/elfload.h -KERNEL_HEADER_FILES += include/grub/env.h -KERNEL_HEADER_FILES += include/grub/env_private.h -KERNEL_HEADER_FILES += include/grub/err.h -KERNEL_HEADER_FILES += include/grub/file.h -KERNEL_HEADER_FILES += include/grub/fs.h -KERNEL_HEADER_FILES += include/grub/i18n.h -KERNEL_HEADER_FILES += include/grub/kernel.h -KERNEL_HEADER_FILES += include/grub/list.h -KERNEL_HEADER_FILES += include/grub/misc.h -KERNEL_HEADER_FILES += include/grub/mm.h -KERNEL_HEADER_FILES += include/grub/net.h -KERNEL_HEADER_FILES += include/grub/parser.h -KERNEL_HEADER_FILES += include/grub/partition.h -KERNEL_HEADER_FILES += include/grub/reader.h -KERNEL_HEADER_FILES += include/grub/symbol.h -KERNEL_HEADER_FILES += include/grub/term.h -KERNEL_HEADER_FILES += include/grub/time.h -KERNEL_HEADER_FILES += include/grub/types.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cache.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/command.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/device.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dl.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/elf.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/elfload.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env_private.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/err.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/file.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fs.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/reader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/symbol.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/types.h if COND_i386_pc -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/machine/biosdisk.h -KERNEL_HEADER_FILES += include/grub/machine/boot.h -KERNEL_HEADER_FILES += include/grub/machine/console.h -KERNEL_HEADER_FILES += include/grub/machine/memory.h -KERNEL_HEADER_FILES += include/grub/machine/loader.h -KERNEL_HEADER_FILES += include/grub/machine/vga.h -KERNEL_HEADER_FILES += include/grub/machine/vbe.h -KERNEL_HEADER_FILES += include/grub/machine/kernel.h -KERNEL_HEADER_FILES += include/grub/machine/pxe.h -KERNEL_HEADER_FILES += include/grub/i386/pit.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/biosdisk.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/vga.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/vbe.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pxe.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h endif if COND_i386_efi -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/efi/efi.h -KERNEL_HEADER_FILES += include/grub/efi/time.h -KERNEL_HEADER_FILES += include/grub/efi/disk.h -KERNEL_HEADER_FILES += include/grub/i386/pit.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/time.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h endif if COND_i386_coreboot -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/machine/boot.h -KERNEL_HEADER_FILES += include/grub/machine/console.h -KERNEL_HEADER_FILES += include/grub/machine/init.h -KERNEL_HEADER_FILES += include/grub/machine/memory.h -KERNEL_HEADER_FILES += include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h endif if COND_i386_multiboot -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/machine/boot.h -KERNEL_HEADER_FILES += include/grub/machine/console.h -KERNEL_HEADER_FILES += include/grub/machine/init.h -KERNEL_HEADER_FILES += include/grub/machine/memory.h -KERNEL_HEADER_FILES += include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h endif if COND_i386_qemu -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/machine/boot.h -KERNEL_HEADER_FILES += include/grub/machine/console.h -KERNEL_HEADER_FILES += include/grub/machine/init.h -KERNEL_HEADER_FILES += include/grub/machine/memory.h -KERNEL_HEADER_FILES += include/grub/machine/loader.h -KERNEL_HEADER_FILES += include/grub/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h endif if COND_i386_ieee1275 -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/ieee1275/ieee1275.h -KERNEL_HEADER_FILES += include/grub/machine/loader.h -KERNEL_HEADER_FILES += include/grub/machine/memory.h -KERNEL_HEADER_FILES += include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h endif if COND_x86_64_efi -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/efi/efi.h -KERNEL_HEADER_FILES += include/grub/efi/time.h -KERNEL_HEADER_FILES += include/grub/efi/disk.h -KERNEL_HEADER_FILES += include/grub/machine/loader.h -KERNEL_HEADER_FILES += include/grub/i386/pit.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/time.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h endif if COND_mips_yeeloong -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/machine/kernel.h -KERNEL_HEADER_FILES += include/grub/machine/memory.h -KERNEL_HEADER_FILES += include/grub/cpu/cache.h -KERNEL_HEADER_FILES += include/grub/bitmap.h -KERNEL_HEADER_FILES += include/grub/video.h -KERNEL_HEADER_FILES += include/grub/gfxterm.h -KERNEL_HEADER_FILES += include/grub/font.h -KERNEL_HEADER_FILES += include/grub/bitmap_scale.h -KERNEL_HEADER_FILES += include/grub/bufio.h -KERNEL_HEADER_FILES += include/grub/pci.h -KERNEL_HEADER_FILES += include/grub/libgcc.h -KERNEL_HEADER_FILES += include/grub/cs5536.h -KERNEL_HEADER_FILES += include/grub/machine/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap_scale.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cs5536.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pci.h endif if COND_powerpc_ieee1275 -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/ieee1275/ieee1275.h -KERNEL_HEADER_FILES += include/grub/libgcc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h endif if COND_sparc64_ieee1275 -KERNEL_HEADER_FILES += include/grub/boot.h -KERNEL_HEADER_FILES += include/grub/loader.h -KERNEL_HEADER_FILES += include/grub/msdos_partition.h -KERNEL_HEADER_FILES += include/grub/libgcc.h -KERNEL_HEADER_FILES += include/grub/ieee1275/ieee1275.h -KERNEL_HEADER_FILES += include/grub/machine/kernel.h -KERNEL_HEADER_FILES += include/grub/sparc64/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sparc64/ieee1275/ieee1275.h endif if COND_emu -KERNEL_HEADER_FILES += include/grub/cpu/time.h -KERNEL_HEADER_FILES += include/grub/cpu/types.h -KERNEL_HEADER_FILES += include/grub/gzio.h -KERNEL_HEADER_FILES += include/grub/menu.h -KERNEL_HEADER_FILES += include/grub/datetime.h -KERNEL_HEADER_FILES += include/grub/emu/misc.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/time.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/types.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gzio.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/menu.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/datetime.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/misc.h if COND_GRUB_EMU_SDL -KERNEL_HEADER_FILES += include/grub/sdl.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h endif if COND_GRUB_EMU_USB -KERNEL_HEADER_FILES += include/grub/libusb.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libusb.h endif if COND_GRUB_EMU_PCI -KERNEL_HEADER_FILES += include/grub/libpciaccess.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h endif endif -symlist.h: config.h $(KERNEL_HEADER_FILES) +symlist.h: $(top_builddir)/config.h $(KERNEL_HEADER_FILES) @list='$^'; \ for p in $$list; do \ echo "#include <$$p>" >> $@ || (rm -f $@; exit 1); \ @@ -172,15 +172,15 @@ BUILT_SOURCES += symlist.h symlist.c: symlist.h gensymlist.sh $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1) - cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1) + cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1) rm -f symlist.p CLEANFILES += symlist.c BUILT_SOURCES += symlist.c noinst_DATA += kernel_syms.lst -kernel_syms.lst: $(KERNEL_HEADER_FILES) config.h +kernel_syms.lst: $(KERNEL_HEADER_FILES) $(top_builddir)/config.h $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) $(CFLAGS) -DGRUB_SYMBOL_GENERATOR=1 $^ >kernel_syms.input - if grep "^#define HAVE_ASM_USCORE" config.h; then u="_"; else u=""; fi; \ + if grep "^#define HAVE_ASM_USCORE" $(top_builddir)/config.h; then u="_"; else u=""; fi; \ cat kernel_syms.input | grep -v '^#' | sed -n \ -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ diff --git a/grub-core/Makefile.vars b/grub-core/Makefile.vars index db3c2a7db..6dc536139 100644 --- a/grub-core/Makefile.vars +++ b/grub-core/Makefile.vars @@ -33,8 +33,8 @@ endif CPPFLAGS_GRUB = -DGRUB_FILE=\"`basename $<`\" CPPFLAGS_GRUB += -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) -CPPFLAGS_GRUB += -I$(top_srcdir)/$(grub_coredir)/include -CPPFLAGS_GRUB += -I$(top_builddir)/$(grub_coredir)/include +CPPFLAGS_GRUB += -I$(top_srcdir)/include +CPPFLAGS_GRUB += -I$(top_builddir)/include CCASFLAGS_GRUB = -DASM_FILE=1 CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers diff --git a/grub-core/include/grub/acorn_filecore.h b/include/grub/acorn_filecore.h similarity index 100% rename from grub-core/include/grub/acorn_filecore.h rename to include/grub/acorn_filecore.h diff --git a/grub-core/include/grub/acpi.h b/include/grub/acpi.h similarity index 100% rename from grub-core/include/grub/acpi.h rename to include/grub/acpi.h diff --git a/grub-core/include/grub/aout.h b/include/grub/aout.h similarity index 100% rename from grub-core/include/grub/aout.h rename to include/grub/aout.h diff --git a/grub-core/include/grub/at_keyboard.h b/include/grub/at_keyboard.h similarity index 100% rename from grub-core/include/grub/at_keyboard.h rename to include/grub/at_keyboard.h diff --git a/grub-core/include/grub/ata.h b/include/grub/ata.h similarity index 100% rename from grub-core/include/grub/ata.h rename to include/grub/ata.h diff --git a/grub-core/include/grub/auth.h b/include/grub/auth.h similarity index 100% rename from grub-core/include/grub/auth.h rename to include/grub/auth.h diff --git a/grub-core/include/grub/autoefi.h b/include/grub/autoefi.h similarity index 100% rename from grub-core/include/grub/autoefi.h rename to include/grub/autoefi.h diff --git a/grub-core/include/grub/bitmap.h b/include/grub/bitmap.h similarity index 100% rename from grub-core/include/grub/bitmap.h rename to include/grub/bitmap.h diff --git a/grub-core/include/grub/bitmap_scale.h b/include/grub/bitmap_scale.h similarity index 100% rename from grub-core/include/grub/bitmap_scale.h rename to include/grub/bitmap_scale.h diff --git a/grub-core/include/grub/boot.h b/include/grub/boot.h similarity index 100% rename from grub-core/include/grub/boot.h rename to include/grub/boot.h diff --git a/grub-core/include/grub/bsdlabel.h b/include/grub/bsdlabel.h similarity index 100% rename from grub-core/include/grub/bsdlabel.h rename to include/grub/bsdlabel.h diff --git a/grub-core/include/grub/bufio.h b/include/grub/bufio.h similarity index 100% rename from grub-core/include/grub/bufio.h rename to include/grub/bufio.h diff --git a/grub-core/include/grub/cache.h b/include/grub/cache.h similarity index 100% rename from grub-core/include/grub/cache.h rename to include/grub/cache.h diff --git a/grub-core/include/grub/charset.h b/include/grub/charset.h similarity index 100% rename from grub-core/include/grub/charset.h rename to include/grub/charset.h diff --git a/grub-core/include/grub/cmos.h b/include/grub/cmos.h similarity index 100% rename from grub-core/include/grub/cmos.h rename to include/grub/cmos.h diff --git a/grub-core/include/grub/command.h b/include/grub/command.h similarity index 100% rename from grub-core/include/grub/command.h rename to include/grub/command.h diff --git a/grub-core/include/grub/crypto.h b/include/grub/crypto.h similarity index 100% rename from grub-core/include/grub/crypto.h rename to include/grub/crypto.h diff --git a/grub-core/include/grub/cs5536.h b/include/grub/cs5536.h similarity index 100% rename from grub-core/include/grub/cs5536.h rename to include/grub/cs5536.h diff --git a/grub-core/include/grub/datetime.h b/include/grub/datetime.h similarity index 100% rename from grub-core/include/grub/datetime.h rename to include/grub/datetime.h diff --git a/grub-core/include/grub/device.h b/include/grub/device.h similarity index 100% rename from grub-core/include/grub/device.h rename to include/grub/device.h diff --git a/grub-core/include/grub/disk.h b/include/grub/disk.h similarity index 100% rename from grub-core/include/grub/disk.h rename to include/grub/disk.h diff --git a/grub-core/include/grub/dl.h b/include/grub/dl.h similarity index 100% rename from grub-core/include/grub/dl.h rename to include/grub/dl.h diff --git a/grub-core/include/grub/efi/api.h b/include/grub/efi/api.h similarity index 100% rename from grub-core/include/grub/efi/api.h rename to include/grub/efi/api.h diff --git a/grub-core/include/grub/efi/console.h b/include/grub/efi/console.h similarity index 100% rename from grub-core/include/grub/efi/console.h rename to include/grub/efi/console.h diff --git a/grub-core/include/grub/efi/console_control.h b/include/grub/efi/console_control.h similarity index 100% rename from grub-core/include/grub/efi/console_control.h rename to include/grub/efi/console_control.h diff --git a/grub-core/include/grub/efi/disk.h b/include/grub/efi/disk.h similarity index 100% rename from grub-core/include/grub/efi/disk.h rename to include/grub/efi/disk.h diff --git a/grub-core/include/grub/efi/efi.h b/include/grub/efi/efi.h similarity index 100% rename from grub-core/include/grub/efi/efi.h rename to include/grub/efi/efi.h diff --git a/grub-core/include/grub/efi/graphics_output.h b/include/grub/efi/graphics_output.h similarity index 100% rename from grub-core/include/grub/efi/graphics_output.h rename to include/grub/efi/graphics_output.h diff --git a/grub-core/include/grub/efi/memory.h b/include/grub/efi/memory.h similarity index 100% rename from grub-core/include/grub/efi/memory.h rename to include/grub/efi/memory.h diff --git a/grub-core/include/grub/efi/pe32.h b/include/grub/efi/pe32.h similarity index 100% rename from grub-core/include/grub/efi/pe32.h rename to include/grub/efi/pe32.h diff --git a/grub-core/include/grub/efi/time.h b/include/grub/efi/time.h similarity index 100% rename from grub-core/include/grub/efi/time.h rename to include/grub/efi/time.h diff --git a/grub-core/include/grub/efi/uga_draw.h b/include/grub/efi/uga_draw.h similarity index 100% rename from grub-core/include/grub/efi/uga_draw.h rename to include/grub/efi/uga_draw.h diff --git a/grub-core/include/grub/efiemu/efiemu.h b/include/grub/efiemu/efiemu.h similarity index 100% rename from grub-core/include/grub/efiemu/efiemu.h rename to include/grub/efiemu/efiemu.h diff --git a/grub-core/include/grub/efiemu/runtime.h b/include/grub/efiemu/runtime.h similarity index 100% rename from grub-core/include/grub/efiemu/runtime.h rename to include/grub/efiemu/runtime.h diff --git a/grub-core/include/grub/elf.h b/include/grub/elf.h similarity index 100% rename from grub-core/include/grub/elf.h rename to include/grub/elf.h diff --git a/grub-core/include/grub/elfload.h b/include/grub/elfload.h similarity index 100% rename from grub-core/include/grub/elfload.h rename to include/grub/elfload.h diff --git a/grub-core/include/grub/emu/console.h b/include/grub/emu/console.h similarity index 100% rename from grub-core/include/grub/emu/console.h rename to include/grub/emu/console.h diff --git a/grub-core/include/grub/emu/getroot.h b/include/grub/emu/getroot.h similarity index 100% rename from grub-core/include/grub/emu/getroot.h rename to include/grub/emu/getroot.h diff --git a/grub-core/include/grub/emu/hostdisk.h b/include/grub/emu/hostdisk.h similarity index 100% rename from grub-core/include/grub/emu/hostdisk.h rename to include/grub/emu/hostdisk.h diff --git a/grub-core/include/grub/emu/misc.h b/include/grub/emu/misc.h similarity index 100% rename from grub-core/include/grub/emu/misc.h rename to include/grub/emu/misc.h diff --git a/grub-core/include/grub/env.h b/include/grub/env.h similarity index 100% rename from grub-core/include/grub/env.h rename to include/grub/env.h diff --git a/grub-core/include/grub/env_private.h b/include/grub/env_private.h similarity index 100% rename from grub-core/include/grub/env_private.h rename to include/grub/env_private.h diff --git a/grub-core/include/grub/err.h b/include/grub/err.h similarity index 100% rename from grub-core/include/grub/err.h rename to include/grub/err.h diff --git a/grub-core/include/grub/extcmd.h b/include/grub/extcmd.h similarity index 100% rename from grub-core/include/grub/extcmd.h rename to include/grub/extcmd.h diff --git a/grub-core/include/grub/fbblit.h b/include/grub/fbblit.h similarity index 100% rename from grub-core/include/grub/fbblit.h rename to include/grub/fbblit.h diff --git a/grub-core/include/grub/fbfill.h b/include/grub/fbfill.h similarity index 100% rename from grub-core/include/grub/fbfill.h rename to include/grub/fbfill.h diff --git a/grub-core/include/grub/fbutil.h b/include/grub/fbutil.h similarity index 100% rename from grub-core/include/grub/fbutil.h rename to include/grub/fbutil.h diff --git a/grub-core/include/grub/file.h b/include/grub/file.h similarity index 100% rename from grub-core/include/grub/file.h rename to include/grub/file.h diff --git a/grub-core/include/grub/font.h b/include/grub/font.h similarity index 100% rename from grub-core/include/grub/font.h rename to include/grub/font.h diff --git a/grub-core/include/grub/fontformat.h b/include/grub/fontformat.h similarity index 100% rename from grub-core/include/grub/fontformat.h rename to include/grub/fontformat.h diff --git a/grub-core/include/grub/fs.h b/include/grub/fs.h similarity index 100% rename from grub-core/include/grub/fs.h rename to include/grub/fs.h diff --git a/grub-core/include/grub/fshelp.h b/include/grub/fshelp.h similarity index 100% rename from grub-core/include/grub/fshelp.h rename to include/grub/fshelp.h diff --git a/grub-core/include/grub/gfxmenu_model.h b/include/grub/gfxmenu_model.h similarity index 100% rename from grub-core/include/grub/gfxmenu_model.h rename to include/grub/gfxmenu_model.h diff --git a/grub-core/include/grub/gfxmenu_view.h b/include/grub/gfxmenu_view.h similarity index 100% rename from grub-core/include/grub/gfxmenu_view.h rename to include/grub/gfxmenu_view.h diff --git a/grub-core/include/grub/gfxterm.h b/include/grub/gfxterm.h similarity index 100% rename from grub-core/include/grub/gfxterm.h rename to include/grub/gfxterm.h diff --git a/grub-core/include/grub/gfxwidgets.h b/include/grub/gfxwidgets.h similarity index 100% rename from grub-core/include/grub/gfxwidgets.h rename to include/grub/gfxwidgets.h diff --git a/grub-core/include/grub/gpt_partition.h b/include/grub/gpt_partition.h similarity index 100% rename from grub-core/include/grub/gpt_partition.h rename to include/grub/gpt_partition.h diff --git a/grub-core/include/grub/gui.h b/include/grub/gui.h similarity index 100% rename from grub-core/include/grub/gui.h rename to include/grub/gui.h diff --git a/grub-core/include/grub/gui_string_util.h b/include/grub/gui_string_util.h similarity index 100% rename from grub-core/include/grub/gui_string_util.h rename to include/grub/gui_string_util.h diff --git a/grub-core/include/grub/gzio.h b/include/grub/gzio.h similarity index 100% rename from grub-core/include/grub/gzio.h rename to include/grub/gzio.h diff --git a/grub-core/include/grub/hfs.h b/include/grub/hfs.h similarity index 100% rename from grub-core/include/grub/hfs.h rename to include/grub/hfs.h diff --git a/grub-core/include/grub/i18n.h b/include/grub/i18n.h similarity index 100% rename from grub-core/include/grub/i18n.h rename to include/grub/i18n.h diff --git a/grub-core/include/grub/i386/at_keyboard.h b/include/grub/i386/at_keyboard.h similarity index 100% rename from grub-core/include/grub/i386/at_keyboard.h rename to include/grub/i386/at_keyboard.h diff --git a/grub-core/include/grub/i386/bsd.h b/include/grub/i386/bsd.h similarity index 100% rename from grub-core/include/grub/i386/bsd.h rename to include/grub/i386/bsd.h diff --git a/grub-core/include/grub/i386/cmos.h b/include/grub/i386/cmos.h similarity index 100% rename from grub-core/include/grub/i386/cmos.h rename to include/grub/i386/cmos.h diff --git a/grub-core/include/grub/i386/coreboot/boot.h b/include/grub/i386/coreboot/boot.h similarity index 100% rename from grub-core/include/grub/i386/coreboot/boot.h rename to include/grub/i386/coreboot/boot.h diff --git a/grub-core/include/grub/i386/coreboot/console.h b/include/grub/i386/coreboot/console.h similarity index 100% rename from grub-core/include/grub/i386/coreboot/console.h rename to include/grub/i386/coreboot/console.h diff --git a/grub-core/include/grub/i386/coreboot/init.h b/include/grub/i386/coreboot/init.h similarity index 100% rename from grub-core/include/grub/i386/coreboot/init.h rename to include/grub/i386/coreboot/init.h diff --git a/grub-core/include/grub/i386/coreboot/loader.h b/include/grub/i386/coreboot/loader.h similarity index 100% rename from grub-core/include/grub/i386/coreboot/loader.h rename to include/grub/i386/coreboot/loader.h diff --git a/grub-core/include/grub/i386/coreboot/memory.h b/include/grub/i386/coreboot/memory.h similarity index 100% rename from grub-core/include/grub/i386/coreboot/memory.h rename to include/grub/i386/coreboot/memory.h diff --git a/grub-core/include/grub/i386/coreboot/serial.h b/include/grub/i386/coreboot/serial.h similarity index 100% rename from grub-core/include/grub/i386/coreboot/serial.h rename to include/grub/i386/coreboot/serial.h diff --git a/grub-core/include/grub/i386/coreboot/time.h b/include/grub/i386/coreboot/time.h similarity index 100% rename from grub-core/include/grub/i386/coreboot/time.h rename to include/grub/i386/coreboot/time.h diff --git a/grub-core/include/grub/i386/cpuid.h b/include/grub/i386/cpuid.h similarity index 100% rename from grub-core/include/grub/i386/cpuid.h rename to include/grub/i386/cpuid.h diff --git a/grub-core/include/grub/i386/efi/loader.h b/include/grub/i386/efi/loader.h similarity index 100% rename from grub-core/include/grub/i386/efi/loader.h rename to include/grub/i386/efi/loader.h diff --git a/grub-core/include/grub/i386/efi/memory.h b/include/grub/i386/efi/memory.h similarity index 100% rename from grub-core/include/grub/i386/efi/memory.h rename to include/grub/i386/efi/memory.h diff --git a/grub-core/include/grub/i386/efi/serial.h b/include/grub/i386/efi/serial.h similarity index 100% rename from grub-core/include/grub/i386/efi/serial.h rename to include/grub/i386/efi/serial.h diff --git a/grub-core/include/grub/i386/efi/time.h b/include/grub/i386/efi/time.h similarity index 100% rename from grub-core/include/grub/i386/efi/time.h rename to include/grub/i386/efi/time.h diff --git a/grub-core/include/grub/i386/efiemu.h b/include/grub/i386/efiemu.h similarity index 100% rename from grub-core/include/grub/i386/efiemu.h rename to include/grub/i386/efiemu.h diff --git a/grub-core/include/grub/i386/freebsd_linker.h b/include/grub/i386/freebsd_linker.h similarity index 100% rename from grub-core/include/grub/i386/freebsd_linker.h rename to include/grub/i386/freebsd_linker.h diff --git a/grub-core/include/grub/i386/freebsd_reboot.h b/include/grub/i386/freebsd_reboot.h similarity index 100% rename from grub-core/include/grub/i386/freebsd_reboot.h rename to include/grub/i386/freebsd_reboot.h diff --git a/grub-core/include/grub/i386/ieee1275/ieee1275.h b/include/grub/i386/ieee1275/ieee1275.h similarity index 100% rename from grub-core/include/grub/i386/ieee1275/ieee1275.h rename to include/grub/i386/ieee1275/ieee1275.h diff --git a/grub-core/include/grub/i386/ieee1275/loader.h b/include/grub/i386/ieee1275/loader.h similarity index 100% rename from grub-core/include/grub/i386/ieee1275/loader.h rename to include/grub/i386/ieee1275/loader.h diff --git a/grub-core/include/grub/i386/ieee1275/memory.h b/include/grub/i386/ieee1275/memory.h similarity index 100% rename from grub-core/include/grub/i386/ieee1275/memory.h rename to include/grub/i386/ieee1275/memory.h diff --git a/grub-core/include/grub/i386/ieee1275/serial.h b/include/grub/i386/ieee1275/serial.h similarity index 100% rename from grub-core/include/grub/i386/ieee1275/serial.h rename to include/grub/i386/ieee1275/serial.h diff --git a/grub-core/include/grub/i386/ieee1275/time.h b/include/grub/i386/ieee1275/time.h similarity index 100% rename from grub-core/include/grub/i386/ieee1275/time.h rename to include/grub/i386/ieee1275/time.h diff --git a/grub-core/include/grub/i386/io.h b/include/grub/i386/io.h similarity index 100% rename from grub-core/include/grub/i386/io.h rename to include/grub/i386/io.h diff --git a/grub-core/include/grub/i386/linux.h b/include/grub/i386/linux.h similarity index 100% rename from grub-core/include/grub/i386/linux.h rename to include/grub/i386/linux.h diff --git a/grub-core/include/grub/i386/loader.h b/include/grub/i386/loader.h similarity index 100% rename from grub-core/include/grub/i386/loader.h rename to include/grub/i386/loader.h diff --git a/grub-core/include/grub/i386/macho.h b/include/grub/i386/macho.h similarity index 100% rename from grub-core/include/grub/i386/macho.h rename to include/grub/i386/macho.h diff --git a/grub-core/include/grub/i386/memory.h b/include/grub/i386/memory.h similarity index 100% rename from grub-core/include/grub/i386/memory.h rename to include/grub/i386/memory.h diff --git a/grub-core/include/grub/i386/multiboot.h b/include/grub/i386/multiboot.h similarity index 100% rename from grub-core/include/grub/i386/multiboot.h rename to include/grub/i386/multiboot.h diff --git a/grub-core/include/grub/i386/multiboot/boot.h b/include/grub/i386/multiboot/boot.h similarity index 100% rename from grub-core/include/grub/i386/multiboot/boot.h rename to include/grub/i386/multiboot/boot.h diff --git a/grub-core/include/grub/i386/multiboot/console.h b/include/grub/i386/multiboot/console.h similarity index 100% rename from grub-core/include/grub/i386/multiboot/console.h rename to include/grub/i386/multiboot/console.h diff --git a/grub-core/include/grub/i386/multiboot/init.h b/include/grub/i386/multiboot/init.h similarity index 100% rename from grub-core/include/grub/i386/multiboot/init.h rename to include/grub/i386/multiboot/init.h diff --git a/grub-core/include/grub/i386/multiboot/kernel.h b/include/grub/i386/multiboot/kernel.h similarity index 100% rename from grub-core/include/grub/i386/multiboot/kernel.h rename to include/grub/i386/multiboot/kernel.h diff --git a/grub-core/include/grub/i386/multiboot/loader.h b/include/grub/i386/multiboot/loader.h similarity index 100% rename from grub-core/include/grub/i386/multiboot/loader.h rename to include/grub/i386/multiboot/loader.h diff --git a/grub-core/include/grub/i386/multiboot/memory.h b/include/grub/i386/multiboot/memory.h similarity index 100% rename from grub-core/include/grub/i386/multiboot/memory.h rename to include/grub/i386/multiboot/memory.h diff --git a/grub-core/include/grub/i386/multiboot/serial.h b/include/grub/i386/multiboot/serial.h similarity index 100% rename from grub-core/include/grub/i386/multiboot/serial.h rename to include/grub/i386/multiboot/serial.h diff --git a/grub-core/include/grub/i386/multiboot/time.h b/include/grub/i386/multiboot/time.h similarity index 100% rename from grub-core/include/grub/i386/multiboot/time.h rename to include/grub/i386/multiboot/time.h diff --git a/grub-core/include/grub/i386/netbsd_bootinfo.h b/include/grub/i386/netbsd_bootinfo.h similarity index 100% rename from grub-core/include/grub/i386/netbsd_bootinfo.h rename to include/grub/i386/netbsd_bootinfo.h diff --git a/grub-core/include/grub/i386/netbsd_reboot.h b/include/grub/i386/netbsd_reboot.h similarity index 100% rename from grub-core/include/grub/i386/netbsd_reboot.h rename to include/grub/i386/netbsd_reboot.h diff --git a/grub-core/include/grub/i386/openbsd_bootarg.h b/include/grub/i386/openbsd_bootarg.h similarity index 100% rename from grub-core/include/grub/i386/openbsd_bootarg.h rename to include/grub/i386/openbsd_bootarg.h diff --git a/grub-core/include/grub/i386/openbsd_reboot.h b/include/grub/i386/openbsd_reboot.h similarity index 100% rename from grub-core/include/grub/i386/openbsd_reboot.h rename to include/grub/i386/openbsd_reboot.h diff --git a/grub-core/include/grub/i386/pc/biosdisk.h b/include/grub/i386/pc/biosdisk.h similarity index 100% rename from grub-core/include/grub/i386/pc/biosdisk.h rename to include/grub/i386/pc/biosdisk.h diff --git a/grub-core/include/grub/i386/pc/biosnum.h b/include/grub/i386/pc/biosnum.h similarity index 100% rename from grub-core/include/grub/i386/pc/biosnum.h rename to include/grub/i386/pc/biosnum.h diff --git a/grub-core/include/grub/i386/pc/boot.h b/include/grub/i386/pc/boot.h similarity index 100% rename from grub-core/include/grub/i386/pc/boot.h rename to include/grub/i386/pc/boot.h diff --git a/grub-core/include/grub/i386/pc/chainloader.h b/include/grub/i386/pc/chainloader.h similarity index 100% rename from grub-core/include/grub/i386/pc/chainloader.h rename to include/grub/i386/pc/chainloader.h diff --git a/grub-core/include/grub/i386/pc/console.h b/include/grub/i386/pc/console.h similarity index 100% rename from grub-core/include/grub/i386/pc/console.h rename to include/grub/i386/pc/console.h diff --git a/grub-core/include/grub/i386/pc/efiemu.h b/include/grub/i386/pc/efiemu.h similarity index 100% rename from grub-core/include/grub/i386/pc/efiemu.h rename to include/grub/i386/pc/efiemu.h diff --git a/grub-core/include/grub/i386/pc/init.h b/include/grub/i386/pc/init.h similarity index 100% rename from grub-core/include/grub/i386/pc/init.h rename to include/grub/i386/pc/init.h diff --git a/grub-core/include/grub/i386/pc/kernel.h b/include/grub/i386/pc/kernel.h similarity index 100% rename from grub-core/include/grub/i386/pc/kernel.h rename to include/grub/i386/pc/kernel.h diff --git a/grub-core/include/grub/i386/pc/loader.h b/include/grub/i386/pc/loader.h similarity index 100% rename from grub-core/include/grub/i386/pc/loader.h rename to include/grub/i386/pc/loader.h diff --git a/grub-core/include/grub/i386/pc/memory.h b/include/grub/i386/pc/memory.h similarity index 100% rename from grub-core/include/grub/i386/pc/memory.h rename to include/grub/i386/pc/memory.h diff --git a/grub-core/include/grub/i386/pc/pxe.h b/include/grub/i386/pc/pxe.h similarity index 100% rename from grub-core/include/grub/i386/pc/pxe.h rename to include/grub/i386/pc/pxe.h diff --git a/grub-core/include/grub/i386/pc/time.h b/include/grub/i386/pc/time.h similarity index 100% rename from grub-core/include/grub/i386/pc/time.h rename to include/grub/i386/pc/time.h diff --git a/grub-core/include/grub/i386/pc/vbe.h b/include/grub/i386/pc/vbe.h similarity index 100% rename from grub-core/include/grub/i386/pc/vbe.h rename to include/grub/i386/pc/vbe.h diff --git a/grub-core/include/grub/i386/pc/vga.h b/include/grub/i386/pc/vga.h similarity index 100% rename from grub-core/include/grub/i386/pc/vga.h rename to include/grub/i386/pc/vga.h diff --git a/grub-core/include/grub/i386/pci.h b/include/grub/i386/pci.h similarity index 100% rename from grub-core/include/grub/i386/pci.h rename to include/grub/i386/pci.h diff --git a/grub-core/include/grub/i386/pit.h b/include/grub/i386/pit.h similarity index 100% rename from grub-core/include/grub/i386/pit.h rename to include/grub/i386/pit.h diff --git a/grub-core/include/grub/i386/qemu/boot.h b/include/grub/i386/qemu/boot.h similarity index 100% rename from grub-core/include/grub/i386/qemu/boot.h rename to include/grub/i386/qemu/boot.h diff --git a/grub-core/include/grub/i386/qemu/console.h b/include/grub/i386/qemu/console.h similarity index 100% rename from grub-core/include/grub/i386/qemu/console.h rename to include/grub/i386/qemu/console.h diff --git a/grub-core/include/grub/i386/qemu/init.h b/include/grub/i386/qemu/init.h similarity index 100% rename from grub-core/include/grub/i386/qemu/init.h rename to include/grub/i386/qemu/init.h diff --git a/grub-core/include/grub/i386/qemu/kernel.h b/include/grub/i386/qemu/kernel.h similarity index 100% rename from grub-core/include/grub/i386/qemu/kernel.h rename to include/grub/i386/qemu/kernel.h diff --git a/grub-core/include/grub/i386/qemu/loader.h b/include/grub/i386/qemu/loader.h similarity index 100% rename from grub-core/include/grub/i386/qemu/loader.h rename to include/grub/i386/qemu/loader.h diff --git a/grub-core/include/grub/i386/qemu/memory.h b/include/grub/i386/qemu/memory.h similarity index 100% rename from grub-core/include/grub/i386/qemu/memory.h rename to include/grub/i386/qemu/memory.h diff --git a/grub-core/include/grub/i386/qemu/serial.h b/include/grub/i386/qemu/serial.h similarity index 100% rename from grub-core/include/grub/i386/qemu/serial.h rename to include/grub/i386/qemu/serial.h diff --git a/grub-core/include/grub/i386/qemu/time.h b/include/grub/i386/qemu/time.h similarity index 100% rename from grub-core/include/grub/i386/qemu/time.h rename to include/grub/i386/qemu/time.h diff --git a/grub-core/include/grub/i386/relocator.h b/include/grub/i386/relocator.h similarity index 100% rename from grub-core/include/grub/i386/relocator.h rename to include/grub/i386/relocator.h diff --git a/grub-core/include/grub/i386/setjmp.h b/include/grub/i386/setjmp.h similarity index 100% rename from grub-core/include/grub/i386/setjmp.h rename to include/grub/i386/setjmp.h diff --git a/grub-core/include/grub/i386/time.h b/include/grub/i386/time.h similarity index 100% rename from grub-core/include/grub/i386/time.h rename to include/grub/i386/time.h diff --git a/grub-core/include/grub/i386/tsc.h b/include/grub/i386/tsc.h similarity index 100% rename from grub-core/include/grub/i386/tsc.h rename to include/grub/i386/tsc.h diff --git a/grub-core/include/grub/i386/types.h b/include/grub/i386/types.h similarity index 100% rename from grub-core/include/grub/i386/types.h rename to include/grub/i386/types.h diff --git a/grub-core/include/grub/i386/vga_common.h b/include/grub/i386/vga_common.h similarity index 100% rename from grub-core/include/grub/i386/vga_common.h rename to include/grub/i386/vga_common.h diff --git a/grub-core/include/grub/i386/xnu.h b/include/grub/i386/xnu.h similarity index 100% rename from grub-core/include/grub/i386/xnu.h rename to include/grub/i386/xnu.h diff --git a/grub-core/include/grub/icon_manager.h b/include/grub/icon_manager.h similarity index 100% rename from grub-core/include/grub/icon_manager.h rename to include/grub/icon_manager.h diff --git a/grub-core/include/grub/ieee1275/console.h b/include/grub/ieee1275/console.h similarity index 100% rename from grub-core/include/grub/ieee1275/console.h rename to include/grub/ieee1275/console.h diff --git a/grub-core/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h similarity index 100% rename from grub-core/include/grub/ieee1275/ieee1275.h rename to include/grub/ieee1275/ieee1275.h diff --git a/grub-core/include/grub/ieee1275/ofdisk.h b/include/grub/ieee1275/ofdisk.h similarity index 100% rename from grub-core/include/grub/ieee1275/ofdisk.h rename to include/grub/ieee1275/ofdisk.h diff --git a/grub-core/include/grub/kernel.h b/include/grub/kernel.h similarity index 100% rename from grub-core/include/grub/kernel.h rename to include/grub/kernel.h diff --git a/grub-core/include/grub/lib/LzFind.h b/include/grub/lib/LzFind.h similarity index 100% rename from grub-core/include/grub/lib/LzFind.h rename to include/grub/lib/LzFind.h diff --git a/grub-core/include/grub/lib/LzHash.h b/include/grub/lib/LzHash.h similarity index 100% rename from grub-core/include/grub/lib/LzHash.h rename to include/grub/lib/LzHash.h diff --git a/grub-core/include/grub/lib/LzmaDec.h b/include/grub/lib/LzmaDec.h similarity index 100% rename from grub-core/include/grub/lib/LzmaDec.h rename to include/grub/lib/LzmaDec.h diff --git a/grub-core/include/grub/lib/LzmaEnc.h b/include/grub/lib/LzmaEnc.h similarity index 100% rename from grub-core/include/grub/lib/LzmaEnc.h rename to include/grub/lib/LzmaEnc.h diff --git a/grub-core/include/grub/lib/LzmaTypes.h b/include/grub/lib/LzmaTypes.h similarity index 100% rename from grub-core/include/grub/lib/LzmaTypes.h rename to include/grub/lib/LzmaTypes.h diff --git a/grub-core/include/grub/lib/arg.h b/include/grub/lib/arg.h similarity index 100% rename from grub-core/include/grub/lib/arg.h rename to include/grub/lib/arg.h diff --git a/grub-core/include/grub/lib/crc.h b/include/grub/lib/crc.h similarity index 100% rename from grub-core/include/grub/lib/crc.h rename to include/grub/lib/crc.h diff --git a/grub-core/include/grub/lib/envblk.h b/include/grub/lib/envblk.h similarity index 100% rename from grub-core/include/grub/lib/envblk.h rename to include/grub/lib/envblk.h diff --git a/grub-core/include/grub/lib/hexdump.h b/include/grub/lib/hexdump.h similarity index 100% rename from grub-core/include/grub/lib/hexdump.h rename to include/grub/lib/hexdump.h diff --git a/grub-core/include/grub/libgcc.h b/include/grub/libgcc.h similarity index 100% rename from grub-core/include/grub/libgcc.h rename to include/grub/libgcc.h diff --git a/grub-core/include/grub/libpciaccess.h b/include/grub/libpciaccess.h similarity index 100% rename from grub-core/include/grub/libpciaccess.h rename to include/grub/libpciaccess.h diff --git a/grub-core/include/grub/libusb.h b/include/grub/libusb.h similarity index 100% rename from grub-core/include/grub/libusb.h rename to include/grub/libusb.h diff --git a/grub-core/include/grub/list.h b/include/grub/list.h similarity index 100% rename from grub-core/include/grub/list.h rename to include/grub/list.h diff --git a/grub-core/include/grub/loader.h b/include/grub/loader.h similarity index 100% rename from grub-core/include/grub/loader.h rename to include/grub/loader.h diff --git a/grub-core/include/grub/lvm.h b/include/grub/lvm.h similarity index 100% rename from grub-core/include/grub/lvm.h rename to include/grub/lvm.h diff --git a/grub-core/include/grub/macho.h b/include/grub/macho.h similarity index 100% rename from grub-core/include/grub/macho.h rename to include/grub/macho.h diff --git a/grub-core/include/grub/machoload.h b/include/grub/machoload.h similarity index 100% rename from grub-core/include/grub/machoload.h rename to include/grub/machoload.h diff --git a/grub-core/include/grub/memory.h b/include/grub/memory.h similarity index 100% rename from grub-core/include/grub/memory.h rename to include/grub/memory.h diff --git a/grub-core/include/grub/menu.h b/include/grub/menu.h similarity index 100% rename from grub-core/include/grub/menu.h rename to include/grub/menu.h diff --git a/grub-core/include/grub/menu_viewer.h b/include/grub/menu_viewer.h similarity index 100% rename from grub-core/include/grub/menu_viewer.h rename to include/grub/menu_viewer.h diff --git a/grub-core/include/grub/mips/at_keyboard.h b/include/grub/mips/at_keyboard.h similarity index 100% rename from grub-core/include/grub/mips/at_keyboard.h rename to include/grub/mips/at_keyboard.h diff --git a/grub-core/include/grub/mips/cache.h b/include/grub/mips/cache.h similarity index 100% rename from grub-core/include/grub/mips/cache.h rename to include/grub/mips/cache.h diff --git a/grub-core/include/grub/mips/cmos.h b/include/grub/mips/cmos.h similarity index 100% rename from grub-core/include/grub/mips/cmos.h rename to include/grub/mips/cmos.h diff --git a/grub-core/include/grub/mips/io.h b/include/grub/mips/io.h similarity index 100% rename from grub-core/include/grub/mips/io.h rename to include/grub/mips/io.h diff --git a/grub-core/include/grub/mips/loongson.h b/include/grub/mips/loongson.h similarity index 100% rename from grub-core/include/grub/mips/loongson.h rename to include/grub/mips/loongson.h diff --git a/grub-core/include/grub/mips/multiboot.h b/include/grub/mips/multiboot.h similarity index 100% rename from grub-core/include/grub/mips/multiboot.h rename to include/grub/mips/multiboot.h diff --git a/grub-core/include/grub/mips/pci.h b/include/grub/mips/pci.h similarity index 100% rename from grub-core/include/grub/mips/pci.h rename to include/grub/mips/pci.h diff --git a/grub-core/include/grub/mips/qemu-mips/kernel.h b/include/grub/mips/qemu-mips/kernel.h similarity index 100% rename from grub-core/include/grub/mips/qemu-mips/kernel.h rename to include/grub/mips/qemu-mips/kernel.h diff --git a/grub-core/include/grub/mips/qemu-mips/loader.h b/include/grub/mips/qemu-mips/loader.h similarity index 100% rename from grub-core/include/grub/mips/qemu-mips/loader.h rename to include/grub/mips/qemu-mips/loader.h diff --git a/grub-core/include/grub/mips/qemu-mips/memory.h b/include/grub/mips/qemu-mips/memory.h similarity index 100% rename from grub-core/include/grub/mips/qemu-mips/memory.h rename to include/grub/mips/qemu-mips/memory.h diff --git a/grub-core/include/grub/mips/qemu-mips/serial.h b/include/grub/mips/qemu-mips/serial.h similarity index 100% rename from grub-core/include/grub/mips/qemu-mips/serial.h rename to include/grub/mips/qemu-mips/serial.h diff --git a/grub-core/include/grub/mips/qemu-mips/time.h b/include/grub/mips/qemu-mips/time.h similarity index 100% rename from grub-core/include/grub/mips/qemu-mips/time.h rename to include/grub/mips/qemu-mips/time.h diff --git a/grub-core/include/grub/mips/relocator.h b/include/grub/mips/relocator.h similarity index 100% rename from grub-core/include/grub/mips/relocator.h rename to include/grub/mips/relocator.h diff --git a/grub-core/include/grub/mips/setjmp.h b/include/grub/mips/setjmp.h similarity index 100% rename from grub-core/include/grub/mips/setjmp.h rename to include/grub/mips/setjmp.h diff --git a/grub-core/include/grub/mips/time.h b/include/grub/mips/time.h similarity index 100% rename from grub-core/include/grub/mips/time.h rename to include/grub/mips/time.h diff --git a/grub-core/include/grub/mips/types.h b/include/grub/mips/types.h similarity index 100% rename from grub-core/include/grub/mips/types.h rename to include/grub/mips/types.h diff --git a/grub-core/include/grub/mips/yeeloong/at_keyboard.h b/include/grub/mips/yeeloong/at_keyboard.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/at_keyboard.h rename to include/grub/mips/yeeloong/at_keyboard.h diff --git a/grub-core/include/grub/mips/yeeloong/cmos.h b/include/grub/mips/yeeloong/cmos.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/cmos.h rename to include/grub/mips/yeeloong/cmos.h diff --git a/grub-core/include/grub/mips/yeeloong/ec.h b/include/grub/mips/yeeloong/ec.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/ec.h rename to include/grub/mips/yeeloong/ec.h diff --git a/grub-core/include/grub/mips/yeeloong/kernel.h b/include/grub/mips/yeeloong/kernel.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/kernel.h rename to include/grub/mips/yeeloong/kernel.h diff --git a/grub-core/include/grub/mips/yeeloong/loader.h b/include/grub/mips/yeeloong/loader.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/loader.h rename to include/grub/mips/yeeloong/loader.h diff --git a/grub-core/include/grub/mips/yeeloong/memory.h b/include/grub/mips/yeeloong/memory.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/memory.h rename to include/grub/mips/yeeloong/memory.h diff --git a/grub-core/include/grub/mips/yeeloong/pci.h b/include/grub/mips/yeeloong/pci.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/pci.h rename to include/grub/mips/yeeloong/pci.h diff --git a/grub-core/include/grub/mips/yeeloong/serial.h b/include/grub/mips/yeeloong/serial.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/serial.h rename to include/grub/mips/yeeloong/serial.h diff --git a/grub-core/include/grub/mips/yeeloong/time.h b/include/grub/mips/yeeloong/time.h similarity index 100% rename from grub-core/include/grub/mips/yeeloong/time.h rename to include/grub/mips/yeeloong/time.h diff --git a/grub-core/include/grub/misc.h b/include/grub/misc.h similarity index 100% rename from grub-core/include/grub/misc.h rename to include/grub/misc.h diff --git a/grub-core/include/grub/mm.h b/include/grub/mm.h similarity index 100% rename from grub-core/include/grub/mm.h rename to include/grub/mm.h diff --git a/grub-core/include/grub/msdos_partition.h b/include/grub/msdos_partition.h similarity index 100% rename from grub-core/include/grub/msdos_partition.h rename to include/grub/msdos_partition.h diff --git a/grub-core/include/grub/multiboot.h b/include/grub/multiboot.h similarity index 100% rename from grub-core/include/grub/multiboot.h rename to include/grub/multiboot.h diff --git a/grub-core/include/grub/multiboot_loader.h b/include/grub/multiboot_loader.h similarity index 100% rename from grub-core/include/grub/multiboot_loader.h rename to include/grub/multiboot_loader.h diff --git a/grub-core/include/grub/net.h b/include/grub/net.h similarity index 100% rename from grub-core/include/grub/net.h rename to include/grub/net.h diff --git a/grub-core/include/grub/normal.h b/include/grub/normal.h similarity index 100% rename from grub-core/include/grub/normal.h rename to include/grub/normal.h diff --git a/grub-core/include/grub/ntfs.h b/include/grub/ntfs.h similarity index 100% rename from grub-core/include/grub/ntfs.h rename to include/grub/ntfs.h diff --git a/grub-core/include/grub/offsets.h b/include/grub/offsets.h similarity index 100% rename from grub-core/include/grub/offsets.h rename to include/grub/offsets.h diff --git a/grub-core/include/grub/parser.h b/include/grub/parser.h similarity index 100% rename from grub-core/include/grub/parser.h rename to include/grub/parser.h diff --git a/grub-core/include/grub/partition.h b/include/grub/partition.h similarity index 100% rename from grub-core/include/grub/partition.h rename to include/grub/partition.h diff --git a/grub-core/include/grub/parttool.h b/include/grub/parttool.h similarity index 100% rename from grub-core/include/grub/parttool.h rename to include/grub/parttool.h diff --git a/grub-core/include/grub/pci.h b/include/grub/pci.h similarity index 100% rename from grub-core/include/grub/pci.h rename to include/grub/pci.h diff --git a/grub-core/include/grub/pciutils.h b/include/grub/pciutils.h similarity index 100% rename from grub-core/include/grub/pciutils.h rename to include/grub/pciutils.h diff --git a/grub-core/include/grub/powerpc/ieee1275/biosdisk.h b/include/grub/powerpc/ieee1275/biosdisk.h similarity index 100% rename from grub-core/include/grub/powerpc/ieee1275/biosdisk.h rename to include/grub/powerpc/ieee1275/biosdisk.h diff --git a/grub-core/include/grub/powerpc/ieee1275/ieee1275.h b/include/grub/powerpc/ieee1275/ieee1275.h similarity index 100% rename from grub-core/include/grub/powerpc/ieee1275/ieee1275.h rename to include/grub/powerpc/ieee1275/ieee1275.h diff --git a/grub-core/include/grub/powerpc/ieee1275/loader.h b/include/grub/powerpc/ieee1275/loader.h similarity index 100% rename from grub-core/include/grub/powerpc/ieee1275/loader.h rename to include/grub/powerpc/ieee1275/loader.h diff --git a/grub-core/include/grub/powerpc/ieee1275/memory.h b/include/grub/powerpc/ieee1275/memory.h similarity index 100% rename from grub-core/include/grub/powerpc/ieee1275/memory.h rename to include/grub/powerpc/ieee1275/memory.h diff --git a/grub-core/include/grub/powerpc/ieee1275/time.h b/include/grub/powerpc/ieee1275/time.h similarity index 100% rename from grub-core/include/grub/powerpc/ieee1275/time.h rename to include/grub/powerpc/ieee1275/time.h diff --git a/grub-core/include/grub/powerpc/ieee1275/util/biosdisk.h b/include/grub/powerpc/ieee1275/util/biosdisk.h similarity index 100% rename from grub-core/include/grub/powerpc/ieee1275/util/biosdisk.h rename to include/grub/powerpc/ieee1275/util/biosdisk.h diff --git a/grub-core/include/grub/powerpc/kernel.h b/include/grub/powerpc/kernel.h similarity index 100% rename from grub-core/include/grub/powerpc/kernel.h rename to include/grub/powerpc/kernel.h diff --git a/grub-core/include/grub/powerpc/setjmp.h b/include/grub/powerpc/setjmp.h similarity index 100% rename from grub-core/include/grub/powerpc/setjmp.h rename to include/grub/powerpc/setjmp.h diff --git a/grub-core/include/grub/powerpc/time.h b/include/grub/powerpc/time.h similarity index 100% rename from grub-core/include/grub/powerpc/time.h rename to include/grub/powerpc/time.h diff --git a/grub-core/include/grub/powerpc/types.h b/include/grub/powerpc/types.h similarity index 100% rename from grub-core/include/grub/powerpc/types.h rename to include/grub/powerpc/types.h diff --git a/grub-core/include/grub/raid.h b/include/grub/raid.h similarity index 100% rename from grub-core/include/grub/raid.h rename to include/grub/raid.h diff --git a/grub-core/include/grub/reader.h b/include/grub/reader.h similarity index 100% rename from grub-core/include/grub/reader.h rename to include/grub/reader.h diff --git a/grub-core/include/grub/script_sh.h b/include/grub/script_sh.h similarity index 100% rename from grub-core/include/grub/script_sh.h rename to include/grub/script_sh.h diff --git a/grub-core/include/grub/scsi.h b/include/grub/scsi.h similarity index 100% rename from grub-core/include/grub/scsi.h rename to include/grub/scsi.h diff --git a/grub-core/include/grub/scsicmd.h b/include/grub/scsicmd.h similarity index 100% rename from grub-core/include/grub/scsicmd.h rename to include/grub/scsicmd.h diff --git a/grub-core/include/grub/sdl.h b/include/grub/sdl.h similarity index 100% rename from grub-core/include/grub/sdl.h rename to include/grub/sdl.h diff --git a/grub-core/include/grub/search.h b/include/grub/search.h similarity index 100% rename from grub-core/include/grub/search.h rename to include/grub/search.h diff --git a/grub-core/include/grub/serial.h b/include/grub/serial.h similarity index 100% rename from grub-core/include/grub/serial.h rename to include/grub/serial.h diff --git a/grub-core/include/grub/setjmp.h b/include/grub/setjmp.h similarity index 100% rename from grub-core/include/grub/setjmp.h rename to include/grub/setjmp.h diff --git a/grub-core/include/grub/smbus.h b/include/grub/smbus.h similarity index 100% rename from grub-core/include/grub/smbus.h rename to include/grub/smbus.h diff --git a/grub-core/include/grub/sparc64/ieee1275/boot.h b/include/grub/sparc64/ieee1275/boot.h similarity index 100% rename from grub-core/include/grub/sparc64/ieee1275/boot.h rename to include/grub/sparc64/ieee1275/boot.h diff --git a/grub-core/include/grub/sparc64/ieee1275/ieee1275.h b/include/grub/sparc64/ieee1275/ieee1275.h similarity index 100% rename from grub-core/include/grub/sparc64/ieee1275/ieee1275.h rename to include/grub/sparc64/ieee1275/ieee1275.h diff --git a/grub-core/include/grub/sparc64/ieee1275/kernel.h b/include/grub/sparc64/ieee1275/kernel.h similarity index 100% rename from grub-core/include/grub/sparc64/ieee1275/kernel.h rename to include/grub/sparc64/ieee1275/kernel.h diff --git a/grub-core/include/grub/sparc64/ieee1275/loader.h b/include/grub/sparc64/ieee1275/loader.h similarity index 100% rename from grub-core/include/grub/sparc64/ieee1275/loader.h rename to include/grub/sparc64/ieee1275/loader.h diff --git a/grub-core/include/grub/sparc64/ieee1275/memory.h b/include/grub/sparc64/ieee1275/memory.h similarity index 100% rename from grub-core/include/grub/sparc64/ieee1275/memory.h rename to include/grub/sparc64/ieee1275/memory.h diff --git a/grub-core/include/grub/sparc64/ieee1275/time.h b/include/grub/sparc64/ieee1275/time.h similarity index 100% rename from grub-core/include/grub/sparc64/ieee1275/time.h rename to include/grub/sparc64/ieee1275/time.h diff --git a/grub-core/include/grub/sparc64/setjmp.h b/include/grub/sparc64/setjmp.h similarity index 100% rename from grub-core/include/grub/sparc64/setjmp.h rename to include/grub/sparc64/setjmp.h diff --git a/grub-core/include/grub/sparc64/time.h b/include/grub/sparc64/time.h similarity index 100% rename from grub-core/include/grub/sparc64/time.h rename to include/grub/sparc64/time.h diff --git a/grub-core/include/grub/sparc64/types.h b/include/grub/sparc64/types.h similarity index 100% rename from grub-core/include/grub/sparc64/types.h rename to include/grub/sparc64/types.h diff --git a/grub-core/include/grub/symbol.h b/include/grub/symbol.h similarity index 100% rename from grub-core/include/grub/symbol.h rename to include/grub/symbol.h diff --git a/grub-core/include/grub/term.h b/include/grub/term.h similarity index 100% rename from grub-core/include/grub/term.h rename to include/grub/term.h diff --git a/grub-core/include/grub/terminfo.h b/include/grub/terminfo.h similarity index 100% rename from grub-core/include/grub/terminfo.h rename to include/grub/terminfo.h diff --git a/grub-core/include/grub/test.h b/include/grub/test.h similarity index 100% rename from grub-core/include/grub/test.h rename to include/grub/test.h diff --git a/grub-core/include/grub/time.h b/include/grub/time.h similarity index 100% rename from grub-core/include/grub/time.h rename to include/grub/time.h diff --git a/grub-core/include/grub/tparm.h b/include/grub/tparm.h similarity index 100% rename from grub-core/include/grub/tparm.h rename to include/grub/tparm.h diff --git a/grub-core/include/grub/trig.h b/include/grub/trig.h similarity index 100% rename from grub-core/include/grub/trig.h rename to include/grub/trig.h diff --git a/grub-core/include/grub/types.h b/include/grub/types.h similarity index 100% rename from grub-core/include/grub/types.h rename to include/grub/types.h diff --git a/grub-core/include/grub/unicode.h b/include/grub/unicode.h similarity index 100% rename from grub-core/include/grub/unicode.h rename to include/grub/unicode.h diff --git a/grub-core/include/grub/usb.h b/include/grub/usb.h similarity index 100% rename from grub-core/include/grub/usb.h rename to include/grub/usb.h diff --git a/grub-core/include/grub/usbdesc.h b/include/grub/usbdesc.h similarity index 100% rename from grub-core/include/grub/usbdesc.h rename to include/grub/usbdesc.h diff --git a/grub-core/include/grub/usbtrans.h b/include/grub/usbtrans.h similarity index 100% rename from grub-core/include/grub/usbtrans.h rename to include/grub/usbtrans.h diff --git a/grub-core/include/grub/util/deviceiter.h b/include/grub/util/deviceiter.h similarity index 100% rename from grub-core/include/grub/util/deviceiter.h rename to include/grub/util/deviceiter.h diff --git a/grub-core/include/grub/util/lvm.h b/include/grub/util/lvm.h similarity index 100% rename from grub-core/include/grub/util/lvm.h rename to include/grub/util/lvm.h diff --git a/grub-core/include/grub/util/misc.h b/include/grub/util/misc.h similarity index 100% rename from grub-core/include/grub/util/misc.h rename to include/grub/util/misc.h diff --git a/grub-core/include/grub/util/ofpath.h b/include/grub/util/ofpath.h similarity index 100% rename from grub-core/include/grub/util/ofpath.h rename to include/grub/util/ofpath.h diff --git a/grub-core/include/grub/util/raid.h b/include/grub/util/raid.h similarity index 100% rename from grub-core/include/grub/util/raid.h rename to include/grub/util/raid.h diff --git a/grub-core/include/grub/util/resolve.h b/include/grub/util/resolve.h similarity index 100% rename from grub-core/include/grub/util/resolve.h rename to include/grub/util/resolve.h diff --git a/grub-core/include/grub/vga.h b/include/grub/vga.h similarity index 100% rename from grub-core/include/grub/vga.h rename to include/grub/vga.h diff --git a/grub-core/include/grub/video.h b/include/grub/video.h similarity index 100% rename from grub-core/include/grub/video.h rename to include/grub/video.h diff --git a/grub-core/include/grub/video_fb.h b/include/grub/video_fb.h similarity index 100% rename from grub-core/include/grub/video_fb.h rename to include/grub/video_fb.h diff --git a/grub-core/include/grub/x86_64/at_keyboard.h b/include/grub/x86_64/at_keyboard.h similarity index 100% rename from grub-core/include/grub/x86_64/at_keyboard.h rename to include/grub/x86_64/at_keyboard.h diff --git a/grub-core/include/grub/x86_64/efi/boot.h b/include/grub/x86_64/efi/boot.h similarity index 100% rename from grub-core/include/grub/x86_64/efi/boot.h rename to include/grub/x86_64/efi/boot.h diff --git a/grub-core/include/grub/x86_64/efi/loader.h b/include/grub/x86_64/efi/loader.h similarity index 100% rename from grub-core/include/grub/x86_64/efi/loader.h rename to include/grub/x86_64/efi/loader.h diff --git a/grub-core/include/grub/x86_64/efi/memory.h b/include/grub/x86_64/efi/memory.h similarity index 100% rename from grub-core/include/grub/x86_64/efi/memory.h rename to include/grub/x86_64/efi/memory.h diff --git a/grub-core/include/grub/x86_64/efi/serial.h b/include/grub/x86_64/efi/serial.h similarity index 100% rename from grub-core/include/grub/x86_64/efi/serial.h rename to include/grub/x86_64/efi/serial.h diff --git a/grub-core/include/grub/x86_64/efi/time.h b/include/grub/x86_64/efi/time.h similarity index 100% rename from grub-core/include/grub/x86_64/efi/time.h rename to include/grub/x86_64/efi/time.h diff --git a/grub-core/include/grub/x86_64/io.h b/include/grub/x86_64/io.h similarity index 100% rename from grub-core/include/grub/x86_64/io.h rename to include/grub/x86_64/io.h diff --git a/grub-core/include/grub/x86_64/linux.h b/include/grub/x86_64/linux.h similarity index 100% rename from grub-core/include/grub/x86_64/linux.h rename to include/grub/x86_64/linux.h diff --git a/grub-core/include/grub/x86_64/macho.h b/include/grub/x86_64/macho.h similarity index 100% rename from grub-core/include/grub/x86_64/macho.h rename to include/grub/x86_64/macho.h diff --git a/grub-core/include/grub/x86_64/multiboot.h b/include/grub/x86_64/multiboot.h similarity index 100% rename from grub-core/include/grub/x86_64/multiboot.h rename to include/grub/x86_64/multiboot.h diff --git a/grub-core/include/grub/x86_64/pci.h b/include/grub/x86_64/pci.h similarity index 100% rename from grub-core/include/grub/x86_64/pci.h rename to include/grub/x86_64/pci.h diff --git a/grub-core/include/grub/x86_64/relocator.h b/include/grub/x86_64/relocator.h similarity index 100% rename from grub-core/include/grub/x86_64/relocator.h rename to include/grub/x86_64/relocator.h diff --git a/grub-core/include/grub/x86_64/setjmp.h b/include/grub/x86_64/setjmp.h similarity index 100% rename from grub-core/include/grub/x86_64/setjmp.h rename to include/grub/x86_64/setjmp.h diff --git a/grub-core/include/grub/x86_64/time.h b/include/grub/x86_64/time.h similarity index 100% rename from grub-core/include/grub/x86_64/time.h rename to include/grub/x86_64/time.h diff --git a/grub-core/include/grub/x86_64/types.h b/include/grub/x86_64/types.h similarity index 100% rename from grub-core/include/grub/x86_64/types.h rename to include/grub/x86_64/types.h diff --git a/grub-core/include/grub/x86_64/xnu.h b/include/grub/x86_64/xnu.h similarity index 100% rename from grub-core/include/grub/x86_64/xnu.h rename to include/grub/x86_64/xnu.h diff --git a/grub-core/include/grub/xnu.h b/include/grub/xnu.h similarity index 100% rename from grub-core/include/grub/xnu.h rename to include/grub/xnu.h diff --git a/grub-core/include/multiboot.h b/include/multiboot.h similarity index 100% rename from grub-core/include/multiboot.h rename to include/multiboot.h diff --git a/grub-core/include/multiboot2.h b/include/multiboot2.h similarity index 100% rename from grub-core/include/multiboot2.h rename to include/multiboot2.h diff --git a/grub-core/import_gcry.py b/util/import_gcry.py similarity index 99% rename from grub-core/import_gcry.py rename to util/import_gcry.py index b9c3edcde..b63fb5501 100644 --- a/grub-core/import_gcry.py +++ b/util/import_gcry.py @@ -40,7 +40,7 @@ except: print ("WARNING: %s already exists" % cipher_dir_out) cipher_files = os.listdir (cipher_dir_in) -conf = open (os.path.join (outdir, "conf", "gcry.rmk"), "w") +conf = open (os.path.join ("conf", "gcry.rmk"), "w") conf.write ("# -*- makefile -*-\n\n") chlog = "" From 5c2d039c58dc40e2d559ac7bd0f1cdd4676463e4 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 17 Aug 2010 19:04:35 +0530 Subject: [PATCH 173/271] update .bzrignore --- .bzrignore | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/.bzrignore b/.bzrignore index ac5e3f86d..7347c0950 100644 --- a/.bzrignore +++ b/.bzrignore @@ -88,26 +88,5 @@ compile depcomp mdate-sh texinfo.tex -grub-core/ABOUT-NLS -grub-core/AUTHORS -grub-core/COPYING -grub-core/ChangeLog -grub-core/INSTALL -grub-core/Makefile.tpl -grub-core/NEWS -grub-core/README -grub-core/THANKS -grub-core/TODO -grub-core/acinclude.m4 -grub-core/compile -grub-core/config.rpath -grub-core/configure.common -grub-core/depcomp -grub-core/gentpl.py -grub-core/conf/gcry.rmk -grub-core/docs -grub-core/docs/man grub-core/lib/libgcrypt-grub -grub-core/include/grub/cpu -grub-core/include/grub/machine From c49e5dfff81d1e4af75c5fe6bd9c0ab096503950 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 17 Aug 2010 19:17:57 +0530 Subject: [PATCH 174/271] remove Makefile.kernel and Makefile.vars --- Makefile.am | 82 ++++++++++++++- grub-core/Makefile.kernel | 204 -------------------------------------- grub-core/Makefile.vars | 83 ---------------- 3 files changed, 81 insertions(+), 288 deletions(-) delete mode 100644 grub-core/Makefile.kernel delete mode 100644 grub-core/Makefile.vars diff --git a/Makefile.am b/Makefile.am index c7f3614d4..51203c00d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,7 +3,87 @@ AUTOMAKE_OPTIONS = subdir-objects SUBDIRS = . grub-core po docs EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh -include $(top_srcdir)/grub-core/Makefile.vars +grubconfdir = $(sysconfdir)/grub.d +platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) + +# Platform specific options +if COND_i386_pc + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_efi + LDFLAGS_PLATFORM = -melf_i386 +endif +if COND_x86_64_efi + LDFLAGS_PLATFORM = -melf_x86_64 +endif +if COND_i386_qemu + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_coreboot + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_ieee1275 + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_mips_yeeloong + CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache + CCASFLAGS_PLATFORM = -march=mips3 +endif +if COND_sparc64_ieee1275 + CFLAGS_PLATFORM = -mno-app-regs + LDFLAGS_PLATFORM = -melf64_sparc -mno-relax +endif + +CPPFLAGS_GRUB = -DGRUB_FILE=\"`basename $<`\" +CPPFLAGS_GRUB += -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) +CPPFLAGS_GRUB += -I$(top_srcdir)/include +CPPFLAGS_GRUB += -I$(top_builddir)/include +CCASFLAGS_GRUB = -DASM_FILE=1 + +CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers +CPPFLAGS_GCRY = -I$(top_srcdir)/$(grub_coredir)/lib/libgcrypt_wrap + +CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" +CPPFLAGS_GNULIB = -I$(top_srcdir)/$(grub_coredir)/gnulib + +CFLAGS_MKISOFS = -Wno-all -Werror +CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include + +CFLAGS_POSIX = -fno-builtin +CPPFLAGS_POSIX = -I$(top_srcdir)/$(grub_coredir)/lib/posix_wrap + +CPPFLAGS_EFIEMU = -I$(top_srcdir)/$(grub_coredir)/efiemu/runtime + +# to calm down automake +BUILT_SOURCES = +CLEANFILES = +COMMAND_FILES = +DEF_FILES = +FS_FILES = +HANDLER_FILES = +IMG_FILES = +MOD_FILES = +MODULE_FILES = +PARTMAP_FILES = +PARTTOOL_FILES = +TERMINAL_FILES = +TESTS = +UND_FILES = +VIDEO_FILES = +bin_PROGRAMS = +bin_SCRIPTS = +check_PROGRAMS = +check_SCRIPTS = +grubconf_DATA = +grubconf_SCRIPTS = +man_MANS = +noinst_DATA = +noinst_LIBRARIES = +noinst_PROGRAMS = +pkglib_SCRIPTS = +platform_DATA = +sbin_PROGRAMS = +sbin_SCRIPTS = CFLAGS_PROGRAM = $(HOST_CFLAGS) $(CFLAGS_GNULIB) LDFLAGS_PROGRAM = $(HOST_LDFLAGS) $(LDFLAGS_GNULIB) diff --git a/grub-core/Makefile.kernel b/grub-core/Makefile.kernel deleted file mode 100644 index 69c20a4fc..000000000 --- a/grub-core/Makefile.kernel +++ /dev/null @@ -1,204 +0,0 @@ -# -*- makefile -*- - -KERNEL_HEADER_FILES = -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cache.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/command.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/device.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/disk.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dl.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/elf.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/elfload.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env_private.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/err.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/file.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fs.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/reader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/symbol.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/types.h - -if COND_i386_pc -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/biosdisk.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/vga.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/vbe.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pxe.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h -endif - -if COND_i386_efi -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/time.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h -endif - -if COND_i386_coreboot -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h -endif - -if COND_i386_multiboot -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h -endif - -if COND_i386_qemu -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/boot.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/console.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/init.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h -endif - -if COND_i386_ieee1275 -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h -endif - -if COND_x86_64_efi -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/time.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pit.h -endif - -if COND_mips_yeeloong -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap_scale.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cs5536.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pci.h -endif - -if COND_powerpc_ieee1275 -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h -endif - -if COND_sparc64_ieee1275 -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/msdos_partition.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sparc64/ieee1275/ieee1275.h -endif - -if COND_emu -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/time.h -KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/types.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gzio.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/menu.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/datetime.h -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/misc.h -if COND_GRUB_EMU_SDL -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h -endif -if COND_GRUB_EMU_USB -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libusb.h -endif -if COND_GRUB_EMU_PCI -KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h -endif -endif - -symlist.h: $(top_builddir)/config.h $(KERNEL_HEADER_FILES) - @list='$^'; \ - for p in $$list; do \ - echo "#include <$$p>" >> $@ || (rm -f $@; exit 1); \ - done -CLEANFILES += symlist.h -BUILT_SOURCES += symlist.h - -symlist.c: symlist.h gensymlist.sh - $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1) - cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1) - rm -f symlist.p -CLEANFILES += symlist.c -BUILT_SOURCES += symlist.c - -noinst_DATA += kernel_syms.lst -kernel_syms.lst: $(KERNEL_HEADER_FILES) $(top_builddir)/config.h - $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) $(CFLAGS) -DGRUB_SYMBOL_GENERATOR=1 $^ >kernel_syms.input - if grep "^#define HAVE_ASM_USCORE" $(top_builddir)/config.h; then u="_"; else u=""; fi; \ - cat kernel_syms.input | grep -v '^#' | sed -n \ - -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ - -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \ - | sort -u >$@ - rm -f kernel_syms.input -CLEANFILES += kernel_syms.lst - -if COND_emu -kern/emu/grub_emu-main.$(OBJEXT):grub_emu_init.h -grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h -kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h -grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h - -grub_emu_init.h: genemuinitheader.sh $(MOD_FILES) - rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinitheader.sh $(NM) > $@ -CLEANFILES += grub_emu_init.h - -grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MOD_FILES) - rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinit.sh $(NM) > $@ -CLEANFILES += grub_emu_init.c -endif diff --git a/grub-core/Makefile.vars b/grub-core/Makefile.vars deleted file mode 100644 index 6dc536139..000000000 --- a/grub-core/Makefile.vars +++ /dev/null @@ -1,83 +0,0 @@ -# -*- makefile -*- - -grubconfdir = $(sysconfdir)/grub.d -platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) - -# Platform specific options -if COND_i386_pc - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_efi - LDFLAGS_PLATFORM = -melf_i386 -endif -if COND_x86_64_efi - LDFLAGS_PLATFORM = -melf_x86_64 -endif -if COND_i386_qemu - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_coreboot - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_ieee1275 - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_mips_yeeloong - CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache - CCASFLAGS_PLATFORM = -march=mips3 -endif -if COND_sparc64_ieee1275 - CFLAGS_PLATFORM = -mno-app-regs - LDFLAGS_PLATFORM = -melf64_sparc -mno-relax -endif - -CPPFLAGS_GRUB = -DGRUB_FILE=\"`basename $<`\" -CPPFLAGS_GRUB += -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) -CPPFLAGS_GRUB += -I$(top_srcdir)/include -CPPFLAGS_GRUB += -I$(top_builddir)/include -CCASFLAGS_GRUB = -DASM_FILE=1 - -CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -CPPFLAGS_GCRY = -I$(top_srcdir)/$(grub_coredir)/lib/libgcrypt_wrap - -CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" -CPPFLAGS_GNULIB = -I$(top_srcdir)/$(grub_coredir)/gnulib - -CFLAGS_MKISOFS = -Wno-all -Werror -CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include - -CFLAGS_POSIX = -fno-builtin -CPPFLAGS_POSIX = -I$(top_srcdir)/$(grub_coredir)/lib/posix_wrap - -CPPFLAGS_EFIEMU = -I$(top_srcdir)/$(grub_coredir)/efiemu/runtime - -# to calm down automake -BUILT_SOURCES = -CLEANFILES = -COMMAND_FILES = -DEF_FILES = -FS_FILES = -HANDLER_FILES = -IMG_FILES = -MOD_FILES = -MODULE_FILES = -PARTMAP_FILES = -PARTTOOL_FILES = -TERMINAL_FILES = -TESTS = -UND_FILES = -VIDEO_FILES = -bin_PROGRAMS = -bin_SCRIPTS = -check_PROGRAMS = -check_SCRIPTS = -grubconf_DATA = -grubconf_SCRIPTS = -man_MANS = -noinst_DATA = -noinst_LIBRARIES = -noinst_PROGRAMS = -pkglib_SCRIPTS = -platform_DATA = -sbin_PROGRAMS = -sbin_SCRIPTS = From a6b384931412a218326b3eb2e488eceb6af2fc18 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 17 Aug 2010 19:23:26 +0530 Subject: [PATCH 175/271] move grub-core/po back --- grub-core/po/Makefile.am | 0 po/Makefile.am | 0 {grub-core/po => po}/POTFILES | 0 {grub-core/po => po}/POTFILES-shell | 0 {grub-core/po => po}/README | 0 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 grub-core/po/Makefile.am delete mode 100644 po/Makefile.am rename {grub-core/po => po}/POTFILES (100%) rename {grub-core/po => po}/POTFILES-shell (100%) rename {grub-core/po => po}/README (100%) diff --git a/grub-core/po/Makefile.am b/grub-core/po/Makefile.am deleted file mode 100644 index e69de29bb..000000000 diff --git a/po/Makefile.am b/po/Makefile.am deleted file mode 100644 index e69de29bb..000000000 diff --git a/grub-core/po/POTFILES b/po/POTFILES similarity index 100% rename from grub-core/po/POTFILES rename to po/POTFILES diff --git a/grub-core/po/POTFILES-shell b/po/POTFILES-shell similarity index 100% rename from grub-core/po/POTFILES-shell rename to po/POTFILES-shell diff --git a/grub-core/po/README b/po/README similarity index 100% rename from grub-core/po/README rename to po/README From adf4ef86af926513d1480b0c31187b642338a53d Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 17 Aug 2010 19:23:50 +0530 Subject: [PATCH 176/271] add po/Makefile.am --- po/Makefile.am | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 po/Makefile.am diff --git a/po/Makefile.am b/po/Makefile.am new file mode 100644 index 000000000..e69de29bb From 76ed06b92156e16e34837183616ec71dce4df4eb Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 17 Aug 2010 19:41:43 +0530 Subject: [PATCH 177/271] moved configure.common back to configure.ac --- Makefile.am | 8 +- configure.ac | 865 ++++++++++++++++++++++++++++++++++++++++-- configure.common | 852 ----------------------------------------- grub-core/Makefile.am | 8 +- 4 files changed, 846 insertions(+), 887 deletions(-) delete mode 100644 configure.common diff --git a/Makefile.am b/Makefile.am index 51203c00d..4063a6476 100644 --- a/Makefile.am +++ b/Makefile.am @@ -41,18 +41,18 @@ CPPFLAGS_GRUB += -I$(top_builddir)/include CCASFLAGS_GRUB = -DASM_FILE=1 CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -CPPFLAGS_GCRY = -I$(top_srcdir)/$(grub_coredir)/lib/libgcrypt_wrap +CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" -CPPFLAGS_GNULIB = -I$(top_srcdir)/$(grub_coredir)/gnulib +CPPFLAGS_GNULIB = -I$(top_srcdir)/grub-core/gnulib CFLAGS_MKISOFS = -Wno-all -Werror CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include CFLAGS_POSIX = -fno-builtin -CPPFLAGS_POSIX = -I$(top_srcdir)/$(grub_coredir)/lib/posix_wrap +CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap -CPPFLAGS_EFIEMU = -I$(top_srcdir)/$(grub_coredir)/efiemu/runtime +CPPFLAGS_EFIEMU = -I$(top_srcdir)/grub-core/efiemu/runtime # to calm down automake BUILT_SOURCES = diff --git a/configure.ac b/configure.ac index dafea4545..ee01049ac 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,8 @@ +# -*- autoconf -*- + # Process this file with autoconf to produce a configure script. -# Copyright (C) 2010 Free Software Foundation, Inc. +# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. # # This configure.ac is free software; the author # gives unlimited permission to copy and/or distribute it, @@ -11,29 +13,10 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -dnl This configure script is complicated, because GRUB needs to deal -dnl with three potentially different types: -dnl -dnl build -- the environment for building GRUB -dnl host -- the environment for running utilities -dnl target -- the environment for running GRUB -dnl -dnl In addition, GRUB needs to deal with a platform specification -dnl which specifies the system running GRUB, such as firmware. -dnl This is necessary because the target type in autoconf does not -dnl describe such a system very well. -dnl -dnl The current strategy is to build utilities using host -dnl cross-compiler and grub core and modules using target -dnl cross-compiler. For this we use nested packages approach, where -dnl top-level package grub utilities is built with HOSTCC and nested -dnl package (in grub-core directory) builds with TARGETCC. - -# NOTE: grub-core/configure.ac must also be updated. AC_INIT([GRUB],[1.98],[bug-grub@gnu.org]) -AC_CONFIG_AUX_DIR([.]) -: ${CFLAGS=""} # We don't want -g -O2 +# We don't want -g -O2 by default in CFLAGS +: ${CFLAGS=""} # Checks for host and target systems. AC_CANONICAL_HOST @@ -44,13 +27,841 @@ AC_PREREQ(2.60) AC_CONFIG_SRCDIR([include/grub/dl.h]) AC_CONFIG_HEADER([config.h]) -grub_coredir='grub-core' -AC_SUBST(grub_coredir) +# Program name transformations +AC_ARG_PROGRAM -grub_utildir='.' -AC_SUBST(grub_utildir) +# Optimization flag. Allow user to override. +if test "x$TARGET_CFLAGS" = x; then + TARGET_CFLAGS="$TARGET_CFLAGS -Os" +fi -m4_include([configure.common]) +# Default HOST_CPPFLAGS +HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W" +HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/include" +HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include" +HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/gnulib" +HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1" +HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_LIBDIR=\\\"\$(pkglibdir)\\\"" +HOST_CPPFLAGS="$HOST_CPPFLAGS -DLOCALEDIR=\\\"\$(localedir)\\\"" + +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include" + +case "$target_cpu" in + i[[3456]]86) target_cpu=i386 ;; + amd64) target_cpu=x86_64 ;; + sparc) target_cpu=sparc64 ;; + mipsel|mips64el) + target_cpu=mips; + HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; + ;; + mips|mips64) + target_cpu=mips; + HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_CPU_MIPS=1"; + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_CPU_MIPS=1"; + ;; +esac + +# Specify the platform (such as firmware). +AC_ARG_WITH([platform], + AS_HELP_STRING([--with-platform=PLATFORM], + [select the host platform [[guessed]]])) + +# Guess the platform if not specified. +if test "x$with_platform" = x; then + case "$target_cpu"-"$target_vendor" in + i386-apple) platform=efi ;; + i386-*) platform=pc ;; + x86_64-apple) platform=efi ;; + x86_64-*) platform=pc ;; + powerpc-*) platform=ieee1275 ;; + powerpc64-*) platform=ieee1275 ;; + sparc64-*) platform=ieee1275 ;; + mips-*) platform=yeeloong ;; + *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;; + esac +else + platform="$with_platform" +fi + +# Adjust CPU unless target was explicitly specified. +if test -z "$target_alias"; then + case "$target_cpu"-"$platform" in + x86_64-efi) ;; + x86_64-emu) ;; + x86_64-*) target_cpu=i386 ;; + powerpc64-ieee1275) target_cpu=powerpc ;; + esac +fi + +# Check if the platform is supported, make final adjustments. +case "$target_cpu"-"$platform" in + i386-efi) ;; + x86_64-efi) ;; + i386-pc) ;; + i386-multiboot) ;; + i386-coreboot) ;; + i386-linuxbios) platform=coreboot ;; + i386-ieee1275) ;; + i386-qemu) ;; + powerpc-ieee1275) ;; + sparc64-ieee1275) ;; + mips-qemu-mips) ;; + mips-yeeloong) ;; + *-emu) ;; + *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;; +esac + +case "$target_cpu" in + i386 | powerpc) target_m32=1 ;; + x86_64 | sparc64) target_m64=1 ;; +esac + +case "$host_os" in + mingw32*) host_os=cygwin ;; +esac + +# This normalizes the names, and creates a new variable ("host_kernel") +# while at it, since the mapping is not always 1:1 (e.g. different OSes +# using the same kernel type). +case "$host_os" in + gnu*) host_kernel=hurd ;; + linux*) host_kernel=linux ;; + freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;; + netbsd*) host_kernel=netbsd ;; + cygwin) host_kernel=windows ;; +esac + +case "$platform" in + coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;; + ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; + qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;; + yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; +esac +case "$target_cpu" in + mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;; + sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;; +esac +machine_CFLAGS="$machine_CFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" + +HOST_CPPFLAGS="$HOST_CPPFLAGS $machine_CFLAGS" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CFLAGS" + +AC_SUBST(host_cpu) +AC_SUBST(host_os) +AC_SUBST(host_kernel) + +AC_SUBST(target_cpu) +AC_SUBST(platform) + +# +# Checks for build programs. +# + +# Although cmp is listed in the GNU Coding Standards as a command which +# can used directly, OpenBSD lacks cmp in the default installation. +AC_CHECK_PROGS([CMP], [cmp]) +if test "x$CMP" = x; then + AC_MSG_ERROR([cmp is not found]) +fi + +AC_CHECK_PROGS([YACC], [bison]) +if test "x$YACC" = x; then + AC_MSG_ERROR([bison is not found]) +fi + +FONT_SOURCE= + +for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do + for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont; do + if test -f "$dir/unifont.$ext"; then + FONT_SOURCE="$dir/unifont.$ext" + break 2 + fi + done +done + +if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xyeeloong ); then + AC_MSG_ERROR([qemu and yeeloong ports need unifont]) +fi + +AC_SUBST([FONT_SOURCE]) + +AC_PROG_RANLIB +AC_PROG_INSTALL +AC_PROG_AWK +AC_PROG_LEX +AC_PROG_YACC +AC_PROG_MAKE_SET +AC_PROG_MKDIR_P + +if test "x$LEX" = "x:"; then + AC_MSG_ERROR([flex is not found]) +else + version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'` + if test -n "$version" -a "$version" -ge 20535; then + : + else + AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above]) + fi +fi + +# These are not a "must". +AC_PATH_PROG(MAKEINFO, makeinfo) + +# +# Checks for host programs. +# + +AC_PROG_CC +AM_PROG_CC_C_O +AM_PROG_AS + +# Must be GCC. +test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required]) + +AC_GNU_SOURCE +AM_GNU_GETTEXT([external]) +AC_SYS_LARGEFILE + +# Identify characteristics of the host architecture. +AC_C_BIGENDIAN +AC_CHECK_SIZEOF(void *) +AC_CHECK_SIZEOF(long) + +grub_apple_cc +if test x$grub_cv_apple_cc = xyes ; then + HOST_CPPFLAGS="$HOST_CPPFLAGS -DAPPLE_CC=1" + HOST_CFLAGS="$HOST_CFLAGS -fnested-functions" +fi + +if test "x$cross_compiling" = xyes; then + AC_MSG_WARN([cannot generate manual pages while cross compiling]) +else + AC_PATH_PROG(HELP2MAN, help2man) +fi + +# Check for functions. +AC_CHECK_FUNCS(posix_memalign memalign asprintf vasprintf) + +# For grub-mkisofs +AC_HEADER_MAJOR +AC_HEADER_DIRENT +AC_CHECK_FUNCS(memmove sbrk strdup lstat getuid getgid) +AC_CHECK_HEADERS(sys/mkdev.h sys/sysmacros.h malloc.h termios.h sys/types.h) +AC_CHECK_HEADERS(unistd.h string.h strings.h sys/stat.h sys/fcntl.h limits.h) + +# For opendisk() and getrawpartition() on NetBSD. +# Used in util/deviceiter.c and in util/hostdisk.c. +AC_CHECK_HEADER([util.h], [ + AC_CHECK_LIB([util], [opendisk], [ + LIBUTIL="-lutil" + AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used]) + ]) + AC_CHECK_LIB([util], [getrawpartition], [ + LIBUTIL="-lutil" + AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used]) + ]) +]) +AC_SUBST([LIBUTIL]) + +# +# Check for host and build compilers. +# +HOST_CC=$CC +AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc], + [AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])]) + +# +# Check for target programs. +# + +# Find tools for the target. +if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then + tmp_ac_tool_prefix="$ac_tool_prefix" + ac_tool_prefix=$target_alias- + + AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc], + [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])]) + AC_CHECK_TOOL(OBJCOPY, objcopy) + AC_CHECK_TOOL(STRIP, strip) + AC_CHECK_TOOL(NM, nm) + + ac_tool_prefix="$tmp_ac_tool_prefix" +else + if test "x$TARGET_CC" = x; then + TARGET_CC=$CC + fi + AC_CHECK_TOOL(OBJCOPY, objcopy) + AC_CHECK_TOOL(STRIP, strip) + AC_CHECK_TOOL(NM, nm) +fi +AC_SUBST(HOST_CC) +AC_SUBST(BUILD_CC) +AC_SUBST(TARGET_CC) + +# Test the C compiler for the target environment. +tmp_CC="$CC" +tmp_CFLAGS="$CFLAGS" +tmp_LDFLAGS="$LDFLAGS" +tmp_CPPFLAGS="$CPPFLAGS" +tmp_LIBS="$LIBS" +CC="$TARGET_CC" +CFLAGS="$TARGET_CFLAGS" +CPPFLAGS="$TARGET_CPPFLAGS" +LDFLAGS="$TARGET_LDFLAGS" +LIBS="" + +# debug flags. +TARGET_CFLAGS="$TARGET_CFLAGS -Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes -Wundef -Wstrict-prototypes -g" +TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g" + +# Force no alignment to save space on i386. +if test "x$target_cpu" = xi386; then + AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [ + CFLAGS="$CFLAGS -falign-loops=1" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_falign_loop=yes], + [grub_cv_cc_falign_loop=no]) + ]) + + if test "x$grub_cv_cc_falign_loop" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" + else + TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" + fi + + # Some toolchains enable these features by default, but they need + # registers that aren't set up properly in GRUB. + TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow" +fi + +# By default, GCC 4.4 generates .eh_frame sections containing unwind +# information in some cases where it previously did not. GRUB doesn't need +# these and they just use up vital space. Restore the old compiler +# behaviour. +AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [ + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_fno_dwarf2_cfi_asm=yes], + [grub_cv_cc_fno_dwarf2_cfi_asm=no]) + CFLAGS="$SAVE_CFLAGS" +]) + +if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" +fi + +grub_apple_target_cc +if test x$grub_cv_apple_target_cc = xyes ; then + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DAPPLE_CC=1" + TARGET_CFLAGS="$TARGET_CFLAGS -fnested-functions" + + CFLAGS="$CFLAGS -DAPPLE_CC=1 -fnested-functions" + TARGET_APPLE_CC=1 + AC_CHECK_PROG([OBJCONV], [objconv], [objconv], []) + if test "x$OBJCONV" = x ; then + AC_CHECK_PROG([OBJCONV], [objconv], [./objconv], [], [.]) + fi + if test "x$OBJCONV" = x ; then + AC_MSG_ERROR([objconv not found which is required when building with apple compiler]) + fi + TARGET_IMG_LDSCRIPT= + TARGET_IMG_CFLAGS="-static" + TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20' + TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20' + TARGET_IMG_BASE_LDOPT="-Wl,-image_base" +else + TARGET_APPLE_CC=0 +# Use linker script if present, otherwise use builtin -N script. +if test -f "${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then + TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" + TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}" + TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" + TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" +else + TARGET_IMG_LDSCRIPT= + TARGET_IMG_LDFLAGS='-Wl,-N' + TARGET_IMG_LDFLAGS_AC='-Wl,-N' + TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" +fi +TARGET_IMG_CFLAGS= +fi + +# For platforms where ELF is not the default link format. +AC_MSG_CHECKING([for command to convert module to ELF format]) +case "${host_os}" in + cygwin) TARGET_OBJ2ELF='$(grub_utildir)/grub-pe2elf'; +# FIXME: put proper test here + AC_DEFINE([NEED_REGISTER_FRAME_INFO], 1, + [Define to 1 if GCC generates calls to __register_frame_info()]) + ;; + *) ;; +esac +AC_MSG_RESULT([$TARGET_OBJ2ELF]) + +if test "x$target_m32" = x1; then + # Force 32-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m32" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m32" + TARGET_MODULE_FORMAT="elf32" +fi + +if test "x$target_m64" = x1; then + # Force 64-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m64" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m64" + TARGET_MODULE_FORMAT="elf64" +fi + +if test "$target_cpu"-"$platform" = x86_64-efi; then + # Use large model to support 4G memory + AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [ + SAVED_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -m64 -mcmodel=large" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_mcmodel=yes], + [grub_cv_cc_mcmodel=no]) + ]) + if test "x$grub_cv_cc_mcmodel" = xno; then + AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.]) + else + TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" + fi + + # EFI writes to stack below %rsp, we must not use the red zone + AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [ + CFLAGS="$CFLAGS -m64 -mno-red-zone" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_no_red_zone=yes], + [grub_cv_cc_no_red_zone=no]) + ]) + if test "x$grub_cv_cc_no_red_zone" = xno; then + AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc]) + fi + + TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone" +fi + +# +# Compiler features. +# + +# Need __enable_execute_stack() for nested function trampolines? +grub_CHECK_ENABLE_EXECUTE_STACK + +# Position independent executable. +grub_CHECK_PIE +[# Need that, because some distributions ship compilers that include +# `-fPIE' in the default specs. +if [ x"$pie_possible" = xyes ]; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE" +fi] + +# Smashing stack protector. +grub_CHECK_STACK_PROTECTOR +# Need that, because some distributions ship compilers that include +# `-fstack-protector' in the default specs. +if test "x$ssp_possible" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" +fi +grub_CHECK_STACK_ARG_PROBE +# Cygwin's GCC uses alloca() to probe the stackframe on static +# stack allocations above some threshold. +if test x"$sap_possible" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" +fi + +AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--disable-werror], + [do not use -Werror when building GRUB])]) +if test x"$enable_werror" != xno ; then + TARGET_CFLAGS="$TARGET_CFLAGS -Werror" +fi + +TARGET_CPP="$TARGET_CC -E" +TARGET_CCAS=$TARGET_CC + +AC_SUBST(OBJCONV) +AC_SUBST(TARGET_CPP) +AC_SUBST(TARGET_CCAS) +AC_SUBST(TARGET_OBJ2ELF) +AC_SUBST(TARGET_APPLE_CC) +AC_SUBST(TARGET_MODULE_FORMAT) + +AC_SUBST(TARGET_CFLAGS) +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) + +AC_SUBST(HOST_CFLAGS) +AC_SUBST(HOST_LDFLAGS) +AC_SUBST(HOST_CPPFLAGS) +AC_SUBST(HOST_CCASFLAGS) + +# Set them to their new values for the tests below. +CC="$TARGET_CC" +if test "x$TARGET_APPLE_CC" = x1 ; then +CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error" +else +CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error" +fi +CPPFLAGS="$TARGET_CPPFLAGS" +LDFLAGS="$TARGET_LDFLAGS" +LIBS=-lgcc + +grub_ASM_USCORE +if test x$grub_cv_asm_uscore = xyes; then +CFLAGS="$CFLAGS -Wl,--defsym,_abort=_main" +else +CFLAGS="$CFLAGS -Wl,--defsym,abort=main" +fi + +# Check for libgcc symbols +AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __trampoline_setup __ucmpdi2 _restgpr_14_x) + +if test "x$TARGET_APPLE_CC" = x1 ; then +CFLAGS="$TARGET_CFLAGS -nostdlib" +else +CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100" +fi +LIBS="" + +# Defined in aclocal.m4. +grub_PROG_TARGET_CC +if test "x$TARGET_APPLE_CC" != x1 ; then +grub_PROG_OBJCOPY_ABSOLUTE +fi +grub_PROG_LD_BUILD_ID_NONE +if test "x$target_cpu" = xi386; then + if test "$platform" != emu && test "x$TARGET_APPLE_CC" != 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},8000 -Wl,--defsym,___main=0x8100" + fi + grub_CHECK_BSS_START_SYMBOL + grub_CHECK_END_SYMBOL + fi + CFLAGS="$TARGET_CFLAGS" + grub_I386_ASM_PREFIX_REQUIREMENT + grub_I386_ASM_ADDR32 + grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK +else + AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug]) +fi + +AH_BOTTOM([#if defined(__i386__) && !defined(GRUB_UTIL) +#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1))) +#else +#define NESTED_FUNC_ATTR +#endif]) + +AC_ARG_ENABLE([efiemu], + [AS_HELP_STRING([--enable-efiemu], + [build and install the efiemu runtimes (default=guessed)])]) +if test x"$enable_efiemu" = xno ; then + efiemu_excuse="explicitly disabled" +fi +if test x"$efiemu_excuse" = x ; then + AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [ + CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_efiemu=yes], + [grub_cv_cc_efiemu=no]) + ]) + if test x$grub_cv_cc_efiemu = xno; then + efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" + fi +fi +if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then + AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled]) +fi +if test x"$efiemu_excuse" = x ; then +enable_efiemu=yes +else +enable_efiemu=no +fi +AC_SUBST([enable_efiemu]) + +if test "$platform" != emu; then +AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [ + SAVED_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +int va_arg_func (int fixed, va_list args);]], [[]])], + [grub_cv_cc_isystem=yes], + [grub_cv_cc_isystem=no]) + CPPFLAGS="$SAVED_CPPFLAGS" +]) + +if test x"$grub_cv_cc_isystem" = xyes ; then + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" +fi +fi + +# Restore the flags. +CC="$tmp_CC" +CFLAGS="$tmp_CFLAGS" +CPPFLAGS="$tmp_CPPFLAGS" +LDFLAGS="$tmp_LDFLAGS" +LIBS="$tmp_LIBS" + +# +# Check for options. +# + +# Memory manager debugging. +AC_ARG_ENABLE([mm-debug], + AS_HELP_STRING([--enable-mm-debug], + [include memory manager debugging]), + [AC_DEFINE([MM_DEBUG], [1], + [Define to 1 if you enable memory manager debugging.])]) + +AC_ARG_ENABLE([grub-emu-usb], + [AS_HELP_STRING([--enable-grub-emu-usb], + [build and install the `grub-emu' debugging utility with USB support (default=guessed)])]) + +AC_ARG_ENABLE([grub-emu-sdl], + [AS_HELP_STRING([--enable-grub-emu-sdl], + [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])]) + +AC_ARG_ENABLE([grub-emu-pci], + [AS_HELP_STRING([--enable-grub-emu-pci], + [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])]) + +if test "$platform" = emu; then + missing_ncurses= +[# Check for curses libraries.] + AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"], + [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"], + [missing_ncurses=[true]])]) + AC_SUBST([LIBCURSES]) +[if [ x"$missing_ncurses" = x ]; then ] + [# Check for headers.] + AC_CHECK_HEADERS([ncurses/curses.h], [], + [AC_CHECK_HEADERS([ncurses.h], [], + [AC_CHECK_HEADERS([curses.h], [], + [missing_ncurses=[true]])])]) +[fi] +if test x"$missing_ncurses" = xtrue ; then + AC_MSG_ERROR([grub-emu can't be compiled without ncurses]) +fi + +if test x"$enable_grub_emu_usb" = xno ; then + grub_emu_usb_excuse="explicitly disabled" +fi + +if test x"$enable_grub_emu_pci" = xyes ; then + grub_emu_usb_excuse="conflicts with PCI support" +fi + +[if [ x"$grub_emu_usb_excuse" = x ]; then + # Check for libusb libraries.] +AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"], + [grub_emu_usb_excuse=["need libusb library"]]) + AC_SUBST([LIBUSB]) +[fi] +[if [ x"$grub_emu_usb_excuse" = x ]; then + # Check for headers.] + AC_CHECK_HEADERS([usb.h], [], + [grub_emu_usb_excuse=["need libusb headers"]]) +[fi] +if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then + AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled]) +fi +if test x"$grub_emu_usb_excuse" = x ; then +enable_grub_emu_usb=yes +else +enable_grub_emu_usb=no +fi + +if test x"$enable_grub_emu_sdl" = xno ; then + grub_emu_sdl_excuse="explicitely disabled" +fi +[if [ x"$grub_emu_sdl_excuse" = x ]; then + # Check for libSDL libraries.] +AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"], + [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]]) + AC_SUBST([LIBSDL]) +[fi] + +[if [ x"$grub_emu_sdl_excuse" = x ]; then + # Check for headers.] + AC_CHECK_HEADERS([SDL/SDL.h], [], + [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]]) +[fi] + +if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then + AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled]) +fi +if test x"$grub_emu_sdl_excuse" = x ; then +enable_grub_emu_sdl=yes +else +enable_grub_emu_sdl=no +fi + +if test x"$enable_grub_emu_pci" != xyes ; then + grub_emu_pci_excuse="not enabled" +fi + +if test x"$enable_grub_emu_usb" = xyes ; then + grub_emu_pci_excuse="conflicts with USB support" +fi + +[if [ x"$grub_emu_pci_excuse" = x ]; then + # Check for libpci libraries.] + AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"], + [grub_emu_pci_excuse=["need libpciaccess library"]]) + AC_SUBST([LIBPCIACCESS]) +[fi] +[if [ x"$grub_emu_pci_excuse" = x ]; then + # Check for headers.] + AC_CHECK_HEADERS([pci/pci.h], [], + [grub_emu_pci_excuse=["need libpciaccess headers"]]) +[fi] + +if test x"$grub_emu_pci_excuse" = x ; then +enable_grub_emu_pci=yes +else + +enable_grub_emu_pci=no +fi + +AC_SUBST([enable_grub_emu_sdl]) +AC_SUBST([enable_grub_emu_usb]) +AC_SUBST([enable_grub_emu_pci]) +fi + +AC_ARG_ENABLE([grub-fstest], + [AS_HELP_STRING([--enable-grub-fstest], + [build and install the `grub-fstest' debugging utility (default=guessed)])]) +if test x"$enable_grub_fstest" = xno ; then + grub_fstest_excuse="explicitly disabled" +fi +if test x"$grub_fstest_excuse" = x ; then +enable_grub_fstest=yes +else +enable_grub_fstest=no +fi +AC_SUBST([enable_grub_fstest]) + +AC_ARG_ENABLE([grub-mkfont], + [AS_HELP_STRING([--enable-grub-mkfont], + [build and install the `grub-mkfont' utility (default=guessed)])]) +if test x"$enable_grub_mkfont" = xno ; then + grub_mkfont_excuse="explicitly disabled" +fi + +if test x"$grub_mkfont_excuse" = x ; then + # Check for freetype libraries. + AC_CHECK_PROGS([FREETYPE], [freetype-config]) + if test "x$FREETYPE" = x ; then + grub_mkfont_excuse=["need freetype2 library"] + fi + freetype_cflags=`freetype-config --cflags` + freetype_libs=`freetype-config --libs` +fi + +if test x"$grub_mkfont_excuse" = x ; then + # Check for freetype libraries. + SAVED_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $freetype_cflags" + AC_CHECK_HEADERS([ft2build.h], [], + [grub_mkfont_excuse=["need freetype2 headers"]]) + CPPFLAGS="$SAVED_CPPFLAGS" +fi + +if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then + AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled]) +fi +if test x"$grub_mkfont_excuse" = x ; then +enable_grub_mkfont=yes +else +enable_grub_mkfont=no +fi +AC_SUBST([enable_grub_mkfont]) +AC_SUBST([freetype_cflags]) +AC_SUBST([freetype_libs]) + +AC_ARG_ENABLE([device-mapper], + [AS_HELP_STRING([--enable-device-mapper], + [enable Linux device-mapper support (default=guessed)])]) +if test x"$enable_device_mapper" = xno ; then + device_mapper_excuse="explicitly disabled" +fi + +if test x"$device_mapper_excuse" = x ; then + # Check for device-mapper library. + AC_CHECK_LIB([devmapper], [dm_task_create], + [HOST_LDFLAGS="$HOST_LDFLAGS -ldevmapper" + AC_DEFINE([HAVE_DEVICE_MAPPER], [1], + [Define to 1 if you have the devmapper library.])], + [device_mapper_excuse="need devmapper library"]) +fi + +pkglibrootdir='$(libdir)'/`echo $PACKAGE | sed "$program_transform_name"` +AC_SUBST(pkglibrootdir) + +AC_SUBST([FONT_SOURCE]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xpc], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xcoreboot], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xmultiboot], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) +AS_IF([test x$target_cpu = xmips -a x$platform = xyeeloong], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x80200000)]) +AS_IF([test x$target_cpu = xpowerpc -a x$platform = xieee1275], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x200000)]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu], + [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xieee1275], + [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x10000)]) +AS_IF([test x$TARGET_APPLE_CC = x1], + [AC_SUBST([USE_APPLE_CC_FIXES], yes)]) + +# +# Automake conditionals +# + +AM_CONDITIONAL([COND_emu], [test x$platform = xemu]) +AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc]) +AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi]) +AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu]) +AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot]) +AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot]) +AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi]) +AM_CONDITIONAL([COND_mips_yeeloong], [test x$target_cpu = xmips -a x$platform = xyeeloong]) +AM_CONDITIONAL([COND_mips_qemu_mips], [test x$target_cpu = xmips -a x$platform = xqemu_mips]) +AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) + +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]) +AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes]) +AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes]) +AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) +AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) +AM_CONDITIONAL([COND_GRUB_FSTEST], [test x$enable_grub_fstest = xyes]) +AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x]) +AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC != x]) +AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) # Output files. grub_CHECK_LINK_DIR diff --git a/configure.common b/configure.common deleted file mode 100644 index a9e5665dd..000000000 --- a/configure.common +++ /dev/null @@ -1,852 +0,0 @@ -# -*- autoconf -*- - -# Process this file with autoconf to produce a configure script. - -# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. -# -# This configure.ac is free software; the author -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -# This file is shared between grub-core and util configure scripts. - -# Program name transformations -AC_ARG_PROGRAM - -# Optimization flag. Allow user to override. -if test "x$TARGET_CFLAGS" = x; then - TARGET_CFLAGS="$TARGET_CFLAGS -Os" -fi - -# Default HOST_CPPFLAGS -HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W" -HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/include" -HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include" -HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/gnulib" -HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1" -HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_LIBDIR=\\\"\$(pkglibdir)\\\"" -HOST_CPPFLAGS="$HOST_CPPFLAGS -DLOCALEDIR=\\\"\$(localedir)\\\"" - -TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W" -TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include" -TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include" - -case "$target_cpu" in - i[[3456]]86) target_cpu=i386 ;; - amd64) target_cpu=x86_64 ;; - sparc) target_cpu=sparc64 ;; - mipsel|mips64el) - target_cpu=mips; - HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; - TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; - ;; - mips|mips64) - target_cpu=mips; - HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_CPU_MIPS=1"; - TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_CPU_MIPS=1"; - ;; -esac - -# Specify the platform (such as firmware). -AC_ARG_WITH([platform], - AS_HELP_STRING([--with-platform=PLATFORM], - [select the host platform [[guessed]]])) - -# Guess the platform if not specified. -if test "x$with_platform" = x; then - case "$target_cpu"-"$target_vendor" in - i386-apple) platform=efi ;; - i386-*) platform=pc ;; - x86_64-apple) platform=efi ;; - x86_64-*) platform=pc ;; - powerpc-*) platform=ieee1275 ;; - powerpc64-*) platform=ieee1275 ;; - sparc64-*) platform=ieee1275 ;; - mips-*) platform=yeeloong ;; - *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;; - esac -else - platform="$with_platform" -fi - -# Adjust CPU unless target was explicitly specified. -if test -z "$target_alias"; then - case "$target_cpu"-"$platform" in - x86_64-efi) ;; - x86_64-emu) ;; - x86_64-*) target_cpu=i386 ;; - powerpc64-ieee1275) target_cpu=powerpc ;; - esac -fi - -# Check if the platform is supported, make final adjustments. -case "$target_cpu"-"$platform" in - i386-efi) ;; - x86_64-efi) ;; - i386-pc) ;; - i386-multiboot) ;; - i386-coreboot) ;; - i386-linuxbios) platform=coreboot ;; - i386-ieee1275) ;; - i386-qemu) ;; - powerpc-ieee1275) ;; - sparc64-ieee1275) ;; - mips-qemu-mips) ;; - mips-yeeloong) ;; - *-emu) ;; - *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;; -esac - -case "$target_cpu" in - i386 | powerpc) target_m32=1 ;; - x86_64 | sparc64) target_m64=1 ;; -esac - -case "$host_os" in - mingw32*) host_os=cygwin ;; -esac - -# This normalizes the names, and creates a new variable ("host_kernel") -# while at it, since the mapping is not always 1:1 (e.g. different OSes -# using the same kernel type). -case "$host_os" in - gnu*) host_kernel=hurd ;; - linux*) host_kernel=linux ;; - freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;; - netbsd*) host_kernel=netbsd ;; - cygwin) host_kernel=windows ;; -esac - -case "$platform" in - coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; - multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; - efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;; - ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; - qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;; - pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; - emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;; - yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; - qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; -esac -case "$target_cpu" in - mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;; - sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;; -esac -machine_CFLAGS="$machine_CFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" - -HOST_CPPFLAGS="$HOST_CPPFLAGS $machine_CFLAGS" -TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CFLAGS" - -AC_SUBST(host_cpu) -AC_SUBST(host_os) -AC_SUBST(host_kernel) - -AC_SUBST(target_cpu) -AC_SUBST(platform) - -# -# Checks for build programs. -# - -# Although cmp is listed in the GNU Coding Standards as a command which -# can used directly, OpenBSD lacks cmp in the default installation. -AC_CHECK_PROGS([CMP], [cmp]) -if test "x$CMP" = x; then - AC_MSG_ERROR([cmp is not found]) -fi - -AC_CHECK_PROGS([YACC], [bison]) -if test "x$YACC" = x; then - AC_MSG_ERROR([bison is not found]) -fi - -FONT_SOURCE= - -for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do - for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont; do - if test -f "$dir/unifont.$ext"; then - FONT_SOURCE="$dir/unifont.$ext" - break 2 - fi - done -done - -if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xyeeloong ); then - AC_MSG_ERROR([qemu and yeeloong ports need unifont]) -fi - -AC_SUBST([FONT_SOURCE]) - -AC_PROG_RANLIB -AC_PROG_INSTALL -AC_PROG_AWK -AC_PROG_LEX -AC_PROG_YACC -AC_PROG_MAKE_SET -AC_PROG_MKDIR_P - -if test "x$LEX" = "x:"; then - AC_MSG_ERROR([flex is not found]) -else - version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'` - if test -n "$version" -a "$version" -ge 20535; then - : - else - AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above]) - fi -fi - -# These are not a "must". -AC_PATH_PROG(MAKEINFO, makeinfo) - -# -# Checks for host programs. -# - -AC_PROG_CC -AM_PROG_CC_C_O -AM_PROG_AS - -# Must be GCC. -test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required]) - -AC_GNU_SOURCE -AM_GNU_GETTEXT([external]) -AC_SYS_LARGEFILE - -# Identify characteristics of the host architecture. -AC_C_BIGENDIAN -AC_CHECK_SIZEOF(void *) -AC_CHECK_SIZEOF(long) - -grub_apple_cc -if test x$grub_cv_apple_cc = xyes ; then - HOST_CPPFLAGS="$HOST_CPPFLAGS -DAPPLE_CC=1" - HOST_CFLAGS="$HOST_CFLAGS -fnested-functions" -fi - -if test "x$cross_compiling" = xyes; then - AC_MSG_WARN([cannot generate manual pages while cross compiling]) -else - AC_PATH_PROG(HELP2MAN, help2man) -fi - -# Check for functions. -AC_CHECK_FUNCS(posix_memalign memalign asprintf vasprintf) - -# For grub-mkisofs -AC_HEADER_MAJOR -AC_HEADER_DIRENT -AC_CHECK_FUNCS(memmove sbrk strdup lstat getuid getgid) -AC_CHECK_HEADERS(sys/mkdev.h sys/sysmacros.h malloc.h termios.h sys/types.h) -AC_CHECK_HEADERS(unistd.h string.h strings.h sys/stat.h sys/fcntl.h limits.h) - -# For opendisk() and getrawpartition() on NetBSD. -# Used in util/deviceiter.c and in util/hostdisk.c. -AC_CHECK_HEADER([util.h], [ - AC_CHECK_LIB([util], [opendisk], [ - LIBUTIL="-lutil" - AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used]) - ]) - AC_CHECK_LIB([util], [getrawpartition], [ - LIBUTIL="-lutil" - AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used]) - ]) -]) -AC_SUBST([LIBUTIL]) - -# -# Check for host and build compilers. -# -HOST_CC=$CC -AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc], - [AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])]) - -# -# Check for target programs. -# - -# Find tools for the target. -if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then - tmp_ac_tool_prefix="$ac_tool_prefix" - ac_tool_prefix=$target_alias- - - AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc], - [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])]) - AC_CHECK_TOOL(OBJCOPY, objcopy) - AC_CHECK_TOOL(STRIP, strip) - AC_CHECK_TOOL(NM, nm) - - ac_tool_prefix="$tmp_ac_tool_prefix" -else - if test "x$TARGET_CC" = x; then - TARGET_CC=$CC - fi - AC_CHECK_TOOL(OBJCOPY, objcopy) - AC_CHECK_TOOL(STRIP, strip) - AC_CHECK_TOOL(NM, nm) -fi -AC_SUBST(HOST_CC) -AC_SUBST(BUILD_CC) -AC_SUBST(TARGET_CC) - -# Test the C compiler for the target environment. -tmp_CC="$CC" -tmp_CFLAGS="$CFLAGS" -tmp_LDFLAGS="$LDFLAGS" -tmp_CPPFLAGS="$CPPFLAGS" -tmp_LIBS="$LIBS" -CC="$TARGET_CC" -CFLAGS="$TARGET_CFLAGS" -CPPFLAGS="$TARGET_CPPFLAGS" -LDFLAGS="$TARGET_LDFLAGS" -LIBS="" - -# debug flags. -TARGET_CFLAGS="$TARGET_CFLAGS -Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes -Wundef -Wstrict-prototypes -g" -TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g" - -# Force no alignment to save space on i386. -if test "x$target_cpu" = xi386; then - AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [ - CFLAGS="$CFLAGS -falign-loops=1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_falign_loop=yes], - [grub_cv_cc_falign_loop=no]) - ]) - - if test "x$grub_cv_cc_falign_loop" = xyes; then - TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" - else - TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" - fi - - # Some toolchains enable these features by default, but they need - # registers that aren't set up properly in GRUB. - TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow" -fi - -# By default, GCC 4.4 generates .eh_frame sections containing unwind -# information in some cases where it previously did not. GRUB doesn't need -# these and they just use up vital space. Restore the old compiler -# behaviour. -AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [ - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_fno_dwarf2_cfi_asm=yes], - [grub_cv_cc_fno_dwarf2_cfi_asm=no]) - CFLAGS="$SAVE_CFLAGS" -]) - -if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then - TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" -fi - -grub_apple_target_cc -if test x$grub_cv_apple_target_cc = xyes ; then - TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DAPPLE_CC=1" - TARGET_CFLAGS="$TARGET_CFLAGS -fnested-functions" - - CFLAGS="$CFLAGS -DAPPLE_CC=1 -fnested-functions" - TARGET_APPLE_CC=1 - AC_CHECK_PROG([OBJCONV], [objconv], [objconv], []) - if test "x$OBJCONV" = x ; then - AC_CHECK_PROG([OBJCONV], [objconv], [./objconv], [], [.]) - fi - if test "x$OBJCONV" = x ; then - AC_MSG_ERROR([objconv not found which is required when building with apple compiler]) - fi - TARGET_IMG_LDSCRIPT= - TARGET_IMG_CFLAGS="-static" - TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20' - TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20' - TARGET_IMG_BASE_LDOPT="-Wl,-image_base" -else - TARGET_APPLE_CC=0 -# Use linker script if present, otherwise use builtin -N script. -if test -f "${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then - TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" - TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}" - TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc" - TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" -else - TARGET_IMG_LDSCRIPT= - TARGET_IMG_LDFLAGS='-Wl,-N' - TARGET_IMG_LDFLAGS_AC='-Wl,-N' - TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" -fi -TARGET_IMG_CFLAGS= -fi - -# For platforms where ELF is not the default link format. -AC_MSG_CHECKING([for command to convert module to ELF format]) -case "${host_os}" in - cygwin) TARGET_OBJ2ELF='$(grub_utildir)/grub-pe2elf'; -# FIXME: put proper test here - AC_DEFINE([NEED_REGISTER_FRAME_INFO], 1, - [Define to 1 if GCC generates calls to __register_frame_info()]) - ;; - *) ;; -esac -AC_MSG_RESULT([$TARGET_OBJ2ELF]) - -if test "x$target_m32" = x1; then - # Force 32-bit mode. - TARGET_CFLAGS="$TARGET_CFLAGS -m32" - TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32" - TARGET_LDFLAGS="$TARGET_LDFLAGS -m32" - TARGET_MODULE_FORMAT="elf32" -fi - -if test "x$target_m64" = x1; then - # Force 64-bit mode. - TARGET_CFLAGS="$TARGET_CFLAGS -m64" - TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64" - TARGET_LDFLAGS="$TARGET_LDFLAGS -m64" - TARGET_MODULE_FORMAT="elf64" -fi - -if test "$target_cpu"-"$platform" = x86_64-efi; then - # Use large model to support 4G memory - AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [ - SAVED_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -m64 -mcmodel=large" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_mcmodel=yes], - [grub_cv_cc_mcmodel=no]) - ]) - if test "x$grub_cv_cc_mcmodel" = xno; then - AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.]) - else - TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" - fi - - # EFI writes to stack below %rsp, we must not use the red zone - AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [ - CFLAGS="$CFLAGS -m64 -mno-red-zone" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_no_red_zone=yes], - [grub_cv_cc_no_red_zone=no]) - ]) - if test "x$grub_cv_cc_no_red_zone" = xno; then - AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc]) - fi - - TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone" -fi - -# -# Compiler features. -# - -# Need __enable_execute_stack() for nested function trampolines? -grub_CHECK_ENABLE_EXECUTE_STACK - -# Position independent executable. -grub_CHECK_PIE -[# Need that, because some distributions ship compilers that include -# `-fPIE' in the default specs. -if [ x"$pie_possible" = xyes ]; then - TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE" -fi] - -# Smashing stack protector. -grub_CHECK_STACK_PROTECTOR -# Need that, because some distributions ship compilers that include -# `-fstack-protector' in the default specs. -if test "x$ssp_possible" = xyes; then - TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" -fi -grub_CHECK_STACK_ARG_PROBE -# Cygwin's GCC uses alloca() to probe the stackframe on static -# stack allocations above some threshold. -if test x"$sap_possible" = xyes; then - TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" -fi - -AC_ARG_ENABLE([werror], - [AS_HELP_STRING([--disable-werror], - [do not use -Werror when building GRUB])]) -if test x"$enable_werror" != xno ; then - TARGET_CFLAGS="$TARGET_CFLAGS -Werror" -fi - -TARGET_CPP="$TARGET_CC -E" -TARGET_CCAS=$TARGET_CC - -AC_SUBST(OBJCONV) -AC_SUBST(TARGET_CPP) -AC_SUBST(TARGET_CCAS) -AC_SUBST(TARGET_OBJ2ELF) -AC_SUBST(TARGET_APPLE_CC) -AC_SUBST(TARGET_MODULE_FORMAT) - -AC_SUBST(TARGET_CFLAGS) -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) - -AC_SUBST(HOST_CFLAGS) -AC_SUBST(HOST_LDFLAGS) -AC_SUBST(HOST_CPPFLAGS) -AC_SUBST(HOST_CCASFLAGS) - -# Set them to their new values for the tests below. -CC="$TARGET_CC" -if test "x$TARGET_APPLE_CC" = x1 ; then -CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error" -else -CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error" -fi -CPPFLAGS="$TARGET_CPPFLAGS" -LDFLAGS="$TARGET_LDFLAGS" -LIBS=-lgcc - -grub_ASM_USCORE -if test x$grub_cv_asm_uscore = xyes; then -CFLAGS="$CFLAGS -Wl,--defsym,_abort=_main" -else -CFLAGS="$CFLAGS -Wl,--defsym,abort=main" -fi - -# Check for libgcc symbols -AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __trampoline_setup __ucmpdi2 _restgpr_14_x) - -if test "x$TARGET_APPLE_CC" = x1 ; then -CFLAGS="$TARGET_CFLAGS -nostdlib" -else -CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100" -fi -LIBS="" - -# Defined in aclocal.m4. -grub_PROG_TARGET_CC -if test "x$TARGET_APPLE_CC" != x1 ; then -grub_PROG_OBJCOPY_ABSOLUTE -fi -grub_PROG_LD_BUILD_ID_NONE -if test "x$target_cpu" = xi386; then - if test "$platform" != emu && test "x$TARGET_APPLE_CC" != 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},8000 -Wl,--defsym,___main=0x8100" - fi - grub_CHECK_BSS_START_SYMBOL - grub_CHECK_END_SYMBOL - fi - CFLAGS="$TARGET_CFLAGS" - grub_I386_ASM_PREFIX_REQUIREMENT - grub_I386_ASM_ADDR32 - grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK -else - AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug]) -fi - -AH_BOTTOM([#if defined(__i386__) && !defined(GRUB_UTIL) -#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1))) -#else -#define NESTED_FUNC_ATTR -#endif]) - -AC_ARG_ENABLE([efiemu], - [AS_HELP_STRING([--enable-efiemu], - [build and install the efiemu runtimes (default=guessed)])]) -if test x"$enable_efiemu" = xno ; then - efiemu_excuse="explicitly disabled" -fi -if test x"$efiemu_excuse" = x ; then - AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [ - CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], - [grub_cv_cc_efiemu=yes], - [grub_cv_cc_efiemu=no]) - ]) - if test x$grub_cv_cc_efiemu = xno; then - efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" - fi -fi -if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then - AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled]) -fi -if test x"$efiemu_excuse" = x ; then -enable_efiemu=yes -else -enable_efiemu=no -fi -AC_SUBST([enable_efiemu]) - -if test "$platform" != emu; then -AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [ - SAVED_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -int va_arg_func (int fixed, va_list args);]], [[]])], - [grub_cv_cc_isystem=yes], - [grub_cv_cc_isystem=no]) - CPPFLAGS="$SAVED_CPPFLAGS" -]) - -if test x"$grub_cv_cc_isystem" = xyes ; then - TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" -fi -fi - -# Restore the flags. -CC="$tmp_CC" -CFLAGS="$tmp_CFLAGS" -CPPFLAGS="$tmp_CPPFLAGS" -LDFLAGS="$tmp_LDFLAGS" -LIBS="$tmp_LIBS" - -# -# Check for options. -# - -# Memory manager debugging. -AC_ARG_ENABLE([mm-debug], - AS_HELP_STRING([--enable-mm-debug], - [include memory manager debugging]), - [AC_DEFINE([MM_DEBUG], [1], - [Define to 1 if you enable memory manager debugging.])]) - -AC_ARG_ENABLE([grub-emu-usb], - [AS_HELP_STRING([--enable-grub-emu-usb], - [build and install the `grub-emu' debugging utility with USB support (default=guessed)])]) - -AC_ARG_ENABLE([grub-emu-sdl], - [AS_HELP_STRING([--enable-grub-emu-sdl], - [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])]) - -AC_ARG_ENABLE([grub-emu-pci], - [AS_HELP_STRING([--enable-grub-emu-pci], - [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])]) - -if test "$platform" = emu; then - missing_ncurses= -[# Check for curses libraries.] - AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"], - [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"], - [missing_ncurses=[true]])]) - AC_SUBST([LIBCURSES]) -[if [ x"$missing_ncurses" = x ]; then ] - [# Check for headers.] - AC_CHECK_HEADERS([ncurses/curses.h], [], - [AC_CHECK_HEADERS([ncurses.h], [], - [AC_CHECK_HEADERS([curses.h], [], - [missing_ncurses=[true]])])]) -[fi] -if test x"$missing_ncurses" = xtrue ; then - AC_MSG_ERROR([grub-emu can't be compiled without ncurses]) -fi - -if test x"$enable_grub_emu_usb" = xno ; then - grub_emu_usb_excuse="explicitly disabled" -fi - -if test x"$enable_grub_emu_pci" = xyes ; then - grub_emu_usb_excuse="conflicts with PCI support" -fi - -[if [ x"$grub_emu_usb_excuse" = x ]; then - # Check for libusb libraries.] -AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"], - [grub_emu_usb_excuse=["need libusb library"]]) - AC_SUBST([LIBUSB]) -[fi] -[if [ x"$grub_emu_usb_excuse" = x ]; then - # Check for headers.] - AC_CHECK_HEADERS([usb.h], [], - [grub_emu_usb_excuse=["need libusb headers"]]) -[fi] -if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then - AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled]) -fi -if test x"$grub_emu_usb_excuse" = x ; then -enable_grub_emu_usb=yes -else -enable_grub_emu_usb=no -fi - -if test x"$enable_grub_emu_sdl" = xno ; then - grub_emu_sdl_excuse="explicitely disabled" -fi -[if [ x"$grub_emu_sdl_excuse" = x ]; then - # Check for libSDL libraries.] -AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"], - [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]]) - AC_SUBST([LIBSDL]) -[fi] - -[if [ x"$grub_emu_sdl_excuse" = x ]; then - # Check for headers.] - AC_CHECK_HEADERS([SDL/SDL.h], [], - [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]]) -[fi] - -if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then - AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled]) -fi -if test x"$grub_emu_sdl_excuse" = x ; then -enable_grub_emu_sdl=yes -else -enable_grub_emu_sdl=no -fi - -if test x"$enable_grub_emu_pci" != xyes ; then - grub_emu_pci_excuse="not enabled" -fi - -if test x"$enable_grub_emu_usb" = xyes ; then - grub_emu_pci_excuse="conflicts with USB support" -fi - -[if [ x"$grub_emu_pci_excuse" = x ]; then - # Check for libpci libraries.] - AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"], - [grub_emu_pci_excuse=["need libpciaccess library"]]) - AC_SUBST([LIBPCIACCESS]) -[fi] -[if [ x"$grub_emu_pci_excuse" = x ]; then - # Check for headers.] - AC_CHECK_HEADERS([pci/pci.h], [], - [grub_emu_pci_excuse=["need libpciaccess headers"]]) -[fi] - -if test x"$grub_emu_pci_excuse" = x ; then -enable_grub_emu_pci=yes -else - -enable_grub_emu_pci=no -fi - -AC_SUBST([enable_grub_emu_sdl]) -AC_SUBST([enable_grub_emu_usb]) -AC_SUBST([enable_grub_emu_pci]) -fi - -AC_ARG_ENABLE([grub-fstest], - [AS_HELP_STRING([--enable-grub-fstest], - [build and install the `grub-fstest' debugging utility (default=guessed)])]) -if test x"$enable_grub_fstest" = xno ; then - grub_fstest_excuse="explicitly disabled" -fi -if test x"$grub_fstest_excuse" = x ; then -enable_grub_fstest=yes -else -enable_grub_fstest=no -fi -AC_SUBST([enable_grub_fstest]) - -AC_ARG_ENABLE([grub-mkfont], - [AS_HELP_STRING([--enable-grub-mkfont], - [build and install the `grub-mkfont' utility (default=guessed)])]) -if test x"$enable_grub_mkfont" = xno ; then - grub_mkfont_excuse="explicitly disabled" -fi - -if test x"$grub_mkfont_excuse" = x ; then - # Check for freetype libraries. - AC_CHECK_PROGS([FREETYPE], [freetype-config]) - if test "x$FREETYPE" = x ; then - grub_mkfont_excuse=["need freetype2 library"] - fi - freetype_cflags=`freetype-config --cflags` - freetype_libs=`freetype-config --libs` -fi - -if test x"$grub_mkfont_excuse" = x ; then - # Check for freetype libraries. - SAVED_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $freetype_cflags" - AC_CHECK_HEADERS([ft2build.h], [], - [grub_mkfont_excuse=["need freetype2 headers"]]) - CPPFLAGS="$SAVED_CPPFLAGS" -fi - -if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then - AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled]) -fi -if test x"$grub_mkfont_excuse" = x ; then -enable_grub_mkfont=yes -else -enable_grub_mkfont=no -fi -AC_SUBST([enable_grub_mkfont]) -AC_SUBST([freetype_cflags]) -AC_SUBST([freetype_libs]) - -AC_ARG_ENABLE([device-mapper], - [AS_HELP_STRING([--enable-device-mapper], - [enable Linux device-mapper support (default=guessed)])]) -if test x"$enable_device_mapper" = xno ; then - device_mapper_excuse="explicitly disabled" -fi - -if test x"$device_mapper_excuse" = x ; then - # Check for device-mapper library. - AC_CHECK_LIB([devmapper], [dm_task_create], - [HOST_LDFLAGS="$HOST_LDFLAGS -ldevmapper" - AC_DEFINE([HAVE_DEVICE_MAPPER], [1], - [Define to 1 if you have the devmapper library.])], - [device_mapper_excuse="need devmapper library"]) -fi - -pkglibrootdir='$(libdir)'/`echo $PACKAGE | sed "$program_transform_name"` -AC_SUBST(pkglibrootdir) - -AC_SUBST([FONT_SOURCE]) -AS_IF([test x$target_cpu = xi386 -a x$platform = xpc], - [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) -AS_IF([test x$target_cpu = xi386 -a x$platform = xcoreboot], - [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) -AS_IF([test x$target_cpu = xi386 -a x$platform = xmultiboot], - [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x8200)]) -AS_IF([test x$target_cpu = xmips -a x$platform = xyeeloong], - [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x80200000)]) -AS_IF([test x$target_cpu = xpowerpc -a x$platform = xieee1275], - [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x200000)]) -AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu], - [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)]) -AS_IF([test x$target_cpu = xi386 -a x$platform = xieee1275], - [AC_SUBST([GRUB_KERNEL_MACHINE_LINK_ADDR], 0x10000)]) -AS_IF([test x$TARGET_APPLE_CC = x1], - [AC_SUBST([USE_APPLE_CC_FIXES], yes)]) - -# -# Automake conditionals -# - -AM_CONDITIONAL([COND_emu], [test x$platform = xemu]) -AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc]) -AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi]) -AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu]) -AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275]) -AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot]) -AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot]) -AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi]) -AM_CONDITIONAL([COND_mips_yeeloong], [test x$target_cpu = xmips -a x$platform = xyeeloong]) -AM_CONDITIONAL([COND_mips_qemu_mips], [test x$target_cpu = xmips -a x$platform = xqemu_mips]) -AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) -AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) - -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]) -AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes]) -AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes]) -AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) -AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) -AM_CONDITIONAL([COND_GRUB_FSTEST], [test x$enable_grub_fstest = xyes]) -AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x]) -AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC != x]) -AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 437835c83..0f7886b3a 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -81,18 +81,18 @@ CPPFLAGS_GRUB += -I$(top_builddir)/include CCASFLAGS_GRUB = -DASM_FILE=1 CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -CPPFLAGS_GCRY = -I$(top_srcdir)/$(grub_coredir)/lib/libgcrypt_wrap +CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" -CPPFLAGS_GNULIB = -I$(top_srcdir)/$(grub_coredir)/gnulib +CPPFLAGS_GNULIB = -I$(top_srcdir)/grub-core/gnulib CFLAGS_MKISOFS = -Wno-all -Werror CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include CFLAGS_POSIX = -fno-builtin -CPPFLAGS_POSIX = -I$(top_srcdir)/$(grub_coredir)/lib/posix_wrap +CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap -CPPFLAGS_EFIEMU = -I$(top_srcdir)/$(grub_coredir)/efiemu/runtime +CPPFLAGS_EFIEMU = -I$(top_srcdir)/grub-core/efiemu/runtime LDADD_KERNEL = -lgcc CFLAGS_KERNEL = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding From a525bb9ae47d64b94e2d260d5095f577c10cd405 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 17 Aug 2010 19:43:37 +0530 Subject: [PATCH 178/271] rm grub-core/configure.ac --- grub-core/configure.ac | 83 ------------------------------------------ 1 file changed, 83 deletions(-) delete mode 100644 grub-core/configure.ac diff --git a/grub-core/configure.ac b/grub-core/configure.ac deleted file mode 100644 index 6a84c16e1..000000000 --- a/grub-core/configure.ac +++ /dev/null @@ -1,83 +0,0 @@ -# Process this file with autoconf to produce a configure script. - -# Copyright (C) 2010 Free Software Foundation, Inc. -# -# This configure.ac is free software; the author -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -dnl This configure script is complicated, because GRUB needs to deal -dnl with three potentially different types: -dnl -dnl build -- the environment for building GRUB -dnl host -- the environment for running utilities -dnl target -- the environment for running GRUB -dnl -dnl In addition, GRUB needs to deal with a platform specification -dnl which specifies the system running GRUB, such as firmware. -dnl This is necessary because the target type in autoconf does not -dnl describe such a system very well. -dnl -dnl The current strategy is to build utilities using host -dnl cross-compiler and grub core and modules using target -dnl cross-compiler. For this we use nested packages approach, where -dnl top-level package grub utilities is built with HOSTCC and nested -dnl package (in grub-core directory) builds with TARGETCC. - -# NOTE: ../configure.ac must also be updated. -AC_INIT([GRUB],[1.98],[bug-grub@gnu.org]) -AC_CONFIG_AUX_DIR([.]) - -: ${CFLAGS=""} # We don't want -g -O2 - -# Checks for host and target systems. -AC_CANONICAL_HOST -AC_CANONICAL_TARGET - -AM_INIT_AUTOMAKE() -AC_PREREQ(2.60) -AC_CONFIG_SRCDIR([include/grub/dl.h]) -AC_CONFIG_HEADER([config.h]) - -grub_coredir='.' -AC_SUBST(grub_coredir) - -grub_utildir='..' -AC_SUBST(grub_utildir) - -m4_include([configure.common]) - -CC=$TARGET_CC -CPP=$TARGET_CC -CCAS=$TARGET_CC - -# Output files. -grub_CHECK_LINK_DIR -if test x"$link_dir" = xyes ; then - AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu]) - mkdir -p lib/target_cpu - cp -r $srcdir/lib/$target_cpu/* lib/target_cpu - if test "$platform" != emu ; then - AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform]) - fi -else - mkdir -p include/grub 2>/dev/null - rm -rf include/grub/cpu - cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null - cp -rp $srcdir/lib/$target_cpu lib/target_cpu 2>/dev/null - if test "$platform" != emu ; then - rm -rf include/grub/machine - cp -rp $srcdir/grub-core/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null - fi -fi - -AC_CONFIG_FILES([Makefile]) -AC_CONFIG_FILES([po/Makefile]) -AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h]) - -AC_OUTPUT From f99b0464dfd9273744238040c69368ad34054b0e Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Tue, 17 Aug 2010 19:46:13 +0530 Subject: [PATCH 179/271] rm grub-core/video/emu.moved From 2b6c00842db2f2fcb74fdc0f0ea393de38c3fb91 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 18 Aug 2010 11:57:51 +0530 Subject: [PATCH 180/271] distcheck almost done --- Makefile.am | 1 + configure.ac | 9 ++++++-- docs/Makefile.am | 3 +++ grub-core/Makefile.am | 49 ++++++++++++++++++++++++++++++++++++++++--- grub-core/modules.def | 7 ++++++- 5 files changed, 63 insertions(+), 6 deletions(-) diff --git a/Makefile.am b/Makefile.am index 4063a6476..09c2fa43e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,6 +2,7 @@ AUTOMAKE_OPTIONS = subdir-objects SUBDIRS = . grub-core po docs EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh +EXTRA_DIST += include conf/i386-pc-cygwin-img-ld.sc grubconfdir = $(sysconfdir)/grub.d platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) diff --git a/configure.ac b/configure.ac index ee01049ac..23988a17e 100644 --- a/configure.ac +++ b/configure.ac @@ -867,8 +867,6 @@ AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) grub_CHECK_LINK_DIR if test x"$link_dir" = xyes ; then AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu]) - mkdir -p grub-core/lib - cp -rp $srcdir/grub-core/lib/$target_cpu grub-core/lib/target_cpu if test "$platform" != emu ; then AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform]) fi @@ -883,6 +881,13 @@ else fi fi +# Copy */setjmp.S to target_cpu/ +AC_CONFIG_COMMANDS([grub-core/lib/target_cpu], + [mkdir -p grub-core/lib/target_cpu]) +AC_CONFIG_COMMANDS([setjmp.S], + [cp -rp $srcdir/grub-core/lib/$target_cpu/setjmp.S grub-core/lib/target_cpu/], + [target_cpu=$target_cpu srcdir=$srcdir]) + AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([grub-core/Makefile]) AC_CONFIG_FILES([po/Makefile]) diff --git a/docs/Makefile.am b/docs/Makefile.am index 1b302d262..a2e83dcd6 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1,6 +1,9 @@ AUTOMAKE_OPTIONS = subdir-objects +EXTRA_DIST = grub.cfg man + AM_MAKEINFOFLAGS = --force --no-split --no-validate info_TEXINFOS = grub.texi grub_TEXINFOS = fdl.texi + diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 0f7886b3a..efce4d22e 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -4,12 +4,55 @@ CC=$(TARGET_CC) CPP=$(TARGET_CC) CCAS=$(TARGET_CC) -EXTRA_DIST = gentpl.py modules.def Makefile.tpl genmoddep.awk +EXTRA_DIST = +EXTRA_DIST += modules.def genmoddep.awk EXTRA_DIST += genmodsrc.sh gensymlist.sh genemuinit.sh genemuinitheader.sh EXTRA_DIST += genfslist.sh gencmdlist.sh genvideolist.sh genhandlerlist.sh EXTRA_DIST += genpartmaplist.sh genparttoollist.sh genterminallist.sh -EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc -EXTRA_DIST += $(shell find $(top_srcdir) -name '*.h') +EXTRA_DIST += lib/libgcrypt_wrap/cipher_wrap.h +EXTRA_DIST += lib/libgcrypt/cipher/rijndael-tables.h +EXTRA_DIST += lib/libgcrypt/cipher/bithelp.h +EXTRA_DIST += lib/libgcrypt/cipher/rmd.h +EXTRA_DIST += lib/libgcrypt/cipher/hash-common.h +EXTRA_DIST += lib/libgcrypt/cipher/camellia.h +EXTRA_DIST += lib/posix_wrap/localcharset.h +EXTRA_DIST += lib/posix_wrap/ctype.h +EXTRA_DIST += lib/posix_wrap/limits.h +EXTRA_DIST += lib/posix_wrap/stdio.h +EXTRA_DIST += lib/posix_wrap/sys/types.h +EXTRA_DIST += lib/posix_wrap/unistd.h +EXTRA_DIST += lib/posix_wrap/locale.h +EXTRA_DIST += lib/posix_wrap/wchar.h +EXTRA_DIST += lib/posix_wrap/string.h +EXTRA_DIST += lib/posix_wrap/langinfo.h +EXTRA_DIST += lib/posix_wrap/wctype.h +EXTRA_DIST += lib/posix_wrap/stdint.h +EXTRA_DIST += lib/posix_wrap/stdlib.h +EXTRA_DIST += lib/posix_wrap/assert.h +EXTRA_DIST += lib/posix_wrap/errno.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/types.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/cipher.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/rijndael-tables.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/memory.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/bithelp.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/g10lib.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/rmd.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/hash-common.h +EXTRA_DIST += lib/libgcrypt-grub/cipher/camellia.h +EXTRA_DIST += efiemu/runtime/config.h +EXTRA_DIST += gnulib/getopt.h +EXTRA_DIST += gnulib/argp-version-etc.h +EXTRA_DIST += gnulib/fnmatch.h +EXTRA_DIST += gnulib/error.h +EXTRA_DIST += gnulib/argp-namefrob.h +EXTRA_DIST += gnulib/argp.h +EXTRA_DIST += gnulib/argp-fmtstream.h +EXTRA_DIST += gnulib/gettext.h +EXTRA_DIST += gnulib/regex_internal.h +EXTRA_DIST += gnulib/progname.h +EXTRA_DIST += gnulib/regex.h +EXTRA_DIST += gnulib/alloca.h +EXTRA_DIST += gnulib/getopt_int.h grubconfdir = $(sysconfdir)/grub.d platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) diff --git a/grub-core/modules.def b/grub-core/modules.def index 8e65f277c..3d222dd74 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -1207,7 +1207,12 @@ module = { module = { name = setjmp; - source = lib/target_cpu/setjmp.S; + nodist = lib/target_cpu/setjmp.S; + extra_dist = lib/i386/setjmp.S; + extra_dist = lib/mips/setjmp.S; + extra_dist = lib/x86_64/setjmp.S; + extra_dist = lib/sparc64/setjmp.S; + extra_dist = lib/powerpc/setjmp.S; }; module = { From 019be613d094e6b25759c959a1a96ad29a8e225e Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 18 Aug 2010 16:53:11 +0530 Subject: [PATCH 181/271] fixed distcheck --- Makefile.am | 2 +- configure.ac | 2 -- grub-core/Makefile.am | 1 + 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Makefile.am b/Makefile.am index 09c2fa43e..e96a540da 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,6 @@ AUTOMAKE_OPTIONS = subdir-objects +DEPDIR = .deps-util SUBDIRS = . grub-core po docs EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh EXTRA_DIST += include conf/i386-pc-cygwin-img-ld.sc @@ -152,7 +153,6 @@ CLEANFILES += ascii.bitmaps ascii.h: ascii.bitmaps grub-bin2h $(builddir)/grub-bin2h ascii_bitmaps < $< > $@ - cp $@ $(top_builddir)/grub-core/include CLEANFILES += ascii.h $(top_builddir)/grub-core/include/ascii.h widthspec.bin: $(FONT_SOURCE) grub-mkfont diff --git a/configure.ac b/configure.ac index 23988a17e..c0cd11b65 100644 --- a/configure.ac +++ b/configure.ac @@ -37,9 +37,7 @@ fi # Default HOST_CPPFLAGS HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W" -HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/include" HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include" -HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_srcdir)/grub-core/gnulib" HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1" HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_LIBDIR=\\\"\$(pkglibdir)\\\"" HOST_CPPFLAGS="$HOST_CPPFLAGS -DLOCALEDIR=\\\"\$(localedir)\\\"" diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index efce4d22e..e1f45eb38 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -3,6 +3,7 @@ AUTOMAKE_OPTIONS = subdir-objects CC=$(TARGET_CC) CPP=$(TARGET_CC) CCAS=$(TARGET_CC) +DEPDIR=.deps-core EXTRA_DIST = EXTRA_DIST += modules.def genmoddep.awk From 62f7d20835799167be1561b5803b8c858f99a054 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 18 Aug 2010 20:25:16 +0530 Subject: [PATCH 182/271] fixed grub-emu build --- configure.ac | 3 ++- grub-core/modules.def | 4 ++-- modules.def | 25 +++++++++++-------------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/configure.ac b/configure.ac index c0cd11b65..b4dd0e9e0 100644 --- a/configure.ac +++ b/configure.ac @@ -806,11 +806,12 @@ fi if test x"$device_mapper_excuse" = x ; then # Check for device-mapper library. AC_CHECK_LIB([devmapper], [dm_task_create], - [HOST_LDFLAGS="$HOST_LDFLAGS -ldevmapper" + [LIBDEVMAPPER="-ldevmapper" AC_DEFINE([HAVE_DEVICE_MAPPER], [1], [Define to 1 if you have the devmapper library.])], [device_mapper_excuse="need devmapper library"]) fi +AC_SUBST([LIBDEVMAPPER]) pkglibrootdir='$(libdir)'/`echo $PACKAGE | sed "$program_transform_name"` AC_SUBST(pkglibrootdir) diff --git a/grub-core/modules.def b/grub-core/modules.def index 3d222dd74..416e20dd1 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -249,7 +249,7 @@ program = { ldadd = 'kernel.img$(EXEEXT)'; ldadd = '$(MODULE_FILES)'; - ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS)'; + ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER)'; enable = emu; }; @@ -262,7 +262,7 @@ program = { nodist = symlist.c; ldadd = 'kernel.img$(EXEEXT)'; - ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS)'; + ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER)'; enable = emu; }; diff --git a/modules.def b/modules.def index 8fb97cd40..a3de5877d 100644 --- a/modules.def +++ b/modules.def @@ -99,7 +99,7 @@ program = { name = grub-bin2h; source = util/bin2h.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; mansection = 1; }; @@ -112,7 +112,7 @@ program = { extra_dist = util/grub-mkimagexx.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; cppflags = '-DGRUB_PKGLIBROOTDIR=\"$(pkglibrootdir)\"'; }; @@ -123,7 +123,7 @@ program = { source = util/grub-mkrelpath.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; }; program = { @@ -133,7 +133,7 @@ program = { source = util/grub-script-check.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; }; program = { @@ -143,7 +143,7 @@ program = { source = util/grub-editenv.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; }; program = { @@ -153,7 +153,7 @@ program = { source = util/grub-mkpasswd-pbkdf2.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; }; @@ -181,7 +181,7 @@ program = { source = util/grub-fstest.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; condition = COND_GRUB_FSTEST; }; @@ -194,7 +194,7 @@ program = { cflags = '$(freetype_cflags)'; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; ldflags = '$(freetype_libs)'; condition = COND_GRUB_MKFONT; }; @@ -213,8 +213,7 @@ program = { sparc64_ieee1275 = util/ieee1275/devicemap.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; - ldflags = '$(LIBUTIL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; }; program = { @@ -224,8 +223,7 @@ program = { source = util/grub-probe.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; - ldflags = '$(LIBUTIL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; }; program = { @@ -242,8 +240,7 @@ program = { sparc64_ieee1275 = util/lvm.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; - ldflags = '$(LIBUTIL)'; + ldflags = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; enable = i386_pc; enable = sparc64_ieee1275; From 7afdce98a64663ff8f07d64c95383ee801d960e1 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 19 Aug 2010 15:47:38 +0530 Subject: [PATCH 183/271] fix example_unit_test build --- modules.def | 1 + 1 file changed, 1 insertion(+) diff --git a/modules.def b/modules.def index a3de5877d..c7574e928 100644 --- a/modules.def +++ b/modules.def @@ -453,4 +453,5 @@ program = { source = grub-core/tests/lib/test.c; cflags = -Wno-format; ldadd = libgrub.a; + ldflags = '$(LIBDEVMAPPER)'; }; From 34980574fc30594028d132b1414f155e71fdf9b2 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Thu, 19 Aug 2010 17:50:05 +0530 Subject: [PATCH 184/271] minor cleanups --- configure.ac | 22 ++++++++++++++++++++-- tests/example_grub_script_test.in | 2 +- tests/util/grub-shell-tester.in | 2 +- tests/util/grub-shell.in | 2 +- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 9b918f1bc..0923bf08f 100644 --- a/configure.ac +++ b/configure.ac @@ -13,6 +13,25 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +dnl This configure script is complicated, because GRUB needs to deal +dnl with three potentially different types: +dnl +dnl build -- the environment for building GRUB +dnl host -- the environment for running utilities +dnl target -- the environment for running GRUB +dnl +dnl In addition, GRUB needs to deal with a platform specification +dnl which specifies the system running GRUB, such as firmware. +dnl This is necessary because the target type in autoconf does not +dnl describe such a system very well. +dnl +dnl The current strategy is to use variables with no prefix (such as +dnl CC, CFLAGS, etc.) for the host type as well as the build type, +dnl because GRUB does not need to use those variables for the build +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],[1.98],[bug-grub@gnu.org]) # We don't want -g -O2 by default in CFLAGS @@ -879,10 +898,9 @@ else mkdir -p include/grub 2>/dev/null rm -rf include/grub/cpu cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null - cp -rp $srcdir/grub-core/lib/$target_cpu grub-core/lib/target_cpu 2>/dev/null if test "$platform" != emu ; then rm -rf include/grub/machine - cp -rp $srcdir/grub-core/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null + cp -rp $srcdir/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null fi fi diff --git a/tests/example_grub_script_test.in b/tests/example_grub_script_test.in index 6fa3dc98a..93a90a18e 100644 --- a/tests/example_grub_script_test.in +++ b/tests/example_grub_script_test.in @@ -1,3 +1,3 @@ -#! @abs_top_builddir@/grub-shell-tester --modules=echo +#! @builddir@/grub-shell-tester --modules=echo echo "hello world" diff --git a/tests/util/grub-shell-tester.in b/tests/util/grub-shell-tester.in index d2a9af3ab..ed34a5e17 100644 --- a/tests/util/grub-shell-tester.in +++ b/tests/util/grub-shell-tester.in @@ -91,7 +91,7 @@ if [ "x${source}" = x ] ; then fi outfile1=`mktemp` -@abs_top_builddir@/grub-shell --qemu-opts="${qemuopts}" --modules=${modules} ${source} >${outfile1} +@builddir@/grub-shell --qemu-opts="${qemuopts}" --modules=${modules} ${source} >${outfile1} outfile2=`mktemp` bash ${source} >${outfile2} diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index fc1e01ef5..3f25fe7bb 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -124,7 +124,7 @@ halt EOF isofile=`mktemp` -sh @abs_top_builddir@/grub-mkrescue --grub-mkimage=${builddir}/grub-mkimage \ +sh @builddir@/grub-mkrescue --grub-mkimage=${builddir}/grub-mkimage \ --override-directory=${builddir}/grub-core --output=${isofile} \ boot/grub/grub.cfg=${cfgfile} \ /boot/grub/testcase.cfg=${source} >/dev/null 2>&1 From a5a3bccd54e0a34595086f461a462d0039292809 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 10:14:29 +0530 Subject: [PATCH 185/271] added conf/Makefile.common and conf/Makefile.extra-dist --- Makefile.am | 105 +++------------------- conf/Makefile.common | 118 ++++++++++++++++++++++++ conf/Makefile.extra-dist | 75 ++++++++++++++++ docs/Makefile.am | 2 - gentpl.py | 6 +- grub-core/Makefile.am | 188 +++++---------------------------------- 6 files changed, 227 insertions(+), 267 deletions(-) create mode 100644 conf/Makefile.common create mode 100644 conf/Makefile.extra-dist diff --git a/Makefile.am b/Makefile.am index e96a540da..ed482eea2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,104 +2,19 @@ AUTOMAKE_OPTIONS = subdir-objects DEPDIR = .deps-util SUBDIRS = . grub-core po docs -EXTRA_DIST = autogen.sh gentpl.py Makefile.tpl modules.def geninit.sh -EXTRA_DIST += include conf/i386-pc-cygwin-img-ld.sc -grubconfdir = $(sysconfdir)/grub.d -platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) +include $(top_srcdir)/conf/Makefile.common +include $(top_srcdir)/conf/Makefile.extra-dist -# Platform specific options -if COND_i386_pc - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_efi - LDFLAGS_PLATFORM = -melf_i386 -endif -if COND_x86_64_efi - LDFLAGS_PLATFORM = -melf_x86_64 -endif -if COND_i386_qemu - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_coreboot - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_ieee1275 - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_mips_yeeloong - CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache - CCASFLAGS_PLATFORM = -march=mips3 -endif -if COND_sparc64_ieee1275 - CFLAGS_PLATFORM = -mno-app-regs - LDFLAGS_PLATFORM = -melf64_sparc -mno-relax -endif +AM_CFLAGS = $(HOST_CFLAGS) +AM_LDFLAGS = $(HOST_LDFLAGS) +AM_CPPFLAGS = $(HOST_CPPFLAGS) $(CPPFLAGS_DEFAULT) +AM_CCASFLAGS = $(HOST_CCASFLAGS) $(CCASFLAGS_DEFAULT) -CPPFLAGS_GRUB = -DGRUB_FILE=\"`basename $<`\" -CPPFLAGS_GRUB += -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) -CPPFLAGS_GRUB += -I$(top_srcdir)/include -CPPFLAGS_GRUB += -I$(top_builddir)/include -CCASFLAGS_GRUB = -DASM_FILE=1 - -CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap - -CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" -CPPFLAGS_GNULIB = -I$(top_srcdir)/grub-core/gnulib - -CFLAGS_MKISOFS = -Wno-all -Werror -CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include - -CFLAGS_POSIX = -fno-builtin -CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap - -CPPFLAGS_EFIEMU = -I$(top_srcdir)/grub-core/efiemu/runtime - -# to calm down automake -BUILT_SOURCES = -CLEANFILES = -COMMAND_FILES = -DEF_FILES = -FS_FILES = -HANDLER_FILES = -IMG_FILES = -MOD_FILES = -MODULE_FILES = -PARTMAP_FILES = -PARTTOOL_FILES = -TERMINAL_FILES = -TESTS = -UND_FILES = -VIDEO_FILES = -bin_PROGRAMS = -bin_SCRIPTS = -check_PROGRAMS = -check_SCRIPTS = -grubconf_DATA = -grubconf_SCRIPTS = -man_MANS = -noinst_DATA = -noinst_LIBRARIES = -noinst_PROGRAMS = -pkglib_SCRIPTS = -platform_DATA = -sbin_PROGRAMS = -sbin_SCRIPTS = - -CFLAGS_PROGRAM = $(HOST_CFLAGS) $(CFLAGS_GNULIB) -LDFLAGS_PROGRAM = $(HOST_LDFLAGS) $(LDFLAGS_GNULIB) -CPPFLAGS_PROGRAM = $(HOST_CPPFLAGS) $(CPPFLAGS_GNULIB) -CCASFLAGS_PROGRAM = $(HOST_CCASFLAGS) $(CCASFLAGS_GNULIB) - -CFLAGS_LIBRARY = $(CFLAGS_PROGRAM) -CPPFLAGS_LIBRARY = $(CPPFLAGS_PROGRAM) -CCASFLAGS_LIBRARY = $(CCASFLAGS_PROGRAM) - -AM_CFLAGS = -AM_LDFLAGS = -AM_CPPFLAGS = $(CPPFLAGS_GRUB) -AM_CCASFLAGS = $(CCASFLAGS_GRUB) +CFLAGS_PROGRAM += $(CFLAGS_GNULIB) +LDFLAGS_PROGRAM += $(LDFLAGS_GNULIB) +CPPFLAGS_PROGRAM += $(CPPFLAGS_GNULIB) +CCASFLAGS_PROGRAM += $(CCASFLAGS_GNULIB) include $(srcdir)/modules.am diff --git a/conf/Makefile.common b/conf/Makefile.common new file mode 100644 index 000000000..db3c13c73 --- /dev/null +++ b/conf/Makefile.common @@ -0,0 +1,118 @@ +# Platform specific options +if COND_i386_pc + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_efi + LDFLAGS_PLATFORM = -melf_i386 +endif +if COND_x86_64_efi + LDFLAGS_PLATFORM = -melf_x86_64 +endif +if COND_i386_qemu + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_coreboot + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_i386_ieee1275 + CFLAGS_PLATFORM = -mrtd -mregparm=3 +endif +if COND_mips_yeeloong + CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache + CCASFLAGS_PLATFORM = -march=mips3 +endif +if COND_sparc64_ieee1275 + CFLAGS_PLATFORM = -mno-app-regs + LDFLAGS_PLATFORM = -melf64_sparc -mno-relax +endif + +# Other options + +CPPFLAGS_DEFAULT = -DGRUB_FILE=\"`basename $<`\" +CPPFLAGS_DEFAULT += -I$(builddir) +CPPFLAGS_DEFAULT += -I$(srcdir) +CPPFLAGS_DEFAULT += -I$(top_builddir) +CPPFLAGS_DEFAULT += -I$(top_srcdir) +CPPFLAGS_DEFAULT += -I$(top_srcdir)/include +CPPFLAGS_DEFAULT += -I$(top_builddir)/include +CCASFLAGS_DEFAULT = -DASM_FILE=1 + +LDADD_KERNEL = -lgcc +CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N -static-libgcc +CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N,-r,-d +CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_IMAGE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -fno-builtin +LDFLAGS_IMAGE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N,-S +CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_PROGRAM = +LDFLAGS_PROGRAM = +CPPFLAGS_PROGRAM = +CCASFLAGS_PROGRAM = + +CFLAGS_LIBRARY = $(CFLAGS_PROGRAM) +CPPFLAGS_LIBRARY = $(CPPFLAGS_PROGRAM) +CCASFLAGS_LIBRARY = $(CCASFLAGS_PROGRAM) + +# Other variables + +grubconfdir = $(sysconfdir)/grub.d +platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) + +CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers +CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap + +CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" +CPPFLAGS_GNULIB = -I$(top_srcdir)/grub-core/gnulib + +CFLAGS_MKISOFS = -Wno-all -Werror +CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include + +CFLAGS_POSIX = -fno-builtin +CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap + +CPPFLAGS_EFIEMU = -I$(top_srcdir)/grub-core/efiemu/runtime + +# Define these variables to calm down automake + +FS_FILES = +DEF_FILES = +UND_FILES = +IMG_FILES = +MOD_FILES = +VIDEO_FILES = +MODULE_FILES = +HANDLER_FILES = +PARTMAP_FILES = +COMMAND_FILES = +PARTTOOL_FILES = +TERMINAL_FILES = +KERNEL_HEADER_FILES = + +man_MANS = +noinst_DATA = +bin_SCRIPTS = +sbin_SCRIPTS = +bin_PROGRAMS = +platform_DATA = +sbin_PROGRAMS = +check_SCRIPTS = +grubconf_DATA = +check_PROGRAMS = +pkglib_SCRIPTS = +noinst_PROGRAMS = +grubconf_SCRIPTS = +noinst_LIBRARIES = + +TESTS = +EXTRA_DIST = +CLEANFILES = +BUILT_SOURCES = diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist new file mode 100644 index 000000000..ae4b8fbde --- /dev/null +++ b/conf/Makefile.extra-dist @@ -0,0 +1,75 @@ +EXTRA_DIST += include + +EXTRA_DIST += autogen.sh +EXTRA_DIST += geninit.sh + +EXTRA_DIST += gentpl.py +EXTRA_DIST += modules.def +EXTRA_DIST += Makefile.tpl + +EXTRA_DIST += docs/man +EXTRA_DIST += docs/grub.cfg + +EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc + +EXTRA_DIST += grub-core/modules.def +EXTRA_DIST += grub-core/genmoddep.awk +EXTRA_DIST += grub-core/genmodsrc.sh +EXTRA_DIST += grub-core/genfslist.sh +EXTRA_DIST += grub-core/gencmdlist.sh +EXTRA_DIST += grub-core/gensymlist.sh +EXTRA_DIST += grub-core/genemuinit.sh +EXTRA_DIST += grub-core/genvideolist.sh +EXTRA_DIST += grub-core/genhandlerlist.sh +EXTRA_DIST += grub-core/genpartmaplist.sh +EXTRA_DIST += grub-core/genterminallist.sh +EXTRA_DIST += grub-core/genparttoollist.sh +EXTRA_DIST += grub-core/genemuinitheader.sh + +EXTRA_DIST += grub-core/gnulib/getopt.h +EXTRA_DIST += grub-core/gnulib/argp-version-etc.h +EXTRA_DIST += grub-core/gnulib/fnmatch.h +EXTRA_DIST += grub-core/gnulib/error.h +EXTRA_DIST += grub-core/gnulib/argp-namefrob.h +EXTRA_DIST += grub-core/gnulib/argp.h +EXTRA_DIST += grub-core/gnulib/argp-fmtstream.h +EXTRA_DIST += grub-core/gnulib/gettext.h +EXTRA_DIST += grub-core/gnulib/regex_internal.h +EXTRA_DIST += grub-core/gnulib/progname.h +EXTRA_DIST += grub-core/gnulib/regex.h +EXTRA_DIST += grub-core/gnulib/alloca.h +EXTRA_DIST += grub-core/gnulib/getopt_int.h +EXTRA_DIST += grub-core/efiemu/runtime/config.h + +EXTRA_DIST += grub-core/lib/posix_wrap/localcharset.h +EXTRA_DIST += grub-core/lib/posix_wrap/ctype.h +EXTRA_DIST += grub-core/lib/posix_wrap/limits.h +EXTRA_DIST += grub-core/lib/posix_wrap/stdio.h +EXTRA_DIST += grub-core/lib/posix_wrap/sys/types.h +EXTRA_DIST += grub-core/lib/posix_wrap/unistd.h +EXTRA_DIST += grub-core/lib/posix_wrap/locale.h +EXTRA_DIST += grub-core/lib/posix_wrap/wchar.h +EXTRA_DIST += grub-core/lib/posix_wrap/string.h +EXTRA_DIST += grub-core/lib/posix_wrap/langinfo.h +EXTRA_DIST += grub-core/lib/posix_wrap/wctype.h +EXTRA_DIST += grub-core/lib/posix_wrap/stdint.h +EXTRA_DIST += grub-core/lib/posix_wrap/stdlib.h +EXTRA_DIST += grub-core/lib/posix_wrap/assert.h +EXTRA_DIST += grub-core/lib/posix_wrap/errno.h + +EXTRA_DIST += grub-core/lib/libgcrypt_wrap/cipher_wrap.h +EXTRA_DIST += grub-core/lib/libgcrypt/cipher/rijndael-tables.h +EXTRA_DIST += grub-core/lib/libgcrypt/cipher/bithelp.h +EXTRA_DIST += grub-core/lib/libgcrypt/cipher/rmd.h +EXTRA_DIST += grub-core/lib/libgcrypt/cipher/hash-common.h +EXTRA_DIST += grub-core/lib/libgcrypt/cipher/camellia.h + +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/types.h +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/cipher.h +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/rijndael-tables.h +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/memory.h +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/bithelp.h +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/g10lib.h +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/rmd.h +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/hash-common.h +EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/camellia.h diff --git a/docs/Makefile.am b/docs/Makefile.am index a2e83dcd6..103240bcc 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1,7 +1,5 @@ AUTOMAKE_OPTIONS = subdir-objects -EXTRA_DIST = grub.cfg man - AM_MAKEINFOFLAGS = --force --no-split --no-validate info_TEXINFOS = grub.texi grub_TEXINFOS = fdl.texi diff --git a/gentpl.py b/gentpl.py index 4d7ed0aa3..eb790751c 100644 --- a/gentpl.py +++ b/gentpl.py @@ -226,15 +226,15 @@ mod-[+ name +].c: [+ name +].module$(EXEEXT) moddep.lst genmodsrc.sh sh $(srcdir)/genmodsrc.sh [+ name +] moddep.lst > $@ || (rm -f $@; exit 1) mod-[+ name +].o: mod-[+ name +].c - $(TARGET_CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS_MODULE) $(CPPFLAGS) $(CFLAGS_MODULE) $(CFLAGS) -c -o $@ $< + $(TARGET_CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname() + """_CPPFLAGS) $(CPPFLAGS) $(""" + cname() + """_CFLAGS) $(CFLAGS) -c -o $@ $< [+ name +].mod: [+ name +].module$(EXEEXT) mod-[+ name +].o if test x$(USE_APPLE_CC_FIXES) = xyes; then \ - $(CCLD) $(LDFLAGS_MODULE) $(LDFLAGS) -o $@.bin $^; \ + $(CCLD) $(""" + cname() + """_LDFLAGS) $(LDFLAGS) -o $@.bin $^; \ $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -nu -nd $@.bin $@; \ rm -f $@.bin; \ else \ - $(CCLD) -o $@ $(LDFLAGS_MODULE) $(LDFLAGS) $^; \ + $(CCLD) -o $@ $(""" + cname() + """_LDFLAGS) $(LDFLAGS) $^; \ if test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; \ fi diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index e1f45eb38..d91448149 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -1,172 +1,26 @@ AUTOMAKE_OPTIONS = subdir-objects +DEPDIR=.deps-core + +include $(top_srcdir)/conf/Makefile.common + CC=$(TARGET_CC) CPP=$(TARGET_CC) CCAS=$(TARGET_CC) -DEPDIR=.deps-core -EXTRA_DIST = -EXTRA_DIST += modules.def genmoddep.awk -EXTRA_DIST += genmodsrc.sh gensymlist.sh genemuinit.sh genemuinitheader.sh -EXTRA_DIST += genfslist.sh gencmdlist.sh genvideolist.sh genhandlerlist.sh -EXTRA_DIST += genpartmaplist.sh genparttoollist.sh genterminallist.sh -EXTRA_DIST += lib/libgcrypt_wrap/cipher_wrap.h -EXTRA_DIST += lib/libgcrypt/cipher/rijndael-tables.h -EXTRA_DIST += lib/libgcrypt/cipher/bithelp.h -EXTRA_DIST += lib/libgcrypt/cipher/rmd.h -EXTRA_DIST += lib/libgcrypt/cipher/hash-common.h -EXTRA_DIST += lib/libgcrypt/cipher/camellia.h -EXTRA_DIST += lib/posix_wrap/localcharset.h -EXTRA_DIST += lib/posix_wrap/ctype.h -EXTRA_DIST += lib/posix_wrap/limits.h -EXTRA_DIST += lib/posix_wrap/stdio.h -EXTRA_DIST += lib/posix_wrap/sys/types.h -EXTRA_DIST += lib/posix_wrap/unistd.h -EXTRA_DIST += lib/posix_wrap/locale.h -EXTRA_DIST += lib/posix_wrap/wchar.h -EXTRA_DIST += lib/posix_wrap/string.h -EXTRA_DIST += lib/posix_wrap/langinfo.h -EXTRA_DIST += lib/posix_wrap/wctype.h -EXTRA_DIST += lib/posix_wrap/stdint.h -EXTRA_DIST += lib/posix_wrap/stdlib.h -EXTRA_DIST += lib/posix_wrap/assert.h -EXTRA_DIST += lib/posix_wrap/errno.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/types.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/cipher.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/rijndael-tables.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/memory.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/bithelp.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/g10lib.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/rmd.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/hash-common.h -EXTRA_DIST += lib/libgcrypt-grub/cipher/camellia.h -EXTRA_DIST += efiemu/runtime/config.h -EXTRA_DIST += gnulib/getopt.h -EXTRA_DIST += gnulib/argp-version-etc.h -EXTRA_DIST += gnulib/fnmatch.h -EXTRA_DIST += gnulib/error.h -EXTRA_DIST += gnulib/argp-namefrob.h -EXTRA_DIST += gnulib/argp.h -EXTRA_DIST += gnulib/argp-fmtstream.h -EXTRA_DIST += gnulib/gettext.h -EXTRA_DIST += gnulib/regex_internal.h -EXTRA_DIST += gnulib/progname.h -EXTRA_DIST += gnulib/regex.h -EXTRA_DIST += gnulib/alloca.h -EXTRA_DIST += gnulib/getopt_int.h +AM_CFLAGS = $(TARGET_CFLAGS) +AM_LDFLAGS = $(TARGET_LDFLAGS) +AM_CPPFLAGS = $(TARGET_CPPFLAGS) $(CPPFLAGS_DEFAULT) +AM_CCASFLAGS = $(TARGET_CCASFLAGS) $(CCASFLAGS_DEFAULT) -grubconfdir = $(sysconfdir)/grub.d -platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) +CFLAGS_PROGRAM += $(CFLAGS_PLATFORM) +LDFLAGS_PROGRAM += $(LDFLAGS_PLATFORM) +CPPFLAGS_PROGRAM += $(CPPFLAGS_PLATFORM) +CCASFLAGS_PROGRAM += $(CCASFLAGS_PLATFORM) -# to calm down automake -BUILT_SOURCES = -CLEANFILES = -COMMAND_FILES = -DEF_FILES = -FS_FILES = -HANDLER_FILES = -IMG_FILES = -MOD_FILES = -MODULE_FILES = -PARTMAP_FILES = -PARTTOOL_FILES = -TERMINAL_FILES = -TESTS = -UND_FILES = -VIDEO_FILES = -bin_PROGRAMS = -bin_SCRIPTS = -check_PROGRAMS = -check_SCRIPTS = -grubconf_DATA = -grubconf_SCRIPTS = -man_MANS = -noinst_DATA = -noinst_LIBRARIES = -noinst_PROGRAMS = -pkglib_SCRIPTS = -platform_DATA = -sbin_PROGRAMS = -sbin_SCRIPTS = -KERNEL_HEADER_FILES = - -# Platform specific options -if COND_i386_pc - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_efi - LDFLAGS_PLATFORM = -melf_i386 -endif -if COND_x86_64_efi - LDFLAGS_PLATFORM = -melf_x86_64 -endif -if COND_i386_qemu - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_coreboot - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_i386_ieee1275 - CFLAGS_PLATFORM = -mrtd -mregparm=3 -endif -if COND_mips_yeeloong - CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache - CCASFLAGS_PLATFORM = -march=mips3 -endif -if COND_sparc64_ieee1275 - CFLAGS_PLATFORM = -mno-app-regs - LDFLAGS_PLATFORM = -melf64_sparc -mno-relax -endif - -CPPFLAGS_GRUB = -DGRUB_FILE=\"`basename $<`\" -CPPFLAGS_GRUB += -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) -CPPFLAGS_GRUB += -I$(top_srcdir)/include -CPPFLAGS_GRUB += -I$(top_builddir)/include -CCASFLAGS_GRUB = -DASM_FILE=1 - -CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap - -CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" -CPPFLAGS_GNULIB = -I$(top_srcdir)/grub-core/gnulib - -CFLAGS_MKISOFS = -Wno-all -Werror -CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include - -CFLAGS_POSIX = -fno-builtin -CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap - -CPPFLAGS_EFIEMU = -I$(top_srcdir)/grub-core/efiemu/runtime - -LDADD_KERNEL = -lgcc -CFLAGS_KERNEL = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding -LDFLAGS_KERNEL = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N -static-libgcc -CPPFLAGS_KERNEL = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -CCASFLAGS_KERNEL = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) - -CFLAGS_MODULE = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding -LDFLAGS_MODULE = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N,-r,-d -CPPFLAGS_MODULE = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -CCASFLAGS_MODULE = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) - -CFLAGS_IMAGE = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -fno-builtin -LDFLAGS_IMAGE = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N,-S -CPPFLAGS_IMAGE = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -CCASFLAGS_IMAGE = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) - -CFLAGS_LIBRARY = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -fno-builtin -CPPFLAGS_LIBRARY = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -CCASFLAGS_LIBRARY = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) - -CFLAGS_PROGRAM = $(TARGET_CFLAGS) $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -LDFLAGS_PROGRAM = $(TARGET_LDFLAGS) $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -CPPFLAGS_PROGRAM = $(TARGET_CPPFLAGS) $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -CCASFLAGS_PROGRAM = $(TARGET_CCASFLAGS) $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) - -AM_CFLAGS = -AM_LDFLAGS = -AM_CPPFLAGS = $(CPPFLAGS_GRUB) -AM_CCASFLAGS = $(CCASFLAGS_GRUB) +CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin +CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM) +CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM) # gentrigtables gentrigtables: gentrigtables.c @@ -456,27 +310,27 @@ if COND_ENABLE_EFIEMU efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) -rm -f $@; \ if test "x$(TARGET_APPLE_CC)" = x1; then \ - $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF32 -DAPPLE_CC -m32 -Wall -Werror -nostdlib -O2 -c -o $@.bin $< || exit 1; \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -DELF32 -DAPPLE_CC -m32 -Wall -Werror -nostdlib -O2 -c -o $@.bin $< || exit 1; \ $(OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \ rm -f $@.bin; \ else \ - $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF32 -m32 -Wall -Werror -nostdlib -O2 -c -o $@ $< || exit 1; \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -DELF32 -m32 -Wall -Werror -nostdlib -O2 -c -o $@ $< || exit 1; \ if test ! -z "$(TARGET_OBJ2ELF)"; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \ fi efiemu64_c.o: efiemu/runtime/efiemu.c if test "x$(TARGET_APPLE_CC)" = x1; then \ - $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF64 -DAPPLE_CC=1 -m64 -nostdlib -Wall -Werror -mno-red-zone -c -o $@ $< || exit 1; \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -DELF64 -DAPPLE_CC=1 -m64 -nostdlib -Wall -Werror -mno-red-zone -c -o $@ $< || exit 1; \ else \ - $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF64 -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large -mno-red-zone -c -o $@ $< || exit 1; \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -DELF64 -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large -mno-red-zone -c -o $@ $< || exit 1; \ fi efiemu64_s.o: efiemu/runtime/efiemu.S -rm -f $@ if test "x$(TARGET_APPLE_CC)" = x1; then \ - $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF64 -DAPPLE_CC=1 -m64 -Wall -Werror -nostdlib -O2 -mno-red-zone -c -o $@ $< || exit 1; \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -DELF64 -DAPPLE_CC=1 -m64 -Wall -Werror -nostdlib -O2 -mno-red-zone -c -o $@ $< || exit 1; \ else \ - $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_GRUB) -DELF64 -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $< || exit 1; \ + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -DELF64 -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $< || exit 1; \ fi efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF) From 02a6605e7e9528b06ae466893784a35a5eb20342 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 11:10:42 +0530 Subject: [PATCH 186/271] minor fixes --- conf/Makefile.common | 3 ++- gentpl.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/conf/Makefile.common b/conf/Makefile.common index db3c13c73..47067596b 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -28,7 +28,7 @@ endif # Other options -CPPFLAGS_DEFAULT = -DGRUB_FILE=\"`basename $<`\" +CPPFLAGS_DEFAULT = -DGRUB_FILE=\"`echo $< | sed "s@$(top_srcdir)/@@g"`\" CPPFLAGS_DEFAULT += -I$(builddir) CPPFLAGS_DEFAULT += -I$(srcdir) CPPFLAGS_DEFAULT += -I$(top_builddir) @@ -42,6 +42,7 @@ CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N -static-libgcc CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib -Wl,-N,-r,-d diff --git a/gentpl.py b/gentpl.py index eb790751c..632b4c13e 100644 --- a/gentpl.py +++ b/gentpl.py @@ -100,7 +100,7 @@ def if_platform_tagged(platform, tag, snippet_if, snippet_else=None): for group in RMAP[platform]: r += "[+ = \"" + group + "\" +]" + snippet_if - if snippet_else != None: r += "[+ * +]" + snippet_if + if snippet_else != None: r += "[+ * +]" + snippet_else r += "[+ ESAC +][+ ENDFOR +]" if snippet_else == None: From a26187d7c0d39e05f0c8df5e1d5d3a57ab5ee8cb Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 11:13:37 +0530 Subject: [PATCH 187/271] update .bzrignore --- .bzrignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.bzrignore b/.bzrignore index cdc55d00b..1672efd65 100644 --- a/.bzrignore +++ b/.bzrignore @@ -91,4 +91,5 @@ depcomp mdate-sh texinfo.tex grub-core/lib/libgcrypt-grub - +**/.deps-util +**/.deps-core From 07daa815afa40e8ced4da557b6e9c9efecdab794 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 11:39:47 +0530 Subject: [PATCH 188/271] better fix for setjmp module --- configure.ac | 7 ------- grub-core/lib/setjmp.S | 13 +++++++++++++ grub-core/modules.def | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 grub-core/lib/setjmp.S diff --git a/configure.ac b/configure.ac index 0923bf08f..9c1440775 100644 --- a/configure.ac +++ b/configure.ac @@ -904,13 +904,6 @@ else fi fi -# Copy */setjmp.S to target_cpu/ -AC_CONFIG_COMMANDS([grub-core/lib/target_cpu], - [mkdir -p grub-core/lib/target_cpu]) -AC_CONFIG_COMMANDS([setjmp.S], - [cp -rp $srcdir/grub-core/lib/$target_cpu/setjmp.S grub-core/lib/target_cpu/], - [target_cpu=$target_cpu srcdir=$srcdir]) - AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([grub-core/Makefile]) AC_CONFIG_FILES([po/Makefile]) diff --git a/grub-core/lib/setjmp.S b/grub-core/lib/setjmp.S new file mode 100644 index 000000000..c39c91b9c --- /dev/null +++ b/grub-core/lib/setjmp.S @@ -0,0 +1,13 @@ +#if defined(__i386__) +#include "./i386/setjmp.S" +#elif defined(__x86_64__) +#include "./x86_64/setjmp.S" +#elif defined(__sparc__) +#include "./sparc64/setjmp.S" +#elif defined(__mips__) +#include "./mips/setjmp.S" +#elif defined(__powerpc__) +#include "./powerpc/setjmp.S" +#else +#error "Unknwon target cpu type" +#endif diff --git a/grub-core/modules.def b/grub-core/modules.def index 71215aba0..fa830e779 100644 --- a/grub-core/modules.def +++ b/grub-core/modules.def @@ -1214,7 +1214,7 @@ module = { module = { name = setjmp; - nodist = lib/target_cpu/setjmp.S; + source = lib/setjmp.S; extra_dist = lib/i386/setjmp.S; extra_dist = lib/mips/setjmp.S; extra_dist = lib/x86_64/setjmp.S; From 771111e53dd69d2a2026bceea4da9336079388fe Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 13:00:11 +0530 Subject: [PATCH 189/271] fix COND_APPLE_CC definition --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 9c1440775..cd0869187 100644 --- a/configure.ac +++ b/configure.ac @@ -884,7 +884,7 @@ AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) AM_CONDITIONAL([COND_GRUB_FSTEST], [test x$enable_grub_fstest = xyes]) AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x]) -AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC != x]) +AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC = x1]) AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) # Output files. From 3d9d3542972693ecedc0d3de595c18ef61472298 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 18:21:31 +0530 Subject: [PATCH 190/271] generate gcry rules from import_gcry --- .bzrignore | 6 +- Makefile.am | 3 +- modules.def => Makefile.util.def | 0 autogen.sh | 15 ++- conf/Makefile.common | 24 ++++ gentpl.py | 11 -- grub-core/Makefile.am | 3 +- grub-core/{modules.def => Makefile.core.def} | 134 ------------------- util/import_gcry.py | 18 +-- 9 files changed, 49 insertions(+), 165 deletions(-) rename modules.def => Makefile.util.def (100%) rename grub-core/{modules.def => Makefile.core.def} (90%) diff --git a/.bzrignore b/.bzrignore index 1672efd65..3c7150afb 100644 --- a/.bzrignore +++ b/.bzrignore @@ -19,7 +19,6 @@ config.status config.sub configure conf/*.mk -conf/gcry.rmk *.d DISTLIST docs/*.info @@ -80,7 +79,6 @@ trigtables.c update-grub_lib unidata.c Makefile.in -modules.am GPATH GRTAGS GSYMS @@ -93,3 +91,7 @@ texinfo.tex grub-core/lib/libgcrypt-grub **/.deps-util **/.deps-core +Makefile.util.am +grub-core/Makefile.core.am +grub-core/Makefile.gcry.am +grub-core/Makefile.gcry.def diff --git a/Makefile.am b/Makefile.am index ed482eea2..b0d374b75 100644 --- a/Makefile.am +++ b/Makefile.am @@ -16,7 +16,7 @@ LDFLAGS_PROGRAM += $(LDFLAGS_GNULIB) CPPFLAGS_PROGRAM += $(CPPFLAGS_GNULIB) CCASFLAGS_PROGRAM += $(CCASFLAGS_GNULIB) -include $(srcdir)/modules.am +include $(srcdir)/Makefile.util.am # XXX Use Automake's LEX & YACC support grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y @@ -82,3 +82,4 @@ CLEANFILES += widthspec.h # Install config.h into platformdir platform_HEADERS = config.h + diff --git a/modules.def b/Makefile.util.def similarity index 100% rename from modules.def rename to Makefile.util.def diff --git a/autogen.sh b/autogen.sh index 60139cfb3..31a269e0f 100755 --- a/autogen.sh +++ b/autogen.sh @@ -4,19 +4,20 @@ set -e autogen --version >/dev/null || (echo autogen missing; exit 1) -echo "Creating Makefile.tpl..." -python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl - -echo "Running autogen..." -autogen -T Makefile.tpl modules.def | sed -e '/^$/{N;/^\n$/D;}' > modules.am -autogen -T Makefile.tpl grub-core/modules.def | sed -e '/^$/{N;/^\n$/D;}' > grub-core/modules.am - echo "Importing unicode..." python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c echo "Importing libgcrypt..." python util/import_gcry.py grub-core/lib/libgcrypt/ grub-core +echo "Creating Makefile.tpl..." +python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl + +echo "Running autogen..." +autogen -T Makefile.tpl Makefile.util.def | sed -e '/^$/{N;/^\n$/D;}' > Makefile.util.am +autogen -T Makefile.tpl grub-core/Makefile.core.def | sed -e '/^$/{N;/^\n$/D;}' > grub-core/Makefile.core.am +autogen -T Makefile.tpl grub-core/Makefile.gcry.def | sed -e '/^$/{N;/^\n$/D;}' > grub-core/Makefile.gcry.am + echo "Saving timestamps..." echo timestamp > stamp-h.in diff --git a/conf/Makefile.common b/conf/Makefile.common index 47067596b..3bb8b9c0e 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -1,3 +1,5 @@ +# -*- makefile -*- + # Platform specific options if COND_i386_pc CFLAGS_PLATFORM = -mrtd -mregparm=3 @@ -117,3 +119,25 @@ TESTS = EXTRA_DIST = CLEANFILES = BUILT_SOURCES = + +# Rules for autogen definition files + +.PRECIOUS: $(top_srcdir)/Makefile.tpl +$(top_srcdir)/Makefile.tpl: $(top_srcdir)/gentpl.py + python $< | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +.PRECIOUS: $(top_srcdir)/Makefile.util.am +$(top_srcdir)/Makefile.util.am: $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.tpl + autogen -T $(top_srcdir)/Makefile.tpl $< | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am +$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/Makefile.tpl + autogen -T $(top_srcdir)/Makefile.tpl $< | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +.PRECIOUS: $(top_srcdir)/grub-core/Makefile.gcry.am +$(top_srcdir)/grub-core/Makefile.gcry.am: $(top_srcdir)/grub-core/Makefile.gcry.def $(top_srcdir)/Makefile.tpl + autogen -T $(top_srcdir)/Makefile.tpl $< | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ diff --git a/gentpl.py b/gentpl.py index 632b4c13e..59950bb0e 100644 --- a/gentpl.py +++ b/gentpl.py @@ -448,14 +448,3 @@ print d print e print f print g - -print """.PRECIOUS: modules.am -$(srcdir)/modules.am: $(srcdir)/modules.def $(top_srcdir)/Makefile.tpl - autogen -T $(top_srcdir)/Makefile.tpl $(srcdir)/modules.def | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) - mv $@.new $@ - -.PRECIOUS: $(top_srcdir)/Makefile.tpl -$(top_srcdir)/Makefile.tpl: $(top_srcdir)/gentpl.py - python $(top_srcdir)/gentpl.py | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) - mv $@.new $@ -""" diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index d91448149..770f1a6bb 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -45,7 +45,8 @@ grub_script.yy.h: script/yylex.l grub_script.yy.c: grub_script.yy.h CLEANFILES += grub_script.yy.c grub_script.yy.h -include $(srcdir)/modules.am +include $(srcdir)/Makefile.core.am +include $(srcdir)/Makefile.gcry.am KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cache.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/command.h diff --git a/grub-core/modules.def b/grub-core/Makefile.core.def similarity index 90% rename from grub-core/modules.def rename to grub-core/Makefile.core.def index fa830e779..73caf0771 100644 --- a/grub-core/modules.def +++ b/grub-core/Makefile.core.def @@ -1049,140 +1049,6 @@ module = { extra_dist = lib/libgcrypt-grub/cipher/crypto.lst; }; -module = { - name = gcry_arcfour; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/arcfour.c; -}; - -module = { - name = gcry_blowfish; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/blowfish.c; -}; - -module = { - name = gcry_camellia; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/camellia.c; - source = lib/libgcrypt-grub/cipher/camellia-glue.c; -}; - -module = { - name = gcry_cast5; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/cast5.c; -}; - -module = { - name = gcry_crc; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/crc.c; -}; - -module = { - name = gcry_des; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/des.c; -}; - -module = { - name = gcry_md4; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/md4.c; -}; - -module = { - name = gcry_md5; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/md5.c; -}; - -module = { - name = gcry_rfc2268; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/rfc2268.c; -}; - -module = { - name = gcry_rijndael; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/rijndael.c; -}; - -module = { - name = gcry_rmd160; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/rmd160.c; -}; - -module = { - name = gcry_seed; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/seed.c; -}; - -module = { - name = gcry_serpent; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/serpent.c; -}; - -module = { - name = gcry_sha1; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/sha1.c; -}; - -module = { - name = gcry_sha256; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/sha256.c; -}; - -module = { - name = gcry_sha512; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/sha512.c; -}; - -module = { - name = gcry_tiger; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/tiger.c; -}; - -module = { - name = gcry_twofish; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/twofish.c; -}; - -module = { - name = gcry_whirlpool; - cflags = '$(CFLAGS_GCRY)'; - cppflags = '$(CPPFLAGS_GCRY)'; - source = lib/libgcrypt-grub/cipher/whirlpool.c; -}; - module = { name = pbkdf2; source = lib/pbkdf2.c; diff --git a/util/import_gcry.py b/util/import_gcry.py index b63fb5501..6280f001e 100644 --- a/util/import_gcry.py +++ b/util/import_gcry.py @@ -40,8 +40,8 @@ except: print ("WARNING: %s already exists" % cipher_dir_out) cipher_files = os.listdir (cipher_dir_in) -conf = open (os.path.join ("conf", "gcry.rmk"), "w") -conf.write ("# -*- makefile -*-\n\n") +conf = open (os.path.join ("grub-core", "Makefile.gcry.def"), "w") +conf.write ("AutoGen definitions Makefile.tpl;\n\n") chlog = "" # Strictly speaking CRC32/CRC24 work on bytes so this value should be 1 @@ -62,7 +62,6 @@ mdblocksizes = {"_gcry_digest_spec_crc32" : 64, "_gcry_digest_spec_whirlpool" : 64} cryptolist = open (os.path.join (cipher_dir_out, "crypto.lst"), "w") -conf.write ("MAINTAINER_CLEANFILES += $(srcdir)/conf/gcry.rmk $(srcdir)/lib/libgcrypt-grub/cipher/ChangeLog $(srcdir)/lib/libgcrypt-grub/cipher/cipher.h $(srcdir)/lib/libgcrypt-grub/cipher/crypto.lst $(srcdir)/lib/libgcrypt-grub/cipher/g10lib.h $(srcdir)/lib/libgcrypt-grub/cipher/memory.h $(srcdir)/lib/libgcrypt-grub/cipher/types.h\n"); # rijndael is the only cipher using aliases. So no need for mangling, just # hardcode it @@ -88,7 +87,6 @@ for cipher_file in cipher_files: continue nch = False if re.match (".*\.[ch]$", cipher_file): - conf.write ("MAINTAINER_CLEANFILES += $(srcdir)/lib/libgcrypt-grub/cipher/" + cipher_file + "\n"); isc = re.match (".*\.c$", cipher_file) f = open (infile, "r") fw = open (outfile, "w") @@ -276,11 +274,13 @@ for cipher_file in cipher_files: chlognew = "%s\n %s" % (chlognew, chmsg) fw.write (" grub_md_unregister (&%s);\n" % mdname) fw.write ("}\n") - conf.write ("pkglib_MODULES += %s.mod\n" % modname) - conf.write ("%s_mod_SOURCES = %s\n" %\ - (modname, modfiles)) - conf.write ("%s_mod_CFLAGS = $(COMMON_CFLAGS) -Wno-missing-field-initializers -Wno-error -I$(srcdir)/lib/libgcrypt_wrap\n" % modname) - conf.write ("%s_mod_LDFLAGS = $(COMMON_LDFLAGS)\n\n" % modname) + conf.write ("module = {\n") + conf.write (" name = %s;\n" % modname) + for src in modfiles.split(): + conf.write (" source = %s;\n" % src) + conf.write (" cflags = '$(CFLAGS_GCRY)';\n"); + conf.write (" cppflags = '$(CPPFLAGS_GCRY)';\n"); + conf.write ("};\n\n") elif isc and cipher_file != "camellia.c": print ("WARNING: C file isn't a module: %s" % cipher_file) f.close () From 34cf2b8aea3dd9434a894185437eeccd41dafc2f Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 18:47:22 +0530 Subject: [PATCH 191/271] fix distcheck --- conf/Makefile.extra-dist | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist index ae4b8fbde..60feea34f 100644 --- a/conf/Makefile.extra-dist +++ b/conf/Makefile.extra-dist @@ -4,15 +4,17 @@ EXTRA_DIST += autogen.sh EXTRA_DIST += geninit.sh EXTRA_DIST += gentpl.py -EXTRA_DIST += modules.def EXTRA_DIST += Makefile.tpl +EXTRA_DIST += Makefile.util.def EXTRA_DIST += docs/man EXTRA_DIST += docs/grub.cfg EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc -EXTRA_DIST += grub-core/modules.def +EXTRA_DIST += grub-core/Makefile.core.def +EXTRA_DIST += grub-core/Makefile.gcry.def + EXTRA_DIST += grub-core/genmoddep.awk EXTRA_DIST += grub-core/genmodsrc.sh EXTRA_DIST += grub-core/genfslist.sh From a71e47197598e709e23281a07b2af99337aa51fa Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 21:01:13 +0530 Subject: [PATCH 192/271] fix distcheck from source tree --- conf/Makefile.extra-dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist index 60feea34f..17a169284 100644 --- a/conf/Makefile.extra-dist +++ b/conf/Makefile.extra-dist @@ -1,4 +1,4 @@ -EXTRA_DIST += include +EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h') EXTRA_DIST += autogen.sh EXTRA_DIST += geninit.sh From 00d064849105356cbb239ded246d257eaeb79f68 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Fri, 20 Aug 2010 22:34:19 +0530 Subject: [PATCH 193/271] fix emu build on netbsd --- grub-core/Makefile.core.def | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 73caf0771..83aa3b1db 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -249,7 +249,7 @@ program = { ldadd = 'kernel.img$(EXEEXT)'; ldadd = '$(MODULE_FILES)'; - ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER)'; + ldadd = '$(LIBUTIL) $(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER)'; enable = emu; }; @@ -262,7 +262,7 @@ program = { nodist = symlist.c; ldadd = 'kernel.img$(EXEEXT)'; - ldadd = '$(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER)'; + ldadd = '$(LIBUTIL) $(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER)'; enable = emu; }; From 2bd591d03ec75699072725f7993b8cd8d13b8728 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 21 Aug 2010 00:50:12 +0530 Subject: [PATCH 194/271] add USE_ASCII_FAILBACK define --- Makefile.am | 2 -- conf/Makefile.common | 1 + grub-core/Makefile.am | 6 ++++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index b0d374b75..a5c4a874d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -78,8 +78,6 @@ widthspec.h: widthspec.bin grub-bin2h $(builddir)/grub-bin2h widthspec < $< > $@ CLEANFILES += widthspec.h -# XXX: TARGET_CFLAGS += -DUSE_ASCII_FAILBACK=1 -DHAVE_UNIFONT_WIDTHSPEC=1 - # Install config.h into platformdir platform_HEADERS = config.h diff --git a/conf/Makefile.common b/conf/Makefile.common index 3bb8b9c0e..511813404 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -21,6 +21,7 @@ if COND_i386_ieee1275 endif if COND_mips_yeeloong CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache + CPPFLAGS_PLATFORM = -DUSE_ASCII_FAILBACK CCASFLAGS_PLATFORM = -march=mips3 endif if COND_sparc64_ieee1275 diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index 770f1a6bb..cea7014b1 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -8,6 +8,12 @@ CC=$(TARGET_CC) CPP=$(TARGET_CC) CCAS=$(TARGET_CC) +if COND_GRUB_MKFONT +if COND_HAVE_FONT_SOURCE +TARGET_CFLAGS += -DUSE_ASCII_FAILBACK=1 -DHAVE_UNIFONT_WIDTHSPEC=1 +endif +endif + AM_CFLAGS = $(TARGET_CFLAGS) AM_LDFLAGS = $(TARGET_LDFLAGS) AM_CPPFLAGS = $(TARGET_CPPFLAGS) $(CPPFLAGS_DEFAULT) From bdf0d623215fb98d5c910f632978f5c90d8e3563 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 21 Aug 2010 09:48:27 +0530 Subject: [PATCH 195/271] review comments --- Makefile.am | 2 +- Makefile.util.def | 2 ++ conf/Makefile.common | 3 --- conf/Makefile.extra-dist | 54 ++++------------------------------------ configure.ac | 6 ++--- docs/Makefile.am | 2 +- grub-core/Makefile.am | 3 +-- 7 files changed, 12 insertions(+), 60 deletions(-) diff --git a/Makefile.am b/Makefile.am index a5c4a874d..4b7aa5e3a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -46,7 +46,7 @@ CLEANFILES += libgrub_a_init.c if COND_GRUB_MKFONT if COND_HAVE_FONT_SOURCE -pkgdata_DATA = unicode.pf2 ascii.pf2 ascii.h +pkgdata_DATA = unicode.pf2 ascii.pf2 ascii.h widthspec.h endif endif diff --git a/Makefile.util.def b/Makefile.util.def index 50b5ac0d6..d44fbabdf 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -268,6 +268,7 @@ script = { installdir = grubconf; }; +/* script = { name = '10_windows'; source = util/grub.d/10_windows.in; @@ -279,6 +280,7 @@ script = { source = util/grub.d/10_hurd.in; installdir = grubconf; }; +*/ script = { name = '10_linux'; diff --git a/conf/Makefile.common b/conf/Makefile.common index 511813404..9637c0f7c 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -77,9 +77,6 @@ CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -D_GL_UNUSED="__attribute__ ((unused))" CPPFLAGS_GNULIB = -I$(top_srcdir)/grub-core/gnulib -CFLAGS_MKISOFS = -Wno-all -Werror -CPPFLAGS_MKISOFS = -D_FILE_OFFSET_BITS=64 -I$(top_srcdir)/util/mkisofs/include - CFLAGS_POSIX = -fno-builtin CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist index 17a169284..3acef7af7 100644 --- a/conf/Makefile.extra-dist +++ b/conf/Makefile.extra-dist @@ -1,5 +1,3 @@ -EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h') - EXTRA_DIST += autogen.sh EXTRA_DIST += geninit.sh @@ -28,50 +26,8 @@ EXTRA_DIST += grub-core/genterminallist.sh EXTRA_DIST += grub-core/genparttoollist.sh EXTRA_DIST += grub-core/genemuinitheader.sh -EXTRA_DIST += grub-core/gnulib/getopt.h -EXTRA_DIST += grub-core/gnulib/argp-version-etc.h -EXTRA_DIST += grub-core/gnulib/fnmatch.h -EXTRA_DIST += grub-core/gnulib/error.h -EXTRA_DIST += grub-core/gnulib/argp-namefrob.h -EXTRA_DIST += grub-core/gnulib/argp.h -EXTRA_DIST += grub-core/gnulib/argp-fmtstream.h -EXTRA_DIST += grub-core/gnulib/gettext.h -EXTRA_DIST += grub-core/gnulib/regex_internal.h -EXTRA_DIST += grub-core/gnulib/progname.h -EXTRA_DIST += grub-core/gnulib/regex.h -EXTRA_DIST += grub-core/gnulib/alloca.h -EXTRA_DIST += grub-core/gnulib/getopt_int.h -EXTRA_DIST += grub-core/efiemu/runtime/config.h - -EXTRA_DIST += grub-core/lib/posix_wrap/localcharset.h -EXTRA_DIST += grub-core/lib/posix_wrap/ctype.h -EXTRA_DIST += grub-core/lib/posix_wrap/limits.h -EXTRA_DIST += grub-core/lib/posix_wrap/stdio.h -EXTRA_DIST += grub-core/lib/posix_wrap/sys/types.h -EXTRA_DIST += grub-core/lib/posix_wrap/unistd.h -EXTRA_DIST += grub-core/lib/posix_wrap/locale.h -EXTRA_DIST += grub-core/lib/posix_wrap/wchar.h -EXTRA_DIST += grub-core/lib/posix_wrap/string.h -EXTRA_DIST += grub-core/lib/posix_wrap/langinfo.h -EXTRA_DIST += grub-core/lib/posix_wrap/wctype.h -EXTRA_DIST += grub-core/lib/posix_wrap/stdint.h -EXTRA_DIST += grub-core/lib/posix_wrap/stdlib.h -EXTRA_DIST += grub-core/lib/posix_wrap/assert.h -EXTRA_DIST += grub-core/lib/posix_wrap/errno.h - -EXTRA_DIST += grub-core/lib/libgcrypt_wrap/cipher_wrap.h -EXTRA_DIST += grub-core/lib/libgcrypt/cipher/rijndael-tables.h -EXTRA_DIST += grub-core/lib/libgcrypt/cipher/bithelp.h -EXTRA_DIST += grub-core/lib/libgcrypt/cipher/rmd.h -EXTRA_DIST += grub-core/lib/libgcrypt/cipher/hash-common.h -EXTRA_DIST += grub-core/lib/libgcrypt/cipher/camellia.h - -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/types.h -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/cipher.h -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/rijndael-tables.h -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/memory.h -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/bithelp.h -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/g10lib.h -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/rmd.h -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/hash-common.h -EXTRA_DIST += grub-core/lib/libgcrypt-grub/cipher/camellia.h +EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h') +EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/gnulib -name '*.h') +EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/efiemu -name '*.h') +EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib/posix_wrap -name '*.h') +EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib/libgcrypt_wrap -name '*.h') diff --git a/configure.ac b/configure.ac index cd0869187..b57a8580a 100644 --- a/configure.ac +++ b/configure.ac @@ -71,13 +71,11 @@ case "$target_cpu" in sparc) target_cpu=sparc64 ;; mipsel|mips64el) target_cpu=mips; - HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; - TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; + machine_CFLAGS="-DGRUB_CPU_MIPSEL=1"; ;; mips|mips64) target_cpu=mips; - HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_CPU_MIPS=1"; - TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_CPU_MIPS=1"; + machine_CFLAGS="-DGRUB_CPU_MIPS=1"; ;; esac diff --git a/docs/Makefile.am b/docs/Makefile.am index 103240bcc..8d9fb8445 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1,6 +1,6 @@ AUTOMAKE_OPTIONS = subdir-objects -AM_MAKEINFOFLAGS = --force --no-split --no-validate +# AM_MAKEINFOFLAGS = --no-split --no-validate info_TEXINFOS = grub.texi grub_TEXINFOS = fdl.texi diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am index cea7014b1..83101e650 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -34,8 +34,7 @@ gentrigtables: gentrigtables.c CLEANFILES += gentrigtables # trigtables.c -trigtables.c: gentrigtables.c $(top_srcdir)/configure.ac - $(MAKE) $(AM_MAKEFLAGS) gentrigtables +trigtables.c: gentrigtables gentrigtables.c $(top_srcdir)/configure.ac $(builddir)/gentrigtables > $@ CLEANFILES += trigtables.c From 8427685faa8304f13c75ca0185584b05b610a449 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 21 Aug 2010 14:27:31 +0530 Subject: [PATCH 196/271] *_sources now collect all values of all its groups --- Makefile.util.def | 286 +++++++------- gentpl.py | 195 +++++++--- grub-core/Makefile.core.def | 739 ++++++++++++++++-------------------- util/import_gcry.py | 2 +- 4 files changed, 606 insertions(+), 616 deletions(-) diff --git a/Makefile.util.def b/Makefile.util.def index d44fbabdf..04b3d6f1c 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -5,100 +5,99 @@ library = { cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; - nodist = grub_script.tab.c; - nodist = grub_script.yy.c; - nodist = libgrub_a_init.c; + common_nodist = grub_script.tab.c; + common_nodist = grub_script.yy.c; + common_nodist = libgrub_a_init.c; + common_nodist = grub_script.yy.h; + common_nodist = grub_script.tab.h; - source = grub-core/gnulib/error.c; - source = grub-core/gnulib/fnmatch.c; - source = grub-core/gnulib/getdelim.c; - source = grub-core/gnulib/getline.c; - source = grub-core/gnulib/getopt1.c; - source = grub-core/gnulib/getopt.c; - source = grub-core/gnulib/progname.c; + common = grub-core/gnulib/error.c; + common = grub-core/gnulib/fnmatch.c; + common = grub-core/gnulib/getdelim.c; + common = grub-core/gnulib/getline.c; + common = grub-core/gnulib/getopt1.c; + common = grub-core/gnulib/getopt.c; + common = grub-core/gnulib/progname.c; - source = util/misc.c; - source = grub-core/kern/misc.c; - source = grub-core/kern/emu/mm.c; - source = grub-core/kern/emu/misc.c; - source = grub-core/kern/emu/hostfs.c; - source = grub-core/kern/emu/getroot.c; - source = grub-core/kern/emu/hostdisk.c; + common = util/misc.c; + common = grub-core/kern/misc.c; + common = grub-core/kern/emu/mm.c; + common = grub-core/kern/emu/misc.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/kern/emu/getroot.c; + common = grub-core/kern/emu/hostdisk.c; - source = grub-core/commands/blocklist.c; - source = grub-core/commands/extcmd.c; - source = grub-core/commands/ls.c; - source = grub-core/disk/dmraid_nvidia.c; - source = grub-core/disk/host.c; - source = grub-core/disk/loopback.c; - source = grub-core/disk/lvm.c; - source = grub-core/disk/mdraid_linux.c; - source = grub-core/disk/raid5_recover.c; - source = grub-core/disk/raid6_recover.c; - source = grub-core/disk/raid.c; - source = grub-core/fs/affs.c; - source = grub-core/fs/afs_be.c; - source = grub-core/fs/afs.c; - source = grub-core/fs/befs_be.c; - source = grub-core/fs/befs.c; - source = grub-core/fs/cpio.c; - source = grub-core/fs/ext2.c; - source = grub-core/fs/fat.c; - source = grub-core/fs/fshelp.c; - source = grub-core/fs/hfs.c; - source = grub-core/fs/hfsplus.c; - source = grub-core/fs/iso9660.c; - source = grub-core/fs/jfs.c; - source = grub-core/fs/minix.c; - source = grub-core/fs/nilfs2.c; - source = grub-core/fs/ntfs.c; - source = grub-core/fs/ntfscomp.c; - source = grub-core/fs/reiserfs.c; - source = grub-core/fs/sfs.c; - source = grub-core/fs/tar.c; - source = grub-core/fs/udf.c; - source = grub-core/fs/ufs2.c; - source = grub-core/fs/ufs.c; - source = grub-core/fs/xfs.c; - source = grub-core/kern/command.c; - source = grub-core/kern/device.c; - source = grub-core/kern/disk.c; - source = grub-core/kern/env.c; - source = grub-core/kern/err.c; - source = grub-core/kern/file.c; - source = grub-core/kern/fs.c; - source = grub-core/kern/list.c; - source = grub-core/kern/partition.c; - source = grub-core/lib/arg.c; - source = grub-core/lib/crc.c; - source = grub-core/lib/crypto.c; - source = grub-core/lib/envblk.c; - source = grub-core/lib/hexdump.c; - source = grub-core/lib/libgcrypt-grub/cipher/sha512.c; - source = grub-core/lib/LzFind.c; - source = grub-core/lib/LzmaEnc.c; - source = grub-core/lib/pbkdf2.c; - source = grub-core/normal/datetime.c; - source = grub-core/normal/misc.c; - source = grub-core/partmap/acorn.c; - source = grub-core/partmap/amiga.c; - source = grub-core/partmap/apple.c; - source = grub-core/partmap/gpt.c; - source = grub-core/partmap/msdos.c; - source = grub-core/partmap/sun.c; - source = grub-core/script/function.c; - source = grub-core/script/lexer.c; - source = grub-core/script/main.c; - source = grub-core/script/script.c; - source = grub-core/script/argv.c; - - nodist = grub_script.yy.h; - nodist = grub_script.tab.h; + common = grub-core/commands/blocklist.c; + common = grub-core/commands/extcmd.c; + common = grub-core/commands/ls.c; + common = grub-core/disk/dmraid_nvidia.c; + common = grub-core/disk/host.c; + common = grub-core/disk/loopback.c; + common = grub-core/disk/lvm.c; + common = grub-core/disk/mdraid_linux.c; + common = grub-core/disk/raid5_recover.c; + common = grub-core/disk/raid6_recover.c; + common = grub-core/disk/raid.c; + common = grub-core/fs/affs.c; + common = grub-core/fs/afs_be.c; + common = grub-core/fs/afs.c; + common = grub-core/fs/befs_be.c; + common = grub-core/fs/befs.c; + common = grub-core/fs/cpio.c; + common = grub-core/fs/ext2.c; + common = grub-core/fs/fat.c; + common = grub-core/fs/fshelp.c; + common = grub-core/fs/hfs.c; + common = grub-core/fs/hfsplus.c; + common = grub-core/fs/iso9660.c; + common = grub-core/fs/jfs.c; + common = grub-core/fs/minix.c; + common = grub-core/fs/nilfs2.c; + common = grub-core/fs/ntfs.c; + common = grub-core/fs/ntfscomp.c; + common = grub-core/fs/reiserfs.c; + common = grub-core/fs/sfs.c; + common = grub-core/fs/tar.c; + common = grub-core/fs/udf.c; + common = grub-core/fs/ufs2.c; + common = grub-core/fs/ufs.c; + common = grub-core/fs/xfs.c; + common = grub-core/kern/command.c; + common = grub-core/kern/device.c; + common = grub-core/kern/disk.c; + common = grub-core/kern/env.c; + common = grub-core/kern/err.c; + common = grub-core/kern/file.c; + common = grub-core/kern/fs.c; + common = grub-core/kern/list.c; + common = grub-core/kern/partition.c; + common = grub-core/lib/arg.c; + common = grub-core/lib/crc.c; + common = grub-core/lib/crypto.c; + common = grub-core/lib/envblk.c; + common = grub-core/lib/hexdump.c; + common = grub-core/lib/libgcrypt-grub/cipher/sha512.c; + common = grub-core/lib/LzFind.c; + common = grub-core/lib/LzmaEnc.c; + common = grub-core/lib/pbkdf2.c; + common = grub-core/normal/datetime.c; + common = grub-core/normal/misc.c; + common = grub-core/partmap/acorn.c; + common = grub-core/partmap/amiga.c; + common = grub-core/partmap/apple.c; + common = grub-core/partmap/gpt.c; + common = grub-core/partmap/msdos.c; + common = grub-core/partmap/sun.c; + common = grub-core/script/function.c; + common = grub-core/script/lexer.c; + common = grub-core/script/main.c; + common = grub-core/script/script.c; + common = grub-core/script/argv.c; }; program = { name = grub-bin2h; - source = util/bin2h.c; + common = util/bin2h.c; ldadd = libgrub.a; ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; mansection = 1; @@ -108,8 +107,8 @@ program = { name = grub-mkimage; mansection = 1; - source = util/grub-mkimage.c; - source = util/resolve.c; + common = util/grub-mkimage.c; + common = util/resolve.c; extra_dist = util/grub-mkimagexx.c; ldadd = libgrub.a; @@ -121,7 +120,7 @@ program = { name = grub-mkrelpath; mansection = 1; - source = util/grub-mkrelpath.c; + common = util/grub-mkrelpath.c; ldadd = libgrub.a; ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; @@ -131,7 +130,7 @@ program = { name = grub-script-check; mansection = 1; - source = util/grub-script-check.c; + common = util/grub-script-check.c; ldadd = libgrub.a; ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; @@ -141,7 +140,7 @@ program = { name = grub-editenv; mansection = 1; - source = util/grub-editenv.c; + common = util/grub-editenv.c; ldadd = libgrub.a; ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; @@ -151,7 +150,7 @@ program = { name = grub-mkpasswd-pbkdf2; mansection = 1; - source = util/grub-mkpasswd-pbkdf2.c; + common = util/grub-mkpasswd-pbkdf2.c; ldadd = libgrub.a; ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; @@ -162,14 +161,14 @@ program = { program = { name = grub-macho2img; mansection = 1; - source = util/grub-macho2img.c; + common = util/grub-macho2img.c; condition = COND_APPLE_CC; }; program = { name = grub-pe2elf; mansection = 1; - source = util/grub-pe2elf.c; + common = util/grub-pe2elf.c; ldadd = libgrub.a; ldflags = '$(LIBINTL)'; @@ -179,7 +178,7 @@ program = { program = { name = grub-fstest; mansection = 1; - source = util/grub-fstest.c; + common = util/grub-fstest.c; ldadd = libgrub.a; ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; @@ -189,8 +188,8 @@ program = { program = { name = grub-mkfont; mansection = 1; - source = util/grub-mkfont.c; - source = grub-core/unidata.c; + common = util/grub-mkfont.c; + common = grub-core/unidata.c; cflags = '$(freetype_cflags)'; @@ -204,9 +203,9 @@ program = { name = grub-mkdevicemap; installdir = sbin; mansection = 8; - source = util/grub-mkdevicemap.c; - source = util/deviceiter.c; - source = util/devicemap.c; + nosparc64 = util/grub-mkdevicemap.c; + nosparc64 = util/deviceiter.c; + nosparc64 = util/devicemap.c; sparc64_ieee1275 = util/grub-mkdevicemap.c; sparc64_ieee1275 = util/deviceiter.c; @@ -221,7 +220,7 @@ program = { name = grub-probe; installdir = sbin; mansection = 8; - source = util/grub-probe.c; + common = util/grub-probe.c; ldadd = libgrub.a; ldflags = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; @@ -250,66 +249,66 @@ program = { program = { name = grub-ofpathname; installdir = sbin; - source = util/ieee1275/grub-ofpathname.c; - source = util/ieee1275/ofpath.c; + ieee1275 = util/ieee1275/grub-ofpathname.c; + ieee1275 = util/ieee1275/ofpath.c; ldadd = libgrub.a; enable = sparc64_ieee1275; }; data = { - source = util/grub.d/README; + common = util/grub.d/README; installdir = grubconf; }; script = { name = '00_header'; - source = util/grub.d/00_header.in; + common = util/grub.d/00_header.in; installdir = grubconf; }; /* script = { name = '10_windows'; - source = util/grub.d/10_windows.in; + common = util/grub.d/10_windows.in; installdir = grubconf; }; script = { name = '10_hurd'; - source = util/grub.d/10_hurd.in; + common = util/grub.d/10_hurd.in; installdir = grubconf; }; */ script = { name = '10_linux'; - source = util/grub.d/10_linux.in; + common = util/grub.d/10_linux.in; installdir = grubconf; }; script = { name = '30_os-prober'; - source = util/grub.d/30_os-prober.in; + common = util/grub.d/30_os-prober.in; installdir = grubconf; }; script = { name = '40_custom'; - source = util/grub.d/40_custom.in; + common = util/grub.d/40_custom.in; installdir = grubconf; }; script = { name = '41_custom'; - source = util/grub.d/41_custom.in; + common = util/grub.d/41_custom.in; installdir = grubconf; }; script = { mansection = 1; name = grub-mkrescue; - source = util/grub-mkrescue.in; + i386_pc_qemu_coreboot = util/grub-mkrescue.in; powerpc_ieee1275 = util/powerpc/ieee1275/grub-mkrescue.in; enable = i386_pc; enable = i386_qemu; @@ -321,7 +320,10 @@ script = { mansection = 8; installdir = sbin; name = grub-install; - source = util/grub-install.in; + + mips = util/grub-install.in; + i386_noefi_noieee1275 = util/grub-install.in; + x86_efi = util/i386/efi/grub-install.in; i386_ieee1275 = util/ieee1275/grub-install.in; powerpc_ieee1275 = util/ieee1275/grub-install.in; @@ -333,151 +335,151 @@ script = { script = { name = grub-mkconfig; - source = util/grub-mkconfig.in; + common = util/grub-mkconfig.in; mansection = 8; installdir = sbin; }; script = { name = grub-set-default; - source = util/grub-set-default.in; + common = util/grub-set-default.in; mansection = 8; installdir = sbin; }; script = { name = grub-reboot; - source = util/grub-reboot.in; + common = util/grub-reboot.in; mansection = 8; installdir = sbin; }; script = { name = grub-mkconfig_lib; - source = util/grub-mkconfig_lib.in; + common = util/grub-mkconfig_lib.in; installdir = pkglib; }; script = { name = update-grub_lib; - source = util/update-grub_lib.in; + common = util/update-grub_lib.in; installdir = pkglib; }; script = { name = grub-shell; - source = tests/util/grub-shell.in; + common = tests/util/grub-shell.in; }; script = { name = grub-shell-tester; - source = tests/util/grub-shell-tester.in; + common = tests/util/grub-shell-tester.in; }; script = { testcase; name = example_scripted_test; - source = tests/example_scripted_test.in; + common = tests/example_scripted_test.in; }; script = { testcase; name = example_grub_script_test; - source = tests/example_grub_script_test.in; + common = tests/example_grub_script_test.in; }; script = { testcase; name = grub_script_echo1; - source = tests/grub_script_echo1.in; + common = tests/grub_script_echo1.in; }; script = { testcase; name = grub_script_echo_keywords; - source = tests/grub_script_echo_keywords.in; + common = tests/grub_script_echo_keywords.in; }; script = { testcase; name = grub_script_vars1; - source = tests/grub_script_vars1.in; + common = tests/grub_script_vars1.in; }; script = { testcase; name = grub_script_for1; - source = tests/grub_script_for1.in; + common = tests/grub_script_for1.in; }; script = { testcase; name = grub_script_while1; - source = tests/grub_script_while1.in; + common = tests/grub_script_while1.in; }; script = { testcase; name = grub_script_if; - source = tests/grub_script_if.in; + common = tests/grub_script_if.in; }; script = { testcase; name = grub_script_blanklines; - source = tests/grub_script_blanklines.in; + common = tests/grub_script_blanklines.in; }; script = { testcase; name = grub_script_final_semicolon; - source = tests/grub_script_final_semicolon.in; + common = tests/grub_script_final_semicolon.in; }; script = { testcase; name = grub_script_dollar; - source = tests/grub_script_dollar.in; + common = tests/grub_script_dollar.in; }; script = { testcase; name = grub_script_comments; - source = tests/grub_script_comments.in; + common = tests/grub_script_comments.in; }; script = { testcase; name = grub_script_functions; - source = tests/grub_script_functions.in; + common = tests/grub_script_functions.in; }; script = { testcase; name = grub_script_break; - source = tests/grub_script_break.in; + common = tests/grub_script_break.in; }; script = { testcase; name = grub_script_continue; - source = tests/grub_script_continue.in; + common = tests/grub_script_continue.in; }; script = { testcase; name = grub_script_shift; - source = tests/grub_script_shift.in; + common = tests/grub_script_shift.in; }; program = { testcase; name = example_unit_test; - source = tests/example_unit_test.c; - source = tests/lib/unit_test.c; - source = grub-core/kern/list.c; - source = grub-core/kern/misc.c; - source = grub-core/tests/lib/test.c; + common = tests/example_unit_test.c; + common = tests/lib/unit_test.c; + common = grub-core/kern/list.c; + common = grub-core/kern/misc.c; + common = grub-core/tests/lib/test.c; cflags = -Wno-format; ldadd = libgrub.a; ldflags = '$(LIBDEVMAPPER)'; diff --git a/gentpl.py b/gentpl.py index 59950bb0e..18672bdcd 100644 --- a/gentpl.py +++ b/gentpl.py @@ -10,17 +10,44 @@ GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "powerpc_ieee1275" ] GROUPS = {} -GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275" ] -GROUPS["x86_64"] = [ "x86_64_efi" ] -GROUPS["mips"] = [ "mips_yeeloong" ] -GROUPS["sparc64"] = [ "sparc64_ieee1275" ] -GROUPS["powerpc"] = [ "powerpc_ieee1275" ] -GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"] -GROUPS["x86_efi"] = [ "i386_efi", "x86_64_efi" ] -GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ] +GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275" ] +GROUPS["x86_64"] = [ "x86_64_efi" ] +GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"] +GROUPS["x86_efi"] = [ "i386_efi", "x86_64_efi" ] + +GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc") + +GROUPS["x86_noefi"] = GROUPS["x86"][:]; GROUPS["x86_noefi"].remove("i386_efi"); GROUPS["x86_noefi"].remove("x86_64_efi") +GROUPS["i386_noefi"] = GROUPS["i386"][:]; GROUPS["i386_noefi"].remove("i386_efi") + +GROUPS["x86_noieee1275"] = GROUPS["x86"][:]; GROUPS["x86_noieee1275"].remove("i386_ieee1275") +GROUPS["i386_noieee1275"] = GROUPS["i386"][:]; GROUPS["i386_noieee1275"].remove("i386_ieee1275") + +GROUPS["i386_noefi_noieee1275"] = GROUPS["i386_noefi"][:]; GROUPS["i386_noefi_noieee1275"].remove("i386_ieee1275") + +GROUPS["i386_pc_qemu_coreboot"] = ["i386_pc", "i386_qemu", "i386_coreboot"] +GROUPS["i386_coreboot_multiboot"] = ["i386_coreboot", "i386_multiboot"] +GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"] +GROUPS["i386_pc_coreboot_multiboot_qemu"] = ["i386_pc", "i386_coreboot", "i386_multiboot", "i386_qemu"] + +GROUPS["mips"] = [ "mips_yeeloong" ] +GROUPS["sparc64"] = [ "sparc64_ieee1275" ] +GROUPS["powerpc"] = [ "powerpc_ieee1275" ] + +GROUPS["nosparc64"] = GRUB_PLATFORMS[:]; GROUPS["nosparc64"].remove("sparc64_ieee1275") +GROUPS["x86_noefi_mips"] = GROUPS["x86_noefi"] + GROUPS["mips"] + +GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ] +GROUPS["noieee1275"] = GRUB_PLATFORMS[:] +for i in GROUPS["ieee1275"]: GROUPS["noieee1275"].remove(i) + GROUPS["pci"] = GROUPS["x86"] + GROUPS["mips"] -GROUPS["nonemu"] = GRUB_PLATFORMS[:] -GROUPS["nonemu"].remove("emu") + +GROUPS["noemu"] = GRUB_PLATFORMS[:]; GROUPS["noemu"].remove("emu") +GROUPS["noemu_noieee1275"] = GRUB_PLATFORMS[:] +for i in ["emu"] + GROUPS["ieee1275"]: GROUPS["noemu_noieee1275"].remove(i) + +GROUPS["common"] = GRUB_PLATFORMS[:] # # Create platform => groups reverse map, where groups covering that @@ -111,7 +138,19 @@ def if_platform_tagged(platform, tag, snippet_if, snippet_else=None): return r # -# Template for handling platform specific values, for example: +# Template for tagged values +# +# module = { +# extra_dist = ... +# extra_dist = ... +# ... +# }; +# +def foreach_value(tag, closure): + return "[+ FOR " + tag + " +]" + closure("[+ ." + tag + " +]") + "[+ ENDFOR +]" + +# +# Template for handling best matched values for a platform, for example: # # module = { # cflags = '-Wall'; @@ -119,7 +158,7 @@ def if_platform_tagged(platform, tag, snippet_if, snippet_else=None): # ... # } # -def foreach_platform_value(platform, tag, suffix, closure): +def foreach_platform_specific_value(platform, suffix, nonetag, closure): r = "" for group in RMAP[platform]: gtag = group + suffix @@ -130,10 +169,46 @@ def foreach_platform_value(platform, tag, suffix, closure): r += "[+ ELIF " + gtag + " +]" r += "[+ FOR " + gtag + " +]" + closure("[+ ." + gtag + " +]") + "[+ ENDFOR +]" - r += "[+ ELSE +][+ FOR " + tag + " +]" + closure("[+ ." + tag + " +]") + "[+ ENDFOR +][+ ENDIF +]" + r += "[+ ELSE +][+ FOR " + nonetag + " +]" + closure("[+ ." + nonetag + " +]") + "[+ ENDFOR +][+ ENDIF +]" return r -def each_platform(closure): +# +# Template for handling values from sum of all groups for a platform, +# for example: +# +# module = { +# common = kern/misc.c; +# emu = kern/emu/misc.c; +# ... +# } +# +def foreach_platform_value (platform, suffix, closure): + r = "" + for group in RMAP[platform]: + gtag = group + suffix + + r += "[+ IF " + gtag + " +]" + r += "[+ FOR " + gtag + " +]" + closure("[+ ." + gtag + " +]") + "[+ ENDFOR +]" + r += "[+ ENDIF +]" + return r + +# +# Template for gaurding with platform specific "enable" keys, for example: +# +# module = { +# name = pci; +# noemu = bus/pci.c; +# emu = bus/emu/pci.c; +# emu = commands/lspci.c; +# +# enable = emu; +# enable = i386_pc; +# enable = x86_efi; +# enable = i386_ieee1275; +# enable = i386_coreboot; +# }; +# +def foreach_enabled_platform(closure): r = "[+ IF - enable undefined +]" for platform in GRUB_PLATFORMS: r += "\nif COND_" + platform + "\n" + closure(platform) + "endif\n" @@ -144,30 +219,49 @@ def each_platform(closure): r += "[+ ENDIF +]" return r +# +# Template for gaurding with platform specific automake conditionals, +# for example: +# +# module = { +# name = usb; +# common = bus/usb/usb.c; +# noemu = bus/usb/usbtrans.c; +# noemu = bus/usb/usbhub.c; +# enable = emu; +# enable = i386; +# enable = mips_yeeloong; +# emu_condition = COND_GRUB_EMU_USB; +# }; +# def under_platform_specific_conditionals(platform, snippet): - r = foreach_platform_value(platform, "condition", "_condition", lambda cond: "if " + cond + "\n") + r = foreach_platform_specific_value(platform, "_condition", "condition", lambda cond: "if " + cond + "\n") r += snippet - r += foreach_platform_value(platform, "condition", "_condition", lambda cond: "endif " + cond + "\n") + r += foreach_platform_specific_value(platform, "_condition", "condition", lambda cond: "endif " + cond + "\n") return r -def platform_specific_values(platform, tag, suffix): - return foreach_platform_value(platform, tag, suffix, lambda value: value + " ") +def platform_specific_values(platform, suffix, nonetag): + return foreach_platform_specific_value(platform, suffix, nonetag, + lambda value: value + " ") -def shared_sources(): return "[+ FOR shared +][+ .shared +] [+ ENDFOR +]" -def shared_nodist_sources(): return "[+ FOR nodist_shared +] [+ .nodist_shared +][+ ENDFOR +]" +def platform_values(platform, suffix): + return foreach_platform_value(platform, suffix, lambda value: value + " ") -def platform_sources(p): return platform_specific_values(p, "source", "") -def platform_nodist_sources(p): return platform_specific_values(p, "nodist", "_nodist") -def platform_extra_dist(p): return platform_specific_values(p, "extra_dist", "_extra_dist") -def platform_dependencies(p): return platform_specific_values(p, "dependencies", "_dependencies") +def extra_dist(): + return foreach_value("extra_dist", lambda value: value + " ") -def platform_ldadd(p): return platform_specific_values(p, "ldadd", "_ldadd") -def platform_cflags(p): return platform_specific_values(p, "cflags", "_cflags") -def platform_ldflags(p): return platform_specific_values(p, "ldflags", "_ldflags") -def platform_cppflags(p): return platform_specific_values(p, "cppflags", "_cppflags") -def platform_ccasflags(p): return platform_specific_values(p, "ccasflags", "_ccasflags") -def platform_stripflags(p): return platform_specific_values(p, "stripflags", "_stripflags") -def platform_objcopyflags(p): return platform_specific_values(p, "objcopyflags", "_objcopyflags") +def platform_sources(p): return platform_values(p, "") +def platform_nodist_sources(p): return platform_values(p, "_nodist") +def platform_dependencies(p): return platform_values(p, "dependencies", "_dependencies") + +def platform_startup(p): return platform_specific_values(p, "_startup", "startup") +def platform_ldadd(p): return platform_specific_values(p, "_ldadd", "ldadd") +def platform_cflags(p): return platform_specific_values(p, "_cflags", "cflags") +def platform_ldflags(p): return platform_specific_values(p, "_ldflags", "ldflags") +def platform_cppflags(p): return platform_specific_values(p, "_cppflags", "cppflags") +def platform_ccasflags(p): return platform_specific_values(p, "_ccasflags", "ccasflags") +def platform_stripflags(p): return platform_specific_values(p, "_stripflags", "stripflags") +def platform_objcopyflags(p): return platform_specific_values(p, "_objcopyflags", "objcopyflags") def module(platform): r = set_canonical_name_suffix(".module") @@ -176,9 +270,7 @@ def module(platform): r += gvar_add("MODULE_FILES", "[+ name +].module$(EXEEXT)") r += var_set(cname() + "_SOURCES", platform_sources(platform) + " ## platform sources") - r += var_add(cname() + "_SOURCES", shared_sources() + " ## shared sources") r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + " ## platform nodist sources") - r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + " ## shared nodist sources") r += var_set(cname() + "_LDADD", platform_ldadd(platform)) r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_MODULE) " + platform_cflags(platform)) r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_MODULE) " + platform_ldflags(platform)) @@ -186,7 +278,7 @@ def module(platform): r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) + r += gvar_add("EXTRA_DIST", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") @@ -265,10 +357,9 @@ terminal-[+ name +].lst: [+ name +].pp $(srcdir)/genterminallist.sh def kernel(platform): r = set_canonical_name_suffix(".exec") r += gvar_add("noinst_PROGRAMS", "[+ name +].exec") - r += var_set(cname() + "_SOURCES", platform_sources(platform)) - r += var_add(cname() + "_SOURCES", shared_sources()) + r += var_set(cname() + "_SOURCES", platform_startup(platform)) + r += var_add(cname() + "_SOURCES", platform_sources(platform)) r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + " ## platform nodist sources") - r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + " ## shared nodist sources") r += var_set(cname() + "_LDADD", platform_ldadd(platform)) r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_KERNEL) " + platform_cflags(platform)) r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_KERNEL) " + platform_ldflags(platform)) @@ -277,7 +368,7 @@ def kernel(platform): r += var_set(cname() + "_STRIPFLAGS", "$(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) " + platform_stripflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) + r += gvar_add("EXTRA_DIST", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") @@ -292,9 +383,7 @@ def image(platform): r = set_canonical_name_suffix(".image") r += gvar_add("noinst_PROGRAMS", "[+ name +].image") r += var_set(cname() + "_SOURCES", platform_sources(platform)) - r += var_add(cname() + "_SOURCES", shared_sources()) r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") - r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") r += var_set(cname() + "_LDADD", platform_ldadd(platform)) r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_IMAGE) " + platform_cflags(platform)) r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_IMAGE) " + platform_ldflags(platform)) @@ -303,7 +392,7 @@ def image(platform): r += var_set(cname() + "_OBJCOPYFLAGS", "$(OBJCOPYFLAGS_IMAGE) " + platform_objcopyflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) + r += gvar_add("EXTRA_DIST", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") @@ -322,15 +411,13 @@ def library(platform): r = set_canonical_name_suffix("") r += gvar_add("noinst_LIBRARIES", "[+ name +]") r += var_set(cname() + "_SOURCES", platform_sources(platform)) - r += var_add(cname() + "_SOURCES", shared_sources()) r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform)) - r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources()) r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_LIBRARY) " + platform_cflags(platform)) r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) " + platform_cppflags(platform)) r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) " + platform_ccasflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) + r += gvar_add("EXTRA_DIST", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") @@ -362,9 +449,7 @@ def program(platform, test=False): r += "[+ ENDIF +]" r += var_set(cname() + "_SOURCES", platform_sources(platform)) - r += var_add(cname() + "_SOURCES", shared_sources()) r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform)) - r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources()) r += var_set(cname() + "_LDADD", platform_ldadd(platform)) r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_PROGRAM) " + platform_cflags(platform)) r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_PROGRAM) " + platform_ldflags(platform)) @@ -372,14 +457,14 @@ def program(platform, test=False): r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(platform)) # r += var_set(cname() + "_DEPENDENCIES", platform_dependencies(platform) + " " + platform_ldadd(platform)) - r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) + r += gvar_add("EXTRA_DIST", extra_dist()) r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") return r def data(platform): r = gvar_add("EXTRA_DIST", platform_sources(platform)) - r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) + r += gvar_add("EXTRA_DIST", extra_dist()) r += gvar_add(installdir() + "_DATA", platform_sources(platform)) return r @@ -403,31 +488,31 @@ chmod a+x [+ name +] return r def module_rules(): - return "[+ FOR module +]" + each_platform( + return "[+ FOR module +]" + foreach_enabled_platform( lambda p: under_platform_specific_conditionals(p, module(p))) + "[+ ENDFOR +]" def kernel_rules(): - return "[+ FOR kernel +]" + each_platform( + return "[+ FOR kernel +]" + foreach_enabled_platform( lambda p: under_platform_specific_conditionals(p, kernel(p))) + "[+ ENDFOR +]" def image_rules(): - return "[+ FOR image +]" + each_platform( + return "[+ FOR image +]" + foreach_enabled_platform( lambda p: under_platform_specific_conditionals(p, image(p))) + "[+ ENDFOR +]" def library_rules(): - return "[+ FOR library +]" + each_platform( + return "[+ FOR library +]" + foreach_enabled_platform( lambda p: under_platform_specific_conditionals(p, library(p))) + "[+ ENDFOR +]" def program_rules(): - return "[+ FOR program +]" + each_platform( + return "[+ FOR program +]" + foreach_enabled_platform( lambda p: under_platform_specific_conditionals(p, program(p))) + "[+ ENDFOR +]" def script_rules(): - return "[+ FOR script +]" + each_platform( + return "[+ FOR script +]" + foreach_enabled_platform( lambda p: under_platform_specific_conditionals(p, script(p))) + "[+ ENDFOR +]" def data_rules(): - return "[+ FOR data +]" + each_platform( + return "[+ FOR data +]" + foreach_enabled_platform( lambda p: under_platform_specific_conditionals(p, data(p))) + "[+ ENDFOR +]" print "[+ AutoGen5 template +]\n" diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 83aa3b1db..b7c52b9d7 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -31,209 +31,139 @@ kernel = { powerpc_ldadd = '-lgcc'; sparc64_ldadd = '-lgcc'; - nonemu_nodist = symlist.c; + i386_pc_startup = kern/i386/pc/startup.S; + i386_efi_startup = kern/i386/efi/startup.S; + x86_64_efi_startup = kern/x86_64/efi/startup.S; + i386_qemu_startup = kern/i386/qemu/startup.S; + i386_ieee1275_startup = kern/i386/ieee1275/startup.S; + i386_coreboot_multiboot_startup = kern/i386/coreboot/startup.S; + mips_yeeloong_startup = kern/mips/startup.S; + sparc64_ieee1275_startup = kern/sparc64/ieee1275/crt0.S; + powerpc_ieee1275_startup = kern/powerpc/ieee1275/startup.S; - shared = kern/command.c; - shared = kern/corecmd.c; - shared = kern/device.c; - shared = kern/disk.c; - shared = kern/dl.c; - shared = kern/env.c; - shared = kern/err.c; - shared = kern/file.c; - shared = kern/fs.c; - shared = kern/list.c; - shared = kern/main.c; - shared = kern/misc.c; - shared = kern/parser.c; - shared = kern/partition.c; - shared = kern/rescue_parser.c; - shared = kern/rescue_reader.c; - shared = kern/term.c; + common = kern/command.c; + common = kern/corecmd.c; + common = kern/device.c; + common = kern/disk.c; + common = kern/dl.c; + common = kern/env.c; + common = kern/err.c; + common = kern/file.c; + common = kern/fs.c; + common = kern/list.c; + common = kern/main.c; + common = kern/misc.c; + common = kern/parser.c; + common = kern/partition.c; + common = kern/rescue_parser.c; + common = kern/rescue_reader.c; + common = kern/term.c; + + noemu = kern/mm.c; + noemu = kern/time.c; + noemu = kern/generic/millisleep.c; + + noemu_nodist = symlist.c; + + noemu_noieee1275 = kern/generic/rtc_get_time_ms.c; + + ieee1275 = disk/ieee1275/ofdisk.c; + ieee1275 = kern/ieee1275/cmain.c; + ieee1275 = kern/ieee1275/ieee1275.c; + ieee1275 = kern/ieee1275/mmap.c; + ieee1275 = kern/ieee1275/openfw.c; + ieee1275 = term/ieee1275/ofconsole.c; + + ieee1275_mips = term/terminfo.c; + ieee1275_mips = term/tparm.c; + + i386 = kern/i386/dl.c; + + i386_coreboot_multiboot_qemu = kern/i386/coreboot/init.c; + i386_coreboot_multiboot_qemu = kern/i386/halt.c; + i386_coreboot_multiboot_qemu = term/i386/pc/vga_text.c; + + i386_pc_coreboot_multiboot_qemu = term/i386/vga_common.c; + + i386_noefi = kern/i386/misc.S; + + x86_noieee1275 = kern/i386/pit.c; + + x86_efi = disk/efi/efidisk.c; + x86_efi = kern/efi/efi.c; + x86_efi = kern/efi/init.c; + x86_efi = kern/efi/mm.c; + x86_efi = kern/i386/efi/init.c; + x86_efi = term/efi/console.c; + + i386_efi = kern/i386/tsc.c; + + x86_64_efi = kern/i386/tsc.c; + x86_64_efi = kern/x86_64/dl.c; + x86_64_efi = kern/x86_64/efi/callwrap.S; - i386_pc = kern/i386/pc/startup.S; - i386_pc = kern/i386/misc.S; - i386_pc = kern/mm.c; - i386_pc = kern/time.c; - i386_pc = kern/i386/dl.c; i386_pc = kern/i386/pc/init.c; i386_pc = kern/i386/pc/mmap.c; i386_pc = kern/i386/tsc.c; - i386_pc = kern/i386/pit.c; - i386_pc = kern/generic/rtc_get_time_ms.c; - i386_pc = kern/generic/millisleep.c; i386_pc = term/i386/pc/console.c; - i386_pc = term/i386/vga_common.c; - i386_efi = kern/i386/efi/startup.S; - i386_efi = kern/mm.c; - i386_efi = kern/i386/dl.c; - i386_efi = kern/i386/efi/init.c; - i386_efi = kern/efi/efi.c; - i386_efi = kern/efi/init.c; - i386_efi = kern/efi/mm.c; - i386_efi = kern/time.c; - i386_efi = kern/i386/tsc.c; - i386_efi = kern/i386/pit.c; - i386_efi = kern/generic/rtc_get_time_ms.c; - i386_efi = kern/generic/millisleep.c; - i386_efi = term/efi/console.c; - i386_efi = disk/efi/efidisk.c; - - i386_coreboot = kern/i386/coreboot/startup.S; - i386_coreboot = kern/i386/misc.S; - i386_coreboot = kern/i386/coreboot/init.c; - i386_coreboot = kern/i386/coreboot/mmap.c; - i386_coreboot = kern/i386/halt.c; - i386_coreboot = kern/mm.c; - i386_coreboot = kern/time.c; - i386_coreboot = kern/i386/dl.c; - i386_coreboot = kern/i386/tsc.c; - i386_coreboot = kern/i386/pit.c; - i386_coreboot = kern/generic/rtc_get_time_ms.c; - i386_coreboot = kern/generic/millisleep.c; - i386_coreboot = term/i386/pc/vga_text.c; - i386_coreboot = term/i386/vga_common.c; - - i386_multiboot = kern/i386/coreboot/startup.S; - i386_multiboot = kern/i386/misc.S; - i386_multiboot = kern/i386/coreboot/init.c; - i386_multiboot = kern/i386/multiboot_mmap.c; - i386_multiboot = kern/i386/halt.c; - i386_multiboot = kern/mm.c; - i386_multiboot = kern/time.c; - i386_multiboot = kern/i386/dl.c; - i386_multiboot = kern/i386/tsc.c; - i386_multiboot = kern/i386/pit.c; - i386_multiboot = kern/generic/rtc_get_time_ms.c; - i386_multiboot = kern/generic/millisleep.c; - i386_multiboot = term/i386/pc/vga_text.c; - i386_multiboot = term/i386/vga_common.c; - - i386_qemu = kern/i386/qemu/startup.S; - i386_qemu = kern/i386/misc.S; - i386_qemu = kern/i386/qemu/init.c; - i386_qemu = kern/i386/coreboot/init.c; - i386_qemu = kern/i386/qemu/mmap.c; - i386_qemu = kern/i386/halt.c; - i386_qemu = kern/mm.c; - i386_qemu = kern/time.c; - i386_qemu = kern/i386/dl.c; - i386_qemu = kern/i386/tsc.c; - i386_qemu = kern/i386/pit.c; - i386_qemu = kern/generic/rtc_get_time_ms.c; - i386_qemu = kern/generic/millisleep.c; - i386_qemu = term/i386/pc/vga_text.c; - i386_qemu = term/i386/vga_common.c; i386_qemu = bus/pci.c; + i386_qemu = kern/i386/qemu/init.c; + i386_qemu = kern/i386/qemu/mmap.c; + i386_qemu = kern/i386/tsc.c; + + i386_coreboot = kern/i386/coreboot/mmap.c; + i386_coreboot = kern/i386/tsc.c; + + i386_multiboot = kern/i386/multiboot_mmap.c; + i386_multiboot = kern/i386/tsc.c; - i386_ieee1275 = kern/i386/ieee1275/startup.S; - i386_ieee1275 = kern/i386/misc.S; i386_ieee1275 = kern/i386/ieee1275/init.c; i386_ieee1275 = kern/ieee1275/init.c; - i386_ieee1275 = kern/ieee1275/mmap.c; - i386_ieee1275 = kern/ieee1275/cmain.c; - i386_ieee1275 = kern/ieee1275/openfw.c; - i386_ieee1275 = kern/mm.c; - i386_ieee1275 = kern/i386/dl.c; - i386_ieee1275 = kern/time.c; - i386_ieee1275 = kern/generic/millisleep.c; - i386_ieee1275 = kern/ieee1275/ieee1275.c; - i386_ieee1275 = term/ieee1275/ofconsole.c; - i386_ieee1275 = disk/ieee1275/ofdisk.c; - i386_ieee1275 = term/terminfo.c; - i386_ieee1275 = term/tparm.c; - x86_64_efi = kern/x86_64/efi/startup.S; - x86_64_efi = kern/x86_64/efi/callwrap.S; - x86_64_efi = kern/mm.c; - x86_64_efi = kern/x86_64/dl.c; - x86_64_efi = kern/i386/efi/init.c; - x86_64_efi = kern/efi/efi.c; - x86_64_efi = kern/efi/init.c; - x86_64_efi = kern/efi/mm.c; - x86_64_efi = kern/time.c; - x86_64_efi = kern/i386/tsc.c; - x86_64_efi = kern/i386/pit.c; - x86_64_efi = kern/generic/millisleep.c; - x86_64_efi = kern/generic/rtc_get_time_ms.c; - x86_64_efi = term/efi/console.c; - x86_64_efi = disk/efi/efidisk.c; - - mips_yeeloong = kern/mips/startup.S; + mips_yeeloong = bus/bonito.c; + mips_yeeloong = bus/cs5536.c; + mips_yeeloong = bus/pci.c; + mips_yeeloong = commands/extcmd.c; + mips_yeeloong = font/font.c; + mips_yeeloong = font/font_cmd.c; + mips_yeeloong = io/bufio.c; + mips_yeeloong = kern/mips/cache.S; + mips_yeeloong = kern/mips/dl.c; mips_yeeloong = kern/mips/init.c; mips_yeeloong = kern/mips/yeeloong/init.c; - mips_yeeloong = kern/mm.c; - mips_yeeloong = kern/mips/dl.c; - mips_yeeloong = kern/generic/millisleep.c; - mips_yeeloong = kern/generic/rtc_get_time_ms.c; - mips_yeeloong = kern/time.c; - mips_yeeloong = kern/mips/cache.S; - mips_yeeloong = io/bufio.c; mips_yeeloong = lib/arg.c; - mips_yeeloong = commands/extcmd.c; - mips_yeeloong = bus/pci.c; - mips_yeeloong = bus/bonito.c; - mips_yeeloong = font/font_cmd.c; - mips_yeeloong = font/font.c; mips_yeeloong = term/at_keyboard.c; mips_yeeloong = term/gfxterm.c; - mips_yeeloong = video/video.c; - mips_yeeloong = video/fb/video_fb.c; + mips_yeeloong = term/serial.c; + mips_yeeloong = video/bitmap.c; + mips_yeeloong = video/bitmap_scale.c; mips_yeeloong = video/fb/fbblit.c; mips_yeeloong = video/fb/fbfill.c; mips_yeeloong = video/fb/fbutil.c; - mips_yeeloong = video/bitmap.c; - mips_yeeloong = video/bitmap_scale.c; + mips_yeeloong = video/fb/video_fb.c; mips_yeeloong = video/sm712.c; - mips_yeeloong = bus/cs5536.c; - mips_yeeloong = term/serial.c; - mips_yeeloong = term/terminfo.c; - mips_yeeloong = term/tparm.c; + mips_yeeloong = video/video.c; - powerpc_ieee1275 = kern/powerpc/ieee1275/startup.S; - powerpc_ieee1275 = kern/ieee1275/cmain.c; - powerpc_ieee1275 = kern/ieee1275/ieee1275.c; - powerpc_ieee1275 = kern/mm.c; powerpc_ieee1275 = kern/ieee1275/init.c; - powerpc_ieee1275 = kern/ieee1275/mmap.c; - powerpc_ieee1275 = kern/ieee1275/openfw.c; - powerpc_ieee1275 = kern/powerpc/dl.c; - powerpc_ieee1275 = kern/generic/millisleep.c; - powerpc_ieee1275 = kern/time.c; powerpc_ieee1275 = kern/powerpc/cache.S; - powerpc_ieee1275 = term/ieee1275/ofconsole.c; - powerpc_ieee1275 = disk/ieee1275/ofdisk.c; - powerpc_ieee1275 = term/terminfo.c; - powerpc_ieee1275 = term/tparm.c; + powerpc_ieee1275 = kern/powerpc/dl.c; - sparc64_ieee1275 = kern/sparc64/ieee1275/crt0.S; - sparc64_ieee1275 = kern/ieee1275/cmain.c; - sparc64_ieee1275 = kern/ieee1275/ieee1275.c; - sparc64_ieee1275 = kern/mm.c; + sparc64_ieee1275 = kern/sparc64/cache.S; + sparc64_ieee1275 = kern/sparc64/dl.c; sparc64_ieee1275 = kern/sparc64/ieee1275/ieee1275.c; sparc64_ieee1275 = kern/sparc64/ieee1275/init.c; - sparc64_ieee1275 = kern/ieee1275/mmap.c; - sparc64_ieee1275 = kern/ieee1275/openfw.c; - sparc64_ieee1275 = kern/sparc64/dl.c; - sparc64_ieee1275 = kern/generic/millisleep.c; - sparc64_ieee1275 = kern/time.c; - sparc64_ieee1275 = kern/sparc64/cache.S; - sparc64_ieee1275 = disk/ieee1275/ofdisk.c; - sparc64_ieee1275 = term/ieee1275/ofconsole.c; - sparc64_ieee1275 = term/terminfo.c; - sparc64_ieee1275 = term/tparm.c; - emu = kern/emu/mm.c; - emu = kern/emu/main.c; - emu = kern/emu/misc.c; - emu = kern/emu/getroot.c; - emu = kern/emu/time.c; - emu = kern/emu/hostdisk.c; - emu = kern/emu/hostfs.c; - emu = kern/emu/console.c; emu = disk/host.c; emu = gnulib/progname.c; + emu = kern/emu/console.c; + emu = kern/emu/getroot.c; + emu = kern/emu/hostdisk.c; + emu = kern/emu/hostfs.c; + emu = kern/emu/main.c; + emu = kern/emu/misc.c; + emu = kern/emu/mm.c; + emu = kern/emu/time.c; extra_dist = kern/i386/loader.S; extra_dist = kern/i386/realmode.S; @@ -244,8 +174,8 @@ program = { name = grub-emu; mansection = 1; - source = kern/emu/full.c; - nodist = grub_emu_init.c; + emu = kern/emu/full.c; + emu_nodist = grub_emu_init.c; ldadd = 'kernel.img$(EXEEXT)'; ldadd = '$(MODULE_FILES)'; @@ -257,9 +187,9 @@ program = { program = { name = grub-emu-lite; - source = kern/emu/lite.c; - source = kern/emu/cache.S; - nodist = symlist.c; + emu = kern/emu/lite.c; + emu = kern/emu/cache.S; + emu_nodist = symlist.c; ldadd = 'kernel.img$(EXEEXT)'; ldadd = '$(LIBUTIL) $(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER)'; @@ -271,6 +201,7 @@ image = { name = boot; i386_pc = boot/i386/pc/boot.S; i386_qemu = boot/i386/qemu/boot.S; + sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S; i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; @@ -279,7 +210,6 @@ image = { i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR)'; i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; - sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S; sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big'; sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000'; @@ -345,19 +275,19 @@ image = { module = { name = trig; - nodist = trigtables.c; + common_nodist = trigtables.c; extra_dist = gentrigtables.c; }; module = { name = cs5536; - source = bus/cs5536.c; + i386 = bus/cs5536.c; enable = i386; }; module = { name = libusb; - source = bus/usb/emu/usb.c; + emu = bus/usb/emu/usb.c; enable = emu; condition = COND_GRUB_EMU_USB; }; @@ -370,36 +300,31 @@ module = { module = { name = usb; - source = bus/usb/usb.c; - source = bus/usb/usbtrans.c; - source = bus/usb/usbhub.c; + common = bus/usb/usb.c; + noemu = bus/usb/usbtrans.c; + noemu = bus/usb/usbhub.c; + enable = emu; enable = i386; enable = mips_yeeloong; -}; - -module = { - name = usb; - source = bus/usb/usb.c; - enable = emu; - condition = COND_GRUB_EMU_USB; + emu_condition = COND_GRUB_EMU_USB; }; module = { name = uhci; - source = bus/usb/uhci.c; + common = bus/usb/uhci.c; enable = i386_pc; }; module = { name = ohci; - source = bus/usb/ohci.c; + common = bus/usb/ohci.c; enable = i386_pc; enable = mips_yeeloong; }; module = { name = pci; - source = bus/pci.c; + noemu = bus/pci.c; emu = bus/emu/pci.c; emu = commands/lspci.c; @@ -408,13 +333,12 @@ module = { enable = x86_efi; enable = i386_ieee1275; enable = i386_coreboot; - emu_condition = COND_GRUB_EMU_PCI; }; library = { name = libgnulib.a; - source = gnulib/regex.c; + common = gnulib/regex.c; extra_dist = gnulib/regcomp.c; extra_dist = gnulib/regexec.c; @@ -427,20 +351,20 @@ library = { module = { name = cmostest; - source = commands/i386/cmostest.c; + i386 = commands/i386/cmostest.c; enable = i386_pc; enable = i386_coreboot; }; module = { name = iorw; - source = commands/iorw.c; + common = commands/iorw.c; enable = i386; }; module = { name = regexp; - source = commands/regexp.c; + common = commands/regexp.c; ldadd = libgnulib.a; cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; @@ -449,10 +373,8 @@ module = { module = { name = acpi; - x86_efi = commands/acpi.c; + i386 = commands/acpi.c; x86_efi = commands/efi/acpi.c; - - i386_pc = commands/acpi.c; i386_pc = commands/i386/pc/acpi.c; enable = x86_efi; @@ -461,48 +383,45 @@ module = { module = { name = blocklist; - source = commands/blocklist.c; + common = commands/blocklist.c; }; module = { name = boot; - source = commands/boot.c; - - i386_pc = commands/boot.c; + common = commands/boot.c; i386_pc = lib/i386/pc/biosnum.c; }; module = { name = cat; - source = commands/cat.c; + common = commands/cat.c; }; module = { name = cmp; - source = commands/cmp.c; + common = commands/cmp.c; }; module = { name = configfile; - source = commands/configfile.c; + common = commands/configfile.c; }; module = { name = cpuid; - source = commands/i386/cpuid.c; - + i386 = commands/i386/cpuid.c; enable = x86; }; module = { name = crc; - source = commands/crc.c; - source = lib/crc.c; + common = commands/crc.c; + common = lib/crc.c; }; module = { name = date; - source = commands/date.c; + common = commands/date.c; }; module = { @@ -515,13 +434,13 @@ module = { module = { name = echo; - source = commands/echo.c; + common = commands/echo.c; }; module = { name = extcmd; - source = commands/extcmd.c; - source = lib/arg.c; + common = commands/extcmd.c; + common = lib/arg.c; }; module = { @@ -532,43 +451,41 @@ module = { module = { name = gptsync; - source = commands/gptsync.c; + common = commands/gptsync.c; }; module = { name = halt; - source = commands/halt.c; - + nopc = commands/halt.c; i386_pc = commands/i386/pc/halt.c; }; module = { name = hashsum; - source = commands/hashsum.c; + common = commands/hashsum.c; }; module = { name = hdparm; - source = commands/hdparm.c; - source = lib/hexdump.c; - + common = commands/hdparm.c; + common = lib/hexdump.c; enable = i386_pc; }; module = { name = help; - source = commands/help.c; + common = commands/help.c; }; module = { name = hexdump; - source = commands/hexdump.c; - source = lib/hexdump.c; + common = commands/hexdump.c; + common = lib/hexdump.c; }; module = { name = keystatus; - source = commands/keystatus.c; + common = commands/keystatus.c; }; module = { @@ -579,23 +496,23 @@ module = { module = { name = loadenv; - source = commands/loadenv.c; - source = lib/envblk.c; + common = commands/loadenv.c; + common = lib/envblk.c; }; module = { name = ls; - source = commands/ls.c; + common = commands/ls.c; }; module = { name = lsmmap; - source = commands/lsmmap.c; + common = commands/lsmmap.c; }; module = { name = lspci; - source = commands/lspci.c; + common = commands/lspci.c; enable = x86; enable = mips; @@ -603,38 +520,38 @@ module = { module = { name = memrw; - source = commands/memrw.c; + common = commands/memrw.c; }; module = { name = minicmd; - source = commands/minicmd.c; + common = commands/minicmd.c; }; module = { name = parttool; - source = commands/parttool.c; + common = commands/parttool.c; }; module = { name = password; - source = commands/password.c; + common = commands/password.c; }; module = { name = password_pbkdf2; - source = commands/password_pbkdf2.c; + common = commands/password_pbkdf2.c; }; module = { name = play; - source = commands/i386/pc/play.c; + i386 = commands/i386/pc/play.c; enable = i386; }; module = { name = probe; - source = commands/probe.c; + common = commands/probe.c; }; module = { @@ -645,81 +562,75 @@ module = { module = { name = read; - source = commands/read.c; + common = commands/read.c; }; module = { name = reboot; - source = commands/reboot.c; + common = commands/reboot.c; }; module = { name = search; - source = commands/search_wrap.c; + common = commands/search_wrap.c; extra_dist = commands/search.c; }; module = { name = search_fs_file; - source = commands/search_file.c; + common = commands/search_file.c; }; module = { name = search_fs_uuid; - source = commands/search_uuid.c; + common = commands/search_uuid.c; }; module = { name = search_label; - source = commands/search_label.c; + common = commands/search_label.c; }; module = { name = setpci; - source = commands/setpci.c; - + common = commands/setpci.c; enable = x86; }; module = { name = sleep; - source = commands/sleep.c; + common = commands/sleep.c; }; module = { name = suspend; - source = commands/ieee1275/suspend.c; + ieee1275 = commands/ieee1275/suspend.c; enable = i386_ieee1275; enable = powerpc_ieee1275; }; module = { name = terminal; - source = commands/terminal.c; + common = commands/terminal.c; }; module = { name = test; - source = commands/test.c; + common = commands/test.c; }; module = { name = true; - source = commands/true.c; + common = commands/true.c; }; module = { name = usbtest; - source = commands/usbtest.c; + common = commands/usbtest.c; enable = i386_pc; enable = mips_yeeloong; -}; - -module = { - name = usbtest; - source = commands/usbtest.c; enable = emu; - condition = COND_GRUB_EMU_USB; + emu_condition = COND_GRUB_EMU_USB; }; module = { @@ -736,71 +647,69 @@ module = { module = { name = videotest; - source = commands/videotest.c; + common = commands/videotest.c; }; module = { name = xnu_uuid; - source = commands/xnu_uuid.c; + common = commands/xnu_uuid.c; }; module = { name = dm_nv; - source = disk/dmraid_nvidia.c; + common = disk/dmraid_nvidia.c; }; module = { name = loopback; - source = disk/loopback.c; + common = disk/loopback.c; }; module = { name = lvm; - source = disk/lvm.c; + common = disk/lvm.c; }; module = { name = mdraid; - source = disk/mdraid_linux.c; + common = disk/mdraid_linux.c; }; module = { name = raid; - source = disk/raid.c; + common = disk/raid.c; }; module = { name = raid5rec; - source = disk/raid5_recover.c; + common = disk/raid5_recover.c; }; module = { name = raid6rec; - source = disk/raid6_recover.c; + common = disk/raid6_recover.c; }; module = { name = scsi; - source = disk/scsi.c; + common = disk/scsi.c; }; module = { name = memdisk; - source = disk/memdisk.c; + common = disk/memdisk.c; }; module = { name = ata; - source = disk/ata.c; - + common = disk/ata.c; enable = x86; enable = mips; }; module = { name = ata_pthru; - source = disk/ata_pthru.c; - + common = disk/ata_pthru.c; enable = x86; enable = mips_yeeloong; }; @@ -813,22 +722,16 @@ module = { module = { name = usbms; - source = disk/usbms.c; + common = disk/usbms.c; enable = i386_pc; enable = mips_yeeloong; -}; - -module = { - name = usbms; - source = disk/usbms.c; enable = emu; - condition = COND_GRUB_EMU_USB; + emu_condition = COND_GRUB_EMU_USB; }; module = { name = nand; - source = disk/ieee1275/nand.c; - + ieee1275 = disk/ieee1275/nand.c; enable = i386_ieee1275; }; @@ -858,8 +761,8 @@ module = { module = { name = font; - source = font/font.c; - source = font/font_cmd.c; + common = font/font.c; + common = font/font_cmd.c; enable = emu; enable = x86; enable = sparc64; @@ -868,122 +771,122 @@ module = { module = { name = affs; - source = fs/affs.c; + common = fs/affs.c; }; module = { name = afs; - source = fs/afs.c; + common = fs/afs.c; }; module = { name = afs_be; - source = fs/afs_be.c; + common = fs/afs_be.c; }; module = { name = befs; - source = fs/befs.c; + common = fs/befs.c; }; module = { name = befs_be; - source = fs/befs_be.c; + common = fs/befs_be.c; }; module = { name = cpio; - source = fs/cpio.c; + common = fs/cpio.c; }; module = { name = ext2; - source = fs/ext2.c; + common = fs/ext2.c; }; module = { name = fat; - source = fs/fat.c; + common = fs/fat.c; }; module = { name = fshelp; - source = fs/fshelp.c; + common = fs/fshelp.c; }; module = { name = hfs; - source = fs/hfs.c; + common = fs/hfs.c; }; module = { name = hfsplus; - source = fs/hfsplus.c; + common = fs/hfsplus.c; }; module = { name = iso9660; - source = fs/iso9660.c; + common = fs/iso9660.c; }; module = { name = jfs; - source = fs/jfs.c; + common = fs/jfs.c; }; module = { name = minix; - source = fs/minix.c; + common = fs/minix.c; }; module = { name = nilfs2; - source = fs/nilfs2.c; + common = fs/nilfs2.c; }; module = { name = ntfs; - source = fs/ntfs.c; + common = fs/ntfs.c; }; module = { name = ntfscomp; - source = fs/ntfscomp.c; + common = fs/ntfscomp.c; }; module = { name = reiserfs; - source = fs/reiserfs.c; + common = fs/reiserfs.c; }; module = { name = sfs; - source = fs/sfs.c; + common = fs/sfs.c; }; module = { name = tar; - source = fs/tar.c; + common = fs/tar.c; }; module = { name = udf; - source = fs/udf.c; + common = fs/udf.c; }; module = { name = ufs1; - source = fs/ufs.c; + common = fs/ufs.c; }; module = { name = ufs2; - source = fs/ufs2.c; + common = fs/ufs2.c; }; module = { name = xfs; - source = fs/xfs.c; + common = fs/xfs.c; }; module = { @@ -994,43 +897,43 @@ module = { module = { name = gettext; - source = gettext/gettext.c; + common = gettext/gettext.c; }; module = { name = gfxmenu; - source = gfxmenu/gfxmenu.c; - source = gfxmenu/model.c; - source = gfxmenu/view.c; - source = gfxmenu/font.c; - source = gfxmenu/icon_manager.c; - source = gfxmenu/theme_loader.c; - source = gfxmenu/widget-box.c; - source = gfxmenu/gui_canvas.c; - source = gfxmenu/gui_circular_progress.c; - source = gfxmenu/gui_box.c; - source = gfxmenu/gui_label.c; - source = gfxmenu/gui_list.c; - source = gfxmenu/gui_image.c; - source = gfxmenu/gui_progress_bar.c; - source = gfxmenu/gui_util.c; - source = gfxmenu/gui_string_util.c; - source = gfxmenu/named_colors.c; + common = gfxmenu/gfxmenu.c; + common = gfxmenu/model.c; + common = gfxmenu/view.c; + common = gfxmenu/font.c; + common = gfxmenu/icon_manager.c; + common = gfxmenu/theme_loader.c; + common = gfxmenu/widget-box.c; + common = gfxmenu/gui_canvas.c; + common = gfxmenu/gui_circular_progress.c; + common = gfxmenu/gui_box.c; + common = gfxmenu/gui_label.c; + common = gfxmenu/gui_list.c; + common = gfxmenu/gui_image.c; + common = gfxmenu/gui_progress_bar.c; + common = gfxmenu/gui_util.c; + common = gfxmenu/gui_string_util.c; + common = gfxmenu/named_colors.c; }; module = { name = hello; - source = hello/hello.c; + common = hello/hello.c; }; module = { name = gzio; - source = io/gzio.c; + common = io/gzio.c; }; module = { name = bufio; - source = io/bufio.c; + common = io/bufio.c; enable = emu; enable = x86; enable = sparc64; @@ -1039,19 +942,19 @@ module = { module = { name = elf; - source = kern/elf.c; + common = kern/elf.c; }; module = { name = crypto; - source = lib/crypto.c; + common = lib/crypto.c; extra_dist = lib/libgcrypt-grub/cipher/crypto.lst; }; module = { name = pbkdf2; - source = lib/pbkdf2.c; + common = lib/pbkdf2.c; }; module = { @@ -1068,7 +971,7 @@ module = { module = { name = datetime; - source = lib/cmos_datetime.c; + x86_noefi_mips = lib/cmos_datetime.c; x86_efi = lib/efi/datetime.c; sparc64_ieee1275 = lib/ieee1275/datetime.c; powerpc_ieee1275 = lib/ieee1275/datetime.c; @@ -1080,7 +983,7 @@ module = { module = { name = setjmp; - source = lib/setjmp.S; + common = lib/setjmp.S; extra_dist = lib/i386/setjmp.S; extra_dist = lib/mips/setjmp.S; extra_dist = lib/x86_64/setjmp.S; @@ -1090,7 +993,7 @@ module = { module = { name = aout; - source = loader/aout.c; + common = loader/aout.c; enable = i386_pc; enable = i386_qemu; enable = i386_coreboot; @@ -1100,11 +1003,11 @@ module = { module = { name = bsd; - source = loader/i386/bsd.c; - source = loader/i386/bsd32.c; - source = loader/i386/bsd64.c; - source = loader/i386/bsd_helper.S; - source = loader/i386/bsd_trampoline.S; + i386 = loader/i386/bsd.c; + i386 = loader/i386/bsd32.c; + i386 = loader/i386/bsd64.c; + i386 = loader/i386/bsd_helper.S; + i386 = loader/i386/bsd_trampoline.S; extra_dist = loader/i386/bsdXX.c; extra_dist = loader/i386/bsd_pagetable.c; @@ -1117,7 +1020,7 @@ module = { module = { name = linux16; - source = loader/i386/pc/linux.c; + i386_pc = loader/i386/pc/linux.c; enable = i386_pc; }; @@ -1125,41 +1028,41 @@ module = { name = multiboot2; cppflags = "-DGRUB_USE_MULTIBOOT2"; - source = loader/multiboot.c; - source = loader/multiboot_mbi2.c; + common = loader/multiboot.c; + common = loader/multiboot_mbi2.c; enable = x86; enable = mips; }; module = { name = multiboot; - source = loader/multiboot.c; - source = loader/i386/multiboot_mbi.c; + common = loader/multiboot.c; + x86 = loader/i386/multiboot_mbi.c; extra_dist = loader/multiboot_elfxx.c; enable = x86; }; module = { name = linux; - i386 = loader/i386/linux.c; - i386_efi = loader/i386/efi/linux.c; - i386_ieee1275 = loader/i386/ieee1275/linux.c; - x86_64_efi = loader/i386/efi/linux.c; + i386_noefi_noieee1275 = loader/i386/linux.c; + + x86_efi = loader/i386/efi/linux.c; x86_64_efi = loader/i386/linux_trampoline.S; + i386_ieee1275 = loader/i386/ieee1275/linux.c; mips = loader/mips/linux.c; powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c; sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c; - enable = nonemu; + enable = noemu; }; module = { name = xnu; - source = loader/xnu_resume.c; - source = loader/i386/xnu.c; - source = loader/macho32.c; - source = loader/macho64.c; - source = loader/macho.c; - source = loader/xnu.c; + i386 = loader/xnu_resume.c; + i386 = loader/i386/xnu.c; + i386 = loader/macho32.c; + i386 = loader/macho64.c; + i386 = loader/macho.c; + i386 = loader/xnu.c; extra_dist = loader/machoXX.c; enable = i386_pc; @@ -1218,35 +1121,35 @@ module = { module = { name = normal; - source = normal/main.c; - source = normal/cmdline.c; - source = normal/dyncmd.c; - source = normal/auth.c; - source = normal/autofs.c; - source = normal/color.c; - source = normal/completion.c; - source = normal/datetime.c; - source = normal/menu.c; - source = normal/menu_entry.c; - source = normal/menu_text.c; - source = normal/misc.c; - source = normal/crypto.c; - source = normal/term.c; - source = normal/context.c; - source = normal/charset.c; + common = normal/main.c; + common = normal/cmdline.c; + common = normal/dyncmd.c; + common = normal/auth.c; + common = normal/autofs.c; + common = normal/color.c; + common = normal/completion.c; + common = normal/datetime.c; + common = normal/menu.c; + common = normal/menu_entry.c; + common = normal/menu_text.c; + common = normal/misc.c; + common = normal/crypto.c; + common = normal/term.c; + common = normal/context.c; + common = normal/charset.c; - source = script/main.c; - source = script/script.c; - source = script/execute.c; - source = script/function.c; - source = script/lexer.c; - source = script/argv.c; + common = script/main.c; + common = script/script.c; + common = script/execute.c; + common = script/function.c; + common = script/lexer.c; + common = script/argv.c; - source = unidata.c; - nodist = grub_script.tab.c; - nodist = grub_script.yy.c; - nodist = grub_script.tab.h; - nodist = grub_script.yy.h; + common = unidata.c; + common_nodist = grub_script.tab.c; + common_nodist = grub_script.yy.c; + common_nodist = grub_script.tab.h; + common_nodist = grub_script.yy.h; extra_dist = script/yylex.l; extra_dist = script/parser.y; @@ -1257,58 +1160,58 @@ module = { module = { name = part_acorn; - source = partmap/acorn.c; + common = partmap/acorn.c; }; module = { name = part_amiga; - source = partmap/amiga.c; + common = partmap/amiga.c; }; module = { name = part_apple; - source = partmap/apple.c; + common = partmap/apple.c; }; module = { name = part_gpt; - source = partmap/gpt.c; + common = partmap/gpt.c; }; module = { name = part_msdos; - source = partmap/msdos.c; + common = partmap/msdos.c; }; module = { name = part_sun; - source = partmap/sun.c; + common = partmap/sun.c; }; module = { name = part_bsd; - source = partmap/bsdlabel.c; + common = partmap/bsdlabel.c; }; module = { name = part_sunpc; - source = partmap/sunpc.c; + common = partmap/sunpc.c; }; module = { name = msdospart; - source = parttool/msdospart.c; + common = parttool/msdospart.c; }; module = { name = at_keyboard; - source = term/at_keyboard.c; + common = term/at_keyboard.c; enable = x86; }; module = { name = gfxterm; - source = term/gfxterm.c; + common = term/gfxterm.c; enable = emu; enable = x86; enable = sparc64; @@ -1317,19 +1220,19 @@ module = { module = { name = serial; - source = term/serial.c; + common = term/serial.c; enable = i386; }; module = { name = terminfo; - source = term/terminfo.c; - source = term/tparm.c; + common = term/terminfo.c; + common = term/tparm.c; }; module = { name = usb_keyboard; - source = term/usb_keyboard.c; + common = term/usb_keyboard.c; enable = i386_pc; enable = mips_yeeloong; }; @@ -1361,19 +1264,19 @@ module = { module = { name = functional_test; - source = tests/lib/functional_test.c; - source = tests/lib/test.c; + common = tests/lib/functional_test.c; + common = tests/lib/test.c; }; module = { name = example_functional_test; - source = tests/example_functional_test.c; + common = tests/example_functional_test.c; cflags = -Wno-format; }; module = { name = bitmap; - source = video/bitmap.c; + common = video/bitmap.c; enable = emu; enable = x86; enable = sparc64; @@ -1382,7 +1285,7 @@ module = { module = { name = bitmap_scale; - source = video/bitmap_scale.c; + common = video/bitmap_scale.c; enable = emu; enable = x86; enable = sparc64; @@ -1403,17 +1306,17 @@ module = { module = { name = jpeg; - source = video/readers/jpeg.c; + common = video/readers/jpeg.c; }; module = { name = png; - source = video/readers/png.c; + common = video/readers/png.c; }; module = { name = tga; - source = video/readers/tga.c; + common = video/readers/tga.c; }; module = { @@ -1424,10 +1327,10 @@ module = { module = { name = video_fb; - source = video/fb/video_fb.c; - source = video/fb/fbblit.c; - source = video/fb/fbfill.c; - source = video/fb/fbutil.c; + common = video/fb/video_fb.c; + common = video/fb/fbblit.c; + common = video/fb/fbfill.c; + common = video/fb/fbutil.c; enable = emu; enable = x86; enable = sparc64; @@ -1436,7 +1339,7 @@ module = { module = { name = video; - source = video/video.c; + common = video/video.c; enable = emu; enable = x86; enable = sparc64; @@ -1445,19 +1348,19 @@ module = { module = { name = ieee1275_fb; - source = video/ieee1275.c; + ieee1275 = video/ieee1275.c; enable = powerpc; enable = sparc64; }; module = { name = sdl; - source = video/emu/sdl.c; - condition = COND_GRUB_EMU_SDL; + emu = video/emu/sdl.c; enable = emu; + condition = COND_GRUB_EMU_SDL; }; module = { name = datehook; - source = hook/datehook.c; + common = hook/datehook.c; }; diff --git a/util/import_gcry.py b/util/import_gcry.py index 6280f001e..494a4ae7b 100644 --- a/util/import_gcry.py +++ b/util/import_gcry.py @@ -277,7 +277,7 @@ for cipher_file in cipher_files: conf.write ("module = {\n") conf.write (" name = %s;\n" % modname) for src in modfiles.split(): - conf.write (" source = %s;\n" % src) + conf.write (" common = %s;\n" % src) conf.write (" cflags = '$(CFLAGS_GCRY)';\n"); conf.write (" cppflags = '$(CPPFLAGS_GCRY)';\n"); conf.write ("};\n\n") From c721825b4fc6ad3d1e3f869bc7291037195f320e Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 21 Aug 2010 17:11:40 +0530 Subject: [PATCH 197/271] build fixes for mips and ieee1275 platforms --- configure.ac | 32 ++++++++++++++++---------------- gentpl.py | 1 + 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/configure.ac b/configure.ac index b57a8580a..c05b506c7 100644 --- a/configure.ac +++ b/configure.ac @@ -71,11 +71,11 @@ case "$target_cpu" in sparc) target_cpu=sparc64 ;; mipsel|mips64el) target_cpu=mips; - machine_CFLAGS="-DGRUB_CPU_MIPSEL=1"; + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; ;; mips|mips64) target_cpu=mips; - machine_CFLAGS="-DGRUB_CPU_MIPS=1"; + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"; ;; esac @@ -150,24 +150,24 @@ case "$host_os" in esac case "$platform" in - coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; - multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; - efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;; - ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; - qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;; - pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; - emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;; - yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; - qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + coreboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;; + ieee1275) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;; + qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;; + yeeloong) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + qemu-mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; esac case "$target_cpu" in - mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;; - sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;; + mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;; + sparc64) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;; esac -machine_CFLAGS="$machine_CFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" +machine_CPPFLAGS="$machine_CPPFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" -HOST_CPPFLAGS="$HOST_CPPFLAGS $machine_CFLAGS" -TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CFLAGS" +HOST_CPPFLAGS="$HOST_CPPFLAGS $machine_CPPFLAGS" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS" AC_SUBST(host_cpu) AC_SUBST(host_os) diff --git a/gentpl.py b/gentpl.py index 18672bdcd..bbec62413 100644 --- a/gentpl.py +++ b/gentpl.py @@ -40,6 +40,7 @@ GROUPS["x86_noefi_mips"] = GROUPS["x86_noefi"] + GROUPS["mips"] GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ] GROUPS["noieee1275"] = GRUB_PLATFORMS[:] for i in GROUPS["ieee1275"]: GROUPS["noieee1275"].remove(i) +GROUPS["ieee1275_mips"] = GROUPS["ieee1275"] + GROUPS["mips"] GROUPS["pci"] = GROUPS["x86"] + GROUPS["mips"] From 354128c8af84945e43a2d4a5ff6b0284d778cc56 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 21 Aug 2010 17:22:19 +0530 Subject: [PATCH 198/271] fix x86_64_efi build --- gentpl.py | 1 + grub-core/Makefile.core.def | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/gentpl.py b/gentpl.py index bbec62413..5b7987390 100644 --- a/gentpl.py +++ b/gentpl.py @@ -16,6 +16,7 @@ GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"] GROUPS["x86_efi"] = [ "i386_efi", "x86_64_efi" ] GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc") +GROUPS["x86_efi_pc"] = GROUPS["x86_efi"] + ["i386_pc"] GROUPS["x86_noefi"] = GROUPS["x86"][:]; GROUPS["x86_noefi"].remove("i386_efi"); GROUPS["x86_noefi"].remove("x86_64_efi") GROUPS["i386_noefi"] = GROUPS["i386"][:]; GROUPS["i386_noefi"].remove("i386_efi") diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index b7c52b9d7..fd07012f7 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -409,7 +409,7 @@ module = { module = { name = cpuid; - i386 = commands/i386/cpuid.c; + x86 = commands/i386/cpuid.c; enable = x86; }; @@ -1057,12 +1057,12 @@ module = { module = { name = xnu; - i386 = loader/xnu_resume.c; - i386 = loader/i386/xnu.c; - i386 = loader/macho32.c; - i386 = loader/macho64.c; - i386 = loader/macho.c; - i386 = loader/xnu.c; + x86_efi_pc = loader/xnu_resume.c; + x86_efi_pc = loader/i386/xnu.c; + x86_efi_pc = loader/macho32.c; + x86_efi_pc = loader/macho64.c; + x86_efi_pc = loader/macho.c; + x86_efi_pc = loader/xnu.c; extra_dist = loader/machoXX.c; enable = i386_pc; From 5815f2c19a74ff4ad566163680fa915875a2acea Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 21 Aug 2010 21:03:26 +0530 Subject: [PATCH 199/271] picks 10_${host_kernel} script --- Makefile.util.def | 26 ++++++++++++++++++++------ configure.ac | 5 +++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Makefile.util.def b/Makefile.util.def index 04b3d6f1c..2ad7f6a57 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -203,12 +203,11 @@ program = { name = grub-mkdevicemap; installdir = sbin; mansection = 8; - nosparc64 = util/grub-mkdevicemap.c; - nosparc64 = util/deviceiter.c; + + common = util/grub-mkdevicemap.c; + common = util/deviceiter.c; nosparc64 = util/devicemap.c; - sparc64_ieee1275 = util/grub-mkdevicemap.c; - sparc64_ieee1275 = util/deviceiter.c; sparc64_ieee1275 = util/ieee1275/ofpath.c; sparc64_ieee1275 = util/ieee1275/devicemap.c; @@ -267,24 +266,39 @@ script = { installdir = grubconf; }; -/* script = { name = '10_windows'; common = util/grub.d/10_windows.in; installdir = grubconf; + condition = COND_host_windows; }; script = { name = '10_hurd'; common = util/grub.d/10_hurd.in; installdir = grubconf; + condition = COND_host_hurd; +}; + +script = { + name = '10_kfreebsd.in'; + common = util/grub.d/10_kfreebsd.in; + installdir = grubconf; + condition = COND_host_kfreebsd; +}; + +script = { + name = '10_netbsd.in'; + 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 = { diff --git a/configure.ac b/configure.ac index c05b506c7..19ea08c9d 100644 --- a/configure.ac +++ b/configure.ac @@ -873,6 +873,11 @@ AM_CONDITIONAL([COND_mips_yeeloong], [test x$target_cpu = xmips -a x$platform = AM_CONDITIONAL([COND_mips_qemu_mips], [test x$target_cpu = xmips -a x$platform = xqemu_mips]) AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) +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_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x]) AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes]) From f51c98c48531f4bb9b936a7c7c2c339a42e252d3 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sat, 21 Aug 2010 21:23:42 +0530 Subject: [PATCH 200/271] remove wrong extension --- Makefile.util.def | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.util.def b/Makefile.util.def index 2ad7f6a57..357722797 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -281,14 +281,14 @@ script = { }; script = { - name = '10_kfreebsd.in'; + name = '10_kfreebsd'; common = util/grub.d/10_kfreebsd.in; installdir = grubconf; condition = COND_host_kfreebsd; }; script = { - name = '10_netbsd.in'; + name = '10_netbsd'; common = util/grub.d/10_netbsd.in; installdir = grubconf; condition = COND_host_netbsd; From 30c4f234ccf699a7b6668ee5a0efdfce49ba7333 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 23 Aug 2010 10:31:08 +0530 Subject: [PATCH 201/271] fix emu build --- grub-core/Makefile.core.def | 3 +++ 1 file changed, 3 insertions(+) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index fd1fb3d24..0733ef1c2 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -316,6 +316,7 @@ module = { enable = emu; enable = i386_pc; enable = mips_yeeloong; + emu_condition = COND_GRUB_EMU_USB; }; module = { @@ -324,6 +325,7 @@ module = { enable = emu; enable = i386_pc; enable = mips_yeeloong; + emu_condition = COND_GRUB_EMU_USB; }; module = { @@ -332,6 +334,7 @@ module = { enable = emu; enable = i386_pc; enable = mips_yeeloong; + emu_condition = COND_GRUB_EMU_USB; }; module = { From f7711f5ef1b493530e9127a22909d626b3aeb26d Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 23 Aug 2010 13:23:56 +0530 Subject: [PATCH 202/271] final touches --- Makefile.am | 4 +- Makefile.util.def | 26 +- conf/Makefile.common | 3 + conf/any-emu.rmk | 152 ------- conf/common.rmk | 837 ------------------------------------ conf/i386-coreboot.rmk | 78 ---- conf/i386-efi.rmk | 5 - conf/i386-ieee1275.rmk | 82 ---- conf/i386-multiboot.rmk | 74 ---- conf/i386-pc.rmk | 325 -------------- conf/i386-qemu.rmk | 86 ---- conf/i386.rmk | 94 ---- conf/mips-yeeloong.rmk | 143 ------ conf/mips.rmk | 27 -- conf/powerpc-ieee1275.rmk | 68 --- conf/sparc64-ieee1275.rmk | 104 ----- conf/tests.rmk | 110 ----- conf/x86-efi.rmk | 112 ----- conf/x86_64-efi.rmk | 5 - configure.ac | 11 +- grub-core/Makefile.core.def | 19 +- 21 files changed, 40 insertions(+), 2325 deletions(-) delete mode 100644 conf/any-emu.rmk delete mode 100644 conf/common.rmk delete mode 100644 conf/i386-coreboot.rmk delete mode 100644 conf/i386-efi.rmk delete mode 100644 conf/i386-ieee1275.rmk delete mode 100644 conf/i386-multiboot.rmk delete mode 100644 conf/i386-pc.rmk delete mode 100644 conf/i386-qemu.rmk delete mode 100644 conf/i386.rmk delete mode 100644 conf/mips-yeeloong.rmk delete mode 100644 conf/mips.rmk delete mode 100644 conf/powerpc-ieee1275.rmk delete mode 100644 conf/sparc64-ieee1275.rmk delete mode 100644 conf/tests.rmk delete mode 100644 conf/x86-efi.rmk delete mode 100644 conf/x86_64-efi.rmk diff --git a/Makefile.am b/Makefile.am index 4b7aa5e3a..f49a92ead 100644 --- a/Makefile.am +++ b/Makefile.am @@ -46,7 +46,7 @@ CLEANFILES += libgrub_a_init.c if COND_GRUB_MKFONT if COND_HAVE_FONT_SOURCE -pkgdata_DATA = unicode.pf2 ascii.pf2 ascii.h widthspec.h +grubdata_DATA = unicode.pf2 ascii.pf2 ascii.h widthspec.h endif endif @@ -81,3 +81,5 @@ CLEANFILES += widthspec.h # Install config.h into platformdir platform_HEADERS = config.h +pkglib_DATA += grub-mkconfig_lib +pkglib_DATA += update-grub_lib \ No newline at end of file diff --git a/Makefile.util.def b/Makefile.util.def index 357722797..89328d619 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -270,35 +270,42 @@ script = { name = '10_windows'; common = util/grub.d/10_windows.in; installdir = grubconf; - condition = COND_host_windows; + condition = COND_HOST_WINDOWS; }; script = { name = '10_hurd'; common = util/grub.d/10_hurd.in; installdir = grubconf; - condition = COND_host_hurd; + condition = COND_HOST_HURD; }; script = { name = '10_kfreebsd'; common = util/grub.d/10_kfreebsd.in; installdir = grubconf; - condition = COND_host_kfreebsd; + condition = COND_HOST_KFREEBSD; }; script = { name = '10_netbsd'; common = util/grub.d/10_netbsd.in; installdir = grubconf; - condition = COND_host_netbsd; + condition = COND_HOST_NETBSD; }; script = { name = '10_linux'; common = util/grub.d/10_linux.in; installdir = grubconf; - condition = COND_host_linux; + condition = COND_HOST_LINUX; +}; + +script = { + name = '20_linux_xen'; + common = util/grub.d/20_linux_xen.in; + installdir = grubconf; + condition = COND_HOST_LINUX; }; script = { @@ -322,9 +329,10 @@ script = { script = { mansection = 1; name = grub-mkrescue; - i386_pc_qemu_coreboot = util/grub-mkrescue.in; + i386_noieee1275 = util/grub-mkrescue.in; powerpc_ieee1275 = util/powerpc/ieee1275/grub-mkrescue.in; enable = i386_pc; + enable = x86_efi; enable = i386_qemu; enable = i386_coreboot; enable = powerpc_ieee1275; @@ -371,23 +379,25 @@ script = { script = { name = grub-mkconfig_lib; common = util/grub-mkconfig_lib.in; - installdir = pkglib; + installdir = noinst; }; script = { name = update-grub_lib; common = util/update-grub_lib.in; - installdir = pkglib; + installdir = noinst; }; script = { name = grub-shell; common = tests/util/grub-shell.in; + installdir = noinst; }; script = { name = grub-shell-tester; common = tests/util/grub-shell-tester.in; + installdir = noinst; }; script = { diff --git a/conf/Makefile.common b/conf/Makefile.common index 9e8d64361..eb70f7f77 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -69,6 +69,7 @@ CCASFLAGS_LIBRARY = $(CCASFLAGS_PROGRAM) # Other variables grubconfdir = $(sysconfdir)/grub.d +grubdatadir = $(datadir)/`echo @PACKAGE_TARNAME@ | sed '$(transform)'` platformdir = $(pkglibrootdir)/$(target_cpu)-$(platform) CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers @@ -100,6 +101,7 @@ KERNEL_HEADER_FILES = man_MANS = noinst_DATA = +pkglib_DATA = bin_SCRIPTS = sbin_SCRIPTS = bin_PROGRAMS = @@ -108,6 +110,7 @@ sbin_PROGRAMS = check_SCRIPTS = grubconf_DATA = check_PROGRAMS = +noinst_SCRIPTS = pkglib_SCRIPTS = noinst_PROGRAMS = grubconf_SCRIPTS = diff --git a/conf/any-emu.rmk b/conf/any-emu.rmk deleted file mode 100644 index 1b98a0e40..000000000 --- a/conf/any-emu.rmk +++ /dev/null @@ -1,152 +0,0 @@ -# -*- makefile -*- - -ifeq ($(target_cpu), sparc64) -COMMON_CFLAGS += -mno-app-regs -COMMON_LDFLAGS += -mno-relax -endif - -kernel_img_RELOCATABLE = yes -pkglib_PROGRAMS = kernel.img -kernel_img_SOURCES = kern/device.c kern/disk.c kern/dl.c kern/env.c \ - kern/err.c kern/list.c kern/command.c \ - kern/corecmd.c kern/file.c kern/fs.c kern/main.c kern/misc.c \ - kern/parser.c kern/partition.c kern/term.c \ - kern/rescue_reader.c kern/rescue_parser.c \ - \ - kern/emu/main.c kern/emu/mm.c kern/emu/misc.c \ - kern/emu/getroot.c kern/emu/time.c kern/emu/hostdisk.c \ - kern/emu/hostfs.c kern/emu/console.c \ - \ - gnulib/progname.c disk/host.c -kernel_img_HEADERS += datetime.h emu/misc.h -kernel_img_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Wno-char-subscripts -Wno-unused -Wno-deprecated-declarations -Wno-undef -I$(srcdir)/gnulib -kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -TARGET_NO_STRIP = yes - -# For halt.mod. -pkglib_MODULES += halt.mod -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -ifeq ($(target_cpu), i386) -pkglib_MODULES += cpuid.mod -cpuid_mod_SOURCES = commands/i386/cpuid.c -cpuid_mod_CFLAGS = $(COMMON_CFLAGS) -cpuid_mod_LDFLAGS = $(COMMON_LDFLAGS) -endif - -grub_emu_LDFLAGS = $(LIBCURSES) -ifeq ($(target_cpu), sparc64) -grub_emu_LDFLAGS += -m64 -melf64_sparc -mno-relax -endif - -ifeq ($(enable_grub_emu_usb), yes) -kernel_img_HEADERS += libusb.h - -pkglib_MODULES += libusb.mod -libusb_mod_SOURCES = bus/usb/emu/usb.c -libusb_mod_CFLAGS = -libusb_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usb.mod -pkglib_MODULES += usb.mod -usb_mod_SOURCES = bus/usb/usb.c -usb_mod_CFLAGS = $(COMMON_CFLAGS) -usb_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usbtest.mod -pkglib_MODULES += usbtest.mod -usbtest_mod_SOURCES = commands/usbtest.c -usbtest_mod_CFLAGS = $(COMMON_CFLAGS) -usbtest_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usbms.mod -pkglib_MODULES += usbms.mod -usbms_mod_SOURCES = disk/usbms.c -usbms_mod_CFLAGS = $(COMMON_CFLAGS) -usbms_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_common.mod -usbserial_common_mod_SOURCES = bus/usb/serial/common.c -usbserial_common_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_common_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_pl2303.mod -usbserial_pl2303_mod_SOURCES = bus/usb/serial/pl2303.c -usbserial_pl2303_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_pl2303_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_ftdi.mod -usbserial_ftdi_mod_SOURCES = bus/usb/serial/ftdi.c -usbserial_ftdi_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_ftdi_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += serial.mod -serial_mod_SOURCES = term/serial.c -serial_mod_CFLAGS = $(COMMON_CFLAGS) -serial_mod_LDFLAGS = $(COMMON_LDFLAGS) - -grub_emu_LDFLAGS += $(LIBUSB) -endif - -ifeq ($(enable_grub_emu_sdl), yes) -pkglib_MODULES += sdl.mod -sdl_mod_SOURCES = video/emu/sdl.c -sdl_mod_CFLAGS = -sdl_mod_LDFLAGS = $(COMMON_LDFLAGS) -grub_emu_LDFLAGS += $(LIBSDL) -kernel_img_HEADERS += sdl.h -endif - -ifeq ($(enable_grub_emu_pci), yes) -pkglib_MODULES += pci.mod -pci_mod_SOURCES = bus/emu/pci.c commands/lspci.c -pci_mod_LDFLAGS = $(COMMON_LDFLAGS) -grub_emu_LDFLAGS += $(LIBPCIACCESS) -kernel_img_HEADERS += libpciaccess.h -endif - -include $(srcdir)/conf/common.mk - -grub_emu_init.h: genemuinitheader.sh $(pkglib_MODULES) - rm -f $@; echo $(pkglib_MODULES) | sh $(srcdir)/genemuinitheader.sh $(NM) > $@ -DISTCLEANFILES += grub_emu_init.h - -grub_emu_init.c: genemuinit.sh $(pkglib_MODULES) grub_emu_init.h - rm -f $@; echo $(pkglib_MODULES) | sh $(srcdir)/genemuinit.sh $(NM) > $@ -DISTCLEANFILES += grub_emu_init.c - -grub_emu_init.o: grub_emu_init.c grub_emu_init.h - rm -f $@; $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"grub_init.c\" -c -o $@ $< -CLEANFILES += grub_emu_init.o - -kern_emu_lite.o: kern/emu/lite.c - $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"kern/emu/lite.c\" -c -o $@ $< -CLEANFILES += kern_emu_lite.o - -kern_emu_full.o: kern/emu/full.c - $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"kern/emu/full.c\" -c -o $@ $< -CLEANFILES += kern_emu_full.o - -kern_emu_cache.o: kern/emu/cache.S - $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(TARGET_ASFLAGS) -DGRUB_FILE=\"kern/emu/cache.S\" -c -o $@ $< -CLEANFILES += kern_emu_cache.o - -symlist.o: symlist.c - $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"symlist.c\" -c -o $@ $< -CLEANFILES += symlist.o - -CLEANFILES += grub-emu-lite -grub-emu-lite: kern_emu_lite.o kern_emu_cache.o symlist.o kernel.img - $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) -GRUB_EMU_LITE=grub-emu-lite - -CLEANFILES += grub-emu -grub-emu: $(PREMODFILES) kern_emu_full.o grub_emu_init.o kernel.img - $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) -GRUB_EMU=grub-emu diff --git a/conf/common.rmk b/conf/common.rmk deleted file mode 100644 index 908bd74e8..000000000 --- a/conf/common.rmk +++ /dev/null @@ -1,837 +0,0 @@ -# -*- makefile -*- - -# Used by various components. These rules need to precede them. -script/lexer.c_DEPENDENCIES = grub_script.tab.h grub_script.yy.h - -sbin_UTILITIES += grub-mkdevicemap -grub_mkdevicemap_SOURCES = gnulib/progname.c util/grub-mkdevicemap.c \ - util/deviceiter.c \ - util/misc.c kern/emu/misc.c \ - kern/env.c kern/err.c kern/list.c kern/misc.c kern/emu/mm.c - -ifeq ($(target_cpu)-$(platform), sparc64-ieee1275) -grub_mkdevicemap_SOURCES += util/ieee1275/ofpath.c util/ieee1275/devicemap.c -else -grub_mkdevicemap_SOURCES += util/devicemap.c -endif - -# For grub-mkimage. -bin_UTILITIES += grub-mkimage -grub_mkimage_SOURCES = gnulib/progname.c util/grub-mkimage.c util/misc.c \ - util/resolve.c kern/emu/misc.c lib/LzmaEnc.c lib/LzFind.c -util/grub-mkimage.c_DEPENDENCIES = Makefile - -# For grub-probe. -sbin_UTILITIES += grub-probe -util/grub-probe.c_DEPENDENCIES = grub_probe_init.h -grub_probe_SOURCES = gnulib/progname.c util/grub-probe.c \ - kern/emu/hostdisk.c util/misc.c kern/emu/misc.c kern/emu/getroot.c kern/emu/mm.c \ - kern/device.c kern/disk.c kern/err.c kern/misc.c \ - kern/partition.c kern/file.c kern/list.c \ - \ - fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ - fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ - fs/nilfs2.c fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c \ - fs/sfs.c fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c \ - fs/afs_be.c fs/befs.c fs/befs_be.c fs/tar.c \ - \ - partmap/msdos.c partmap/bsdlabel.c partmap/apple.c \ - partmap/sun.c partmap/sunpc.c partmap/gpt.c \ - kern/fs.c kern/env.c fs/fshelp.c \ - disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ - disk/mdraid_linux.c disk/lvm.c grub_probe_init.c - -ifeq ($(enable_grub_fstest), yes) -bin_UTILITIES += grub-fstest -endif - -# For grub-fstest. -util/grub-fstest.c_DEPENDENCIES = grub_fstest_init.h -grub_fstest_SOURCES = gnulib/progname.c util/grub-fstest.c kern/emu/hostfs.c \ - util/misc.c kern/emu/misc.c kern/emu/mm.c \ - kern/file.c kern/device.c kern/disk.c kern/err.c kern/misc.c \ - disk/host.c disk/loopback.c kern/list.c kern/command.c \ - lib/arg.c commands/extcmd.c normal/datetime.c normal/misc.c \ - lib/hexdump.c lib/crc.c commands/blocklist.c commands/ls.c \ - \ - fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ - fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ - fs/nilfs2.c fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ - fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c fs/befs.c \ - fs/befs_be.c fs/tar.c \ - \ - kern/partition.c partmap/msdos.c partmap/bsdlabel.c \ - partmap/apple.c partmap/sun.c partmap/sunpc.c partmap/gpt.c \ - kern/fs.c kern/env.c fs/fshelp.c disk/raid.c \ - disk/raid5_recover.c disk/raid6_recover.c \ - disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \ - grub_fstest_init.c - -# For grub-mkfont. -ifeq ($(enable_grub_mkfont), yes) -bin_UTILITIES += grub-mkfont -grub_mkfont_SOURCES = gnulib/progname.c util/grub-mkfont.c util/misc.c \ - unidata.c kern/emu/misc.c -grub_mkfont_CFLAGS = $(freetype_cflags) -grub_mkfont_LDFLAGS = $(freetype_libs) -endif - -# For grub-mkrelpath. -bin_UTILITIES += grub-mkrelpath -grub_mkrelpath_SOURCES = gnulib/progname.c util/grub-mkrelpath.c util/misc.c kern/emu/misc.c - -bin_UTILITIES += grub-bin2h -grub_bin2h_SOURCES = gnulib/progname.c util/bin2h.c - -# For the lexer. -grub_script.yy.c grub_script.yy.h: script/yylex.l - $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(srcdir)/script/yylex.l -DISTCLEANFILES += grub_script.yy.c grub_script.yy.h - -# For grub-script-check. -bin_UTILITIES += grub-script-check -grub_script_check_SOURCES = gnulib/progname.c gnulib/getdelim.c gnulib/getline.c \ - util/grub-script-check.c util/misc.c kern/emu/misc.c kern/emu/mm.c \ - script/main.c script/script.c script/function.c script/lexer.c \ - kern/err.c kern/list.c \ - kern/command.c kern/misc.c kern/env.c grub_script.tab.c \ - grub_script.yy.c -grub_script_check_CFLAGS = $(GNULIB_UTIL_CFLAGS) -grub_script_check_DEPENDENCIES = grub_script.tab.h -MOSTLYCLEANFILES += symlist.c kernel_syms.lst -DEFSYMFILES += kernel_syms.lst - -kernel_img_HEADERS += boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ - env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ - partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \ - list.h command.h i18n.h env_private.h libgcc.h - -ifneq ($(platform), emu) -kernel_img_HEADERS += machine/memory.h machine/loader.h -endif - -symlist.c: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h gensymlist.sh - /bin/sh gensymlist.sh $(filter %.h,$^) > $@ || (rm -f $@; exit 1) - -kernel_syms.lst: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h genkernsyms.sh - /bin/sh genkernsyms.sh $(filter %.h,$^) > $@ || (rm -f $@; exit 1) - -# For the parser. -grub_script.tab.c grub_script.tab.h: script/parser.y - $(YACC) -d -p grub_script_yy -b grub_script $(srcdir)/script/parser.y -DISTCLEANFILES += grub_script.tab.c grub_script.tab.h - -# For grub-probe. -grub_probe_init.lst: geninit.sh $(filter-out grub_probe_init.c,$(grub_probe_SOURCES)) - rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@ -DISTCLEANFILES += grub_probe_init.lst - -grub_probe_init.h: grub_probe_init.lst $(filter-out grub_probe_init.c,$(grub_probe_SOURCES)) geninitheader.sh - rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@ -DISTCLEANFILES += grub_probe_init.h - -grub_probe_init.c: grub_probe_init.lst $(filter-out grub_probe_init.c,$(grub_probe_SOURCES)) geninit.sh grub_probe_init.h - rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@ -DISTCLEANFILES += grub_probe_init.c - -# For grub-setup. -grub_setup_init.lst: geninit.sh $(filter-out grub_setup_init.c,$(grub_setup_SOURCES)) - rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@ -DISTCLEANFILES += grub_setup_init.lst - -grub_setup_init.h: grub_setup_init.lst $(filter-out grub_setup_init.c,$(grub_setup_SOURCES)) geninitheader.sh - rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@ -DISTCLEANFILES += grub_setup_init.h - -grub_setup_init.c: grub_setup_init.lst $(filter-out grub_setup_init.c,$(grub_setup_SOURCES)) geninit.sh grub_setup_init.h - rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@ -DISTCLEANFILES += grub_setup_init.c - -# For grub-fstest. -grub_fstest_init.lst: geninit.sh $(filter-out grub_fstest_init.c,$(grub_fstest_SOURCES)) - rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@ -DISTCLEANFILES += grub_fstest_init.lst - -grub_fstest_init.h: grub_fstest_init.lst $(filter-out grub_fstest_init.c,$(grub_fstest_SOURCES)) geninitheader.sh - rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@ -DISTCLEANFILES += grub_fstest_init.h - -grub_fstest_init.c: grub_fstest_init.lst $(filter-out grub_fstest_init.c,$(grub_fstest_SOURCES)) geninit.sh grub_fstest_init.h - rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@ -DISTCLEANFILES += grub_fstest_init.c - -# for grub-editenv -bin_UTILITIES += grub-editenv -grub_editenv_SOURCES = gnulib/progname.c util/grub-editenv.c lib/envblk.c util/misc.c kern/emu/misc.c kern/emu/mm.c kern/misc.c kern/err.c -CLEANFILES += grub-editenv - -# Needed for genmk.rb to work -ifeq (0,1) -bin_UTILITIES += grub-macho2img grub-pe2elf -endif - -grub_pe2elf_SOURCES = gnulib/progname.c util/grub-pe2elf.c util/misc.c kern/emu/misc.c -CLEANFILES += grub-pe2elf - -grub_macho2img_SOURCES = util/grub-macho2img.c -CLEANFILES += grub-macho2img - -# For grub-mkconfig -grub-mkconfig: util/grub-mkconfig.in config.status - ./config.status --file=$@:$< - chmod +x $@ -sbin_SCRIPTS += grub-mkconfig -CLEANFILES += grub-mkconfig - -grub-mkconfig_lib: util/grub-mkconfig_lib.in config.status - ./config.status --file=$@:$< - chmod +x $@ -lib_SCRIPTS += grub-mkconfig_lib -CLEANFILES += grub-mkconfig_lib - -update-grub_lib: util/update-grub_lib.in config.status - ./config.status --file=$@:$< - chmod +x $@ -lib_SCRIPTS += update-grub_lib -CLEANFILES += update-grub_lib - -grub-gettext_lib: util/grub-gettext_lib.in config.status - ./config.status --file=$@:$< - chmod +x $@ -lib_DATA += grub-gettext_lib -CLEANFILES += grub-gettext_lib - -%: util/grub.d/%.in config.status - ./config.status --file=$@:$< - chmod +x $@ -grub-mkconfig_SCRIPTS = 00_header 30_os-prober 40_custom 41_custom -ifneq (, $(host_kernel)) -grub-mkconfig_SCRIPTS += 10_$(host_kernel) -endif -ifeq (linux, $(host_kernel)) -grub-mkconfig_SCRIPTS += 20_linux_xen -endif - -CLEANFILES += $(grub-mkconfig_SCRIPTS) - -grub-mkconfig_DATA += util/grub.d/README - -# For grub-set-default. -grub-set-default: util/grub-set-default.in config.status - ./config.status --file=$@:$< - chmod +x $@ -sbin_SCRIPTS += grub-set-default -CLEANFILES += grub-set-default - -# For grub-reboot. -grub-reboot: util/grub-reboot.in config.status - ./config.status --file=$@:$< - chmod +x $@ -sbin_SCRIPTS += grub-reboot -CLEANFILES += grub-reboot - -# Filing systems. -pkglib_MODULES += fshelp.mod fat.mod ufs1.mod ufs2.mod ext2.mod ntfs.mod \ - ntfscomp.mod minix.mod hfs.mod jfs.mod iso9660.mod xfs.mod \ - affs.mod sfs.mod hfsplus.mod reiserfs.mod cpio.mod tar.mod \ - udf.mod afs.mod afs_be.mod befs.mod befs_be.mod - -# For fshelp.mod. -fshelp_mod_SOURCES = fs/fshelp.c -fshelp_mod_CFLAGS = $(COMMON_CFLAGS) -fshelp_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For fat.mod. -fat_mod_SOURCES = fs/fat.c -fat_mod_CFLAGS = $(COMMON_CFLAGS) -fat_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ufs1.mod. -ufs1_mod_SOURCES = fs/ufs.c -ufs1_mod_CFLAGS = $(COMMON_CFLAGS) -ufs1_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ufs2.mod. -ufs2_mod_SOURCES = fs/ufs2.c -ufs2_mod_CFLAGS = $(COMMON_CFLAGS) -ufs2_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ext2.mod. -ext2_mod_SOURCES = fs/ext2.c -ext2_mod_CFLAGS = $(COMMON_CFLAGS) -ext2_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ntfs.mod. -ntfs_mod_SOURCES = fs/ntfs.c -ntfs_mod_CFLAGS = $(COMMON_CFLAGS) -ntfs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ntfscomp.mod. -ntfscomp_mod_SOURCES = fs/ntfscomp.c -ntfscomp_mod_CFLAGS = $(COMMON_CFLAGS) -ntfscomp_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For minix.mod. -minix_mod_SOURCES = fs/minix.c -minix_mod_CFLAGS = $(COMMON_CFLAGS) -minix_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For nilfs2.mod. -pkglib_MODULES += nilfs2.mod -nilfs2_mod_SOURCES = fs/nilfs2.c -nilfs2_mod_CFLAGS = $(COMMON_CFLAGS) -nilfs2_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For hfs.mod. -hfs_mod_SOURCES = fs/hfs.c -hfs_mod_CFLAGS = $(COMMON_CFLAGS) -hfs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For jfs.mod. -jfs_mod_SOURCES = fs/jfs.c -jfs_mod_CFLAGS = $(COMMON_CFLAGS) -jfs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For iso9660.mod. -iso9660_mod_SOURCES = fs/iso9660.c -iso9660_mod_CFLAGS = $(COMMON_CFLAGS) -iso9660_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For xfs.mod. -xfs_mod_SOURCES = fs/xfs.c -xfs_mod_CFLAGS = $(COMMON_CFLAGS) -xfs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For affs.mod. -affs_mod_SOURCES = fs/affs.c -affs_mod_CFLAGS = $(COMMON_CFLAGS) -affs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For sfs.mod. -sfs_mod_SOURCES = fs/sfs.c -sfs_mod_CFLAGS = $(COMMON_CFLAGS) -sfs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For hfsplus.mod. -hfsplus_mod_SOURCES = fs/hfsplus.c -hfsplus_mod_CFLAGS = $(COMMON_CFLAGS) -hfsplus_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For reiserfs.mod. -reiserfs_mod_SOURCES = fs/reiserfs.c -reiserfs_mod_CFLAGS = $(COMMON_CFLAGS) -reiserfs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For cpio.mod. -cpio_mod_SOURCES = fs/cpio.c -cpio_mod_CFLAGS = $(COMMON_CFLAGS) -cpio_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For tar.mod. -tar_mod_SOURCES = fs/tar.c -tar_mod_CFLAGS = $(COMMON_CFLAGS) -tar_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For udf.mod. -udf_mod_SOURCES = fs/udf.c -udf_mod_CFLAGS = $(COMMON_CFLAGS) -udf_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For afs.mod. -afs_mod_SOURCES = fs/afs.c -afs_mod_CFLAGS = $(COMMON_CFLAGS) -afs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For afs_be.mod. -afs_be_mod_SOURCES = fs/afs_be.c -afs_be_mod_CFLAGS = $(COMMON_CFLAGS) -afs_be_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For befs.mod. -befs_mod_SOURCES = fs/befs.c -befs_mod_CFLAGS = $(COMMON_CFLAGS) -befs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For befs_be.mod. -befs_be_mod_SOURCES = fs/befs_be.c -befs_be_mod_CFLAGS = $(COMMON_CFLAGS) -befs_be_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# Partition maps. - -pkglib_MODULES += part_amiga.mod -part_amiga_mod_SOURCES = partmap/amiga.c -part_amiga_mod_CFLAGS = $(COMMON_CFLAGS) -part_amiga_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += part_apple.mod -part_apple_mod_SOURCES = partmap/apple.c -part_apple_mod_CFLAGS = $(COMMON_CFLAGS) -part_apple_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += part_msdos.mod -part_msdos_mod_SOURCES = partmap/msdos.c -part_msdos_mod_CFLAGS = $(COMMON_CFLAGS) -part_msdos_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += part_sun.mod -part_sun_mod_SOURCES = partmap/sun.c -part_sun_mod_CFLAGS = $(COMMON_CFLAGS) -part_sun_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += part_acorn.mod -part_acorn_mod_SOURCES = partmap/acorn.c -part_acorn_mod_CFLAGS = $(COMMON_CFLAGS) -part_acorn_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += part_gpt.mod -part_gpt_mod_SOURCES = partmap/gpt.c -part_gpt_mod_CFLAGS = $(COMMON_CFLAGS) -part_gpt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += part_bsd.mod -part_bsd_mod_SOURCES = partmap/bsdlabel.c -part_bsd_mod_CFLAGS = $(COMMON_CFLAGS) -part_bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += part_sunpc.mod -part_sunpc_mod_SOURCES = partmap/sunpc.c -part_sunpc_mod_CFLAGS = $(COMMON_CFLAGS) -part_sunpc_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# Special disk structures and generic drivers - -pkglib_MODULES += raid.mod raid5rec.mod raid6rec.mod mdraid.mod dm_nv.mod \ - lvm.mod scsi.mod - -# For raid.mod -raid_mod_SOURCES = disk/raid.c -raid_mod_CFLAGS = $(COMMON_CFLAGS) -raid_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For raid5rec.mod -raid5rec_mod_SOURCES = disk/raid5_recover.c -raid5rec_mod_CFLAGS = $(COMMON_CFLAGS) -raid5rec_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For raid6rec.mod -raid6rec_mod_SOURCES = disk/raid6_recover.c -raid6rec_mod_CFLAGS = $(COMMON_CFLAGS) -raid6rec_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For mdraid.mod -mdraid_mod_SOURCES = disk/mdraid_linux.c -mdraid_mod_CFLAGS = $(COMMON_CFLAGS) -mdraid_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For dm_nv.mod -dm_nv_mod_SOURCES = disk/dmraid_nvidia.c -dm_nv_mod_CFLAGS = $(COMMON_CFLAGS) -dm_nv_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For lvm.mod -lvm_mod_SOURCES = disk/lvm.c -lvm_mod_CFLAGS = $(COMMON_CFLAGS) -lvm_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For scsi.mod -scsi_mod_SOURCES = disk/scsi.c -scsi_mod_CFLAGS = $(COMMON_CFLAGS) -scsi_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# Commands. -pkglib_MODULES += minicmd.mod extcmd.mod hello.mod \ - ls.mod cmp.mod cat.mod help.mod search.mod loopback.mod \ - configfile.mod echo.mod \ - test.mod blocklist.mod hexdump.mod \ - read.mod sleep.mod loadenv.mod crc.mod parttool.mod \ - msdospart.mod memrw.mod normal.mod \ - gptsync.mod true.mod probe.mod password.mod \ - keystatus.mod - -# For password.mod. -password_mod_SOURCES = commands/password.c -password_mod_CFLAGS = $(COMMON_CFLAGS) -password_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For gptsync.mod. -gptsync_mod_SOURCES = commands/gptsync.c -gptsync_mod_CFLAGS = $(COMMON_CFLAGS) -gptsync_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For minicmd.mod. -minicmd_mod_SOURCES = commands/minicmd.c -minicmd_mod_CFLAGS = $(COMMON_CFLAGS) -minicmd_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For extcmd.mod. -extcmd_mod_SOURCES = commands/extcmd.c lib/arg.c -extcmd_mod_CFLAGS = $(COMMON_CFLAGS) -extcmd_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For hello.mod. -hello_mod_SOURCES = hello/hello.c -hello_mod_CFLAGS = $(COMMON_CFLAGS) -hello_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For gfxmenu.mod. -pkglib_MODULES += gfxmenu.mod -gfxmenu_mod_SOURCES = \ - gfxmenu/gfxmenu.c \ - gfxmenu/model.c \ - gfxmenu/view.c \ - gfxmenu/icon_manager.c \ - gfxmenu/theme_loader.c \ - gfxmenu/widget-box.c \ - gfxmenu/gui_canvas.c \ - gfxmenu/gui_circular_progress.c \ - gfxmenu/gui_box.c \ - gfxmenu/gui_label.c \ - gfxmenu/gui_list.c \ - gfxmenu/gui_image.c \ - gfxmenu/gui_progress_bar.c \ - gfxmenu/gui_util.c \ - gfxmenu/gui_string_util.c \ - gfxmenu/named_colors.c \ - gfxmenu/font.c -gfxmenu_mod_CFLAGS = $(COMMON_CFLAGS) -gfxmenu_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For parttool.mod. -parttool_mod_SOURCES = commands/parttool.c -parttool_mod_CFLAGS = $(COMMON_CFLAGS) -parttool_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For msdospart.mod. -msdospart_mod_SOURCES = parttool/msdospart.c -msdospart_mod_CFLAGS = $(COMMON_CFLAGS) -msdospart_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ls.mod. -ls_mod_SOURCES = commands/ls.c -ls_mod_CFLAGS = $(COMMON_CFLAGS) -ls_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For cmp.mod. -cmp_mod_SOURCES = commands/cmp.c -cmp_mod_CFLAGS = $(COMMON_CFLAGS) -cmp_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For cat.mod. -cat_mod_SOURCES = commands/cat.c -cat_mod_CFLAGS = $(COMMON_CFLAGS) -cat_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For echo.mod -echo_mod_SOURCES = commands/echo.c -echo_mod_CFLAGS = $(COMMON_CFLAGS) -echo_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For help.mod. -help_mod_SOURCES = commands/help.c -help_mod_CFLAGS = $(COMMON_CFLAGS) -help_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For search.mod. -search_mod_SOURCES = commands/search_wrap.c -search_mod_CFLAGS = $(COMMON_CFLAGS) -search_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += search_fs_file.mod search_fs_uuid.mod search_label.mod - -# For search.mod. -search_fs_file_mod_SOURCES = commands/search_file.c -search_fs_file_mod_CFLAGS = $(COMMON_CFLAGS) -search_fs_file_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For search.mod. -search_label_mod_SOURCES = commands/search_label.c -search_label_mod_CFLAGS = $(COMMON_CFLAGS) -search_label_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For search.mod. -search_fs_uuid_mod_SOURCES = commands/search_uuid.c -search_fs_uuid_mod_CFLAGS = $(COMMON_CFLAGS) -search_fs_uuid_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For test.mod. -test_mod_SOURCES = commands/test.c -test_mod_CFLAGS = $(COMMON_CFLAGS) -test_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For loopback.mod -loopback_mod_SOURCES = disk/loopback.c -loopback_mod_CFLAGS = $(COMMON_CFLAGS) -loopback_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For configfile.mod -configfile_mod_SOURCES = commands/configfile.c -configfile_mod_CFLAGS = $(COMMON_CFLAGS) -configfile_mod_LDFLAGS = $(COMMON_LDFLAGS) - -ifneq ($(platform), ieee1275) -# For terminfo.mod. -pkglib_MODULES += terminfo.mod -terminfo_mod_SOURCES = term/terminfo.c term/tparm.c -terminfo_mod_CFLAGS = $(COMMON_CFLAGS) -terminfo_mod_LDFLAGS = $(COMMON_LDFLAGS) -endif - -# For blocklist.mod. -blocklist_mod_SOURCES = commands/blocklist.c -blocklist_mod_CFLAGS = $(COMMON_CFLAGS) -blocklist_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For hexdump.mod. -hexdump_mod_SOURCES = commands/hexdump.c lib/hexdump.c -hexdump_mod_CFLAGS = $(COMMON_CFLAGS) -hexdump_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For read.mod. -read_mod_SOURCES = commands/read.c -read_mod_CFLAGS = $(COMMON_CFLAGS) -read_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For sleep.mod. -sleep_mod_SOURCES = commands/sleep.c -sleep_mod_CFLAGS = $(COMMON_CFLAGS) -sleep_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For loadenv.mod. -loadenv_mod_SOURCES = commands/loadenv.c lib/envblk.c -loadenv_mod_CFLAGS = $(COMMON_CFLAGS) -loadenv_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For crc.mod. -crc_mod_SOURCES = commands/crc.c lib/crc.c -crc_mod_CFLAGS = $(COMMON_CFLAGS) -crc_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For memrw.mod. -memrw_mod_SOURCES = commands/memrw.c -memrw_mod_CFLAGS = $(COMMON_CFLAGS) -memrw_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For true.mod -true_mod_SOURCES = commands/true.c -true_mod_CFLAGS = $(COMMON_CFLAGS) -true_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For probe.mod. -probe_mod_SOURCES = commands/probe.c -probe_mod_CFLAGS = $(COMMON_CFLAGS) -probe_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For keystatus.mod. -keystatus_mod_SOURCES = commands/keystatus.c -keystatus_mod_CFLAGS = $(COMMON_CFLAGS) -keystatus_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For normal.mod. -ifneq (, $(FONT_SOURCE)) -normal/charset.c_DEPENDENCIES = widthspec.h -endif -normal_mod_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c \ - normal/auth.c normal/autofs.c \ - normal/color.c normal/completion.c normal/datetime.c normal/menu.c \ - normal/menu_entry.c normal/menu_text.c normal/charset.c \ - normal/misc.c normal/crypto.c normal/term.c normal/context.c \ - script/main.c script/script.c script/execute.c script/argv.c unidata.c \ - script/function.c script/lexer.c grub_script.tab.c grub_script.yy.c -normal_mod_CFLAGS = $(COMMON_CFLAGS) $(POSIX_CFLAGS) -Wno-error -normal_mod_LDFLAGS = $(COMMON_LDFLAGS) - -ifneq (, $(FONT_SOURCE)) -font/font.c_DEPENDENCIES = ascii.h -endif - -# Common Video Subsystem specific modules. -# On Yeeloong it's part of kernel -ifneq ($(platform), yeeloong) - -# For video.mod. -pkglib_MODULES += video.mod -video_mod_SOURCES = video/video.c -video_mod_CFLAGS = $(COMMON_CFLAGS) -video_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += video_fb.mod -video_fb_mod_SOURCES = video/fb/video_fb.c video/fb/fbblit.c \ - video/fb/fbfill.c video/fb/fbutil.c -video_fb_mod_CFLAGS = $(COMMON_CFLAGS) -video_fb_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bitmap.mod -pkglib_MODULES += bitmap.mod -bitmap_mod_SOURCES = video/bitmap.c -bitmap_mod_CFLAGS = $(COMMON_CFLAGS) -bitmap_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bitmap_scale.mod -pkglib_MODULES += bitmap_scale.mod -bitmap_scale_mod_SOURCES = video/bitmap_scale.c -bitmap_scale_mod_CFLAGS = $(COMMON_CFLAGS) -bitmap_scale_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += font.mod -font_mod_SOURCES = font/font_cmd.c font/font.c -font_mod_CFLAGS = $(COMMON_CFLAGS) -font_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For gfxterm.mod. -pkglib_MODULES += gfxterm.mod -gfxterm_mod_SOURCES = term/gfxterm.c -gfxterm_mod_CFLAGS = $(COMMON_CFLAGS) -gfxterm_mod_LDFLAGS = $(COMMON_LDFLAGS) - -endif - -# For videotest.mod. -pkglib_MODULES += videotest.mod -videotest_mod_SOURCES = commands/videotest.c -videotest_mod_CFLAGS = $(COMMON_CFLAGS) -videotest_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For tga.mod -pkglib_MODULES += tga.mod -tga_mod_SOURCES = video/readers/tga.c -tga_mod_CFLAGS = $(COMMON_CFLAGS) -tga_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For jpeg.mod. -pkglib_MODULES += jpeg.mod -jpeg_mod_SOURCES = video/readers/jpeg.c -jpeg_mod_CFLAGS = $(COMMON_CFLAGS) -jpeg_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For png.mod. -pkglib_MODULES += png.mod -png_mod_SOURCES = video/readers/png.c -png_mod_CFLAGS = $(COMMON_CFLAGS) -png_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# Misc. -pkglib_MODULES += gzio.mod elf.mod - -# For elf.mod. -elf_mod_SOURCES = kern/elf.c -elf_mod_CFLAGS = $(COMMON_CFLAGS) -elf_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For gzio.mod. -gzio_mod_SOURCES = io/gzio.c -gzio_mod_CFLAGS = $(COMMON_CFLAGS) -gzio_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# On Yeeloong it's part of kernel -ifneq ($(platform), yeeloong) -# For bufio.mod. -pkglib_MODULES += bufio.mod -bufio_mod_SOURCES = io/bufio.c -bufio_mod_CFLAGS = $(COMMON_CFLAGS) -bufio_mod_LDFLAGS = $(COMMON_LDFLAGS) -endif - -# For gettext.mod. -pkglib_MODULES += gettext.mod -gettext_mod_SOURCES = gettext/gettext.c -gettext_mod_CFLAGS = $(COMMON_CFLAGS) -gettext_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# Misc. -pkglib_MODULES += xnu_uuid.mod - -# For elf.mod. -xnu_uuid_mod_SOURCES = commands/xnu_uuid.c -xnu_uuid_mod_CFLAGS = $(COMMON_CFLAGS) -xnu_uuid_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += trig.mod -trig_mod_SOURCES = trigtables.c -trig_mod_CFLAGS = $(COMMON_CFLAGS) -trig_mod_LDFLAGS = $(COMMON_LDFLAGS) - -trigtables.c: gentrigtables - ./gentrigtables > $@ -DISTCLEANFILES += trigtables.c -gentrigtables: gentrigtables.c - $(CC) -o $@ $^ $(CPPFLAGS) -lm -DISTCLEANFILES += gentrigtables - -pkglib_MODULES += setjmp.mod -setjmp_mod_SOURCES = lib/$(target_cpu)/setjmp.S -setjmp_mod_ASFLAGS = $(COMMON_ASFLAGS) -setjmp_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += regexp.mod -regexp_mod_SOURCES = gnulib/regex.c commands/regexp.c -regexp_mod_CFLAGS = $(COMMON_CFLAGS) $(GNULIB_CFLAGS) -regexp_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += terminal.mod -terminal_mod_SOURCES = commands/terminal.c -terminal_mod_CFLAGS = $(COMMON_CFLAGS) -terminal_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += crypto.mod -crypto_mod_SOURCES = lib/crypto.c -crypto_mod_CFLAGS = $(COMMON_CFLAGS) -crypto_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += hashsum.mod -hashsum_mod_SOURCES = commands/hashsum.c -hashsum_mod_CFLAGS = $(COMMON_CFLAGS) -hashsum_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += pbkdf2.mod -pbkdf2_mod_SOURCES = lib/pbkdf2.c -pbkdf2_mod_CFLAGS = $(COMMON_CFLAGS) -pbkdf2_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For password_pbkdf2.mod. -pkglib_MODULES += password_pbkdf2.mod -password_pbkdf2_mod_SOURCES = commands/password_pbkdf2.c -password_pbkdf2_mod_CFLAGS = $(COMMON_CFLAGS) -password_pbkdf2_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For memdisk.mod. -pkglib_MODULES += memdisk.mod -memdisk_mod_SOURCES = disk/memdisk.c -memdisk_mod_CFLAGS = $(COMMON_CFLAGS) -memdisk_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For reboot.mod. -pkglib_MODULES += reboot.mod -reboot_mod_SOURCES = commands/reboot.c -reboot_mod_CFLAGS = $(COMMON_CFLAGS) -reboot_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For date.mod -pkglib_MODULES += date.mod -date_mod_SOURCES = commands/date.c -date_mod_CFLAGS = $(COMMON_CFLAGS) -date_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For datehook.mod -pkglib_MODULES += datehook.mod -datehook_mod_SOURCES = hook/datehook.c -datehook_mod_CFLAGS = $(COMMON_CFLAGS) -datehook_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For lsmmap.mod -pkglib_MODULES += lsmmap.mod -lsmmap_mod_SOURCES = commands/lsmmap.c -lsmmap_mod_CFLAGS = $(COMMON_CFLAGS) -lsmmap_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For boot.mod. -pkglib_MODULES += boot.mod -boot_mod_SOURCES = commands/boot.c lib/i386/pc/biosnum.c -boot_mod_CFLAGS = $(COMMON_CFLAGS) -boot_mod_LDFLAGS = $(COMMON_LDFLAGS) - -bin_UTILITIES += grub-mkpasswd-pbkdf2 -grub_mkpasswd_pbkdf2_SOURCES = gnulib/progname.c gnulib/getdelim.c gnulib/getline.c util/grub-mkpasswd-pbkdf2.c lib/crypto.c lib/libgcrypt-grub/cipher/sha512.c lib/pbkdf2.c util/misc.c kern/emu/misc.c kern/emu/mm.c kern/err.c -grub_mkpasswd_pbkdf2_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(srcdir)/lib/libgcrypt_wrap -DGRUB_MKPASSWD=1 - -include $(srcdir)/conf/gcry.mk diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk deleted file mode 100644 index 259f4e162..000000000 --- a/conf/i386-coreboot.rmk +++ /dev/null @@ -1,78 +0,0 @@ -# -*- makefile -*- - -COMMON_CFLAGS = -mrtd -mregparm=3 - -# Images. - -pkglib_PROGRAMS += kernel.img -kernel_img_SOURCES = kern/i386/coreboot/startup.S \ - kern/i386/misc.S \ - kern/i386/coreboot/init.c \ - kern/i386/coreboot/mmap.c \ - kern/i386/halt.c \ - kern/main.c kern/device.c \ - kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/time.c kern/list.c kern/command.c kern/corecmd.c \ - kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \ - kern/i386/tsc.c kern/i386/pit.c \ - kern/generic/rtc_get_time_ms.c \ - kern/generic/millisleep.c \ - kern/env.c \ - term/i386/pc/vga_text.c term/i386/vga_common.c \ - symlist.c -kernel_img_CFLAGS = $(COMMON_CFLAGS) -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,0x8200,-Bstatic - -sbin_SCRIPTS += grub-install -grub_install_SOURCES = util/grub-install.in - -bin_SCRIPTS += grub-mkrescue -grub_mkrescue_SOURCES = util/grub-mkrescue.in - -# Modules. -pkglib_MODULES = linux.mod aout.mod halt.mod datetime.mod mmap.mod - -# For mmap.mod. -mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c -mmap_mod_CFLAGS = $(COMMON_CFLAGS) -mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) -mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For halt.mod. -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For aout.mod. -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bsd.mod -pkglib_MODULES += bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S -bsd_mod_CFLAGS = $(COMMON_CFLAGS) -bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) -bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For datetime.mod -datetime_mod_SOURCES = lib/cmos_datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For cmostest.mod -pkglib_MODULES += cmostest.mod -cmostest_mod_SOURCES = commands/i386/cmostest.c -cmostest_mod_CFLAGS = $(COMMON_CFLAGS) -cmostest_mod_LDFLAGS = $(COMMON_LDFLAGS) - -include $(srcdir)/conf/i386.mk -include $(srcdir)/conf/common.mk diff --git a/conf/i386-efi.rmk b/conf/i386-efi.rmk deleted file mode 100644 index e826cb333..000000000 --- a/conf/i386-efi.rmk +++ /dev/null @@ -1,5 +0,0 @@ -# -*- makefile -*- - -COMMON_LDFLAGS = -melf_i386 - -include $(srcdir)/conf/x86-efi.mk diff --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk deleted file mode 100644 index 29b3ade3c..000000000 --- a/conf/i386-ieee1275.rmk +++ /dev/null @@ -1,82 +0,0 @@ -# -*- makefile -*- - -COMMON_CFLAGS = -mrtd -mregparm=3 - -# Images. -pkglib_PROGRAMS = kernel.img - -# For kernel.img. -kernel_img_SOURCES = kern/i386/ieee1275/startup.S \ - kern/i386/misc.S \ - kern/i386/ieee1275/init.c \ - kern/ieee1275/init.c \ - kern/ieee1275/mmap.c \ - kern/ieee1275/cmain.c kern/ieee1275/openfw.c \ - kern/main.c kern/device.c \ - kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \ - kern/env.c \ - kern/time.c kern/list.c kern/command.c kern/corecmd.c \ - kern/generic/millisleep.c \ - kern/ieee1275/ieee1275.c \ - term/ieee1275/ofconsole.c \ - term/terminfo.c term/tparm.c \ - disk/ieee1275/ofdisk.c \ - symlist.c -kernel_img_HEADERS += ieee1275/ieee1275.h terminfo.h -kernel_img_CFLAGS = $(COMMON_CFLAGS) -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,0x10000,-Bstatic - -# Scripts. -sbin_SCRIPTS = grub-install - -# For grub-install. -grub_install_SOURCES = util/ieee1275/grub-install.in - -# Modules. -pkglib_MODULES = halt.mod suspend.mod \ - aout.mod linux.mod \ - nand.mod datetime.mod \ - mmap.mod - -# For mmap.mod. -mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c -mmap_mod_CFLAGS = $(COMMON_CFLAGS) -mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) -mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For aout.mod. -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For suspend.mod -suspend_mod_SOURCES = commands/ieee1275/suspend.c -suspend_mod_CFLAGS = $(COMMON_CFLAGS) -suspend_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For halt.mod -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For linux.mod. -linux_mod_SOURCES = loader/i386/ieee1275/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For nand.mod. -nand_mod_SOURCES = disk/ieee1275/nand.c -nand_mod_CFLAGS = $(COMMON_CFLAGS) -nand_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For datetime.mod -datetime_mod_SOURCES = lib/cmos_datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -include $(srcdir)/conf/i386.mk -include $(srcdir)/conf/common.mk diff --git a/conf/i386-multiboot.rmk b/conf/i386-multiboot.rmk deleted file mode 100644 index 69b8e9a48..000000000 --- a/conf/i386-multiboot.rmk +++ /dev/null @@ -1,74 +0,0 @@ -# -*- makefile -*- - -COMMON_CFLAGS = -mrtd -mregparm=3 - -# Images. - -GRUB_KERNEL_MACHINE_LINK_ADDR = 0x8200 - -pkglib_PROGRAMS += kernel.img -kernel_img_SOURCES = kern/i386/coreboot/startup.S \ - kern/i386/misc.S \ - kern/i386/coreboot/init.c \ - kern/i386/multiboot_mmap.c \ - kern/i386/halt.c \ - kern/main.c kern/device.c \ - kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \ - kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \ - kern/i386/tsc.c kern/i386/pit.c \ - kern/generic/rtc_get_time_ms.c \ - kern/generic/millisleep.c \ - kern/env.c \ - term/i386/pc/vga_text.c term/i386/vga_common.c \ - symlist.c -kernel_img_CFLAGS = $(COMMON_CFLAGS) -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,$(GRUB_KERNEL_MACHINE_LINK_ADDR),-Bstatic - -sbin_SCRIPTS += grub-install -grub_install_SOURCES = util/grub-install.in - -bin_SCRIPTS += grub-mkrescue -grub_mkrescue_SOURCES = util/grub-mkrescue.in - -# Modules. -pkglib_MODULES = linux.mod aout.mod halt.mod datetime.mod mmap.mod - -# For mmap.mod. -mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c -mmap_mod_CFLAGS = $(COMMON_CFLAGS) -mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) -mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For halt.mod. -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For aout.mod. -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bsd.mod -pkglib_MODULES += bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S -bsd_mod_CFLAGS = $(COMMON_CFLAGS) -bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) -bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For datetime.mod -datetime_mod_SOURCES = lib/cmos_datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -include $(srcdir)/conf/i386.mk -include $(srcdir)/conf/common.mk diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk deleted file mode 100644 index e9c0b4202..000000000 --- a/conf/i386-pc.rmk +++ /dev/null @@ -1,325 +0,0 @@ -# -*- makefile -*- - -COMMON_CFLAGS = -mrtd -mregparm=3 - -# Images. -pkglib_IMAGES = boot.img cdboot.img diskboot.img lnxboot.img pxeboot.img - -# For boot.img. -boot_img_SOURCES = boot/i386/pc/boot.S -boot_img_ASFLAGS = $(COMMON_ASFLAGS) -boot_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)0x7C00 -boot_img_FORMAT = binary - -# For pxeboot.img -pxeboot_img_SOURCES = boot/i386/pc/pxeboot.S -pxeboot_img_ASFLAGS = $(COMMON_ASFLAGS) -pxeboot_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)0x7C00 -pxeboot_img_FORMAT = binary - -# For diskboot.img. -diskboot_img_SOURCES = boot/i386/pc/diskboot.S -diskboot_img_ASFLAGS = $(COMMON_ASFLAGS) -diskboot_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)0x8000 -diskboot_img_FORMAT = binary - -# For lnxboot.img. -lnxboot_img_SOURCES = boot/i386/pc/lnxboot.S -lnxboot_img_ASFLAGS = $(COMMON_ASFLAGS) -lnxboot_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)0x6000 -lnxboot_img_FORMAT = binary - -# For cdboot.img. -cdboot_img_SOURCES = boot/i386/pc/cdboot.S -cdboot_img_ASFLAGS = $(COMMON_ASFLAGS) -cdboot_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)0x7C00 -cdboot_img_FORMAT = binary - -# For kernel.img. -pkglib_PROGRAMS = kernel.img -kernel_img_SOURCES = kern/i386/pc/startup.S \ - kern/i386/misc.S \ - kern/main.c kern/device.c \ - kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/time.c kern/list.c kern/command.c kern/corecmd.c \ - kern/$(target_cpu)/dl.c kern/i386/pc/init.c kern/i386/pc/mmap.c \ - kern/parser.c kern/partition.c \ - kern/i386/tsc.c kern/i386/pit.c \ - kern/generic/rtc_get_time_ms.c \ - kern/generic/millisleep.c \ - kern/env.c \ - term/i386/pc/console.c term/i386/vga_common.c \ - symlist.c -kernel_img_HEADERS += machine/biosdisk.h machine/vga.h machine/vbe.h \ - machine/pxe.h i386/pit.h machine/kernel.h -kernel_img_CFLAGS = $(COMMON_CFLAGS) $(TARGET_IMG_CFLAGS) -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -kernel_img_LDFLAGS += $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)0x8200 $(COMMON_CFLAGS) - -# Utilities. -sbin_UTILITIES = grub-setup - -# For grub-setup. -util/i386/pc/grub-setup.c_DEPENDENCIES = grub_setup_init.h -grub_setup_SOURCES = gnulib/progname.c util/i386/pc/grub-setup.c \ - util/misc.c kern/emu/misc.c kern/emu/getroot.c \ - kern/emu/hostdisk.c kern/device.c kern/disk.c kern/err.c \ - kern/misc.c kern/partition.c kern/file.c \ - kern/emu/mm.c kern/fs.c kern/env.c kern/list.c fs/fshelp.c \ - \ - fs/affs.c fs/cpio.c fs/ext2.c fs/fat.c fs/hfs.c \ - fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ - fs/nilfs2.c fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c \ - fs/sfs.c fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c \ - fs/afs_be.c fs/befs.c fs/befs_be.c fs/tar.c \ - \ - partmap/msdos.c partmap/bsdlabel.c partmap/sunpc.c \ - partmap/gpt.c \ - \ - disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ - disk/mdraid_linux.c disk/lvm.c \ - util/raid.c util/lvm.c \ - grub_setup_init.c - -sbin_SCRIPTS += grub-install -grub_install_SOURCES = util/grub-install.in - -bin_SCRIPTS += grub-mkrescue -grub_mkrescue_SOURCES = util/grub-mkrescue.in - -pkglib_MODULES = biosdisk.mod chain.mod \ - halt.mod \ - vbe.mod vbetest.mod vbeinfo.mod \ - vga.mod \ - aout.mod bsd.mod pxe.mod pxecmd.mod datetime.mod \ - ata_pthru.mod hdparm.mod \ - usb.mod uhci.mod ohci.mod usbtest.mod usbms.mod usb_keyboard.mod \ - efiemu.mod mmap.mod acpi.mod drivemap.mod - -# For drivemap.mod. -drivemap_mod_SOURCES = commands/i386/pc/drivemap.c \ - commands/i386/pc/drivemap_int13h.S -drivemap_mod_ASFLAGS = $(COMMON_ASFLAGS) -drivemap_mod_CFLAGS = $(COMMON_CFLAGS) -drivemap_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For efiemu.mod. -efiemu_mod_SOURCES = efiemu/main.c efiemu/i386/loadcore32.c \ - efiemu/i386/loadcore64.c efiemu/i386/pc/cfgtables.c \ - efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c \ - efiemu/loadcore32.c efiemu/loadcore64.c \ - efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c \ - efiemu/i386/coredetect.c -efiemu_mod_CFLAGS = $(COMMON_CFLAGS) -efiemu_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For acpi.mod. -acpi_mod_SOURCES = commands/acpi.c commands/i386/pc/acpi.c -acpi_mod_CFLAGS = $(COMMON_CFLAGS) -acpi_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For mmap.mod. -mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c \ - mmap/i386/pc/mmap.c mmap/i386/pc/mmap_helper.S -mmap_mod_CFLAGS = $(COMMON_CFLAGS) -mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) -mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For biosdisk.mod. -biosdisk_mod_SOURCES = disk/i386/pc/biosdisk.c -biosdisk_mod_CFLAGS = $(COMMON_CFLAGS) -biosdisk_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For chain.mod. -chain_mod_SOURCES = loader/i386/pc/chainloader.c -chain_mod_CFLAGS = $(COMMON_CFLAGS) -chain_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += linux16.mod -linux16_mod_SOURCES = loader/i386/pc/linux.c -linux16_mod_CFLAGS = $(COMMON_CFLAGS) -linux16_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += linux.mod -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += xnu.mod -xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c \ - loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c -xnu_mod_CFLAGS = $(COMMON_CFLAGS) -xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) -xnu_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For halt.mod. -halt_mod_SOURCES = commands/i386/pc/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For vbe.mod. -vbe_mod_SOURCES = video/i386/pc/vbe.c -vbe_mod_CFLAGS = $(COMMON_CFLAGS) -vbe_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For vbeinfo.mod. -vbeinfo_mod_SOURCES = commands/i386/pc/vbeinfo.c -vbeinfo_mod_CFLAGS = $(COMMON_CFLAGS) -vbeinfo_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For vbetest.mod. -vbetest_mod_SOURCES = commands/i386/pc/vbetest.c -vbetest_mod_CFLAGS = $(COMMON_CFLAGS) -vbetest_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For vga.mod. -vga_mod_SOURCES = video/i386/pc/vga.c -vga_mod_CFLAGS = $(COMMON_CFLAGS) -vga_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For aout.mod -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S -bsd_mod_CFLAGS = $(COMMON_CFLAGS) -bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) -bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For usb.mod -usb_mod_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c -usb_mod_CFLAGS = $(COMMON_CFLAGS) -usb_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_common.mod -usbserial_common_mod_SOURCES = bus/usb/serial/common.c -usbserial_common_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_common_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_pl2303.mod -usbserial_pl2303_mod_SOURCES = bus/usb/serial/pl2303.c -usbserial_pl2303_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_pl2303_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_ftdi.mod -usbserial_ftdi_mod_SOURCES = bus/usb/serial/ftdi.c -usbserial_ftdi_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_ftdi_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usbtest.mod -usbtest_mod_SOURCES = commands/usbtest.c -usbtest_mod_CFLAGS = $(COMMON_CFLAGS) -usbtest_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For uhci.mod -uhci_mod_SOURCES = bus/usb/uhci.c -uhci_mod_CFLAGS = $(COMMON_CFLAGS) -uhci_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ohci.mod -ohci_mod_SOURCES = bus/usb/ohci.c -ohci_mod_CFLAGS = $(COMMON_CFLAGS) -ohci_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usbms.mod -usbms_mod_SOURCES = disk/usbms.c -usbms_mod_CFLAGS = $(COMMON_CFLAGS) -usbms_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usb_keyboard.mod -usb_keyboard_mod_SOURCES = term/usb_keyboard.c -usb_keyboard_mod_CFLAGS = $(COMMON_CFLAGS) -usb_keyboard_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For pxe.mod -pxe_mod_SOURCES = fs/i386/pc/pxe.c -pxe_mod_CFLAGS = $(COMMON_CFLAGS) -pxe_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For pxecmd.mod -pxecmd_mod_SOURCES = commands/i386/pc/pxecmd.c -pxecmd_mod_CFLAGS = $(COMMON_CFLAGS) -pxecmd_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For datetime.mod -datetime_mod_SOURCES = lib/cmos_datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For sendkey.mod -pkglib_MODULES += sendkey.mod -sendkey_mod_SOURCES = commands/i386/pc/sendkey.c -sendkey_mod_CFLAGS = $(COMMON_CFLAGS) -sendkey_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ata_pthru.mod. -ata_pthru_mod_SOURCES = disk/ata_pthru.c -ata_pthru_mod_CFLAGS = $(COMMON_CFLAGS) -ata_pthru_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For hdparm.mod. -hdparm_mod_SOURCES = commands/hdparm.c lib/hexdump.c -hdparm_mod_CFLAGS = $(COMMON_CFLAGS) -hdparm_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For cmostest.mod -pkglib_MODULES += cmostest.mod -cmostest_mod_SOURCES = commands/i386/cmostest.c -cmostest_mod_CFLAGS = $(COMMON_CFLAGS) -cmostest_mod_LDFLAGS = $(COMMON_LDFLAGS) - -ifeq ($(enable_efiemu), yes) - -efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) - -rm -f $@ -ifeq ($(TARGET_APPLE_CC), 1) - -rm -f $@.bin - $(TARGET_CC) -c -m32 -DELF32 -DAPPLE_CC -o $@.bin -Wall -Werror $< -nostdlib -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude - $(OBJCONV) -felf32 -nu -nd $@.bin $@ - -rm -f $@.bin -else - $(TARGET_CC) -c -m32 -DELF32 -o $@ -Wall -Werror $< -nostdlib -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude - if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi -endif - -efiemu64_c.o: efiemu/runtime/efiemu.c -ifeq ($(TARGET_APPLE_CC), 1) - $(TARGET_CC) -c -m64 -DAPPLE_CC=1 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude -else - $(TARGET_CC) -c -m64 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mcmodel=large -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude -endif - -efiemu64_s.o: efiemu/runtime/efiemu.S - -rm -f $@ -ifeq ($(TARGET_APPLE_CC), 1) - $(TARGET_CC) -c -m64 -DAPPLE_CC=1 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude -else - $(TARGET_CC) -c -m64 -DELF64 -o $@ -Wall -Werror $< -nostdlib -mcmodel=large -mno-red-zone -O2 -I$(srcdir)/efiemu/runtime -I$(srcdir)/include -Iinclude -endif - -efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELF) - -rm -f $@ -ifeq ($(TARGET_APPLE_CC), 1) - -rm -f $@.bin - $(TARGET_CC) -m64 -o $@.bin -Wl,-r $^ -nostdlib - $(OBJCONV) -felf64 -nu -nd $@.bin $@ - -rm -f $@.bin -else - $(TARGET_CC) -m64 -o $@ -Wl,-r $^ -nostdlib - if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi -endif - -CLEANFILES += efiemu32.o efiemu64.o efiemu64_c.o efiemu64_s.o -pkglib_DATA += efiemu32.o efiemu64.o - -endif - -include $(srcdir)/conf/i386.mk -include $(srcdir)/conf/common.mk diff --git a/conf/i386-qemu.rmk b/conf/i386-qemu.rmk deleted file mode 100644 index adb5f7f0f..000000000 --- a/conf/i386-qemu.rmk +++ /dev/null @@ -1,86 +0,0 @@ -# -*- makefile -*- - -COMMON_CFLAGS = -mrtd -mregparm=3 - -# Images. - -GRUB_KERNEL_MACHINE_LINK_ADDR = 0x8200 -GRUB_BOOT_MACHINE_LINK_ADDR = 0xffe00 - -pkglib_IMAGES += boot.img -boot_img_SOURCES = boot/i386/qemu/boot.S -boot_img_ASFLAGS = $(COMMON_ASFLAGS) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) -boot_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)$(GRUB_BOOT_MACHINE_LINK_ADDR) -boot_img_FORMAT = binary - -kern/i386/qemu/init.c_DEPENDENCIES = ascii.h - -pkglib_PROGRAMS += kernel.img -kernel_img_SOURCES = kern/i386/qemu/startup.S \ - kern/i386/misc.S \ - kern/i386/coreboot/init.c \ - kern/i386/qemu/init.c \ - kern/i386/qemu/mmap.c \ - kern/i386/halt.c \ - kern/main.c kern/device.c \ - kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/time.c kern/list.c kern/command.c kern/corecmd.c \ - kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \ - kern/i386/tsc.c kern/i386/pit.c \ - kern/generic/rtc_get_time_ms.c \ - kern/generic/millisleep.c \ - kern/env.c \ - term/i386/pc/vga_text.c term/i386/vga_common.c bus/pci.c \ - symlist.c -kernel_img_HEADERS += pci.h -kernel_img_CFLAGS = $(COMMON_CFLAGS) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR) -kernel_img_LDFLAGS += $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)$(GRUB_KERNEL_MACHINE_LINK_ADDR) -kernel_img_FORMAT = binary - -sbin_SCRIPTS += grub-install -grub_install_SOURCES = util/grub-install.in - -bin_SCRIPTS += grub-mkrescue -grub_mkrescue_SOURCES = util/grub-mkrescue.in - -# Modules. -pkglib_MODULES = linux.mod aout.mod halt.mod datetime.mod mmap.mod - -# For mmap.mod. -mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c -mmap_mod_CFLAGS = $(COMMON_CFLAGS) -mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) -mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For linux.mod. -linux_mod_SOURCES = loader/i386/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For halt.mod. -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For aout.mod. -aout_mod_SOURCES = loader/aout.c -aout_mod_CFLAGS = $(COMMON_CFLAGS) -aout_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For bsd.mod -pkglib_MODULES += bsd.mod -bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S -bsd_mod_CFLAGS = $(COMMON_CFLAGS) -bsd_mod_LDFLAGS = $(COMMON_LDFLAGS) -bsd_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For datetime.mod -datetime_mod_SOURCES = lib/cmos_datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -include $(srcdir)/conf/i386.mk -include $(srcdir)/conf/common.mk diff --git a/conf/i386.rmk b/conf/i386.rmk deleted file mode 100644 index 6bf1b3410..000000000 --- a/conf/i386.rmk +++ /dev/null @@ -1,94 +0,0 @@ -# -*- makefile -*- - -pkglib_MODULES += cpuid.mod -cpuid_mod_SOURCES = commands/i386/cpuid.c -cpuid_mod_CFLAGS = $(COMMON_CFLAGS) -cpuid_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += at_keyboard.mod -at_keyboard_mod_SOURCES = term/at_keyboard.c -at_keyboard_mod_CFLAGS = $(COMMON_CFLAGS) -at_keyboard_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += vga_text.mod -vga_text_mod_SOURCES = term/i386/pc/vga_text.c term/i386/vga_common.c -vga_text_mod_CFLAGS = $(COMMON_CFLAGS) -vga_text_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += video_cirrus.mod -video_cirrus_mod_SOURCES = video/cirrus.c -video_cirrus_mod_CFLAGS = $(COMMON_CFLAGS) -video_cirrus_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += video_bochs.mod -video_bochs_mod_SOURCES = video/bochs.c -video_bochs_mod_CFLAGS = $(COMMON_CFLAGS) -video_bochs_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += relocator.mod -relocator_mod_SOURCES = lib/i386/relocator.c lib/i386/relocator_asm.S lib/i386/relocator_backward.S -relocator_mod_CFLAGS = $(COMMON_CFLAGS) -relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) -relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += ata.mod -ata_mod_SOURCES = disk/ata.c -ata_mod_CFLAGS = $(COMMON_CFLAGS) -ata_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For setpci.mod -pkglib_MODULES += setpci.mod -setpci_mod_SOURCES = commands/setpci.c -setpci_mod_CFLAGS = $(COMMON_CFLAGS) -setpci_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += multiboot.mod -multiboot_mod_SOURCES = loader/multiboot.c loader/i386/multiboot_mbi.c -multiboot_mod_CFLAGS = $(COMMON_CFLAGS) -multiboot_mod_LDFLAGS = $(COMMON_LDFLAGS) -multiboot_mod_ASFLAGS = $(COMMON_ASFLAGS) - -pkglib_MODULES += multiboot2.mod -multiboot2_mod_SOURCES = loader/multiboot.c loader/multiboot_mbi2.c -multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2 -multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS) -multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For serial.mod. -pkglib_MODULES += serial.mod -serial_mod_SOURCES = term/serial.c term/ns8250.c -serial_mod_CFLAGS = $(COMMON_CFLAGS) -serial_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# On qemu it's compiled in -ifneq ($(platform), qemu) -# For pci.mod -pkglib_MODULES += pci.mod -pci_mod_SOURCES = bus/pci.c -pci_mod_CFLAGS = $(COMMON_CFLAGS) -pci_mod_LDFLAGS = $(COMMON_LDFLAGS) -endif - -# For cs5536.mod -pkglib_MODULES += cs5536.mod -cs5536_mod_SOURCES = bus/cs5536.c -cs5536_mod_CFLAGS = $(COMMON_CFLAGS) -cs5536_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For lspci.mod -pkglib_MODULES += lspci.mod -lspci_mod_SOURCES = commands/lspci.c -lspci_mod_CFLAGS = $(COMMON_CFLAGS) -lspci_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For play.mod. -pkglib_MODULES += play.mod -play_mod_SOURCES = commands/i386/pc/play.c -play_mod_CFLAGS = $(COMMON_CFLAGS) -play_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For iorw.mod. -pkglib_MODULES += iorw.mod -iorw_mod_SOURCES = commands/iorw.c -iorw_mod_CFLAGS = $(COMMON_CFLAGS) -iorw_mod_LDFLAGS = $(COMMON_LDFLAGS) diff --git a/conf/mips-yeeloong.rmk b/conf/mips-yeeloong.rmk deleted file mode 100644 index 9cbbdf472..000000000 --- a/conf/mips-yeeloong.rmk +++ /dev/null @@ -1,143 +0,0 @@ -# -*- makefile -*- -LINK_BASE = 0x80200000 -target_machine=yeeloong -COMMON_CFLAGS += -march=mips3 -COMMON_ASFLAGS += -march=mips3 - -kernel_img_HEADERS += pci.h bitmap.h video.h gfxterm.h font.h \ - bitmap_scale.h bufio.h cs5536.h machine/pci.h serial.h - -include $(srcdir)/conf/mips.mk - -pkglib_PROGRAMS = kernel.img -kernel_img_SOURCES = kern/$(target_cpu)/startup.S \ - kern/main.c kern/device.c kern/$(target_cpu)/init.c \ - kern/$(target_cpu)/$(target_machine)/init.c \ - kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/list.c kern/command.c kern/corecmd.c \ - kern/parser.c kern/partition.c kern/env.c kern/$(target_cpu)/dl.c \ - kern/generic/millisleep.c kern/generic/rtc_get_time_ms.c kern/time.c \ - kern/$(target_cpu)/cache.S \ - \ - term/at_keyboard.c \ - font/font_cmd.c font/font.c io/bufio.c \ - video/video.c video/fb/video_fb.c video/fb/fbblit.c \ - video/fb/fbfill.c video/fb/fbutil.c video/bitmap.c \ - video/bitmap_scale.c video/sm712.c bus/pci.c bus/bonito.c \ - term/gfxterm.c commands/extcmd.c lib/arg.c \ - bus/cs5536.c term/serial.c term/ns8250.c term/terminfo.c term/tparm.c \ - symlist.c -kernel_img_CFLAGS = $(COMMON_CFLAGS) -DUSE_ASCII_FAILBACK -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,$(LINK_BASE),-Bstatic -kernel_img_FORMAT = binary - -pkglib_IMAGES += fwstart.img -fwstart_img_SOURCES = boot/$(target_cpu)/$(target_machine)/fwstart.S -fwstart_img_CFLAGS = $(COMMON_CFLAGS) -fwstart_img_ASFLAGS = $(COMMON_ASFLAGS) -fwstart_img_LDFLAGS = $(COMMON_LDFLAGS) -static-libgcc -lgcc \ - -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic -fwstart_img_FORMAT = binary - -# For ata.mod. -pkglib_MODULES += ata.mod -ata_mod_SOURCES = disk/ata.c -ata_mod_CFLAGS = $(COMMON_CFLAGS) -ata_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For lspci.mod -pkglib_MODULES += lspci.mod -lspci_mod_SOURCES = commands/lspci.c -lspci_mod_CFLAGS = $(COMMON_CFLAGS) -lspci_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ata_pthru.mod. -pkglib_MODULES += ata_pthru.mod -ata_pthru_mod_SOURCES = disk/ata_pthru.c -ata_pthru_mod_CFLAGS = $(COMMON_CFLAGS) -ata_pthru_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For mmap.mod. -pkglib_MODULES += mmap.mod -mmap_mod_SOURCES = mmap/mmap.c mmap/mips/yeeloong/uppermem.c -mmap_mod_CFLAGS = $(COMMON_CFLAGS) -mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) -mmap_mod_ASFLAGS = $(COMMON_ASFLAGS) - -# For datetime.mod -pkglib_MODULES += datetime.mod -datetime_mod_SOURCES = lib/cmos_datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For lsspd.mod -pkglib_MODULES += lsspd.mod -lsspd_mod_SOURCES = commands/mips/yeeloong/lsspd.c -lsspd_mod_CFLAGS = $(COMMON_CFLAGS) -lsspd_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += linux.mod -linux_mod_SOURCES = loader/$(target_cpu)/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_ASFLAGS = $(COMMON_ASFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For halt.mod. -pkglib_MODULES += halt.mod -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usb.mod -pkglib_MODULES += usb.mod -usb_mod_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c -usb_mod_CFLAGS = $(COMMON_CFLAGS) -usb_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_common.mod -usbserial_common_mod_SOURCES = bus/usb/serial/common.c -usbserial_common_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_common_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_pl2303.mod -usbserial_pl2303_mod_SOURCES = bus/usb/serial/pl2303.c -usbserial_pl2303_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_pl2303_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For serial.mod. -pkglib_MODULES += usbserial_ftdi.mod -usbserial_ftdi_mod_SOURCES = bus/usb/serial/ftdi.c -usbserial_ftdi_mod_CFLAGS = $(COMMON_CFLAGS) -usbserial_ftdi_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usbtest.mod -pkglib_MODULES += usbtest.mod -usbtest_mod_SOURCES = commands/usbtest.c -usbtest_mod_CFLAGS = $(COMMON_CFLAGS) -usbtest_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For ohci.mod -pkglib_MODULES += ohci.mod -ohci_mod_SOURCES = bus/usb/ohci.c -ohci_mod_CFLAGS = $(COMMON_CFLAGS) -ohci_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usbms.mod -pkglib_MODULES += usbms.mod -usbms_mod_SOURCES = disk/usbms.c -usbms_mod_CFLAGS = $(COMMON_CFLAGS) -usbms_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For usb_keyboard.mod -pkglib_MODULES += usb_keyboard.mod -usb_keyboard_mod_SOURCES = term/usb_keyboard.c -usb_keyboard_mod_CFLAGS = $(COMMON_CFLAGS) -usb_keyboard_mod_LDFLAGS = $(COMMON_LDFLAGS) - -sbin_SCRIPTS += grub-install -grub_install_SOURCES = util/grub-install.in diff --git a/conf/mips.rmk b/conf/mips.rmk deleted file mode 100644 index 26c516fc4..000000000 --- a/conf/mips.rmk +++ /dev/null @@ -1,27 +0,0 @@ - -# -*- makefile -*- - -COMMON_CFLAGS += -mexplicit-relocs -mflush-func=grub_cpu_flush_cache - -# Images. -kernel_img_HEADERS += cpu/cache.h - -# Scripts. -sbin_SCRIPTS = -bin_SCRIPTS = - -# For relocator.mod. -pkglib_MODULES += relocator.mod -relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/$(target_cpu)/relocator_asm.S -relocator_mod_CFLAGS = $(COMMON_CFLAGS) -relocator_mod_ASFLAGS = $(COMMON_ASFLAGS) -relocator_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += multiboot2.mod -multiboot2_mod_SOURCES = loader/multiboot.c \ - loader/multiboot_mbi2.c -multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2 -multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS) -multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS) - -include $(srcdir)/conf/common.mk diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk deleted file mode 100644 index 3ec5ec906..000000000 --- a/conf/powerpc-ieee1275.rmk +++ /dev/null @@ -1,68 +0,0 @@ - -# -*- makefile -*- - -# Images. - -kernel_img_HEADERS += ieee1275/ieee1275.h - -# Programs -pkglib_PROGRAMS = kernel.img - -kernel_img_SOURCES = kern/powerpc/ieee1275/startup.S kern/ieee1275/cmain.c \ - kern/ieee1275/ieee1275.c kern/main.c kern/device.c \ - kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/list.c kern/command.c kern/corecmd.c \ - kern/ieee1275/init.c \ - kern/ieee1275/mmap.c \ - term/ieee1275/ofconsole.c term/terminfo.c term/tparm.c \ - kern/ieee1275/openfw.c disk/ieee1275/ofdisk.c \ - kern/parser.c kern/partition.c kern/env.c kern/$(target_cpu)/dl.c \ - kern/generic/millisleep.c kern/time.c \ - symlist.c kern/$(target_cpu)/cache.S -kernel_img_CFLAGS = $(COMMON_CFLAGS) -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,0x200000,-Bstatic - -# Scripts. -sbin_SCRIPTS = grub-install -bin_SCRIPTS = grub-mkrescue - -# For grub-install. -grub_install_SOURCES = util/ieee1275/grub-install.in - -# For grub-mkrescue. -grub_mkrescue_SOURCES = util/powerpc/ieee1275/grub-mkrescue.in - -# Modules. -pkglib_MODULES += ieee1275_fb.mod -ieee1275_fb_mod_SOURCES = video/ieee1275.c -ieee1275_fb_mod_CFLAGS = $(COMMON_CFLAGS) -ieee1275_fb_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For linux.mod. -pkglib_MODULES += linux.mod -linux_mod_SOURCES = loader/powerpc/ieee1275/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For suspend.mod -pkglib_MODULES += suspend.mod -suspend_mod_SOURCES = commands/ieee1275/suspend.c -suspend_mod_CFLAGS = $(COMMON_CFLAGS) -suspend_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For halt.mod -pkglib_MODULES += halt.mod -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For datetime.mod -pkglib_MODULES += datetime.mod -datetime_mod_SOURCES = lib/ieee1275/datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -include $(srcdir)/conf/common.mk diff --git a/conf/sparc64-ieee1275.rmk b/conf/sparc64-ieee1275.rmk deleted file mode 100644 index d343ac349..000000000 --- a/conf/sparc64-ieee1275.rmk +++ /dev/null @@ -1,104 +0,0 @@ - -# -*- makefile -*- - -COMMON_CFLAGS = -mno-app-regs -COMMON_LDFLAGS = -melf64_sparc -mno-relax - -# Images. -pkglib_IMAGES = boot.img diskboot.img -pkglib_PROGRAMS = kernel.img - -# For boot.img. -boot_img_SOURCES = boot/sparc64/ieee1275/boot.S -boot_img_ASFLAGS = $(COMMON_ASFLAGS) -boot_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,0x4000 -boot_img_FORMAT = a.out-sunos-big - -# For diskboot.img. -diskboot_img_SOURCES = boot/sparc64/ieee1275/diskboot.S -diskboot_img_ASFLAGS = $(COMMON_ASFLAGS) -diskboot_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,0x4200 -diskboot_img_FORMAT = binary - -kernel_img_HEADERS += ieee1275/ieee1275.h cpu/ieee1275/ieee1275.h -kernel_img_SOURCES = kern/sparc64/ieee1275/crt0.S kern/ieee1275/cmain.c \ - kern/ieee1275/ieee1275.c kern/main.c kern/device.c \ - kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/list.c kern/command.c kern/corecmd.c \ - kern/sparc64/ieee1275/ieee1275.c \ - kern/sparc64/ieee1275/init.c \ - kern/ieee1275/mmap.c \ - term/ieee1275/ofconsole.c \ - kern/ieee1275/openfw.c term/terminfo.c term/tparm.c \ - disk/ieee1275/ofdisk.c \ - kern/parser.c kern/partition.c kern/env.c kern/$(target_cpu)/dl.c \ - kern/generic/millisleep.c kern/time.c \ - symlist.c kern/$(target_cpu)/cache.S -kernel_img_CFLAGS = $(COMMON_CFLAGS) -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -kernel_img_LDFLAGS += -nostdlib -Wl,-N,-Ttext,0x4400,-Bstatic,-melf64_sparc -kernel_img_FORMAT = binary - -# Utilities. -sbin_UTILITIES = grub-setup grub-ofpathname - -# For grub-setup. -util/sparc64/ieee1275/grub-setup.c_DEPENDENCIES = grub_setup_init.h -grub_setup_SOURCES = util/sparc64/ieee1275/grub-setup.c \ - util/ieee1275/ofpath.c util/misc.c kern/emu/hostdisk.c \ - kern/emu/misc.c kern/emu/getroot.c kern/emu/mm.c kern/device.c \ - kern/disk.c kern/err.c kern/misc.c \ - kern/partition.c kern/file.c kern/fs.c kern/env.c kern/list.c \ - fs/fshelp.c \ - \ - fs/affs.c fs/cpio.c fs/ext2.c fs/fat.c fs/hfs.c \ - fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ - fs/nilfs2.c fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c \ - fs/sfs.c fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c \ - fs/afs_be.c fs/befs.c fs/befs_be.c fs/tar.c \ - \ - partmap/amiga.c partmap/apple.c partmap/msdos.c \ - partmap/bsdlabel.c partmap/sun.c partmap/acorn.c \ - \ - disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ - disk/mdraid_linux.c disk/lvm.c util/raid.c \ - util/lvm.c gnulib/progname.c grub_setup_init.c - -# For grub-ofpathname. -grub_ofpathname_SOURCES = util/ieee1275/grub-ofpathname.c \ - util/ieee1275/ofpath.c util/misc.c kern/emu/misc.c \ - gnulib/progname.c - -# Scripts. -sbin_SCRIPTS = grub-install - -# For grub-install. -grub_install_SOURCES = util/grub-install.in - -# Modules. -pkglib_MODULES += ieee1275_fb.mod -ieee1275_fb_mod_SOURCES = video/ieee1275.c -ieee1275_fb_mod_CFLAGS = $(COMMON_CFLAGS) -ieee1275_fb_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For linux.mod. -pkglib_MODULES += linux.mod -linux_mod_SOURCES = loader/sparc64/ieee1275/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For halt.mod. -pkglib_MODULES += halt.mod -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For datetime.mod -pkglib_MODULES += datetime.mod -datetime_mod_SOURCES = lib/ieee1275/datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -include $(srcdir)/conf/common.mk diff --git a/conf/tests.rmk b/conf/tests.rmk deleted file mode 100644 index c14fe0fda..000000000 --- a/conf/tests.rmk +++ /dev/null @@ -1,110 +0,0 @@ -# -*- makefile -*- - -# For grub-shell -grub-shell: tests/util/grub-shell.in config.status - ./config.status --file=$@:$< - chmod +x $@ -check_SCRIPTS += grub-shell -CLEANFILES += grub-shell - -# For grub-shell-tester -grub-shell-tester: tests/util/grub-shell-tester.in config.status - ./config.status --file=$@:$< - chmod +x $@ -check_SCRIPTS += grub-shell-tester -CLEANFILES += grub-shell-tester - -pkglib_MODULES += functional_test.mod -functional_test_mod_SOURCES = tests/lib/functional_test.c tests/lib/test.c -functional_test_mod_CFLAGS = $(COMMON_CFLAGS) -functional_test_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# Rules for unit tests -check_UTILITIES += example_unit_test -example_unit_test_SOURCES = tests/example_unit_test.c kern/list.c kern/misc.c tests/lib/test.c tests/lib/unit_test.c -example_unit_test_CFLAGS = -Wno-format - -# Rules for functional tests -pkglib_MODULES += example_functional_test.mod -example_functional_test_mod_SOURCES = tests/example_functional_test.c -example_functional_test_mod_CFLAGS = -Wno-format $(COMMON_CFLAGS) -example_functional_test_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# Rules for scripted tests -check_SCRIPTS += example_scripted_test -example_scripted_test_SOURCES = tests/example_scripted_test.in - -check_SCRIPTS += example_grub_script_test -example_grub_script_test_SOURCES = tests/example_grub_script_test.in - -# -# Rules for real tests -# - -check_SCRIPTS += grub_script_echo1 -grub_script_echo1_SOURCES = tests/grub_script_echo1.in - -check_SCRIPTS += grub_script_echo_keywords -grub_script_echo_keywords_SOURCES = tests/grub_script_echo_keywords.in - -check_SCRIPTS += grub_script_vars1 -grub_script_vars1_SOURCES = tests/grub_script_vars1.in - -check_SCRIPTS += grub_script_for1 -grub_script_for1_SOURCES = tests/grub_script_for1.in - -check_SCRIPTS += grub_script_while1 -grub_script_while1_SOURCES = tests/grub_script_while1.in - -check_SCRIPTS += grub_script_if -grub_script_if_SOURCES = tests/grub_script_if.in - -check_SCRIPTS += grub_script_blanklines -grub_script_blanklines_SOURCES = tests/grub_script_blanklines.in - -check_SCRIPTS += grub_script_final_semicolon -grub_script_final_semicolon_SOURCES = tests/grub_script_final_semicolon.in - -check_SCRIPTS += grub_script_dollar -grub_script_dollar_SOURCES = tests/grub_script_dollar.in - -check_SCRIPTS += grub_script_comments -grub_script_comments_SOURCES = tests/grub_script_comments.in - -check_SCRIPTS += grub_script_functions -grub_script_functions_SOURCES = tests/grub_script_functions.in - -check_SCRIPTS += grub_script_break -grub_script_break_SOURCES = tests/grub_script_break.in - -check_SCRIPTS += grub_script_continue -grub_script_continue_SOURCES = tests/grub_script_continue.in - -check_SCRIPTS += grub_script_shift -grub_script_shift_SOURCES = tests/grub_script_shift.in - -# List of tests to execute on "make check" -# SCRIPTED_TESTS = example_scripted_test -# SCRIPTED_TESTS += example_grub_script_test -# UNIT_TESTS = example_unit_test -# FUNCTIONAL_TESTS = example_functional_test.mod - -SCRIPTED_TESTS = grub_script_echo1 -SCRIPTED_TESTS += grub_script_echo_keywords -SCRIPTED_TESTS += grub_script_vars1 -SCRIPTED_TESTS += grub_script_for1 -SCRIPTED_TESTS += grub_script_while1 -SCRIPTED_TESTS += grub_script_if -SCRIPTED_TESTS += grub_script_blanklines -SCRIPTED_TESTS += grub_script_final_semicolon -SCRIPTED_TESTS += grub_script_dollar -SCRIPTED_TESTS += grub_script_comments -SCRIPTED_TESTS += grub_script_functions -SCRIPTED_TESTS += grub_script_break -SCRIPTED_TESTS += grub_script_continue -SCRIPTED_TESTS += grub_script_shift - -# dependencies between tests and testing-tools -$(SCRIPTED_TESTS): grub-shell grub-shell-tester -$(FUNCTIONAL_TESTS): functional_test.mod - diff --git a/conf/x86-efi.rmk b/conf/x86-efi.rmk deleted file mode 100644 index f9f07684e..000000000 --- a/conf/x86-efi.rmk +++ /dev/null @@ -1,112 +0,0 @@ -# -*- makefile -*- - -# Scripts. -sbin_SCRIPTS = grub-install - -# For grub-install. -grub_install_SOURCES = util/i386/efi/grub-install.in - -bin_SCRIPTS += grub-mkrescue -grub_mkrescue_SOURCES = util/grub-mkrescue.in - -# Modules. -pkglib_PROGRAMS = kernel.img -pkglib_MODULES = chain.mod appleldr.mod \ - linux.mod halt.mod \ - datetime.mod loadbios.mod \ - fixvideo.mod mmap.mod acpi.mod - -# For kernel.img. -kernel_img_RELOCATABLE = yes -kernel_img_SOURCES = kern/$(target_cpu)/efi/startup.S kern/main.c kern/device.c \ - kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ - kern/misc.c kern/mm.c kern/term.c \ - kern/rescue_parser.c kern/rescue_reader.c \ - kern/$(target_cpu)/dl.c kern/i386/efi/init.c kern/parser.c kern/partition.c \ - kern/env.c symlist.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c \ - term/efi/console.c disk/efi/efidisk.c \ - kern/time.c kern/list.c kern/command.c kern/corecmd.c \ - kern/i386/tsc.c kern/i386/pit.c \ - kern/generic/rtc_get_time_ms.c \ - kern/generic/millisleep.c -ifeq ($(target_cpu),x86_64) -kernel_img_SOURCES += kern/x86_64/efi/callwrap.S -endif -kernel_img_HEADERS += efi/efi.h efi/time.h efi/disk.h i386/pit.h -kernel_img_CFLAGS = $(COMMON_CFLAGS) -kernel_img_ASFLAGS = $(COMMON_ASFLAGS) -kernel_img_LDFLAGS += $(COMMON_LDFLAGS) - -# For acpi.mod. -acpi_mod_SOURCES = commands/acpi.c commands/efi/acpi.c -acpi_mod_CFLAGS = $(COMMON_CFLAGS) -acpi_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For mmap.mod. -mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c \ - mmap/efi/mmap.c -mmap_mod_CFLAGS = $(COMMON_CFLAGS) -mmap_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For chain.mod. -chain_mod_SOURCES = loader/efi/chainloader.c -chain_mod_CFLAGS = $(COMMON_CFLAGS) -chain_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For appleldr.mod. -appleldr_mod_SOURCES = loader/efi/appleloader.c -appleldr_mod_CFLAGS = $(COMMON_CFLAGS) -appleldr_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For linux.mod. -ifeq ($(target_cpu), x86_64) -linux_mod_SOURCES = loader/i386/efi/linux.c loader/i386/linux_trampoline.S -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_ASFLAGS = $(COMMON_ASFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) -else -linux_mod_SOURCES = loader/i386/efi/linux.c -linux_mod_CFLAGS = $(COMMON_CFLAGS) -linux_mod_ASFLAGS = $(COMMON_ASFLAGS) -linux_mod_LDFLAGS = $(COMMON_LDFLAGS) -endif - -# For halt.mod. -halt_mod_SOURCES = commands/halt.c -halt_mod_CFLAGS = $(COMMON_CFLAGS) -halt_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For datetime.mod -datetime_mod_SOURCES = lib/efi/datetime.c -datetime_mod_CFLAGS = $(COMMON_CFLAGS) -datetime_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For loadbios.mod -loadbios_mod_SOURCES = commands/efi/loadbios.c -loadbios_mod_CFLAGS = $(COMMON_CFLAGS) -loadbios_mod_LDFLAGS = $(COMMON_LDFLAGS) - -# For fixvideo.mod -fixvideo_mod_SOURCES = commands/efi/fixvideo.c -fixvideo_mod_CFLAGS = $(COMMON_CFLAGS) -fixvideo_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += efi_uga.mod -efi_uga_mod_SOURCES = video/efi_uga.c -efi_uga_mod_CFLAGS = $(COMMON_CFLAGS) -efi_uga_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += efi_gop.mod -efi_gop_mod_SOURCES = video/efi_gop.c -efi_gop_mod_CFLAGS = $(COMMON_CFLAGS) -efi_gop_mod_LDFLAGS = $(COMMON_LDFLAGS) - -pkglib_MODULES += xnu.mod -xnu_mod_SOURCES = loader/xnu_resume.c loader/i386/xnu.c \ - loader/macho32.c loader/macho64.c loader/macho.c loader/xnu.c -xnu_mod_CFLAGS = $(COMMON_CFLAGS) -xnu_mod_LDFLAGS = $(COMMON_LDFLAGS) -xnu_mod_ASFLAGS = $(COMMON_ASFLAGS) - -include $(srcdir)/conf/i386.mk -include $(srcdir)/conf/common.mk diff --git a/conf/x86_64-efi.rmk b/conf/x86_64-efi.rmk deleted file mode 100644 index 200621280..000000000 --- a/conf/x86_64-efi.rmk +++ /dev/null @@ -1,5 +0,0 @@ -# -*- makefile -*- - -COMMON_LDFLAGS = -melf_x86_64 - -include $(srcdir)/conf/x86-efi.mk diff --git a/configure.ac b/configure.ac index 19ea08c9d..dd2e82e3b 100644 --- a/configure.ac +++ b/configure.ac @@ -873,11 +873,12 @@ AM_CONDITIONAL([COND_mips_yeeloong], [test x$target_cpu = xmips -a x$platform = AM_CONDITIONAL([COND_mips_qemu_mips], [test x$target_cpu = xmips -a x$platform = xqemu_mips]) AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) -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_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_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/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 0733ef1c2..0257bbac4 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -282,8 +282,8 @@ module = { module = { name = cs5536; - i386 = bus/cs5536.c; - enable = i386; + x86 = bus/cs5536.c; + enable = x86; }; module = { @@ -387,7 +387,7 @@ module = { module = { name = iorw; common = commands/iorw.c; - enable = i386; + enable = x86; }; module = { @@ -573,8 +573,8 @@ module = { module = { name = play; - i386 = commands/i386/pc/play.c; - enable = i386; + x86 = commands/i386/pc/play.c; + enable = x86; }; module = { @@ -1254,6 +1254,7 @@ module = { enable = emu; enable = i386; enable = x86_64_efi; + emu_condition = COND_GRUB_EMU_USB; }; module = { @@ -1290,14 +1291,14 @@ module = { module = { name = video_cirrus; - i386 = video/cirrus.c; - enable = i386; + x86 = video/cirrus.c; + enable = x86; }; module = { name = video_bochs; - i386 = video/bochs.c; - enable = i386; + x86 = video/bochs.c; + enable = x86; }; module = { From 40a4a8a9ed704686f95c05c582921c1c3b91d274 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 23 Aug 2010 13:32:59 +0530 Subject: [PATCH 203/271] fix exit 1 in autogen.sh --- autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autogen.sh b/autogen.sh index 31a269e0f..adc457ea5 100755 --- a/autogen.sh +++ b/autogen.sh @@ -2,7 +2,7 @@ set -e -autogen --version >/dev/null || (echo autogen missing; exit 1) +autogen --version >/dev/null || exit 1 echo "Importing unicode..." python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c From 9e860d5437f2027303d0641c168598d7a71a337a Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 23 Aug 2010 14:07:29 +0530 Subject: [PATCH 204/271] force bash for autogen.sh --- autogen.sh | 2 +- gentpl.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/autogen.sh b/autogen.sh index adc457ea5..f052499ae 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,4 +1,4 @@ -#! /bin/sh +#! /usr/bin/env bash set -e diff --git a/gentpl.py b/gentpl.py index 5b7987390..17bda02c6 100644 --- a/gentpl.py +++ b/gentpl.py @@ -105,7 +105,7 @@ def var_add(var, value): # Autogen constructs # -def set_canonical_name_suffix(suffix): return "[+ % name `export cname=$(echo -n %s" + suffix + " | sed -e 's/[^0-9A-Za-z@_]/_/g')` +]" +def set_canonical_name_suffix(suffix): return "[+ % name `export cname=$(echo %s" + suffix + " | sed -e 's/[^0-9A-Za-z@_]/_/g')` +]" def cname(): return "[+ % name `echo $cname` +]" def rule(target, source, cmd): From f86a4030ed43240e5d3ebb4d26822772e2b06acf Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 23 Aug 2010 12:55:47 +0100 Subject: [PATCH 205/271] * kern/mips/startup.S (grub_prefix): Update comment to refer to grub-mkimage rather than grub-mkelfimage. * kern/powerpc/ieee1275/startup.S (grub_prefix): Likewise. --- ChangeLog | 6 ++++++ kern/mips/startup.S | 2 +- kern/powerpc/ieee1275/startup.S | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 758b5cb5f..241b59b76 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-08-23 Colin Watson + + * kern/mips/startup.S (grub_prefix): Update comment to refer to + grub-mkimage rather than grub-mkelfimage. + * kern/powerpc/ieee1275/startup.S (grub_prefix): Likewise. + 2010-08-22 Vladimir Serbinenko * term/at_keyboard.c (grub_at_keyboard_getkey_noblock): Don't discard diff --git a/kern/mips/startup.S b/kern/mips/startup.S index c67bb9742..134853a9d 100644 --- a/kern/mips/startup.S +++ b/kern/mips/startup.S @@ -148,7 +148,7 @@ compressed: VARIABLE(grub_prefix) - /* to be filled by grub-mkelfimage */ + /* to be filled by grub-mkimage */ /* * Leave some breathing room for the prefix. diff --git a/kern/powerpc/ieee1275/startup.S b/kern/powerpc/ieee1275/startup.S index 96d153778..526df1d91 100644 --- a/kern/powerpc/ieee1275/startup.S +++ b/kern/powerpc/ieee1275/startup.S @@ -33,7 +33,7 @@ _start: . = _start + GRUB_KERNEL_MACHINE_PREFIX VARIABLE(grub_prefix) - /* to be filled by grub-mkelfimage */ + /* to be filled by grub-mkimage */ /* * Leave some breathing room for the prefix. From 41b016a481f590258fdba25f8e184f83a8db0600 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Mon, 23 Aug 2010 21:23:39 +0530 Subject: [PATCH 206/271] fix x86_64-efi build --- Makefile.util.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.util.def b/Makefile.util.def index 89328d619..fd3428e76 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -329,7 +329,7 @@ script = { script = { mansection = 1; name = grub-mkrescue; - i386_noieee1275 = util/grub-mkrescue.in; + x86_noieee1275 = util/grub-mkrescue.in; powerpc_ieee1275 = util/powerpc/ieee1275/grub-mkrescue.in; enable = i386_pc; enable = x86_efi; From 04ddcc6a8855138cd2fa6925eb2c597cc5e58111 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Mon, 23 Aug 2010 22:41:14 +0200 Subject: [PATCH 207/271] 2010-08-23 Samuel Thibault * util/grub.d/30_os-prober.in: Fix conversion from grub-probe --target=drive output to Mach device name. --- ChangeLog | 5 +++++ util/grub.d/30_os-prober.in | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2db022484..3887cc5bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-23 Samuel Thibault + + * util/grub.d/30_os-prober.in: Fix conversion from grub-probe + --target=drive output to Mach device name. + 2010-08-23 BVK Chaitanya New Automake based build system for GRUB. diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in index ecd87bb1c..76857aeea 100644 --- a/util/grub.d/30_os-prober.in +++ b/util/grub.d/30_os-prober.in @@ -179,7 +179,7 @@ EOF save_default_entry | sed -e "s/^/\t/" prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/" grub_device="`${grub_probe} --device ${DEVICE} --target=drive`" - mach_device="`echo "${grub_device}" | tr -d '()' | tr , s`" + mach_device="`echo "${grub_device}" | sed -e 's/(\(hd.*\),msdos\(.*\))/\1s\2/'`" grub_fs="`${grub_probe} --device ${DEVICE} --target=fs`" case "${grub_fs}" in *fs) hurd_fs="${grub_fs}" ;; From a797a26ee832a12c384da7c1a4404fa6ac626665 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 24 Aug 2010 08:57:18 +0200 Subject: [PATCH 208/271] Unify and macroify some code in x86 relocators --- lib/i386/relocator16.S | 71 ++++++++------------------------ lib/i386/relocator32.S | 61 ++++----------------------- lib/i386/relocator64.S | 54 ++++-------------------- lib/i386/relocator_common.S | 82 +++++++++++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 154 deletions(-) create mode 100644 lib/i386/relocator_common.S diff --git a/lib/i386/relocator16.S b/lib/i386/relocator16.S index 510d3a1ed..c3768f4eb 100644 --- a/lib/i386/relocator16.S +++ b/lib/i386/relocator16.S @@ -15,18 +15,7 @@ * You should have received a copy of the GNU General Public License * along with GRUB. If not, see . */ - -#include -#include - -#ifdef __x86_64__ -#define RAX %rax -#define RSI %rsi -#else -#define RAX %eax -#define RSI %esi -#endif - + /* The code segment of the protected mode. */ #define CODE_SEGMENT 0x08 @@ -37,50 +26,41 @@ #define PSEUDO_REAL_DSEG 0x20 +#include "relocator_common.S" + .p2align 4 /* force 16-byte alignment */ VARIABLE(grub_relocator16_start) -LOCAL(base): - /* %rax contains now our new 'base'. */ - mov RAX, RSI - add $(LOCAL(cont0) - LOCAL(base)), RAX - jmp *RAX -LOCAL(cont0): - lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX - movl %eax, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) - - lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX - mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) + PREAMBLE movl %esi, %eax movw %ax, (LOCAL (cs_base_bytes12) - LOCAL (base)) (RSI, 1) shrl $16, %eax movb %al, (LOCAL (cs_base_byte3) - LOCAL (base)) (RSI, 1) - /* Switch to compatibility mode. */ - - lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) - - /* Update %cs. */ - ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) - -LOCAL(cont1): + RELOAD_GDT .code32 + /* Update other registers. */ + movl $DATA_SEGMENT, %eax + movl %eax, %ds + movl %eax, %es + movl %eax, %fs + movl %eax, %gs + movl %eax, %ss - /* Disable paging. */ - movl %cr0, %eax - andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax - movl %eax, %cr0 + DISABLE_PAGING +#ifdef __x86_64__ /* Disable amd64. */ movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx rdmsr andl $(~GRUB_MEMORY_CPU_AMD64_MSR_ON), %eax wrmsr +#endif /* Turn off PAE. */ movl %cr4, %eax - andl $GRUB_MEMORY_CPU_CR4_PAE_ON, %eax + andl $(~GRUB_MEMORY_CPU_CR4_PAE_ON), %eax movl %eax, %cr4 /* Update other registers. */ @@ -208,23 +188,6 @@ LOCAL(cs_base_byte3): */ .word 0xFFFF, 0 .byte 0, 0x92, 0, 0 - - .p2align 4 -LOCAL(gdtdesc): - .word 0x27 -LOCAL(gdt_addr): -#ifdef __x86_64__ - /* Filled by the code. */ - .quad 0 -#else - /* Filled by the code. */ - .long 0 -#endif - - .p2align 4 -LOCAL(jump_vector): - /* Jump location. Is filled by the code */ - .long 0 - .long CODE_SEGMENT +LOCAL(gdt_end): VARIABLE(grub_relocator16_end) diff --git a/lib/i386/relocator32.S b/lib/i386/relocator32.S index 4f79151e2..b581305a5 100644 --- a/lib/i386/relocator32.S +++ b/lib/i386/relocator32.S @@ -16,48 +16,21 @@ * along with GRUB. If not, see . */ -#include -#include - -#ifdef __x86_64__ -#define RAX %rax -#define RSI %rsi -#else -#define RAX %eax -#define RSI %esi -#endif - /* The code segment of the protected mode. */ #define CODE_SEGMENT 0x10 /* The data segment of the protected mode. */ #define DATA_SEGMENT 0x18 +#include "relocator_common.S" + .p2align 4 /* force 16-byte alignment */ VARIABLE(grub_relocator32_start) -LOCAL(base): - /* %rax contains now our new 'base'. */ - mov RAX, RSI - add $(LOCAL(cont0) - LOCAL(base)), RAX - jmp *RAX -LOCAL(cont0): - lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX - movl %eax, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + PREAMBLE - lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX - mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) - - /* Switch to compatibility mode. */ - - lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) - - /* Update %cs. */ - ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) - -LOCAL(cont1): + RELOAD_GDT .code32 - /* Update other registers. */ movl $DATA_SEGMENT, %eax movl %eax, %ds @@ -66,16 +39,15 @@ LOCAL(cont1): movl %eax, %gs movl %eax, %ss - /* Disable paging. */ - movl %cr0, %eax - andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax - movl %eax, %cr0 + DISABLE_PAGING +#ifdef __x86_64__ /* Disable amd64. */ movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx rdmsr andl $(~GRUB_MEMORY_CPU_AMD64_MSR_ON), %eax wrmsr +#endif /* Turn off PAE. */ movl %cr4, %eax @@ -143,23 +115,6 @@ LOCAL(gdt): /* Data segment. */ .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x92, 0xCF, 0x00 - - .p2align 4 -LOCAL(gdtdesc): - .word 0x27 -LOCAL(gdt_addr): -#ifdef __x86_64__ - /* Filled by the code. */ - .quad 0 -#else - /* Filled by the code. */ - .long 0 -#endif - - .p2align 4 -LOCAL(jump_vector): - /* Jump location. Is filled by the code */ - .long 0 - .long CODE_SEGMENT +LOCAL(gdt_end): VARIABLE(grub_relocator32_end) diff --git a/lib/i386/relocator64.S b/lib/i386/relocator64.S index 37a77b3b5..bb086418c 100644 --- a/lib/i386/relocator64.S +++ b/lib/i386/relocator64.S @@ -16,44 +16,20 @@ * along with GRUB. If not, see . */ -#include -#include - -#ifdef __x86_64__ -#define RAX %rax -#define RSI %rsi -#else -#define RAX %eax -#define RSI %esi -#endif - #define CODE32_SEGMENT 0x18 -#define CODE64_SEGMENT 0x08 +#define CODE_SEGMENT 0x08 /* The data segment of the protected mode. */ #define DATA_SEGMENT 0x10 +#include "relocator_common.S" + .p2align 4 /* force 16-byte alignment */ VARIABLE(grub_relocator64_start) -LOCAL(base): - /* %rax contains now our new 'base'. */ - mov RAX, RSI - - add $(LOCAL(cont0) - LOCAL(base)), RAX - jmp *RAX -LOCAL(cont0): + PREAMBLE #ifndef __x86_64__ - lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX - mov RAX, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) - - lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX - mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) - - /* Disable paging. */ - movl %cr0, %eax - andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax - movl %eax, %cr0 + DISABLE_PAGING /* Turn on PAE. */ movl %cr4, %eax @@ -77,11 +53,7 @@ VARIABLE(grub_relocator64_cr3) orl $GRUB_MEMORY_CPU_CR0_PAGING_ON, %eax movl %eax, %cr0 - /* Load GDT. */ - lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) - - /* Update %cs. */ - ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + RELOAD_GDT #else /* mov imm64, %rax */ .byte 0x48 @@ -91,7 +63,6 @@ VARIABLE(grub_relocator64_cr3) movq %rax, %cr3 #endif -LOCAL(cont1): .code64 /* mov imm64, %rax */ @@ -183,18 +154,7 @@ LOCAL(gdt): | (1 << 7) /* 4K granular. */) .byte 0x00 /* Base 00xxxxxx. */ - .p2align 4 -LOCAL(gdtdesc): - .word 0x20 -LOCAL(gdt_addr): - /* Filled by the code. */ - .long 0 - - .p2align 4 -LOCAL(jump_vector): - /* Jump location. Is filled by the code */ - .long 0 - .long CODE64_SEGMENT +LOCAL(gdt_end): #endif VARIABLE(grub_relocator64_end) diff --git a/lib/i386/relocator_common.S b/lib/i386/relocator_common.S new file mode 100644 index 000000000..bd5b53f95 --- /dev/null +++ b/lib/i386/relocator_common.S @@ -0,0 +1,82 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 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 + +#ifdef __x86_64__ +#define RAX %rax +#define RSI %rsi +#else +#define RAX %eax +#define RSI %esi +#endif + + .macro DISABLE_PAGING +#ifdef GRUB_MACHINE_IEEE1275 +#endif + + movl %cr0, %eax + andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax + movl %eax, %cr0 + .endm + + .macro PREAMBLE +LOCAL(base): + /* %rax contains now our new 'base'. */ + mov RAX, RSI + + add $(LOCAL(cont0) - LOCAL(base)), RAX + jmp *RAX +LOCAL(cont0): + .endm + + .macro RELOAD_GDT + lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX + movl %eax, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + + lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX + mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) + + /* Switch to compatibility mode. */ + lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) + + /* Update %cs. */ + ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + + .p2align 4 +LOCAL(gdtdesc): + .word LOCAL(gdt_end) - LOCAL(gdt) +LOCAL(gdt_addr): +#ifdef __x86_64__ + /* Filled by the code. */ + .quad 0 +#else + /* Filled by the code. */ + .long 0 +#endif + + .p2align 4 +LOCAL(jump_vector): + /* Jump location. Is filled by the code */ + .long 0 + .long CODE_SEGMENT + +LOCAL(cont1): + .endm From 79f8b757ce4c5733341d00c9c9e5a489fadda3b5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 24 Aug 2010 08:57:53 +0200 Subject: [PATCH 209/271] fix multiboot compilation --- conf/i386-multiboot.rmk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/i386-multiboot.rmk b/conf/i386-multiboot.rmk index 6475e6763..0fcfa9c66 100644 --- a/conf/i386-multiboot.rmk +++ b/conf/i386-multiboot.rmk @@ -16,7 +16,7 @@ kernel_img_SOURCES = kern/i386/coreboot/startup.S \ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ kern/misc.c kern/mm.c kern/term.c \ kern/rescue_parser.c kern/rescue_reader.c \ - kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \ + kern/time.c kern/list.c kern/command.c kern/corecmd.c \ kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \ kern/i386/tsc.c kern/i386/pit.c \ kern/generic/rtc_get_time_ms.c \ From ffadea42bbabab54882210b7cd740f08370d311b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Tue, 24 Aug 2010 19:33:08 +0200 Subject: [PATCH 210/271] Fix non-loading of BSS --- loader/multiboot_elfxx.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/loader/multiboot_elfxx.c b/loader/multiboot_elfxx.c index 7d08eda2a..024b44747 100644 --- a/loader/multiboot_elfxx.c +++ b/loader/multiboot_elfxx.c @@ -88,7 +88,7 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) /* Load every loadable segment in memory. */ for (i = 0; i < ehdr->e_phnum; i++) { - if (phdr(i)->p_type == PT_LOAD && phdr(i)->p_filesz != 0) + if (phdr(i)->p_type == PT_LOAD) { grub_err_t err; void *source; @@ -109,15 +109,18 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) source = get_virtual_current_address (ch); } - if (grub_file_seek (file, (grub_off_t) phdr(i)->p_offset) - == (grub_off_t) -1) - return grub_error (GRUB_ERR_BAD_OS, - "invalid offset in program header"); + if (phdr(i)->p_filesz != 0) + { + if (grub_file_seek (file, (grub_off_t) phdr(i)->p_offset) + == (grub_off_t) -1) + return grub_error (GRUB_ERR_BAD_OS, + "invalid offset in program header"); - if (grub_file_read (file, source, phdr(i)->p_filesz) - != (grub_ssize_t) phdr(i)->p_filesz) - return grub_error (GRUB_ERR_BAD_OS, - "couldn't read segment from file"); + if (grub_file_read (file, source, phdr(i)->p_filesz) + != (grub_ssize_t) phdr(i)->p_filesz) + return grub_error (GRUB_ERR_BAD_OS, + "couldn't read segment from file"); + } if (phdr(i)->p_filesz < phdr(i)->p_memsz) grub_memset ((grub_uint8_t *) source + phdr(i)->p_filesz, 0, From 262d4a94a0e6dacdb3d7f47d640c672f82cff2fc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 25 Aug 2010 02:15:21 +0200 Subject: [PATCH 211/271] Add mips multiboot2 mbi address calculation --- loader/multiboot_mbi2.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/loader/multiboot_mbi2.c b/loader/multiboot_mbi2.c index 8cade2f2f..d1b306bbf 100644 --- a/loader/multiboot_mbi2.c +++ b/loader/multiboot_mbi2.c @@ -489,7 +489,13 @@ grub_multiboot_make_mbi (grub_uint32_t *target) return err; ptrorig = get_virtual_current_address (ch); +#if defined (__i386__) || defined (__x86_64__) *target = get_physical_target_address (ch); +#elif defined (__mips) + *target = get_physical_target_address (ch) | 0x80000000; +#else +#error Please complete this +#endif mbistart = ptrorig; ptrorig += 2 * sizeof (grub_uint32_t); From d24c6190aedb2e60401b915675bdf9b4698162b7 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 25 Aug 2010 18:34:20 +0530 Subject: [PATCH 212/271] add changelog --- ChangeLog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2db022484..bd03c490e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-08-25 BVK Chaitanya + + Multiple variable names support to "export" command. + + * normal/context.c (grub_cmd_export): "export" command supports + multiple variable names. + 2010-08-23 BVK Chaitanya New Automake based build system for GRUB. From cd6891117fee18f2a6c594ed39a5fccb85afd8fc Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Wed, 25 Aug 2010 18:39:00 +0530 Subject: [PATCH 213/271] review comment fixes --- grub-core/normal/context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/normal/context.c b/grub-core/normal/context.c index 68f7626b9..ec718952d 100644 --- a/grub-core/normal/context.c +++ b/grub-core/normal/context.c @@ -177,7 +177,7 @@ grub_context_init (void) grub_env_export ("prefix"); export_cmd = grub_register_command ("export", grub_cmd_export, - N_("ENVVAR..."), + N_("ENVVAR [ENVVAR] ..."), N_("Export variables.")); } From 5ad6967b19306efe28b047b97b21b839b74f7077 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 25 Aug 2010 16:59:11 +0200 Subject: [PATCH 214/271] Enable boottests --- Makefile.am | 144 +++++++++++++++++- {tests => grub-core/tests}/boot/kfreebsd.cfg | 0 .../tests}/boot/kfreebsd.init-i386.S | 0 .../tests}/boot/kfreebsd.init-x86_64.S | 0 {tests => grub-core/tests}/boot/knetbsd.cfg | 0 .../tests}/boot/knetbsd.init-i386.S | 0 .../tests}/boot/knetbsd.init-x86_64.S | 0 {tests => grub-core/tests}/boot/linux.cfg | 0 .../tests}/boot/linux.init-i386.S | 0 .../tests}/boot/linux.init-x86_64.S | 0 {tests => grub-core/tests}/boot/linux16.cfg | 0 tests/util/grub-shell.in | 2 +- 12 files changed, 144 insertions(+), 2 deletions(-) rename {tests => grub-core/tests}/boot/kfreebsd.cfg (100%) rename {tests => grub-core/tests}/boot/kfreebsd.init-i386.S (100%) rename {tests => grub-core/tests}/boot/kfreebsd.init-x86_64.S (100%) rename {tests => grub-core/tests}/boot/knetbsd.cfg (100%) rename {tests => grub-core/tests}/boot/knetbsd.init-i386.S (100%) rename {tests => grub-core/tests}/boot/knetbsd.init-x86_64.S (100%) rename {tests => grub-core/tests}/boot/linux.cfg (100%) rename {tests => grub-core/tests}/boot/linux.init-i386.S (100%) rename {tests => grub-core/tests}/boot/linux.init-x86_64.S (100%) rename {tests => grub-core/tests}/boot/linux16.cfg (100%) diff --git a/Makefile.am b/Makefile.am index f49a92ead..9988c4099 100644 --- a/Makefile.am +++ b/Makefile.am @@ -82,4 +82,146 @@ CLEANFILES += widthspec.h platform_HEADERS = config.h pkglib_DATA += grub-mkconfig_lib -pkglib_DATA += update-grub_lib \ No newline at end of file +pkglib_DATA += update-grub_lib + + +if COND_i386_coreboot +BOOTTARGET=coreboot +QEMU32=qemu-system-i386 +endif + +if COND_i386_multiboot +BOOTTARGET=cd +QEMU32=qemu-system-i386 +endif + +if COND_i386_ieee1275 +BOOTTARGET=cd +QEMU32=qemu-system-i386 +endif + +if COND_i386_qemu +BOOTTARGET=qemu +QEMU32=qemu-system-i386 +endif + +if COND_i386_pc +BOOTTARGET=cd +QEMU32=qemu-system-i386 +endif + +if COND_i386_efi +QEMU32=qemu-system-i386 +BOOTTARGET=cd +endif + +if COND_x86_64_efi +QEMU32=qemu-system-x86_64 +BOOTTARGET=cd +endif + +linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S + $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S + $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S + $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ + +kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S + $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ + +knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/knetbsd.init-i386.S + $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/knetbsd.init-x86_64.S + $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux-initramfs.i386: linux.init.i386 Makefile + TDIR=`mktemp -d`; cp $< $$TDIR/init; (cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR + +linux-initramfs.x86_64: linux.init.x86_64 Makefile + TDIR=`mktemp -d`; cp $< $$TDIR/init; (cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR + +kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile + TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR + +knetbsd.image.i386: knetbsd.init.i386 + TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 + $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@ + +kfreebsd-mfsroot.x86_64.img: kfreebsd.init.x86_64 Makefile + TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR + +knetbsd.image.x86_64: knetbsd.init.x86_64 + TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +knetbsd.miniroot-image.x86_64.img: knetbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 + $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 $@ + +CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 + +kfreebsd-mfsroot.i386.gz: kfreebsd-mfsroot.i386.img + gzip < $< > $@ + +bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/mfsroot.gz=kfreebsd-mfsroot.i386.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +kfreebsd-mfsroot.x86_64.gz: kfreebsd-mfsroot.x86_64.img + gzip < $< > $@ + +bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/mfsroot.gz=kfreebsd-mfsroot.x86_64.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +knetbsd.miniroot-image.i386.gz: knetbsd.miniroot-image.i386.img + gzip < $< > $@ + +bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +knetbsd.miniroot-image.x86_64.gz: knetbsd.miniroot-image.x86_64.img + gzip < $< > $@ + +bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +BOOTCHECKS= + +BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64 + +BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 + +# Crashes because memory at 0-0x1000 is occupied +BOOTCHECKS += bootcheck-kfreebsd-i386 bootcheck-knetbsd-x86_64 + +# Requires ACPI +BOOTCHECKS += bootcheck-kfreebsd-x86_64 +# Crashes early on non-BIOS +BOOTCHECKS += bootcheck-knetbsd-i386 + + +.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ + bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ + bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 + +# Randomly generated +SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d +# tianocore cd access is very slow +BOOTCHECK_TIMEOUT=180 + +bootcheck: $(BOOTCHECKS) diff --git a/tests/boot/kfreebsd.cfg b/grub-core/tests/boot/kfreebsd.cfg similarity index 100% rename from tests/boot/kfreebsd.cfg rename to grub-core/tests/boot/kfreebsd.cfg diff --git a/tests/boot/kfreebsd.init-i386.S b/grub-core/tests/boot/kfreebsd.init-i386.S similarity index 100% rename from tests/boot/kfreebsd.init-i386.S rename to grub-core/tests/boot/kfreebsd.init-i386.S diff --git a/tests/boot/kfreebsd.init-x86_64.S b/grub-core/tests/boot/kfreebsd.init-x86_64.S similarity index 100% rename from tests/boot/kfreebsd.init-x86_64.S rename to grub-core/tests/boot/kfreebsd.init-x86_64.S diff --git a/tests/boot/knetbsd.cfg b/grub-core/tests/boot/knetbsd.cfg similarity index 100% rename from tests/boot/knetbsd.cfg rename to grub-core/tests/boot/knetbsd.cfg diff --git a/tests/boot/knetbsd.init-i386.S b/grub-core/tests/boot/knetbsd.init-i386.S similarity index 100% rename from tests/boot/knetbsd.init-i386.S rename to grub-core/tests/boot/knetbsd.init-i386.S diff --git a/tests/boot/knetbsd.init-x86_64.S b/grub-core/tests/boot/knetbsd.init-x86_64.S similarity index 100% rename from tests/boot/knetbsd.init-x86_64.S rename to grub-core/tests/boot/knetbsd.init-x86_64.S diff --git a/tests/boot/linux.cfg b/grub-core/tests/boot/linux.cfg similarity index 100% rename from tests/boot/linux.cfg rename to grub-core/tests/boot/linux.cfg diff --git a/tests/boot/linux.init-i386.S b/grub-core/tests/boot/linux.init-i386.S similarity index 100% rename from tests/boot/linux.init-i386.S rename to grub-core/tests/boot/linux.init-i386.S diff --git a/tests/boot/linux.init-x86_64.S b/grub-core/tests/boot/linux.init-x86_64.S similarity index 100% rename from tests/boot/linux.init-x86_64.S rename to grub-core/tests/boot/linux.init-x86_64.S diff --git a/tests/boot/linux16.cfg b/grub-core/tests/boot/linux16.cfg similarity index 100% rename from tests/boot/linux16.cfg rename to grub-core/tests/boot/linux16.cfg diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in index 09847db2b..e21cc95f4 100644 --- a/tests/util/grub-shell.in +++ b/tests/util/grub-shell.in @@ -164,7 +164,7 @@ if [ x$boot = xcoreboot ]; then device=cdrom fi -${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} ${bootdev} | tr -d "\r" +${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} ${bootdev} | cat | tr -d "\r" rm -f "${isofile}" "${imgfile}" rm -rf "${rom_directory}" if [ x$boot = xcoreboot ]; then From 1e82303f1d8aed2e00920e09f725c2fa3c38c89e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 25 Aug 2010 20:34:07 +0200 Subject: [PATCH 215/271] multiboot and multiboot2 bootchecks --- Makefile.am | 16 +++++- grub-core/tests/boot/multiboot.S | 89 +++++++++++++++++++++++++++++ grub-core/tests/boot/multiboot.cfg | 4 ++ grub-core/tests/boot/multiboot2.cfg | 4 ++ 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 grub-core/tests/boot/multiboot.S create mode 100644 grub-core/tests/boot/multiboot.cfg create mode 100644 grub-core/tests/boot/multiboot2.cfg diff --git a/Makefile.am b/Makefile.am index 9988c4099..f948a7a2f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -126,6 +126,12 @@ linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" +multiboot.elf: $(srcdir)/grub-core/tests/boot/multiboot.S + $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include + +multiboot2.elf: $(srcdir)/grub-core/tests/boot/multiboot.S + $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DMULTIBOOT2=1 + kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ @@ -200,11 +206,19 @@ bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(s bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-multiboot: multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/multiboot.elf=multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-multiboot2: multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/multiboot2.elf=multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + BOOTCHECKS= +BOOTCHECKS += bootcheck-multiboot bootcheck-multiboot2 + BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64 -BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 +BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 # Crashes because memory at 0-0x1000 is occupied BOOTCHECKS += bootcheck-kfreebsd-i386 bootcheck-knetbsd-x86_64 diff --git a/grub-core/tests/boot/multiboot.S b/grub-core/tests/boot/multiboot.S new file mode 100644 index 000000000..b9c0059c0 --- /dev/null +++ b/grub-core/tests/boot/multiboot.S @@ -0,0 +1,89 @@ +#define ASM_FILE 1 +#ifdef MULTIBOOT2 +#include +#else +#include +#endif + +#define SHUTDOWN_PORT 0x8900 + + .text + /* Align 32 bits boundary. */ + .align 8 + +#ifdef MULTIBOOT2 + /* Multiboot header. */ +multiboot_header: + /* magic */ + .long MULTIBOOT2_HEADER_MAGIC + /* ISA: i386 */ + .long MULTIBOOT_ARCHITECTURE_I386 + /* Header length. */ + .long multiboot_header_end - multiboot_header + /* checksum */ + .long -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT_ARCHITECTURE_I386 + (multiboot_header_end - multiboot_header)) + .short MULTIBOOT_HEADER_TAG_END + .short 0 + .long 8 +multiboot_header_end: +#else + /* Multiboot header. */ +multiboot_header: + /* magic */ + .long MULTIBOOT_HEADER_MAGIC + /* flags */ + .long 0 + /* checksum */ + .long -MULTIBOOT_HEADER_MAGIC +#endif + + .global start +portmsg: + xorl %eax, %eax +1: + movb 0(%esi), %al + test %eax, %eax + jz 1f + outb %al, %dx + incl %esi + jmp 1b +1: + ret + +serialmsg: +1: + movb 0(%esi), %bl + testb %bl, %bl + jz 1f + movw $0x3fd, %dx +2: + inb %dx, %al + testb $0x20, %al + jz 2b + + movw $0x3f8, %dx + movb %bl, %al + outb %al, %dx + incl %esi + jmp 1b +1: + ret + + .globl _start +_start: + lea message, %esi + call serialmsg + lea shutdown, %esi + movw $SHUTDOWN_PORT, %dx + call portmsg + +1: + hlt + jmp 1b + +shutdown: + .ascii "Shutdown" + .byte 0 +message: + .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" + .byte 0 diff --git a/grub-core/tests/boot/multiboot.cfg b/grub-core/tests/boot/multiboot.cfg new file mode 100644 index 000000000..0942ec67c --- /dev/null +++ b/grub-core/tests/boot/multiboot.cfg @@ -0,0 +1,4 @@ +multiboot /multiboot.elf +boot +# Shouln't happen +halt diff --git a/grub-core/tests/boot/multiboot2.cfg b/grub-core/tests/boot/multiboot2.cfg new file mode 100644 index 000000000..2bec9e6d1 --- /dev/null +++ b/grub-core/tests/boot/multiboot2.cfg @@ -0,0 +1,4 @@ +multiboot2 /multiboot2.elf +boot +# Shouln't happen +halt From 89e07694dc1716d7c296fa151f4251e5e619a9d8 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 25 Aug 2010 21:19:45 +0200 Subject: [PATCH 216/271] Remove grub_dl_unload_all. It's unnecessary and causes trouble --- grub-core/kern/dl.c | 17 ----------------- grub-core/kern/i386/pc/startup.S | 2 -- include/grub/dl.h | 1 - 3 files changed, 20 deletions(-) diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c index 09849f174..02d785b9b 100644 --- a/grub-core/kern/dl.c +++ b/grub-core/kern/dl.c @@ -682,20 +682,3 @@ grub_dl_unload_unneeded (void) p = p->next; } } - -/* Unload all modules. */ -void -grub_dl_unload_all (void) -{ - while (grub_dl_head) - { - grub_dl_t p; - - grub_dl_unload_unneeded (); - - /* Force to decrement the ref count. This will purge pre-loaded - modules and manually inserted modules. */ - for (p = grub_dl_head; p; p = p->next) - p->ref_count--; - } -} diff --git a/grub-core/kern/i386/pc/startup.S b/grub-core/kern/i386/pc/startup.S index a73e27ad6..7ae901712 100644 --- a/grub-core/kern/i386/pc/startup.S +++ b/grub-core/kern/i386/pc/startup.S @@ -546,8 +546,6 @@ FUNCTION(grub_chainloader_real_boot) pushl %edx pushl %eax - call EXT_C(grub_dl_unload_all) - /* Turn off Gate A20 */ xorl %eax, %eax call EXT_C(grub_gate_a20) diff --git a/include/grub/dl.h b/include/grub/dl.h index 9db610467..afc4af41a 100644 --- a/include/grub/dl.h +++ b/include/grub/dl.h @@ -101,7 +101,6 @@ grub_dl_t EXPORT_FUNC(grub_dl_load) (const char *name); grub_dl_t grub_dl_load_core (void *addr, grub_size_t size); int EXPORT_FUNC(grub_dl_unload) (grub_dl_t mod); void grub_dl_unload_unneeded (void); -void grub_dl_unload_all (void); int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); extern grub_dl_t EXPORT_VAR(grub_dl_head); From e8ea4b8424953e4b43044488556a433b8e10a9a2 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 25 Aug 2010 21:55:48 +0200 Subject: [PATCH 217/271] pc-chainloader bootcheck --- Makefile.am | 13 +++++ grub-core/tests/boot/pc-chainloader.S | 63 +++++++++++++++++++++++++ grub-core/tests/boot/pc-chainloader.cfg | 4 ++ 3 files changed, 80 insertions(+) create mode 100644 grub-core/tests/boot/pc-chainloader.S create mode 100644 grub-core/tests/boot/pc-chainloader.cfg diff --git a/Makefile.am b/Makefile.am index f948a7a2f..b97f012bc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -129,6 +129,12 @@ linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S multiboot.elf: $(srcdir)/grub-core/tests/boot/multiboot.S $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include +pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/pc-chainloader.S + $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x7c00 -m32 + +pc-chainloader.bin: pc-chainloader.elf + $(OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; + multiboot2.elf: $(srcdir)/grub-core/tests/boot/multiboot.S $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DMULTIBOOT2=1 @@ -212,8 +218,15 @@ bootcheck-multiboot: multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg bootcheck-multiboot2: multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/multiboot2.elf=multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-pc-chainloader: pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/pc-chainloader.bin=pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + BOOTCHECKS= +if COND_i386_pc +BOOTCHECKS += bootcheck-pc-chainloader +endif + BOOTCHECKS += bootcheck-multiboot bootcheck-multiboot2 BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64 diff --git a/grub-core/tests/boot/pc-chainloader.S b/grub-core/tests/boot/pc-chainloader.S new file mode 100644 index 000000000..fc7429940 --- /dev/null +++ b/grub-core/tests/boot/pc-chainloader.S @@ -0,0 +1,63 @@ + +#define SHUTDOWN_PORT 0x8900 + + .text + .globl _start +_start: +base: + .code16 + jmp cont + +portmsg: + xorw %ax, %ax +1: + movb 0(%si), %al + test %ax, %ax + jz 1f + outb %al, %dx + incw %si + jmp 1b +1: + ret + +serialmsg: +1: + movb 0(%si), %bl + testb %bl, %bl + jz 1f + movw $0x3fd, %dx +2: + inb %dx, %al + testb $0x20, %al + jz 2b + + movw $0x3f8, %dx + movb %bl, %al + outb %al, %dx + incw %si + jmp 1b +1: + ret + +cont: + xorw %ax, %ax + movw %ax, %ds + lea message, %si + call serialmsg + lea shutdown, %si + movw $SHUTDOWN_PORT, %dx + call portmsg + +1: + hlt + jmp 1b + +shutdown: + .ascii "Shutdown" + .byte 0 +message: + .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" + .byte 0 + + . = base + 510 + .short 0xaa55 \ No newline at end of file diff --git a/grub-core/tests/boot/pc-chainloader.cfg b/grub-core/tests/boot/pc-chainloader.cfg new file mode 100644 index 000000000..1e80a5b96 --- /dev/null +++ b/grub-core/tests/boot/pc-chainloader.cfg @@ -0,0 +1,4 @@ +chainloader /pc-chainloader.bin +boot +# Shouln't happen +halt From e35e46fce182084c5719a6e67433f061fa5358b0 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 25 Aug 2010 22:32:17 +0200 Subject: [PATCH 218/271] * grub-core/term/ieee1275/ofconsole.c (put): Correct prototype. (readkey): Likewise. --- ChangeLog | 5 +++++ grub-core/term/ieee1275/ofconsole.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1f4f3359e..e46c027b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-25 Vladimir Serbinenko + + * grub-core/term/ieee1275/ofconsole.c (put): Correct prototype. + (readkey): Likewise. + 2010-08-25 BVK Chaitanya Multiple variable names support to "export" command. diff --git a/grub-core/term/ieee1275/ofconsole.c b/grub-core/term/ieee1275/ofconsole.c index 604906ceb..9ec85631b 100644 --- a/grub-core/term/ieee1275/ofconsole.c +++ b/grub-core/term/ieee1275/ofconsole.c @@ -55,7 +55,7 @@ static struct color colors[] = }; static void -put (const int c) +put (struct grub_term_output *term __attribute__ ((unused)), const int c) { char chr = c; @@ -63,7 +63,7 @@ put (const int c) } static int -readkey (void) +readkey (struct grub_term_input *term __attribute__ ((unused))) { grub_uint8_t c; grub_ssize_t actual = 0; From 8218d8b6e804504b8815e4c1becf86e4c40050c8 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 25 Aug 2010 22:34:15 +0200 Subject: [PATCH 219/271] Fix efiemu compilation on ieee1275 --- grub-core/Makefile.core.def | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index b91609826..62c08928a 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -772,7 +772,10 @@ module = { common = efiemu/main.c; common = efiemu/i386/loadcore32.c; common = efiemu/i386/loadcore64.c; - common = efiemu/i386/pc/cfgtables.c; + i386_pc = efiemu/i386/pc/cfgtables.c; + i386_coreboot = efiemu/i386/pc/cfgtables.c; + i386_multiboot = efiemu/i386/pc/cfgtables.c; + i386_ieee1275 = efiemu/i386/nocfgtables.c; common = efiemu/mm.c; common = efiemu/loadcore_common.c; common = efiemu/symbols.c; @@ -789,7 +792,7 @@ module = { extra_dist = efiemu/runtime/efiemu.c; enable = i386_pc; - enable = i386_coeboot; + enable = i386_coreboot; enable = i386_ieee1275; enable = i386_multiboot; }; From ecde61b4909e2a4683bf17ee30232994df0b5712 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 26 Aug 2010 02:46:30 +0200 Subject: [PATCH 220/271] openbsd ramdisk support --- grub-core/loader/i386/bsd.c | 70 ++++++++++++++++++++- grub-core/loader/i386/bsdXX.c | 114 ++++++++++++++++++++++++++++++++++ include/grub/i386/bsd.h | 16 +++++ 3 files changed, 197 insertions(+), 3 deletions(-) diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c index 6399cb1e3..770c6f278 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -67,6 +67,7 @@ static grub_uint32_t bootflags; static int is_elf_kernel, is_64bit; static grub_uint32_t openbsd_root; struct grub_relocator *relocator = NULL; +static struct grub_openbsd_ramdisk_descriptor openbsd_ramdisk; struct bsd_tag { @@ -1253,7 +1254,13 @@ grub_bsd_load_elf (grub_elf_t elf) kern_chunk_src = get_virtual_current_address (ch); - return grub_elf32_load (elf, grub_bsd_elf32_hook, 0, 0); + err = grub_elf32_load (elf, grub_bsd_elf32_hook, 0, 0); + if (err) + return err; + if (kernel_type != KERNEL_TYPE_OPENBSD) + return GRUB_ERR_NONE; + return grub_openbsd_find_ramdisk32 (elf->file, kern_start, + kern_chunk_src, &openbsd_ramdisk); } else if (grub_elf_is_elf64 (elf)) { @@ -1290,7 +1297,13 @@ grub_bsd_load_elf (grub_elf_t elf) kern_chunk_src = get_virtual_current_address (ch); } - return grub_elf64_load (elf, grub_bsd_elf64_hook, 0, 0); + err = grub_elf64_load (elf, grub_bsd_elf64_hook, 0, 0); + if (err) + return err; + if (kernel_type != KERNEL_TYPE_OPENBSD) + return GRUB_ERR_NONE; + return grub_openbsd_find_ramdisk64 (elf->file, kern_start, + kern_chunk_src, &openbsd_ramdisk); } else return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); @@ -1306,6 +1319,8 @@ grub_bsd_load (int argc, char *argv[]) grub_loader_unset (); + grub_memset (&openbsd_ramdisk, 0, sizeof (openbsd_ramdisk)); + if (argc == 0) { grub_error (GRUB_ERR_BAD_ARGUMENT, "no kernel specified"); @@ -1874,11 +1889,55 @@ grub_cmd_freebsd_module_elf (grub_command_t cmd __attribute__ ((unused)), return err; } +static grub_err_t +grub_cmd_openbsd_ramdisk (grub_command_t cmd __attribute__ ((unused)), + int argc, char *args[]) +{ + grub_file_t file; + grub_size_t size; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required"); + + if (kernel_type != KERNEL_TYPE_OPENBSD) + return grub_error (GRUB_ERR_BAD_OS, "no kOpenBSD loaded"); + + if (!openbsd_ramdisk.max_size) + return grub_error (GRUB_ERR_BAD_OS, "your kOpenBSD doesn't support ramdisk"); + + file = grub_gzfile_open (args[0], 1); + if (! file) + return grub_error (GRUB_ERR_FILE_NOT_FOUND, + "couldn't load ramdisk"); + + size = grub_file_size (file); + + if (size > openbsd_ramdisk.max_size) + { + grub_file_close (file); + return grub_error (GRUB_ERR_BAD_OS, "your kOpenBSD supports ramdisk only" + " up to %u bytes, however you supplied a %u bytes one", + openbsd_ramdisk.max_size, size); + } + + if (grub_file_read (file, openbsd_ramdisk.target, size) + != (grub_ssize_t) (size)) + { + grub_file_close (file); + grub_error_push (); + return grub_error (GRUB_ERR_BAD_OS, "couldn't read file %s", args[0]); + } + grub_memset (openbsd_ramdisk.target + size, 0, + openbsd_ramdisk.max_size - size); + *openbsd_ramdisk.size = ALIGN_UP (size, 512); + + return GRUB_ERR_NONE; +} static grub_extcmd_t cmd_freebsd, cmd_openbsd, cmd_netbsd; static grub_command_t cmd_freebsd_loadenv, cmd_freebsd_module; static grub_command_t cmd_netbsd_module, cmd_freebsd_module_elf; -static grub_command_t cmd_netbsd_module_elf; +static grub_command_t cmd_netbsd_module_elf, cmd_openbsd_ramdisk; GRUB_MOD_INIT (bsd) { @@ -1910,6 +1969,10 @@ GRUB_MOD_INIT (bsd) grub_register_command ("kfreebsd_module_elf", grub_cmd_freebsd_module_elf, 0, N_("Load FreeBSD kernel module (ELF).")); + cmd_openbsd_ramdisk = grub_register_command ("kopenbsd_ramdisk", + grub_cmd_openbsd_ramdisk, 0, + "Load kOpenBSD ramdisk. "); + my_mod = mod; } @@ -1924,6 +1987,7 @@ GRUB_MOD_FINI (bsd) grub_unregister_command (cmd_netbsd_module); grub_unregister_command (cmd_freebsd_module_elf); grub_unregister_command (cmd_netbsd_module_elf); + grub_unregister_command (cmd_openbsd_ramdisk); grub_bsd_unload (); } diff --git a/grub-core/loader/i386/bsdXX.c b/grub-core/loader/i386/bsdXX.c index f053e7e13..073f01da2 100644 --- a/grub-core/loader/i386/bsdXX.c +++ b/grub-core/loader/i386/bsdXX.c @@ -503,4 +503,118 @@ SUFFIX (grub_netbsd_load_elf_meta) (struct grub_relocator *relocator, return GRUB_ERR_NONE; } +grub_err_t +SUFFIX(grub_openbsd_find_ramdisk) (grub_file_t file, + grub_addr_t kern_start, + void *kern_chunk_src, + struct grub_openbsd_ramdisk_descriptor *desc) +{ + unsigned symoff, stroff, symsize, strsize, symentsize; + { + grub_err_t err; + Elf_Ehdr e; + Elf_Shdr *s; + char *shdr; + + err = read_headers (file, &e, &shdr); + if (err) + return err; + + for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) (shdr + + e.e_shnum * e.e_shentsize); + s = (Elf_Shdr *) ((char *) s + e.e_shentsize)) + if (s->sh_type == SHT_SYMTAB) + break; + if (s >= (Elf_Shdr *) ((char *) shdr + e.e_shnum * e.e_shentsize)) + { + grub_free (shdr); + return GRUB_ERR_NONE; + } + + symsize = s->sh_size; + symentsize = s->sh_entsize; + symoff = s->sh_offset; + + s = (Elf_Shdr *) (shdr + e.e_shentsize * s->sh_link); + stroff = s->sh_offset; + strsize = s->sh_size; + grub_free (shdr); + } + { + Elf_Sym *syms, *sym, *imagesym = NULL, *sizesym = NULL; + unsigned i; + char *strs; + + syms = grub_malloc (symsize); + if (!syms) + return grub_errno; + + if (grub_file_seek (file, symoff) == (grub_off_t) -1) + { + grub_free (syms); + return grub_errno; + } + if (grub_file_read (file, syms, symsize) != (grub_ssize_t) symsize) + { + grub_free (syms); + if (! grub_errno) + return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); + return grub_errno; + } + + strs = grub_malloc (strsize); + if (!strs) + { + grub_free (syms); + return grub_errno; + } + + if (grub_file_seek (file, stroff) == (grub_off_t) -1) + return grub_errno; + if (grub_file_read (file, strs, strsize) != (grub_ssize_t) strsize) + { + grub_free (syms); + grub_free (strs); + if (! grub_errno) + return grub_error (GRUB_ERR_BAD_OS, "invalid ELF"); + return grub_errno; + } + + for (i = 0, sym = syms; i < symsize / symentsize; + i++, sym = (Elf_Sym *) ((char *) sym + symentsize)) + { + if (ELF_ST_TYPE (sym->st_info) != STT_OBJECT) + continue; + if (!sym->st_name) + continue; + if (grub_strcmp (strs + sym->st_name, "rd_root_image") == 0) + imagesym = sym; + if (grub_strcmp (strs + sym->st_name, "rd_root_size") == 0) + sizesym = sym; + if (imagesym && sizesym) + break; + } + if (!imagesym || !sizesym) + { + grub_free (syms); + grub_free (strs); + return GRUB_ERR_NONE; + } + if (sizeof (*desc->size) != sizesym->st_size) + { + grub_free (syms); + grub_free (strs); + return grub_error (GRUB_ERR_BAD_OS, "unexpected size of rd_root_size"); + } + desc->max_size = imagesym->st_size; + desc->target = (imagesym->st_value & 0xFFFFFF) - kern_start + + (grub_uint8_t *) kern_chunk_src; + desc->size = (grub_uint32_t *) ((sizesym->st_value & 0xFFFFFF) - kern_start + + (grub_uint8_t *) kern_chunk_src); + grub_free (syms); + grub_free (strs); + + return GRUB_ERR_NONE; + } +} diff --git a/include/grub/i386/bsd.h b/include/grub/i386/bsd.h index a6abd7e90..53008cdaf 100644 --- a/include/grub/i386/bsd.h +++ b/include/grub/i386/bsd.h @@ -99,6 +99,22 @@ grub_err_t grub_freebsd_add_meta_module (char *filename, char *type, int argc, char **argv, grub_addr_t addr, grub_uint32_t size); +struct grub_openbsd_ramdisk_descriptor +{ + grub_size_t max_size; + grub_uint8_t *target; + grub_uint32_t *size; +}; + +grub_err_t grub_openbsd_find_ramdisk32 (grub_file_t file, + grub_addr_t kern_start, + void *kern_chunk_src, + struct grub_openbsd_ramdisk_descriptor *desc); +grub_err_t grub_openbsd_find_ramdisk64 (grub_file_t file, + grub_addr_t kern_start, + void *kern_chunk_src, + struct grub_openbsd_ramdisk_descriptor *desc); + extern grub_uint8_t grub_bsd64_trampoline_start, grub_bsd64_trampoline_end; extern grub_uint32_t grub_bsd64_trampoline_selfjump; extern grub_uint32_t grub_bsd64_trampoline_gdt; From 671404469ce9e624395e136b2bd67d06dd8a8ad9 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Fri, 27 Aug 2010 03:44:55 +0200 Subject: [PATCH 221/271] Handle USB pendrives exposed as floppies. * grub-core/boot/i386/pc/boot.S: Check LBA even on what appears to be floppy. * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_open): Likewise. Check for partitions on all devices. --- ChangeLog | 9 +++++++++ grub-core/boot/i386/pc/boot.S | 4 ---- grub-core/disk/i386/pc/biosdisk.c | 4 ++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index e46c027b0..7043faf97 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2010-08-27 Vladimir Serbinenko + + Handle USB pendrives exposed as floppies. + + * grub-core/boot/i386/pc/boot.S: Check LBA even on what appears to be + floppy. + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_open): Likewise. + Check for partitions on all devices. + 2010-08-25 Vladimir Serbinenko * grub-core/term/ieee1275/ofconsole.c (put): Correct prototype. diff --git a/grub-core/boot/i386/pc/boot.S b/grub-core/boot/i386/pc/boot.S index 4afc57349..6b16a913a 100644 --- a/grub-core/boot/i386/pc/boot.S +++ b/grub-core/boot/i386/pc/boot.S @@ -153,10 +153,6 @@ real_start: /* set %si to the disk address packet */ movw $disk_address_packet, %si - /* do not probe LBA if the drive is a floppy */ - testb $GRUB_BOOT_MACHINE_BIOS_HD_FLAG, %dl - jz LOCAL(chs_mode) - /* check if LBA is supported */ movb $0x41, %ah movw $0x55aa, %bx diff --git a/grub-core/disk/i386/pc/biosdisk.c b/grub-core/disk/i386/pc/biosdisk.c index f82f91ff0..a00236e50 100644 --- a/grub-core/disk/i386/pc/biosdisk.c +++ b/grub-core/disk/i386/pc/biosdisk.c @@ -107,7 +107,7 @@ grub_biosdisk_open (const char *name, grub_disk_t disk) if (drive < 0) return grub_errno; - disk->has_partitions = ((drive & 0x80) && (drive != cd_drive)); + disk->has_partitions = 1; disk->id = drive; data = (struct grub_biosdisk_data *) grub_zalloc (sizeof (*data)); @@ -123,7 +123,7 @@ grub_biosdisk_open (const char *name, grub_disk_t disk) /* TODO: get the correct size. */ total_sectors = GRUB_DISK_SIZE_UNKNOWN; } - else if (drive & 0x80) + else { /* HDD */ int version; From e95616a173849b5c89faeb77c53628cccbc018b5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 03:17:07 +0200 Subject: [PATCH 222/271] REmove leftover declaration --- grub-core/loader/i386/linux.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c index e05225f25..debcdb71f 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -531,11 +531,6 @@ grub_linux_setup_video (struct linux_kernel_params *params) return GRUB_ERR_NONE; } -#ifdef __x86_64__ -extern grub_uint8_t grub_linux_trampoline_start[]; -extern grub_uint8_t grub_linux_trampoline_end[]; -#endif - static grub_err_t grub_linux_boot (void) { From dc1bff761fcb5dcb7690268878037b723b1c6136 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 03:17:59 +0200 Subject: [PATCH 223/271] Simplify knetbsd bootcheck by using specfile --- Makefile.am | 9 +++-- grub-core/tests/boot/kbsd.spec.txt | 3 ++ grub-core/tests/boot/knetbsd.init-i386.S | 45 ---------------------- grub-core/tests/boot/knetbsd.init-x86_64.S | 45 ---------------------- 4 files changed, 9 insertions(+), 93 deletions(-) create mode 100644 grub-core/tests/boot/kbsd.spec.txt diff --git a/Makefile.am b/Makefile.am index b97f012bc..4b0ef7f4c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -159,7 +159,10 @@ linux-initramfs.x86_64: linux.init.x86_64 Makefile kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR -knetbsd.image.i386: knetbsd.init.i386 +knetbsd.image.i386: knetbsd.init.i386 $(srcdir)/grub-core/tests/boot/kbsd.spec.txt + TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +kopenbsd.image.i386: kopenbsd.init.i386 TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 @@ -168,8 +171,8 @@ knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd kfreebsd-mfsroot.x86_64.img: kfreebsd.init.x86_64 Makefile TDIR=`mktemp -d`; mkdir $$TDIR/dev; mkdir $$TDIR/sbin; cp $< $$TDIR/sbin/init; makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR; rm -rf $$TDIR -knetbsd.image.x86_64: knetbsd.init.x86_64 - TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR +knetbsd.image.x86_64: knetbsd.init.x86_64 $(srcdir)/grub-core/tests/boot/kbsd.spec.txt + TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR knetbsd.miniroot-image.x86_64.img: knetbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 $@ diff --git a/grub-core/tests/boot/kbsd.spec.txt b/grub-core/tests/boot/kbsd.spec.txt new file mode 100644 index 000000000..af171bc56 --- /dev/null +++ b/grub-core/tests/boot/kbsd.spec.txt @@ -0,0 +1,3 @@ +. type=dir + dev type=dir + console type=char device=0 mode=666 gid=0 uid=0 diff --git a/grub-core/tests/boot/knetbsd.init-i386.S b/grub-core/tests/boot/knetbsd.init-i386.S index c751421ba..587b4f41f 100644 --- a/grub-core/tests/boot/knetbsd.init-i386.S +++ b/grub-core/tests/boot/knetbsd.init-i386.S @@ -22,8 +22,6 @@ #define SYSCALL_WRITE 4 #define SYSCALL_RESET 208 #define SYSCALL_EXIT 1 -#define SYSCALL_MKNOD 14 -#define SYSCALL_MOUNT 410 #define SYSCALL_INT 0x80 #define RESET_NOSYNC 0x4 @@ -34,27 +32,6 @@ .global start,_start start: _start: - /* mount. */ - movl $SYSCALL_MOUNT, %eax - push $(tmpfs_args_end - tmpfs_args) - push $tmpfs_args - push $0 - push $devfsdir - push $devfstype - pushl $0 - int $SYSCALL_INT - addl $20, %esp - - /* mknod. */ - movl $SYSCALL_MKNOD, %eax - pushl $0 - pushl $0x2140 - leal device, %ebx - pushl %ebx - pushl $0 - int $SYSCALL_INT - addl $16, %esp - /* open. */ movl $SYSCALL_OPEN, %eax pushl $FLAGS_NONE @@ -107,25 +84,3 @@ device: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: -devfstype: - .ascii "tmpfs" - .byte 0 -devfsdir: - .ascii "/dev" - .byte 0 -tmpfs_args: - /* Version. */ - .long 1 - - /* Maximum inodes. */ - .quad 0 - /* Maximum size. */ - .quad 0 - - /* UID */ - .long 0 - /* GID */ - .long 0 - /* Mode */ - .long 0777 -tmpfs_args_end: \ No newline at end of file diff --git a/grub-core/tests/boot/knetbsd.init-x86_64.S b/grub-core/tests/boot/knetbsd.init-x86_64.S index 05a494594..1a19f3603 100644 --- a/grub-core/tests/boot/knetbsd.init-x86_64.S +++ b/grub-core/tests/boot/knetbsd.init-x86_64.S @@ -22,9 +22,7 @@ #define SYSCALL_WRITE 4 #define SYSCALL_RESET 208 #define SYSCALL_EXIT 1 -#define SYSCALL_MKNOD 14 #define SYSCALL_ARCH 165 -#define SYSCALL_MOUNT 410 #define SYSCALL_INT 0x80 #define SYSCALL_ARCH_IOPL 2 @@ -37,22 +35,6 @@ .global start,_start start: _start: - /* mount. */ - movq $SYSCALL_MOUNT, %rax - movq $devfstype, %rdi - movq $devfsdir, %rsi - movq $0, %rdx - movq $tmpfs_args, %r10 - movq $(tmpfs_args_end - tmpfs_args), %r8 - syscall - - /* mknod. */ - movq $SYSCALL_MKNOD, %rax - leaq device, %rdi - movq $0x2140, %rsi - movq $0, %rdx - syscall - /* open. */ movq $SYSCALL_OPEN, %rax leaq device, %rdi @@ -119,32 +101,5 @@ device: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: -devfstype: - .ascii "tmpfs" - .byte 0 -devfsdir: - .ascii "/dev" - .byte 0 -tmpfs_args: - /* Version. */ - .long 1 - - /* Alignment long. */ - .long 0 - - /* Maximum inodes. */ - .quad 0 - /* Maximum size. */ - .quad 0 - - /* UID */ - .long 0 - /* GID */ - .long 0 - /* Mode */ - .long 0777 - /* Alignment long. */ - .long 0 -tmpfs_args_end: iopl_arg: .long 3 \ No newline at end of file From 4619710a056e841fabd43e302347d5901e55e0e7 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 11:32:49 +0200 Subject: [PATCH 224/271] Don't try to malloc if grub_mm_base is 0 --- grub-core/kern/mm.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c index fd4fde81c..dec07bc1b 100644 --- a/grub-core/kern/mm.c +++ b/grub-core/kern/mm.c @@ -284,6 +284,9 @@ grub_memalign (grub_size_t align, grub_size_t size) grub_size_t n = ((size + GRUB_MM_ALIGN - 1) >> GRUB_MM_ALIGN_LOG2) + 1; int count = 0; + if (!grub_mm_base) + goto fail; + align = (align >> GRUB_MM_ALIGN_LOG2); if (align == 0) align = 1; @@ -318,6 +321,7 @@ grub_memalign (grub_size_t align, grub_size_t size) break; } + fail: grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); return 0; } From 4aa5499064f6781699846b2272dd9ea67ee06d5a Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 11:34:05 +0200 Subject: [PATCH 225/271] Prevent deadloop in term.c in case of out-of-memory --- grub-core/normal/charset.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c index fd377e1c6..b7f775c4f 100644 --- a/grub-core/normal/charset.c +++ b/grub-core/normal/charset.c @@ -297,13 +297,10 @@ grub_utf8_to_ucs4_alloc (const char *msg, grub_uint32_t **unicode_msg, { grub_size_t msg_len = grub_strlen (msg); - *unicode_msg = grub_malloc (grub_strlen (msg) * sizeof (grub_uint32_t)); + *unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t)); if (!*unicode_msg) - { - grub_printf ("utf8_to_ucs4 ERROR1: %s", msg); - return -1; - } + return -1; msg_len = grub_utf8_to_ucs4 (*unicode_msg, msg_len, (grub_uint8_t *) msg, -1, 0); @@ -1215,6 +1212,8 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical, struct grub_unicode_glyph *visual_ptr; *visual_out = visual_ptr = grub_malloc (2 * sizeof (visual_ptr[0]) * logical_len); + if (!visual_ptr) + return -1; for (ptr = logical; ptr <= logical + logical_len; ptr++) { if (ptr == logical + logical_len || *ptr == '\n') From d1dce5d35684d23b4ce4af0b224c9a7005e3973e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 11:34:33 +0200 Subject: [PATCH 226/271] Add DEBUG_RELOCATOR parts --- grub-core/lib/relocator.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c index 9f9927929..0acd59b94 100644 --- a/grub-core/lib/relocator.c +++ b/grub-core/lib/relocator.c @@ -1283,6 +1283,25 @@ grub_relocator_alloc_chunk_addr (struct grub_relocator *rel, chunk->srcv = grub_map_memory (chunk->src, chunk->size); *out = chunk; +#ifdef DEBUG_RELOCATOR + { + grub_mm_region_t r; + grub_mm_header_t p; + grub_memset (chunk->srcv, 0xfa, chunk->size); + for (r = grub_mm_base; r; r = r->next) + { + p = r->first; + do + { + if ((grub_addr_t) p < (grub_addr_t) (r + 1) + || (grub_addr_t) p >= (grub_addr_t) (r + 1) + r->size) + grub_fatal (__FILE__ ":%d: out of range pointer: %p\n", __LINE__, p); + p = p->next; + } + while (p != r->first); + } + } +#endif return GRUB_ERR_NONE; } @@ -1416,6 +1435,26 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, rel->chunks->next); chunk->srcv = grub_map_memory (chunk->src, chunk->size); *out = chunk; +#ifdef DEBUG_RELOCATOR + { + grub_mm_region_t r; + grub_mm_header_t p; + + grub_memset (chunk->srcv, 0xfa, chunk->size); + for (r = grub_mm_base; r; r = r->next) + { + p = r->first; + do + { + if ((grub_addr_t) p < (grub_addr_t) (r + 1) + || (grub_addr_t) p >= (grub_addr_t) (r + 1) + r->size) + grub_fatal (__FILE__ "%d: out of range pointer: %p\n", __LINE__, p); + p = p->next; + } + while (p != r->first); + } + } +#endif return GRUB_ERR_NONE; } From dcc953eecb077923049b6e6b50fbef3055122a2e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 11:35:02 +0200 Subject: [PATCH 227/271] Fallback to dumb printf if malloc failes --- grub-core/normal/term.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c index 4f5779abe..a5fdbe4e9 100644 --- a/grub-core/normal/term.c +++ b/grub-core/normal/term.c @@ -751,6 +751,34 @@ grub_xputs_normal (const char *str) if (!unicode_str) { grub_errno = GRUB_ERR_NONE; + for (; *str; str++) + { + grub_term_output_t term; + grub_uint32_t code = *str; + if (code > 0x7f) + code = '?'; + + FOR_ACTIVE_TERM_OUTPUTS(term) + { + struct grub_unicode_glyph c = + { + .base = code, + .variant = 0, + .attributes = 0, + .ncomb = 0, + .combining = 0, + .estimated_width = 1 + }; + + (term->putchar) (term, &c); + if (code == '\n') + { + c.base = '\r'; + (term->putchar) (term, &c); + } + } + } + return; } From 0f6a963e9b013eed61bc829dc5a49e6b5beeab99 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 14:51:54 +0200 Subject: [PATCH 228/271] kOpenBSD bootcheck --- Makefile.am | 16 +++++--- .../{knetbsd.init-i386.S => kbsd.init-i386.S} | 41 ++++++++++++++++++- grub-core/tests/boot/kopenbsd.cfg | 5 +++ grub-core/tests/boot/kopenbsdlabel.txt | 3 ++ 4 files changed, 59 insertions(+), 6 deletions(-) rename grub-core/tests/boot/{knetbsd.init-i386.S => kbsd.init-i386.S} (76%) create mode 100644 grub-core/tests/boot/kopenbsd.cfg create mode 100644 grub-core/tests/boot/kopenbsdlabel.txt diff --git a/Makefile.am b/Makefile.am index 4b0ef7f4c..35f93bfb6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -144,8 +144,11 @@ kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ -knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/knetbsd.init-i386.S - $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" +knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S + $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S + $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/knetbsd.init-x86_64.S $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" @@ -162,8 +165,8 @@ kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile knetbsd.image.i386: knetbsd.init.i386 $(srcdir)/grub-core/tests/boot/kbsd.spec.txt TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR -kopenbsd.image.i386: kopenbsd.init.i386 - TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR +kopenbsd.image.i386: kopenbsd.init.i386 $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt + TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 128k -f 10 -o minfree=0,version=1 $@ $$TDIR && bsdlabel -f -R $@ $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt && rm -rf $$TDIR || rm -f $@ knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@ @@ -195,7 +198,10 @@ knetbsd.miniroot-image.i386.gz: knetbsd.miniroot-image.i386.img gzip < $< > $@ bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg grub-shell - timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-kopenbsd-i386: kopenbsd.image.i386 $(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/ramdisk=kopenbsd.image.i386 --files=/kopenbsd=$(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null knetbsd.miniroot-image.x86_64.gz: knetbsd.miniroot-image.x86_64.img gzip < $< > $@ diff --git a/grub-core/tests/boot/knetbsd.init-i386.S b/grub-core/tests/boot/kbsd.init-i386.S similarity index 76% rename from grub-core/tests/boot/knetbsd.init-i386.S rename to grub-core/tests/boot/kbsd.init-i386.S index 587b4f41f..7011c79ff 100644 --- a/grub-core/tests/boot/knetbsd.init-i386.S +++ b/grub-core/tests/boot/kbsd.init-i386.S @@ -16,18 +16,29 @@ * along with GRUB. If not, see . */ +#ifdef TARGET_NETBSD +#define SYSCALL_RESET 208 +#elif defined (TARGET_OPENBSD) +#define SYSCALL_RESET 55 +#else +#error unknown target +#endif + #define MODE_RDRW 2 #define FLAGS_NONE 0 #define SYSCALL_OPEN 5 #define SYSCALL_WRITE 4 -#define SYSCALL_RESET 208 #define SYSCALL_EXIT 1 +#define SYSCALL_ARCH 165 #define SYSCALL_INT 0x80 +#define SYSCALL_ARCH_IOPL 2 #define RESET_NOSYNC 0x4 #define RESET_HALT 0x8 #define RESET_POWEROFF 0x800 +#define SHUTDOWN_PORT 0x8900 + .section ".init", "ax" .global start,_start start: @@ -53,6 +64,32 @@ _start: int $SYSCALL_INT addl $16, %esp + /* IOPL. */ + movl $SYSCALL_ARCH, %eax + pushl $iopl_arg + pushl $SYSCALL_ARCH_IOPL + pushl $0 + int $SYSCALL_INT + addl $12, %esp + + movw $SHUTDOWN_PORT, %dx + movb $'S', %al + outb %al, %dx + movb $'h', %al + outb %al, %dx + movb $'u', %al + outb %al, %dx + movb $'t', %al + outb %al, %dx + movb $'d', %al + outb %al, %dx + movb $'o', %al + outb %al, %dx + movb $'w', %al + outb %al, %dx + movb $'n', %al + outb %al, %dx + /* shutdown. */ movl $SYSCALL_RESET, %eax pushl $0 @@ -84,3 +121,5 @@ device: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: +iopl_arg: + .long 3 diff --git a/grub-core/tests/boot/kopenbsd.cfg b/grub-core/tests/boot/kopenbsd.cfg new file mode 100644 index 000000000..132bec4b6 --- /dev/null +++ b/grub-core/tests/boot/kopenbsd.cfg @@ -0,0 +1,5 @@ +kopenbsd /kopenbsd -h +kopenbsd_ramdisk /ramdisk +boot +# Shouln't happen +halt diff --git a/grub-core/tests/boot/kopenbsdlabel.txt b/grub-core/tests/boot/kopenbsdlabel.txt new file mode 100644 index 000000000..bb141133b --- /dev/null +++ b/grub-core/tests/boot/kopenbsdlabel.txt @@ -0,0 +1,3 @@ +# size offset fstype [fsize bsize bps/cpg] + a: 256 0 4.2BSD 0 0 1 + c: 256 0 unused 0 0 # "raw" part, don't edit From 4fc95be2e7206ca85a6b0ba1380b063f72c3f9cc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 14:52:25 +0200 Subject: [PATCH 229/271] fix grub-emu compilation --- include/grub/mm_private.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/grub/mm_private.h b/include/grub/mm_private.h index 2927f16c4..c2c4cb151 100644 --- a/include/grub/mm_private.h +++ b/include/grub/mm_private.h @@ -57,6 +57,8 @@ typedef struct grub_mm_region } *grub_mm_region_t; +#ifndef GRUB_MACHINE_EMU extern grub_mm_region_t EXPORT_VAR (grub_mm_base); +#endif #endif From 8e4ac346e86483619de8da601fb3fead85371f7f Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 15:05:26 +0200 Subject: [PATCH 230/271] OpenBSD64 bootcheck --- Makefile.am | 15 +++++++++++++-- .../{knetbsd.init-x86_64.S => kbsd.init-x86_64.S} | 6 ++++++ 2 files changed, 19 insertions(+), 2 deletions(-) rename grub-core/tests/boot/{knetbsd.init-x86_64.S => kbsd.init-x86_64.S} (95%) diff --git a/Makefile.am b/Makefile.am index 35f93bfb6..53439fd42 100644 --- a/Makefile.am +++ b/Makefile.am @@ -150,8 +150,11 @@ knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/knetbsd.init-x86_64.S - $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" +knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S + $(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S + $(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" linux-initramfs.i386: linux.init.i386 Makefile TDIR=`mktemp -d`; cp $< $$TDIR/init; (cd $$TDIR; echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@; rm -rf $$TDIR @@ -168,6 +171,9 @@ knetbsd.image.i386: knetbsd.init.i386 $(srcdir)/grub-core/tests/boot/kbsd.spec.t kopenbsd.image.i386: kopenbsd.init.i386 $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 128k -f 10 -o minfree=0,version=1 $@ $$TDIR && bsdlabel -f -R $@ $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt && rm -rf $$TDIR || rm -f $@ +kopenbsd.image.x86_64: kopenbsd.init.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt + TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 128k -f 10 -o minfree=0,version=1 $@ $$TDIR && bsdlabel -f -R $@ $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt && rm -rf $$TDIR || rm -f $@ + knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@ @@ -203,6 +209,9 @@ bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knet bootcheck-kopenbsd-i386: kopenbsd.image.i386 $(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/ramdisk=kopenbsd.image.i386 --files=/kopenbsd=$(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-kopenbsd-x86_64: kopenbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/kopenbsd.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/ramdisk=kopenbsd.image.x86_64 --files=/kopenbsd=$(GRUB_PAYLOADS_DIR)/kopenbsd.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + knetbsd.miniroot-image.x86_64.gz: knetbsd.miniroot-image.x86_64.img gzip < $< > $@ @@ -236,6 +245,8 @@ if COND_i386_pc BOOTCHECKS += bootcheck-pc-chainloader endif +BOOTCHECKS += bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 + BOOTCHECKS += bootcheck-multiboot bootcheck-multiboot2 BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64 diff --git a/grub-core/tests/boot/knetbsd.init-x86_64.S b/grub-core/tests/boot/kbsd.init-x86_64.S similarity index 95% rename from grub-core/tests/boot/knetbsd.init-x86_64.S rename to grub-core/tests/boot/kbsd.init-x86_64.S index 1a19f3603..58400db0d 100644 --- a/grub-core/tests/boot/knetbsd.init-x86_64.S +++ b/grub-core/tests/boot/kbsd.init-x86_64.S @@ -20,7 +20,13 @@ #define FLAGS_NONE 0 #define SYSCALL_OPEN 5 #define SYSCALL_WRITE 4 +#ifdef TARGET_NETBSD #define SYSCALL_RESET 208 +#elif defined (TARGET_OPENBSD) +#define SYSCALL_RESET 55 +#else +#error unknown target +#endif #define SYSCALL_EXIT 1 #define SYSCALL_ARCH 165 #define SYSCALL_INT 0x80 From b17540cbd92d554c2dd4a82d0d7be0d9318f914b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 15:25:12 +0200 Subject: [PATCH 231/271] * grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Handle grub_disk_read errors. --- ChangeLog | 5 +++++ grub-core/fs/nilfs2.c | 26 ++++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7043faf97..dc24ebf00 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-28 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Handle grub_disk_read + errors. + 2010-08-27 Vladimir Serbinenko Handle USB pendrives exposed as floppies. diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c index 8329c01a1..e529775f4 100644 --- a/grub-core/fs/nilfs2.c +++ b/grub-core/fs/nilfs2.c @@ -718,10 +718,13 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data) grub_uint64_t partition_size; int valid[2]; int swp = 0; + grub_err_t err; /* Read first super block. */ - grub_disk_read (disk, NILFS_1ST_SUPER_BLOCK, 0, - sizeof (struct grub_nilfs2_super_block), &data->sblock); + err = grub_disk_read (disk, NILFS_1ST_SUPER_BLOCK, 0, + sizeof (struct grub_nilfs2_super_block), &data->sblock); + if (err) + return err; /* Make sure if 1st super block is valid. */ valid[0] = grub_nilfs2_valid_sb (&data->sblock); @@ -729,17 +732,21 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data) if (partition_size != GRUB_DISK_SIZE_UNKNOWN) { /* Read second super block. */ - grub_disk_read (disk, NILFS_2ND_SUPER_BLOCK (partition_size), 0, - sizeof (struct grub_nilfs2_super_block), &sb2); - /* Make sure if 2nd super block is valid. */ - valid[1] = grub_nilfs2_valid_sb (&sb2); + err = grub_disk_read (disk, NILFS_2ND_SUPER_BLOCK (partition_size), 0, + sizeof (struct grub_nilfs2_super_block), &sb2); + if (err) + { + valid[1] = 0; + grub_errno = GRUB_ERR_NONE; + } + else + /* Make sure if 2nd super block is valid. */ + valid[1] = grub_nilfs2_valid_sb (&sb2); } else /* 2nd super block may not exist, so it's invalid. */ valid[1] = 0; - - if (!valid[0] && !valid[1]) return grub_error (GRUB_ERR_BAD_FS, "not a nilfs2 filesystem"); @@ -752,8 +759,7 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data) grub_memcpy (&data->sblock, &sb2, sizeof (struct grub_nilfs2_super_block)); - grub_errno = GRUB_ERR_NONE; - return grub_errno; + return GRUB_ERR_NONE; } static struct grub_nilfs2_data * From 3393cf16d676a67cfc1f1024cac039c76082e4dc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 15:28:08 +0200 Subject: [PATCH 232/271] * grub-core/term/gfxterm.c (grub_gfxterm_term_fini): Free the text buffer. (scroll_up): Fix a memory leak. --- ChangeLog | 5 +++++ grub-core/term/gfxterm.c | 16 +++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index dc24ebf00..fb5f6ef91 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-28 Vladimir Serbinenko + + * grub-core/term/gfxterm.c (grub_gfxterm_term_fini): Free the text buffer. + (scroll_up): Fix a memory leak. + 2010-08-28 Vladimir Serbinenko * grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Handle grub_disk_read diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c index bf9705abd..5f88f91ed 100644 --- a/grub-core/term/gfxterm.c +++ b/grub-core/term/gfxterm.c @@ -405,9 +405,16 @@ destroy_window (void) static grub_err_t grub_gfxterm_term_fini (struct grub_term_output *term __attribute__ ((unused))) { + unsigned i; destroy_window (); grub_video_restore (); + for (i = 0; i < virtual_screen.columns * virtual_screen.rows; i++) + { + grub_free (virtual_screen.text_buffer[i].code); + virtual_screen.text_buffer[i].code = 0; + } + /* Clear error state. */ grub_errno = GRUB_ERR_NONE; return GRUB_ERR_NONE; @@ -793,13 +800,8 @@ scroll_up (void) unsigned int i; /* Clear first line in text buffer. */ - for (i = 0; - i < virtual_screen.columns; - i++) - { - virtual_screen.text_buffer[i].code = 0; - clear_char (&(virtual_screen.text_buffer[i])); - } + for (i = 0; i < virtual_screen.columns; i++) + grub_free (virtual_screen.text_buffer[i].code); /* Scroll text buffer with one line to up. */ grub_memmove (virtual_screen.text_buffer, From 9e0fa3f606df14b774967e06fce6f64bd67d8972 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 15:29:44 +0200 Subject: [PATCH 233/271] * grub-core/normal/cmdline.c (grub_cmdline_get): Free cl_terms on return. --- ChangeLog | 5 +++++ grub-core/normal/cmdline.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/ChangeLog b/ChangeLog index fb5f6ef91..39e6a4f16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-28 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (grub_cmdline_get): Free cl_terms on + return. + 2010-08-28 Vladimir Serbinenko * grub-core/term/gfxterm.c (grub_gfxterm_term_fini): Free the text buffer. diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c index daa0a1adb..3647dcd3a 100644 --- a/grub-core/normal/cmdline.c +++ b/grub-core/normal/cmdline.c @@ -585,6 +585,7 @@ grub_cmdline_get (const char *prompt) break; case '\e': + grub_free (cl_terms); return 0; case '\b': @@ -635,5 +636,6 @@ grub_cmdline_get (const char *prompt) ret = grub_ucs4_to_utf8_alloc (buf + lpos, llen - lpos + 1); grub_free (buf); + grub_free (cl_terms); return ret; } From 46422ebf1acf49b9f7fe7cb7cfc48a6dcb525b63 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 15:31:21 +0200 Subject: [PATCH 234/271] * grub-core/normal/completion.c (grub_normal_do_completion): Free argv on failure. --- ChangeLog | 5 +++++ grub-core/normal/completion.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 39e6a4f16..0779d7c8f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-28 Vladimir Serbinenko + + * grub-core/normal/completion.c (grub_normal_do_completion): Free argv + on failure. + 2010-08-28 Vladimir Serbinenko * grub-core/normal/cmdline.c (grub_cmdline_get): Free cl_terms on diff --git a/grub-core/normal/completion.c b/grub-core/normal/completion.c index 40a645fb4..d127f9baf 100644 --- a/grub-core/normal/completion.c +++ b/grub-core/normal/completion.c @@ -499,7 +499,10 @@ grub_normal_do_completion (char *buf, int *restore, fail: if (argc != 0) - grub_free (argv[0]); + { + grub_free (argv); + grub_free (argv[0]); + } grub_free (match); grub_errno = GRUB_ERR_NONE; From 2053cc077b873646d7977c37e53115087312a718 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 15:34:29 +0200 Subject: [PATCH 235/271] * grub-core/script/script.c (grub_script_parse): Free parsed on failure. --- ChangeLog | 5 +++++ grub-core/script/script.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 0779d7c8f..2ffbbcd7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-28 Vladimir Serbinenko + + * grub-core/script/script.c (grub_script_parse): Free parsed on + failure. + 2010-08-28 Vladimir Serbinenko * grub-core/normal/completion.c (grub_normal_do_completion): Free argv diff --git a/grub-core/script/script.c b/grub-core/script/script.c index 9cee40dcb..448bdf775 100644 --- a/grub-core/script/script.c +++ b/grub-core/script/script.c @@ -365,7 +365,10 @@ grub_script_parse (char *script, grub_reader_getline_t getline) parsestate = grub_zalloc (sizeof (*parsestate)); if (!parsestate) - return 0; + { + grub_free (parsed); + return 0; + } /* Initialize the lexer. */ lexstate = grub_script_lexer_init (parsestate, script, getline); @@ -388,6 +391,7 @@ grub_script_parse (char *script, grub_reader_getline_t getline) grub_script_mem_free (memfree); grub_script_lexer_fini (lexstate); grub_free (parsestate); + grub_free (parsed); return 0; } From 3c7079670dfa210b4134649aba5dcc5d2a0d40ca Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 15:35:43 +0200 Subject: [PATCH 236/271] * grub-core/script/lexer.c (grub_script_lexer_init): Don't look before the begining of the string --- ChangeLog | 5 +++++ grub-core/script/lexer.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2ffbbcd7b..612669367 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-28 Vladimir Serbinenko + + * grub-core/script/lexer.c (grub_script_lexer_init): Don't look before + the begining of the string + 2010-08-28 Vladimir Serbinenko * grub-core/script/script.c (grub_script_parse): Free parsed on diff --git a/grub-core/script/lexer.c b/grub-core/script/lexer.c index 42a570348..64da45ed8 100644 --- a/grub-core/script/lexer.c +++ b/grub-core/script/lexer.c @@ -236,7 +236,7 @@ grub_script_lexer_init (struct grub_parser_param *parser, char *script, script = script ? : "\n"; len = grub_strlen (script); - if (script[len - 1] == '\n') + if (len != 0 && script[len - 1] == '\n') { buffer = yy_scan_string (script, lexerstate->yyscanner); } From 902f75f64567d04fe6a01afad191df6cc703cded Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 15:39:34 +0200 Subject: [PATCH 237/271] * grub-core/normal/term.c (print_more): Fix a memory leak. (grub_puts_terminal): Revert to dumb puts if memory allocation fails. (grub_xputs_normal): Likewise. --- ChangeLog | 6 ++++++ grub-core/normal/term.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/ChangeLog b/ChangeLog index 612669367..0b9d6c30a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-08-28 Vladimir Serbinenko + + * grub-core/normal/term.c (print_more): Fix a memory leak. + (grub_puts_terminal): Revert to dumb puts if memory allocation fails. + (grub_xputs_normal): Likewise. + 2010-08-28 Vladimir Serbinenko * grub-core/script/lexer.c (grub_script_lexer_init): Don't look before diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c index 4f5779abe..e6ef002d0 100644 --- a/grub-core/normal/term.c +++ b/grub-core/normal/term.c @@ -44,6 +44,9 @@ static int grub_more; static int grub_normal_char_counter = 0; +static void +putcode_real (grub_uint32_t code, struct grub_term_output *term); + int grub_normal_get_char_counter (void) { @@ -94,6 +97,7 @@ print_more (void) FOR_ACTIVE_TERM_OUTPUTS(term) grub_print_spaces (term, 8); grub_term_restore_pos (pos); + grub_free (pos); /* Scroll one lines or an entire page, depending on the key. */ @@ -204,6 +208,20 @@ grub_puts_terminal (const char *str, struct grub_term_output *term) grub_uint32_t *unicode_str, *unicode_last_position; grub_utf8_to_ucs4_alloc (str, &unicode_str, &unicode_last_position); + if (!unicode_str) + { + for (; str; str++) + { + grub_uint32_t code = *str; + if (code > 0x7f) + code = '?'; + + putcode_real (term, code); + if (code == '\n') + putcode_real (term, '\r'); + } + return; + } grub_print_ucs4 (unicode_str, unicode_last_position, 0, 0, term); grub_free (unicode_str); @@ -751,6 +769,21 @@ grub_xputs_normal (const char *str) if (!unicode_str) { grub_errno = GRUB_ERR_NONE; + for (; *str; str++) + { + grub_term_output_t term; + grub_uint32_t code = *str; + if (code > 0x7f) + code = '?'; + + FOR_ACTIVE_TERM_OUTPUTS(term) + { + putcode_real (term, code); + if (code == '\n') + putcode_real (term, '\r'); + } + } + return; } From 0101a723ce52d6962b2a32028425f915c8a8598c Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 16:05:20 +0200 Subject: [PATCH 238/271] ntldr bootcheck --- Makefile.am | 13 +++++++++++-- grub-core/tests/boot/ntldr.cfg | 4 ++++ grub-core/tests/boot/pc-chainloader.S | 8 +++++++- 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 grub-core/tests/boot/ntldr.cfg diff --git a/Makefile.am b/Makefile.am index 53439fd42..64c9c7e0f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -130,11 +130,17 @@ multiboot.elf: $(srcdir)/grub-core/tests/boot/multiboot.S $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/pc-chainloader.S - $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x7c00 -m32 + $(TARGET_CC) -o $@ $< -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x7c00 -m32 pc-chainloader.bin: pc-chainloader.elf $(OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; +ntldr.elf: $(srcdir)/grub-core/tests/boot/pc-chainloader.S + $(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0 -m32 + +ntldr.bin: ntldr.elf + $(OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; + multiboot2.elf: $(srcdir)/grub-core/tests/boot/multiboot.S $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DMULTIBOOT2=1 @@ -239,10 +245,13 @@ bootcheck-multiboot2: multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.c bootcheck-pc-chainloader: pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/pc-chainloader.bin=pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-ntldr: ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + BOOTCHECKS= if COND_i386_pc -BOOTCHECKS += bootcheck-pc-chainloader +BOOTCHECKS += bootcheck-pc-chainloader bootcheck-ntldr endif BOOTCHECKS += bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 diff --git a/grub-core/tests/boot/ntldr.cfg b/grub-core/tests/boot/ntldr.cfg new file mode 100644 index 000000000..cd438a4bc --- /dev/null +++ b/grub-core/tests/boot/ntldr.cfg @@ -0,0 +1,4 @@ +ntldr /ntldr.bin +boot +# Shouln't happen +halt diff --git a/grub-core/tests/boot/pc-chainloader.S b/grub-core/tests/boot/pc-chainloader.S index fc7429940..20040dabc 100644 --- a/grub-core/tests/boot/pc-chainloader.S +++ b/grub-core/tests/boot/pc-chainloader.S @@ -39,8 +39,14 @@ serialmsg: 1: ret -cont: +cont: +#ifdef TARGET_NTLDR + movw $0x2000, %ax +#elif defined (TARGET_CHAINLOADER) xorw %ax, %ax +#else +#error unsupported target +#endif movw %ax, %ds lea message, %si call serialmsg From 9bd44ab21ac53f307028a051c3c91121179c6da7 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 16:21:45 +0200 Subject: [PATCH 239/271] kfreebsd-aout bootchecks --- Makefile.am | 13 ++++++++++++- grub-core/tests/boot/kfreebsd-aout.cfg | 4 ++++ grub-core/tests/boot/multiboot.S | 8 ++++---- 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 grub-core/tests/boot/kfreebsd-aout.cfg diff --git a/Makefile.am b/Makefile.am index 64c9c7e0f..ea9a64ce2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -127,8 +127,14 @@ linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" multiboot.elf: $(srcdir)/grub-core/tests/boot/multiboot.S + $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include + +kfreebsd.elf: $(srcdir)/grub-core/tests/boot/multiboot.S $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include +kfreebsd.aout: kfreebsd.elf + $(OBJCOPY) -O a.out-i386-linux $< $@ -R .note.gnu.build-id + pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/pc-chainloader.S $(TARGET_CC) -o $@ $< -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x7c00 -m32 @@ -142,7 +148,7 @@ ntldr.bin: ntldr.elf $(OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; multiboot2.elf: $(srcdir)/grub-core/tests/boot/multiboot.S - $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DMULTIBOOT2=1 + $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1 kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ @@ -242,6 +248,9 @@ bootcheck-multiboot: multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg bootcheck-multiboot2: multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/multiboot2.elf=multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null +bootcheck-kfreebsd-aout: kfreebsd.aout $(srcdir)/grub-core/tests/boot/kfreebsd-aout.cfg grub-shell + timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/kfreebsd.aout=kfreebsd.aout $(srcdir)/grub-core/tests/boot/kfreebsd-aout.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + bootcheck-pc-chainloader: pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg grub-shell timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/pc-chainloader.bin=pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null @@ -254,6 +263,8 @@ if COND_i386_pc BOOTCHECKS += bootcheck-pc-chainloader bootcheck-ntldr endif +BOOTCHECKS += bootcheck-kfreebsd-aout + BOOTCHECKS += bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 BOOTCHECKS += bootcheck-multiboot bootcheck-multiboot2 diff --git a/grub-core/tests/boot/kfreebsd-aout.cfg b/grub-core/tests/boot/kfreebsd-aout.cfg new file mode 100644 index 000000000..31e34b4ee --- /dev/null +++ b/grub-core/tests/boot/kfreebsd-aout.cfg @@ -0,0 +1,4 @@ +kfreebsd /kfreebsd.aout +boot +# Shouln't happen +halt diff --git a/grub-core/tests/boot/multiboot.S b/grub-core/tests/boot/multiboot.S index b9c0059c0..904b0d4c7 100644 --- a/grub-core/tests/boot/multiboot.S +++ b/grub-core/tests/boot/multiboot.S @@ -1,7 +1,7 @@ #define ASM_FILE 1 -#ifdef MULTIBOOT2 +#ifdef TARGET_MULTIBOOT2 #include -#else +#elif defined (TARGET_MULTIBOOT) #include #endif @@ -11,7 +11,7 @@ /* Align 32 bits boundary. */ .align 8 -#ifdef MULTIBOOT2 +#ifdef TARGET_MULTIBOOT2 /* Multiboot header. */ multiboot_header: /* magic */ @@ -26,7 +26,7 @@ multiboot_header: .short 0 .long 8 multiboot_header_end: -#else +#elif defined (TARGET_MULTIBOOT) /* Multiboot header. */ multiboot_header: /* magic */ From 9b1cb542dba38fb25b54c8c6e059b8bb7679f3b5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 16:51:36 +0200 Subject: [PATCH 240/271] Rename test kernels --- Makefile.am | 10 +++++----- .../tests/boot/{pc-chainloader.S => kernel-8086.S} | 0 grub-core/tests/boot/{multiboot.S => kernel-i386.S} | 0 3 files changed, 5 insertions(+), 5 deletions(-) rename grub-core/tests/boot/{pc-chainloader.S => kernel-8086.S} (100%) rename grub-core/tests/boot/{multiboot.S => kernel-i386.S} (100%) diff --git a/Makefile.am b/Makefile.am index ea9a64ce2..986d5234f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -126,28 +126,28 @@ linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -multiboot.elf: $(srcdir)/grub-core/tests/boot/multiboot.S +multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -kfreebsd.elf: $(srcdir)/grub-core/tests/boot/multiboot.S +kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include kfreebsd.aout: kfreebsd.elf $(OBJCOPY) -O a.out-i386-linux $< $@ -R .note.gnu.build-id -pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/pc-chainloader.S +pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(TARGET_CC) -o $@ $< -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x7c00 -m32 pc-chainloader.bin: pc-chainloader.elf $(OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; -ntldr.elf: $(srcdir)/grub-core/tests/boot/pc-chainloader.S +ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0 -m32 ntldr.bin: ntldr.elf $(OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; -multiboot2.elf: $(srcdir)/grub-core/tests/boot/multiboot.S +multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1 kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S diff --git a/grub-core/tests/boot/pc-chainloader.S b/grub-core/tests/boot/kernel-8086.S similarity index 100% rename from grub-core/tests/boot/pc-chainloader.S rename to grub-core/tests/boot/kernel-8086.S diff --git a/grub-core/tests/boot/multiboot.S b/grub-core/tests/boot/kernel-i386.S similarity index 100% rename from grub-core/tests/boot/multiboot.S rename to grub-core/tests/boot/kernel-i386.S From 4a842991dbba38df15767a8def9f3e8363abdf37 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 17:33:32 +0200 Subject: [PATCH 241/271] simplify normal/term.c and fix mismerge --- grub-core/normal/term.c | 66 ++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c index e6ef002d0..02850ef4e 100644 --- a/grub-core/normal/term.c +++ b/grub-core/normal/term.c @@ -206,19 +206,36 @@ void grub_puts_terminal (const char *str, struct grub_term_output *term) { grub_uint32_t *unicode_str, *unicode_last_position; + grub_error_push (); grub_utf8_to_ucs4_alloc (str, &unicode_str, &unicode_last_position); + grub_error_pop (); if (!unicode_str) { - for (; str; str++) + for (; *str; str++) { - grub_uint32_t code = *str; - if (code > 0x7f) - code = '?'; + struct grub_unicode_glyph c = + { + .variant = 0, + .attributes = 0, + .ncomb = 0, + .combining = 0, + .estimated_width = 1, + .base = *str + }; - putcode_real (term, code); - if (code == '\n') - putcode_real (term, '\r'); + FOR_ACTIVE_TERM_OUTPUTS(term) + { + (term->putchar) (term, &c); + } + if (*str == '\n') + { + c.base = '\r'; + FOR_ACTIVE_TERM_OUTPUTS(term) + { + (term->putchar) (term, &c); + } + } } return; } @@ -760,28 +777,41 @@ grub_print_ucs4 (const grub_uint32_t * str, void grub_xputs_normal (const char *str) { - grub_term_output_t term; - grub_uint32_t *unicode_str, *unicode_last_position; + grub_uint32_t *unicode_str = NULL, *unicode_last_position; int backlog = 0; + grub_term_output_t term; + + grub_error_push (); grub_utf8_to_ucs4_alloc (str, &unicode_str, - &unicode_last_position); + &unicode_last_position); + grub_error_pop (); if (!unicode_str) { - grub_errno = GRUB_ERR_NONE; for (; *str; str++) { - grub_term_output_t term; - grub_uint32_t code = *str; - if (code > 0x7f) - code = '?'; + struct grub_unicode_glyph c = + { + .variant = 0, + .attributes = 0, + .ncomb = 0, + .combining = 0, + .estimated_width = 1, + .base = *str + }; FOR_ACTIVE_TERM_OUTPUTS(term) { - putcode_real (term, code); - if (code == '\n') - putcode_real (term, '\r'); + (term->putchar) (term, &c); } + if (*str == '\n') + { + c.base = '\r'; + FOR_ACTIVE_TERM_OUTPUTS(term) + { + (term->putchar) (term, &c); + } + } } return; From 197eb519e5edee9ee5e8c6bdde3939440ae70041 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 19:27:30 +0200 Subject: [PATCH 242/271] Remove leftover _printf --- grub-core/lib/i386/relocator.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c index 55e6b5578..f06a6ef86 100644 --- a/grub-core/lib/i386/relocator.c +++ b/grub-core/lib/i386/relocator.c @@ -218,8 +218,6 @@ grub_relocator16_boot (struct grub_relocator *rel, if (err) return err; - grub_printf ("%p\n", relst); - asm volatile ("cli"); ((void (*) (void)) relst) (); From c6785a2380185a960efeb16555c8610160831951 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 21:25:35 +0200 Subject: [PATCH 243/271] Don't allocate relocator twice when loading aout --- grub-core/loader/i386/bsd.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c index 770c6f278..d6a22da5b 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -1129,10 +1129,6 @@ grub_bsd_load_aout (grub_file_t file) else bss_size = 0; - relocator = grub_relocator_new (); - if (!relocator) - return grub_errno; - { grub_relocator_chunk_t ch; From 328951ac24132cfef37f4c6a5558fe0e388a7f75 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 28 Aug 2010 21:27:10 +0200 Subject: [PATCH 244/271] Add safety checks in relocator and add a GRUB_MM_CHECK macro --- grub-core/lib/relocator.c | 36 +++++++++++++++++++++++++++++++++++- include/grub/mm.h | 3 +++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c index 0acd59b94..90b383301 100644 --- a/grub-core/lib/relocator.c +++ b/grub-core/lib/relocator.c @@ -582,8 +582,15 @@ malloc_in_range (struct grub_relocator *rel, int pre_added = 0; pa = r->first; p = pa->next; + if (p->magic == GRUB_MM_ALLOC_MAGIC) + continue; do - { + { + grub_dprintf ("relocator", "free block %p+0x%x\n", + p, p->size); + if (p->magic != GRUB_MM_FREE_MAGIC) + grub_fatal (__FILE__":%d free magic broken at %p (0x%x)\n", + __LINE__, p, p->magic); if (p == (grub_mm_header_t) (r + 1)) { pre_added = 1; @@ -1586,3 +1593,30 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, grub_free (sorted); return GRUB_ERR_NONE; } + +void +grub_mm_check_real (char *file, int line) +{ + grub_mm_region_t r; + grub_mm_header_t p, pa; + + for (r = grub_mm_base; r; r = r->next) + { + pa = r->first; + p = pa->next; + if (p->magic == GRUB_MM_ALLOC_MAGIC) + continue; + do + { + if ((grub_addr_t) p < (grub_addr_t) (r + 1) + || (grub_addr_t) p >= (grub_addr_t) (r + 1) + r->size) + grub_fatal ("%s:%d: out of range pointer: %p\n", file, line, p); + if (p->magic != GRUB_MM_FREE_MAGIC) + grub_fatal ("%s:%d free magic broken at %p (0x%x)\n", file, + line, p, p->magic); + pa = p; + p = pa->next; + } + while (pa != r->first); + } +} diff --git a/include/grub/mm.h b/include/grub/mm.h index 38dd39646..cc115907a 100644 --- a/include/grub/mm.h +++ b/include/grub/mm.h @@ -35,6 +35,9 @@ void EXPORT_FUNC(grub_free) (void *ptr); void *EXPORT_FUNC(grub_realloc) (void *ptr, grub_size_t size); void *EXPORT_FUNC(grub_memalign) (grub_size_t align, grub_size_t size); +void grub_mm_check_real (char *file, int line); +#define GRUB_MM_CHECK grub_mm_check_real (__FILE__, __LINE__); + /* For debugging. */ #if defined(MM_DEBUG) && !defined(GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) /* Set this variable to 1 when you want to trace all memory function calls. */ From 04a0a4cdf4bfd778b7992491b73c78fd74163234 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 00:19:13 +0200 Subject: [PATCH 245/271] Fix a bug in memory allocation --- grub-core/kern/mm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c index dec07bc1b..8d9b5db78 100644 --- a/grub-core/kern/mm.c +++ b/grub-core/kern/mm.c @@ -171,6 +171,7 @@ grub_real_malloc (grub_mm_header_t *first, grub_size_t n, grub_size_t align) if (p->size >= n + extra) { + extra += (p->size - extra - n) & (~(align - 1)); if (extra == 0 && p->size == n) { /* There is no special alignment requirement and memory block @@ -246,7 +247,6 @@ grub_real_malloc (grub_mm_header_t *first, grub_size_t n, grub_size_t align) */ grub_mm_header_t r; - extra += (p->size - extra - n) & (~(align - 1)); r = p + extra + n; r->magic = GRUB_MM_FREE_MAGIC; r->size = p->size - extra - n; From 5407820787a7bd8b60ba4dbc009001ad20071d28 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 00:20:22 +0200 Subject: [PATCH 246/271] Adjust kfreebsd.cfg for EFI --- grub-core/tests/boot/kfreebsd.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/grub-core/tests/boot/kfreebsd.cfg b/grub-core/tests/boot/kfreebsd.cfg index 5534f3c03..f28ee7998 100644 --- a/grub-core/tests/boot/kfreebsd.cfg +++ b/grub-core/tests/boot/kfreebsd.cfg @@ -1,7 +1,8 @@ -kfreebsd /kfreebsd -h +kfreebsd /kfreebsd -hv kfreebsd_loadenv /kfreebsd_env kfreebsd_module /mfsroot.gz type=mfs_root set kFreeBSD.hw.hasbrokenint12=1 +fakebios boot # Shouln't happen halt From 02a16ba94c3c8659709281663a194e37d0270ad2 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 00:21:02 +0200 Subject: [PATCH 247/271] Disable some bootcheck on some platforms --- Makefile.am | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Makefile.am b/Makefile.am index 986d5234f..fc3d273f2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -260,7 +260,23 @@ bootcheck-ntldr: ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg grub-shell BOOTCHECKS= if COND_i386_pc -BOOTCHECKS += bootcheck-pc-chainloader bootcheck-ntldr +#pc chainloader by definition is only for i386-pc +BOOTCHECKS += bootcheck-pc-chainloader +#ntldr and bootmgr require BIOS. +BOOTCHECKS += bootcheck-ntldr +#legacy protocol makes early BIOS calls. +BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64 +# Crashes early on non-BIOS +BOOTCHECKS += bootcheck-knetbsd-i386 +endif + +if !COND_i386_coreboot +# Crashes because memory at 0-0x1000 is occupied +BOOTCHECKS += bootcheck-kfreebsd-x86_64 +# Likewise. +BOOTCHECKS += bootcheck-knetbsd-x86_64 + +BOOTCHECKS += bootcheck-kfreebsd-i386 endif BOOTCHECKS += bootcheck-kfreebsd-aout @@ -269,18 +285,8 @@ BOOTCHECKS += bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 BOOTCHECKS += bootcheck-multiboot bootcheck-multiboot2 -BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64 - BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64 -# Crashes because memory at 0-0x1000 is occupied -BOOTCHECKS += bootcheck-kfreebsd-i386 bootcheck-knetbsd-x86_64 - -# Requires ACPI -BOOTCHECKS += bootcheck-kfreebsd-x86_64 -# Crashes early on non-BIOS -BOOTCHECKS += bootcheck-knetbsd-i386 - .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ From 5dc598851fec1c0783fda53018e2a007835ba4e1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 00:21:16 +0200 Subject: [PATCH 248/271] Document newreloc --- docs/grub.texi | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/docs/grub.texi b/docs/grub.texi index f533a029c..85316fced 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -85,6 +85,7 @@ This edition documents version @value{VERSION}. * Interface:: The menu and the command-line * Commands:: The list of available builtin commands * Security:: Authentication and authorisation +* Supported kernels:: The list of supported kernels * Troubleshooting:: Error messages produced by GRUB * Invoking grub-install:: How to use the GRUB installer * Invoking grub-mkconfig:: Generate a GRUB configuration file @@ -2862,6 +2863,74 @@ adding @kbd{set superusers=} and @kbd{password} or @kbd{password_pbkdf2} commands. +@node Supported kernels +@chapter Supported boot targets + +X86 support is summarised in following table. ``Yes'' means that kernel works on the given platform, ``crashes'' means an early kernel crash which we hove will be fixed by concerned kernel developpers. ``no'' means GRUB doesn't load given kernel on a given platform. ``headless'' means that the kernel works but lacks console drivers (you can still use serial or network console). In case of ``no'' and ``crashes'' the reason is given in footnote. +@multitable @columnfractions .50 .15 .15 .15 +@item @tab BIOS @tab Coreboot @tab 32-bit EFI +@item BIOS chainloading @tab yes @tab no (1) @tab no (1) +@item NTLDR @tab yes @tab no (1) @tab no (1) +@item FreeBSD bootloader @tab yes @tab crashes (1)@tab crashes (1) +@item 32-bit kFreeBSD @tab yes @tab ? @tab headless +@item 64-bit kFreeBSD @tab yes @tab crashes (2)@tab headless +@item 32-bit kNetBSD @tab yes @tab crashes (1)@tab crashes (1) +@item 64-bit kNetBSD @tab yes @tab crashes (2)@tab yes +@item 32-bit kOpenBSD @tab yes @tab yes @tab headless +@item 64-bit kOpenBSD @tab yes @tab yes @tab headless +@item Multiboot @tab yes @tab yes @tab yes +@item Multiboot2 @tab yes @tab yes @tab yes +@item 32-bit Linux (legacy protocol) @tab yes @tab no (1) @tab no (1) +@item 64-bit Linux (legacy protocol) @tab yes @tab no (1) @tab no (1) +@item 32-bit Linux (modern protocol) @tab yes @tab yes @tab yes +@item 64-bit Linux (modern protocol) @tab yes @tab yes @tab yes +@item 32-bit XNU @tab yes @tab ? @tab yes +@item 64-bit XNU @tab yes @tab ? @tab yes (5) +@item 32-bit EFI chainloader @tab no (3) @tab no (3) @tab yes +@item 64-bit EFI chainloader @tab no (3) @tab no (3) @tab no (4) +@item Appleloader @tab no (3) @tab no (3) @tab yes +@end multitable + +@enumerate +@item Requires BIOS +@item Crashes because the memory at 0x0-0x1000 isn't available +@item EFI only +@item 32-bit and 64-bit EFI have different structures and work in different CPU modes so it's not possible to chainload 32-bit bootloader on 64-bit platform and vice-versa +@item Some modules may need to be disabled +@end enumerate + + +PowerPC and Sparc ports support only Linux. +MIPS port supports Linux and multiboot2. + +@chapter Boot tests + +As you have seen in previous chapter the support matrix is pretty big and some of the configurations are only rarely used. To ensure the quality bootchecks are available for all x86 targets except EFI chainloader, Appleloader and XNU. All x86 platforms have bootcheck facility except multiboot and ieee1275. Multiboot, multiboot2, BIOS chainloader, ntldr and freebsd-bootloader boot targets are tested only with a fake kernel images. Only Linux is tested among the payloads using Linux protocols. + +Following variables must be defined: + +@multitable @columnfractions .30 .65 +@item GRUB_PAYLOADS_DIR @tab directory containing the required kernels +@item GRUB_CBFSTOOL @tab cbfstoll from Coreboot package (for coreboot platform only) +@item GRUB_COREBOOT_ROM @tab empty Coreboot ROM +@item GRUB_QEMU_OPTS @tab additional options to be supplied to QEMU +@end multitable + +Required files are: + +@multitable @columnfractions .40 .55 +@item kfreebsd_env.i386 @tab 32-bit kFreeBSD device hints +@item kfreebsd.i386 @tab 32-bit FreeBSD kernel image +@item kfreebsd.x86_64, kfreebsd_env.x86_64 @tab same from 64-bit kFreeBSD +@item knetbsd.i386 @tab 32-bit NetBSD kernel image +@item knetbsd.miniroot.i386 @tab 32-bit kNetBSD miniroot.kmod. +@item knetbsd.x86_64, knetbsd.miniroot.x86_64 @tab same from 64-bit kNetBSD +@item kopenbsd.i386 @tab 32-bit OpenBSD kernel bsd.rd image +@item kopenbsd.x86_64 @tab same from 64-bit kOpenBSD +@item linux.i386 @tab 32-bit Linux +@item linux.x86_64 @tab 64-bit Linux +@end multitable + @node Troubleshooting @chapter Error messages produced by GRUB From f0b05761f49596a276794f8c3082a75b7510821d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 00:46:36 +0200 Subject: [PATCH 249/271] fix multiboot compilation --- grub-core/Makefile.core.def | 1 + include/grub/offsets.h | 4 ++++ util/grub-mkimage.c | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 62c08928a..0917e749c 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -361,6 +361,7 @@ module = { enable = x86_efi; enable = i386_ieee1275; enable = i386_coreboot; + enable = i386_multiboot; emu_condition = COND_GRUB_EMU_PCI; }; diff --git a/include/grub/offsets.h b/include/grub/offsets.h index ae0b2557e..7763e488c 100644 --- a/include/grub/offsets.h +++ b/include/grub/offsets.h @@ -123,12 +123,16 @@ #define GRUB_KERNEL_I386_COREBOOT_DATA_END 0x42 #define GRUB_KERNEL_I386_COREBOOT_LINK_ADDR 0x8200 +#define GRUB_KERNEL_I386_MULTIBOOT_PREFIX GRUB_KERNEL_I386_COREBOOT_PREFIX +#define GRUB_KERNEL_I386_MULTIBOOT_DATA_END GRUB_KERNEL_I386_COREBOOT_DATA_END + #define GRUB_KERNEL_I386_IEEE1275_PREFIX 0x2 #define GRUB_KERNEL_I386_IEEE1275_DATA_END 0x42 #define GRUB_KERNEL_I386_IEEE1275_LINK_ADDR 0x10000 #define GRUB_KERNEL_I386_IEEE1275_MOD_ALIGN 0x1000 #define GRUB_KERNEL_I386_COREBOOT_MOD_ALIGN 0x1 +#define GRUB_KERNEL_I386_MULTIBOOT_MOD_ALIGN GRUB_KERNEL_I386_COREBOOT_MOD_ALIGN /* Non-zero value is only needed for PowerMacs. */ #define GRUB_KERNEL_I386_IEEE1275_MOD_GAP 0x0 diff --git a/util/grub-mkimage.c b/util/grub-mkimage.c index c46f0700f..38c530b91 100644 --- a/util/grub-mkimage.c +++ b/util/grub-mkimage.c @@ -106,8 +106,8 @@ struct image_target_desc image_targets[] = .bigendian = 0, .id = IMAGE_COREBOOT, .flags = PLATFORM_FLAGS_NONE, - .prefix = GRUB_KERNEL_I386_COREBOOT_PREFIX, - .data_end = GRUB_KERNEL_I386_COREBOOT_DATA_END, + .prefix = GRUB_KERNEL_I386_MULTIBOOT_PREFIX, + .data_end = GRUB_KERNEL_I386_MULTIBOOT_DATA_END, .raw_size = 0, .total_module_size = TARGET_NO_FIELD, .kernel_image_size = TARGET_NO_FIELD, From 6f8157cb8974d36a9e505549d2ec740b4eab0207 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 00:53:09 +0200 Subject: [PATCH 250/271] Fix qemu compilation --- grub-core/Makefile.core.def | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 0917e749c..709fd6cd7 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -777,6 +777,7 @@ module = { i386_coreboot = efiemu/i386/pc/cfgtables.c; i386_multiboot = efiemu/i386/pc/cfgtables.c; i386_ieee1275 = efiemu/i386/nocfgtables.c; + i386_qemu = efiemu/i386/nocfgtables.c; common = efiemu/mm.c; common = efiemu/loadcore_common.c; common = efiemu/symbols.c; @@ -796,6 +797,7 @@ module = { enable = i386_coreboot; enable = i386_ieee1275; enable = i386_multiboot; + enable = i386_qemu; }; module = { From f5c1e402d3ccaead39281145790eb2ce4d33de41 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 01:26:48 +0200 Subject: [PATCH 251/271] enable grub-mkrescue on i386-multiboot --- Makefile.util.def | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.util.def b/Makefile.util.def index fd3428e76..db3b6e5c6 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -334,6 +334,7 @@ script = { enable = i386_pc; enable = x86_efi; enable = i386_qemu; + enable = i386_multiboot; enable = i386_coreboot; enable = powerpc_ieee1275; }; From 5d9bdcf167596a3b55f2ac43e64f791dc3918978 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 02:28:15 +0200 Subject: [PATCH 252/271] Fix x86_64-efi compilation error --- grub-core/lib/relocator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c index 90b383301..53acda52f 100644 --- a/grub-core/lib/relocator.c +++ b/grub-core/lib/relocator.c @@ -586,8 +586,8 @@ malloc_in_range (struct grub_relocator *rel, continue; do { - grub_dprintf ("relocator", "free block %p+0x%x\n", - p, p->size); + grub_dprintf ("relocator", "free block %p+0x%lx\n", + p, (unsigned long) p->size); if (p->magic != GRUB_MM_FREE_MAGIC) grub_fatal (__FILE__":%d free magic broken at %p (0x%x)\n", __LINE__, p, p->magic); From 303f59958e9cb23056e8f35dc4263dc08e522d36 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 02:29:01 +0200 Subject: [PATCH 253/271] Disable kfreebsd bootcheck on qemu and multiboot --- Makefile.am | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index fc3d273f2..1cf2297bd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -272,12 +272,16 @@ endif if !COND_i386_coreboot # Crashes because memory at 0-0x1000 is occupied -BOOTCHECKS += bootcheck-kfreebsd-x86_64 -# Likewise. BOOTCHECKS += bootcheck-knetbsd-x86_64 +# Likewise and require ACPI. +if !COND_i386_multiboot +if !COND_i386_qemu +BOOTCHECKS += bootcheck-kfreebsd-x86_64 BOOTCHECKS += bootcheck-kfreebsd-i386 endif +endif +endif BOOTCHECKS += bootcheck-kfreebsd-aout From a30f510eac6f3ee39add695a6e3e49861988d43b Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 02:29:14 +0200 Subject: [PATCH 254/271] newreloc documentation upgrade --- docs/grub.texi | 123 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 97 insertions(+), 26 deletions(-) diff --git a/docs/grub.texi b/docs/grub.texi index 85316fced..4c96f254f 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -2867,28 +2867,100 @@ commands. @chapter Supported boot targets X86 support is summarised in following table. ``Yes'' means that kernel works on the given platform, ``crashes'' means an early kernel crash which we hove will be fixed by concerned kernel developpers. ``no'' means GRUB doesn't load given kernel on a given platform. ``headless'' means that the kernel works but lacks console drivers (you can still use serial or network console). In case of ``no'' and ``crashes'' the reason is given in footnote. -@multitable @columnfractions .50 .15 .15 .15 -@item @tab BIOS @tab Coreboot @tab 32-bit EFI -@item BIOS chainloading @tab yes @tab no (1) @tab no (1) -@item NTLDR @tab yes @tab no (1) @tab no (1) -@item FreeBSD bootloader @tab yes @tab crashes (1)@tab crashes (1) -@item 32-bit kFreeBSD @tab yes @tab ? @tab headless -@item 64-bit kFreeBSD @tab yes @tab crashes (2)@tab headless -@item 32-bit kNetBSD @tab yes @tab crashes (1)@tab crashes (1) -@item 64-bit kNetBSD @tab yes @tab crashes (2)@tab yes -@item 32-bit kOpenBSD @tab yes @tab yes @tab headless -@item 64-bit kOpenBSD @tab yes @tab yes @tab headless -@item Multiboot @tab yes @tab yes @tab yes -@item Multiboot2 @tab yes @tab yes @tab yes -@item 32-bit Linux (legacy protocol) @tab yes @tab no (1) @tab no (1) -@item 64-bit Linux (legacy protocol) @tab yes @tab no (1) @tab no (1) -@item 32-bit Linux (modern protocol) @tab yes @tab yes @tab yes -@item 64-bit Linux (modern protocol) @tab yes @tab yes @tab yes -@item 32-bit XNU @tab yes @tab ? @tab yes -@item 64-bit XNU @tab yes @tab ? @tab yes (5) -@item 32-bit EFI chainloader @tab no (3) @tab no (3) @tab yes -@item 64-bit EFI chainloader @tab no (3) @tab no (3) @tab no (4) -@item Appleloader @tab no (3) @tab no (3) @tab yes +@multitable @columnfractions .50 .22 .22 +@item @tab BIOS @tab Coreboot +@item BIOS chainloading @tab yes @tab no (1) +@item NTLDR @tab yes @tab no (1) +@item FreeBSD bootloader @tab yes @tab crashes (1) +@item 32-bit kFreeBSD @tab yes @tab crashes (2,6) +@item 64-bit kFreeBSD @tab yes @tab crashes (2,6) +@item 32-bit kNetBSD @tab yes @tab crashes (1) +@item 64-bit kNetBSD @tab yes @tab crashes (2) +@item 32-bit kOpenBSD @tab yes @tab yes +@item 64-bit kOpenBSD @tab yes @tab yes +@item Multiboot @tab yes @tab yes +@item Multiboot2 @tab yes @tab yes +@item 32-bit Linux (legacy protocol) @tab yes @tab no (1) +@item 64-bit Linux (legacy protocol) @tab yes @tab no (1) +@item 32-bit Linux (modern protocol) @tab yes @tab yes +@item 64-bit Linux (modern protocol) @tab yes @tab yes +@item 32-bit XNU @tab yes @tab ? +@item 64-bit XNU @tab yes @tab ? +@item 32-bit EFI chainloader @tab no (3) @tab no (3) +@item 64-bit EFI chainloader @tab no (3) @tab no (3) +@item Appleloader @tab no (3) @tab no (3) +@end multitable + +@multitable @columnfractions .50 .22 .22 +@item @tab Multiboot @tab Qemu +@item BIOS chainloading @tab no (1) @tab no (1) +@item NTLDR @tab no (1) @tab no (1) +@item FreeBSD bootloader @tab crashes (1) @tab crashes (1) +@item 32-bit kFreeBSD @tab crashes (6) @tab crashes (6) +@item 64-bit kFreeBSD @tab crashes (6) @tab crashes (6) +@item 32-bit kNetBSD @tab crashes (1) @tab crashes (1) +@item 64-bit kNetBSD @tab yes @tab yes +@item 32-bit kOpenBSD @tab yes @tab yes +@item 64-bit kOpenBSD @tab yes @tab yes +@item Multiboot @tab yes @tab yes +@item Multiboot2 @tab yes @tab yes +@item 32-bit Linux (legacy protocol) @tab no (1) @tab no (1) +@item 64-bit Linux (legacy protocol) @tab no (1) @tab no (1) +@item 32-bit Linux (modern protocol) @tab yes @tab yes +@item 64-bit Linux (modern protocol) @tab yes @tab yes +@item 32-bit XNU @tab ? @tab ? +@item 64-bit XNU @tab ? @tab ? +@item 32-bit EFI chainloader @tab no (3) @tab no (3) +@item 64-bit EFI chainloader @tab no (3) @tab no (3) +@item Appleloader @tab no (3) @tab no (3) +@end multitable + +@multitable @columnfractions .50 .22 .22 +@item @tab 32-bit EFI @tab 64-bit EFI +@item BIOS chainloading @tab no (1) @tab no (1) +@item NTLDR @tab no (1) @tab no (1) +@item FreeBSD bootloader @tab crashes (1) @tab crashes (1) +@item 32-bit kFreeBSD @tab headless @tab headless +@item 64-bit kFreeBSD @tab headless @tab headless +@item 32-bit kNetBSD @tab crashes (1) @tab crashes (1) +@item 64-bit kNetBSD @tab yes @tab yes +@item 32-bit kOpenBSD @tab headless @tab headless +@item 64-bit kOpenBSD @tab headless @tab headless +@item Multiboot @tab yes @tab yes +@item Multiboot2 @tab yes @tab yes +@item 32-bit Linux (legacy protocol) @tab no (1) @tab no (1) +@item 64-bit Linux (legacy protocol) @tab no (1) @tab no (1) +@item 32-bit Linux (modern protocol) @tab yes @tab yes +@item 64-bit Linux (modern protocol) @tab yes @tab yes +@item 32-bit XNU @tab yes @tab yes +@item 64-bit XNU @tab yes (5) @tab yes +@item 32-bit EFI chainloader @tab yes @tab no (4) +@item 64-bit EFI chainloader @tab no (4) @tab yes +@item Appleloader @tab yes @tab yes +@end multitable + +@multitable @columnfractions .50 .22 .22 +@item @tab IEEE1275 +@item BIOS chainloading @tab no (1) +@item NTLDR @tab no (1) +@item FreeBSD bootloader @tab crashes (1) +@item 32-bit kFreeBSD @tab crashes (6) +@item 64-bit kFreeBSD @tab crashes (6) +@item 32-bit kNetBSD @tab crashes (1) +@item 64-bit kNetBSD @tab ? +@item 32-bit kOpenBSD @tab ? +@item 64-bit kOpenBSD @tab ? +@item Multiboot @tab ? +@item Multiboot2 @tab ? +@item 32-bit Linux (legacy protocol) @tab no (1) +@item 64-bit Linux (legacy protocol) @tab no (1) +@item 32-bit Linux (modern protocol) @tab ? +@item 64-bit Linux (modern protocol) @tab ? +@item 32-bit XNU @tab ? +@item 64-bit XNU @tab ? +@item 32-bit EFI chainloader @tab no (3) +@item 64-bit EFI chainloader @tab no (3) +@item Appleloader @tab no (3) @end multitable @enumerate @@ -2897,15 +2969,14 @@ X86 support is summarised in following table. ``Yes'' means that kernel works on @item EFI only @item 32-bit and 64-bit EFI have different structures and work in different CPU modes so it's not possible to chainload 32-bit bootloader on 64-bit platform and vice-versa @item Some modules may need to be disabled +@item Requires ACPI @end enumerate - -PowerPC and Sparc ports support only Linux. -MIPS port supports Linux and multiboot2. +PowerPC and Sparc ports support only Linux. MIPS port supports Linux and multiboot2. @chapter Boot tests -As you have seen in previous chapter the support matrix is pretty big and some of the configurations are only rarely used. To ensure the quality bootchecks are available for all x86 targets except EFI chainloader, Appleloader and XNU. All x86 platforms have bootcheck facility except multiboot and ieee1275. Multiboot, multiboot2, BIOS chainloader, ntldr and freebsd-bootloader boot targets are tested only with a fake kernel images. Only Linux is tested among the payloads using Linux protocols. +As you have seen in previous chapter the support matrix is pretty big and some of the configurations are only rarely used. To ensure the quality bootchecks are available for all x86 targets except EFI chainloader, Appleloader and XNU. All x86 platforms have bootcheck facility except ieee1275. Multiboot, multiboot2, BIOS chainloader, ntldr and freebsd-bootloader boot targets are tested only with a fake kernel images. Only Linux is tested among the payloads using Linux protocols. Following variables must be defined: From a7363f53c87787e8eeb35ab0e9ad7589cfd2d594 Mon Sep 17 00:00:00 2001 From: BVK Chaitanya Date: Sun, 29 Aug 2010 09:33:13 +0530 Subject: [PATCH 255/271] Use ldadd instead of ldflags for libraries --- ChangeLog | 4 ++++ Makefile.util.def | 28 ++++++++++++++-------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b9d6c30a..7aab54c00 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2010-08-29 BVK Chaitanya + + * Makefile.util.def: Use ldadd instead of ldflags for libraries. + 2010-08-28 Vladimir Serbinenko * grub-core/normal/term.c (print_more): Fix a memory leak. diff --git a/Makefile.util.def b/Makefile.util.def index fd3428e76..019b0e3a4 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -99,7 +99,7 @@ program = { name = grub-bin2h; common = util/bin2h.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER)'; mansection = 1; }; @@ -112,7 +112,7 @@ program = { extra_dist = util/grub-mkimagexx.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER)'; cppflags = '-DGRUB_PKGLIBROOTDIR=\"$(pkglibrootdir)\"'; }; @@ -123,7 +123,7 @@ program = { common = util/grub-mkrelpath.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER)'; }; program = { @@ -133,7 +133,7 @@ program = { common = util/grub-script-check.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER)'; }; program = { @@ -143,7 +143,7 @@ program = { common = util/grub-editenv.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER)'; }; program = { @@ -153,7 +153,7 @@ program = { common = util/grub-mkpasswd-pbkdf2.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER)'; cflags = '$(CFLAGS_GCRY)'; cppflags = '$(CPPFLAGS_GCRY)'; }; @@ -171,7 +171,7 @@ program = { common = util/grub-pe2elf.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL)'; + ldadd = '$(LIBINTL)'; condition = COND_GRUB_PE2ELF; }; @@ -181,7 +181,7 @@ program = { common = util/grub-fstest.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER)'; condition = COND_GRUB_FSTEST; }; @@ -194,8 +194,8 @@ program = { cflags = '$(freetype_cflags)'; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER)'; - ldflags = '$(freetype_libs)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER)'; + ldadd = '$(freetype_libs)'; condition = COND_GRUB_MKFONT; }; @@ -212,7 +212,7 @@ program = { sparc64_ieee1275 = util/ieee1275/devicemap.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; }; program = { @@ -222,7 +222,7 @@ program = { common = util/grub-probe.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; }; program = { @@ -239,7 +239,7 @@ program = { sparc64_ieee1275 = util/lvm.c; ldadd = libgrub.a; - ldflags = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; enable = i386_pc; enable = sparc64_ieee1275; @@ -506,5 +506,5 @@ program = { common = grub-core/tests/lib/test.c; cflags = -Wno-format; ldadd = libgrub.a; - ldflags = '$(LIBDEVMAPPER)'; + ldadd = '$(LIBDEVMAPPER)'; }; From 6d387bafaf6149cd33845af4d68ca909e1cb43cf Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 13:45:36 +0200 Subject: [PATCH 256/271] Fix compilation on yeeloong --- include/grub/ns8250.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/grub/ns8250.h b/include/grub/ns8250.h index 2dcd07f14..7947ba9c9 100644 --- a/include/grub/ns8250.h +++ b/include/grub/ns8250.h @@ -70,9 +70,11 @@ /* Turn on DTR, RTS, and OUT2. */ #define UART_ENABLE_OUT2 0x08 +#ifndef ASM_FILE #include grub_port_t grub_ns8250_hw_get_port (const unsigned int unit); +#endif #endif /* ! GRUB_SERIAL_MACHINE_HEADER */ From 506e4d1e7fdea605ba8fdb3ef00d905bfeac25e2 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 15:45:21 +0200 Subject: [PATCH 257/271] Use kseg0 entry address on mips --- grub-core/loader/multiboot_elfxx.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/grub-core/loader/multiboot_elfxx.c b/grub-core/loader/multiboot_elfxx.c index 024b44747..0c29fe9c2 100644 --- a/grub-core/loader/multiboot_elfxx.c +++ b/grub-core/loader/multiboot_elfxx.c @@ -140,6 +140,14 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer) if (i == ehdr->e_phnum) return grub_error (GRUB_ERR_BAD_OS, "entry point isn't in a segment"); +#if defined (__i386__) || defined (__x86_64__) + +#elif defined (__mips) + grub_multiboot_payload_eip |= 0x80000000; +#else +#error Please complete this +#endif + if (ehdr->e_shnum) { grub_uint8_t *shdr, *shdrptr; From 3626810e5391d3f7a35e8e714985b0002a64ada1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 17:17:52 +0200 Subject: [PATCH 258/271] * grub-core/kern/misc.c (grub_real_dprintf): Always refresh after dprintf. --- ChangeLog | 5 +++++ grub-core/kern/misc.c | 1 + 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7aab54c00..98893a472 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-29 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_real_dprintf): Always refresh after + dprintf. + 2010-08-29 BVK Chaitanya * Makefile.util.def: Use ldadd instead of ldflags for libraries. diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c index b37ef230c..69fdc3d42 100644 --- a/grub-core/kern/misc.c +++ b/grub-core/kern/misc.c @@ -184,6 +184,7 @@ grub_real_dprintf (const char *file, const int line, const char *condition, va_start (args, fmt); grub_vprintf (fmt, args); va_end (args); + grub_refresh (); } } From 5bf84df429ba8cec67a466ba35eb0c25934973cc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 17:49:37 +0200 Subject: [PATCH 259/271] * Makefile.util.def (grub-ofpathname): Add missing ldadd. --- ChangeLog | 4 ++++ Makefile.util.def | 1 + 2 files changed, 5 insertions(+) diff --git a/ChangeLog b/ChangeLog index 98893a472..2693b2859 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2010-08-29 Vladimir Serbinenko + + * Makefile.util.def (grub-ofpathname): Add missing ldadd. + 2010-08-29 Vladimir Serbinenko * grub-core/kern/misc.c (grub_real_dprintf): Always refresh after diff --git a/Makefile.util.def b/Makefile.util.def index 019b0e3a4..24cd25d9e 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -252,6 +252,7 @@ program = { ieee1275 = util/ieee1275/ofpath.c; ldadd = libgrub.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL)'; enable = sparc64_ieee1275; }; From 72c47aed8d2e91d9477b24d9ba1341e2177030d0 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 18:52:04 +0200 Subject: [PATCH 260/271] * grub-core/efiemu/runtime/efiemu.sh: Removed. --- grub-core/efiemu/runtime/efiemu.sh | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 grub-core/efiemu/runtime/efiemu.sh diff --git a/grub-core/efiemu/runtime/efiemu.sh b/grub-core/efiemu/runtime/efiemu.sh deleted file mode 100644 index 5a492dc2f..000000000 --- a/grub-core/efiemu/runtime/efiemu.sh +++ /dev/null @@ -1,4 +0,0 @@ -gcc -c -m32 -DELF32 -o efiemu32.o ./efiemu.c -Wall -Werror -nostdlib -O2 -I. -I../../include -gcc -c -m64 -DELF64 -o efiemu64_c.o ./efiemu.c -Wall -Werror -mcmodel=large -O2 -I. -I../../include -gcc -c -m64 -DELF64 -o efiemu64_s.o ./efiemu.S -Wall -Werror -mcmodel=large -O2 -I. -I../../include -ld -o efiemu64.o -r efiemu64_s.o efiemu64_c.o -nostdlib From d768d15986189c40ba8eb589b2c4470ca6966192 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 18:53:56 +0200 Subject: [PATCH 261/271] * grub-core/Makefile.core.def (kernel): Add kern/mips/cache_flush.S to extra_dist. --- ChangeLog | 9 +++++++++ grub-core/Makefile.core.def | 1 + 2 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2693b2859..c2ebd6173 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2010-08-29 Vladimir Serbinenko + + * grub-core/Makefile.core.def (kernel): Add kern/mips/cache_flush.S to + extra_dist. + +2010-08-29 Vladimir Serbinenko + + * grub-core/efiemu/runtime/efiemu.sh: Removed. + 2010-08-29 Vladimir Serbinenko * Makefile.util.def (grub-ofpathname): Add missing ldadd. diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 0257bbac4..5961e8697 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -169,6 +169,7 @@ kernel = { extra_dist = kern/i386/loader.S; extra_dist = kern/i386/realmode.S; extra_dist = kern/i386/pc/lzma_decode.S; + extra_dist = kern/mips/cache_flush.S; }; program = { From cb601aad52eca95c4d1a40a5329f4786afa3ec40 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 18:54:33 +0200 Subject: [PATCH 262/271] Fix failing make dist --- grub-core/Makefile.core.def | 1 - 1 file changed, 1 deletion(-) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 709fd6cd7..8533d3131 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -166,7 +166,6 @@ kernel = { emu = kern/emu/mm.c; emu = kern/emu/time.c; - extra_dist = kern/i386/loader.S; extra_dist = kern/i386/realmode.S; extra_dist = kern/i386/pc/lzma_decode.S; }; From 5303b85d446f1937245f2b989c60071bdcc80496 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 21:57:37 +0200 Subject: [PATCH 263/271] * grub-core/normal/charset.c (grub_utf8_to_ucs4_alloc): Avoid deadloop on malloc error. (grub_bidi_logical_to_visual): Check that malloc succeded. * grub-core/normal/term.c (grub_puts_terminal): Fix fallback to dumb puts. (grub_xputs_normal): Likewise. --- ChangeLog | 9 ++++++ grub-core/normal/charset.c | 9 +++--- grub-core/normal/term.c | 66 +++++++++++++++++++++++++++----------- 3 files changed, 61 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index c2ebd6173..b3b6c342b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2010-08-29 Vladimir Serbinenko + + * grub-core/normal/charset.c (grub_utf8_to_ucs4_alloc): Avoid deadloop + on malloc error. + (grub_bidi_logical_to_visual): Check that malloc succeded. + * grub-core/normal/term.c (grub_puts_terminal): Fix fallback to dumb + puts. + (grub_xputs_normal): Likewise. + 2010-08-29 Vladimir Serbinenko * grub-core/Makefile.core.def (kernel): Add kern/mips/cache_flush.S to diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c index fd377e1c6..b7f775c4f 100644 --- a/grub-core/normal/charset.c +++ b/grub-core/normal/charset.c @@ -297,13 +297,10 @@ grub_utf8_to_ucs4_alloc (const char *msg, grub_uint32_t **unicode_msg, { grub_size_t msg_len = grub_strlen (msg); - *unicode_msg = grub_malloc (grub_strlen (msg) * sizeof (grub_uint32_t)); + *unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t)); if (!*unicode_msg) - { - grub_printf ("utf8_to_ucs4 ERROR1: %s", msg); - return -1; - } + return -1; msg_len = grub_utf8_to_ucs4 (*unicode_msg, msg_len, (grub_uint8_t *) msg, -1, 0); @@ -1215,6 +1212,8 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical, struct grub_unicode_glyph *visual_ptr; *visual_out = visual_ptr = grub_malloc (2 * sizeof (visual_ptr[0]) * logical_len); + if (!visual_ptr) + return -1; for (ptr = logical; ptr <= logical + logical_len; ptr++) { if (ptr == logical + logical_len || *ptr == '\n') diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c index e6ef002d0..02850ef4e 100644 --- a/grub-core/normal/term.c +++ b/grub-core/normal/term.c @@ -206,19 +206,36 @@ void grub_puts_terminal (const char *str, struct grub_term_output *term) { grub_uint32_t *unicode_str, *unicode_last_position; + grub_error_push (); grub_utf8_to_ucs4_alloc (str, &unicode_str, &unicode_last_position); + grub_error_pop (); if (!unicode_str) { - for (; str; str++) + for (; *str; str++) { - grub_uint32_t code = *str; - if (code > 0x7f) - code = '?'; + struct grub_unicode_glyph c = + { + .variant = 0, + .attributes = 0, + .ncomb = 0, + .combining = 0, + .estimated_width = 1, + .base = *str + }; - putcode_real (term, code); - if (code == '\n') - putcode_real (term, '\r'); + FOR_ACTIVE_TERM_OUTPUTS(term) + { + (term->putchar) (term, &c); + } + if (*str == '\n') + { + c.base = '\r'; + FOR_ACTIVE_TERM_OUTPUTS(term) + { + (term->putchar) (term, &c); + } + } } return; } @@ -760,28 +777,41 @@ grub_print_ucs4 (const grub_uint32_t * str, void grub_xputs_normal (const char *str) { - grub_term_output_t term; - grub_uint32_t *unicode_str, *unicode_last_position; + grub_uint32_t *unicode_str = NULL, *unicode_last_position; int backlog = 0; + grub_term_output_t term; + + grub_error_push (); grub_utf8_to_ucs4_alloc (str, &unicode_str, - &unicode_last_position); + &unicode_last_position); + grub_error_pop (); if (!unicode_str) { - grub_errno = GRUB_ERR_NONE; for (; *str; str++) { - grub_term_output_t term; - grub_uint32_t code = *str; - if (code > 0x7f) - code = '?'; + struct grub_unicode_glyph c = + { + .variant = 0, + .attributes = 0, + .ncomb = 0, + .combining = 0, + .estimated_width = 1, + .base = *str + }; FOR_ACTIVE_TERM_OUTPUTS(term) { - putcode_real (term, code); - if (code == '\n') - putcode_real (term, '\r'); + (term->putchar) (term, &c); } + if (*str == '\n') + { + c.base = '\r'; + FOR_ACTIVE_TERM_OUTPUTS(term) + { + (term->putchar) (term, &c); + } + } } return; From c7fef4da8b3ef241e24aba8f6451f9491c2f10c5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 21:58:58 +0200 Subject: [PATCH 264/271] make tags variables statis as intended --- grub-core/loader/i386/bsd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c index d6a22da5b..cfea3b6a1 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -81,7 +81,7 @@ struct bsd_tag } data[0]; }; -struct bsd_tag *tags, *tags_last; +static struct bsd_tag *tags, *tags_last; struct netbsd_module { @@ -89,7 +89,7 @@ struct netbsd_module struct grub_netbsd_btinfo_module mod; }; -struct netbsd_module *netbsd_mods, *netbsd_mods_last; +static struct netbsd_module *netbsd_mods, *netbsd_mods_last; static const struct grub_arg_option freebsd_opts[] = { From 0b986c402b9e98f3859997763487c3ab68b54518 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 22:03:28 +0200 Subject: [PATCH 265/271] First part of ChangeLog --- ChangeLog | 280 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) diff --git a/ChangeLog b/ChangeLog index c2ebd6173..6162b2eca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,283 @@ +2010-08-29 Vladimir Serbinenko + + New relocator. Allows for more kernel support and more straightforward + loader writing. + + * Makefile.am (BOOTTARGET): New variable. + (QEMU32): Likewise. + (linux.init.x86_64): New target. + (linux.init.i386): Likewise. + (multiboot.elf): Likewise. + (kfreebsd.elf): Likewise. + (kfreebsd.aout): Likewise. + (pc-chainloader.elf): Likewise. + (pc-chainloader.bin): Likewise. + (ntldr.elf): Likewise. + (ntldr.bin): Likewise. + (multiboot2.elf): Likewise. + (kfreebsd.init.x86_64): Likewise. + (kfreebsd.init.i386): Likewise. + (knetbsd.init.i386): Likewise. + (kopenbsd.init.i386): Likewise. + (knetbsd.init.x86_64): Likewise. + (kopenbsd.init.x86_64): Likewise. + (linux-initramfs.i386): Likewise. + (linux-initramfs.x86_64): Likewise. + (kfreebsd-mfsroot.i386.img): Likewise. + (knetbsd.image.i386): Likewise. + (kopenbsd.image.i386): Likewise. + (kopenbsd.image.x86_64): Likewise. + (knetbsd.miniroot-image.i386.img): Likewise. + (kfreebsd-mfsroot.x86_64.img): Likewise. + (knetbsd.image.x86_64): Likewise. + (knetbsd.miniroot-image.x86_64.img): Likewise. + (kfreebsd-mfsroot.i386.gz): Likewise. + (bootcheck-kfreebsd-i386): Likewise. + (kfreebsd-mfsroot.x86_64.gz): Likewise. + (bootcheck-kfreebsd-x86_64): Likewise. + (knetbsd.miniroot-image.i386.gz): Likewise. + (bootcheck-knetbsd-i386): Likewise. + (bootcheck-kopenbsd-i386): Likewise. + (bootcheck-kopenbsd-x86_64): Likewise. + (knetbsd.miniroot-image.x86_64.gz): Likewise. + (bootcheck-knetbsd-x86_64): Likewise. + (bootcheck-linux-i386): Likewise. + (bootcheck-linux-x86_64): Likewise. + (bootcheck-linux16-i386): Likewise. + (bootcheck-linux16-x86_64): Likewise. + (bootcheck-multiboot): Likewise. + (bootcheck-multiboot2): Likewise. + (bootcheck-kfreebsd-aout): Likewise. + (bootcheck-pc-chainloader): Likewise. + (bootcheck-ntldr): Likewise. + (CLEANFILES): Add new targets. + (BOOTCHECKS): New variable. + (.PHONY): Add bootchecks. + (SUCCESSFUL_BOOT_STRING): New variable. + (BOOTCHECK_TIMEOUT): Likewise. + (bootcheck): New target + * Makefile.util.def (grub-mkrescue): Enable on i386-multiboot. + * configure.ac: Correct efiemu excuse. + * docs/grub.texi (Supported kernels): New chapter. + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Add + include/grub/mm_private.h. Simplify inclusion of + include/grub/boot.h, include/grub/loader.h + and include/grub/msdos_partition.h + (KERNEL_HEADER_FILES) [i386_coreboot]: + Remove include/grub/machine/loader.h. Add include/grub/i386/pit.h. + (KERNEL_HEADER_FILES) [i386_multiboot]: Likewise. + (KERNEL_HEADER_FILES) [i386_qemu]: Likewise. + (KERNEL_HEADER_FILES) [i386_ieee1275]: Remove + include/grub/machine/loader.h. + (KERNEL_HEADER_FILES) [x86_64-efi]: Likewise. + * grub-core/Makefile.core.def (kernel): Remove kern/i386/loader.S from + extra_dist. + (pci.mod): Enable on i386-multiboot. + (acpi.mod): Enable on i386-multiboot and i386-coreboot. + (efiemu.mod): Enable on i386-coreboot, i386-ieee1275, i386-multiboot and + i386-qemu. + (relocator.mod): Rewritten. + (aout.mod): Enable on all x86. + (bsd.mod): Likewise. + (ntldr.mod): New module. + (linux.mod): Use loader/i386/linux.c on all x86. + (xnu.mod): Enable on all x86. + (vga_text.mod): disable on EFI and QEMU. + * grub-core/efiemu/i386/coredetect.c: Remove useless include. + * grub-core/efiemu/i386/pc/cfgtables.c: Likewise. + * grub-core/efiemu/loadcore.c: Likewise. + * grub-core/efiemu/main.c: Likewise. + (grub_efiemu_exit_boot_services): Removed. + (grub_efiemu_finish_boot_services): Likewise. + * grub-core/efiemu/mm.c (grub_efiemu_finish_boot_services): New + function. + * grub-core/efiemu/i386/nocfgtables.c: New file. + * grub-core/kern/dl.c (grub_dl_unload_all): Removed. + * grub-core/kern/efi/efi.c (grub_efi_exit_boot_services): Removed. + (grub_efi_finish_boot_services): Moved from here ... + * grub-core/kern/efi/mm.c (grub_efi_finish_boot_services): ...here. + Fille finish memory map and related data. + (finish_mmap_buf): New variable. + (grub_efi_uintn_t finish_mmap_size): Likewise. + (grub_efi_uintn_t finish_key): Likewise. + (grub_efi_uintn_t finish_desc_size): Likewise. + (grub_efi_uint32_t finish_desc_version): Likewise. + (grub_efi_is_finished): Likewise. + (grub_efi_get_memory_map): Use saved memory map if EFI is already + finished. + * grub-core/kern/elf.c (grub_elf32_phdr_iterate): Make global. + (grub_elf64_phdr_iterate): Likewise. + * grub-core/kern/i386/coreboot/init.c (grub_os_area_addr): Removed. + (grub_os_area_size): Likewise. + (grub_machine_init): Don't reserve os area. + * grub-core/kern/i386/coreboot/startup.S: Don't include loader.S. + * grub-core/kern/i386/ieee1275/startup.S: Likewise. + * grub-core/kern/i386/loader.S: Removed. + * grub-core/kern/i386/pc/init.c (grub_os_area_addr): Removed. + (grub_os_area_size): Likewise. + (grub_machine_init): Don't reserve os area. + * grub-core/kern/i386/pc/startup.S (grub_chainloader_real_boot): + Don't call grub_dl_unload_all. + Don't include loader.S. + * grub-core/kern/i386/qemu/mmap.c (grub_machine_mmap_iterate): + Declare the memory after _end as available. + * grub-core/kern/mm.c (GRUB_MM_FREE_MAGIC): Moved from here... + (GRUB_MM_ALLOC_MAGIC): Moved from here... + (grub_mm_header) + (GRUB_MM_ALIGN) + * grub-core/kern/mm.c (grub_mm_region): Moved from here ... + (grub_mm_region): ..here. Removed addr. Added pre_size. + All users updated. + * grub-core/kern/mm.c (base): Renamed to ... + (grub_mm_base): ... this. Made global. + (grub_real_malloc): Alloc from end of region. + (grub_memalign): Don't attempt to malloc if grub_mm_base is NULL. + * grub-core/kern/powerpc/cache.S (grub_arch_sync_caches): Move to ... + * grub-core/kern/powerpc/cache_flush.S: ... here. + * grub-core/lib/efi/relocator.c: New file. + * grub-core/lib/i386/relocator.c: Rewritten. + * grub-core/lib/i386/relocator16.S: New file. + * grub-core/lib/i386/relocator32.S: Likewise. + * grub-core/lib/i386/relocator64.S: Likewise. + * grub-core/lib/i386/relocator_asm.S: Rewritten. + * grub-core/lib/i386/relocator_common.S: New file. + * grub-core/lib/ieee1275/relocator.c: Likewise. + * grub-core/lib/mips/relocator.c: Rewritten. + * grub-core/lib/mips/relocator_asm.S: Renamed variables and minor + stylistic adjustments. + * grub-core/lib/powerpc/relocator.c: New file. + * grub-core/lib/powerpc/relocator_asm.S: Likewise. + * grub-core/lib/relocator.c: Rewritten. + * grub-core/lib/x86_64/relocator_asm.S: New file. + * grub-core/loader/aout.c (grub_aout_load): Make load_addr a void *. + * grub-core/loader/i386/bsd.c (NETBSD_DEFAULT_VIDEO_MODE): New const. + (bsd_tag): New struct. + (tags): New variable. + (tags_last): Likewise. + (netbsd_module): New struct. + (netbsd_mods): New variable. + (netbsd_mods_last): Likewise. + (openbsd_opts): New parameter "serial". + (OPENBSD_SERIAL_ARG): New definition. + (netbsd_opts): New parameter "serial". + (NETBSD_SERIAL_ARG): New definition. + (grub_freebsd_add_meta): Reorganised into ... + (grub_bsd_add_meta): ...this. All users updated. + (grub_freebsd_add_mmap): Reorganised into ... + (generate_e820_mmap): ...this... + (grub_bsd_add_mmap): ...and this. All users updated. + (grub_freebsd_list_modules): Use tags. + (grub_netbsd_add_meta_module): New function. + (grub_netbsd_list_modules): Likewise. + (grub_freebsd_boot): Use relocator and finish EFI. + (grub_openbsd_boot): Likewise. + (grub_netbsd_setup_video): New function. + (grub_netbsd_add_modules): Likewise. + (grub_netbsd_boot): Use grub_netbsd_add_modules, relocator, netbsd_tags + and finish EFI. + (grub_bsd_unload): Unload tags. + (grub_bsd_load_aout): Use relocator. + (grub_bsd_elf32_size_hook): New function. + (grub_bsd_elf32_hook): Use relocator. + (grub_bsd_elf64_size_hook): New function. + (grub_bsd_elf64_hook): Use relocator. + (grub_bsd_load_elf): Use relocator and call grub_openbsd_find_ramdisk. + (grub_bsd_load): Zero-out openbsd_ramdisk. + (grub_bsd_load): Use relocator. + (grub_cmd_openbsd): Support serial. + (grub_cmd_netbsd): Support modules. + (grub_cmd_freebsd_module): Use relocator. + (grub_netbsd_module_load): New function. + (grub_cmd_netbsd_module): Likewise. + (grub_cmd_openbsd_ramdisk): Likewise. + (GRUB_MOD_INIT): Register knetbsd_module, knetbsd_module_elf and + kopenbsd_ramdisk. + (GRUB_MOD_FINI): Unregister new commands. + * grub-core/loader/i386/bsdXX.c (load): Remove useless checks. + (grub_freebsd_load_elfmodule_obj): Use relocator. + (grub_freebsd_load_elfmodule): Likewise. + (grub_freebsd_load_elf_meta): Likewise. + (grub_netbsd_load_elf_meta): New function. + (grub_openbsd_find_ramdisk): Likewise. + * grub-core/loader/i386/bsd_helper.S: Removed. + * grub-core/loader/i386/bsd_pagetable.c: Support relocator. + * grub-core/loader/i386/bsd_trampoline.S: Removed. + * grub-core/loader/i386/efi/linux.c: Likewise. + * grub-core/loader/i386/ieee1275/linux.c: Likewise. + * grub-core/loader/i386/linux.c (HAS_VGA_TEXT): New const. + (DEFAULT_VIDEO_MODE): Likewise. + (real_mode_target): New variable. + (prot_mode_target): Likewise. + (initrd_mem_target): Likewise. + (relocator): Likewise. + (efi_mmap_buf): Likewise. + (efi_mmap_size): Likewise. + (find_efi_mmap_size): Moved from grub-core/loader/i386/efi/linux.c. + (free_pages): Use relocator. + (allocate_pages): Account for efi_mmap and use relocator. Return error. + (grub_linux_setup_video): Return error. + (grub_linux_trampoline_start): Removed. + (grub_linux_trampoline_end): Likewise. + (grub_linux_boot): Use relocator and DEFAULT_VIDEO_MODE. Pass console + andd video parameters depending on firmware. + [GRUB_MACHINE_IEEE1275]: Pass OFW parameters. + [GRUB_MACHINE_EFI]: Pass EFI parameters. + (grub_cmd_linux) [GRUB_MACHINE_EFI]: Likewise. + (grub_cmd_initrd): Use relocator. + * grub-core/loader/i386/linux_trampoline.S: Removed. + * grub-core/loader/i386/multiboot_mbi.c (elf_sec_num): New variable. + (elf_sec_entsize): Likewise. + (elf_sec_shstrndx): Likewise. + (elf_sections): Likewise. + (grub_multiboot_load): Use relocator. + (grub_multiboot_get_mbi_size): Account for sections. + (grub_multiboot_make_mbi): Use relocator and support sections. + (grub_multiboot_add_elfsyms): New function. + (grub_multiboot_free_mbi): Free sections. + * grub-core/loader/i386/pc/linux.c (relocator): New variable. + (grub_linux_real_target): Likewise. + (grub_linux_real_chunk): Likewise. + (grub_linux16_prot_size): Likewise. + (grub_linux16_boot): Use relocator. + (grub_linux_unload): Unload relocator. + (grub_cmd_linux): Use relocator. + (grub_cmd_initrd): Likewise. + * grub-core/loader/i386/pc/ntldr.c: New file. + * grub-core/loader/i386/xnu.c (guessfsb) [GRUB_MACHINE_IEEE1275]: + Don't try to guess CPU frequency. + (grub_xnu_set_video): Stretch bitmap. + (grub_xnu_boot): Use relocator. + * grub-core/loader/mips/linux.c (grub_linux_boot): Use relocator. + (grub_linux_unload): Free relocator. + (grub_linux_load32): Use relocator. + (grub_linux_load64): Likewise. + (grub_cmd_initrd): Likewise. + * grub-core/loader/multiboot.c (grub_multiboot_boot): Use relocator. + (grub_multiboot_unload): Unload relocator. + (grub_cmd_multiboot): Use relocator. + (grub_cmd_module): Likewise. + * grub-core/loader/multiboot_elfxx.c (grub_multiboot_load_elfXX): + Use relocator and support sections. + * grub-core/loader/multiboot_mbi2.c(elf_sec_num): New variable. + (elf_sec_entsize): Likewise. + (elf_sec_shstrndx): Likewise. + (elf_sections): Likewise. + (grub_multiboot_load): Use relocator. + (grub_multiboot_get_mbi_size): Account for sections. + (grub_multiboot_make_mbi): Use relocator and support sections. + (grub_multiboot_add_elfsyms): New function. + * grub-core/loader/powerpc/ieee1275/linux.c: Remove useless include. + * grub-core/loader/sparc64/ieee1275/linux.c: Likewise. + * grub-core/loader/xnu.c (grub_xnu_heap_malloc): Use relocator. + Prototype changed. All users updated. + (grub_xnu_align_heap): Simplified. + (grub_xnu_writetree_toheap): Likewise. + (grub_xnu_unload): Unload relocator. + (grub_cmd_xnu_kernel): Use relocator. + (grub_cmd_xnu_kernel64): Likewise. + (grub_xnu_register_memory): Simplified. + * grub-core/loader/xnu_resume.c (grub_xnu_resume): Use relocator. + 2010-08-29 Vladimir Serbinenko * grub-core/Makefile.core.def (kernel): Add kern/mips/cache_flush.S to From 7542126ac2775ab63e8a41c387978f9755d9eb36 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 23:07:44 +0200 Subject: [PATCH 266/271] Add missing newlines --- grub-core/tests/boot/kbsd.init-x86_64.S | 2 +- grub-core/tests/boot/kfreebsd.init-x86_64.S | 2 +- grub-core/tests/boot/linux.init-i386.S | 1 - grub-core/tests/boot/linux.init-x86_64.S | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/grub-core/tests/boot/kbsd.init-x86_64.S b/grub-core/tests/boot/kbsd.init-x86_64.S index 58400db0d..81f810e2c 100644 --- a/grub-core/tests/boot/kbsd.init-x86_64.S +++ b/grub-core/tests/boot/kbsd.init-x86_64.S @@ -108,4 +108,4 @@ message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: iopl_arg: - .long 3 \ No newline at end of file + .long 3 diff --git a/grub-core/tests/boot/kfreebsd.init-x86_64.S b/grub-core/tests/boot/kfreebsd.init-x86_64.S index d2907b3a8..0a9ff511e 100644 --- a/grub-core/tests/boot/kfreebsd.init-x86_64.S +++ b/grub-core/tests/boot/kfreebsd.init-x86_64.S @@ -95,4 +95,4 @@ messageend: iopl_arg: .long SHUTDOWN_PORT .long 1 - .long 1 \ No newline at end of file + .long 1 diff --git a/grub-core/tests/boot/linux.init-i386.S b/grub-core/tests/boot/linux.init-i386.S index f3eca6d88..5b0088e00 100644 --- a/grub-core/tests/boot/linux.init-i386.S +++ b/grub-core/tests/boot/linux.init-i386.S @@ -77,4 +77,3 @@ start: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: - \ No newline at end of file diff --git a/grub-core/tests/boot/linux.init-x86_64.S b/grub-core/tests/boot/linux.init-x86_64.S index 63dca5e20..fc32dfd91 100644 --- a/grub-core/tests/boot/linux.init-x86_64.S +++ b/grub-core/tests/boot/linux.init-x86_64.S @@ -76,4 +76,3 @@ start: message: .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n" messageend: - \ No newline at end of file From 1935c0773e0abe1d7878f1d361eff87a9c71aabc Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sun, 29 Aug 2010 23:08:06 +0200 Subject: [PATCH 267/271] Finish Changelog --- ChangeLog | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ef81d87e9..4d5d6653a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -122,9 +122,13 @@ * grub-core/kern/i386/qemu/mmap.c (grub_machine_mmap_iterate): Declare the memory after _end as available. * grub-core/kern/mm.c (GRUB_MM_FREE_MAGIC): Moved from here... + * include/grub/mm_private.h (GRUB_MM_FREE_MAGIC): ... here. (GRUB_MM_ALLOC_MAGIC): Moved from here... - (grub_mm_header) - (GRUB_MM_ALIGN) + * include/grub/mm_private.h (GRUB_MM_ALLOC_MAGIC): ... here. + * grub-core/kern/mm.c (grub_mm_header): Moved from here... + * include/grub/mm_private.h (grub_mm_header): ... here. + * grub-core/kern/mm.c (GRUB_MM_ALIGN): Moved from here... + * include/grub/mm_private.h (GRUB_MM_ALIGN): ... here. * grub-core/kern/mm.c (grub_mm_region): Moved from here ... (grub_mm_region): ..here. Removed addr. Added pre_size. All users updated. @@ -277,6 +281,143 @@ (grub_cmd_xnu_kernel64): Likewise. (grub_xnu_register_memory): Simplified. * grub-core/loader/xnu_resume.c (grub_xnu_resume): Use relocator. + * grub-core/term/efi/console.c (grub_console_putchar): Abort if + EFI is finished. + (grub_console_checkkey): Likewise. + (grub_console_getkey): Likewise. + (grub_console_getwh): Likewise. + (grub_console_getxy): Likewise. + (grub_console_gotoxy): Likewise. + (grub_console_cls): Likewise. + (grub_console_setcolorstate): Likewise. + (grub_console_setcursor): Likewise. + * grub-core/term/ns8250.c (grub_ns8250_hw_get_port): New function. + * grub-core/tests/boot/kbsd.init-i386.S: New file. + * grub-core/tests/boot/kbsd.init-x86_64.S: Likewise. + * grub-core/tests/boot/kbsd.spec.txt: Likewise. + * grub-core/tests/boot/kernel-8086.S: Likewise. + * grub-core/tests/boot/kernel-i386.S: Likewise. + * grub-core/tests/boot/kfreebsd-aout.cfg: Likewise. + * grub-core/tests/boot/kfreebsd.cfg: Likewise. + * grub-core/tests/boot/kfreebsd.init-i386.S: Likewise. + * grub-core/tests/boot/kfreebsd.init-x86_64.S: Likewise. + * grub-core/tests/boot/knetbsd.cfg: Likewise. + * grub-core/tests/boot/kopenbsd.cfg: Likewise. + * grub-core/tests/boot/kopenbsdlabel.txt: Likewise. + * grub-core/tests/boot/linux.cfg: Likewise. + * grub-core/tests/boot/linux.init-i386.S: Likewise. + * grub-core/tests/boot/linux.init-x86_64.S: Likewise. + * grub-core/tests/boot/linux16.cfg: Likewise. + * grub-core/tests/boot/multiboot.cfg: Likewise. + * grub-core/tests/boot/multiboot2.cfg: Likewise. + * grub-core/tests/boot/ntldr.cfg: Likewise. + * grub-core/tests/boot/pc-chainloader.cfg: Likewise. + * include/grub/aout.h (grub_aout_load): Make load_addr a void *. + * include/grub/autoefi.h (grub_autoefi_finish_boot_services): + New definition. + * include/grub/dl.h (grub_dl_unload_all): Removed. + * include/grub/efi/efi.h (grub_efi_exit_boot_services): Likewise. + (grub_efi_finish_boot_services): Change prototype. + (grub_efi_is_finished): New variable. + * include/grub/efiemu/efiemu.h (grub_efiemu_finish_boot_services): + Changed prototype. + (grub_efiemu_finish_boot_services): Removed. + (grub_machine_efiemu_init_tables): New prototype. + * include/grub/elfload.h (grub_elf32_phdr_iterate): Likewise. + (grub_elf64_phdr_iterate): Likewise. + * include/grub/i386/bsd.h: Include relocator.h. + (freebsd_tag_header): New struct. + (grub_openbsd_bios_mmap): Removed. + (grub_unix_real_boot): Removed. + (grub_freebsd_load_elfmodule32): Changed prototype. + (grub_freebsd_load_elfmodule_obj64): Likewise. + (grub_freebsd_load_elf_meta32): Likewise. + (grub_freebsd_load_elf_meta64): Likewise. + (grub_freebsd_add_meta): Removed. + (grub_netbsd_load_elf_meta32): New prototype. + (grub_netbsd_load_elf_meta64): Likewise. + (grub_bsd_add_meta): Likewise. + (grub_openbsd_ramdisk_descriptor): New struct. + (grub_openbsd_find_ramdisk32): New prototype. + (grub_openbsd_find_ramdisk64): Likewise. + * include/grub/i386/coreboot/loader.h: Removed. + * include/grub/i386/efi/loader.h: Likewise. + * include/grub/i386/ieee1275/loader.h: Likewise. + * include/grub/i386/linux.h (linux_kernel_header): Change void * + to grub_uint32_t. + * include/grub/i386/loader.h: Removed. + * include/grub/i386/memory.h (GRUB_MEMORY_CPU_CR4_PAE_ON): Correct the + value. + (GRUB_MEMORY_CPU_CR4_PSE_ON): New definition. + (grub_phys_addr_t): New type. + (grub_vtop): New inline function. + (grub_map_memory): Likewise. + (grub_unmap_memory): Likewise. + * include/grub/i386/multiboot/loader.h: Removed. + * include/grub/i386/netbsd_bootinfo.h (NETBSD_BTINFO_BOOTDISK): Removed. + (NETBSD_BTINFO_CONSOLE): New definition. + (NETBSD_BTINFO_SYMTAB): Likewise. + (NETBSD_BTINFO_MODULES): Likewise. + (NETBSD_BTINFO_FRAMEBUF): Likewise. + (grub_netbsd_bootinfo): New struct. + (grub_netbsd_btinfo_common): Use explicit bitsize. + (grub_netbsd_btinfo_mmap_entry): Removed. + (GRUB_NETBSD_MAX_BOOTPATH_LEN): New definition. + (grub_netbsd_btinfo_bootdisk): New struct. + (grub_netbsd_btinfo_symtab): Likewise. + (grub_netbsd_btinfo_serial): Likewise. + (grub_netbsd_btinfo_modules): Likewise. + (grub_netbsd_btinfo_framebuf): Likewise. + (GRUB_NETBSD_MAX_ROOTDEVICE_LEN): New definition. + * include/grub/i386/openbsd_bootarg.h (OPENBSD_BOOTARG_CONSOLE): + Likewise. + (grub_openbsd_bootargs): Use explicit bitsize. + (grub_openbsd_bootarg_console): New struct. + (GRUB_OPENBSD_COM_MAJOR): New definition. + (GRUB_OPENBSD_VGA_MAJOR): Likewise. + * include/grub/i386/pc/efiemu.h: Removed. + * include/grub/i386/pc/loader.h: Don't include cpu/loader.h. + * include/grub/i386/qemu/loader.h: Removed. + * include/grub/i386/relocator.h: Rewritten. + * include/grub/i386/xnu.h (grub_xnu_heap_will_be_at): Removed. + * include/grub/mips/memory.h: New file. + * include/grub/mips/multiboot.h: Rewritten. + * include/grub/mips/relocator.h: Rewritten. + * include/grub/mips/yeeloong/memory.h (grub_phys_addr_t): New type. + (grub_vtop): New function. + (grub_map_memory): Likewise. + (grub_unmap_memory): Likewise. + * include/grub/misc.h (ALIGN_DOWN): New definition. + * include/grub/mm.h (grub_mm_check_real): New proto. + (GRUB_MM_CHECK): New definition. + * include/grub/mm_private.h: New file. + * include/grub/multiboot.h (grub_multiboot_relocator): New variable. + (grub_multiboot_get_mbi_size): Removed. + (grub_multiboot_make_mbi): Change prottype. + (grub_multiboot_set_accepts_video): New proto. + (grub_multiboot_add_elfsyms): Likewise. + (grub_multiboot_payload_eip): New variable. + * include/grub/ns8250.h (grub_ns8250_hw_get_port) [!ASM_FILE]: + New prototype. + * include/grub/offsets.h (GRUB_KERNEL_I386_MULTIBOOT_PREFIX): + New definition. + (GRUB_KERNEL_I386_MULTIBOOT_DATA_END): Likewise. + (GRUB_KERNEL_I386_MULTIBOOT_MOD_ALIGN): Likewise. + * include/grub/powerpc/ieee1275/loader.h: Removed. + * include/grub/powerpc/memory.h: New file. + * include/grub/powerpc/relocator.h: Likewise. + * include/grub/relocator.h: Likewise. + * include/grub/relocator_private.h: Likewise. + * include/grub/sparc64/ieee1275/loader.h: Removed. + * include/grub/x86_64/memory.h: New file. + * include/grub/xnu.h (grub_xnu_writetree_toheap): Changed prototype. + (grub_xnu_heap_malloc): Likewise. + (grub_xnu_heap_real_start): Removed. + (grub_xnu_heap_start): Likewise. + (grub_xnu_relocator): New variable. + (grub_xnu_heap_target_start): Likewise. + * tests/util/grub-shell.in: Support non-pc. + * util/grub-mkimage.c (image_targets): Fix multiboot target. 2010-08-29 Vladimir Serbinenko From 3dca01d7e3b7f798d3d38dd3e52c8e90fd952bc6 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 30 Aug 2010 01:09:28 +0200 Subject: [PATCH 268/271] * grub-core/term/i386/vga_common.c (grub_console_setcolorstate): Mask out the bit 0x80 since it has other meaning that specifiing color. --- ChangeLog | 5 +++++ grub-core/term/i386/vga_common.c | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4d5d6653a..9e84cc88b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-30 Vladimir Serbinenko + + * grub-core/term/i386/vga_common.c (grub_console_setcolorstate): + Mask out the bit 0x80 since it has other meaning that specifiing color. + 2010-08-29 Vladimir Serbinenko New relocator. Allows for more kernel support and more straightforward diff --git a/grub-core/term/i386/vga_common.c b/grub-core/term/i386/vga_common.c index 02fb5c02d..0c217697b 100644 --- a/grub-core/term/i386/vga_common.c +++ b/grub-core/term/i386/vga_common.c @@ -34,13 +34,13 @@ grub_console_setcolorstate (struct grub_term_output *term, { switch (state) { case GRUB_TERM_COLOR_STANDARD: - grub_console_cur_color = GRUB_TERM_DEFAULT_STANDARD_COLOR; + grub_console_cur_color = GRUB_TERM_DEFAULT_STANDARD_COLOR & 0x7f; break; case GRUB_TERM_COLOR_NORMAL: - grub_console_cur_color = term->normal_color; + grub_console_cur_color = term->normal_color & 0x7f; break; case GRUB_TERM_COLOR_HIGHLIGHT: - grub_console_cur_color = term->highlight_color; + grub_console_cur_color = term->highlight_color & 0x7f; break; default: break; From 9a9de209a2302aae260285531675e21762a62b32 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 30 Aug 2010 01:11:12 +0200 Subject: [PATCH 269/271] * grub-core/normal/term.c (print_more): Return to normal and not to standard state after printing "---MORE---". --- ChangeLog | 5 +++++ grub-core/normal/term.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9e84cc88b..b59a69569 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-30 Vladimir Serbinenko + + * grub-core/normal/term.c (print_more): Return to normal and not + to standard state after printing "---MORE---". + 2010-08-30 Vladimir Serbinenko * grub-core/term/i386/vga_common.c (grub_console_setcolorstate): diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c index 02850ef4e..b55c0f06a 100644 --- a/grub-core/normal/term.c +++ b/grub-core/normal/term.c @@ -86,7 +86,7 @@ print_more (void) { grub_print_ucs4 (unicode_str, unicode_last_position, 0, 0, term); } - grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + grub_setcolorstate (GRUB_TERM_COLOR_NORMAL); grub_free (unicode_str); From f21db0332f801a8c027e5d775358a8611164a77d Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 30 Aug 2010 01:12:37 +0200 Subject: [PATCH 270/271] * grub-core/normal/color.c (grub_env_write_color_normal): Fix a warning. (grub_env_write_color_highlight): Likewise. --- ChangeLog | 5 +++++ grub-core/normal/color.c | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index b59a69569..1f7bbfa6c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-30 Vladimir Serbinenko + + * grub-core/normal/color.c (grub_env_write_color_normal): Fix a warning. + (grub_env_write_color_highlight): Likewise. + 2010-08-30 Vladimir Serbinenko * grub-core/normal/term.c (print_more): Return to normal and not diff --git a/grub-core/normal/color.c b/grub-core/normal/color.c index a16d1c2f9..2e6c80b94 100644 --- a/grub-core/normal/color.c +++ b/grub-core/normal/color.c @@ -125,10 +125,11 @@ set_colors (void) /* Replace default `normal' colors with the ones specified by user (if any). */ char * -grub_env_write_color_normal (struct grub_env_var *var, const char *val) +grub_env_write_color_normal (struct grub_env_var *var __attribute__ ((unused)), + const char *val) { if (grub_parse_color_name_pair (&color_normal, val)) - return 0; + return NULL; set_colors (); @@ -137,10 +138,11 @@ grub_env_write_color_normal (struct grub_env_var *var, const char *val) /* Replace default `highlight' colors with the ones specified by user (if any). */ char * -grub_env_write_color_highlight (struct grub_env_var *var, const char *val) +grub_env_write_color_highlight (struct grub_env_var *var __attribute__ ((unused)), + const char *val) { if (grub_parse_color_name_pair (&color_highlight, val)) - return 0; + return NULL; set_colors (); From 8920a08d8794d4f3c6d6a529461a70ac5e1809a5 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 30 Aug 2010 01:14:07 +0200 Subject: [PATCH 271/271] * grub-core/normal/menu.c (grub_wait_after_message): Add a 10 second timeout to avoid indefinite boot stalling. --- ChangeLog | 5 +++++ grub-core/normal/menu.c | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 1f7bbfa6c..095cec7f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-30 Vladimir Serbinenko + + * grub-core/normal/menu.c (grub_wait_after_message): Add a 10 second + timeout to avoid indefinite boot stalling. + 2010-08-30 Vladimir Serbinenko * grub-core/normal/color.c (grub_env_write_color_normal): Fix a warning. diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c index b57990b0d..cc84ce38c 100644 --- a/grub-core/normal/menu.c +++ b/grub-core/normal/menu.c @@ -43,9 +43,20 @@ grub_err_t (*grub_gfxmenu_try_hook) (int entry, grub_menu_t menu, void grub_wait_after_message (void) { + grub_uint64_t endtime; grub_xputs ("\n"); grub_printf_ (N_("Press any key to continue...")); - (void) grub_getkey (); + grub_refresh (); + + endtime = grub_get_time_ms () + 10000; + + while (grub_get_time_ms () < endtime) + if (grub_checkkey () >= 0) + { + grub_getkey (); + break; + } + grub_xputs ("\n"); }