diff options
author | Helge Deller <deller@gmx.de> | 2013-07-02 22:34:51 +0200 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2013-07-02 22:34:51 +0200 |
commit | 2ff3224e763b3e5c178e1ec9bb23a0fef234cd04 (patch) | |
tree | 252f912f77bed2407bdbe7d8dffa71f18bf03dbf | |
parent | 55d6734622df6a2e790199eb47a013793257e0ec (diff) | |
download | palo-2ff3224e763b3e5c178e1ec9bb23a0fef234cd04.tar.gz |
implement woraround for wrong ELF32 header of iplboot.
-rw-r--r-- | lib/elf32.c | 1 | ||||
-rw-r--r-- | palo/mkbootable.c | 4 |
2 files changed, 4 insertions, 1 deletions
diff --git a/lib/elf32.c b/lib/elf32.c index c41ab4d..6028da8 100644 --- a/lib/elf32.c +++ b/lib/elf32.c @@ -74,6 +74,7 @@ int prepare_ELF32_loadable(int fd, struct loadable *loadable, int *wide) seg->length = __be32_to_cpu(ep.p_filesz); seg->mem = start; /* XXX: it seems the zeros count calculation is wrong, e.g. when building iplboot */ + /* specifically, the ELF32 value of ep.p_memsz seems way too big */ seg->zeros = __be32_to_cpu(ep.p_memsz) - __be32_to_cpu(ep.p_filesz); } diff --git a/palo/mkbootable.c b/palo/mkbootable.c index f5f8158..b1a31d2 100644 --- a/palo/mkbootable.c +++ b/palo/mkbootable.c @@ -81,7 +81,9 @@ fix_bootloader(int out, int bootloader) error(5, loadable.size); /* load the boot loader into RAM */ - blimage = (void *)calloc(1, MAXBLSIZE); + /* WORKAROUND: since the ELF32 value of p_memsz of the iplelf binary + * is wrong, just use 5 times more memory here to avoid a segfault. */ + blimage = (void *)malloc(5*MAXBLSIZE); assert(blimage != NULL); if (!load_loadable(blimage, bootloader, &loadable)) error(13); |