* include/grub/powerpc/ieee1275/kernel.h: Introduce GRUB_MOD_GAP
to create a gap between _end and the modules added to the image with grub-mkrescue. That fixes "CLAIM failed" on PowerMAC. * kern/powerpc/ieee1275/init.c: Use GRUB_MOD_GAP. * util/elf/grub-mkimage.c (add_segments): Likewise.
This commit is contained in:
parent
2033f53e0a
commit
3f51de772d
4 changed files with 15 additions and 2 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2008-01-27 Pavel Roskin <proski@gnu.org>
|
||||||
|
|
||||||
|
* include/grub/powerpc/ieee1275/kernel.h: Introduce GRUB_MOD_GAP
|
||||||
|
to create a gap between _end and the modules added to the image
|
||||||
|
with grub-mkrescue. That fixes "CLAIM failed" on PowerMAC.
|
||||||
|
* kern/powerpc/ieee1275/init.c: Use GRUB_MOD_GAP.
|
||||||
|
* util/elf/grub-mkimage.c (add_segments): Likewise.
|
||||||
|
|
||||||
2008-01-26 Pavel Roskin <proski@gnu.org>
|
2008-01-26 Pavel Roskin <proski@gnu.org>
|
||||||
|
|
||||||
* kern/dl.c (grub_dl_load): Don't abort if prefix is not set,
|
* kern/dl.c (grub_dl_load): Don't abort if prefix is not set,
|
||||||
|
|
|
@ -23,6 +23,11 @@
|
||||||
|
|
||||||
#define GRUB_MOD_ALIGN 0x1000
|
#define GRUB_MOD_ALIGN 0x1000
|
||||||
|
|
||||||
|
/* Minimal gap between _end and the start of the modules. It's a hack
|
||||||
|
for PowerMac to prevent "CLAIM failed" error. The real fix is to
|
||||||
|
rewrite grub-mkimage to generate valid ELF files. */
|
||||||
|
#define GRUB_MOD_GAP 0x8000
|
||||||
|
|
||||||
void EXPORT_FUNC (grub_reboot) (void);
|
void EXPORT_FUNC (grub_reboot) (void);
|
||||||
void EXPORT_FUNC (grub_halt) (void);
|
void EXPORT_FUNC (grub_halt) (void);
|
||||||
|
|
||||||
|
|
|
@ -242,5 +242,5 @@ grub_get_rtc (void)
|
||||||
grub_addr_t
|
grub_addr_t
|
||||||
grub_arch_modules_addr (void)
|
grub_arch_modules_addr (void)
|
||||||
{
|
{
|
||||||
return ALIGN_UP(_end, GRUB_MOD_ALIGN);
|
return ALIGN_UP(_end + GRUB_MOD_GAP, GRUB_MOD_ALIGN);
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,7 +218,7 @@ add_segments (char *dir, FILE *out, int chrp, char *mods[])
|
||||||
grub_addr_t modbase;
|
grub_addr_t modbase;
|
||||||
|
|
||||||
/* Place modules just after grub segment. */
|
/* Place modules just after grub segment. */
|
||||||
modbase = ALIGN_UP(grub_end, GRUB_MOD_ALIGN);
|
modbase = ALIGN_UP(grub_end + GRUB_MOD_GAP, GRUB_MOD_ALIGN);
|
||||||
|
|
||||||
/* Construct new segment header for modules. */
|
/* Construct new segment header for modules. */
|
||||||
phdr = phdrs + grub_target_to_host16 (ehdr.e_phnum);
|
phdr = phdrs + grub_target_to_host16 (ehdr.e_phnum);
|
||||||
|
|
Loading…
Reference in a new issue