merge mainstream into mips
This commit is contained in:
commit
5afcd00788
104 changed files with 40003 additions and 2373 deletions
|
@ -51,7 +51,7 @@
|
|||
#include <grub/i386/relocator.h>
|
||||
|
||||
extern grub_dl_t my_mod;
|
||||
static struct grub_multiboot_info *mbi, *mbi_dest;
|
||||
static struct multiboot_info *mbi, *mbi_dest;
|
||||
|
||||
static grub_size_t code_size;
|
||||
|
||||
|
@ -85,22 +85,22 @@ grub_multiboot_boot (void)
|
|||
static grub_err_t
|
||||
grub_multiboot_unload (void)
|
||||
{
|
||||
if (playground)
|
||||
if (mbi)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i = 0; i < mbi->mods_count; i++)
|
||||
{
|
||||
grub_free ((void *)
|
||||
((struct grub_mod_list *) mbi->mods_addr)[i].mod_start);
|
||||
((struct multiboot_mod_list *) mbi->mods_addr)[i].mod_start);
|
||||
grub_free ((void *)
|
||||
((struct grub_mod_list *) mbi->mods_addr)[i].cmdline);
|
||||
((struct multiboot_mod_list *) mbi->mods_addr)[i].cmdline);
|
||||
}
|
||||
grub_free ((void *) mbi->mods_addr);
|
||||
grub_free (playground);
|
||||
}
|
||||
grub_relocator32_free (grub_multiboot_payload_orig);
|
||||
|
||||
mbi = NULL;
|
||||
playground = NULL;
|
||||
grub_multiboot_payload_orig = NULL;
|
||||
grub_dl_unref (my_mod);
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
|
@ -124,14 +124,14 @@ grub_get_multiboot_mmap_len (void)
|
|||
|
||||
grub_mmap_iterate (hook);
|
||||
|
||||
return count * sizeof (struct grub_multiboot_mmap_entry);
|
||||
return count * sizeof (struct multiboot_mmap_entry);
|
||||
}
|
||||
|
||||
/* Fill previously allocated Multiboot mmap. */
|
||||
static void
|
||||
grub_fill_multiboot_mmap (struct grub_multiboot_mmap_entry *first_entry)
|
||||
grub_fill_multiboot_mmap (struct multiboot_mmap_entry *first_entry)
|
||||
{
|
||||
struct grub_multiboot_mmap_entry *mmap_entry = (struct grub_multiboot_mmap_entry *) first_entry;
|
||||
struct multiboot_mmap_entry *mmap_entry = (struct multiboot_mmap_entry *) first_entry;
|
||||
|
||||
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)
|
||||
|
@ -139,7 +139,7 @@ grub_fill_multiboot_mmap (struct grub_multiboot_mmap_entry *first_entry)
|
|||
mmap_entry->addr = addr;
|
||||
mmap_entry->len = size;
|
||||
mmap_entry->type = type;
|
||||
mmap_entry->size = sizeof (struct grub_multiboot_mmap_entry) - sizeof (mmap_entry->size);
|
||||
mmap_entry->size = sizeof (struct multiboot_mmap_entry) - sizeof (mmap_entry->size);
|
||||
mmap_entry++;
|
||||
|
||||
return 0;
|
||||
|
@ -214,7 +214,7 @@ grub_multiboot (int argc, char *argv[])
|
|||
{
|
||||
grub_file_t file = 0;
|
||||
char buffer[MULTIBOOT_SEARCH], *cmdline = 0, *p;
|
||||
struct grub_multiboot_header *header;
|
||||
struct multiboot_header *header;
|
||||
grub_ssize_t len, cmdline_length, boot_loader_name_length;
|
||||
grub_uint32_t mmap_length;
|
||||
int i;
|
||||
|
@ -245,9 +245,9 @@ grub_multiboot (int argc, char *argv[])
|
|||
|
||||
/* Look for the multiboot header in the buffer. The header should
|
||||
be at least 12 bytes and aligned on a 4-byte boundary. */
|
||||
for (header = (struct grub_multiboot_header *) buffer;
|
||||
for (header = (struct multiboot_header *) buffer;
|
||||
((char *) header <= buffer + len - 12) || (header = 0);
|
||||
header = (struct grub_multiboot_header *) ((char *) header + 4))
|
||||
header = (struct multiboot_header *) ((char *) header + 4))
|
||||
{
|
||||
if (header->magic == MULTIBOOT_MAGIC
|
||||
&& !(header->magic + header->flags + header->checksum))
|
||||
|
@ -289,13 +289,13 @@ grub_multiboot (int argc, char *argv[])
|
|||
#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 grub_multiboot_info)))
|
||||
#define stack_addr(x) ((void *) ((x) + code_size + cmdline_length + boot_loader_name_length + sizeof (struct grub_multiboot_info) + mmap_length + GRUB_MULTIBOOT_STACK_SIZE))
|
||||
#define mmap_addr(x) ((void *) ((x) + code_size + cmdline_length + boot_loader_name_length + sizeof (struct multiboot_info)))
|
||||
#define stack_addr(x) ((void *) ((x) + code_size + cmdline_length + boot_loader_name_length + sizeof (struct multiboot_info) + mmap_length + GRUB_MULTIBOOT_STACK_SIZE))
|
||||
|
||||
grub_multiboot_payload_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 grub_multiboot_info) + mmap_length
|
||||
+ sizeof (struct multiboot_info) + mmap_length
|
||||
+ GRUB_MULTIBOOT_STACK_SIZE;
|
||||
|
||||
if (header->flags & MULTIBOOT_AOUT_KLUDGE)
|
||||
|
@ -341,7 +341,7 @@ grub_multiboot (int argc, char *argv[])
|
|||
|
||||
mbi = mbi_addr (grub_multiboot_payload_orig);
|
||||
mbi_dest = mbi_addr (grub_multiboot_payload_dest);
|
||||
grub_memset (mbi, 0, sizeof (struct grub_multiboot_info));
|
||||
grub_memset (mbi, 0, sizeof (struct multiboot_info));
|
||||
mbi->mmap_length = mmap_length;
|
||||
|
||||
grub_fill_multiboot_mmap (mmap_addr (grub_multiboot_payload_orig));
|
||||
|
@ -464,10 +464,10 @@ grub_module (int argc, char *argv[])
|
|||
|
||||
if (mbi->flags & MULTIBOOT_INFO_MODS)
|
||||
{
|
||||
struct grub_mod_list *modlist = (struct grub_mod_list *) mbi->mods_addr;
|
||||
struct multiboot_mod_list *modlist = (struct multiboot_mod_list *) mbi->mods_addr;
|
||||
|
||||
modlist = grub_realloc (modlist, (mbi->mods_count + 1)
|
||||
* sizeof (struct grub_mod_list));
|
||||
* sizeof (struct multiboot_mod_list));
|
||||
if (! modlist)
|
||||
goto fail;
|
||||
mbi->mods_addr = (grub_uint32_t) modlist;
|
||||
|
@ -480,7 +480,7 @@ grub_module (int argc, char *argv[])
|
|||
}
|
||||
else
|
||||
{
|
||||
struct grub_mod_list *modlist = grub_zalloc (sizeof (struct grub_mod_list));
|
||||
struct multiboot_mod_list *modlist = grub_zalloc (sizeof (struct multiboot_mod_list));
|
||||
if (! modlist)
|
||||
goto fail;
|
||||
modlist->mod_start = (grub_uint32_t) module;
|
||||
|
|
|
@ -95,17 +95,17 @@ grub_mb2_arch_boot (grub_addr_t entry, void *tags)
|
|||
}
|
||||
|
||||
void
|
||||
grub_mb2_arch_unload (struct multiboot_tag_header *tags)
|
||||
grub_mb2_arch_unload (struct multiboot2_tag_header *tags)
|
||||
{
|
||||
struct multiboot_tag_header *tag;
|
||||
struct multiboot2_tag_header *tag;
|
||||
|
||||
/* Free all module memory in the tag list. */
|
||||
for_each_tag (tag, tags)
|
||||
{
|
||||
if (tag->key == MULTIBOOT2_TAG_MODULE)
|
||||
{
|
||||
struct multiboot_tag_module *module =
|
||||
(struct multiboot_tag_module *) tag;
|
||||
struct multiboot2_tag_module *module =
|
||||
(struct multiboot2_tag_module *) tag;
|
||||
grub_free((void *) module->addr);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -115,17 +115,17 @@ grub_mb2_tags_arch_create (void)
|
|||
|
||||
/* Release the memory we claimed from Open Firmware above. */
|
||||
void
|
||||
grub_mb2_arch_unload (struct multiboot_tag_header *tags)
|
||||
grub_mb2_arch_unload (struct multiboot2_tag_header *tags)
|
||||
{
|
||||
struct multiboot_tag_header *tag;
|
||||
struct multiboot2_tag_header *tag;
|
||||
|
||||
/* Free all module memory in the tag list. */
|
||||
for_each_tag (tag, tags)
|
||||
{
|
||||
if (tag->key == MULTIBOOT2_TAG_MODULE)
|
||||
{
|
||||
struct multiboot_tag_module *module =
|
||||
(struct multiboot_tag_module *) tag;
|
||||
struct multiboot2_tag_module *module =
|
||||
(struct multiboot2_tag_module *) tag;
|
||||
grub_ieee1275_release (module->addr, module->size);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ grub_mb2_tags_free (void)
|
|||
grub_err_t
|
||||
grub_mb2_tag_alloc (grub_addr_t *addr, int key, grub_size_t len)
|
||||
{
|
||||
struct multiboot_tag_header *tag;
|
||||
struct multiboot2_tag_header *tag;
|
||||
grub_size_t used;
|
||||
grub_size_t needed;
|
||||
|
||||
|
@ -59,7 +59,7 @@ grub_mb2_tag_alloc (grub_addr_t *addr, int key, grub_size_t len)
|
|||
key, (unsigned long) len);
|
||||
|
||||
used = grub_mb2_tags_pos - grub_mb2_tags;
|
||||
len = ALIGN_UP (len, sizeof (multiboot_word));
|
||||
len = ALIGN_UP (len, sizeof (multiboot2_word));
|
||||
|
||||
needed = used + len;
|
||||
|
||||
|
@ -83,7 +83,7 @@ grub_mb2_tag_alloc (grub_addr_t *addr, int key, grub_size_t len)
|
|||
grub_mb2_tags_pos = newarea + used;
|
||||
}
|
||||
|
||||
tag = (struct multiboot_tag_header *) grub_mb2_tags_pos;
|
||||
tag = (struct multiboot2_tag_header *) grub_mb2_tags_pos;
|
||||
grub_mb2_tags_pos += len;
|
||||
|
||||
tag->key = key;
|
||||
|
@ -103,24 +103,24 @@ static grub_err_t
|
|||
grub_mb2_tag_start_create (void)
|
||||
{
|
||||
return grub_mb2_tag_alloc (0, MULTIBOOT2_TAG_START,
|
||||
sizeof (struct multiboot_tag_start));
|
||||
sizeof (struct multiboot2_tag_start));
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
grub_mb2_tag_name_create (void)
|
||||
{
|
||||
struct multiboot_tag_name *name;
|
||||
struct multiboot2_tag_name *name;
|
||||
grub_addr_t name_addr;
|
||||
grub_err_t err;
|
||||
const char *grub_version = PACKAGE_STRING;
|
||||
|
||||
err = grub_mb2_tag_alloc (&name_addr, MULTIBOOT2_TAG_NAME,
|
||||
sizeof (struct multiboot_tag_name) +
|
||||
sizeof (struct multiboot2_tag_name) +
|
||||
sizeof (grub_version) + 1);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
name = (struct multiboot_tag_name *) name_addr;
|
||||
name = (struct multiboot2_tag_name *) name_addr;
|
||||
grub_strcpy (name->name, grub_version);
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
|
@ -159,17 +159,17 @@ error:
|
|||
static grub_err_t
|
||||
grub_mb2_tags_finish (void)
|
||||
{
|
||||
struct multiboot_tag_start *start;
|
||||
struct multiboot2_tag_start *start;
|
||||
grub_err_t err;
|
||||
|
||||
/* Create the `end' tag. */
|
||||
err = grub_mb2_tag_alloc (0, MULTIBOOT2_TAG_END,
|
||||
sizeof (struct multiboot_tag_end));
|
||||
sizeof (struct multiboot2_tag_end));
|
||||
if (err)
|
||||
goto error;
|
||||
|
||||
/* We created the `start' tag first. Update it now. */
|
||||
start = (struct multiboot_tag_start *) grub_mb2_tags;
|
||||
start = (struct multiboot2_tag_start *) grub_mb2_tags;
|
||||
start->size = grub_mb2_tags_pos - grub_mb2_tags;
|
||||
return GRUB_ERR_NONE;
|
||||
|
||||
|
@ -195,17 +195,17 @@ grub_mb2_boot (void)
|
|||
static grub_err_t
|
||||
grub_mb2_unload (void)
|
||||
{
|
||||
struct multiboot_tag_header *tag;
|
||||
struct multiboot_tag_header *tags =
|
||||
(struct multiboot_tag_header *) grub_mb2_tags;
|
||||
struct multiboot2_tag_header *tag;
|
||||
struct multiboot2_tag_header *tags =
|
||||
(struct multiboot2_tag_header *) grub_mb2_tags;
|
||||
|
||||
/* Free all module memory in the tag list. */
|
||||
for_each_tag (tag, tags)
|
||||
{
|
||||
if (tag->key == MULTIBOOT2_TAG_MODULE)
|
||||
{
|
||||
struct multiboot_tag_module *module =
|
||||
(struct multiboot_tag_module *) tag;
|
||||
struct multiboot2_tag_module *module =
|
||||
(struct multiboot2_tag_module *) tag;
|
||||
grub_free ((void *) module->addr);
|
||||
}
|
||||
}
|
||||
|
@ -233,7 +233,7 @@ static grub_err_t
|
|||
grub_mb2_tag_module_create (grub_addr_t modaddr, grub_size_t modsize,
|
||||
char *type, int key, int argc, char *argv[])
|
||||
{
|
||||
struct multiboot_tag_module *module;
|
||||
struct multiboot2_tag_module *module;
|
||||
grub_ssize_t argslen = 0;
|
||||
grub_err_t err;
|
||||
char *p;
|
||||
|
@ -246,11 +246,11 @@ grub_mb2_tag_module_create (grub_addr_t modaddr, grub_size_t modsize,
|
|||
|
||||
/* Note: includes implicit 1-byte cmdline. */
|
||||
err = grub_mb2_tag_alloc (&module_addr, key,
|
||||
sizeof (struct multiboot_tag_module) + argslen);
|
||||
sizeof (struct multiboot2_tag_module) + argslen);
|
||||
if (err)
|
||||
return grub_errno;
|
||||
|
||||
module = (struct multiboot_tag_module *) module_addr;
|
||||
module = (struct multiboot2_tag_module *) module_addr;
|
||||
module->addr = modaddr;
|
||||
module->size = modsize;
|
||||
grub_strcpy(module->type, type);
|
||||
|
@ -308,7 +308,7 @@ grub_multiboot2 (int argc, char *argv[])
|
|||
char *buffer;
|
||||
grub_file_t file = 0;
|
||||
grub_elf_t elf = 0;
|
||||
struct multiboot_header *header = 0;
|
||||
struct multiboot2_header *header = 0;
|
||||
char *p;
|
||||
grub_ssize_t len;
|
||||
grub_err_t err;
|
||||
|
@ -344,7 +344,7 @@ grub_multiboot2 (int argc, char *argv[])
|
|||
be at least 8 bytes and aligned on a 8-byte boundary. */
|
||||
for (p = buffer; p <= buffer + len - 8; p += 8)
|
||||
{
|
||||
header = (struct multiboot_header *) p;
|
||||
header = (struct multiboot2_header *) p;
|
||||
if (header->magic == MULTIBOOT2_HEADER_MAGIC)
|
||||
{
|
||||
header_found = 1;
|
||||
|
|
|
@ -44,7 +44,7 @@ static unsigned int module_version_status = 1;
|
|||
static int
|
||||
find_multi_boot1_header (grub_file_t file)
|
||||
{
|
||||
struct grub_multiboot_header *header;
|
||||
struct multiboot_header *header;
|
||||
char buffer[MULTIBOOT_SEARCH];
|
||||
int found_status = 0;
|
||||
grub_ssize_t len;
|
||||
|
@ -55,9 +55,9 @@ find_multi_boot1_header (grub_file_t file)
|
|||
|
||||
/* Look for the multiboot header in the buffer. The header should
|
||||
be at least 12 bytes and aligned on a 4-byte boundary. */
|
||||
for (header = (struct grub_multiboot_header *) buffer;
|
||||
for (header = (struct multiboot_header *) buffer;
|
||||
((char *) header <= buffer + len - 12) || (header = 0);
|
||||
header = (struct grub_multiboot_header *) ((char *) header + 4))
|
||||
header = (struct multiboot_header *) ((char *) header + 4))
|
||||
{
|
||||
if (header->magic == MULTIBOOT_MAGIC
|
||||
&& !(header->magic + header->flags + header->checksum))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue