Merge mainline into multiterm
This commit is contained in:
commit
519634516f
239 changed files with 3529 additions and 1873 deletions
|
@ -37,7 +37,7 @@ grub_register_command_prio (const char *name,
|
|||
|
||||
cmd->name = name;
|
||||
cmd->func = func;
|
||||
cmd->summary = (summary) ? summary : name;
|
||||
cmd->summary = (summary) ? summary : "";
|
||||
cmd->description = description;
|
||||
|
||||
cmd->flags = GRUB_COMMAND_FLAG_BOTH;
|
||||
|
|
|
@ -190,13 +190,13 @@ void
|
|||
grub_register_core_commands (void)
|
||||
{
|
||||
grub_register_command ("set", grub_core_cmd_set,
|
||||
"set [ENVVAR=VALUE]", "set an environment variable");
|
||||
"[ENVVAR=VALUE]", "Set an environment variable.");
|
||||
grub_register_command ("unset", grub_core_cmd_unset,
|
||||
"unset ENVVAR", "remove an environment variable");
|
||||
"ENVVAR", "Remove an environment variable.");
|
||||
grub_register_command ("export", grub_core_cmd_export,
|
||||
"export ENVVAR", "Export a variable.");
|
||||
"ENVVAR", "Export a variable.");
|
||||
grub_register_command ("ls", grub_core_cmd_ls,
|
||||
"ls [ARG]", "list devices or files");
|
||||
"[ARG]", "List devices or files.");
|
||||
grub_register_command ("insmod", grub_core_cmd_insmod,
|
||||
"insmod MODULE", "insert a module");
|
||||
"MODULE", "Insert a module.");
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* device.c - device manager */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2005,2007,2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2005,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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2003,2004,2006,2007,2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2003,2004,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
|
||||
|
@ -386,8 +386,6 @@ grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
|||
char *tmp_buf;
|
||||
unsigned real_offset;
|
||||
|
||||
grub_dprintf ("disk", "Reading `%s'...\n", disk->name);
|
||||
|
||||
/* First of all, check if the region is within the disk. */
|
||||
if (grub_disk_adjust_range (disk, §or, &offset, size) != GRUB_ERR_NONE)
|
||||
{
|
||||
|
@ -432,8 +430,9 @@ grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
|||
else
|
||||
{
|
||||
/* Otherwise read data from the disk actually. */
|
||||
if ((disk->dev->read) (disk, start_sector,
|
||||
GRUB_DISK_CACHE_SIZE, tmp_buf)
|
||||
if (start_sector + GRUB_DISK_CACHE_SIZE > disk->total_sectors
|
||||
|| (disk->dev->read) (disk, start_sector,
|
||||
GRUB_DISK_CACHE_SIZE, tmp_buf)
|
||||
!= GRUB_ERR_NONE)
|
||||
{
|
||||
/* Uggh... Failed. Instead, just read necessary data. */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* efi.c - generic EFI support */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
|
||||
* 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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* mm.c - generic EFI memory management */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
|
||||
* 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
|
||||
|
|
28
kern/elf.c
28
kern/elf.c
|
@ -1,7 +1,7 @@
|
|||
/* elf.c - load ELF files */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2003,2004,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
|
||||
|
@ -74,7 +74,7 @@ grub_elf_file (grub_file_t file)
|
|||
!= sizeof (elf->ehdr))
|
||||
{
|
||||
grub_error_push ();
|
||||
grub_error (GRUB_ERR_READ_ERROR, "Cannot read ELF header.");
|
||||
grub_error (GRUB_ERR_READ_ERROR, "cannot read ELF header");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
@ -134,7 +134,7 @@ grub_elf32_load_phdrs (grub_elf_t elf)
|
|||
|| (grub_file_read (elf->file, elf->phdrs, phdrs_size) != phdrs_size))
|
||||
{
|
||||
grub_error_push ();
|
||||
return grub_error (GRUB_ERR_READ_ERROR, "Cannot read program headers");
|
||||
return grub_error (GRUB_ERR_READ_ERROR, "cannot read program headers");
|
||||
}
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
|
@ -200,14 +200,14 @@ grub_elf32_size (grub_elf_t elf)
|
|||
|
||||
if (nr_phdrs == 0)
|
||||
{
|
||||
grub_error (GRUB_ERR_BAD_OS, "No program headers present");
|
||||
grub_error (GRUB_ERR_BAD_OS, "no program headers present");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (segments_end < segments_start)
|
||||
{
|
||||
/* Very bad addresses. */
|
||||
grub_error (GRUB_ERR_BAD_OS, "Bad program header load addresses");
|
||||
grub_error (GRUB_ERR_BAD_OS, "bad program header load addresses");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -249,7 +249,7 @@ grub_elf32_load (grub_elf_t _elf, grub_elf32_load_hook_t _load_hook,
|
|||
{
|
||||
grub_error_push ();
|
||||
return grub_error (GRUB_ERR_BAD_OS,
|
||||
"Invalid offset in program header.");
|
||||
"invalid offset in program header");
|
||||
}
|
||||
|
||||
if (phdr->p_filesz)
|
||||
|
@ -261,8 +261,8 @@ grub_elf32_load (grub_elf_t _elf, grub_elf32_load_hook_t _load_hook,
|
|||
/* XXX How can we free memory from `load_hook'? */
|
||||
grub_error_push ();
|
||||
return grub_error (GRUB_ERR_BAD_OS,
|
||||
"Couldn't read segment from file: "
|
||||
"wanted 0x%lx bytes; read 0x%lx bytes.",
|
||||
"couldn't read segment from file: "
|
||||
"wanted 0x%lx bytes; read 0x%lx bytes",
|
||||
phdr->p_filesz, read);
|
||||
}
|
||||
}
|
||||
|
@ -315,7 +315,7 @@ grub_elf64_load_phdrs (grub_elf_t elf)
|
|||
|| (grub_file_read (elf->file, elf->phdrs, phdrs_size) != phdrs_size))
|
||||
{
|
||||
grub_error_push ();
|
||||
return grub_error (GRUB_ERR_READ_ERROR, "Cannot read program headers");
|
||||
return grub_error (GRUB_ERR_READ_ERROR, "cannot read program headers");
|
||||
}
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
|
@ -381,14 +381,14 @@ grub_elf64_size (grub_elf_t elf)
|
|||
|
||||
if (nr_phdrs == 0)
|
||||
{
|
||||
grub_error (GRUB_ERR_BAD_OS, "No program headers present");
|
||||
grub_error (GRUB_ERR_BAD_OS, "no program headers present");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (segments_end < segments_start)
|
||||
{
|
||||
/* Very bad addresses. */
|
||||
grub_error (GRUB_ERR_BAD_OS, "Bad program header load addresses");
|
||||
grub_error (GRUB_ERR_BAD_OS, "bad program header load addresses");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -431,7 +431,7 @@ grub_elf64_load (grub_elf_t _elf, grub_elf64_load_hook_t _load_hook,
|
|||
{
|
||||
grub_error_push ();
|
||||
return grub_error (GRUB_ERR_BAD_OS,
|
||||
"Invalid offset in program header.");
|
||||
"invalid offset in program header");
|
||||
}
|
||||
|
||||
if (phdr->p_filesz)
|
||||
|
@ -443,8 +443,8 @@ grub_elf64_load (grub_elf_t _elf, grub_elf64_load_hook_t _load_hook,
|
|||
/* XXX How can we free memory from `load_hook'? */
|
||||
grub_error_push ();
|
||||
return grub_error (GRUB_ERR_BAD_OS,
|
||||
"Couldn't read segment from file: "
|
||||
"wanted 0x%lx bytes; read 0x%lx bytes.",
|
||||
"couldn't read segment from file: "
|
||||
"wanted 0x%lx bytes; read 0x%lx bytes",
|
||||
phdr->p_filesz, read);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -264,10 +264,11 @@ grub_env_unset (const char *name)
|
|||
if (! var)
|
||||
return;
|
||||
|
||||
/* XXX: It is not possible to unset variables with a read or write
|
||||
hook. */
|
||||
if (var->read_hook || var->write_hook)
|
||||
return;
|
||||
{
|
||||
grub_env_set (name, "");
|
||||
return;
|
||||
}
|
||||
|
||||
grub_env_remove (var);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* file.c - file I/O functions */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2006,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2006,2007,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
|
||||
|
@ -115,7 +115,7 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
|
|||
if (file->offset > file->size)
|
||||
{
|
||||
grub_error (GRUB_ERR_OUT_OF_RANGE,
|
||||
"Attempt to read past the end of file.");
|
||||
"attempt to read past the end of file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ multiboot_header:
|
|||
.long -0x1BADB002 - MULTIBOOT_MEMORY_INFO
|
||||
|
||||
codestart:
|
||||
cmpl $MULTIBOOT_MAGIC2, %eax
|
||||
cmpl $MULTIBOOT_BOOTLOADER_MAGIC, %eax
|
||||
jne 0f
|
||||
movl %ebx, EXT_C(startup_multiboot_info)
|
||||
0:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* dl-386.c - arch-dependent part of loadable module support */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2005,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2005,2007,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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2003,2004,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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc.
|
||||
* 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
|
||||
|
@ -764,6 +764,11 @@ FUNCTION(grub_biosdisk_get_diskinfo_int13_extensions)
|
|||
movw %cx, %ax
|
||||
movw %bx, %ds
|
||||
int $0x13 /* do the operation */
|
||||
jc noclean
|
||||
/* Clean return value if carry isn't set to workaround
|
||||
some buggy BIOSes. */
|
||||
xor %ax, %ax
|
||||
noclean:
|
||||
movb %ah, %bl /* save return value in %bl */
|
||||
/* back to protected mode */
|
||||
DATA32 call real_to_prot
|
||||
|
@ -807,6 +812,11 @@ FUNCTION(grub_biosdisk_get_diskinfo_standard)
|
|||
.code16
|
||||
movb $0x8, %ah
|
||||
int $0x13 /* do the operation */
|
||||
jc noclean2
|
||||
/* Clean return value if carry isn't set to workaround
|
||||
some buggy BIOSes. */
|
||||
xor %ax, %ax
|
||||
noclean2:
|
||||
/* check if successful */
|
||||
testb %ah, %ah
|
||||
jnz 1f
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* of.c - Access the Open Firmware client interface. */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2003,2004,2005,2007,2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2003,2004,2005,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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* init.c -- Initialize GRUB on the newworld mac (PPC). */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2003,2004,2005,2007,2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2003,2004,2005,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
|
||||
|
@ -164,7 +164,7 @@ static void grub_claim_heap (void)
|
|||
/* Claim and use it. */
|
||||
if (grub_claimmap (addr, len) < 0)
|
||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||
"Failed to claim heap at 0x%llx, len 0x%llx\n",
|
||||
"failed to claim heap at 0x%llx, len 0x%llx",
|
||||
addr, len);
|
||||
grub_mm_init_region ((void *) (grub_addr_t) addr, len);
|
||||
}
|
||||
|
|
|
@ -44,11 +44,11 @@ grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uin
|
|||
/* Load `/memory/available'. */
|
||||
if (grub_ieee1275_finddevice ("/memory", &memory))
|
||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||
"Couldn't find /memory node");
|
||||
"couldn't find /memory node");
|
||||
if (grub_ieee1275_get_integer_property (memory, "available", available,
|
||||
sizeof available, &available_size))
|
||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||
"Couldn't examine /memory/available property");
|
||||
"couldn't examine /memory/available property");
|
||||
|
||||
/* Decode each entry and call `hook'. */
|
||||
i = 0;
|
||||
|
|
|
@ -308,13 +308,13 @@ grub_ieee1275_parse_args (const char *path, enum grub_ieee1275_parse_type ptype)
|
|||
file path properly. */
|
||||
if (grub_ieee1275_finddevice (device, &dev))
|
||||
{
|
||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Device %s not found\n", device);
|
||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "device %s not found", device);
|
||||
goto fail;
|
||||
}
|
||||
if (grub_ieee1275_get_property (dev, "device_type", &type, sizeof type, 0))
|
||||
{
|
||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||
"Device %s lacks a device_type property\n", device);
|
||||
"device %s lacks a device_type property", device);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* main.c - the kernel main routine */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2003,2005,2006,2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2003,2005,2006,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
|
||||
|
|
12
kern/misc.c
12
kern/misc.c
|
@ -1,7 +1,7 @@
|
|||
/* misc.c - definitions of misc functions */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* 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
|
||||
|
@ -227,6 +227,11 @@ grub_memcmp (const void *s1, const void *s2, grub_size_t n)
|
|||
#ifndef APPLE_CC
|
||||
int memcmp (const void *s1, const void *s2, grub_size_t n)
|
||||
__attribute__ ((alias ("grub_memcmp")));
|
||||
#else
|
||||
int memcmp (const void *s1, const void *s2, grub_size_t n)
|
||||
{
|
||||
return grub_memcmp (s1, s2, n);
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
|
@ -512,6 +517,11 @@ grub_memset (void *s, int c, grub_size_t n)
|
|||
#ifndef APPLE_CC
|
||||
void *memset (void *s, int c, grub_size_t n)
|
||||
__attribute__ ((alias ("grub_memset")));
|
||||
#else
|
||||
void *memset (void *s, int c, grub_size_t n)
|
||||
{
|
||||
return grub_memset (s, c, n);
|
||||
}
|
||||
#endif
|
||||
|
||||
grub_size_t
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* mm.c - functions for memory manager */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2005,2007,2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2005,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
|
||||
|
|
|
@ -145,13 +145,16 @@ grub_parser_split_cmdline (const char *cmdline, grub_reader_getline_t getline,
|
|||
*argc = 0;
|
||||
do
|
||||
{
|
||||
if (! *rd)
|
||||
if (! rd || !*rd)
|
||||
{
|
||||
if (getline)
|
||||
getline (&rd, 1);
|
||||
else break;
|
||||
}
|
||||
|
||||
if (!rd)
|
||||
break;
|
||||
|
||||
for (; *rd; rd++)
|
||||
{
|
||||
grub_parser_state_t newstate;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* dl.c - arch-dependent part of loadable module support */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2004,2005,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2004,2005,2007,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
|
||||
|
@ -106,7 +106,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
|||
Elf_Sword delta = value - (Elf_Word) addr;
|
||||
|
||||
if (delta << 6 >> 6 != delta)
|
||||
return grub_error (GRUB_ERR_BAD_MODULE, "Relocation overflow");
|
||||
return grub_error (GRUB_ERR_BAD_MODULE, "relocation overflow");
|
||||
*addr = (*addr & 0xfc000003) | (delta & 0x3fffffc);
|
||||
break;
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
|||
|
||||
default:
|
||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||
"This relocation (%d) is not implemented yet",
|
||||
"this relocation (%d) is not implemented yet",
|
||||
ELF_R_TYPE (rel->r_info));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* dl.c - arch-dependent part of loadable module support */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2004,2005,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2004,2005,2007,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
|
||||
|
@ -98,7 +98,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
|||
case R_SPARC_32: /* 3 V-word32 */
|
||||
if (value & 0xFFFFFFFF00000000)
|
||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||
"Address out of 32 bits range");
|
||||
"address out of 32 bits range");
|
||||
*addr = value;
|
||||
break;
|
||||
case R_SPARC_WDISP30: /* 7 V-disp30 */
|
||||
|
@ -106,7 +106,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
|||
(((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000)
|
||||
!= 0xFFFFFFFF00000000))
|
||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||
"Displacement out of 30 bits range");
|
||||
"displacement out of 30 bits range");
|
||||
*addr = (*addr & 0xC0000000) |
|
||||
(((grub_int32_t) ((value - (Elf_Addr) addr) >> 2)) &
|
||||
0x3FFFFFFF);
|
||||
|
@ -114,7 +114,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
|||
case R_SPARC_HI22: /* 9 V-imm22 */
|
||||
if (((grub_int32_t) value) & 0xFF00000000)
|
||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||
"High address out of 22 bits range");
|
||||
"high address out of 22 bits range");
|
||||
*addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF);
|
||||
break;
|
||||
case R_SPARC_LO10: /* 12 T-simm13 */
|
||||
|
@ -131,7 +131,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
|||
break;
|
||||
default:
|
||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||
"This relocation (%d) is not implemented yet",
|
||||
"this relocation (%d) is not implemented yet",
|
||||
ELF_R_TYPE (rel->r_info));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* dl-x86_64.c - arch-dependent part of loadable module support */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2005,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2005,2007,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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue