Группа :: Система/Ядро и оборудование
Пакет: mbootpack
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: mbootpack-0.6a-alt3.patch
Скачать
Скачать
Makefile | 20 +++-
buildimage.c | 15 ++-
mbootpack.c | 311 ++++++++++++++++++++++++++---------------------------------
mbootpack.h | 2 +-
4 files changed, 162 insertions(+), 186 deletions(-)
diff --git a/Makefile b/Makefile
index aba82f3..2096ffd 100644
--- a/Makefile
+++ b/Makefile
@@ -7,8 +7,10 @@
#
PROG := mbootpack
+MANPAGE := $(PROG).man
OBJS := mbootpack.o buildimage.o
DEPS := mbootpack.o.d buildimage.o.d
+VERSION := 0.6a
#
# Tools etc.
@@ -25,17 +27,31 @@ CFLAGS += -Wmissing-prototypes
CFLAGS += -pipe -O3
DEPFLAGS = -Wp,-MD,$(@F).d
+ifneq ($(VERSION),)
+DEFS += -DVERSION=\"$(VERSION)\"
+endif
+
+ifneq ($(WITH_ZLIB),)
+DEFS += -DHAVE_ZLIB
+ZLIB = -lz
+else
+ZLIB =
+endif
+
#
# Rules
#
-all: $(PROG)
+all: $(PROG) $(MANPAGE)
gdb: $(PROG)
$(GDB) $<
$(PROG): $(OBJS)
- $(CC) -o $@ $(filter-out %.a, $^)
+ $(CC) $(CFLAGS) $(DEFS) -o $@ $(filter-out %.a, $^) $(ZLIB)
+
+$(MANPAGE): $(PROG)
+ help2man -n "packages a multiboot kernel and modules as a single file" -s 1 -N ./$< > $@
clean: FRC
$(RM) mbootpack *.o *.d bootsect setup bzimage_header.c
diff --git a/buildimage.c b/buildimage.c
index 033dcf8..7f3e054 100644
--- a/buildimage.c
+++ b/buildimage.c
@@ -38,7 +38,6 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
-#include <asm/page.h>
#include "mbootpack.h"
#include "mb_header.h"
@@ -84,14 +83,14 @@ address_t place_mbi(long int size)
address_t start;
start = 0xa000 - size;
if (start < 0x9000 + sizeof(bzimage_bootsect) + sizeof(bzimage_setup)) {
- printf("Fatal: command-lines too long: need %i, have %i bytes\n",
+ printf("Fatal: command-lines too long: need %ld, have %ld bytes\n",
size,
0x1000 - (sizeof(bzimage_bootsect) + sizeof(bzimage_setup)));
exit(1);
}
if (!quiet) {
- printf("Placed MBI and strings (%p+%p)\n",
- start, size);
+ printf("Placed MBI and strings (%lx+%lx)\n",
+ (unsigned long)start, size);
}
return start;
}
@@ -110,7 +109,7 @@ void make_bzImage(section_t *sections,
/* Patch the kernel and mbi addresses into the setup code */
*(address_t *)(bzimage_setup + BZ_ENTRY_OFFSET) = entry;
*(address_t *)(bzimage_setup + BZ_MBI_OFFSET) = mbi;
- if (!quiet) printf("Kernel entry is %p, MBI is %p.\n", entry, mbi);
+ if (!quiet) printf("Kernel entry is %lx, MBI is %lx.\n", (unsigned long)entry, (unsigned long)mbi);
/* If the high-memory sections don't start at 1MB, shuffle them down
* in the file and record how they should be relocated at boot time. */
@@ -122,8 +121,8 @@ void make_bzImage(section_t *sections,
if (highmem_size != 0) {
*(address_t *)(bzimage_setup + BZ_HIGH_START_OFFSET) = highmem_start;
*(address_t *)(bzimage_setup + BZ_HIGH_SIZE_OFFSET) = highmem_size;
- if (!quiet) printf("High sections: %p bytes at %p.\n",
- highmem_size, highmem_start);
+ if (!quiet) printf("High sections: %lx bytes at %lx.\n",
+ (unsigned long)highmem_size, (unsigned long)highmem_start);
} else
highmem_start = HIGHMEM_START;
@@ -144,7 +143,7 @@ void make_bzImage(section_t *sections,
exit(1);
}
- if (!quiet) printf("Wrote bzImage header: %i + %i bytes.\n",
+ if (!quiet) printf("Wrote bzImage header: %zu + %zu bytes.\n",
sizeof(bzimage_bootsect), sizeof(bzimage_setup));
/* Sorted list of sections below 1MB: write them out */
diff --git a/mbootpack.c b/mbootpack.c
index eb0aa0f..16e44f3 100644
--- a/mbootpack.c
+++ b/mbootpack.c
@@ -43,7 +43,17 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
-#include <asm/page.h>
+
+#ifdef HAVE_ZLIB
+#include <zlib.h>
+#else
+#define gzFile FILE*
+#define gzopen fopen
+#define gzclose fclose
+#define gzeof feof
+#define gzseek fseek
+#define gzread(f, buf, len) fread(buf, 1, len, fp)
+#endif
/* From GNU GRUB */
#include "mb_header.h"
@@ -112,72 +122,79 @@ static section_t *sections = NULL;
static section_t *last_section = NULL;
static address_t next_free_space = 0;
-static void usage(void)
-/* If we don't understand the command-line options */
-{
- printf(
-"Usage: mbpack [OPTIONS] kernel-image\n\n"
-" -h --help Print this text.\n"
+static const char usage[] =
+"Usage: mbootpack [OPTIONS] kernel-image\n\n"
+"Takes a multiboot kernel and modules (e.g. a Xen VMM, linux kernel and initrd), and packages them up as a single file that looks like a bzImage linux kernel.\n\n"
" -q --quiet Only output errors and warnings.\n"
" -t --truncate Clip module paths in command-lines.\n"
" -o --output=filename Output to filename (default \"bzImage\").\n"
" -c --command-line=STRING Set the kernel command line (DEPRECATED!).\n"
" -m --module=\"MOD arg1 arg2...\" Load module MOD with arguments \"arg1...\"\n"
" (can be used multiple times).\n"
-"\n");
- exit(1);
-}
+" -h --help Display this help and exit.\n"
+#ifdef VERSION
+" -V --version Display version number and exit.\n"
+#endif
+"\n";
/* Return a pointer into the string, skipping over all leading directories. */
static char *clip_path(char *str)
{
- const char *p, *last = NULL;
+ char *p, *last = NULL;
for (p = str; *p && *p != ' '; p++)
if (*p == '/')
last = p;
return (last ? last + 1 : str);
}
+static _Noreturn void fatal(const char *fmt, ...)
+{
+ va_list args;
+
+ fputs("Fatal: ", stderr);
+ fprintf(stderr, fmt, args);
+ exit(1);
+}
+
+static _Noreturn void fatal_err(const char *fmt, ...)
+{
+ va_list args;
+
+ fatal(fmt, args, strerror(errno));
+}
+
static void place_kernel_section(address_t start, long int size)
/* Place the kernel in memory, checking for the memory hole. */
{
- if (start + size + 0x1000 - 0x100000 >= 0x2000000) {
+ if (start + size + 0x1000 - 0x100000 >= 0x2000000)
/* Arbitrary limit: output file would be too big to TFTP.
* This is really to catch insane load addresses: Xen 2.0.5
* comes in a version with symbols, which asks to be loaded
* at Xen's *virtual* address (nearly 4GB). */
- printf("Fatal: kernel section loads too high: %#x+%#x\n", start);
- exit(1);
- }
+ fatal("kernel section loads too high: %#lx+%#lx\n", (unsigned long)start, size + 0x1000 - 0x100000);
if (start >= MEM_HOLE_END) {
/* Above the memory hole: easy */
next_free_space = MAX(next_free_space, start + size);
if (!quiet) {
- printf("Placed kernel section (%p+%p)\n", start, size);
+ printf("Placed kernel section (%lx+%lx)\n", (unsigned long)start, size);
}
return;
}
- if (start >= MEM_HOLE_START) {
+ if (start >= MEM_HOLE_START)
/* In the memory hole. Not so good */
- printf("Fatal: kernel load address (%p) is in the memory hole.\n",
- start);
- exit(1);
- }
+ fatal("kernel load address (%lx) is in the memory hole.\n", (unsigned long)start);
- if (start + size > MEM_HOLE_START) {
+ if (start + size > MEM_HOLE_START)
/* Too big for low memory */
- printf("Fatal: kernel (%p+%p) runs into the memory hole.\n",
- start, size);
- exit(1);
- }
+ fatal("kernel (%lx+%lx) runs into the memory hole.\n", (unsigned long)start, size);
/* Kernel loads below the memory hole */
next_free_space = MAX(next_free_space, start + size);
if (!quiet) {
- printf("Placed kernel section (%p+%p)\n", start, size);
+ printf("Placed kernel section (%lx+%lx)\n", (unsigned long)start, size);
}
}
@@ -199,8 +216,7 @@ static address_t place_section(long int size, int align)
next_free_space = start + size;
if (!quiet) {
- printf("Placed section (%p+%p), align=%p\n",
- start, size, align);
+ printf("Placed section (%lx+%lx), align=%d\n", (unsigned long)start, size, align);
}
return start;
}
@@ -216,7 +232,7 @@ static address_t load_kernel(const char *filename)
address_t start;
size_t len;
long int size, loadsize;
- FILE *fp;
+ gzFile fp;
char *buffer;
section_t *sec, *s;
Elf32_Ehdr *ehdr;
@@ -227,44 +243,37 @@ static address_t load_kernel(const char *filename)
static char headerbuf[HEADERBUF_SIZE];
/* Stat and open the file */
- if (stat(filename, &sb) != 0) {
- printf("Fatal: cannot stat %s: %s\n", filename, strerror(errno));
- exit(1);
- }
- if ((fp = fopen(filename, "r")) == NULL) {
- printf("Fatal: cannot open %s: %s\n", filename, strerror(errno));
- exit(1);
- }
+ if (stat(filename, &sb) != 0)
+ fatal("cannot stat %s: %s\n", filename, strerror(errno));
+ if ((fp = gzopen(filename, "r")) == NULL)
+ fatal("cannot open %s: %s\n", filename, strerror(errno));
/* Load the first 8k of the file */
- if (fseek(fp, 0, SEEK_SET) < 0) {
- printf("Fatal: seek error in %s: %s\n", filename, strerror(errno));
- exit(1);
- }
- if ((len = fread(headerbuf, 1, HEADERBUF_SIZE, fp))
- < HEADERBUF_SIZE)
+ if (gzseek(fp, 0, SEEK_SET) < 0)
+ fatal("seek error in %s: %s\n", filename, strerror(errno));
+ len = gzread(fp, headerbuf, sizeof(headerbuf));
+ if (len < sizeof(headerbuf))
{
- if (feof(fp)) /* Short file */
+ if (gzeof(fp)) /* Short file */
{
- if (len < 12) {
- printf("Fatal: %s is too short to be a multiboot file.",
- filename);
- exit(1);
- }
- } else {
- printf("Fatal: read error in %s: %s\n", filename, strerror(errno));
- exit(1);
- }
+ if (len < 12)
+ fatal("%s is too short to be a multiboot file.", filename);
+ } else
+ fatal("read error in %s: %s\n", filename, strerror(errno));
}
+#ifndef HAVE_ZLIB
/* Sanity-check: is this file compressed? */
if ((headerbuf[0] == '\037' &&
(headerbuf[1] == '\235' /* .Z */ ||
headerbuf[1] == '\213' /* .gz */)) ||
(headerbuf[0] == 'B' && headerbuf[1] == 'Z') /* .bz[2] */) {
- printf("Warning: %s looks like a compressed file.\n"
- " You should uncompress it first!\n", filename);
+ fprintf(stderr,
+ "Warning: %s looks like a compressed file.\n"
+ " You should uncompress it first!\n",
+ filename);
}
+#endif
/* Now look for a multiboot header */
for (i = 0; i <= MIN(len - 12, MULTIBOOT_SEARCH - 12); i += 4)
@@ -276,20 +285,16 @@ static address_t load_kernel(const char *filename)
/* Not a multiboot header */
continue;
}
- if (mbh->flags & MULTIBOOT_UNSUPPORTED) {
+ if (mbh->flags & MULTIBOOT_UNSUPPORTED)
/* Requires options we don't support */
- printf("Fatal: found a multiboot header, but it "
- "requires multiboot options that I\n"
- "don't understand. Sorry.\n");
- exit(1);
- }
+ fatal("found a multiboot header, but it requires multiboot options that I don't\n"
+ "understand. Sorry.");
if (mbh->flags & MULTIBOOT_VIDEO_MODE) {
/* Asked for screen mode information */
/* XXX carry on regardless */
- printf("Warning: found a multiboot header which asks "
- "for screen mode information.\n"
- " This kernel will NOT be given valid"
- "screen mode information at boot time.\n");
+ fputs("Warning: found a multiboot header which asks for screen mode information.\n"
+ " This kernel will NOT be given valid screen mode information at boot\n"
+ " time.", stderr);
}
/* This kernel will do: place and load it */
@@ -312,37 +317,25 @@ static address_t load_kernel(const char *filename)
else
size = loadsize;
- if (loadsize > size) {
- printf("Fatal: can't load %i bytes of kernel into %i bytes "
- "of memory.\n", loadsize, size);
- exit(1);
- }
+ if (loadsize > size)
+ fatal("can't load %ld bytes of kernel into %ld bytes of memory.\n", loadsize, size);
/* Does it fit where it wants to be? */
place_kernel_section(start, size);
/* Load the kernel */
- if ((buffer = malloc(size)) == NULL) {
- printf("Fatal: malloc() for kernel load failed: %s\n",
- strerror(errno));
- exit(1);
- }
- if ((fread(buffer, loadsize, 1, fp)) != 1) {
- printf("Fatal: cannot read %s: %s\n",
- filename, strerror(errno));
- exit(1);
- }
- fclose(fp);
+ if ((buffer = malloc(size)) == NULL)
+ fatal("malloc() for kernel load failed: %s\n", strerror(errno));
+ if ((gzread(fp, buffer, loadsize)) != loadsize)
+ fatal("cannot read %s: %s\n", filename, strerror(errno));
+ gzclose(fp);
/* Clear the kernel BSS */
memset(buffer + loadsize, 0, size - loadsize);
/* Start off the linked list of sections */
- if ((sec = (section_t *)malloc(sizeof (section_t))) == NULL) {
- printf("Fatal: malloc() for section_t failed: %s\n",
- strerror(errno));
- exit(1);
- }
+ if ((sec = (section_t *)malloc(sizeof (section_t))) == NULL)
+ fatal("malloc() for section_t failed: %s\n", strerror(errno));
sec->buffer = buffer;
sec->start = start;
sec->size = size;
@@ -363,25 +356,14 @@ static address_t load_kernel(const char *filename)
|| ehdr->e_ident[EI_DATA] != ELFDATA2LSB
|| ehdr->e_ident[EI_CLASS] != ELFCLASS32
|| ehdr->e_machine != EM_386)
- {
- printf("Fatal: kernel has neither ELF32/x86 nor multiboot load"
- " headers.\n");
- exit(1);
- }
- if (ehdr->e_phoff + ehdr->e_phnum*sizeof(*phdr) > HEADERBUF_SIZE) {
+ fatal("kernel has neither ELF32/x86 nor multiboot load headers.");
+ if (ehdr->e_phoff + ehdr->e_phnum*sizeof(*phdr) > HEADERBUF_SIZE)
/* Don't expect this will happen with sane kernels */
- printf("Fatal: too much ELF for me. Try increasing "
- "HEADERBUF_SIZE in mbootpack.\n");
- exit(1);
- }
- if (ehdr->e_phoff + ehdr->e_phnum*sizeof (*phdr) > len) {
- printf("Fatal: malformed ELF header overruns EOF.\n");
- exit(1);
- }
- if (ehdr->e_phnum <= 0) {
- printf("Fatal: ELF kernel has no program headers.\n");
- exit(1);
- }
+ fatal("too much ELF for me. Try increasing HEADERBUF_SIZE in mbootpack.");
+ if (ehdr->e_phoff + ehdr->e_phnum*sizeof (*phdr) > len)
+ fatal("malformed ELF header overruns EOF.");
+ if (ehdr->e_phnum <= 0)
+ fatal("ELF kernel has no program headers.");
if(!quiet)
printf("Loading %s using ELF header.\n", filename);
@@ -389,7 +371,7 @@ static address_t load_kernel(const char *filename)
if (ehdr->e_type != ET_EXEC
|| ehdr->e_version != EV_CURRENT
|| ehdr->e_phentsize != sizeof (Elf32_Phdr)) {
- printf("Warning: funny-looking ELF header.\n");
+ fputs("Warning: funny-looking ELF header.\n", stderr);
}
phdr = (Elf32_Phdr *)(headerbuf + ehdr->e_phoff);
@@ -407,38 +389,26 @@ static address_t load_kernel(const char *filename)
* have one */
if (size == 0) continue;
- if ((buffer = malloc(size)) == NULL) {
- printf("Fatal: malloc() for kernel load failed: %s\n",
- strerror(errno));
- exit(1);
- }
+ if ((buffer = malloc(size)) == NULL)
+ fatal_err("malloc() for kernel load failed");
/* Place the section where it wants to be */
place_kernel_section(start, size);
/* Load section from file */
if (loadsize > 0) {
- if (fseek(fp, phdr[i].p_offset, SEEK_SET) != 0) {
- printf("Fatal: seek failed in %s\n",
- strerror(errno));
- exit(1);
- }
- if ((fread(buffer, loadsize, 1, fp)) != 1) {
- printf("Fatal: cannot read %s: %s\n",
- filename, strerror(errno));
- exit(1);
- }
+ if (gzseek(fp, phdr[i].p_offset, SEEK_SET) < 0)
+ fatal("seek failed in %s\n", strerror(errno));
+ if ((gzread(fp, buffer, loadsize)) != loadsize)
+ fatal_err("cannot read", filename);
}
/* Clear the rest of the buffer */
memset(buffer + loadsize, 0, size - loadsize);
/* Add this section to the list (keeping it ordered) */
- if ((sec = (section_t *)malloc(sizeof (section_t))) == NULL) {
- printf("Fatal: malloc() for section_t failed: %s\n",
- strerror(errno));
- exit(1);
- }
+ if ((sec = (section_t *)malloc(sizeof (section_t))) == NULL)
+ fatal_err("malloc() for section_t failed");
sec->buffer = buffer;
sec->start = start;
sec->size = size;
@@ -480,8 +450,7 @@ static address_t load_kernel(const char *filename)
}
/* This is not a multiboot kernel */
- printf("Fatal: %s is not a multiboot kernel.\n", filename);
- exit(1);
+ fatal("%s is not a multiboot kernel.\n", filename);
}
@@ -501,7 +470,7 @@ int main(int argc, char **argv)
long int size, mod_command_line_space, command_line_len;
int modules, opt, mbi_reloc_offset, truncate;
- static const char short_options[] = "hc:m:o:qtM";
+ static const char short_options[] = "hc:m:o:qtMV";
static const struct option options[] = {
{ "help", 0, 0, 'h' },
{ "command-line", 1, 0, 'c' },
@@ -510,6 +479,9 @@ int main(int argc, char **argv)
{ "output", 1, 0, 'o' },
{ "quiet", 0, 0, 'q' },
{ "truncate", 0, 0, 't' },
+#ifdef VERSION
+ { "version", 0, 0, 'V' },
+#endif
{ 0, 0, 0, 0 },
};
@@ -541,14 +513,26 @@ int main(int argc, char **argv)
case 't':
truncate = 1;
break;
+#ifdef VERSION
+ case 'V':
+ puts("mbootpack " VERSION);
+ return 0;
+#endif
case 'h':
case '?':
+ puts(usage);
+ return 0;
default:
- usage();
+ fputs(usage, stderr);
+ return 1;
}
}
imagename = argv[optind];
- if (!imagename || strlen(imagename) == 0) usage();
+ if (!imagename || strlen(imagename) == 0)
+ {
+ fputs(usage, stderr);
+ return 1;
+ }
command_line_len = strlen(command_line) + strlen(imagename) + 2;
/* Leave space to overwrite the command-line at boot time */
command_line_len = MAX(command_line_len, CMD_LINE_SPACE);
@@ -570,17 +554,11 @@ int main(int argc, char **argv)
/* Locate this section after the setup sectors, in *low* memory */
start = place_mbi(size);
- if ((buffer = malloc(size)) == NULL) {
- printf("Fatal: malloc() for boot metadata failed: %s\n",
- strerror(errno));
- exit(1);
- }
+ if ((buffer = malloc(size)) == NULL)
+ fatal_err("malloc() for boot metadata failed");
- if ((sec = (section_t *)malloc(sizeof (section_t))) == NULL) {
- printf("Fatal: malloc() for section_t failed: %s\n",
- strerror(errno));
- exit(1);
- }
+ if ((sec = (section_t *)malloc(sizeof (section_t))) == NULL)
+ fatal_err("malloc() for section_t failed");
sec->buffer = buffer;
sec->start = start;
sec->size = size;
@@ -601,7 +579,7 @@ int main(int argc, char **argv)
p += command_line_len;
/* Bootloader ID */
- sprintf(p, version_string);
+ strcpy(p, version_string);
mbi->boot_loader_name = ((address_t)p) + mbi_reloc_offset;
p += strlen(version_string) + 1;
@@ -638,32 +616,20 @@ int main(int argc, char **argv)
}
/* Find space for it */
- if (stat(mod_filename, &sb) != 0) {
- printf("Fatal: cannot stat %s: %s\n",
- mod_filename, strerror(errno));
- exit(1);
- }
+ if (stat(mod_filename, &sb) != 0)
+ fatal_err("cannot stat", mod_filename);
size = sb.st_size;
start = place_section(size, X86_PAGE_SIZE);
/* XXX should be place_section(size, 4) if the MBH hasn't got
* XXX MULTIBOOT_PAGE_ALIGN set, but that breaks Xen */
/* Load it */
- if ((buffer = malloc(sb.st_size)) == NULL) {
- printf("Fatal: malloc failed for module load: %s\n",
- strerror(errno));
- exit(1);
- }
- if ((fp = fopen(mod_filename, "r")) == NULL) {
- printf("Fatal: cannot open %s: %s\n",
- mod_filename, strerror(errno));
- exit(1);
- }
- if ((fread(buffer, sb.st_size, 1, fp)) != 1) {
- printf("Fatal: cannot read %s: %s\n",
- mod_filename, strerror(errno));
- exit(1);
- }
+ if ((buffer = malloc(sb.st_size)) == NULL)
+ fatal_err("malloc failed for module load");
+ if ((fp = fopen(mod_filename, "r")) == NULL)
+ fatal_err("cannot open", mod_filename);
+ if ((fread(buffer, sb.st_size, 1, fp)) != 1)
+ fatal_err("cannot read", mod_filename);
fclose(fp);
/* Sanity-check: is this file compressed? */
@@ -671,8 +637,7 @@ int main(int argc, char **argv)
(buffer[1] == '\235' /* .Z */ ||
buffer[1] == '\213' /* .gz */)) ||
(buffer[0] == 'B' && buffer[1] == 'Z') /* .bz[2] */) {
- printf("Warning: %s looks like a compressed file.\n",
- mod_filename);
+ fprintf(stderr, "Warning: %s looks like a compressed file.\n", mod_filename);
}
if (!quiet) printf("Loaded module from %s\n", mod_filename);
@@ -690,15 +655,12 @@ int main(int argc, char **argv)
/* Store the module command line */
if (truncate)
mod_command_line = clip_path(mod_command_line);
- sprintf(mod_clp, "%s", mod_command_line);
+ strcpy(mod_clp, mod_command_line);
mod_clp += strlen(mod_clp) + 1;
/* Add the section to the list */
- if ((sec = (section_t *)malloc(sizeof (section_t))) == NULL) {
- printf("Fatal: malloc() for section_t failed: %s\n",
- strerror(errno));
- exit(1);
- }
+ if ((sec = (section_t *)malloc(sizeof (section_t))) == NULL)
+ fatal_err("malloc() for section_t failed");
sec->buffer = buffer;
sec->start = start;
sec->size = size;
@@ -713,10 +675,8 @@ int main(int argc, char **argv)
/* Everything is placed and loaded. Now we package it all up
* as a bzImage */
- if ((fp = fopen(out_filename, "w")) == NULL) {
- printf("Fatal: cannot open %s: %s\n", out_filename, strerror(errno));
- exit(1);
- }
+ if ((fp = fopen(out_filename, "w")) == NULL)
+ fatal_err("cannot open", out_filename);
make_bzImage(sections,
kernel_entry,
((address_t)mbi) + mbi_reloc_offset,
@@ -724,7 +684,8 @@ int main(int argc, char **argv)
fclose(fp);
/* Success! */
- if(!quiet) printf("Finished.\n");
+ if(!quiet)
+ puts("Finished.");
return 0;
}
diff --git a/mbootpack.h b/mbootpack.h
index 361efaf..9f719b5 100644
--- a/mbootpack.h
+++ b/mbootpack.h
@@ -37,7 +37,7 @@
extern int quiet;
/* Types */
-typedef uint32_t address_t;
+typedef uintptr_t address_t;
typedef struct section_t {
char *buffer;