* util/grub-mkimage.c (generate_image): Explicitly init decompress_size.
* util/grub-mkimagexx.c (MASK3): New define. (add_value_to_slot_20b): Use MASK3. (add_value_to_slot_21): Likewise. (relocate_addresses): Fix format specification. (load_image): Explicitly init symtab_section.
This commit is contained in:
parent
b055f8f676
commit
0b6225bd27
3 changed files with 20 additions and 10 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2012-02-11 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mkimage.c (generate_image): Explicitly init decompress_size.
|
||||||
|
* util/grub-mkimagexx.c (MASK3): New define.
|
||||||
|
(add_value_to_slot_20b): Use MASK3.
|
||||||
|
(add_value_to_slot_21): Likewise.
|
||||||
|
(relocate_addresses): Fix format specification.
|
||||||
|
(load_image): Explicitly init symtab_section.
|
||||||
|
|
||||||
2012-02-11 Vladimir Serbinenko <phcoder@gmail.com>
|
2012-02-11 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* util/getroot.c (grub_find_root_devices_from_mountinfo): Fix types.
|
* util/getroot.c (grub_find_root_devices_from_mountinfo): Fix types.
|
||||||
|
|
|
@ -714,7 +714,7 @@ generate_image (const char *dir, const char *prefix,
|
||||||
grub_uint64_t start_address;
|
grub_uint64_t start_address;
|
||||||
void *rel_section;
|
void *rel_section;
|
||||||
grub_size_t reloc_size, align;
|
grub_size_t reloc_size, align;
|
||||||
size_t decompress_size;
|
size_t decompress_size = 0;
|
||||||
|
|
||||||
if (comp == COMPRESSION_AUTO)
|
if (comp == COMPRESSION_AUTO)
|
||||||
comp = image_target->default_compression;
|
comp = image_target->default_compression;
|
||||||
|
|
|
@ -182,6 +182,7 @@ struct unaligned_uint32
|
||||||
|
|
||||||
#define MASK20 ((1 << 20) - 1)
|
#define MASK20 ((1 << 20) - 1)
|
||||||
#define MASK19 ((1 << 19) - 1)
|
#define MASK19 ((1 << 19) - 1)
|
||||||
|
#define MASK3 (~(grub_addr_t) 3)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_value_to_slot_20b (grub_addr_t addr, grub_uint32_t value)
|
add_value_to_slot_20b (grub_addr_t addr, grub_uint32_t value)
|
||||||
|
@ -190,17 +191,17 @@ add_value_to_slot_20b (grub_addr_t addr, grub_uint32_t value)
|
||||||
switch (addr & 3)
|
switch (addr & 3)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
p = (struct unaligned_uint32 *) ((addr & ~3ULL) + 2);
|
p = (struct unaligned_uint32 *) ((addr & MASK3) + 2);
|
||||||
p->val = ((((((p->val >> 2) & MASK20) + value) & MASK20) << 2)
|
p->val = ((((((p->val >> 2) & MASK20) + value) & MASK20) << 2)
|
||||||
| (p->val & ~(MASK20 << 2)));
|
| (p->val & ~(MASK20 << 2)));
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
p = (struct unaligned_uint32 *) ((grub_uint8_t *) (addr & ~3ULL) + 7);
|
p = (struct unaligned_uint32 *) ((grub_uint8_t *) (addr & MASK3) + 7);
|
||||||
p->val = ((((((p->val >> 3) & MASK20) + value) & MASK20) << 3)
|
p->val = ((((((p->val >> 3) & MASK20) + value) & MASK20) << 3)
|
||||||
| (p->val & ~(MASK20 << 3)));
|
| (p->val & ~(MASK20 << 3)));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
p = (struct unaligned_uint32 *) ((grub_uint8_t *) (addr & ~3ULL) + 12);
|
p = (struct unaligned_uint32 *) ((grub_uint8_t *) (addr & MASK3) + 12);
|
||||||
p->val = ((((((p->val >> 4) & MASK20) + value) & MASK20) << 4)
|
p->val = ((((((p->val >> 4) & MASK20) + value) & MASK20) << 4)
|
||||||
| (p->val & ~(MASK20 << 4)));
|
| (p->val & ~(MASK20 << 4)));
|
||||||
break;
|
break;
|
||||||
|
@ -227,15 +228,15 @@ add_value_to_slot_21 (grub_addr_t addr, grub_uint32_t value)
|
||||||
switch (addr & 3)
|
switch (addr & 3)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
p = (struct unaligned_uint32 *) ((addr & ~3ULL) + 2);
|
p = (struct unaligned_uint32 *) ((addr & MASK3) + 2);
|
||||||
p->val = ((add_value_to_slot_21_real (((p->val >> 2) & MASKF21), value) & MASKF21) << 2) | (p->val & ~(MASKF21 << 2));
|
p->val = ((add_value_to_slot_21_real (((p->val >> 2) & MASKF21), value) & MASKF21) << 2) | (p->val & ~(MASKF21 << 2));
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
p = (struct unaligned_uint32 *) ((grub_uint8_t *) (addr & ~3ULL) + 7);
|
p = (struct unaligned_uint32 *) ((grub_uint8_t *) (addr & MASK3) + 7);
|
||||||
p->val = ((add_value_to_slot_21_real (((p->val >> 3) & MASKF21), value) & MASKF21) << 3) | (p->val & ~(MASKF21 << 3));
|
p->val = ((add_value_to_slot_21_real (((p->val >> 3) & MASKF21), value) & MASKF21) << 3) | (p->val & ~(MASKF21 << 3));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
p = (struct unaligned_uint32 *) ((grub_uint8_t *) (addr & ~3ULL) + 12);
|
p = (struct unaligned_uint32 *) ((grub_uint8_t *) (addr & MASK3) + 12);
|
||||||
p->val = ((add_value_to_slot_21_real (((p->val >> 4) & MASKF21), value) & MASKF21) << 4) | (p->val & ~(MASKF21 << 4));
|
p->val = ((add_value_to_slot_21_real (((p->val >> 4) & MASKF21), value) & MASKF21) << 4) | (p->val & ~(MASKF21 << 4));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -457,8 +458,8 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections,
|
||||||
- target_section_addr - (offset & ~3)) >> 4;
|
- target_section_addr - (offset & ~3)) >> 4;
|
||||||
tr++;
|
tr++;
|
||||||
if (noff & ~MASK19)
|
if (noff & ~MASK19)
|
||||||
grub_util_error ("trampoline offset too big (%lx)",
|
grub_util_error ("trampoline offset too big (%"
|
||||||
noff);
|
PRIxGRUB_UINT64_T ")", noff);
|
||||||
add_value_to_slot_20b ((grub_addr_t) target, noff);
|
add_value_to_slot_20b ((grub_addr_t) target, noff);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -919,7 +920,7 @@ SUFFIX (load_image) (const char *kernel_path, grub_size_t *exec_size,
|
||||||
grub_size_t kernel_size;
|
grub_size_t kernel_size;
|
||||||
grub_size_t ia64jmp_off = 0, ia64_toff = 0, ia64_got_off = 0;
|
grub_size_t ia64jmp_off = 0, ia64_toff = 0, ia64_got_off = 0;
|
||||||
unsigned ia64jmpnum = 0;
|
unsigned ia64jmpnum = 0;
|
||||||
Elf_Shdr *symtab_section;
|
Elf_Shdr *symtab_section = 0;
|
||||||
grub_size_t got = 0;
|
grub_size_t got = 0;
|
||||||
|
|
||||||
*start = 0;
|
*start = 0;
|
||||||
|
|
Loading…
Reference in a new issue