[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#415493: Patch for mkvmlinuz l10n update



Dear maintainer of mkvmlinuz,

On 12 Apr 2008 I sent you a notice announcing my intent to upload a
NMU of your package to fix its pending l10n issues, after an initial
notice sent on 11 Apr 2008.

We settled for /me to send you a summary patch at the end of the l10n
update round.

I think it is now safe to upload...

Here it is with changelog (mentioning NMU but you'll correct, of course):

Source: mkvmlinuz
Version: 33+nmu1
Distribution: unstable
Urgency: low
Maintainer: Christian Perrier <bubulle@debian.org>
Date: Fri, 11 Apr 2008 22:56:59 +0200
Closes: 415493 460131 475638 475759 476073
Changes: 
 mkvmlinuz (33+nmu1) unstable; urgency=low
 .
   * Non-maintainer upload to fix pending l10n issues.
   * Debconf translations:
     - Dutch. Closes: #415493
     - Italian. Closes: #460131
     - Finnish. Closes: #475638
     - Galician. Closes: #475759
     - Basque. Closes: #476073

-- 



diff -Nru ../mkvmlinuz-33+nmu1.old/boot/Makefile ../mkvmlinuz-33+nmu1/boot/Makefile
--- ../mkvmlinuz-33+nmu1.old/boot/Makefile	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/Makefile	2007-01-14 14:40:45.000000000 +0100
@@ -0,0 +1,28 @@
+GCC	:= gcc -m32
+CFLAGS	:= -Wall -Wstrict-prototypes -O2 -g -fomit-frame-pointer -fno-builtin \
+	   -nostdinc -isystem $(shell $(GCC) -print-file-name=include) -fPIC
+AFLAGS	:= -D__ASSEMBLY__ $(CFLAGS) -traditional -nostdinc
+
+src := crt0.S string.S prom.c stdio.c main.c div64.S
+src += infblock.c infcodes.c inffast.c inflate.c inftrees.c infutil.c
+src += mkvmlinuz-kernel-initrd.c mkvmlinuz-kernel-vmlinux.strip.c
+obj := $(addsuffix .o, $(basename $(src)))
+ 
+progs := addnote
+
+all: $(obj) $(progs)
+
+$(patsubst %.c,%.o, $(filter %.c, $(src))): %.o: %.c
+	$(GCC) $(CFLAGS) -c -o $@ $<
+
+$(patsubst %.S,%.o, $(filter %.S, $(src))): %.o: %.S
+	$(GCC) $(AFLAGS) -c -o $@ $<
+
+mkvmlinuz-kernel-initrd.c mkvmlinuz-kernel-vmlinux.strip.c:
+	touch $@
+
+addnote: addnote.c
+	$(GCC) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -o addnote addnote.c
+
+clean:
+	rm -f $(obj) mkvmlinuz-kernel-initrd.c mkvmlinuz-kernel-vmlinux.strip.c $(progs)
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/addnote.c ../mkvmlinuz-33+nmu1/boot/addnote.c
--- ../mkvmlinuz-33+nmu1.old/boot/addnote.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/addnote.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,205 @@
+/*
+ * Program to hack in a PT_NOTE program header entry in an ELF file.
+ * This is needed for OF on RS/6000s to load an image correctly.
+ * Note that OF needs a program header entry for the note, not an
+ * ELF section.
+ *
+ * Copyright 2000 Paul Mackerras.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * Usage: addnote zImage
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+
+/* CHRP note section */
+char arch[] = "PowerPC";
+
+#define N_DESCR	6
+unsigned int descr[N_DESCR] = {
+	0xffffffff,		/* real-mode = true */
+	0x00c00000,		/* real-base, i.e. where we expect OF to be */
+	0xffffffff,		/* real-size */
+	0xffffffff,		/* virt-base */
+	0xffffffff,		/* virt-size */
+	0x4000,			/* load-base */
+};
+
+/* RPA note section */
+char rpaname[] = "IBM,RPA-Client-Config";
+
+/*
+ * Note: setting ignore_my_client_config *should* mean that OF ignores
+ * all the other fields, but there is a firmware bug which means that
+ * it looks at the splpar field at least.  So these values need to be
+ * reasonable.
+ */
+#define N_RPA_DESCR	8
+unsigned int rpanote[N_RPA_DESCR] = {
+	0,			/* lparaffinity */
+	64,			/* min_rmo_size */
+	0,			/* min_rmo_percent */
+	40,			/* max_pft_size */
+	1,			/* splpar */
+	-1,			/* min_load */
+	0,			/* new_mem_def */
+	1,			/* ignore_my_client_config */
+};
+
+#define ROUNDUP(len)	(((len) + 3) & ~3)
+
+unsigned char buf[512];
+
+#define GET_16BE(off)	((buf[off] << 8) + (buf[(off)+1]))
+#define GET_32BE(off)	((GET_16BE(off) << 16) + GET_16BE((off)+2))
+
+#define PUT_16BE(off, v)	(buf[off] = ((v) >> 8) & 0xff, \
+				 buf[(off) + 1] = (v) & 0xff)
+#define PUT_32BE(off, v)	(PUT_16BE((off), (v) >> 16), \
+				 PUT_16BE((off) + 2, (v)))
+
+/* Structure of an ELF file */
+#define E_IDENT		0	/* ELF header */
+#define	E_PHOFF		28
+#define E_PHENTSIZE	42
+#define E_PHNUM		44
+#define E_HSIZE		52	/* size of ELF header */
+
+#define EI_MAGIC	0	/* offsets in E_IDENT area */
+#define EI_CLASS	4
+#define EI_DATA		5
+
+#define PH_TYPE		0	/* ELF program header */
+#define PH_OFFSET	4
+#define PH_FILESZ	16
+#define PH_HSIZE	32	/* size of program header */
+
+#define PT_NOTE		4	/* Program header type = note */
+
+#define ELFCLASS32	1
+#define ELFDATA2MSB	2
+
+unsigned char elf_magic[4] = { 0x7f, 'E', 'L', 'F' };
+
+int
+main(int ac, char **av)
+{
+	int fd, n, i;
+	int ph, ps, np;
+	int nnote, nnote2, ns;
+
+	if (ac != 2) {
+		fprintf(stderr, "Usage: %s elf-file\n", av[0]);
+		exit(1);
+	}
+	fd = open(av[1], O_RDWR);
+	if (fd < 0) {
+		perror(av[1]);
+		exit(1);
+	}
+
+	nnote = 12 + ROUNDUP(strlen(arch) + 1) + sizeof(descr);
+	nnote2 = 12 + ROUNDUP(strlen(rpaname) + 1) + sizeof(rpanote);
+
+	n = read(fd, buf, sizeof(buf));
+	if (n < 0) {
+		perror("read");
+		exit(1);
+	}
+
+	if (n < E_HSIZE || memcmp(&buf[E_IDENT+EI_MAGIC], elf_magic, 4) != 0)
+		goto notelf;
+
+	if (buf[E_IDENT+EI_CLASS] != ELFCLASS32
+	    || buf[E_IDENT+EI_DATA] != ELFDATA2MSB) {
+		fprintf(stderr, "%s is not a big-endian 32-bit ELF image\n",
+			av[1]);
+		exit(1);
+	}
+
+	ph = GET_32BE(E_PHOFF);
+	ps = GET_16BE(E_PHENTSIZE);
+	np = GET_16BE(E_PHNUM);
+	if (ph < E_HSIZE || ps < PH_HSIZE || np < 1)
+		goto notelf;
+	if (ph + (np + 2) * ps + nnote + nnote2 > n)
+		goto nospace;
+
+	for (i = 0; i < np; ++i) {
+		if (GET_32BE(ph + PH_TYPE) == PT_NOTE) {
+			fprintf(stderr, "%s already has a note entry\n",
+				av[1]);
+			exit(0);
+		}
+		ph += ps;
+	}
+
+	/* XXX check that the area we want to use is all zeroes */
+	for (i = 0; i < 2 * ps + nnote + nnote2; ++i)
+		if (buf[ph + i] != 0)
+			goto nospace;
+
+	/* fill in the program header entry */
+	ns = ph + 2 * ps;
+	PUT_32BE(ph + PH_TYPE, PT_NOTE);
+	PUT_32BE(ph + PH_OFFSET, ns);
+	PUT_32BE(ph + PH_FILESZ, nnote);
+
+	/* fill in the note area we point to */
+	/* XXX we should probably make this a proper section */
+	PUT_32BE(ns, strlen(arch) + 1);
+	PUT_32BE(ns + 4, N_DESCR * 4);
+	PUT_32BE(ns + 8, 0x1275);
+	strcpy((char *) &buf[ns + 12], arch);
+	ns += 12 + strlen(arch) + 1;
+	for (i = 0; i < N_DESCR; ++i, ns += 4)
+		PUT_32BE(ns, descr[i]);
+
+	/* fill in the second program header entry and the RPA note area */
+	ph += ps;
+	PUT_32BE(ph + PH_TYPE, PT_NOTE);
+	PUT_32BE(ph + PH_OFFSET, ns);
+	PUT_32BE(ph + PH_FILESZ, nnote2);
+
+	/* fill in the note area we point to */
+	PUT_32BE(ns, strlen(rpaname) + 1);
+	PUT_32BE(ns + 4, sizeof(rpanote));
+	PUT_32BE(ns + 8, 0x12759999);
+	strcpy((char *) &buf[ns + 12], rpaname);
+	ns += 12 + ROUNDUP(strlen(rpaname) + 1);
+	for (i = 0; i < N_RPA_DESCR; ++i, ns += 4)
+		PUT_32BE(ns, rpanote[i]);
+
+	/* Update the number of program headers */
+	PUT_16BE(E_PHNUM, np + 2);
+
+	/* write back */
+	lseek(fd, (long) 0, SEEK_SET);
+	i = write(fd, buf, n);
+	if (i < 0) {
+		perror("write");
+		exit(1);
+	}
+	if (i < n) {
+		fprintf(stderr, "%s: write truncated\n", av[1]);
+		exit(1);
+	}
+
+	exit(0);
+
+ notelf:
+	fprintf(stderr, "%s does not appear to be an ELF file\n", av[1]);
+	exit(1);
+
+ nospace:
+	fprintf(stderr, "sorry, I can't find space in %s to put the note\n",
+		av[1]);
+	exit(1);
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/crt0.S ../mkvmlinuz-33+nmu1/boot/crt0.S
--- ../mkvmlinuz-33+nmu1.old/boot/crt0.S	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/crt0.S	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) Paul Mackerras 1997.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * NOTE: this code runs in 32 bit mode and is packaged as ELF32.
+ */
+
+#include "ppc_asm.h"
+
+	.text
+	/* a procedure descriptor used when booting this as a COFF file */
+_zimage_start_opd:
+	.long	_zimage_start, 0, 0, 0
+
+	.globl	_zimage_start
+_zimage_start:
+	/* Work out the offset between the address we were linked at
+	   and the address where we're running. */
+	bl	1f
+1:	mflr	r0
+	lis	r9,1b@ha
+	addi	r9,r9,1b@l
+	subf.	r0,r9,r0
+	beq	3f		/* if running at same address as linked */
+
+	/* The .got2 section contains a list of addresses, so add
+	   the address offset onto each entry. */
+	lis	r9,__got2_start@ha
+	addi	r9,r9,__got2_start@l
+	lis	r8,__got2_end@ha
+	addi	r8,r8,__got2_end@l
+	subf.	r8,r9,r8
+	beq	3f
+	srwi.	r8,r8,2
+	mtctr	r8
+	add	r9,r0,r9
+2:	lwz	r8,0(r9)
+	add	r8,r8,r0
+	stw	r8,0(r9)
+	addi	r9,r9,4
+	bdnz	2b
+
+	/* Do a cache flush for our text, in case OF didn't */
+3:	lis	r9,_start@ha
+	addi	r9,r9,_start@l
+	add	r9,r0,r9
+	lis	r8,_etext@ha
+	addi	r8,r8,_etext@l
+	add	r8,r0,r8
+4:	dcbf	r0,r9
+	icbi	r0,r9
+	addi	r9,r9,0x20
+	cmplw	cr0,r9,r8
+	blt	4b
+	sync
+	isync
+
+	mr	r6,r1
+	b	start
+
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/div64.S ../mkvmlinuz-33+nmu1/boot/div64.S
--- ../mkvmlinuz-33+nmu1.old/boot/div64.S	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/div64.S	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,58 @@
+/*
+ * Divide a 64-bit unsigned number by a 32-bit unsigned number.
+ * This routine assumes that the top 32 bits of the dividend are
+ * non-zero to start with.
+ * On entry, r3 points to the dividend, which get overwritten with
+ * the 64-bit quotient, and r4 contains the divisor.
+ * On exit, r3 contains the remainder.
+ *
+ * Copyright (C) 2002 Paul Mackerras, IBM Corp.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#include "ppc_asm.h"
+
+	.globl __div64_32
+__div64_32:
+	lwz	r5,0(r3)	# get the dividend into r5/r6
+	lwz	r6,4(r3)
+	cmplw	r5,r4
+	li	r7,0
+	li	r8,0
+	blt	1f
+	divwu	r7,r5,r4	# if dividend.hi >= divisor,
+	mullw	r0,r7,r4	# quotient.hi = dividend.hi / divisor
+	subf.	r5,r0,r5	# dividend.hi %= divisor
+	beq	3f
+1:	mr	r11,r5		# here dividend.hi != 0
+	andis.	r0,r5,0xc000
+	bne	2f
+	cntlzw	r0,r5		# we are shifting the dividend right
+	li	r10,-1		# to make it < 2^32, and shifting
+	srw	r10,r10,r0	# the divisor right the same amount,
+	add	r9,r4,r10	# rounding up (so the estimate cannot
+	andc	r11,r6,r10	# ever be too large, only too small)
+	andc	r9,r9,r10
+	or	r11,r5,r11
+	rotlw	r9,r9,r0
+	rotlw	r11,r11,r0
+	divwu	r11,r11,r9	# then we divide the shifted quantities
+2:	mullw	r10,r11,r4	# to get an estimate of the quotient,
+	mulhwu	r9,r11,r4	# multiply the estimate by the divisor,
+	subfc	r6,r10,r6	# take the product from the divisor,
+	add	r8,r8,r11	# and add the estimate to the accumulated
+	subfe.	r5,r9,r5	# quotient
+	bne	1b
+3:	cmplw	r6,r4
+	blt	4f
+	divwu	r0,r6,r4	# perform the remaining 32-bit division
+	mullw	r10,r0,r4	# and get the remainder
+	add	r8,r8,r0
+	subf	r6,r10,r6
+4:	stw	r7,0(r3)	# return the quotient in *r3
+	stw	r8,4(r3)
+	mr	r3,r6		# return the remainder in r3
+	blr
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/dummy.c ../mkvmlinuz-33+nmu1/boot/dummy.c
--- ../mkvmlinuz-33+nmu1.old/boot/dummy.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/dummy.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,4 @@
+int main(void)
+{
+	return 0;
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/elf.h ../mkvmlinuz-33+nmu1/boot/elf.h
--- ../mkvmlinuz-33+nmu1.old/boot/elf.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/elf.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,149 @@
+#ifndef _PPC_BOOT_ELF_H_
+#define _PPC_BOOT_ELF_H_
+
+/* 32-bit ELF base types. */
+typedef unsigned int Elf32_Addr;
+typedef unsigned short Elf32_Half;
+typedef unsigned int Elf32_Off;
+typedef signed int Elf32_Sword;
+typedef unsigned int Elf32_Word;
+
+/* 64-bit ELF base types. */
+typedef unsigned long long Elf64_Addr;
+typedef unsigned short Elf64_Half;
+typedef signed short Elf64_SHalf;
+typedef unsigned long long Elf64_Off;
+typedef signed int Elf64_Sword;
+typedef unsigned int Elf64_Word;
+typedef unsigned long long Elf64_Xword;
+typedef signed long long Elf64_Sxword;
+
+/* These constants are for the segment types stored in the image headers */
+#define PT_NULL    0
+#define PT_LOAD    1
+#define PT_DYNAMIC 2
+#define PT_INTERP  3
+#define PT_NOTE    4
+#define PT_SHLIB   5
+#define PT_PHDR    6
+#define PT_TLS     7		/* Thread local storage segment */
+#define PT_LOOS    0x60000000	/* OS-specific */
+#define PT_HIOS    0x6fffffff	/* OS-specific */
+#define PT_LOPROC  0x70000000
+#define PT_HIPROC  0x7fffffff
+#define PT_GNU_EH_FRAME		0x6474e550
+
+#define PT_GNU_STACK	(PT_LOOS + 0x474e551)
+
+/* These constants define the different elf file types */
+#define ET_NONE   0
+#define ET_REL    1
+#define ET_EXEC   2
+#define ET_DYN    3
+#define ET_CORE   4
+#define ET_LOPROC 0xff00
+#define ET_HIPROC 0xffff
+
+/* These constants define the various ELF target machines */
+#define EM_NONE  0
+#define EM_PPC	       20	/* PowerPC */
+#define EM_PPC64       21	/* PowerPC64 */
+
+#define EI_NIDENT	16
+
+typedef struct elf32_hdr {
+	unsigned char e_ident[EI_NIDENT];
+	Elf32_Half e_type;
+	Elf32_Half e_machine;
+	Elf32_Word e_version;
+	Elf32_Addr e_entry;	/* Entry point */
+	Elf32_Off e_phoff;
+	Elf32_Off e_shoff;
+	Elf32_Word e_flags;
+	Elf32_Half e_ehsize;
+	Elf32_Half e_phentsize;
+	Elf32_Half e_phnum;
+	Elf32_Half e_shentsize;
+	Elf32_Half e_shnum;
+	Elf32_Half e_shstrndx;
+} Elf32_Ehdr;
+
+typedef struct elf64_hdr {
+	unsigned char e_ident[16];	/* ELF "magic number" */
+	Elf64_Half e_type;
+	Elf64_Half e_machine;
+	Elf64_Word e_version;
+	Elf64_Addr e_entry;	/* Entry point virtual address */
+	Elf64_Off e_phoff;	/* Program header table file offset */
+	Elf64_Off e_shoff;	/* Section header table file offset */
+	Elf64_Word e_flags;
+	Elf64_Half e_ehsize;
+	Elf64_Half e_phentsize;
+	Elf64_Half e_phnum;
+	Elf64_Half e_shentsize;
+	Elf64_Half e_shnum;
+	Elf64_Half e_shstrndx;
+} Elf64_Ehdr;
+
+/* These constants define the permissions on sections in the program
+   header, p_flags. */
+#define PF_R		0x4
+#define PF_W		0x2
+#define PF_X		0x1
+
+typedef struct elf32_phdr {
+	Elf32_Word p_type;
+	Elf32_Off p_offset;
+	Elf32_Addr p_vaddr;
+	Elf32_Addr p_paddr;
+	Elf32_Word p_filesz;
+	Elf32_Word p_memsz;
+	Elf32_Word p_flags;
+	Elf32_Word p_align;
+} Elf32_Phdr;
+
+typedef struct elf64_phdr {
+	Elf64_Word p_type;
+	Elf64_Word p_flags;
+	Elf64_Off p_offset;	/* Segment file offset */
+	Elf64_Addr p_vaddr;	/* Segment virtual address */
+	Elf64_Addr p_paddr;	/* Segment physical address */
+	Elf64_Xword p_filesz;	/* Segment size in file */
+	Elf64_Xword p_memsz;	/* Segment size in memory */
+	Elf64_Xword p_align;	/* Segment alignment, file & memory */
+} Elf64_Phdr;
+
+#define	EI_MAG0		0	/* e_ident[] indexes */
+#define	EI_MAG1		1
+#define	EI_MAG2		2
+#define	EI_MAG3		3
+#define	EI_CLASS	4
+#define	EI_DATA		5
+#define	EI_VERSION	6
+#define	EI_OSABI	7
+#define	EI_PAD		8
+
+#define	ELFMAG0		0x7f	/* EI_MAG */
+#define	ELFMAG1		'E'
+#define	ELFMAG2		'L'
+#define	ELFMAG3		'F'
+#define	ELFMAG		"\177ELF"
+#define	SELFMAG		4
+
+#define	ELFCLASSNONE	0	/* EI_CLASS */
+#define	ELFCLASS32	1
+#define	ELFCLASS64	2
+#define	ELFCLASSNUM	3
+
+#define ELFDATANONE	0	/* e_ident[EI_DATA] */
+#define ELFDATA2LSB	1
+#define ELFDATA2MSB	2
+
+#define EV_NONE		0	/* e_version, EI_VERSION */
+#define EV_CURRENT	1
+#define EV_NUM		2
+
+#define ELFOSABI_NONE	0
+#define ELFOSABI_LINUX	3
+
+#endif				/* _PPC_BOOT_ELF_H_ */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/hack-coff.c ../mkvmlinuz-33+nmu1/boot/hack-coff.c
--- ../mkvmlinuz-33+nmu1.old/boot/hack-coff.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/hack-coff.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,84 @@
+/*
+ * hack-coff.c - hack the header of an xcoff file to fill in
+ * a few fields needed by the Open Firmware xcoff loader on
+ * Power Macs but not initialized by objcopy.
+ *
+ * Copyright (C) Paul Mackerras 1997.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include "rs6000.h"
+
+#define AOUT_MAGIC	0x010b
+
+#define get_16be(x)	((((unsigned char *)(x))[0] << 8) \
+			 + ((unsigned char *)(x))[1])
+#define put_16be(x, v)	(((unsigned char *)(x))[0] = (v) >> 8, \
+			 ((unsigned char *)(x))[1] = (v) & 0xff)
+#define get_32be(x)	((((unsigned char *)(x))[0] << 24) \
+			 + (((unsigned char *)(x))[1] << 16) \
+			 + (((unsigned char *)(x))[2] << 8) \
+			 + ((unsigned char *)(x))[3])
+
+int
+main(int ac, char **av)
+{
+    int fd;
+    int i, nsect;
+    int aoutsz;
+    struct external_filehdr fhdr;
+    AOUTHDR aout;
+    struct external_scnhdr shdr;
+
+    if (ac != 2) {
+	fprintf(stderr, "Usage: hack-coff coff-file\n");
+	exit(1);
+    }
+    if ((fd = open(av[1], 2)) == -1) {
+	perror(av[2]);
+	exit(1);
+    }
+    if (read(fd, &fhdr, sizeof(fhdr)) != sizeof(fhdr))
+	goto readerr;
+    i = get_16be(fhdr.f_magic);
+    if (i != U802TOCMAGIC && i != U802WRMAGIC && i != U802ROMAGIC) {
+	fprintf(stderr, "%s: not an xcoff file\n", av[1]);
+	exit(1);
+    }
+    aoutsz = get_16be(fhdr.f_opthdr);
+    if (read(fd, &aout, aoutsz) != aoutsz)
+	goto readerr;
+    nsect = get_16be(fhdr.f_nscns);
+    for (i = 0; i < nsect; ++i) {
+	if (read(fd, &shdr, sizeof(shdr)) != sizeof(shdr))
+	    goto readerr;
+	if (strcmp(shdr.s_name, ".text") == 0) {
+	    put_16be(aout.o_snentry, i+1);
+	    put_16be(aout.o_sntext, i+1);
+	} else if (strcmp(shdr.s_name, ".data") == 0) {
+	    put_16be(aout.o_sndata, i+1);
+	} else if (strcmp(shdr.s_name, ".bss") == 0) {
+	    put_16be(aout.o_snbss, i+1);
+	}
+    }
+    put_16be(aout.magic, AOUT_MAGIC);
+    if (lseek(fd, (long) sizeof(struct external_filehdr), 0) == -1
+	|| write(fd, &aout, aoutsz) != aoutsz) {
+	fprintf(stderr, "%s: write error\n", av[1]);
+	exit(1);
+    }
+    close(fd);
+    exit(0);
+
+readerr:
+    fprintf(stderr, "%s: read error or file too short\n", av[1]);
+    exit(1);
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/infblock.c ../mkvmlinuz-33+nmu1/boot/infblock.c
--- ../mkvmlinuz-33+nmu1.old/boot/infblock.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/infblock.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,365 @@
+/* infblock.c -- interpret and process block types to last block
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+#include "zutil.h"
+#include "infblock.h"
+#include "inftrees.h"
+#include "infcodes.h"
+#include "infutil.h"
+
+struct inflate_codes_state;
+
+/* simplify the use of the inflate_huft type with some defines */
+#define exop word.what.Exop
+#define bits word.what.Bits
+
+/* Table for deflate from PKZIP's appnote.txt. */
+static const uInt border[] = { /* Order of the bit length code lengths */
+        16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+/*
+   Notes beyond the 1.93a appnote.txt:
+
+   1. Distance pointers never point before the beginning of the output
+      stream.
+   2. Distance pointers can point back across blocks, up to 32k away.
+   3. There is an implied maximum of 7 bits for the bit length table and
+      15 bits for the actual data.
+   4. If only one code exists, then it is encoded using one bit.  (Zero
+      would be more efficient, but perhaps a little confusing.)  If two
+      codes exist, they are coded using one bit each (0 and 1).
+   5. There is no way of sending zero distance codes--a dummy must be
+      sent if there are none.  (History: a pre 2.0 version of PKZIP would
+      store blocks with no distance codes, but this was discovered to be
+      too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
+      zero distance codes, which is sent as one code of zero bits in
+      length.
+   6. There are up to 286 literal/length codes.  Code 256 represents the
+      end-of-block.  Note however that the static length tree defines
+      288 codes just to fill out the Huffman codes.  Codes 286 and 287
+      cannot be used though, since there is no length base or extra bits
+      defined for them.  Similarily, there are up to 30 distance codes.
+      However, static trees define 32 codes (all 5 bits) to fill out the
+      Huffman codes, but the last two had better not show up in the data.
+   7. Unzip can check dynamic Huffman blocks for complete code sets.
+      The exception is that a single code would not be complete (see #4).
+   8. The five bits following the block type is really the number of
+      literal codes sent minus 257.
+   9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
+      (1+6+6).  Therefore, to output three times the length, you output
+      three codes (1+1+1), whereas to output four times the same length,
+      you only need two codes (1+3).  Hmm.
+  10. In the tree reconstruction algorithm, Code = Code + Increment
+      only if BitLength(i) is not zero.  (Pretty obvious.)
+  11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
+  12. Note: length code 284 can represent 227-258, but length code 285
+      really is 258.  The last length deserves its own, short code
+      since it gets used a lot in very redundant files.  The length
+      258 is special since 258 - 3 (the min match length) is 255.
+  13. The literal/length and distance code bit lengths are read as a
+      single stream of lengths.  It is possible (and advantageous) for
+      a repeat code (16, 17, or 18) to go across the boundary between
+      the two sets of lengths.
+ */
+
+
+void zlib_inflate_blocks_reset(
+	inflate_blocks_statef *s,
+	z_streamp z,
+	uLong *c
+)
+{
+  if (c != NULL)
+    *c = s->check;
+  if (s->mode == CODES)
+    zlib_inflate_codes_free(s->sub.decode.codes, z);
+  s->mode = TYPE;
+  s->bitk = 0;
+  s->bitb = 0;
+  s->read = s->write = s->window;
+  if (s->checkfn != NULL)
+    z->adler = s->check = (*s->checkfn)(0L, NULL, 0);
+}
+
+inflate_blocks_statef *zlib_inflate_blocks_new(
+	z_streamp z,
+	check_func c,
+	uInt w
+)
+{
+  inflate_blocks_statef *s;
+
+  s = &WS(z)->working_blocks_state;
+  s->hufts = WS(z)->working_hufts;
+  s->window = WS(z)->working_window;
+  s->end = s->window + w;
+  s->checkfn = c;
+  s->mode = TYPE;
+  zlib_inflate_blocks_reset(s, z, NULL);
+  return s;
+}
+
+
+int zlib_inflate_blocks(
+	inflate_blocks_statef *s,
+	z_streamp z,
+	int r
+)
+{
+  uInt t;               /* temporary storage */
+  uLong b;              /* bit buffer */
+  uInt k;               /* bits in bit buffer */
+  Byte *p;              /* input data pointer */
+  uInt n;               /* bytes available there */
+  Byte *q;              /* output window write pointer */
+  uInt m;               /* bytes to end of window or read pointer */
+
+  /* copy input/output information to locals (UPDATE macro restores) */
+  LOAD
+
+  /* process input based on current state */
+  while (1) switch (s->mode)
+  {
+    case TYPE:
+      NEEDBITS(3)
+      t = (uInt)b & 7;
+      s->last = t & 1;
+      switch (t >> 1)
+      {
+        case 0:                         /* stored */
+          DUMPBITS(3)
+          t = k & 7;                    /* go to byte boundary */
+          DUMPBITS(t)
+          s->mode = LENS;               /* get length of stored block */
+          break;
+        case 1:                         /* fixed */
+          {
+            uInt bl, bd;
+            inflate_huft *tl, *td;
+
+            zlib_inflate_trees_fixed(&bl, &bd, &tl, &td, s->hufts, z);
+            s->sub.decode.codes = zlib_inflate_codes_new(bl, bd, tl, td, z);
+            if (s->sub.decode.codes == NULL)
+            {
+              r = Z_MEM_ERROR;
+              LEAVE
+            }
+          }
+          DUMPBITS(3)
+          s->mode = CODES;
+          break;
+        case 2:                         /* dynamic */
+          DUMPBITS(3)
+          s->mode = TABLE;
+          break;
+        case 3:                         /* illegal */
+          DUMPBITS(3)
+          s->mode = B_BAD;
+          z->msg = (char*)"invalid block type";
+          r = Z_DATA_ERROR;
+          LEAVE
+      }
+      break;
+    case LENS:
+      NEEDBITS(32)
+      if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
+      {
+        s->mode = B_BAD;
+        z->msg = (char*)"invalid stored block lengths";
+        r = Z_DATA_ERROR;
+        LEAVE
+      }
+      s->sub.left = (uInt)b & 0xffff;
+      b = k = 0;                      /* dump bits */
+      s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
+      break;
+    case STORED:
+      if (n == 0)
+        LEAVE
+      NEEDOUT
+      t = s->sub.left;
+      if (t > n) t = n;
+      if (t > m) t = m;
+      memcpy(q, p, t);
+      p += t;  n -= t;
+      q += t;  m -= t;
+      if ((s->sub.left -= t) != 0)
+        break;
+      s->mode = s->last ? DRY : TYPE;
+      break;
+    case TABLE:
+      NEEDBITS(14)
+      s->sub.trees.table = t = (uInt)b & 0x3fff;
+#ifndef PKZIP_BUG_WORKAROUND
+      if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
+      {
+        s->mode = B_BAD;
+        z->msg = (char*)"too many length or distance symbols";
+        r = Z_DATA_ERROR;
+        LEAVE
+      }
+#endif
+      {
+      	s->sub.trees.blens = WS(z)->working_blens;
+      }
+      DUMPBITS(14)
+      s->sub.trees.index = 0;
+      s->mode = BTREE;
+    case BTREE:
+      while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
+      {
+        NEEDBITS(3)
+        s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
+        DUMPBITS(3)
+      }
+      while (s->sub.trees.index < 19)
+        s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
+      s->sub.trees.bb = 7;
+      t = zlib_inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
+				  &s->sub.trees.tb, s->hufts, z);
+      if (t != Z_OK)
+      {
+        r = t;
+        if (r == Z_DATA_ERROR)
+          s->mode = B_BAD;
+        LEAVE
+      }
+      s->sub.trees.index = 0;
+      s->mode = DTREE;
+    case DTREE:
+      while (t = s->sub.trees.table,
+             s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
+      {
+        inflate_huft *h;
+        uInt i, j, c;
+
+        t = s->sub.trees.bb;
+        NEEDBITS(t)
+        h = s->sub.trees.tb + ((uInt)b & zlib_inflate_mask[t]);
+        t = h->bits;
+        c = h->base;
+        if (c < 16)
+        {
+          DUMPBITS(t)
+          s->sub.trees.blens[s->sub.trees.index++] = c;
+        }
+        else /* c == 16..18 */
+        {
+          i = c == 18 ? 7 : c - 14;
+          j = c == 18 ? 11 : 3;
+          NEEDBITS(t + i)
+          DUMPBITS(t)
+          j += (uInt)b & zlib_inflate_mask[i];
+          DUMPBITS(i)
+          i = s->sub.trees.index;
+          t = s->sub.trees.table;
+          if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
+              (c == 16 && i < 1))
+          {
+            s->mode = B_BAD;
+            z->msg = (char*)"invalid bit length repeat";
+            r = Z_DATA_ERROR;
+            LEAVE
+          }
+          c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
+          do {
+            s->sub.trees.blens[i++] = c;
+          } while (--j);
+          s->sub.trees.index = i;
+        }
+      }
+      s->sub.trees.tb = NULL;
+      {
+        uInt bl, bd;
+        inflate_huft *tl, *td;
+        inflate_codes_statef *c;
+
+        bl = 9;         /* must be <= 9 for lookahead assumptions */
+        bd = 6;         /* must be <= 9 for lookahead assumptions */
+        t = s->sub.trees.table;
+        t = zlib_inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
+				       s->sub.trees.blens, &bl, &bd, &tl, &td,
+				       s->hufts, z);
+        if (t != Z_OK)
+        {
+          if (t == (uInt)Z_DATA_ERROR)
+            s->mode = B_BAD;
+          r = t;
+          LEAVE
+        }
+        if ((c = zlib_inflate_codes_new(bl, bd, tl, td, z)) == NULL)
+        {
+          r = Z_MEM_ERROR;
+          LEAVE
+        }
+        s->sub.decode.codes = c;
+      }
+      s->mode = CODES;
+    case CODES:
+      UPDATE
+      if ((r = zlib_inflate_codes(s, z, r)) != Z_STREAM_END)
+        return zlib_inflate_flush(s, z, r);
+      r = Z_OK;
+      zlib_inflate_codes_free(s->sub.decode.codes, z);
+      LOAD
+      if (!s->last)
+      {
+        s->mode = TYPE;
+        break;
+      }
+      s->mode = DRY;
+    case DRY:
+      FLUSH
+      if (s->read != s->write)
+        LEAVE
+      s->mode = B_DONE;
+    case B_DONE:
+      r = Z_STREAM_END;
+      LEAVE
+    case B_BAD:
+      r = Z_DATA_ERROR;
+      LEAVE
+    default:
+      r = Z_STREAM_ERROR;
+      LEAVE
+  }
+}
+
+
+int zlib_inflate_blocks_free(
+	inflate_blocks_statef *s,
+	z_streamp z
+)
+{
+  zlib_inflate_blocks_reset(s, z, NULL);
+  return Z_OK;
+}
+
+
+#if 0
+void zlib_inflate_set_dictionary(
+	inflate_blocks_statef *s,
+	const Byte *d,
+	uInt  n
+)
+{
+  memcpy(s->window, d, n);
+  s->read = s->write = s->window + n;
+}
+#endif  /*  0  */
+
+
+/* Returns true if inflate is currently at the end of a block generated
+ * by Z_SYNC_FLUSH or Z_FULL_FLUSH. 
+ * IN assertion: s != NULL
+ */
+#if 0
+int zlib_inflate_blocks_sync_point(
+	inflate_blocks_statef *s
+)
+{
+  return s->mode == LENS;
+}
+#endif  /*  0  */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/infblock.h ../mkvmlinuz-33+nmu1/boot/infblock.h
--- ../mkvmlinuz-33+nmu1.old/boot/infblock.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/infblock.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,48 @@
+/* infblock.h -- header to use infblock.c
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+#ifndef _INFBLOCK_H
+#define _INFBLOCK_H
+
+struct inflate_blocks_state;
+typedef struct inflate_blocks_state inflate_blocks_statef;
+
+extern inflate_blocks_statef * zlib_inflate_blocks_new (
+    z_streamp z,
+    check_func c,              /* check function */
+    uInt w);                   /* window size */
+
+extern int zlib_inflate_blocks (
+    inflate_blocks_statef *,
+    z_streamp ,
+    int);                      /* initial return code */
+
+extern void zlib_inflate_blocks_reset (
+    inflate_blocks_statef *,
+    z_streamp ,
+    uLong *);                  /* check value on output */
+
+extern int zlib_inflate_blocks_free (
+    inflate_blocks_statef *,
+    z_streamp);
+
+#if 0
+extern void zlib_inflate_set_dictionary (
+    inflate_blocks_statef *s,
+    const Byte *d,  /* dictionary */
+    uInt  n);       /* dictionary length */
+#endif  /*  0  */
+
+#if 0
+extern int zlib_inflate_blocks_sync_point (
+    inflate_blocks_statef *s);
+#endif  /*  0  */
+
+#endif /* _INFBLOCK_H */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/infcodes.c ../mkvmlinuz-33+nmu1/boot/infcodes.c
--- ../mkvmlinuz-33+nmu1.old/boot/infcodes.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/infcodes.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,202 @@
+/* infcodes.c -- process literals and length/distance pairs
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "infblock.h"
+#include "infcodes.h"
+#include "infutil.h"
+#include "inffast.h"
+
+/* simplify the use of the inflate_huft type with some defines */
+#define exop word.what.Exop
+#define bits word.what.Bits
+
+inflate_codes_statef *zlib_inflate_codes_new(
+	uInt bl,
+	uInt bd,
+	inflate_huft *tl,
+	inflate_huft *td, /* need separate declaration for Borland C++ */
+	z_streamp z
+)
+{
+  inflate_codes_statef *c;
+
+  c = &WS(z)->working_state;
+  {
+    c->mode = START;
+    c->lbits = (Byte)bl;
+    c->dbits = (Byte)bd;
+    c->ltree = tl;
+    c->dtree = td;
+  }
+  return c;
+}
+
+
+int zlib_inflate_codes(
+	inflate_blocks_statef *s,
+	z_streamp z,
+	int r
+)
+{
+  uInt j;               /* temporary storage */
+  inflate_huft *t;      /* temporary pointer */
+  uInt e;               /* extra bits or operation */
+  uLong b;              /* bit buffer */
+  uInt k;               /* bits in bit buffer */
+  Byte *p;              /* input data pointer */
+  uInt n;               /* bytes available there */
+  Byte *q;              /* output window write pointer */
+  uInt m;               /* bytes to end of window or read pointer */
+  Byte *f;              /* pointer to copy strings from */
+  inflate_codes_statef *c = s->sub.decode.codes;  /* codes state */
+
+  /* copy input/output information to locals (UPDATE macro restores) */
+  LOAD
+
+  /* process input and output based on current state */
+  while (1) switch (c->mode)
+  {             /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
+    case START:         /* x: set up for LEN */
+#ifndef SLOW
+      if (m >= 258 && n >= 10)
+      {
+        UPDATE
+        r = zlib_inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
+        LOAD
+        if (r != Z_OK)
+        {
+          c->mode = r == Z_STREAM_END ? WASH : BADCODE;
+          break;
+        }
+      }
+#endif /* !SLOW */
+      c->sub.code.need = c->lbits;
+      c->sub.code.tree = c->ltree;
+      c->mode = LEN;
+    case LEN:           /* i: get length/literal/eob next */
+      j = c->sub.code.need;
+      NEEDBITS(j)
+      t = c->sub.code.tree + ((uInt)b & zlib_inflate_mask[j]);
+      DUMPBITS(t->bits)
+      e = (uInt)(t->exop);
+      if (e == 0)               /* literal */
+      {
+        c->sub.lit = t->base;
+        c->mode = LIT;
+        break;
+      }
+      if (e & 16)               /* length */
+      {
+        c->sub.copy.get = e & 15;
+        c->len = t->base;
+        c->mode = LENEXT;
+        break;
+      }
+      if ((e & 64) == 0)        /* next table */
+      {
+        c->sub.code.need = e;
+        c->sub.code.tree = t + t->base;
+        break;
+      }
+      if (e & 32)               /* end of block */
+      {
+        c->mode = WASH;
+        break;
+      }
+      c->mode = BADCODE;        /* invalid code */
+      z->msg = (char*)"invalid literal/length code";
+      r = Z_DATA_ERROR;
+      LEAVE
+    case LENEXT:        /* i: getting length extra (have base) */
+      j = c->sub.copy.get;
+      NEEDBITS(j)
+      c->len += (uInt)b & zlib_inflate_mask[j];
+      DUMPBITS(j)
+      c->sub.code.need = c->dbits;
+      c->sub.code.tree = c->dtree;
+      c->mode = DIST;
+    case DIST:          /* i: get distance next */
+      j = c->sub.code.need;
+      NEEDBITS(j)
+      t = c->sub.code.tree + ((uInt)b & zlib_inflate_mask[j]);
+      DUMPBITS(t->bits)
+      e = (uInt)(t->exop);
+      if (e & 16)               /* distance */
+      {
+        c->sub.copy.get = e & 15;
+        c->sub.copy.dist = t->base;
+        c->mode = DISTEXT;
+        break;
+      }
+      if ((e & 64) == 0)        /* next table */
+      {
+        c->sub.code.need = e;
+        c->sub.code.tree = t + t->base;
+        break;
+      }
+      c->mode = BADCODE;        /* invalid code */
+      z->msg = (char*)"invalid distance code";
+      r = Z_DATA_ERROR;
+      LEAVE
+    case DISTEXT:       /* i: getting distance extra */
+      j = c->sub.copy.get;
+      NEEDBITS(j)
+      c->sub.copy.dist += (uInt)b & zlib_inflate_mask[j];
+      DUMPBITS(j)
+      c->mode = COPY;
+    case COPY:          /* o: copying bytes in window, waiting for space */
+      f = q - c->sub.copy.dist;
+      while (f < s->window)             /* modulo window size-"while" instead */
+        f += s->end - s->window;        /* of "if" handles invalid distances */
+      while (c->len)
+      {
+        NEEDOUT
+        OUTBYTE(*f++)
+        if (f == s->end)
+          f = s->window;
+        c->len--;
+      }
+      c->mode = START;
+      break;
+    case LIT:           /* o: got literal, waiting for output space */
+      NEEDOUT
+      OUTBYTE(c->sub.lit)
+      c->mode = START;
+      break;
+    case WASH:          /* o: got eob, possibly more output */
+      if (k > 7)        /* return unused byte, if any */
+      {
+        k -= 8;
+        n++;
+        p--;            /* can always return one */
+      }
+      FLUSH
+      if (s->read != s->write)
+        LEAVE
+      c->mode = END;
+    case END:
+      r = Z_STREAM_END;
+      LEAVE
+    case BADCODE:       /* x: got error */
+      r = Z_DATA_ERROR;
+      LEAVE
+    default:
+      r = Z_STREAM_ERROR;
+      LEAVE
+  }
+#ifdef NEED_DUMMY_RETURN
+  return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
+#endif
+}
+
+
+void zlib_inflate_codes_free(
+	inflate_codes_statef *c,
+	z_streamp z
+)
+{
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/infcodes.h ../mkvmlinuz-33+nmu1/boot/infcodes.h
--- ../mkvmlinuz-33+nmu1.old/boot/infcodes.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/infcodes.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,33 @@
+/* infcodes.h -- header to use infcodes.c
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+#ifndef _INFCODES_H
+#define _INFCODES_H
+
+#include "infblock.h"
+
+struct inflate_codes_state;
+typedef struct inflate_codes_state inflate_codes_statef;
+
+extern inflate_codes_statef *zlib_inflate_codes_new (
+    uInt, uInt,
+    inflate_huft *, inflate_huft *,
+    z_streamp );
+
+extern int zlib_inflate_codes (
+    inflate_blocks_statef *,
+    z_streamp ,
+    int);
+
+extern void zlib_inflate_codes_free (
+    inflate_codes_statef *,
+    z_streamp );
+
+#endif /* _INFCODES_H */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/inffast.c ../mkvmlinuz-33+nmu1/boot/inffast.c
--- ../mkvmlinuz-33+nmu1.old/boot/inffast.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/inffast.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,176 @@
+/* inffast.c -- process literals and length/distance pairs fast
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "infblock.h"
+#include "infcodes.h"
+#include "infutil.h"
+#include "inffast.h"
+
+struct inflate_codes_state;
+
+/* simplify the use of the inflate_huft type with some defines */
+#define exop word.what.Exop
+#define bits word.what.Bits
+
+/* macros for bit input with no checking and for returning unused bytes */
+#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
+#define UNGRAB {c=z->avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;}
+
+/* Called with number of bytes left to write in window at least 258
+   (the maximum string length) and number of input bytes available
+   at least ten.  The ten bytes are six bytes for the longest length/
+   distance pair plus four bytes for overloading the bit buffer. */
+
+int zlib_inflate_fast(
+	uInt bl,
+	uInt bd,
+	inflate_huft *tl,
+	inflate_huft *td, /* need separate declaration for Borland C++ */
+	inflate_blocks_statef *s,
+	z_streamp z
+)
+{
+  inflate_huft *t;      /* temporary pointer */
+  uInt e;               /* extra bits or operation */
+  uLong b;              /* bit buffer */
+  uInt k;               /* bits in bit buffer */
+  Byte *p;              /* input data pointer */
+  uInt n;               /* bytes available there */
+  Byte *q;              /* output window write pointer */
+  uInt m;               /* bytes to end of window or read pointer */
+  uInt ml;              /* mask for literal/length tree */
+  uInt md;              /* mask for distance tree */
+  uInt c;               /* bytes to copy */
+  uInt d;               /* distance back to copy from */
+  Byte *r;              /* copy source pointer */
+
+  /* load input, output, bit values */
+  LOAD
+
+  /* initialize masks */
+  ml = zlib_inflate_mask[bl];
+  md = zlib_inflate_mask[bd];
+
+  /* do until not enough input or output space for fast loop */
+  do {                          /* assume called with m >= 258 && n >= 10 */
+    /* get literal/length code */
+    GRABBITS(20)                /* max bits for literal/length code */
+    if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
+    {
+      DUMPBITS(t->bits)
+      *q++ = (Byte)t->base;
+      m--;
+      continue;
+    }
+    do {
+      DUMPBITS(t->bits)
+      if (e & 16)
+      {
+        /* get extra bits for length */
+        e &= 15;
+        c = t->base + ((uInt)b & zlib_inflate_mask[e]);
+        DUMPBITS(e)
+
+        /* decode distance base of block to copy */
+        GRABBITS(15);           /* max bits for distance code */
+        e = (t = td + ((uInt)b & md))->exop;
+        do {
+          DUMPBITS(t->bits)
+          if (e & 16)
+          {
+            /* get extra bits to add to distance base */
+            e &= 15;
+            GRABBITS(e)         /* get extra bits (up to 13) */
+            d = t->base + ((uInt)b & zlib_inflate_mask[e]);
+            DUMPBITS(e)
+
+            /* do the copy */
+            m -= c;
+            r = q - d;
+            if (r < s->window)                  /* wrap if needed */
+            {
+              do {
+                r += s->end - s->window;        /* force pointer in window */
+              } while (r < s->window);          /* covers invalid distances */
+              e = s->end - r;
+              if (c > e)
+              {
+                c -= e;                         /* wrapped copy */
+                do {
+                    *q++ = *r++;
+                } while (--e);
+                r = s->window;
+                do {
+                    *q++ = *r++;
+                } while (--c);
+              }
+              else                              /* normal copy */
+              {
+                *q++ = *r++;  c--;
+                *q++ = *r++;  c--;
+                do {
+                    *q++ = *r++;
+                } while (--c);
+              }
+            }
+            else                                /* normal copy */
+            {
+              *q++ = *r++;  c--;
+              *q++ = *r++;  c--;
+              do {
+                *q++ = *r++;
+              } while (--c);
+            }
+            break;
+          }
+          else if ((e & 64) == 0)
+          {
+            t += t->base;
+            e = (t += ((uInt)b & zlib_inflate_mask[e]))->exop;
+          }
+          else
+          {
+            z->msg = (char*)"invalid distance code";
+            UNGRAB
+            UPDATE
+            return Z_DATA_ERROR;
+          }
+        } while (1);
+        break;
+      }
+      if ((e & 64) == 0)
+      {
+        t += t->base;
+        if ((e = (t += ((uInt)b & zlib_inflate_mask[e]))->exop) == 0)
+        {
+          DUMPBITS(t->bits)
+          *q++ = (Byte)t->base;
+          m--;
+          break;
+        }
+      }
+      else if (e & 32)
+      {
+        UNGRAB
+        UPDATE
+        return Z_STREAM_END;
+      }
+      else
+      {
+        z->msg = (char*)"invalid literal/length code";
+        UNGRAB
+        UPDATE
+        return Z_DATA_ERROR;
+      }
+    } while (1);
+  } while (m >= 258 && n >= 10);
+
+  /* not enough input or output--restore pointers and return */
+  UNGRAB
+  UPDATE
+  return Z_OK;
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/inffast.h ../mkvmlinuz-33+nmu1/boot/inffast.h
--- ../mkvmlinuz-33+nmu1.old/boot/inffast.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/inffast.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,17 @@
+/* inffast.h -- header to use inffast.c
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+extern int zlib_inflate_fast (
+    uInt,
+    uInt,
+    inflate_huft *,
+    inflate_huft *,
+    inflate_blocks_statef *,
+    z_streamp );
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/inflate.c ../mkvmlinuz-33+nmu1/boot/inflate.c
--- ../mkvmlinuz-33+nmu1.old/boot/inflate.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/inflate.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,247 @@
+/* inflate.c -- zlib interface to inflate modules
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+#include "zutil.h"
+#include "infblock.h"
+#include "infutil.h"
+
+int zlib_inflate_workspacesize(void)
+{
+  return sizeof(struct inflate_workspace);
+}
+
+
+int zlib_inflateReset(
+	z_streamp z
+)
+{
+  if (z == NULL || z->state == NULL || z->workspace == NULL)
+    return Z_STREAM_ERROR;
+  z->total_in = z->total_out = 0;
+  z->msg = NULL;
+  z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
+  zlib_inflate_blocks_reset(z->state->blocks, z, NULL);
+  return Z_OK;
+}
+
+
+int zlib_inflateEnd(
+	z_streamp z
+)
+{
+  if (z == NULL || z->state == NULL || z->workspace == NULL)
+    return Z_STREAM_ERROR;
+  if (z->state->blocks != NULL)
+    zlib_inflate_blocks_free(z->state->blocks, z);
+  z->state = NULL;
+  return Z_OK;
+}
+
+
+int zlib_inflateInit2_(
+	z_streamp z,
+	int w,
+	const char *version,
+	int stream_size
+)
+{
+  if (version == NULL || version[0] != ZLIB_VERSION[0] ||
+      stream_size != sizeof(z_stream) || z->workspace == NULL)
+      return Z_VERSION_ERROR;
+
+  /* initialize state */
+  z->msg = NULL;
+  z->state = &WS(z)->internal_state;
+  z->state->blocks = NULL;
+
+  /* handle undocumented nowrap option (no zlib header or check) */
+  z->state->nowrap = 0;
+  if (w < 0)
+  {
+    w = - w;
+    z->state->nowrap = 1;
+  }
+
+  /* set window size */
+  if (w < 8 || w > 15)
+  {
+    zlib_inflateEnd(z);
+    return Z_STREAM_ERROR;
+  }
+  z->state->wbits = (uInt)w;
+
+  /* create inflate_blocks state */
+  if ((z->state->blocks =
+      zlib_inflate_blocks_new(z, z->state->nowrap ? NULL : zlib_adler32, (uInt)1 << w))
+      == NULL)
+  {
+    zlib_inflateEnd(z);
+    return Z_MEM_ERROR;
+  }
+
+  /* reset state */
+  zlib_inflateReset(z);
+  return Z_OK;
+}
+
+
+/*
+ * At the end of a Deflate-compressed PPP packet, we expect to have seen
+ * a `stored' block type value but not the (zero) length bytes.
+ */
+static int zlib_inflate_packet_flush(inflate_blocks_statef *s)
+{
+    if (s->mode != LENS)
+	return Z_DATA_ERROR;
+    s->mode = TYPE;
+    return Z_OK;
+}
+
+
+int zlib_inflateInit_(
+	z_streamp z,
+	const char *version,
+	int stream_size
+)
+{
+  return zlib_inflateInit2_(z, DEF_WBITS, version, stream_size);
+}
+
+#undef NEEDBYTE
+#undef NEXTBYTE
+#define NEEDBYTE {if(z->avail_in==0)goto empty;r=trv;}
+#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
+
+int zlib_inflate(
+	z_streamp z,
+	int f
+)
+{
+  int r, trv;
+  uInt b;
+
+  if (z == NULL || z->state == NULL || z->next_in == NULL)
+    return Z_STREAM_ERROR;
+  trv = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
+  r = Z_BUF_ERROR;
+  while (1) switch (z->state->mode)
+  {
+    case METHOD:
+      NEEDBYTE
+      if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
+      {
+        z->state->mode = I_BAD;
+        z->msg = (char*)"unknown compression method";
+        z->state->sub.marker = 5;       /* can't try inflateSync */
+        break;
+      }
+      if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
+      {
+        z->state->mode = I_BAD;
+        z->msg = (char*)"invalid window size";
+        z->state->sub.marker = 5;       /* can't try inflateSync */
+        break;
+      }
+      z->state->mode = FLAG;
+    case FLAG:
+      NEEDBYTE
+      b = NEXTBYTE;
+      if (((z->state->sub.method << 8) + b) % 31)
+      {
+        z->state->mode = I_BAD;
+        z->msg = (char*)"incorrect header check";
+        z->state->sub.marker = 5;       /* can't try inflateSync */
+        break;
+      }
+      if (!(b & PRESET_DICT))
+      {
+        z->state->mode = BLOCKS;
+        break;
+      }
+      z->state->mode = DICT4;
+    case DICT4:
+      NEEDBYTE
+      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
+      z->state->mode = DICT3;
+    case DICT3:
+      NEEDBYTE
+      z->state->sub.check.need += (uLong)NEXTBYTE << 16;
+      z->state->mode = DICT2;
+    case DICT2:
+      NEEDBYTE
+      z->state->sub.check.need += (uLong)NEXTBYTE << 8;
+      z->state->mode = DICT1;
+    case DICT1:
+      NEEDBYTE
+      z->state->sub.check.need += (uLong)NEXTBYTE;
+      z->adler = z->state->sub.check.need;
+      z->state->mode = DICT0;
+      return Z_NEED_DICT;
+    case DICT0:
+      z->state->mode = I_BAD;
+      z->msg = (char*)"need dictionary";
+      z->state->sub.marker = 0;       /* can try inflateSync */
+      return Z_STREAM_ERROR;
+    case BLOCKS:
+      r = zlib_inflate_blocks(z->state->blocks, z, r);
+      if (f == Z_PACKET_FLUSH && z->avail_in == 0 && z->avail_out != 0)
+	  r = zlib_inflate_packet_flush(z->state->blocks);
+      if (r == Z_DATA_ERROR)
+      {
+        z->state->mode = I_BAD;
+        z->state->sub.marker = 0;       /* can try inflateSync */
+        break;
+      }
+      if (r == Z_OK)
+        r = trv;
+      if (r != Z_STREAM_END)
+        return r;
+      r = trv;
+      zlib_inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
+      if (z->state->nowrap)
+      {
+        z->state->mode = I_DONE;
+        break;
+      }
+      z->state->mode = CHECK4;
+    case CHECK4:
+      NEEDBYTE
+      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
+      z->state->mode = CHECK3;
+    case CHECK3:
+      NEEDBYTE
+      z->state->sub.check.need += (uLong)NEXTBYTE << 16;
+      z->state->mode = CHECK2;
+    case CHECK2:
+      NEEDBYTE
+      z->state->sub.check.need += (uLong)NEXTBYTE << 8;
+      z->state->mode = CHECK1;
+    case CHECK1:
+      NEEDBYTE
+      z->state->sub.check.need += (uLong)NEXTBYTE;
+
+      if (z->state->sub.check.was != z->state->sub.check.need)
+      {
+        z->state->mode = I_BAD;
+        z->msg = (char*)"incorrect data check";
+        z->state->sub.marker = 5;       /* can't try inflateSync */
+        break;
+      }
+      z->state->mode = I_DONE;
+    case I_DONE:
+      return Z_STREAM_END;
+    case I_BAD:
+      return Z_DATA_ERROR;
+    default:
+      return Z_STREAM_ERROR;
+  }
+ empty:
+  if (f != Z_PACKET_FLUSH)
+    return r;
+  z->state->mode = I_BAD;
+  z->msg = (char *)"need more for packet flush";
+  z->state->sub.marker = 0;       /* can try inflateSync */
+  return Z_DATA_ERROR;
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/inftrees.c ../mkvmlinuz-33+nmu1/boot/inftrees.c
--- ../mkvmlinuz-33+nmu1.old/boot/inftrees.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/inftrees.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,412 @@
+/* inftrees.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "infutil.h"
+
+static const char inflate_copyright[]  =
+   " inflate 1.1.3 Copyright 1995-1998 Mark Adler ";
+/*
+  If you use the zlib library in a product, an acknowledgment is welcome
+  in the documentation of your product. If for some reason you cannot
+  include such an acknowledgment, I would appreciate that you keep this
+  copyright string in the executable of your product.
+ */
+struct internal_state;
+
+/* simplify the use of the inflate_huft type with some defines */
+#define exop word.what.Exop
+#define bits word.what.Bits
+
+
+static int huft_build (
+    uInt *,             /* code lengths in bits */
+    uInt,               /* number of codes */
+    uInt,               /* number of "simple" codes */
+    const uInt *,       /* list of base values for non-simple codes */
+    const uInt *,       /* list of extra bits for non-simple codes */
+    inflate_huft **,    /* result: starting table */
+    uInt *,             /* maximum lookup bits (returns actual) */
+    inflate_huft *,     /* space for trees */
+    uInt *,             /* hufts used in space */
+    uInt * );           /* space for values */
+
+/* Tables for deflate from PKZIP's appnote.txt. */
+static const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
+        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+        /* see note #13 above about 258 */
+static const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
+        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
+        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
+static const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
+        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+        8193, 12289, 16385, 24577};
+static const uInt cpdext[30] = { /* Extra bits for distance codes */
+        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
+        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
+        12, 12, 13, 13};
+
+/*
+   Huffman code decoding is performed using a multi-level table lookup.
+   The fastest way to decode is to simply build a lookup table whose
+   size is determined by the longest code.  However, the time it takes
+   to build this table can also be a factor if the data being decoded
+   is not very long.  The most common codes are necessarily the
+   shortest codes, so those codes dominate the decoding time, and hence
+   the speed.  The idea is you can have a shorter table that decodes the
+   shorter, more probable codes, and then point to subsidiary tables for
+   the longer codes.  The time it costs to decode the longer codes is
+   then traded against the time it takes to make longer tables.
+
+   This results of this trade are in the variables lbits and dbits
+   below.  lbits is the number of bits the first level table for literal/
+   length codes can decode in one step, and dbits is the same thing for
+   the distance codes.  Subsequent tables are also less than or equal to
+   those sizes.  These values may be adjusted either when all of the
+   codes are shorter than that, in which case the longest code length in
+   bits is used, or when the shortest code is *longer* than the requested
+   table size, in which case the length of the shortest code in bits is
+   used.
+
+   There are two different values for the two tables, since they code a
+   different number of possibilities each.  The literal/length table
+   codes 286 possible values, or in a flat code, a little over eight
+   bits.  The distance table codes 30 possible values, or a little less
+   than five bits, flat.  The optimum values for speed end up being
+   about one bit more than those, so lbits is 8+1 and dbits is 5+1.
+   The optimum values may differ though from machine to machine, and
+   possibly even between compilers.  Your mileage may vary.
+ */
+
+
+/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
+#define BMAX 15         /* maximum bit length of any code */
+
+static int huft_build(
+	uInt *b,               /* code lengths in bits (all assumed <= BMAX) */
+	uInt n,                /* number of codes (assumed <= 288) */
+	uInt s,                /* number of simple-valued codes (0..s-1) */
+	const uInt *d,         /* list of base values for non-simple codes */
+	const uInt *e,         /* list of extra bits for non-simple codes */
+	inflate_huft **t,      /* result: starting table */
+	uInt *m,               /* maximum lookup bits, returns actual */
+	inflate_huft *hp,      /* space for trees */
+	uInt *hn,              /* hufts used in space */
+	uInt *v                /* working area: values in order of bit length */
+)
+/* Given a list of code lengths and a maximum table size, make a set of
+   tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
+   if the given code set is incomplete (the tables are still built in this
+   case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of
+   lengths), or Z_MEM_ERROR if not enough memory. */
+{
+
+  uInt a;                       /* counter for codes of length k */
+  uInt c[BMAX+1];               /* bit length count table */
+  uInt f;                       /* i repeats in table every f entries */
+  int g;                        /* maximum code length */
+  int h;                        /* table level */
+  register uInt i;              /* counter, current code */
+  register uInt j;              /* counter */
+  register int k;               /* number of bits in current code */
+  int l;                        /* bits per table (returned in m) */
+  uInt mask;                    /* (1 << w) - 1, to avoid cc -O bug on HP */
+  register uInt *p;             /* pointer into c[], b[], or v[] */
+  inflate_huft *q;              /* points to current table */
+  struct inflate_huft_s r;      /* table entry for structure assignment */
+  inflate_huft *u[BMAX];        /* table stack */
+  register int w;               /* bits before this table == (l * h) */
+  uInt x[BMAX+1];               /* bit offsets, then code stack */
+  uInt *xp;                     /* pointer into x */
+  int y;                        /* number of dummy codes added */
+  uInt z;                       /* number of entries in current table */
+
+
+  /* Generate counts for each bit length */
+  p = c;
+#define C0 *p++ = 0;
+#define C2 C0 C0 C0 C0
+#define C4 C2 C2 C2 C2
+  C4                            /* clear c[]--assume BMAX+1 is 16 */
+  p = b;  i = n;
+  do {
+    c[*p++]++;                  /* assume all entries <= BMAX */
+  } while (--i);
+  if (c[0] == n)                /* null input--all zero length codes */
+  {
+    *t = NULL;
+    *m = 0;
+    return Z_OK;
+  }
+
+
+  /* Find minimum and maximum length, bound *m by those */
+  l = *m;
+  for (j = 1; j <= BMAX; j++)
+    if (c[j])
+      break;
+  k = j;                        /* minimum code length */
+  if ((uInt)l < j)
+    l = j;
+  for (i = BMAX; i; i--)
+    if (c[i])
+      break;
+  g = i;                        /* maximum code length */
+  if ((uInt)l > i)
+    l = i;
+  *m = l;
+
+
+  /* Adjust last length count to fill out codes, if needed */
+  for (y = 1 << j; j < i; j++, y <<= 1)
+    if ((y -= c[j]) < 0)
+      return Z_DATA_ERROR;
+  if ((y -= c[i]) < 0)
+    return Z_DATA_ERROR;
+  c[i] += y;
+
+
+  /* Generate starting offsets into the value table for each length */
+  x[1] = j = 0;
+  p = c + 1;  xp = x + 2;
+  while (--i) {                 /* note that i == g from above */
+    *xp++ = (j += *p++);
+  }
+
+
+  /* Make a table of values in order of bit lengths */
+  p = b;  i = 0;
+  do {
+    if ((j = *p++) != 0)
+      v[x[j]++] = i;
+  } while (++i < n);
+  n = x[g];                     /* set n to length of v */
+
+
+  /* Generate the Huffman codes and for each, make the table entries */
+  x[0] = i = 0;                 /* first Huffman code is zero */
+  p = v;                        /* grab values in bit order */
+  h = -1;                       /* no tables yet--level -1 */
+  w = -l;                       /* bits decoded == (l * h) */
+  u[0] = NULL;                  /* just to keep compilers happy */
+  q = NULL;                     /* ditto */
+  z = 0;                        /* ditto */
+
+  /* go through the bit lengths (k already is bits in shortest code) */
+  for (; k <= g; k++)
+  {
+    a = c[k];
+    while (a--)
+    {
+      /* here i is the Huffman code of length k bits for value *p */
+      /* make tables up to required level */
+      while (k > w + l)
+      {
+        h++;
+        w += l;                 /* previous table always l bits */
+
+        /* compute minimum size table less than or equal to l bits */
+        z = g - w;
+        z = z > (uInt)l ? l : z;        /* table size upper limit */
+        if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
+        {                       /* too few codes for k-w bit table */
+          f -= a + 1;           /* deduct codes from patterns left */
+          xp = c + k;
+          if (j < z)
+            while (++j < z)     /* try smaller tables up to z bits */
+            {
+              if ((f <<= 1) <= *++xp)
+                break;          /* enough codes to use up j bits */
+              f -= *xp;         /* else deduct codes from patterns */
+            }
+        }
+        z = 1 << j;             /* table entries for j-bit table */
+
+        /* allocate new table */
+        if (*hn + z > MANY)     /* (note: doesn't matter for fixed) */
+          return Z_DATA_ERROR;  /* overflow of MANY */
+        u[h] = q = hp + *hn;
+        *hn += z;
+
+        /* connect to last table, if there is one */
+        if (h)
+        {
+          x[h] = i;             /* save pattern for backing up */
+          r.bits = (Byte)l;     /* bits to dump before this table */
+          r.exop = (Byte)j;     /* bits in this table */
+          j = i >> (w - l);
+          r.base = (uInt)(q - u[h-1] - j);   /* offset to this table */
+          u[h-1][j] = r;        /* connect to last table */
+        }
+        else
+          *t = q;               /* first table is returned result */
+      }
+
+      /* set up table entry in r */
+      r.bits = (Byte)(k - w);
+      if (p >= v + n)
+        r.exop = 128 + 64;      /* out of values--invalid code */
+      else if (*p < s)
+      {
+        r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
+        r.base = *p++;          /* simple code is just the value */
+      }
+      else
+      {
+        r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
+        r.base = d[*p++ - s];
+      }
+
+      /* fill code-like entries with r */
+      f = 1 << (k - w);
+      for (j = i >> w; j < z; j += f)
+        q[j] = r;
+
+      /* backwards increment the k-bit code i */
+      for (j = 1 << (k - 1); i & j; j >>= 1)
+        i ^= j;
+      i ^= j;
+
+      /* backup over finished tables */
+      mask = (1 << w) - 1;      /* needed on HP, cc -O bug */
+      while ((i & mask) != x[h])
+      {
+        h--;                    /* don't need to update q */
+        w -= l;
+        mask = (1 << w) - 1;
+      }
+    }
+  }
+
+
+  /* Return Z_BUF_ERROR if we were given an incomplete table */
+  return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
+}
+
+
+int zlib_inflate_trees_bits(
+	uInt *c,                /* 19 code lengths */
+	uInt *bb,               /* bits tree desired/actual depth */
+	inflate_huft **tb,      /* bits tree result */
+	inflate_huft *hp,       /* space for trees */
+	z_streamp z             /* for messages */
+)
+{
+  int r;
+  uInt hn = 0;          /* hufts used in space */
+  uInt *v;              /* work area for huft_build */
+  
+  v = WS(z)->tree_work_area_1;
+  r = huft_build(c, 19, 19, NULL, NULL, tb, bb, hp, &hn, v);
+  if (r == Z_DATA_ERROR)
+    z->msg = (char*)"oversubscribed dynamic bit lengths tree";
+  else if (r == Z_BUF_ERROR || *bb == 0)
+  {
+    z->msg = (char*)"incomplete dynamic bit lengths tree";
+    r = Z_DATA_ERROR;
+  }
+  return r;
+}
+
+int zlib_inflate_trees_dynamic(
+	uInt nl,                /* number of literal/length codes */
+	uInt nd,                /* number of distance codes */
+	uInt *c,                /* that many (total) code lengths */
+	uInt *bl,               /* literal desired/actual bit depth */
+	uInt *bd,               /* distance desired/actual bit depth */
+	inflate_huft **tl,      /* literal/length tree result */
+	inflate_huft **td,      /* distance tree result */
+	inflate_huft *hp,       /* space for trees */
+	z_streamp z             /* for messages */
+)
+{
+  int r;
+  uInt hn = 0;          /* hufts used in space */
+  uInt *v;              /* work area for huft_build */
+
+  /* allocate work area */
+  v = WS(z)->tree_work_area_2;
+
+  /* build literal/length tree */
+  r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
+  if (r != Z_OK || *bl == 0)
+  {
+    if (r == Z_DATA_ERROR)
+      z->msg = (char*)"oversubscribed literal/length tree";
+    else if (r != Z_MEM_ERROR)
+    {
+      z->msg = (char*)"incomplete literal/length tree";
+      r = Z_DATA_ERROR;
+    }
+    return r;
+  }
+
+  /* build distance tree */
+  r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
+  if (r != Z_OK || (*bd == 0 && nl > 257))
+  {
+    if (r == Z_DATA_ERROR)
+      z->msg = (char*)"oversubscribed distance tree";
+    else if (r == Z_BUF_ERROR) {
+#ifdef PKZIP_BUG_WORKAROUND
+      r = Z_OK;
+    }
+#else
+      z->msg = (char*)"incomplete distance tree";
+      r = Z_DATA_ERROR;
+    }
+    else if (r != Z_MEM_ERROR)
+    {
+      z->msg = (char*)"empty distance tree with lengths";
+      r = Z_DATA_ERROR;
+    }
+    return r;
+#endif
+  }
+
+  /* done */
+  return Z_OK;
+}
+
+
+int zlib_inflate_trees_fixed(
+	uInt *bl,                /* literal desired/actual bit depth */
+	uInt *bd,                /* distance desired/actual bit depth */
+	inflate_huft **tl,       /* literal/length tree result */
+	inflate_huft **td,       /* distance tree result */
+	inflate_huft *hp,       /* space for trees */
+	z_streamp z              /* for memory allocation */
+)
+{
+  int i;                /* temporary variable */
+  unsigned l[288];      /* length list for huft_build */
+  uInt *v;              /* work area for huft_build */
+
+  /* set up literal table */
+  for (i = 0; i < 144; i++)
+    l[i] = 8;
+  for (; i < 256; i++)
+    l[i] = 9;
+  for (; i < 280; i++)
+    l[i] = 7;
+  for (; i < 288; i++)          /* make a complete, but wrong code set */
+    l[i] = 8;
+  *bl = 9;
+  v = WS(z)->tree_work_area_1;
+  if ((i = huft_build(l, 288, 257, cplens, cplext, tl, bl, hp,  &i, v)) != 0)
+    return i;
+
+  /* set up distance table */
+  for (i = 0; i < 30; i++)      /* make an incomplete code set */
+    l[i] = 5;
+  *bd = 5;
+  if ((i = huft_build(l, 30, 0, cpdist, cpdext, td, bd, hp, &i, v)) > 1)
+    return i;
+
+  return Z_OK;
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/inftrees.h ../mkvmlinuz-33+nmu1/boot/inftrees.h
--- ../mkvmlinuz-33+nmu1.old/boot/inftrees.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/inftrees.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,64 @@
+/* inftrees.h -- header to use inftrees.c
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* Huffman code lookup table entry--this entry is four bytes for machines
+   that have 16-bit pointers (e.g. PC's in the small or medium model). */
+
+#ifndef _INFTREES_H
+#define _INFTREES_H
+
+typedef struct inflate_huft_s inflate_huft;
+
+struct inflate_huft_s {
+  union {
+    struct {
+      Byte Exop;        /* number of extra bits or operation */
+      Byte Bits;        /* number of bits in this code or subcode */
+    } what;
+    uInt pad;           /* pad structure to a power of 2 (4 bytes for */
+  } word;               /*  16-bit, 8 bytes for 32-bit int's) */
+  uInt base;            /* literal, length base, distance base,
+                           or table offset */
+};
+
+/* Maximum size of dynamic tree.  The maximum found in a long but non-
+   exhaustive search was 1004 huft structures (850 for length/literals
+   and 154 for distances, the latter actually the result of an
+   exhaustive search).  The actual maximum is not known, but the
+   value below is more than safe. */
+#define MANY 1440
+
+extern int zlib_inflate_trees_bits (
+    uInt *,                     /* 19 code lengths */
+    uInt *,                     /* bits tree desired/actual depth */
+    inflate_huft **,            /* bits tree result */
+    inflate_huft *,             /* space for trees */
+    z_streamp);                 /* for messages */
+
+extern int zlib_inflate_trees_dynamic (
+    uInt,                       /* number of literal/length codes */
+    uInt,                       /* number of distance codes */
+    uInt *,                     /* that many (total) code lengths */
+    uInt *,                     /* literal desired/actual bit depth */
+    uInt *,                     /* distance desired/actual bit depth */
+    inflate_huft **,            /* literal/length tree result */
+    inflate_huft **,            /* distance tree result */
+    inflate_huft *,             /* space for trees */
+    z_streamp);                 /* for messages */
+
+extern int zlib_inflate_trees_fixed (
+    uInt *,                     /* literal desired/actual bit depth */
+    uInt *,                     /* distance desired/actual bit depth */
+    inflate_huft **,            /* literal/length tree result */
+    inflate_huft **,            /* distance tree result */
+    inflate_huft *,             /* space for trees */
+    z_streamp);                 /* for memory allocation */
+
+#endif /* _INFTREES_H */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/infutil.c ../mkvmlinuz-33+nmu1/boot/infutil.c
--- ../mkvmlinuz-33+nmu1.old/boot/infutil.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/infutil.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,88 @@
+/* inflate_util.c -- data and routines common to blocks and codes
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+#include "zutil.h"
+#include "infblock.h"
+#include "inftrees.h"
+#include "infcodes.h"
+#include "infutil.h"
+
+struct inflate_codes_state;
+
+/* And'ing with mask[n] masks the lower n bits */
+uInt zlib_inflate_mask[17] = {
+    0x0000,
+    0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
+    0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
+};
+
+
+/* copy as much as possible from the sliding window to the output area */
+int zlib_inflate_flush(
+	inflate_blocks_statef *s,
+	z_streamp z,
+	int r
+)
+{
+  uInt n;
+  Byte *p;
+  Byte *q;
+
+  /* local copies of source and destination pointers */
+  p = z->next_out;
+  q = s->read;
+
+  /* compute number of bytes to copy as far as end of window */
+  n = (uInt)((q <= s->write ? s->write : s->end) - q);
+  if (n > z->avail_out) n = z->avail_out;
+  if (n && r == Z_BUF_ERROR) r = Z_OK;
+
+  /* update counters */
+  z->avail_out -= n;
+  z->total_out += n;
+
+  /* update check information */
+  if (s->checkfn != NULL)
+    z->adler = s->check = (*s->checkfn)(s->check, q, n);
+
+  /* copy as far as end of window */
+  memcpy(p, q, n);
+  p += n;
+  q += n;
+
+  /* see if more to copy at beginning of window */
+  if (q == s->end)
+  {
+    /* wrap pointers */
+    q = s->window;
+    if (s->write == s->end)
+      s->write = s->window;
+
+    /* compute bytes to copy */
+    n = (uInt)(s->write - q);
+    if (n > z->avail_out) n = z->avail_out;
+    if (n && r == Z_BUF_ERROR) r = Z_OK;
+
+    /* update counters */
+    z->avail_out -= n;
+    z->total_out += n;
+
+    /* update check information */
+    if (s->checkfn != NULL)
+      z->adler = s->check = (*s->checkfn)(s->check, q, n);
+
+    /* copy */
+    memcpy(p, q, n);
+    p += n;
+    q += n;
+  }
+
+  /* update pointers */
+  z->next_out = p;
+  s->read = q;
+
+  /* done */
+  return r;
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/infutil.h ../mkvmlinuz-33+nmu1/boot/infutil.h
--- ../mkvmlinuz-33+nmu1.old/boot/infutil.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/infutil.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,197 @@
+/* infutil.h -- types and macros common to blocks and codes
+ * Copyright (C) 1995-1998 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+#ifndef _INFUTIL_H
+#define _INFUTIL_H
+
+#include "zconf.h"
+#include "inftrees.h"
+#include "infcodes.h"
+
+typedef enum {
+      TYPE,     /* get type bits (3, including end bit) */
+      LENS,     /* get lengths for stored */
+      STORED,   /* processing stored block */
+      TABLE,    /* get table lengths */
+      BTREE,    /* get bit lengths tree for a dynamic block */
+      DTREE,    /* get length, distance trees for a dynamic block */
+      CODES,    /* processing fixed or dynamic block */
+      DRY,      /* output remaining window bytes */
+      B_DONE,   /* finished last block, done */
+      B_BAD}    /* got a data error--stuck here */
+inflate_block_mode;
+
+/* inflate blocks semi-private state */
+struct inflate_blocks_state {
+
+  /* mode */
+  inflate_block_mode  mode;     /* current inflate_block mode */
+
+  /* mode dependent information */
+  union {
+    uInt left;          /* if STORED, bytes left to copy */
+    struct {
+      uInt table;               /* table lengths (14 bits) */
+      uInt index;               /* index into blens (or border) */
+      uInt *blens;              /* bit lengths of codes */
+      uInt bb;                  /* bit length tree depth */
+      inflate_huft *tb;         /* bit length decoding tree */
+    } trees;            /* if DTREE, decoding info for trees */
+    struct {
+      inflate_codes_statef 
+         *codes;
+    } decode;           /* if CODES, current state */
+  } sub;                /* submode */
+  uInt last;            /* true if this block is the last block */
+
+  /* mode independent information */
+  uInt bitk;            /* bits in bit buffer */
+  uLong bitb;           /* bit buffer */
+  inflate_huft *hufts;  /* single malloc for tree space */
+  Byte *window;         /* sliding window */
+  Byte *end;            /* one byte after sliding window */
+  Byte *read;           /* window read pointer */
+  Byte *write;          /* window write pointer */
+  check_func checkfn;   /* check function */
+  uLong check;          /* check on output */
+
+};
+
+
+/* defines for inflate input/output */
+/*   update pointers and return */
+#define UPDBITS {s->bitb=b;s->bitk=k;}
+#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
+#define UPDOUT {s->write=q;}
+#define UPDATE {UPDBITS UPDIN UPDOUT}
+#define LEAVE {UPDATE return zlib_inflate_flush(s,z,r);}
+/*   get bytes and bits */
+#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
+#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
+#define NEXTBYTE (n--,*p++)
+#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
+#define DUMPBITS(j) {b>>=(j);k-=(j);}
+/*   output bytes */
+#define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
+#define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
+#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
+#define FLUSH {UPDOUT r=zlib_inflate_flush(s,z,r); LOADOUT}
+#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
+#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
+/*   load local pointers */
+#define LOAD {LOADIN LOADOUT}
+
+/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
+extern uInt zlib_inflate_mask[17];
+
+/* copy as much as possible from the sliding window to the output area */
+extern int zlib_inflate_flush (
+    inflate_blocks_statef *,
+    z_streamp ,
+    int);
+
+/* inflate private state */
+typedef enum {
+      METHOD,   /* waiting for method byte */
+      FLAG,     /* waiting for flag byte */
+      DICT4,    /* four dictionary check bytes to go */
+      DICT3,    /* three dictionary check bytes to go */
+      DICT2,    /* two dictionary check bytes to go */
+      DICT1,    /* one dictionary check byte to go */
+      DICT0,    /* waiting for inflateSetDictionary */
+      BLOCKS,   /* decompressing blocks */
+      CHECK4,   /* four check bytes to go */
+      CHECK3,   /* three check bytes to go */
+      CHECK2,   /* two check bytes to go */
+      CHECK1,   /* one check byte to go */
+      I_DONE,   /* finished check, done */
+      I_BAD}    /* got an error--stay here */
+inflate_mode;
+
+struct internal_state {
+
+  /* mode */
+  inflate_mode  mode;   /* current inflate mode */
+
+  /* mode dependent information */
+  union {
+    uInt method;        /* if FLAGS, method byte */
+    struct {
+      uLong was;                /* computed check value */
+      uLong need;               /* stream check value */
+    } check;            /* if CHECK, check values to compare */
+    uInt marker;        /* if BAD, inflateSync's marker bytes count */
+  } sub;        /* submode */
+
+  /* mode independent information */
+  int  nowrap;          /* flag for no wrapper */
+  uInt wbits;           /* log2(window size)  (8..15, defaults to 15) */
+  inflate_blocks_statef 
+    *blocks;            /* current inflate_blocks state */
+
+};
+
+/* inflate codes private state */
+typedef enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
+      START,    /* x: set up for LEN */
+      LEN,      /* i: get length/literal/eob next */
+      LENEXT,   /* i: getting length extra (have base) */
+      DIST,     /* i: get distance next */
+      DISTEXT,  /* i: getting distance extra */
+      COPY,     /* o: copying bytes in window, waiting for space */
+      LIT,      /* o: got literal, waiting for output space */
+      WASH,     /* o: got eob, possibly still output waiting */
+      END,      /* x: got eob and all data flushed */
+      BADCODE}  /* x: got error */
+inflate_codes_mode;
+
+struct inflate_codes_state {
+
+  /* mode */
+  inflate_codes_mode mode;      /* current inflate_codes mode */
+
+  /* mode dependent information */
+  uInt len;
+  union {
+    struct {
+      inflate_huft *tree;       /* pointer into tree */
+      uInt need;                /* bits needed */
+    } code;             /* if LEN or DIST, where in tree */
+    uInt lit;           /* if LIT, literal */
+    struct {
+      uInt get;                 /* bits to get for extra */
+      uInt dist;                /* distance back to copy from */
+    } copy;             /* if EXT or COPY, where and how much */
+  } sub;                /* submode */
+
+  /* mode independent information */
+  Byte lbits;           /* ltree bits decoded per branch */
+  Byte dbits;           /* dtree bits decoder per branch */
+  inflate_huft *ltree;          /* literal/length/eob tree */
+  inflate_huft *dtree;          /* distance tree */
+
+};
+
+/* memory allocation for inflation */
+
+struct inflate_workspace {
+	inflate_codes_statef working_state;
+	struct inflate_blocks_state working_blocks_state;
+	struct internal_state internal_state;
+	unsigned int tree_work_area_1[19];
+	unsigned int tree_work_area_2[288];
+	unsigned working_blens[258 + 0x1f + 0x1f];
+	inflate_huft working_hufts[MANY];
+	unsigned char working_window[1 << MAX_WBITS];
+};
+
+#define WS(z) ((struct inflate_workspace *)(z->workspace))
+
+#endif
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/install.sh ../mkvmlinuz-33+nmu1/boot/install.sh
--- ../mkvmlinuz-33+nmu1.old/boot/install.sh	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/install.sh	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# This file is subject to the terms and conditions of the GNU General Public
+# License.  See the file "COPYING" in the main directory of this archive
+# for more details.
+#
+# Copyright (C) 1995 by Linus Torvalds
+#
+# Blatantly stolen from in arch/i386/boot/install.sh by Dave Hansen 
+#
+# "make install" script for ppc64 architecture
+#
+# Arguments:
+#   $1 - kernel version
+#   $2 - kernel image file
+#   $3 - kernel map file
+#   $4 - default install path (blank if root directory)
+#   $5 - kernel boot file, the zImage
+#
+
+# User may have a custom install script
+
+if [ -x ~/bin/${CROSS_COMPILE}installkernel ]; then exec ~/bin/${CROSS_COMPILE}installkernel "$@"; fi
+if [ -x /sbin/${CROSS_COMPILE}installkernel ]; then exec /sbin/${CROSS_COMPILE}installkernel "$@"; fi
+
+# Default install
+
+# this should work for both the pSeries zImage and the iSeries vmlinux.sm
+image_name=`basename $2`
+
+if [ -f $4/$image_name ]; then
+	mv $4/$image_name $4/$image_name.old
+fi
+
+if [ -f $4/System.map ]; then
+	mv $4/System.map $4/System.old
+fi
+
+cat $2 > $4/$image_name
+cp $3 $4/System.map
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/main.c ../mkvmlinuz-33+nmu1/boot/main.c
--- ../mkvmlinuz-33+nmu1.old/boot/main.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/main.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,319 @@
+/*
+ * Copyright (C) Paul Mackerras 1997.
+ *
+ * Updates for PPC64 by Todd Inglett, Dave Engebretsen & Peter Bergner.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#include <stdarg.h>
+#include <stddef.h>
+#include "elf.h"
+#include "page.h"
+#include "string.h"
+#include "stdio.h"
+#include "prom.h"
+#include "zlib.h"
+
+extern void flush_cache(void *, unsigned long);
+
+
+/* Value picked to match that used by yaboot */
+#define PROG_START	0x01400000	/* only used on 64-bit systems */
+#define RAM_END		(512<<20)	/* Fixme: use OF */
+#define	ONE_MB		0x100000
+
+extern char _start[];
+extern char __bss_start[];
+extern char _end[];
+extern char _vmlinux_start[];
+extern char _vmlinux_end[];
+extern char _initrd_start[];
+extern char _initrd_end[];
+
+struct addr_range {
+	unsigned long addr;
+	unsigned long size;
+	unsigned long memsize;
+};
+static struct addr_range vmlinux;
+static struct addr_range vmlinuz;
+static struct addr_range initrd;
+
+static unsigned long elfoffset;
+
+static char scratch[46912];	/* scratch space for gunzip, from zlib_inflate_workspacesize() */
+static char elfheader[256];
+
+
+typedef void (*kernel_entry_t)( unsigned long,
+                                unsigned long,
+                                void *,
+				void *);
+
+
+#undef DEBUG
+
+static unsigned long claim_base;
+
+#define HEAD_CRC	2
+#define EXTRA_FIELD	4
+#define ORIG_NAME	8
+#define COMMENT		0x10
+#define RESERVED	0xe0
+
+static void gunzip(void *dst, int dstlen, unsigned char *src, int *lenp)
+{
+	z_stream s;
+	int r, i, flags;
+
+	/* skip header */
+	i = 10;
+	flags = src[3];
+	if (src[2] != Z_DEFLATED || (flags & RESERVED) != 0) {
+		printf("bad gzipped data\n\r");
+		exit();
+	}
+	if ((flags & EXTRA_FIELD) != 0)
+		i = 12 + src[10] + (src[11] << 8);
+	if ((flags & ORIG_NAME) != 0)
+		while (src[i++] != 0)
+			;
+	if ((flags & COMMENT) != 0)
+		while (src[i++] != 0)
+			;
+	if ((flags & HEAD_CRC) != 0)
+		i += 2;
+	if (i >= *lenp) {
+		printf("gunzip: ran out of data in header\n\r");
+		exit();
+	}
+
+	if (zlib_inflate_workspacesize() > sizeof(scratch)) {
+		printf("gunzip needs more mem\n");
+		exit();
+	}
+	memset(&s, 0, sizeof(s));
+	s.workspace = scratch;
+	r = zlib_inflateInit2(&s, -MAX_WBITS);
+	if (r != Z_OK) {
+		printf("inflateInit2 returned %d\n\r", r);
+		exit();
+	}
+	s.next_in = src + i;
+	s.avail_in = *lenp - i;
+	s.next_out = dst;
+	s.avail_out = dstlen;
+	r = zlib_inflate(&s, Z_FULL_FLUSH);
+	if (r != Z_OK && r != Z_STREAM_END) {
+		printf("inflate returned %d msg: %s\n\r", r, s.msg);
+		exit();
+	}
+	*lenp = s.next_out - (unsigned char *) dst;
+	zlib_inflateEnd(&s);
+}
+
+static unsigned long try_claim(unsigned long size)
+{
+	unsigned long addr = 0;
+
+	for(; claim_base < RAM_END; claim_base += ONE_MB) {
+#ifdef DEBUG
+		printf("    trying: 0x%08lx\n\r", claim_base);
+#endif
+		addr = (unsigned long)claim(claim_base, size, 0);
+		if ((void *)addr != (void *)-1)
+			break;
+	}
+	if (addr == 0)
+		return 0;
+	claim_base = PAGE_ALIGN(claim_base + size);
+	return addr;
+}
+
+static int is_elf64(void *hdr)
+{
+	Elf64_Ehdr *elf64 = hdr;
+	Elf64_Phdr *elf64ph;
+	unsigned int i;
+
+	if (!(elf64->e_ident[EI_MAG0]  == ELFMAG0	&&
+	      elf64->e_ident[EI_MAG1]  == ELFMAG1	&&
+	      elf64->e_ident[EI_MAG2]  == ELFMAG2	&&
+	      elf64->e_ident[EI_MAG3]  == ELFMAG3	&&
+	      elf64->e_ident[EI_CLASS] == ELFCLASS64	&&
+	      elf64->e_ident[EI_DATA]  == ELFDATA2MSB	&&
+	      elf64->e_type            == ET_EXEC	&&
+	      elf64->e_machine         == EM_PPC64))
+		return 0;
+
+	elf64ph = (Elf64_Phdr *)((unsigned long)elf64 +
+				 (unsigned long)elf64->e_phoff);
+	for (i = 0; i < (unsigned int)elf64->e_phnum; i++, elf64ph++)
+		if (elf64ph->p_type == PT_LOAD)
+			break;
+	if (i >= (unsigned int)elf64->e_phnum)
+		return 0;
+
+	elfoffset = (unsigned long)elf64ph->p_offset;
+	vmlinux.size = (unsigned long)elf64ph->p_filesz + elfoffset;
+	vmlinux.memsize = (unsigned long)elf64ph->p_memsz + elfoffset;
+
+#if defined(PROG_START)
+	/*
+	 * Maintain a "magic" minimum address. This keeps some older
+	 * firmware platforms running.
+	 */
+
+	if (claim_base < PROG_START)
+		claim_base = PROG_START;
+#endif
+
+	return 1;
+}
+
+static int is_elf32(void *hdr)
+{
+	Elf32_Ehdr *elf32 = hdr;
+	Elf32_Phdr *elf32ph;
+	unsigned int i;
+
+	if (!(elf32->e_ident[EI_MAG0]  == ELFMAG0	&&
+	      elf32->e_ident[EI_MAG1]  == ELFMAG1	&&
+	      elf32->e_ident[EI_MAG2]  == ELFMAG2	&&
+	      elf32->e_ident[EI_MAG3]  == ELFMAG3	&&
+	      elf32->e_ident[EI_CLASS] == ELFCLASS32	&&
+	      elf32->e_ident[EI_DATA]  == ELFDATA2MSB	&&
+	      elf32->e_type            == ET_EXEC	&&
+	      elf32->e_machine         == EM_PPC))
+		return 0;
+
+	elf32 = (Elf32_Ehdr *)elfheader;
+	elf32ph = (Elf32_Phdr *) ((unsigned long)elf32 + elf32->e_phoff);
+	for (i = 0; i < elf32->e_phnum; i++, elf32ph++)
+		if (elf32ph->p_type == PT_LOAD)
+			break;
+	if (i >= elf32->e_phnum)
+		return 0;
+
+	elfoffset = elf32ph->p_offset;
+	vmlinux.size = elf32ph->p_filesz + elf32ph->p_offset;
+	vmlinux.memsize = elf32ph->p_memsz + elf32ph->p_offset;
+	return 1;
+}
+
+void start(unsigned long a1, unsigned long a2, void *promptr, void *sp)
+{
+	int len;
+	kernel_entry_t kernel_entry;
+
+	memset(__bss_start, 0, _end - __bss_start);
+
+	prom = (int (*)(void *)) promptr;
+	chosen_handle = finddevice("/chosen");
+	if (chosen_handle == (void *) -1)
+		exit();
+	if (getprop(chosen_handle, "stdout", &stdout, sizeof(stdout)) != 4)
+		exit();
+
+	printf("\n\rzImage starting: loaded at 0x%p (sp: 0x%p)\n\r", _start, sp);
+
+	/*
+	 * The first available claim_base must be above the end of the
+	 * the loaded kernel wrapper file (_start to _end includes the
+	 * initrd image if it is present) and rounded up to a nice
+	 * 1 MB boundary for good measure.
+	 */
+
+	claim_base = _ALIGN_UP((unsigned long)_end, ONE_MB);
+
+	vmlinuz.addr = (unsigned long)_vmlinux_start;
+	vmlinuz.size = (unsigned long)(_vmlinux_end - _vmlinux_start);
+
+	/* gunzip the ELF header of the kernel */
+	if (*(unsigned short *)vmlinuz.addr == 0x1f8b) {
+		len = vmlinuz.size;
+		gunzip(elfheader, sizeof(elfheader),
+				(unsigned char *)vmlinuz.addr, &len);
+	} else
+		memcpy(elfheader, (const void *)vmlinuz.addr, sizeof(elfheader));
+
+	if (!is_elf64(elfheader) && !is_elf32(elfheader)) {
+		printf("Error: not a valid PPC32 or PPC64 ELF file!\n\r");
+		exit();
+	}
+
+	/* We need to claim the memsize plus the file offset since gzip
+	 * will expand the header (file offset), then the kernel, then
+	 * possible rubbish we don't care about. But the kernel bss must
+	 * be claimed (it will be zero'd by the kernel itself)
+	 */
+	printf("Allocating 0x%lx bytes for kernel ...\n\r", vmlinux.memsize);
+	vmlinux.addr = try_claim(vmlinux.memsize);
+	if (vmlinux.addr == 0) {
+		printf("Can't allocate memory for kernel image !\n\r");
+		exit();
+	}
+
+	/*
+	 * Now we try to claim memory for the initrd (and copy it there)
+	 */
+	initrd.size = (unsigned long)(_initrd_end - _initrd_start);
+	initrd.memsize = initrd.size;
+	if ( initrd.size > 0 ) {
+		printf("Allocating 0x%lx bytes for initrd ...\n\r", initrd.size);
+		initrd.addr = try_claim(initrd.size);
+		if (initrd.addr == 0) {
+			printf("Can't allocate memory for initial ramdisk !\n\r");
+			exit();
+		}
+		a1 = initrd.addr;
+		a2 = initrd.size;
+		printf("initial ramdisk moving 0x%lx <- 0x%lx (0x%lx bytes)\n\r",
+		       initrd.addr, (unsigned long)_initrd_start, initrd.size);
+		memmove((void *)initrd.addr, (void *)_initrd_start, initrd.size);
+		printf("initrd head: 0x%lx\n\r", *((unsigned long *)initrd.addr));
+	}
+
+	/* Eventually gunzip the kernel */
+	if (*(unsigned short *)vmlinuz.addr == 0x1f8b) {
+		printf("gunzipping (0x%lx <- 0x%lx:0x%0lx)...",
+		       vmlinux.addr, vmlinuz.addr, vmlinuz.addr+vmlinuz.size);
+		len = vmlinuz.size;
+		gunzip((void *)vmlinux.addr, vmlinux.memsize,
+			(unsigned char *)vmlinuz.addr, &len);
+		printf("done 0x%lx bytes\n\r", len);
+	} else {
+		memmove((void *)vmlinux.addr,(void *)vmlinuz.addr,vmlinuz.size);
+	}
+
+	/* Skip over the ELF header */
+#ifdef DEBUG
+	printf("... skipping 0x%lx bytes of ELF header\n\r",
+			elfoffset);
+#endif
+	vmlinux.addr += elfoffset;
+
+	flush_cache((void *)vmlinux.addr, vmlinux.size);
+
+	kernel_entry = (kernel_entry_t)vmlinux.addr;
+#ifdef DEBUG
+	printf( "kernel:\n\r"
+		"        entry addr = 0x%lx\n\r"
+		"        a1         = 0x%lx,\n\r"
+		"        a2         = 0x%lx,\n\r"
+		"        prom       = 0x%lx,\n\r"
+		"        bi_recs    = 0x%lx,\n\r",
+		(unsigned long)kernel_entry, a1, a2,
+		(unsigned long)prom, NULL);
+#endif
+
+	kernel_entry(a1, a2, prom, NULL);
+
+	printf("Error: Linux kernel returned to zImage bootloader!\n\r");
+
+	exit();
+}
+
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/page.h ../mkvmlinuz-33+nmu1/boot/page.h
--- ../mkvmlinuz-33+nmu1.old/boot/page.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/page.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,34 @@
+#ifndef _PPC_BOOT_PAGE_H
+#define _PPC_BOOT_PAGE_H
+/*
+ * Copyright (C) 2001 PPC64 Team, IBM Corp
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifdef __ASSEMBLY__
+#define ASM_CONST(x) x
+#else
+#define __ASM_CONST(x) x##UL
+#define ASM_CONST(x) __ASM_CONST(x)
+#endif
+
+/* PAGE_SHIFT determines the page size */
+#define PAGE_SHIFT	12
+#define PAGE_SIZE	(ASM_CONST(1) << PAGE_SHIFT)
+#define PAGE_MASK	(~(PAGE_SIZE-1))
+
+/* align addr on a size boundary - adjust address up/down if needed */
+#define _ALIGN_UP(addr,size)	(((addr)+((size)-1))&(~((size)-1)))
+#define _ALIGN_DOWN(addr,size)	((addr)&(~((size)-1)))
+
+/* align addr on a size boundary - adjust address up if needed */
+#define _ALIGN(addr,size)     _ALIGN_UP(addr,size)
+
+/* to align the pointer to the (next) page boundary */
+#define PAGE_ALIGN(addr)	_ALIGN(addr, PAGE_SIZE)
+
+#endif				/* _PPC_BOOT_PAGE_H */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/ppc_asm.h ../mkvmlinuz-33+nmu1/boot/ppc_asm.h
--- ../mkvmlinuz-33+nmu1.old/boot/ppc_asm.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/ppc_asm.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,62 @@
+#ifndef _PPC64_PPC_ASM_H
+#define _PPC64_PPC_ASM_H
+/*
+ *
+ * Definitions used by various bits of low-level assembly code on PowerPC.
+ *
+ * Copyright (C) 1995-1999 Gary Thomas, Paul Mackerras, Cort Dougan.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version
+ *  2 of the License, or (at your option) any later version.
+ */
+
+/* Condition Register Bit Fields */
+
+#define	cr0	0
+#define	cr1	1
+#define	cr2	2
+#define	cr3	3
+#define	cr4	4
+#define	cr5	5
+#define	cr6	6
+#define	cr7	7
+
+
+/* General Purpose Registers (GPRs) */
+
+#define	r0	0
+#define	r1	1
+#define	r2	2
+#define	r3	3
+#define	r4	4
+#define	r5	5
+#define	r6	6
+#define	r7	7
+#define	r8	8
+#define	r9	9
+#define	r10	10
+#define	r11	11
+#define	r12	12
+#define	r13	13
+#define	r14	14
+#define	r15	15
+#define	r16	16
+#define	r17	17
+#define	r18	18
+#define	r19	19
+#define	r20	20
+#define	r21	21
+#define	r22	22
+#define	r23	23
+#define	r24	24
+#define	r25	25
+#define	r26	26
+#define	r27	27
+#define	r28	28
+#define	r29	29
+#define	r30	30
+#define	r31	31
+
+#endif /* _PPC64_PPC_ASM_H */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/prom.c ../mkvmlinuz-33+nmu1/boot/prom.c
--- ../mkvmlinuz-33+nmu1.old/boot/prom.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/prom.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) Paul Mackerras 1997.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#include <stdarg.h>
+#include <stddef.h>
+#include "string.h"
+#include "stdio.h"
+#include "prom.h"
+
+int (*prom)(void *);
+phandle chosen_handle;
+ihandle stdout;
+
+int call_prom(const char *service, int nargs, int nret, ...)
+{
+	int i;
+	struct prom_args {
+		const char *service;
+		int nargs;
+		int nret;
+		unsigned int args[12];
+	} args;
+	va_list list;
+
+	args.service = service;
+	args.nargs = nargs;
+	args.nret = nret;
+
+	va_start(list, nret);
+	for (i = 0; i < nargs; i++)
+		args.args[i] = va_arg(list, unsigned int);
+	va_end(list);
+
+	for (i = 0; i < nret; i++)
+		args.args[nargs+i] = 0;
+
+	if (prom(&args) < 0)
+		return -1;
+
+	return (nret > 0)? args.args[nargs]: 0;
+}
+
+int call_prom_ret(const char *service, int nargs, int nret,
+		  unsigned int *rets, ...)
+{
+	int i;
+	struct prom_args {
+		const char *service;
+		int nargs;
+		int nret;
+		unsigned int args[12];
+	} args;
+	va_list list;
+
+	args.service = service;
+	args.nargs = nargs;
+	args.nret = nret;
+
+	va_start(list, rets);
+	for (i = 0; i < nargs; i++)
+		args.args[i] = va_arg(list, unsigned int);
+	va_end(list);
+
+	for (i = 0; i < nret; i++)
+		args.args[nargs+i] = 0;
+
+	if (prom(&args) < 0)
+		return -1;
+
+	if (rets != (void *) 0)
+		for (i = 1; i < nret; ++i)
+			rets[i-1] = args.args[nargs+i];
+
+	return (nret > 0)? args.args[nargs]: 0;
+}
+
+int write(void *handle, void *ptr, int nb)
+{
+	return call_prom("write", 3, 1, handle, ptr, nb);
+}
+
+/*
+ * Older OF's require that when claiming a specific range of addresses,
+ * we claim the physical space in the /memory node and the virtual
+ * space in the chosen mmu node, and then do a map operation to
+ * map virtual to physical.
+ */
+static int need_map = -1;
+static ihandle chosen_mmu;
+static phandle memory;
+
+/* returns true if s2 is a prefix of s1 */
+static int string_match(const char *s1, const char *s2)
+{
+	for (; *s2; ++s2)
+		if (*s1++ != *s2)
+			return 0;
+	return 1;
+}
+
+static int check_of_version(void)
+{
+	phandle oprom, chosen;
+	char version[64];
+
+	oprom = finddevice("/openprom");
+	if (oprom == (phandle) -1)
+		return 0;
+	if (getprop(oprom, "model", version, sizeof(version)) <= 0)
+		return 0;
+	version[sizeof(version)-1] = 0;
+	printf("OF version = '%s'\r\n", version);
+	if (!string_match(version, "Open Firmware, 1.")
+	    && !string_match(version, "FirmWorks,3."))
+		return 0;
+	chosen = finddevice("/chosen");
+	if (chosen == (phandle) -1) {
+		chosen = finddevice("/chosen@0");
+		if (chosen == (phandle) -1) {
+			printf("no chosen\n");
+			return 0;
+		}
+	}
+	if (getprop(chosen, "mmu", &chosen_mmu, sizeof(chosen_mmu)) <= 0) {
+		printf("no mmu\n");
+		return 0;
+	}
+	memory = (ihandle) call_prom("open", 1, 1, "/memory");
+	if (memory == (ihandle) -1) {
+		memory = (ihandle) call_prom("open", 1, 1, "/memory@0");
+		if (memory == (ihandle) -1) {
+			printf("no memory node\n");
+			return 0;
+		}
+	}
+	printf("old OF detected\r\n");
+	return 1;
+}
+
+void *claim(unsigned long virt, unsigned long size, unsigned long align)
+{
+	int ret;
+	unsigned int result;
+
+	if (need_map < 0)
+		need_map = check_of_version();
+	if (align || !need_map)
+		return (void *) call_prom("claim", 3, 1, virt, size, align);
+	
+	ret = call_prom_ret("call-method", 5, 2, &result, "claim", memory,
+			    align, size, virt);
+	if (ret != 0 || result == -1)
+		return (void *) -1;
+	ret = call_prom_ret("call-method", 5, 2, &result, "claim", chosen_mmu,
+			    align, size, virt);
+	/* 0x12 == coherent + read/write */
+	ret = call_prom("call-method", 6, 1, "map", chosen_mmu,
+			0x12, size, virt, virt);
+	return (void *) virt;
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/prom.h ../mkvmlinuz-33+nmu1/boot/prom.h
--- ../mkvmlinuz-33+nmu1.old/boot/prom.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/prom.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,34 @@
+#ifndef _PPC_BOOT_PROM_H_
+#define _PPC_BOOT_PROM_H_
+
+typedef void *phandle;
+typedef void *ihandle;
+
+extern int (*prom) (void *);
+extern phandle chosen_handle;
+extern ihandle stdout;
+
+int	call_prom(const char *service, int nargs, int nret, ...);
+int	call_prom_ret(const char *service, int nargs, int nret,
+		      unsigned int *rets, ...);
+
+extern int write(void *handle, void *ptr, int nb);
+extern void *claim(unsigned long virt, unsigned long size, unsigned long aln);
+
+static inline void exit(void)
+{
+	call_prom("exit", 0, 0);
+}
+
+static inline phandle finddevice(const char *name)
+{
+	return (phandle) call_prom("finddevice", 1, 1, name);
+}
+
+static inline int getprop(void *phandle, const char *name,
+			  void *buf, int buflen)
+{
+	return call_prom("getprop", 4, 1, phandle, name, buf, buflen);
+}
+
+#endif				/* _PPC_BOOT_PROM_H_ */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/rs6000.h ../mkvmlinuz-33+nmu1/boot/rs6000.h
--- ../mkvmlinuz-33+nmu1.old/boot/rs6000.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/rs6000.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,243 @@
+/* IBM RS/6000 "XCOFF" file definitions for BFD.
+   Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+   FIXME: Can someone provide a transliteration of this name into ASCII?
+   Using the following chars caused a compiler warning on HIUX (so I replaced
+   them with octal escapes), and isn't useful without an understanding of what
+   character set it is.
+   Written by Mimi Ph\373\364ng-Th\345o V\365 of IBM
+   and John Gilmore of Cygnus Support.  */
+
+/********************** FILE HEADER **********************/
+
+struct external_filehdr {
+	char f_magic[2];	/* magic number			*/
+	char f_nscns[2];	/* number of sections		*/
+	char f_timdat[4];	/* time & date stamp		*/
+	char f_symptr[4];	/* file pointer to symtab	*/
+	char f_nsyms[4];	/* number of symtab entries	*/
+	char f_opthdr[2];	/* sizeof(optional hdr)		*/
+	char f_flags[2];	/* flags			*/
+};
+
+        /* IBM RS/6000 */
+#define U802WRMAGIC     0730    /* writeable text segments **chh**      */
+#define U802ROMAGIC     0735    /* readonly sharable text segments      */
+#define U802TOCMAGIC    0737    /* readonly text segments and TOC       */
+
+#define BADMAG(x)	\
+	((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
+	 (x).f_magic != U802TOCMAGIC)
+
+#define	FILHDR	struct external_filehdr
+#define	FILHSZ	20
+
+
+/********************** AOUT "OPTIONAL HEADER" **********************/
+
+
+typedef struct
+{
+  unsigned char	magic[2];	/* type of file			*/
+  unsigned char	vstamp[2];	/* version stamp		*/
+  unsigned char	tsize[4];	/* text size in bytes, padded to FW bdry */
+  unsigned char	dsize[4];	/* initialized data "  "	*/
+  unsigned char	bsize[4];	/* uninitialized data "   "	*/
+  unsigned char	entry[4];	/* entry pt.			*/
+  unsigned char	text_start[4];	/* base of text used for this file */
+  unsigned char	data_start[4];	/* base of data used for this file */
+  unsigned char	o_toc[4];	/* address of TOC */
+  unsigned char	o_snentry[2];	/* section number of entry point */
+  unsigned char	o_sntext[2];	/* section number of .text section */
+  unsigned char	o_sndata[2];	/* section number of .data section */
+  unsigned char	o_sntoc[2];	/* section number of TOC */
+  unsigned char	o_snloader[2];	/* section number of .loader section */
+  unsigned char	o_snbss[2];	/* section number of .bss section */
+  unsigned char	o_algntext[2];	/* .text alignment */
+  unsigned char	o_algndata[2];	/* .data alignment */
+  unsigned char	o_modtype[2];	/* module type (??) */
+  unsigned char o_cputype[2];	/* cpu type */
+  unsigned char	o_maxstack[4];	/* max stack size (??) */
+  unsigned char o_maxdata[4];	/* max data size (??) */
+  unsigned char	o_resv2[12];	/* reserved */
+}
+AOUTHDR;
+
+#define AOUTSZ 72
+#define SMALL_AOUTSZ (28)
+#define AOUTHDRSZ 72
+
+#define	RS6K_AOUTHDR_OMAGIC	0x0107	/* old: text & data writeable */
+#define	RS6K_AOUTHDR_NMAGIC	0x0108	/* new: text r/o, data r/w */
+#define	RS6K_AOUTHDR_ZMAGIC	0x010B	/* paged: text r/o, both page-aligned */
+
+
+/********************** SECTION HEADER **********************/
+
+
+struct external_scnhdr {
+	char		s_name[8];	/* section name			*/
+	char		s_paddr[4];	/* physical address, aliased s_nlib */
+	char		s_vaddr[4];	/* virtual address		*/
+	char		s_size[4];	/* section size			*/
+	char		s_scnptr[4];	/* file ptr to raw data for section */
+	char		s_relptr[4];	/* file ptr to relocation	*/
+	char		s_lnnoptr[4];	/* file ptr to line numbers	*/
+	char		s_nreloc[2];	/* number of relocation entries	*/
+	char		s_nlnno[2];	/* number of line number entries*/
+	char		s_flags[4];	/* flags			*/
+};
+
+/*
+ * names of "special" sections
+ */
+#define _TEXT	".text"
+#define _DATA	".data"
+#define _BSS	".bss"
+#define _PAD	".pad"
+#define _LOADER	".loader"
+
+#define	SCNHDR	struct external_scnhdr
+#define	SCNHSZ	40
+
+/* XCOFF uses a special .loader section with type STYP_LOADER.  */
+#define STYP_LOADER 0x1000
+
+/* XCOFF uses a special .debug section with type STYP_DEBUG.  */
+#define STYP_DEBUG 0x2000
+
+/* XCOFF handles line number or relocation overflow by creating
+   another section header with STYP_OVRFLO set.  */
+#define STYP_OVRFLO 0x8000
+
+/********************** LINE NUMBERS **********************/
+
+/* 1 line number entry for every "breakpointable" source line in a section.
+ * Line numbers are grouped on a per function basis; first entry in a function
+ * grouping will have l_lnno = 0 and in place of physical address will be the
+ * symbol table index of the function name.
+ */
+struct external_lineno {
+	union {
+		char l_symndx[4];	/* function name symbol index, iff l_lnno == 0*/
+		char l_paddr[4];	/* (physical) address of line number	*/
+	} l_addr;
+	char l_lnno[2];	/* line number		*/
+};
+
+
+#define	LINENO	struct external_lineno
+#define	LINESZ	6
+
+
+/********************** SYMBOLS **********************/
+
+#define E_SYMNMLEN	8	/* # characters in a symbol name	*/
+#define E_FILNMLEN	14	/* # characters in a file name		*/
+#define E_DIMNUM	4	/* # array dimensions in auxiliary entry */
+
+struct external_syment
+{
+  union {
+    char e_name[E_SYMNMLEN];
+    struct {
+      char e_zeroes[4];
+      char e_offset[4];
+    } e;
+  } e;
+  char e_value[4];
+  char e_scnum[2];
+  char e_type[2];
+  char e_sclass[1];
+  char e_numaux[1];
+};
+
+
+
+#define N_BTMASK	(017)
+#define N_TMASK		(060)
+#define N_BTSHFT	(4)
+#define N_TSHIFT	(2)
+
+
+union external_auxent {
+	struct {
+		char x_tagndx[4];	/* str, un, or enum tag indx */
+		union {
+			struct {
+			    char  x_lnno[2]; /* declaration line number */
+			    char  x_size[2]; /* str/union/array size */
+			} x_lnsz;
+			char x_fsize[4];	/* size of function */
+		} x_misc;
+		union {
+			struct {		/* if ISFCN, tag, or .bb */
+			    char x_lnnoptr[4];	/* ptr to fcn line # */
+			    char x_endndx[4];	/* entry ndx past block end */
+			} x_fcn;
+			struct {		/* if ISARY, up to 4 dimen. */
+			    char x_dimen[E_DIMNUM][2];
+			} x_ary;
+		} x_fcnary;
+		char x_tvndx[2];		/* tv index */
+	} x_sym;
+
+	union {
+		char x_fname[E_FILNMLEN];
+		struct {
+			char x_zeroes[4];
+			char x_offset[4];
+		} x_n;
+	} x_file;
+
+	struct {
+		char x_scnlen[4];			/* section length */
+		char x_nreloc[2];	/* # relocation entries */
+		char x_nlinno[2];	/* # line numbers */
+	} x_scn;
+
+        struct {
+		char x_tvfill[4];	/* tv fill value */
+		char x_tvlen[2];	/* length of .tv */
+		char x_tvran[2][2];	/* tv range */
+	} x_tv;		/* info about .tv section (in auxent of symbol .tv)) */
+
+	struct {
+		unsigned char x_scnlen[4];
+		unsigned char x_parmhash[4];
+		unsigned char x_snhash[2];
+		unsigned char x_smtyp[1];
+		unsigned char x_smclas[1];
+		unsigned char x_stab[4];
+		unsigned char x_snstab[2];
+	} x_csect;
+
+};
+
+#define	SYMENT	struct external_syment
+#define	SYMESZ	18
+#define	AUXENT	union external_auxent
+#define	AUXESZ	18
+#define DBXMASK 0x80		/* for dbx storage mask */
+#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
+
+
+
+/********************** RELOCATION DIRECTIVES **********************/
+
+
+struct external_reloc {
+  char r_vaddr[4];
+  char r_symndx[4];
+  char r_size[1];
+  char r_type[1];
+};
+
+
+#define RELOC struct external_reloc
+#define RELSZ 10
+
+#define DEFAULT_DATA_SECTION_ALIGNMENT 4
+#define DEFAULT_BSS_SECTION_ALIGNMENT 4
+#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
+/* For new sections we havn't heard of before */
+#define DEFAULT_SECTION_ALIGNMENT 4
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/stdio.c ../mkvmlinuz-33+nmu1/boot/stdio.c
--- ../mkvmlinuz-33+nmu1.old/boot/stdio.c	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/stdio.c	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,325 @@
+/*
+ * Copyright (C) Paul Mackerras 1997.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#include <stdarg.h>
+#include <stddef.h>
+#include "string.h"
+#include "stdio.h"
+#include "prom.h"
+
+size_t strnlen(const char * s, size_t count)
+{
+	const char *sc;
+
+	for (sc = s; count-- && *sc != '\0'; ++sc)
+		/* nothing */;
+	return sc - s;
+}
+
+extern unsigned int __div64_32(unsigned long long *dividend,
+			       unsigned int divisor);
+
+/* The unnecessary pointer compare is there
+ * to check for type safety (n must be 64bit)
+ */
+# define do_div(n,base) ({						\
+	unsigned int __base = (base);					\
+	unsigned int __rem;						\
+	(void)(((typeof((n)) *)0) == ((unsigned long long *)0));	\
+	if (((n) >> 32) == 0) {						\
+		__rem = (unsigned int)(n) % __base;			\
+		(n) = (unsigned int)(n) / __base;			\
+	} else								\
+		__rem = __div64_32(&(n), __base);			\
+	__rem;								\
+ })
+
+static int skip_atoi(const char **s)
+{
+	int i, c;
+
+	for (i = 0; '0' <= (c = **s) && c <= '9'; ++*s)
+		i = i*10 + c - '0';
+	return i;
+}
+
+#define ZEROPAD	1		/* pad with zero */
+#define SIGN	2		/* unsigned/signed long */
+#define PLUS	4		/* show plus */
+#define SPACE	8		/* space if plus */
+#define LEFT	16		/* left justified */
+#define SPECIAL	32		/* 0x */
+#define LARGE	64		/* use 'ABCDEF' instead of 'abcdef' */
+
+static char * number(char * str, unsigned long long num, int base, int size, int precision, int type)
+{
+	char c,sign,tmp[66];
+	const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
+	int i;
+
+	if (type & LARGE)
+		digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+	if (type & LEFT)
+		type &= ~ZEROPAD;
+	if (base < 2 || base > 36)
+		return 0;
+	c = (type & ZEROPAD) ? '0' : ' ';
+	sign = 0;
+	if (type & SIGN) {
+		if ((signed long long)num < 0) {
+			sign = '-';
+			num = - (signed long long)num;
+			size--;
+		} else if (type & PLUS) {
+			sign = '+';
+			size--;
+		} else if (type & SPACE) {
+			sign = ' ';
+			size--;
+		}
+	}
+	if (type & SPECIAL) {
+		if (base == 16)
+			size -= 2;
+		else if (base == 8)
+			size--;
+	}
+	i = 0;
+	if (num == 0)
+		tmp[i++]='0';
+	else while (num != 0) {
+		tmp[i++] = digits[do_div(num, base)];
+	}
+	if (i > precision)
+		precision = i;
+	size -= precision;
+	if (!(type&(ZEROPAD+LEFT)))
+		while(size-->0)
+			*str++ = ' ';
+	if (sign)
+		*str++ = sign;
+	if (type & SPECIAL) {
+		if (base==8)
+			*str++ = '0';
+		else if (base==16) {
+			*str++ = '0';
+			*str++ = digits[33];
+		}
+	}
+	if (!(type & LEFT))
+		while (size-- > 0)
+			*str++ = c;
+	while (i < precision--)
+		*str++ = '0';
+	while (i-- > 0)
+		*str++ = tmp[i];
+	while (size-- > 0)
+		*str++ = ' ';
+	return str;
+}
+
+int vsprintf(char *buf, const char *fmt, va_list args)
+{
+	int len;
+	unsigned long long num;
+	int i, base;
+	char * str;
+	const char *s;
+
+	int flags;		/* flags to number() */
+
+	int field_width;	/* width of output field */
+	int precision;		/* min. # of digits for integers; max
+				   number of chars for from string */
+	int qualifier;		/* 'h', 'l', or 'L' for integer fields */
+	                        /* 'z' support added 23/7/1999 S.H.    */
+				/* 'z' changed to 'Z' --davidm 1/25/99 */
+
+	
+	for (str=buf ; *fmt ; ++fmt) {
+		if (*fmt != '%') {
+			*str++ = *fmt;
+			continue;
+		}
+			
+		/* process flags */
+		flags = 0;
+		repeat:
+			++fmt;		/* this also skips first '%' */
+			switch (*fmt) {
+				case '-': flags |= LEFT; goto repeat;
+				case '+': flags |= PLUS; goto repeat;
+				case ' ': flags |= SPACE; goto repeat;
+				case '#': flags |= SPECIAL; goto repeat;
+				case '0': flags |= ZEROPAD; goto repeat;
+				}
+		
+		/* get field width */
+		field_width = -1;
+		if ('0' <= *fmt && *fmt <= '9')
+			field_width = skip_atoi(&fmt);
+		else if (*fmt == '*') {
+			++fmt;
+			/* it's the next argument */
+			field_width = va_arg(args, int);
+			if (field_width < 0) {
+				field_width = -field_width;
+				flags |= LEFT;
+			}
+		}
+
+		/* get the precision */
+		precision = -1;
+		if (*fmt == '.') {
+			++fmt;	
+			if ('0' <= *fmt && *fmt <= '9')
+				precision = skip_atoi(&fmt);
+			else if (*fmt == '*') {
+				++fmt;
+				/* it's the next argument */
+				precision = va_arg(args, int);
+			}
+			if (precision < 0)
+				precision = 0;
+		}
+
+		/* get the conversion qualifier */
+		qualifier = -1;
+		if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt =='Z') {
+			qualifier = *fmt;
+			++fmt;
+		}
+
+		/* default base */
+		base = 10;
+
+		switch (*fmt) {
+		case 'c':
+			if (!(flags & LEFT))
+				while (--field_width > 0)
+					*str++ = ' ';
+			*str++ = (unsigned char) va_arg(args, int);
+			while (--field_width > 0)
+				*str++ = ' ';
+			continue;
+
+		case 's':
+			s = va_arg(args, char *);
+			if (!s)
+				s = "<NULL>";
+
+			len = strnlen(s, precision);
+
+			if (!(flags & LEFT))
+				while (len < field_width--)
+					*str++ = ' ';
+			for (i = 0; i < len; ++i)
+				*str++ = *s++;
+			while (len < field_width--)
+				*str++ = ' ';
+			continue;
+
+		case 'p':
+			if (field_width == -1) {
+				field_width = 2*sizeof(void *);
+				flags |= ZEROPAD;
+			}
+			str = number(str,
+				(unsigned long) va_arg(args, void *), 16,
+				field_width, precision, flags);
+			continue;
+
+
+		case 'n':
+			if (qualifier == 'l') {
+				long * ip = va_arg(args, long *);
+				*ip = (str - buf);
+			} else if (qualifier == 'Z') {
+				size_t * ip = va_arg(args, size_t *);
+				*ip = (str - buf);
+			} else {
+				int * ip = va_arg(args, int *);
+				*ip = (str - buf);
+			}
+			continue;
+
+		case '%':
+			*str++ = '%';
+			continue;
+
+		/* integer number formats - set up the flags and "break" */
+		case 'o':
+			base = 8;
+			break;
+
+		case 'X':
+			flags |= LARGE;
+		case 'x':
+			base = 16;
+			break;
+
+		case 'd':
+		case 'i':
+			flags |= SIGN;
+		case 'u':
+			break;
+
+		default:
+			*str++ = '%';
+			if (*fmt)
+				*str++ = *fmt;
+			else
+				--fmt;
+			continue;
+		}
+		if (qualifier == 'l') {
+			num = va_arg(args, unsigned long);
+			if (flags & SIGN)
+				num = (signed long) num;
+		} else if (qualifier == 'Z') {
+			num = va_arg(args, size_t);
+		} else if (qualifier == 'h') {
+			num = (unsigned short) va_arg(args, int);
+			if (flags & SIGN)
+				num = (signed short) num;
+		} else {
+			num = va_arg(args, unsigned int);
+			if (flags & SIGN)
+				num = (signed int) num;
+		}
+		str = number(str, num, base, field_width, precision, flags);
+	}
+	*str = '\0';
+	return str-buf;
+}
+
+int sprintf(char * buf, const char *fmt, ...)
+{
+	va_list args;
+	int i;
+
+	va_start(args, fmt);
+	i=vsprintf(buf,fmt,args);
+	va_end(args);
+	return i;
+}
+
+static char sprint_buf[1024];
+
+int
+printf(const char *fmt, ...)
+{
+	va_list args;
+	int n;
+
+	va_start(args, fmt);
+	n = vsprintf(sprint_buf, fmt, args);
+	va_end(args);
+	write(stdout, sprint_buf, n);
+	return n;
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/stdio.h ../mkvmlinuz-33+nmu1/boot/stdio.h
--- ../mkvmlinuz-33+nmu1.old/boot/stdio.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/stdio.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,10 @@
+#ifndef _PPC_BOOT_STDIO_H_
+#define _PPC_BOOT_STDIO_H_
+
+extern int printf(const char *fmt, ...);
+
+extern int sprintf(char *buf, const char *fmt, ...);
+
+extern int vsprintf(char *buf, const char *fmt, va_list args);
+
+#endif				/* _PPC_BOOT_STDIO_H_ */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/string.S ../mkvmlinuz-33+nmu1/boot/string.S
--- ../mkvmlinuz-33+nmu1.old/boot/string.S	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/string.S	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) Paul Mackerras 1997.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * NOTE: this code runs in 32 bit mode and is packaged as ELF32.
+ */
+
+#include "ppc_asm.h"
+
+	.text
+	.globl	strcpy
+strcpy:
+	addi	r5,r3,-1
+	addi	r4,r4,-1
+1:	lbzu	r0,1(r4)
+	cmpwi	0,r0,0
+	stbu	r0,1(r5)
+	bne	1b
+	blr
+
+	.globl	strncpy
+strncpy:
+	cmpwi	0,r5,0
+	beqlr
+	mtctr	r5
+	addi	r6,r3,-1
+	addi	r4,r4,-1
+1:	lbzu	r0,1(r4)
+	cmpwi	0,r0,0
+	stbu	r0,1(r6)
+	bdnzf	2,1b		/* dec ctr, branch if ctr != 0 && !cr0.eq */
+	blr
+
+	.globl	strcat
+strcat:
+	addi	r5,r3,-1
+	addi	r4,r4,-1
+1:	lbzu	r0,1(r5)
+	cmpwi	0,r0,0
+	bne	1b
+	addi	r5,r5,-1
+1:	lbzu	r0,1(r4)
+	cmpwi	0,r0,0
+	stbu	r0,1(r5)
+	bne	1b
+	blr
+
+	.globl	strcmp
+strcmp:
+	addi	r5,r3,-1
+	addi	r4,r4,-1
+1:	lbzu	r3,1(r5)
+	cmpwi	1,r3,0
+	lbzu	r0,1(r4)
+	subf.	r3,r0,r3
+	beqlr	1
+	beq	1b
+	blr
+
+	.globl	strlen
+strlen:
+	addi	r4,r3,-1
+1:	lbzu	r0,1(r4)
+	cmpwi	0,r0,0
+	bne	1b
+	subf	r3,r3,r4
+	blr
+
+	.globl	memset
+memset:
+	rlwimi	r4,r4,8,16,23
+	rlwimi	r4,r4,16,0,15
+	addi	r6,r3,-4
+	cmplwi	0,r5,4
+	blt	7f
+	stwu	r4,4(r6)
+	beqlr
+	andi.	r0,r6,3
+	add	r5,r0,r5
+	subf	r6,r0,r6
+	rlwinm	r0,r5,32-2,2,31
+	mtctr	r0
+	bdz	6f
+1:	stwu	r4,4(r6)
+	bdnz	1b
+6:	andi.	r5,r5,3
+7:	cmpwi	0,r5,0
+	beqlr
+	mtctr	r5
+	addi	r6,r6,3
+8:	stbu	r4,1(r6)
+	bdnz	8b
+	blr
+
+	.globl	memmove
+memmove:
+	cmplw	0,r3,r4
+	bgt	backwards_memcpy
+	/* fall through */
+
+	.globl	memcpy
+memcpy:
+	rlwinm.	r7,r5,32-3,3,31		/* r7 = r5 >> 3 */
+	addi	r6,r3,-4
+	addi	r4,r4,-4
+	beq	3f			/* if less than 8 bytes to do */
+	andi.	r0,r6,3			/* get dest word aligned */
+	mtctr	r7
+	bne	5f
+	andi.	r0,r4,3			/* check src word aligned too */
+	bne	3f
+1:	lwz	r7,4(r4)
+	lwzu	r8,8(r4)
+	stw	r7,4(r6)
+	stwu	r8,8(r6)
+	bdnz	1b
+	andi.	r5,r5,7
+2:	cmplwi	0,r5,4
+	blt	3f
+	lwzu	r0,4(r4)
+	addi	r5,r5,-4
+	stwu	r0,4(r6)
+3:	cmpwi	0,r5,0
+	beqlr
+	mtctr	r5
+	addi	r4,r4,3
+	addi	r6,r6,3
+4:	lbzu	r0,1(r4)
+	stbu	r0,1(r6)
+	bdnz	4b
+	blr
+5:	subfic	r0,r0,4
+	cmpw	cr1,r0,r5
+	add	r7,r0,r4
+	andi.	r7,r7,3			/* will source be word-aligned too? */
+	ble	cr1,3b
+	bne	3b			/* do byte-by-byte if not */
+	mtctr	r0
+6:	lbz	r7,4(r4)
+	addi	r4,r4,1
+	stb	r7,4(r6)
+	addi	r6,r6,1
+	bdnz	6b
+	subf	r5,r0,r5
+	rlwinm.	r7,r5,32-3,3,31
+	beq	2b
+	mtctr	r7
+	b	1b
+
+	.globl	backwards_memcpy
+backwards_memcpy:
+	rlwinm.	r7,r5,32-3,3,31		/* r7 = r5 >> 3 */
+	add	r6,r3,r5
+	add	r4,r4,r5
+	beq	3f
+	andi.	r0,r6,3
+	mtctr	r7
+	bne	5f
+	andi.	r0,r4,3
+	bne	3f
+1:	lwz	r7,-4(r4)
+	lwzu	r8,-8(r4)
+	stw	r7,-4(r6)
+	stwu	r8,-8(r6)
+	bdnz	1b
+	andi.	r5,r5,7
+2:	cmplwi	0,r5,4
+	blt	3f
+	lwzu	r0,-4(r4)
+	subi	r5,r5,4
+	stwu	r0,-4(r6)
+3:	cmpwi	0,r5,0
+	beqlr
+	mtctr	r5
+4:	lbzu	r0,-1(r4)
+	stbu	r0,-1(r6)
+	bdnz	4b
+	blr
+5:	cmpw	cr1,r0,r5
+	subf	r7,r0,r4
+	andi.	r7,r7,3
+	ble	cr1,3b
+	bne	3b
+	mtctr	r0
+6:	lbzu	r7,-1(r4)
+	stbu	r7,-1(r6)
+	bdnz	6b
+	subf	r5,r0,r5
+	rlwinm.	r7,r5,32-3,3,31
+	beq	2b
+	mtctr	r7
+	b	1b
+
+	.globl	memcmp
+memcmp:
+	cmpwi	0,r5,0
+	blelr
+	mtctr	r5
+	addi	r6,r3,-1
+	addi	r4,r4,-1
+1:	lbzu	r3,1(r6)
+	lbzu	r0,1(r4)
+	subf.	r3,r0,r3
+	bdnzt	2,1b
+	blr
+
+
+/*
+ * Flush the dcache and invalidate the icache for a range of addresses.
+ *
+ * flush_cache(addr, len)
+ */
+	.global	flush_cache
+flush_cache:
+	addi	4,4,0x1f	/* len = (len + 0x1f) / 0x20 */
+	rlwinm.	4,4,27,5,31
+	mtctr	4
+	beqlr
+1:	dcbf	0,3
+	icbi	0,3
+	addi	3,3,0x20
+	bdnz	1b
+	sync
+	isync
+	blr
+
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/string.h ../mkvmlinuz-33+nmu1/boot/string.h
--- ../mkvmlinuz-33+nmu1.old/boot/string.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/string.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,17 @@
+#ifndef _PPC_BOOT_STRING_H_
+#define _PPC_BOOT_STRING_H_
+#include <stddef.h>
+
+extern char *strcpy(char *dest, const char *src);
+extern char *strncpy(char *dest, const char *src, size_t n);
+extern char *strcat(char *dest, const char *src);
+extern int strcmp(const char *s1, const char *s2);
+extern size_t strlen(const char *s);
+extern size_t strnlen(const char *s, size_t count);
+
+extern void *memset(void *s, int c, size_t n);
+extern void *memmove(void *dest, const void *src, unsigned long n);
+extern void *memcpy(void *dest, const void *src, unsigned long n);
+extern int memcmp(const void *s1, const void *s2, size_t n);
+
+#endif	/* _PPC_BOOT_STRING_H_ */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/zImage.lds ../mkvmlinuz-33+nmu1/boot/zImage.lds
--- ../mkvmlinuz-33+nmu1.old/boot/zImage.lds	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/zImage.lds	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,46 @@
+OUTPUT_ARCH(powerpc:common)
+ENTRY(_zimage_start)
+SECTIONS
+{
+  . = (4*1024*1024);
+  _start = .;
+  .text      :
+  {
+    *(.text)
+    *(.fixup)
+  }
+  _etext = .;
+  . = ALIGN(4096);
+  .data    :
+  {
+    *(.rodata*)
+    *(.data*)
+    *(.sdata*)
+    __got2_start = .;
+    *(.got2)
+    __got2_end = .;
+  }
+
+  . = ALIGN(4096);
+  _vmlinux_start =  .;
+  .kernel:vmlinux.strip : { *(.kernel:vmlinux.strip) }
+  _vmlinux_end =  .;
+
+  . = ALIGN(4096);
+  _initrd_start =  .;
+  .kernel:initrd : { *(.kernel:initrd) }
+  _initrd_end =  .;
+
+  . = ALIGN(4096);
+  _edata  =  .;
+
+  . = ALIGN(4096);
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss)
+   *(.bss)
+  }
+  . = ALIGN(4096);
+  _end = . ;
+}
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/zconf.h ../mkvmlinuz-33+nmu1/boot/zconf.h
--- ../mkvmlinuz-33+nmu1.old/boot/zconf.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/zconf.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,45 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-1998 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h 
+ */
+
+/* @(#) $Id$ */
+
+#ifndef _ZCONF_H
+#define _ZCONF_H
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  define MAX_MEM_LEVEL 8
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
+#endif
+
+                        /* Type declarations */
+
+typedef unsigned char  Byte;  /* 8 bits */
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+typedef void     *voidp;
+
+#endif /* _ZCONF_H */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/zlib.h ../mkvmlinuz-33+nmu1/boot/zlib.h
--- ../mkvmlinuz-33+nmu1.old/boot/zlib.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/zlib.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,653 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.1.3, July 9th, 1998
+
+  Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+
+  The data format used by the zlib library is described by RFCs (Request for
+  Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
+  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
+*/
+
+#ifndef _ZLIB_H
+#define _ZLIB_H
+
+#include "zconf.h"
+
+#define ZLIB_VERSION "1.1.3"
+
+/* 
+     The 'zlib' compression library provides in-memory compression and
+  decompression functions, including integrity checks of the uncompressed
+  data.  This version of the library supports only one compression method
+  (deflation) but other algorithms will be added later and will have the same
+  stream interface.
+
+     Compression can be done in a single step if the buffers are large
+  enough (for example if an input file is mmap'ed), or can be done by
+  repeated calls of the compression function.  In the latter case, the
+  application must provide more input and/or consume the output
+  (providing more output space) before each call.
+
+     The library also supports reading and writing files in gzip (.gz) format
+  with an interface similar to that of stdio.
+
+     The library does not install any signal handler. The decoder checks
+  the consistency of the compressed data, so the library should never
+  crash even in case of corrupted input.
+*/
+
+struct internal_state;
+
+typedef struct z_stream_s {
+    Byte    *next_in;   /* next input byte */
+    uInt     avail_in;  /* number of bytes available at next_in */
+    uLong    total_in;  /* total nb of input bytes read so far */
+
+    Byte    *next_out;  /* next output byte should be put there */
+    uInt     avail_out; /* remaining free space at next_out */
+    uLong    total_out; /* total nb of bytes output so far */
+
+    char     *msg;      /* last error message, NULL if no error */
+    struct internal_state *state; /* not visible by applications */
+
+    void     *workspace; /* memory allocated for this stream */
+
+    int     data_type;  /* best guess about the data type: ascii or binary */
+    uLong   adler;      /* adler32 value of the uncompressed data */
+    uLong   reserved;   /* reserved for future use */
+} z_stream;
+
+typedef z_stream *z_streamp;
+
+/*
+   The application must update next_in and avail_in when avail_in has
+   dropped to zero. It must update next_out and avail_out when avail_out
+   has dropped to zero. The application must initialize zalloc, zfree and
+   opaque before calling the init function. All other fields are set by the
+   compression library and must not be updated by the application.
+
+   The opaque value provided by the application will be passed as the first
+   parameter for calls of zalloc and zfree. This can be useful for custom
+   memory management. The compression library attaches no meaning to the
+   opaque value.
+
+   zalloc must return NULL if there is not enough memory for the object.
+   If zlib is used in a multi-threaded application, zalloc and zfree must be
+   thread safe.
+
+   On 16-bit systems, the functions zalloc and zfree must be able to allocate
+   exactly 65536 bytes, but will not be required to allocate more than this
+   if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
+   pointers returned by zalloc for objects of exactly 65536 bytes *must*
+   have their offset normalized to zero. The default allocation function
+   provided by this library ensures this (see zutil.c). To reduce memory
+   requirements and avoid any allocation of 64K objects, at the expense of
+   compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
+
+   The fields total_in and total_out can be used for statistics or
+   progress reports. After compression, total_in holds the total size of
+   the uncompressed data and may be saved for use in the decompressor
+   (particularly if the decompressor wants to decompress everything in
+   a single step).
+*/
+
+                        /* constants */
+
+#define Z_NO_FLUSH      0
+#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
+#define Z_PACKET_FLUSH  2
+#define Z_SYNC_FLUSH    3
+#define Z_FULL_FLUSH    4
+#define Z_FINISH        5
+/* Allowed flush values; see deflate() below for details */
+
+#define Z_OK            0
+#define Z_STREAM_END    1
+#define Z_NEED_DICT     2
+#define Z_ERRNO        (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR   (-3)
+#define Z_MEM_ERROR    (-4)
+#define Z_BUF_ERROR    (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative
+ * values are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION         0
+#define Z_BEST_SPEED             1
+#define Z_BEST_COMPRESSION       9
+#define Z_DEFAULT_COMPRESSION  (-1)
+/* compression levels */
+
+#define Z_FILTERED            1
+#define Z_HUFFMAN_ONLY        2
+#define Z_DEFAULT_STRATEGY    0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY   0
+#define Z_ASCII    1
+#define Z_UNKNOWN  2
+/* Possible values of the data_type field */
+
+#define Z_DEFLATED   8
+/* The deflate compression method (the only one supported in this version) */
+
+                        /* basic functions */
+
+extern const char * zlib_zlibVersion (void);
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+   If the first character differs, the library code actually used is
+   not compatible with the zlib.h header file used by the application.
+   This check is automatically made by deflateInit and inflateInit.
+ */
+
+extern int zlib_deflate_workspacesize (void);
+/*
+   Returns the number of bytes that needs to be allocated for a per-
+   stream workspace.  A pointer to this number of bytes should be
+   returned in stream->workspace before calling zlib_deflateInit().
+*/
+
+/* 
+extern int deflateInit (z_streamp strm, int level);
+
+     Initializes the internal stream state for compression. The fields
+   zalloc, zfree and opaque must be initialized before by the caller.
+   If zalloc and zfree are set to NULL, deflateInit updates them to
+   use default allocation functions.
+
+     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+   1 gives best speed, 9 gives best compression, 0 gives no compression at
+   all (the input data is simply copied a block at a time).
+   Z_DEFAULT_COMPRESSION requests a default compromise between speed and
+   compression (currently equivalent to level 6).
+
+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if level is not a valid compression level,
+   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+   with the version assumed by the caller (ZLIB_VERSION).
+   msg is set to null if there is no error message.  deflateInit does not
+   perform any compression: this will be done by deflate().
+*/
+
+
+extern int zlib_deflate (z_streamp strm, int flush);
+/*
+    deflate compresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full. It may introduce some
+  output latency (reading input without producing any output) except when
+  forced to flush.
+
+    The detailed semantics are as follows. deflate performs one or both of the
+  following actions:
+
+  - Compress more input starting at next_in and update next_in and avail_in
+    accordingly. If not all input can be processed (because there is not
+    enough room in the output buffer), next_in and avail_in are updated and
+    processing will resume at this point for the next call of deflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly. This action is forced if the parameter flush is non zero.
+    Forcing flush frequently degrades the compression ratio, so this parameter
+    should be set only when necessary (in interactive applications).
+    Some output may be provided even if flush is not set.
+
+  Before the call of deflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming
+  more output, and updating avail_in or avail_out accordingly; avail_out
+  should never be zero before the call. The application can consume the
+  compressed output when it wants, for example when the output buffer is full
+  (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
+  and with zero avail_out, it must be called again after making room in the
+  output buffer because there might be more output pending.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+  flushed to the output buffer and the output is aligned on a byte boundary, so
+  that the decompressor can get all input data available so far. (In particular
+  avail_in is zero after the call if enough output space has been provided
+  before the call.)  Flushing may degrade compression for some compression
+  algorithms and so it should be used only when necessary.
+
+    If flush is set to Z_FULL_FLUSH, all output is flushed as with
+  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+  restart from this point if previous compressed data has been damaged or if
+  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
+  the compression.
+
+    If deflate returns with avail_out == 0, this function must be called again
+  with the same value of the flush parameter and more output space (updated
+  avail_out), until the flush is complete (deflate returns with non-zero
+  avail_out).
+
+    If the parameter flush is set to Z_FINISH, pending input is processed,
+  pending output is flushed and deflate returns with Z_STREAM_END if there
+  was enough output space; if deflate returns with Z_OK, this function must be
+  called again with Z_FINISH and more output space (updated avail_out) but no
+  more input data, until it returns with Z_STREAM_END or an error. After
+  deflate has returned Z_STREAM_END, the only possible operations on the
+  stream are deflateReset or deflateEnd.
+  
+    Z_FINISH can be used immediately after deflateInit if all the compression
+  is to be done in a single step. In this case, avail_out must be at least
+  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
+  Z_STREAM_END, then it must be called again as described above.
+
+    deflate() sets strm->adler to the adler32 checksum of all input read
+  so far (that is, total_in bytes).
+
+    deflate() may update data_type if it can make a good guess about
+  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
+  binary. This field is only for information purposes and does not affect
+  the compression algorithm in any manner.
+
+    deflate() returns Z_OK if some progress has been made (more input
+  processed or more output produced), Z_STREAM_END if all input has been
+  consumed and all output has been produced (only when flush is set to
+  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+  if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
+  (for example avail_in or avail_out was zero).
+*/
+
+
+extern int zlib_deflateEnd (z_streamp strm);
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any
+   pending output.
+
+     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+   prematurely (some input or output was discarded). In the error case,
+   msg may be set but then points to a static string (which must not be
+   deallocated).
+*/
+
+
+extern int zlib_inflate_workspacesize (void);
+/*
+   Returns the number of bytes that needs to be allocated for a per-
+   stream workspace.  A pointer to this number of bytes should be
+   returned in stream->workspace before calling zlib_inflateInit().
+*/
+
+/* 
+extern int zlib_inflateInit (z_streamp strm);
+
+     Initializes the internal stream state for decompression. The fields
+   next_in, avail_in, and workspace must be initialized before by
+   the caller. If next_in is not NULL and avail_in is large enough (the exact
+   value depends on the compression method), inflateInit determines the
+   compression method from the zlib header and allocates all data structures
+   accordingly; otherwise the allocation will be deferred to the first call of
+   inflate.  If zalloc and zfree are set to NULL, inflateInit updates them to
+   use default allocation functions.
+
+     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller.  msg is set to null if there is no error
+   message. inflateInit does not perform any decompression apart from reading
+   the zlib header if present: this will be done by inflate().  (So next_in and
+   avail_in may be modified, but next_out and avail_out are unchanged.)
+*/
+
+
+extern int zlib_inflate (z_streamp strm, int flush);
+/*
+    inflate decompresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full. It may some
+  introduce some output latency (reading input without producing any output)
+  except when forced to flush.
+
+  The detailed semantics are as follows. inflate performs one or both of the
+  following actions:
+
+  - Decompress more input starting at next_in and update next_in and avail_in
+    accordingly. If not all input can be processed (because there is not
+    enough room in the output buffer), next_in is updated and processing
+    will resume at this point for the next call of inflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  inflate() provides as much output as possible, until there
+    is no more input data or no more space in the output buffer (see below
+    about the flush parameter).
+
+  Before the call of inflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming
+  more output, and updating the next_* and avail_* values accordingly.
+  The application can consume the uncompressed output when it wants, for
+  example when the output buffer is full (avail_out == 0), or after each
+  call of inflate(). If inflate returns Z_OK and with zero avail_out, it
+  must be called again after making room in the output buffer because there
+  might be more output pending.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
+  output as possible to the output buffer. The flushing behavior of inflate is
+  not specified for values of the flush parameter other than Z_SYNC_FLUSH
+  and Z_FINISH, but the current implementation actually flushes as much output
+  as possible anyway.
+
+    inflate() should normally be called until it returns Z_STREAM_END or an
+  error. However if all decompression is to be performed in a single step
+  (a single call of inflate), the parameter flush should be set to
+  Z_FINISH. In this case all pending input is processed and all pending
+  output is flushed; avail_out must be large enough to hold all the
+  uncompressed data. (The size of the uncompressed data may have been saved
+  by the compressor for this purpose.) The next operation on this stream must
+  be inflateEnd to deallocate the decompression state. The use of Z_FINISH
+  is never required, but can be used to inform inflate that a faster routine
+  may be used for the single inflate() call.
+
+     If a preset dictionary is needed at this point (see inflateSetDictionary
+  below), inflate sets strm-adler to the adler32 checksum of the
+  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
+  it sets strm->adler to the adler32 checksum of all output produced
+  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
+  an error code as described below. At the end of the stream, inflate()
+  checks that its computed adler32 checksum is equal to that saved by the
+  compressor and returns Z_STREAM_END only if the checksum is correct.
+
+    inflate() returns Z_OK if some progress has been made (more input processed
+  or more output produced), Z_STREAM_END if the end of the compressed data has
+  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+  corrupted (input stream not conforming to the zlib format or incorrect
+  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
+  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
+  enough memory, Z_BUF_ERROR if no progress is possible or if there was not
+  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
+  case, the application may then call inflateSync to look for a good
+  compression block.
+*/
+
+
+extern int zlib_inflateEnd (z_streamp strm);
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any
+   pending output.
+
+     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+   was inconsistent. In the error case, msg may be set but then points to a
+   static string (which must not be deallocated).
+*/
+
+                        /* Advanced functions */
+
+/*
+    The following functions are needed only in some special applications.
+*/
+
+/*   
+extern int deflateInit2 (z_streamp strm,
+                                     int  level,
+                                     int  method,
+                                     int  windowBits,
+                                     int  memLevel,
+                                     int  strategy);
+
+     This is another version of deflateInit with more compression options. The
+   fields next_in, zalloc, zfree and opaque must be initialized before by
+   the caller.
+
+     The method parameter is the compression method. It must be Z_DEFLATED in
+   this version of the library.
+
+     The windowBits parameter is the base two logarithm of the window size
+   (the size of the history buffer).  It should be in the range 8..15 for this
+   version of the library. Larger values of this parameter result in better
+   compression at the expense of memory usage. The default value is 15 if
+   deflateInit is used instead.
+
+     The memLevel parameter specifies how much memory should be allocated
+   for the internal compression state. memLevel=1 uses minimum memory but
+   is slow and reduces compression ratio; memLevel=9 uses maximum memory
+   for optimal speed. The default value is 8. See zconf.h for total memory
+   usage as a function of windowBits and memLevel.
+
+     The strategy parameter is used to tune the compression algorithm. Use the
+   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+   filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
+   string match).  Filtered data consists mostly of small values with a
+   somewhat random distribution. In this case, the compression algorithm is
+   tuned to compress them better. The effect of Z_FILTERED is to force more
+   Huffman coding and less string matching; it is somewhat intermediate
+   between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
+   the compression ratio but not the correctness of the compressed output even
+   if it is not set appropriately.
+
+      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
+   method). msg is set to null if there is no error message.  deflateInit2 does
+   not perform any compression: this will be done by deflate().
+*/
+                            
+#if 0
+extern int zlib_deflateSetDictionary (z_streamp strm,
+						     const Byte *dictionary,
+						     uInt  dictLength);
+#endif
+/*
+     Initializes the compression dictionary from the given byte sequence
+   without producing any compressed output. This function must be called
+   immediately after deflateInit, deflateInit2 or deflateReset, before any
+   call of deflate. The compressor and decompressor must use exactly the same
+   dictionary (see inflateSetDictionary).
+
+     The dictionary should consist of strings (byte sequences) that are likely
+   to be encountered later in the data to be compressed, with the most commonly
+   used strings preferably put towards the end of the dictionary. Using a
+   dictionary is most useful when the data to be compressed is short and can be
+   predicted with good accuracy; the data can then be compressed better than
+   with the default empty dictionary.
+
+     Depending on the size of the compression data structures selected by
+   deflateInit or deflateInit2, a part of the dictionary may in effect be
+   discarded, for example if the dictionary is larger than the window size in
+   deflate or deflate2. Thus the strings most likely to be useful should be
+   put at the end of the dictionary, not at the front.
+
+     Upon return of this function, strm->adler is set to the Adler32 value
+   of the dictionary; the decompressor may later use this value to determine
+   which dictionary has been used by the compressor. (The Adler32 value
+   applies to the whole dictionary even if only a subset of the dictionary is
+   actually used by the compressor.)
+
+     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+   parameter is invalid (such as NULL dictionary) or the stream state is
+   inconsistent (for example if deflate has already been called for this stream
+   or if the compression method is bsort). deflateSetDictionary does not
+   perform any compression: this will be done by deflate().
+*/
+
+#if 0
+extern int zlib_deflateCopy (z_streamp dest, z_streamp source);
+#endif
+
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when several compression strategies will be
+   tried, for example when there are several ways of pre-processing the input
+   data with a filter. The streams that will be discarded should then be freed
+   by calling deflateEnd.  Note that deflateCopy duplicates the internal
+   compression state which can be quite large, so this strategy is slow and
+   can consume lots of memory.
+
+     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being NULL). msg is left unchanged in both source and
+   destination.
+*/
+
+extern int zlib_deflateReset (z_streamp strm);
+/*
+     This function is equivalent to deflateEnd followed by deflateInit,
+   but does not free and reallocate all the internal compression state.
+   The stream will keep the same compression level and any other attributes
+   that may have been set by deflateInit2.
+
+      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being NULL).
+*/
+
+static inline unsigned long deflateBound(unsigned long s)
+{
+	return s + ((s + 7) >> 3) + ((s + 63) >> 6) + 11;
+}
+
+#if 0
+extern int zlib_deflateParams (z_streamp strm, int level, int strategy);
+#endif
+/*
+     Dynamically update the compression level and compression strategy.  The
+   interpretation of level and strategy is as in deflateInit2.  This can be
+   used to switch between compression and straight copy of the input data, or
+   to switch to a different kind of input data requiring a different
+   strategy. If the compression level is changed, the input available so far
+   is compressed with the old level (and may be flushed); the new level will
+   take effect only at the next call of deflate().
+
+     Before the call of deflateParams, the stream state must be set as for
+   a call of deflate(), since the currently available input may have to
+   be compressed and flushed. In particular, strm->avail_out must be non-zero.
+
+     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
+   if strm->avail_out was zero.
+*/
+
+/*   
+extern int inflateInit2 (z_streamp strm, int  windowBits);
+
+     This is another version of inflateInit with an extra parameter. The
+   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+   before by the caller.
+
+     The windowBits parameter is the base two logarithm of the maximum window
+   size (the size of the history buffer).  It should be in the range 8..15 for
+   this version of the library. The default value is 15 if inflateInit is used
+   instead. If a compressed stream with a larger window size is given as
+   input, inflate() will return with the error code Z_DATA_ERROR instead of
+   trying to allocate a larger window.
+
+      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
+   memLevel). msg is set to null if there is no error message.  inflateInit2
+   does not perform any decompression apart from reading the zlib header if
+   present: this will be done by inflate(). (So next_in and avail_in may be
+   modified, but next_out and avail_out are unchanged.)
+*/
+
+extern int zlib_inflateSetDictionary (z_streamp strm,
+						     const Byte *dictionary,
+						     uInt  dictLength);
+/*
+     Initializes the decompression dictionary from the given uncompressed byte
+   sequence. This function must be called immediately after a call of inflate
+   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
+   can be determined from the Adler32 value returned by this call of
+   inflate. The compressor and decompressor must use exactly the same
+   dictionary (see deflateSetDictionary).
+
+     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+   parameter is invalid (such as NULL dictionary) or the stream state is
+   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+   expected one (incorrect Adler32 value). inflateSetDictionary does not
+   perform any decompression: this will be done by subsequent calls of
+   inflate().
+*/
+
+#if 0
+extern int zlib_inflateSync (z_streamp strm);
+#endif
+/* 
+    Skips invalid compressed data until a full flush point (see above the
+  description of deflate with Z_FULL_FLUSH) can be found, or until all
+  available input is skipped. No output is provided.
+
+    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
+  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
+  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
+  case, the application may save the current current value of total_in which
+  indicates where valid compressed data was found. In the error case, the
+  application may repeatedly call inflateSync, providing more input each time,
+  until success or end of the input data.
+*/
+
+extern int zlib_inflateReset (z_streamp strm);
+/*
+     This function is equivalent to inflateEnd followed by inflateInit,
+   but does not free and reallocate all the internal decompression state.
+   The stream will keep attributes that may have been set by inflateInit2.
+
+      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being NULL).
+*/
+
+extern int zlib_inflateIncomp (z_stream *strm);
+/*
+     This function adds the data at next_in (avail_in bytes) to the output
+   history without performing any output.  There must be no pending output,
+   and the decompressor must be expecting to see the start of a block.
+   Calling this function is equivalent to decompressing a stored block
+   containing the data at next_in (except that the data is not output).
+*/
+
+                        /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+extern int zlib_deflateInit_ (z_streamp strm, int level,
+                                     const char *version, int stream_size);
+extern int zlib_inflateInit_ (z_streamp strm,
+                                     const char *version, int stream_size);
+extern int zlib_deflateInit2_ (z_streamp strm, int  level, int  method,
+                                      int windowBits, int memLevel,
+                                      int strategy, const char *version,
+                                      int stream_size);
+extern int zlib_inflateInit2_ (z_streamp strm, int  windowBits,
+                                      const char *version, int stream_size);
+#define zlib_deflateInit(strm, level) \
+        zlib_deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_inflateInit(strm) \
+        zlib_inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+        zlib_deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                      (strategy), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_inflateInit2(strm, windowBits) \
+        zlib_inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
+
+
+#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
+    struct internal_state {int dummy;}; /* hack for buggy compilers */
+#endif
+
+extern const char  * zlib_zError           (int err);
+#if 0
+extern int           zlib_inflateSyncPoint (z_streamp z);
+#endif
+extern const uLong * zlib_get_crc_table    (void);
+
+#endif /* _ZLIB_H */
diff -Nru ../mkvmlinuz-33+nmu1.old/boot/zutil.h ../mkvmlinuz-33+nmu1/boot/zutil.h
--- ../mkvmlinuz-33+nmu1.old/boot/zutil.h	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/boot/zutil.h	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,118 @@
+/* zutil.h -- internal interface and configuration of the compression library
+ * Copyright (C) 1995-1998 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id: zutil.h,v 1.1 2000/01/01 03:32:23 davem Exp $ */
+
+#ifndef _Z_UTIL_H
+#define _Z_UTIL_H
+
+#include "zlib.h"
+#include "string.h"
+#include <stddef.h>
+
+typedef unsigned char  uch;
+typedef unsigned short ush;
+typedef unsigned long  ulg;
+
+        /* common constants */
+
+#ifndef DEF_WBITS
+#  define DEF_WBITS MAX_WBITS
+#endif
+/* default windowBits for decompression. MAX_WBITS is for compression only */
+
+#if MAX_MEM_LEVEL >= 8
+#  define DEF_MEM_LEVEL 8
+#else
+#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+#endif
+/* default memLevel */
+
+#define STORED_BLOCK 0
+#define STATIC_TREES 1
+#define DYN_TREES    2
+/* The three kinds of block type */
+
+#define MIN_MATCH  3
+#define MAX_MATCH  258
+/* The minimum and maximum match lengths */
+
+#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
+
+        /* target dependencies */
+
+        /* Common defaults */
+
+#ifndef OS_CODE
+#  define OS_CODE  0x03  /* assume Unix */
+#endif
+
+         /* functions */
+
+typedef uLong (*check_func) (uLong check, const Byte *buf,
+				       uInt len);
+
+
+                        /* checksum functions */
+
+#define BASE 65521L /* largest prime smaller than 65536 */
+#define NMAX 5552
+/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
+
+#define DO1(buf,i)  {s1 += buf[i]; s2 += s1;}
+#define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
+#define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
+#define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
+#define DO16(buf)   DO8(buf,0); DO8(buf,8);
+
+/* ========================================================================= */
+/*
+     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+   return the updated checksum. If buf is NULL, this function returns
+   the required initial value for the checksum.
+   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+   much faster. Usage example:
+
+     uLong adler = adler32(0L, NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       adler = adler32(adler, buffer, length);
+     }
+     if (adler != original_adler) error();
+*/
+static inline uLong zlib_adler32(uLong adler,
+				 const Byte *buf,
+				 uInt len)
+{
+    unsigned long s1 = adler & 0xffff;
+    unsigned long s2 = (adler >> 16) & 0xffff;
+    int k;
+
+    if (buf == NULL) return 1L;
+
+    while (len > 0) {
+        k = len < NMAX ? len : NMAX;
+        len -= k;
+        while (k >= 16) {
+            DO16(buf);
+	    buf += 16;
+            k -= 16;
+        }
+        if (k != 0) do {
+            s1 += *buf++;
+	    s2 += s1;
+        } while (--k);
+        s1 %= BASE;
+        s2 %= BASE;
+    }
+    return (s2 << 16) | s1;
+}
+
+#endif /* _Z_UTIL_H */
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/changelog ../mkvmlinuz-33+nmu1/debian/changelog
--- ../mkvmlinuz-33+nmu1.old/debian/changelog	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/changelog	2008-04-23 07:33:32.534597243 +0200
@@ -0,0 +1,277 @@
+mkvmlinuz (33+nmu1) unstable; urgency=low
+
+  * Non-maintainer upload to fix pending l10n issues.
+  * Debconf translations:
+    - Dutch. Closes: #415493
+    - Italian. Closes: #460131
+    - Finnish. Closes: #475638
+    - Galician. Closes: #475759
+    - Basque. Closes: #476073
+
+ -- Christian Perrier <bubulle@debian.org>  Fri, 11 Apr 2008 22:56:59 +0200
+
+mkvmlinuz (33) unstable; urgency=low
+
+  * Add Japanese translation thanks to Kobayashi Noritada.
+    (Closes: #401384)
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Mon,  5 Mar 2007 18:05:01 +0100
+
+mkvmlinuz (32) unstable; urgency=medium
+
+  * Fix failure on PReP induced by fixing #381787. (Closes: #408385)
+  * Add checks for possible silent failures.
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Thu, 25 Jan 2007 16:33:33 +0100
+
+mkvmlinuz (31) unstable; urgency=medium
+
+  * Fix long description thanks to Steve Langasek.
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Mon, 22 Jan 2007 10:55:02 +0100
+
+mkvmlinuz (30) unstable; urgency=low
+
+  * Fix arithmetic syntax error. (Closes: #374185)
+  * Add myself to the Uploaders field.
+  * Bump Standards-Version to 3.7.2.
+  * Fix some expressions in long description.
+  * Fix lintian errors and warnings.
+    + Add po-debconf to the Build-Depends field.
+    + Depend explicitly on bash (>= 3) to avoid a simple dependency
+      on an essential package.
+    + Add dh_strip in debian/rules, because a binary was left
+      unstripped.
+    + Remove debian/conffiles as debhelper (>= 4) adds conffiles
+      under /etc automatically.
+    + Add the #DEBHELPER# token to debian/postinst.
+    + Move debian/kernel-image.postinst to debian/kernel-image/postinst
+      and debian/kernel-image.postrm to debian/kernel-image/postrm,
+      because it prevents lintian from believing they are maintainer
+      scripts for the packaging system.
+    + Add debian/lintian.overrides for debconf-is-not-a-registry,
+      because we need a debconf setting from mkvmlinuz in kernel
+      scripts.
+  * Fix silent failure by adding some checks. (Closes: #381787)
+  * Add the XS-Vcs-Svn field.
+  * Add Portuguese translation thanks to Rui Branco. (Closes: #401384)
+  * Add debugging symbols during build process.
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Sun, 14 Jan 2007 14:41:03 +0100
+
+mkvmlinuz (29) unstable; urgency=high
+
+  * Added Efika support.
+
+ -- Sven Luther <luther@debian.org>  Sat, 16 Dec 2006 02:18:19 +0100
+
+mkvmlinuz (28) unstable; urgency=low
+
+  * Added support for 2.6.19 kernels.
+  * Added portuguese translation. (Closes: #401384)
+
+ -- Sven Luther <luther@debian.org>  Tue,  5 Dec 2006 17:20:48 +0100
+
+mkvmlinuz (27) unstable; urgency=low
+
+  * Corrected typo. (Closes: #399768)
+
+ -- Sven Luther <luther@debian.org>  Tue, 21 Nov 2006 22:43:28 +0100
+
+mkvmlinuz (26) unstable; urgency=low
+
+  * Fixed -prep support.
+
+ -- Sven Luther <luther@debian.org>  Sat, 18 Nov 2006 21:41:01 +0100
+
+mkvmlinuz (25) unstable; urgency=low
+
+  [ Christian Perrier ]
+  * Switch to po-debconf for debconf templates. (Closes: #298972)
+  * Debconf translations:
+    - Add Swedish (updated during the l10n update campaign)
+      (Closes: #331020)
+    - Add Vietnamese. Sent during the l10n update campaign
+    - Add Czech. Sent during the l10n update campaign
+    - Add Romanian. Sent during the l10n update campaign
+    - Add French. Sent during the l10n update campaign
+    - Add German. Sent during the l10n update campaign
+    - Add Russian. Sent during the l10n update campaign
+    - Add Brazilian Portuguese. Sent during the l10n update campaign
+
+ -- Sven Luther <luther@debian.org>  Thu,  9 Nov 2006 22:13:12 +0100
+
+mkvmlinuz (24) unstable; urgency=low
+
+  * Adapted uncompressor object list to 2.6.18.
+  * Re-enabled -prep support.
+
+ -- Sven Luther <luther@debian.org>  Sat, 23 Sep 2006 21:51:52 +0200
+
+mkvmlinuz (23) unstable; urgency=low
+
+  * Fallback arch/powerpc/boot object files for chrp kernels without mkvmlinuz
+    support. This uses the 2.6.16+ code, but should work with any 2.6 kernel.
+  * Now supports the creation of a /boot/vmlinuz symlink to the last created
+    vmlinuz kernel. (Closes: #260219)
+  * Now uses /bin/bash as interpeter, as we use bashisms. (Closes: #374185)
+
+ -- Sven Luther <luther@debian.org>  Tue,  4 Jul 2006 22:04:50 +0200
+
+mkvmlinuz (22) unstable; urgency=high
+
+  * Fixed broken 2.6.16+ support.
+
+ -- Sven Luther <luther@debian.org>  Wed, 31 May 2006 17:40:37 +0200
+
+mkvmlinuz (21) unstable; urgency=low
+
+  * Fixed commented out cleanup call, now doesn't fill /tmp with cruft
+    anymore. Thanks to Colin Watson for noticing this. (Closes: #365978)
+
+ -- Sven Luther <luther@debian.org>  Mon,  8 May 2006 19:32:16 +0000
+
+mkvmlinuz (20) unstable; urgency=low
+
+  * Ported to 2.6.16 powerpc kernels.
+  * Added powerpc64 support.
+
+ -- Sven Luther <luther@debian.org>  Thu, 20 Apr 2006 18:42:41 +0000
+
+mkvmlinuz (19) unstable; urgency=low
+
+  * Added debconf dependency. (Closes: #342372)
+
+ -- Sven Luther <luther@debian.org>  Fri,  6 Jan 2006 16:25:10 +0100
+
+mkvmlinuz (18) unstable; urgency=low
+
+  * Now look at $STEM-image, linux-image and then only kernel-image for the
+    objdir.
+
+ -- Sven Luther <luther@debian.org>  Sat, 31 Dec 2005 18:25:19 +0000
+
+mkvmlinuz (17) unstable; urgency=low
+
+  * Fixed lame typo in version 16 :/
+
+ -- Sven Luther <luther@debian.org>  Sat, 26 Nov 2005 14:07:45 +0000
+
+mkvmlinuz (16) unstable; urgency=low
+
+  * Added -l option, enabling the caller to specify the elf link address.
+
+ -- Sven Luther <luther@debian.org>  Mon,  7 Nov 2005 14:47:22 +0000
+
+mkvmlinuz (15) unstable; urgency=high
+
+  * Generates a striped compressed vmlinuz on apus and miboot.
+
+ -- Sven Luther <luther@debian.org>  Mon, 10 Oct 2005 10:01:33 +0200
+
+mkvmlinuz (14) unstable; urgency=low
+
+  * Now autodetects if the initrd is gzip compressed. This will allow to do
+    the right thing for initrds (not compressed by default) and initramfs
+    (compressed by default), since the kernel was none too happy with doubly
+    compressed initramfs initrds :)
+
+ -- Sven Luther <luther@debian.org>  Fri, 16 Sep 2005 10:22:09 +0200
+
+mkvmlinuz (13) unstable; urgency=high
+
+  * Added debconf magic to kernel-image postinst/postrm hooks.
+
+ -- Sven Luther <luther@debian.org>  Fri, 25 Feb 2005 14:47:52 +0100
+
+mkvmlinuz (12) unstable; urgency=high
+
+  * Fixed PReP support for recent kernel versions (including vanilla
+    2.6.9-rc2 and Debian revision 2.6.8-7).
+
+ -- Jens Schmalzing <jensen@debian.org>  Mon,  4 Oct 2004 22:37:02 +0200
+
+mkvmlinuz (11) unstable; urgency=high
+
+  * Fixed NewWorld PowerMac support.
+
+ -- Jens Schmalzing <jensen@debian.org>  Sun,  3 Oct 2004 09:59:41 +0200
+
+mkvmlinuz (10) unstable; urgency=low
+
+  * Fixed miBoot support.
+
+  * Changed the internal name for NewWorld PowerMacs from newworld to the
+    slightly inaccurate pmac, since this is what the kernel Makefiles use.
+
+  * Documented the possible subarchitectures in the manpage.
+
+ -- Jens Schmalzing <jensen@debian.org>  Sat, 11 Sep 2004 21:09:55 +0200
+
+mkvmlinuz (9) unstable; urgency=low
+
+  * Added PPCBug support (closes: #269146).
+
+  * Added miBoot support.
+
+  * Made quiet operation the default, previous default is now activated by
+    asking for verbose operation.
+
+  * Added an option to prevent guessing the name of an initrd.
+
+ -- Jens Schmalzing <jensen@debian.org>  Tue, 31 Aug 2004 13:51:15 +0200
+
+mkvmlinuz (8) unstable; urgency=low
+
+  * Fixed spurious output when not using an initrd.
+
+  * Discard command output if verbose flag is not set (closes: Bug#263452).
+
+ -- Jens Schmalzing <jensen@debian.org>  Wed,  4 Aug 2004 17:33:19 +0200
+
+mkvmlinuz (7) unstable; urgency=low
+
+  * Set a default output file location in /etc/mkvmlinuz/output.
+
+  * Added PReP support (closes: #252427, #256074).
+
+ -- Jens Schmalzing <jensen@debian.org>  Thu,  8 Jul 2004 09:23:38 +0200
+
+mkvmlinuz (6) unstable; urgency=low
+
+  * Added an option to prevent compressing an already compressed ramdisk
+    image (closes: Bug#252489).
+
+ -- Jens Schmalzing <jensen@debian.org>  Tue, 15 Jun 2004 20:01:23 +0200
+
+mkvmlinuz (5) unstable; urgency=low
+
+  * Fixed a typo (closes: Bug#252036).
+
+ -- Jens Schmalzing <jensen@debian.org>  Tue,  1 Jun 2004 10:38:00 +0200
+
+mkvmlinuz (4) unstable; urgency=low
+
+  * Fixed CHRP support by adding the directory to the addnote call
+    (closes: Bug#251043).
+
+ -- Jens Schmalzing <jensen@debian.org>  Wed, 26 May 2004 21:36:39 +0200
+
+mkvmlinuz (3) unstable; urgency=low
+
+  * Added Pegasos support.
+
+ -- Jens Schmalzing <jensen@debian.org>  Fri, 21 May 2004 08:42:45 +0200
+
+mkvmlinuz (2) unstable; urgency=low
+
+  * Added a missing option to the getopts call.
+
+ -- Jens Schmalzing <jensen@debian.org>  Thu, 13 May 2004 21:55:37 +0200
+
+mkvmlinuz (1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Jens Schmalzing <jensen@debian.org>  Fri, 23 Apr 2004 10:19:35 +0200
+
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/changelog~ ../mkvmlinuz-33+nmu1/debian/changelog~
--- ../mkvmlinuz-33+nmu1.old/debian/changelog~	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/changelog~	2008-04-15 01:41:40.598329634 +0200
@@ -0,0 +1,277 @@
+mkvmlinuz (33+nmu1) unstable; urgency=low
+
+  * Non-maintainer upload to fix pending l10n issues.
+  * Debconf translations:
+  * Dutch. Closes: #415493
+  * Italian. Closes: #460131
+  * Finnish. Closes: #475638
+  * Galician. Closes: #475759
+  * Basque. Closes: #476073
+
+ -- Christian Perrier <bubulle@debian.org>  Fri, 11 Apr 2008 22:56:59 +0200
+
+mkvmlinuz (33) unstable; urgency=low
+
+  * Add Japanese translation thanks to Kobayashi Noritada.
+    (Closes: #401384)
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Mon,  5 Mar 2007 18:05:01 +0100
+
+mkvmlinuz (32) unstable; urgency=medium
+
+  * Fix failure on PReP induced by fixing #381787. (Closes: #408385)
+  * Add checks for possible silent failures.
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Thu, 25 Jan 2007 16:33:33 +0100
+
+mkvmlinuz (31) unstable; urgency=medium
+
+  * Fix long description thanks to Steve Langasek.
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Mon, 22 Jan 2007 10:55:02 +0100
+
+mkvmlinuz (30) unstable; urgency=low
+
+  * Fix arithmetic syntax error. (Closes: #374185)
+  * Add myself to the Uploaders field.
+  * Bump Standards-Version to 3.7.2.
+  * Fix some expressions in long description.
+  * Fix lintian errors and warnings.
+    + Add po-debconf to the Build-Depends field.
+    + Depend explicitly on bash (>= 3) to avoid a simple dependency
+      on an essential package.
+    + Add dh_strip in debian/rules, because a binary was left
+      unstripped.
+    + Remove debian/conffiles as debhelper (>= 4) adds conffiles
+      under /etc automatically.
+    + Add the #DEBHELPER# token to debian/postinst.
+    + Move debian/kernel-image.postinst to debian/kernel-image/postinst
+      and debian/kernel-image.postrm to debian/kernel-image/postrm,
+      because it prevents lintian from believing they are maintainer
+      scripts for the packaging system.
+    + Add debian/lintian.overrides for debconf-is-not-a-registry,
+      because we need a debconf setting from mkvmlinuz in kernel
+      scripts.
+  * Fix silent failure by adding some checks. (Closes: #381787)
+  * Add the XS-Vcs-Svn field.
+  * Add Portuguese translation thanks to Rui Branco. (Closes: #401384)
+  * Add debugging symbols during build process.
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Sun, 14 Jan 2007 14:41:03 +0100
+
+mkvmlinuz (29) unstable; urgency=high
+
+  * Added Efika support.
+
+ -- Sven Luther <luther@debian.org>  Sat, 16 Dec 2006 02:18:19 +0100
+
+mkvmlinuz (28) unstable; urgency=low
+
+  * Added support for 2.6.19 kernels.
+  * Added portuguese translation. (Closes: #401384)
+
+ -- Sven Luther <luther@debian.org>  Tue,  5 Dec 2006 17:20:48 +0100
+
+mkvmlinuz (27) unstable; urgency=low
+
+  * Corrected typo. (Closes: #399768)
+
+ -- Sven Luther <luther@debian.org>  Tue, 21 Nov 2006 22:43:28 +0100
+
+mkvmlinuz (26) unstable; urgency=low
+
+  * Fixed -prep support.
+
+ -- Sven Luther <luther@debian.org>  Sat, 18 Nov 2006 21:41:01 +0100
+
+mkvmlinuz (25) unstable; urgency=low
+
+  [ Christian Perrier ]
+  * Switch to po-debconf for debconf templates. (Closes: #298972)
+  * Debconf translations:
+    - Add Swedish (updated during the l10n update campaign)
+      (Closes: #331020)
+    - Add Vietnamese. Sent during the l10n update campaign
+    - Add Czech. Sent during the l10n update campaign
+    - Add Romanian. Sent during the l10n update campaign
+    - Add French. Sent during the l10n update campaign
+    - Add German. Sent during the l10n update campaign
+    - Add Russian. Sent during the l10n update campaign
+    - Add Brazilian Portuguese. Sent during the l10n update campaign
+
+ -- Sven Luther <luther@debian.org>  Thu,  9 Nov 2006 22:13:12 +0100
+
+mkvmlinuz (24) unstable; urgency=low
+
+  * Adapted uncompressor object list to 2.6.18.
+  * Re-enabled -prep support.
+
+ -- Sven Luther <luther@debian.org>  Sat, 23 Sep 2006 21:51:52 +0200
+
+mkvmlinuz (23) unstable; urgency=low
+
+  * Fallback arch/powerpc/boot object files for chrp kernels without mkvmlinuz
+    support. This uses the 2.6.16+ code, but should work with any 2.6 kernel.
+  * Now supports the creation of a /boot/vmlinuz symlink to the last created
+    vmlinuz kernel. (Closes: #260219)
+  * Now uses /bin/bash as interpeter, as we use bashisms. (Closes: #374185)
+
+ -- Sven Luther <luther@debian.org>  Tue,  4 Jul 2006 22:04:50 +0200
+
+mkvmlinuz (22) unstable; urgency=high
+
+  * Fixed broken 2.6.16+ support.
+
+ -- Sven Luther <luther@debian.org>  Wed, 31 May 2006 17:40:37 +0200
+
+mkvmlinuz (21) unstable; urgency=low
+
+  * Fixed commented out cleanup call, now doesn't fill /tmp with cruft
+    anymore. Thanks to Colin Watson for noticing this. (Closes: #365978)
+
+ -- Sven Luther <luther@debian.org>  Mon,  8 May 2006 19:32:16 +0000
+
+mkvmlinuz (20) unstable; urgency=low
+
+  * Ported to 2.6.16 powerpc kernels.
+  * Added powerpc64 support.
+
+ -- Sven Luther <luther@debian.org>  Thu, 20 Apr 2006 18:42:41 +0000
+
+mkvmlinuz (19) unstable; urgency=low
+
+  * Added debconf dependency. (Closes: #342372)
+
+ -- Sven Luther <luther@debian.org>  Fri,  6 Jan 2006 16:25:10 +0100
+
+mkvmlinuz (18) unstable; urgency=low
+
+  * Now look at $STEM-image, linux-image and then only kernel-image for the
+    objdir.
+
+ -- Sven Luther <luther@debian.org>  Sat, 31 Dec 2005 18:25:19 +0000
+
+mkvmlinuz (17) unstable; urgency=low
+
+  * Fixed lame typo in version 16 :/
+
+ -- Sven Luther <luther@debian.org>  Sat, 26 Nov 2005 14:07:45 +0000
+
+mkvmlinuz (16) unstable; urgency=low
+
+  * Added -l option, enabling the caller to specify the elf link address.
+
+ -- Sven Luther <luther@debian.org>  Mon,  7 Nov 2005 14:47:22 +0000
+
+mkvmlinuz (15) unstable; urgency=high
+
+  * Generates a striped compressed vmlinuz on apus and miboot.
+
+ -- Sven Luther <luther@debian.org>  Mon, 10 Oct 2005 10:01:33 +0200
+
+mkvmlinuz (14) unstable; urgency=low
+
+  * Now autodetects if the initrd is gzip compressed. This will allow to do
+    the right thing for initrds (not compressed by default) and initramfs
+    (compressed by default), since the kernel was none too happy with doubly
+    compressed initramfs initrds :)
+
+ -- Sven Luther <luther@debian.org>  Fri, 16 Sep 2005 10:22:09 +0200
+
+mkvmlinuz (13) unstable; urgency=high
+
+  * Added debconf magic to kernel-image postinst/postrm hooks.
+
+ -- Sven Luther <luther@debian.org>  Fri, 25 Feb 2005 14:47:52 +0100
+
+mkvmlinuz (12) unstable; urgency=high
+
+  * Fixed PReP support for recent kernel versions (including vanilla
+    2.6.9-rc2 and Debian revision 2.6.8-7).
+
+ -- Jens Schmalzing <jensen@debian.org>  Mon,  4 Oct 2004 22:37:02 +0200
+
+mkvmlinuz (11) unstable; urgency=high
+
+  * Fixed NewWorld PowerMac support.
+
+ -- Jens Schmalzing <jensen@debian.org>  Sun,  3 Oct 2004 09:59:41 +0200
+
+mkvmlinuz (10) unstable; urgency=low
+
+  * Fixed miBoot support.
+
+  * Changed the internal name for NewWorld PowerMacs from newworld to the
+    slightly inaccurate pmac, since this is what the kernel Makefiles use.
+
+  * Documented the possible subarchitectures in the manpage.
+
+ -- Jens Schmalzing <jensen@debian.org>  Sat, 11 Sep 2004 21:09:55 +0200
+
+mkvmlinuz (9) unstable; urgency=low
+
+  * Added PPCBug support (closes: #269146).
+
+  * Added miBoot support.
+
+  * Made quiet operation the default, previous default is now activated by
+    asking for verbose operation.
+
+  * Added an option to prevent guessing the name of an initrd.
+
+ -- Jens Schmalzing <jensen@debian.org>  Tue, 31 Aug 2004 13:51:15 +0200
+
+mkvmlinuz (8) unstable; urgency=low
+
+  * Fixed spurious output when not using an initrd.
+
+  * Discard command output if verbose flag is not set (closes: Bug#263452).
+
+ -- Jens Schmalzing <jensen@debian.org>  Wed,  4 Aug 2004 17:33:19 +0200
+
+mkvmlinuz (7) unstable; urgency=low
+
+  * Set a default output file location in /etc/mkvmlinuz/output.
+
+  * Added PReP support (closes: #252427, #256074).
+
+ -- Jens Schmalzing <jensen@debian.org>  Thu,  8 Jul 2004 09:23:38 +0200
+
+mkvmlinuz (6) unstable; urgency=low
+
+  * Added an option to prevent compressing an already compressed ramdisk
+    image (closes: Bug#252489).
+
+ -- Jens Schmalzing <jensen@debian.org>  Tue, 15 Jun 2004 20:01:23 +0200
+
+mkvmlinuz (5) unstable; urgency=low
+
+  * Fixed a typo (closes: Bug#252036).
+
+ -- Jens Schmalzing <jensen@debian.org>  Tue,  1 Jun 2004 10:38:00 +0200
+
+mkvmlinuz (4) unstable; urgency=low
+
+  * Fixed CHRP support by adding the directory to the addnote call
+    (closes: Bug#251043).
+
+ -- Jens Schmalzing <jensen@debian.org>  Wed, 26 May 2004 21:36:39 +0200
+
+mkvmlinuz (3) unstable; urgency=low
+
+  * Added Pegasos support.
+
+ -- Jens Schmalzing <jensen@debian.org>  Fri, 21 May 2004 08:42:45 +0200
+
+mkvmlinuz (2) unstable; urgency=low
+
+  * Added a missing option to the getopts call.
+
+ -- Jens Schmalzing <jensen@debian.org>  Thu, 13 May 2004 21:55:37 +0200
+
+mkvmlinuz (1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Jens Schmalzing <jensen@debian.org>  Fri, 23 Apr 2004 10:19:35 +0200
+
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/compat ../mkvmlinuz-33+nmu1/debian/compat
--- ../mkvmlinuz-33+nmu1.old/debian/compat	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/compat	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1 @@
+4
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/config ../mkvmlinuz-33+nmu1/debian/config
--- ../mkvmlinuz-33+nmu1.old/debian/config	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/config	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+set -e
+
+. /usr/share/debconf/confmodule
+
+case $(grep ^machine /proc/cpuinfo) in
+    *PReP*Blackhawk*) arch=ppcbug ;;
+    *PReP*) arch=prep ;;
+    *CHRP*Pegasos*|*EFIKA*CHRP*) arch=chrp_pegasos ;;
+    *CHRP*) arch=chrp ;;
+    *Amiga*) arch=apus ;;
+    *iSeries*) arch=iseries ;;
+    *)
+	case $(grep ^pmac-generation /proc/cpuinfo) in
+	    *NewWorld) arch=pmac_newworld ;;
+	    *OldWorld) arch=pmac_oldworld ;;
+	    *NuBus) arch=pmac_nubus ;;
+	    *) arch=unknown ;;
+	esac
+	;;
+esac
+
+# List of bootloader per subarch.
+case $arch in
+    chrp|pmac_newworld) bootloaders="yaboot, mkvmlinuz" ;;
+    pmac_oldworld) bootloaders="quik, mkvmlinuz" ;;
+    apus|ppcbug|prep|chrp_pegasos) bootloaders="mkvmlinuz" ;;
+    *) bootloaders="unknown" ;;
+esac
+
+# If there is more than one bootloader present, ask the user
+# at medium priority
+
+db_subst mkvmlinuz/bootloaders choices "$bootloaders"
+db_subst mkvmlinuz/bootloaders default "${bootloaders%, *}"
+db_input medium mkvmlinuz/bootloaders || true
+db_go || true
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/control ../mkvmlinuz-33+nmu1/debian/control
--- ../mkvmlinuz-33+nmu1.old/debian/control	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/control	2007-01-22 10:54:41.000000000 +0100
@@ -0,0 +1,21 @@
+Source: mkvmlinuz
+Section: devel
+Priority: optional
+Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
+Uploaders: Sven Luther <luther@debian.org>, Aurélien GÉRÔME <ag@roxor.cx>
+Build-Depends: docbook-to-man, debhelper (>= 4.1.16), po-debconf
+Standards-Version: 3.7.2
+XS-Vcs-Svn: svn://svn.debian.org/svn/kernel/dists/trunk/utils/mkvmlinuz/
+
+Package: mkvmlinuz
+Architecture: powerpc
+Depends: bash (>= 3), binutils, debconf | debconf-2.0
+Description: create a kernel to boot a PowerPC machine from Open Firmware
+ This little program takes a PowerPC Linux kernel as an uncompressed
+ ELF image file (usually called vmlinux or such) and adds boot code
+ and possibly a ramdisk to create a compressed kernel image that
+ can be booted directly from Open Firmware, thus eliminating the
+ need for a second-stage bootloader such as yaboot or quik. This is
+ especially useful on PowerPC sub-architectures which do not have a
+ bootloader at all, but may also come in handy for install kernels,
+ netboot systems, and the like.
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/copyright ../mkvmlinuz-33+nmu1/debian/copyright
--- ../mkvmlinuz-33+nmu1.old/debian/copyright	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/copyright	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,13 @@
+This package was created by Jens Schmalzing <jensen@debian.org> on
+Fri, 23 Apr 2004 10:19:35 +0200.
+
+This package consists of a small shell script that performs a tiny
+portion of the PowerPC kernel generation originally encoded in the
+Makefiles in the Linux kernel tree, namely in arch/(ppc|powerpc)/boot/.
+
+Additionally, we include a copy of linux's arch/powerpc/boot, from the
+2.6.17 kernel, which are copyrighted by their resposctive authors.
+
+Linux is copyrighted by Linus Torvalds and others, and is licensed
+under the GNU General Public License, which on Debian systems will
+be installed in the file /usr/share/common-licenses/GPL.
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/dirs ../mkvmlinuz-33+nmu1/debian/dirs
--- ../mkvmlinuz-33+nmu1.old/debian/dirs	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/dirs	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,7 @@
+etc/mkvmlinuz
+usr/sbin
+usr/share/man/man8
+etc/kernel/postinst.d
+etc/kernel/postrm.d
+usr/lib/mkvmlinuz
+usr/share/lintian/overrides
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/kernel-image/postinst ../mkvmlinuz-33+nmu1/debian/kernel-image/postinst
--- ../mkvmlinuz-33+nmu1.old/debian/kernel-image/postinst	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/kernel-image/postinst	2007-01-14 14:21:23.000000000 +0100
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+. /usr/share/debconf/confmodule
+
+db_get mkvmlinuz/bootloaders
+bootloader="$RET"
+
+if [ "$bootloader" = mkvmlinuz ]; then
+    /usr/sbin/mkvmlinuz $1 $2
+fi
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/kernel-image/postrm ../mkvmlinuz-33+nmu1/debian/kernel-image/postrm
--- ../mkvmlinuz-33+nmu1.old/debian/kernel-image/postrm	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/kernel-image/postrm	2007-01-14 14:21:23.000000000 +0100
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+set -e
+
+. /usr/share/debconf/confmodule
+
+db_get mkvmlinuz/bootloaders
+bootloader="$RET"
+
+# Let's erase the kernel created by mkvmlinuz too.
+if [ "$bootloader" = mkvmlinuz ]; then
+    vmlinuz=`echo $2 | sed -e 's/vmlinux/vmlinuz/'`
+    rm -f $vmlinuz
+    if [ -e "$vmlinuz.old" ]; then
+	mv $vmlinuz.old $vmlinuz
+    fi
+fi
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/lintian.overrides ../mkvmlinuz-33+nmu1/debian/lintian.overrides
--- ../mkvmlinuz-33+nmu1.old/debian/lintian.overrides	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/lintian.overrides	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,2 @@
+mkvmlinuz: debconf-is-not-a-registry ./etc/kernel/postinst.d/mkvmlinuz
+mkvmlinuz: debconf-is-not-a-registry ./etc/kernel/postrm.d/mkvmlinuz
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/mkvmlinuz.sgml ../mkvmlinuz-33+nmu1/debian/mkvmlinuz.sgml
--- ../mkvmlinuz-33+nmu1.old/debian/mkvmlinuz.sgml	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/mkvmlinuz.sgml	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,315 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+  <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+  <!ENTITY dhfirstname "<firstname>Jens</firstname>">
+  <!ENTITY dhsurname   "<surname>Schmalzing</surname>">
+  <!ENTITY dhdate      "<date>Sep 11, 2004</date>">
+  <!ENTITY dhsection   "<manvolnum>8</manvolnum>">
+  <!ENTITY dhemail     "<email>jensen@debian.org</email>">
+  <!ENTITY dhusername  "Jens Schmalzing">
+  <!ENTITY dhucpackage "<refentrytitle>MKVMLINUZ</refentrytitle>">
+  <!ENTITY dhpackage   "mkvmlinuz">
+
+  <!ENTITY debian      "<productname>Debian</productname>">
+  <!ENTITY gnu         "<acronym>GNU</acronym>">
+  <!ENTITY gpl         "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+  <refentryinfo>
+    <address>
+      &dhemail;
+    </address>
+    <author>
+      &dhfirstname;
+      &dhsurname;
+    </author>
+    <copyright>
+      <year>2004</year>
+      <holder>&dhusername;</holder>
+    </copyright>
+    &dhdate;
+  </refentryinfo>
+  <refmeta>
+    &dhucpackage;
+
+    &dhsection;
+  </refmeta>
+  <refnamediv>
+    <refname>&dhpackage;</refname>
+
+    <refpurpose>create a kernel to boot a PowerPC machine from Open Firmware</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>&dhpackage;</command>
+      <arg><option>-o <replaceable>output</replaceable></option></arg>
+      <arg><option>-a <replaceable>arch</replaceable></option></arg>
+      <arg><option>-k <replaceable>kernel</replaceable></option></arg>
+      <arg><option>-s <replaceable>sysmap</replaceable></option></arg>
+      <arg><option>-i <replaceable>initrd</replaceable></option></arg>
+      <arg><option>-d <replaceable>objdir</replaceable></option></arg>
+      <arg><option>-r <replaceable>release</replaceable></option></arg>
+      <arg><option>-l <replaceable>linkaddress</replaceable></option></arg>
+      <arg><option>-n</option></arg>
+      <arg><option>-z</option></arg>
+      <arg><option>-u</option></arg>
+      <arg><option>-v</option></arg>
+      <arg><replaceable>release</replaceable> <arg><replaceable>kernel</replaceable></arg></arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+  <refsect1>
+    <title>DESCRIPTION</title>
+
+    <para>This manual page documents briefly the
+      <command>&dhpackage;</command> command.</para>
+
+    <para><command>&dhpackage;</command> is a program that takes a
+      PowerPC Linux kernel as an uncompressed ELF image file (usually
+      called <filename>vmlinux</filename> or somesuch) and adds boot
+      code and possibly a ramdisk to create a compressed kernel image
+      that can be booted directly from Open Firmware, thus eliminating
+      the need for a second-stage bootloader such as
+      <command>yaboot</command> or <command>quik</command>.</para>
+
+  </refsect1>
+  <refsect1>
+    <title>OPTIONS</title>
+
+    <variablelist>
+      <varlistentry>
+        <term><option>-o</option></term>
+        <listitem>
+          <para>Specify the path to the output file for the compressed
+          kernel image.  If this option is not set, the file
+          <filename>/etc/mkvmlinuz/output</filename> is sourced, in
+          the hope that it will set the shell variable
+          <varname>output</varname> to something useful.  If this
+          doesn't work either, the program stops with a non-zero exit
+          code.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><option>-a</option></term>
+        <listitem>
+          <para>Specify the PowerPC sub-architecture to build for.  If
+          this option is not set, the program will guess based on the
+          contents of /proc/cpuinfo.  At the moment, the following
+          values are supported:</para>
+	  <variablelist>
+	    <varlistentry>
+	      <term>chrp</term>
+	      <listitem>
+		<para>
+		  This build a compressed kernel for CHRP machines.
+		</para>
+	      </listitem>
+	    </varlistentry>
+	    <varlistentry>
+	      <term>coff</term>
+	      <listitem>
+		<para>
+		  The COFF format is understood by the Open Firmware of
+		  many OldWorld PowerMacs.  You will need it if you
+		  intend to boot a Linux kernel directly from Open
+		  Firmware.  Note that you can also choose between a
+		  variety of boot loaders for that platform, such as
+		  <command>quik</command>, <command>BootX</command>, and
+		  <command>miBoot</command>.
+		</para>
+	      </listitem>
+	    </varlistentry>
+	    <varlistentry>
+	      <term>miboot</term>
+	      <listitem>
+		<para>
+		  This prepares the Linux kernel for booting from a
+		  <command>miBoot</command> floppy.
+		</para>
+	      </listitem>
+	    </varlistentry>
+	    <varlistentry>
+	      <term>pmac</term>
+	      <listitem>
+		<para>
+		  While most NewWorld PowerMacs use the bootloader
+		  <command>yaboot</command>, they can also start
+		  directly from Open Firmware.
+		</para>
+	      </listitem>
+	    </varlistentry>
+	    <varlistentry>
+	      <term>prep</term>
+	      <listitem>
+		<para>
+		  The PReP sub-architecture is mainly found on old
+		  RS/6000 systems.  After creating the compressed
+		  kernel, you have to move it to a bootable location,
+		  either by <command>dd</command>ing it onto the PReP
+		  boot partition of a hard disk, or writing it to a CD
+		  using the <option>-prep-boot </option> option of
+		  <command>mkisofs</command>.
+		</para>
+	      </listitem>
+	    </varlistentry>
+	    <varlistentry>
+	      <term>ppcbug</term>
+	      <listitem>
+		<para>
+		  PPCBug is strictly a sub-sub-architecture of the
+		  above-mentioned PReP.  It uses a slightly different
+		  wrapper around the compressed kernel, though.
+		</para>
+	      </listitem>
+	    </varlistentry>
+	  </variablelist>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-k</option></term>
+	<listitem>
+	  <para>Specify the path to the Linux kernel as an
+	    uncompressed ELF image file.  Usually, this filename
+	    contains <filename>vmlinux</filename> in some form.  If
+	    this option is not set, the program will make guesses
+	    based on the release number and the currently running
+	    kernel.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-s</option></term>
+	<listitem>
+	  <para>Specify the path to the System.map file.  This will
+	  greatly enlarge the resulting image, and is only needed if
+	  you intend to use the in-kernel debugger
+	  <command>xmon</command>.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-i</option></term>
+	<listitem>
+	  <para>Specify the path to a ramdisk (initrd) image to
+	  include in the compressed kernel image.  If this option is
+	  not set, the program will look in a location analogous to
+	  the kernel image location, but will continue without a
+	  ramdisk if nothing is found there.  This guess can be turned
+	  off with the <option>-n</option> option.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-d</option></term>
+	<listitem>
+	  <para>Specify the directory containing boot code.  If this
+	  option is not set, the program will try a default directory
+	  and the current directory.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-r</option></term>
+	<listitem>
+	  <para>Specify the release of the kernel.  This option is
+	  only used for guessing path names that have not been specified
+	  explicitly.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-n</option></term>
+	<listitem>
+	  <para>Do not attempt to find an initrd image file if none
+	  was specified with the <option>-i</option> option.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-z</option></term>
+	<listitem>
+	  <para>Assume the initrd image file is already compressed. The
+	  default is to autodetect if the initrd is compressed or not.
+	  </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-u</option></term>
+	<listitem>
+	  <para>Assume the initrd image file is not already compressed. The
+	  default is to autodetect if the initrd is compressed or not.
+	  </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-l</option></term>
+	<listitem>
+	  <para>Allows to set the elf link address, where the kernel will be
+	  relocated inside the firmware.
+	  </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+	<term><option>-v</option></term>
+	<listitem>
+	  <para>Print progress messages, and echo commands as they are
+	  executed.</para>
+	</listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>It is also possible to specify the release number and the
+    kernel image file as the first and second non-option arguments,
+    respectively.  However, the values are only used if they are not
+    already given as option arguments.</para>
+
+  </refsect1>
+  <refsect1>
+    <title>FILES</title>
+
+    <variablelist>
+      <varlistentry>
+        <term>/etc/mkvmlinuz/output</term>
+        <listitem>
+          <para>A shell script fragment that specifies the output file
+          for the compressed kernel image.  It is sourced by
+          &dhpackage; if the output file is not specified on the
+          command line, and therefore should set the shell variable
+          <varname>output</varname> at some point.  The shell
+          variables <varname>arch</varname>,
+          <varname>kernel</varname>, <varname>sysmap</varname>,
+          <varname>initrd</varname>, <varname>objdir</varname>, and
+          <varname>release</varname> are all set at this point and can
+          be used to construct the filename. </para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+
+  </refsect1>
+  <refsect1>
+    <title>AUTHOR</title>
+
+    <para>This manual page was written by &dhusername; &dhemail; for
+    the &debian; system (but may be used by others).  Permission is
+    granted to copy, distribute and/or modify this document under the
+    terms of the &gnu; General Public License, Version 2 any later
+    version published by the Free Software Foundation.  </para>
+
+    <para>On Debian systems, the complete text of the &gnu; General
+    Public License can be found in
+    <filename>/usr/share/common-licenses/GPL</filename>.
+    </para>
+
+  </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/mkvmlinuz.templates ../mkvmlinuz-33+nmu1/debian/mkvmlinuz.templates
--- ../mkvmlinuz-33+nmu1.old/debian/mkvmlinuz.templates	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/mkvmlinuz.templates	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,7 @@
+Template: mkvmlinuz/bootloaders
+Type: select
+Choices: ${choices}
+Default: ${default}
+_Description: Bootloader to use:
+ Your PowerPC sub-architecture supports more than one bootloader, please
+ select the one you want to use.
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/POTFILES.in ../mkvmlinuz-33+nmu1/debian/po/POTFILES.in
--- ../mkvmlinuz-33+nmu1.old/debian/po/POTFILES.in	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/POTFILES.in	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1 @@
+[type: gettext/rfc822deb] mkvmlinuz.templates
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/cs.po ../mkvmlinuz-33+nmu1/debian/po/cs.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/cs.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/cs.po	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,40 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-11-01 20:32+0100\n"
+"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
+"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Zavaděč, který se má použít:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Vaše PowerPC podarchitektura podporuje více zavaděčů. Vyberte si prosím "
+"ten, který chcete použít."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/de.po ../mkvmlinuz-33+nmu1/debian/po/de.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/de.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/de.po	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,42 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+# Holger Wansing <linux@wansing-online.de>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz 24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-11-03 21:13+0100\n"
+"Last-Translator: Holger Wansing <linux@wansing-online.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Zu verwendender Bootloader:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Ihre PowerPC-Unterarchitektur unterstützt mehr als einen Bootloader; wählen "
+"Sie bitte aus, welchen Sie verwenden möchten."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/eu.po ../mkvmlinuz-33+nmu1/debian/po/eu.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/eu.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/eu.po	2008-04-15 01:41:39.858331000 +0200
@@ -0,0 +1,41 @@
+# translation of mkvmlinuz-eu.po to Euskara
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans#
+#    Developers do not need to manually edit POT or PO files.
+#
+# Piarres Beobide <pi@beobide.net>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz-eu\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2008-04-14 12:08+0200\n"
+"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
+"Language-Team: Euskara <debian-l10n-basque@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Erabiliko nahi den abio-kargatzailea:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Zure PowerPC azpi-arkitekturak abio kargatzaile bat baino gehiago onartzen "
+"du, mesedez hautatu erabili nahi duzuna."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/fi.po ../mkvmlinuz-33+nmu1/debian/po/fi.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/fi.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/fi.po	2008-04-15 01:41:20.742331000 +0200
@@ -0,0 +1,30 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2008-04-12 08:14+0200\n"
+"Last-Translator: Esko Arajärvi <edu@iki.fi>\n"
+"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Finnish\n"
+"X-Poedit-Country: FINLAND\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Käytettävä alkulatausohjelma:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Käytetty PowerPC-aliarkkitehtuuri tukee useampia alkulatausohjelmia. Valitse "
+"niistä yksi."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/fr.po ../mkvmlinuz-33+nmu1/debian/po/fr.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/fr.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/fr.po	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,40 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-11-01 16:53+0100\n"
+"Last-Translator: Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.fr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Programme de démarrage à utiliser :"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Plusieurs programmes de démarrage gèrent cette sous-architecture PowerPC. "
+"Veuillez sélectionner lequel utiliser."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/gl.po ../mkvmlinuz-33+nmu1/debian/po/gl.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/gl.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/gl.po	2008-04-15 01:41:34.358331000 +0200
@@ -0,0 +1,31 @@
+# Galician translation of mkvmlinuz's debconf templates
+# This file is distributed under the same license as the mkvmlinuz package.
+# Jacobo Tarrio <jtarrio@debian.org>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2008-04-12 20:17+0100\n"
+"Last-Translator: Jacobo Tarrio <jtarrio@debian.org>\n"
+"Language-Team: Galician <proxecto@trasno.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Cargador de inicio a empregar:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"A súa sub-arquitectura PowerPC ten soporte de máis dun cargador de inicio; "
+"escolla o que quere empregar."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/it.po ../mkvmlinuz-33+nmu1/debian/po/it.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/it.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/it.po	2008-04-11 22:58:03.011934000 +0200
@@ -0,0 +1,32 @@
+# Italian (it) translation of debconf templates for mkvmlinuz
+# Copyright (C) 2008 Software in the Public Interest
+# This file is distributed under the same license as the mkvmlinuz package.
+# Luca Monducci <luca.mo@tiscali.it>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz 33 italian debconf templates\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2008-01-08 21:02+0100\n"
+"Last-Translator: Luca Monducci <luca.mo@tiscali.it>\n"
+"Language-Team: Italian <debian-l10n-italian@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Bootloader da usare:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"La sottoarchitettura PowerPC della macchina supporta più di un bootloader, "
+"selezionare quello che si desidera usare."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/ja.po ../mkvmlinuz-33+nmu1/debian/po/ja.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/ja.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/ja.po	2007-03-05 18:03:55.000000000 +0100
@@ -0,0 +1,31 @@
+# Japanese debconf templates translation for mkvmlinuz.
+# Copyright (C) 2007 Noritada Kobayashi
+# This file is distributed under the same license as the mkvmlinuz package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz (debconf) 32\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2007-03-06 00:45+0900\n"
+"Last-Translator: Noritada Kobayashi <nori1@dolphin.c.u-tokyo.ac.jp>\n"
+"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "使用するブートローダ:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"この PowerPC サブアーキテクチャでは 1 つ以上のブートローダがサポートされてい"
+"ます。使用したいものを選択してください。"
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/nl.po ../mkvmlinuz-33+nmu1/debian/po/nl.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/nl.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/nl.po	2008-04-11 22:57:44.535698000 +0200
@@ -0,0 +1,41 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2007-03-09 19:18+0100\n"
+"Last-Translator: Bart Cornelis <cobaco@skolelinux.no>\n"
+"Language-Team: debian-l10n-dutch <debian-l10n-dutch@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Dutch\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Te gebruiken opstartlader:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Uw PowerPC sub-architectuur ondersteunt meer dan één opstartlader, welke "
+"wilt u gebruiken?"
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/pt.po ../mkvmlinuz-33+nmu1/debian/po/pt.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/pt.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/pt.po	2007-01-14 14:35:54.000000000 +0100
@@ -0,0 +1,31 @@
+# Portuguese translation for mkvmlinuz's debconf messages
+# Rui Branco <ruipb@debianpt.org>, 2006.
+# 2006-12-03 - Rui Branco - Initial translation
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz 27\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-12-03 01:10+0000\n"
+"Last-Translator: Rui Branco <ruipb@debianpt.org>\n"
+"Language-Team: Portuguese <traduz@debianpt.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Gestor de arranque a utilizar:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"A sua sub-arquitectura PowerPC suporta mais do que um gestor de arranque, "
+"por favor escolha aquele que quer utilizar."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/pt_BR.po ../mkvmlinuz-33+nmu1/debian/po/pt_BR.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/pt_BR.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/pt_BR.po	2007-01-14 14:24:09.000000000 +0100
@@ -0,0 +1,44 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+# Felipe Augusto van de Wiel (faw) <faw@cathedrallabs.org>, 2006.
+# Licensed under the same terms of the mkvmlinuz package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz (20061109)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-11-09 16:30-0200\n"
+"Last-Translator: Felipe Augusto van de Wiel (faw) <faw@cathedrallabs.org>\n"
+"Language-Team: l10n portuguese <debian-l10n-portuguese@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"pt_BR utf-8\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Carregador de inicialização a ser usado:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Sua sub-arquitetura PowerPC suporta mais de um carregador de inicialização, "
+"por favor selecione aquele que você quer usar."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/ro.po ../mkvmlinuz-33+nmu1/debian/po/ro.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/ro.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/ro.po	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,42 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+# Eddy Petrișor <eddy.petrisor@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: ro\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-11-01 18:56+0200\n"
+"Last-Translator: Eddy Petrișor <eddy.petrisor@gmail.com>\n"
+"Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3;plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Încărcătorul de sistem folosit:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr "Sub-arhitectura PowerPC folosită de dumneavoastră suportă mai mult de un încărcător  de sistem; selectaţi-l pe cel care doriţi să-l utilizaţi."
+
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/ru.po ../mkvmlinuz-33+nmu1/debian/po/ru.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/ru.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/ru.po	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,43 @@
+# translation of mkvmlinuz_debconf_ru.po to Russian
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans#
+#    Developers do not need to manually edit POT or PO files.
+#
+# Yuri Kozlov <kozlov.y@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: 24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-11-06 20:25+0300\n"
+"Last-Translator: Yuri Kozlov <kozlov.y@gmail.com>\n"
+"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Используемый загрузчик:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Для субархитектуры вашего PowerPC поддерживается несколько загрузчиков; "
+"выберите тот, который хотите использовать."
+
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/sv.po ../mkvmlinuz-33+nmu1/debian/po/sv.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/sv.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/sv.po	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,36 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans#
+#    Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinuz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-11-01 07:39+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Välj din starthanterare:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Your PowerPC sub-architecture supports more than one bootloader, please select the one you want to use."
+msgstr "Din PowerPC-underarkitektur har stöd för fler än en starthanterare, välj en som du vill använda."
+
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/templates.pot ../mkvmlinuz-33+nmu1/debian/po/templates.pot
--- ../mkvmlinuz-33+nmu1.old/debian/po/templates.pot	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/templates.pot	2007-01-14 14:21:24.000000000 +0100
@@ -0,0 +1,39 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr ""
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/po/vi.po ../mkvmlinuz-33+nmu1/debian/po/vi.po
--- ../mkvmlinuz-33+nmu1.old/debian/po/vi.po	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/po/vi.po	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,33 @@
+# Vietnamese translation for MK VM Linux.
+# Copyright © 2006 Gnome i18n Project for Vietnamese.
+# Clytie Siddall <clytie@riverland.net.au>, 2006.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: mkvmlinux\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-31 08:09+0100\n"
+"PO-Revision-Date: 2006-11-01 16:26+1030\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.6fc1\n"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid "Bootloader to use:"
+msgstr "Bộ tải khởi động cần dùng:"
+
+#. Type: select
+#. Description
+#: ../mkvmlinuz.templates:1001
+msgid ""
+"Your PowerPC sub-architecture supports more than one bootloader, please "
+"select the one you want to use."
+msgstr ""
+"Kiến trúc phụ PowerPC này hỗ trợ nhiều bộ tải khởi động: hãy chọn điều nào "
+"bạn muốn sử dụng."
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/postinst ../mkvmlinuz-33+nmu1/debian/postinst
--- ../mkvmlinuz-33+nmu1.old/debian/postinst	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/postinst	2007-01-14 14:21:25.000000000 +0100
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+set -e
+
+. /usr/share/debconf/confmodule
+
+#DEBHELPER#
diff -Nru ../mkvmlinuz-33+nmu1.old/debian/rules ../mkvmlinuz-33+nmu1/debian/rules
--- ../mkvmlinuz-33+nmu1.old/debian/rules	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/debian/rules	2007-01-22 12:20:54.000000000 +0100
@@ -0,0 +1,65 @@
+#!/usr/bin/make -f
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+INSTALL_DATA = install -m 644 -o root -g root
+INSTALL_EXEC = install -m 755 -o root -g root
+
+build: build-stamp
+build-stamp: mkvmlinuz.8
+	dh_testdir
+	touch build-stamp
+
+	make -C boot
+
+%.8:	debian/%.sgml
+	/usr/bin/docbook-to-man $< > $@
+
+
+clean:
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp
+
+	rm -f mkvmlinuz.8
+	debconf-updatepo
+	make -C boot clean
+
+	dh_clean 
+
+install: build
+	dh_testdir
+	dh_testroot
+	dh_clean -k 
+	dh_installdirs
+
+	$(INSTALL_EXEC) mkvmlinuz $(CURDIR)/debian/mkvmlinuz/usr/sbin
+	$(INSTALL_EXEC) debian/kernel-image/postinst $(CURDIR)/debian/mkvmlinuz/etc/kernel/postinst.d/mkvmlinuz
+	$(INSTALL_EXEC) debian/kernel-image/postrm $(CURDIR)/debian/mkvmlinuz/etc/kernel/postrm.d/mkvmlinuz
+	$(INSTALL_DATA) debian/lintian.overrides $(CURDIR)/debian/mkvmlinuz/usr/share/lintian/overrides/mkvmlinuz
+	$(INSTALL_EXEC) mkvmlinuz $(CURDIR)/debian/mkvmlinuz/usr/sbin
+	$(INSTALL_DATA) mkvmlinuz.8 $(CURDIR)/debian/mkvmlinuz/usr/share/man/man8
+	$(INSTALL_DATA) output $(CURDIR)/debian/mkvmlinuz/etc/mkvmlinuz
+	$(INSTALL_EXEC) boot/addnote $(CURDIR)/debian/mkvmlinuz/usr/lib/mkvmlinuz
+	$(INSTALL_DATA) boot/*.o boot/zImage.lds $(CURDIR)/debian/mkvmlinuz/usr/lib/mkvmlinuz
+
+binary-indep: build install
+
+binary-arch: build install
+	dh_testdir
+	dh_testroot
+	dh_installchangelogs 
+	dh_installdocs
+	dh_installman
+	dh_installdebconf
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
diff -Nru ../mkvmlinuz-33+nmu1.old/mkvmlinuz ../mkvmlinuz-33+nmu1/mkvmlinuz
--- ../mkvmlinuz-33+nmu1.old/mkvmlinuz	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/mkvmlinuz	2007-01-25 19:02:17.000000000 +0100
@@ -0,0 +1,470 @@
+#!/bin/bash
+
+# usage information
+usage() {
+    echo 'usage:'
+    echo ' -o <output>  - path to output file for compressed kernel image'
+    echo ' -a <arch>    - PowerPC sub-architecture'
+    echo ' -k <kernel>  - path to kernel image file in ELF format'
+    echo ' -s <sysmap>  - path to System.map file'
+    echo ' -i <initrd>  - path to initrd image file'
+    echo ' -d <objdir>  - path to directory with additional object files'
+    echo ' -r <release> - kernel release number'
+    echo ' -l <address> - Address where the kernel should be relocated'
+    echo ' -n           - do not use an initrd'
+    echo ' -z           - assume the initrd image file is already compressed'
+    echo ' -u           - assume the initrd image file is not compressed'
+    echo ' -v           - verbose operation (print commands)'
+
+    exit 0
+}
+
+# echo a shell command if desired, and execute it
+do_cmd() {
+    if test -n "$verbose"; then
+	echo $@
+	eval $@
+    else
+	eval $@ > /dev/null 2>&1
+    fi
+    return
+}
+
+# parse command line
+while getopts o:k:s:i:d:r:a:l:nuzv option; do
+    case "$option" in
+	o) output=$OPTARG ;;
+	k) kernel=$OPTARG ;;
+	s) sysmap=$OPTARG ;;
+	i) initrd=$OPTARG ;;
+	d) objdir=$OPTARG ;;
+	r) release=$OPTARG ;;
+	a) arch=$OPTARG ;;
+	l) linkaddr=$OPTARG ;;
+	n) noinitrd="Yes" ;;
+	z) compressed="Yes" ;;
+	u) compressed="No" ;;
+	v) verbose="Yes" ;;
+	*) usage; exit 0 ;;
+    esac
+done
+
+# Let's provide some subarch dependent defaults
+case $arch in
+    apus|miboot)
+    	# miboot and apus don't use builtin initrds,
+	# and need to stay elf kernels, as we don't use a wrapper.
+    	elf="Yes"
+    	noinitrd="Yes"
+    	;;
+esac
+
+# use non-option arguments as release version and kernel image file if needed
+shift $(( $OPTIND - 1 ))
+if test -z "$release" -a -n "$1"; then
+    release=$1
+fi
+if test -z "$kernel" -a -n "$2"; then
+    kernel=$2
+fi
+
+# if no sub-architecture was specified, read it from /proc
+if test -z "$arch"; then
+    case $(grep ^machine /proc/cpuinfo) in
+	*PReP*Blackhawk*) arch=ppcbug ;;
+	*PReP*) arch=prep ;;
+	*CHRP*) arch=chrp ;;
+	*Amiga*) arch=apus ;;
+	*)
+	    case $(grep ^pmac-generation /proc/cpuinfo) in
+		*NewWorld) arch=pmac ;;
+		*OldWorld) arch=coff ;;
+	    esac
+	    ;;
+    esac
+fi
+
+test -z "$verbose" || echo === Building for sub-architecture $arch.
+
+# if no kernel was specified, try to find one
+if test -z "$kernel"; then
+
+    # guess the location of a kernel
+    if kernel=/boot/vmlinux-$release; test -n "$release" -a -r $kernel; then
+	:
+    elif kernel=/boot/vmlinux-$(uname -r); test -r $kernel; then
+	:
+    else
+	kernel=""
+    fi
+
+    # we couldn't find a kernel, and therefore give up
+    if test -z "$kernel"; then
+	echo Could not find a kernel image file, please specify one.
+	exit 1
+    fi
+
+    # sanitize the location of the kernel
+    kernel=$(readlink -f $kernel)
+
+fi
+
+test -z "$verbose" || echo === Using kernel image file $kernel.
+
+# if no initrd was specified, try to find one that goes with the kernel
+if test -z "$noinitrd" -a -z "$initrd"; then
+
+    # guess the location of an initrd, but don't try too hard
+    if initrd=${kernel/vmlinux/initrd.img}; test -r $initrd; then
+	:
+    else
+	initrd=""
+    fi
+
+    # sanitize the location of the initrd
+    if test -n "$initrd"; then
+	initrd=$(readlink -f $initrd)
+    fi
+
+fi
+
+test -z "$verbose" -o -z "$initrd" || echo === Using initrd image file $initrd.
+
+# if no release was specified, extract it from the kernel image name
+if test -z "$release"; then
+    release=$(echo $kernel | sed s/.*vmlinux-//)
+    if echo $release | grep -q '2\.[46]\.[0-9]*'; then
+	:
+    else
+	release=""
+    fi
+fi
+
+if dpkg --compare-versions $release ge 2.6.16 && test "$arch" != "prep" ; then
+  post_2_6_16=Yes
+else
+  post_2_6_16=
+fi
+
+if dpkg --compare-versions $release ge 2.6.18 && test "$arch" != "prep" ; then
+  post_2_6_18=Yes
+else
+  post_2_6_18=
+fi
+
+if dpkg --compare-versions $release ge 2.6.19 && test "$arch" != "prep" ; then
+  post_2_6_19=Yes
+else
+  post_2_6_19=
+fi
+
+test -z "$verbose" || echo === Release version seems to be $release.
+
+# if no object file directory was specified, try to find one
+if test -z "$objdir"; then
+
+    # try using $STEM-image, then linux-image, then kernel-image
+    # in a default location, then use the current directory
+    if objdir=/usr/lib/$STEM-image-$release; test -d $objdir; then
+	:
+    elif objdir=/usr/lib/linux-image-$release; test -d $objdir; then
+	:
+    elif objdir=/usr/lib/kernel-image-$release; test -d $objdir; then
+	:
+    # /usr/lib/mkvmlinuz is a copy of arch/powerpc/boot taken from 2.6.17.
+    # It is used as a fallback when a kernel package is not present
+    # or when it does not provide the tools.
+    elif objdir=/usr/lib/mkvmlinuz; test -d $objdir && test "$arch" = "chrp"; then
+    	post_2_6_16=Yes
+    else
+	objdir="$PWD"
+    fi
+fi
+if test \! -d "$objdir"; then
+    echo Object directory does not exist.
+    exit 1
+fi
+
+test -z "$verbose" || echo === Using object files from $objdir.
+
+# if no output file was specified, source the configuration file
+if test -z "$output" -a -r /etc/mkvmlinuz/output; then
+    . /etc/mkvmlinuz/output
+fi
+
+# we absolutely need an output file, and won't attempt guesses
+if test -z "$output"; then
+    echo Please specify an output file.
+    exit 1
+fi
+
+test -z "$verbose" || echo === Building a bootable compressed kernel image in $output.
+
+# create a work directory
+work=$(mktemp -d)
+
+test -z "$verbose" || echo === Doing build in $work.
+
+# utilities
+if test "$post_2_6_16"; then
+  ADDNOTE=$objdir/addnote # must be present in mkvmlinuz fallback tools
+  if test \! -f "$ADDNOTE"; then
+      echo "Missing utility: $ADDNOTE"
+      exit 1
+  fi
+  ADDRAMDISK=$objdir/addRamDisk # unseen in mkvmlinuz fallback tools
+  objs=$objdir
+  STRIP="strip -s -R .comment"
+  GZIP="gzip --force --best"
+else
+  ADDNOTE=$objdir/utils/addnote # unseen in -prep kernel package, but present in -powerpc kernel package
+  if test \! -f "$ADDNOTE" && echo "$release"|grep -q -- '-powerpc$'; then
+  # addnote must exist if we use a -powerpc kernel package
+      echo "Missing utility: $ADDNOTE"
+      exit 1
+  fi
+  HACKOFF=$objdir/utils/hack-coff # unseen in kernel package tools
+  MKNOTE=$objdir/utils/mknote # unseen in kernel package tools
+  MKPREP=$objdir/utils/mkprep # must be present in kernel package tools
+  if test \! -f "$MKPREP"; then
+      echo "Missing utility: $MKPREP"
+      exit 1
+  fi
+  MKBUGBOOT=$objdir/utils/mkbugboot # must be present in kernel package tools
+  if test \! -f "$MKBUGBOOT"; then
+      echo "Missing utility: $MKBUGBOOT"
+      exit 1
+  fi
+  libs=$objdir/lib
+  objs=$objdir/obj
+  GZIP=gzip
+  STRIP=strip
+fi
+LD=ld
+OBJCOPY=objcopy
+MV=mv
+
+case "$arch","$post_2_6_16","$release" in
+    apus,Yes,*|miboot,Yes,*|prep,Yes,*|ppcbug,Yes,*)
+	;;
+    chrp,Yes,*|pmac,Yes,*)
+	dummy_kernel=$objs/mkvmlinuz-kernel-vmlinux.strip.o
+	dummy_initrd=$objs/mkvmlinuz-kernel-initrd.o
+	OBJS="$objs/crt0.o $objs/string.o $objs/prom.o $objs/stdio.o $objs/main.o $objs/div64.o"
+	if test "$post_2_6_18"; then
+		OBJS="$OBJS $objs/inffast.o $objs/inflate.o $objs/inftrees.o"
+	else
+		OBJS="$OBJS $objs/infblock.o $objs/infcodes.o $objs/inffast.o $objs/inflate.o $objs/inftrees.o $objs/infutil.o"
+	fi
+	;;
+    apus,,*|miboot,,*|*,Yes,*)
+	;;
+    prep,,2.6*|ppcbug,,2.6*)
+	test -d $objs/simple && objs=$objs/simple
+	if test -r $objs/legacy.o; then prepmap=legacy; else prepmap=prepmap; fi
+	OBJS="$objs/head.o $objs/relocate.o $objs/$prepmap.o $objs/misc.o $objs/misc-prep.o $objs/mpc10x_memory.o"
+	LIBS="$libs/common.a $libs/ppc.a $libs/of.a"
+	dummy=$objs/dummy.o
+	;;
+    pmac,,2.6*)
+	test -d $objs/openfirmware && objs=$objs/openfirmware
+	OBJS="$objs/start.o $objs/misc.o $objs/common.o $objs/newworldmain.o"
+	LIBS="$libs/lib.a $libs/ppc.a $libs/of.a $libs/common.a"
+	dummy=$objs/dummy.o
+	;;
+    *,,2.6*)
+	test -d $objs/openfirmware && objs=$objs/openfirmware
+	OBJS="$objs/start.o $objs/misc.o $objs/common.o $objs/${arch}main.o"
+	LIBS="$libs/lib.a $libs/ppc.a $libs/of.a $libs/common.a"
+	dummy=$objs/dummy.o
+	;;
+    chrp,,2.4*)
+	test -d $objs/chrp && objs=$objs/chrp
+	OBJS="$objs/start.o $objs/main.o $objs/misc.o"
+	OBJS="$OBJS $objs/../common/string.o $objs/../common/ofcommon.o"
+	LIBS="$libs/lib.a $libs/zlib.a $libs/of1275.a"
+	dummy=$objs/../common/dummy.o
+	;;
+esac
+
+# off we go...
+
+# create the compressed initrd image file
+if test -n "$initrd"; then
+    test -z "$verbose" || echo === Creating compressed initrd image initrd.gz...
+    if test -z "$compressed"; then
+        # Detect if the file was already compressed by gzip.
+    	if test "`od -A n -c -N 2 $initrd`" = " 037 213"; then 
+	    compressed="Yes"
+	else
+	    compressed="No"
+	fi
+    fi
+    case "$compressed" in
+    	Yes)
+	    do_cmd cp -p $initrd $work/initrd.gz
+	    ;;
+    	No)
+	    do_cmd cp -p $initrd $work/initrd
+	    do_cmd $GZIP $work/initrd
+	    ;;
+    esac
+fi
+
+# If we are on ARCH=powerpc and 2.6.19 or higher, we just call the provided wrapper script.
+
+if test -n "$post_2_6_19" &&  test "$arch" != "prep"; then
+  WRAPPER=$objdir/wrapper
+  vmlinuz=$work/vmlinuz.$arch
+  if test -n "$initrd"; then
+    INITRD="-i $work/initrd.gz"
+  fi
+  $WRAPPER -c -o $vmlinuz -p $arch $INITRD -D $objdir -W $work $kernel
+else 
+  # create the compressed kernel image file
+  test -z "$verbose" || echo === Creating compressed kernel image vmlinux.gz...
+  if test -n "$elf" || test -n "$post_2_6_16"; then
+      do_cmd $STRIP $kernel -o $work/vmlinux
+  else
+      do_cmd $OBJCOPY -O binary $kernel $work/vmlinux
+  fi
+  do_cmd $GZIP $work/vmlinux
+  
+  # create the raw ELF image file; this is not needed for the miBoot image
+  if test -z "$elf"; then
+      test -z "$verbose" || echo === Putting everything into ELF image file image.o...
+      if test -n "$post_2_6_16"; then
+        do_cmd $OBJCOPY $dummy_kernel $work/dummy_kernel.o \
+      	--add-section=.kernel:vmlinux.strip=$work/vmlinux.gz \
+  	--set-section-flags=.kernel:vmlinux.strip=contents,alloc,load,readonly,data
+        if test -n "$initrd"; then
+  	do_cmd $OBJCOPY $dummy_initrd $work/dummy_initrd.o \
+  	    --add-section=.kernel:initrd=$work/initrd.gz \
+  	    --set-section-flags=.kernel:initrd=contents,alloc,load,readonly,data
+        fi
+      else
+        do_cmd $OBJCOPY -R .comment $dummy $work/image.o
+        do_cmd $OBJCOPY $work/image.o $work/image.o \
+  	--add-section=.image=$work/vmlinux.gz \
+  	--set-section-flags=.image=contents,alloc,load,readonly,data
+        if test -n "$sysmap"; then
+  	do_cmd $OBJCOPY $work/image.o $work/image.o \
+  	    --add-section=.sysmap=$sysmap \
+  	    --set-section-flags=.sysmap=contents,alloc,load,readonly,data
+        fi
+        if test -n "$initrd"; then
+  	do_cmd $OBJCOPY $work/image.o $work/image.o \
+  	    --add-section=.ramdisk=$work/initrd.gz \
+  	    --set-section-flags=.ramdisk=contents,alloc,load,readonly,data
+        fi
+      fi
+  else
+  	do_cmd $MV $work/vmlinux.gz $work/vmlinuz.$arch.tmp
+  fi
+
+  # link everything into the final image file and make it bootable
+  vmlinuz=$work/vmlinuz.$arch
+  if test "$post_2_6_16"; then
+    LD_ARGS="-m elf32ppc -T $objs/zImage.lds"
+  else
+    LD_ARGS="-T $objdir/boot/ld.script"
+  fi
+  OBJCOPY_ARGS="-R .comment"
+  test -z "$verbose" || echo === Creating bootable kernel image file vmlinuz.$arch...
+  case "$arch","$post_2_6_16","$release" in
+      chrp,Yes,*|pmac,Yes,*)
+  	if test -n "$initrd"; then
+  		do_cmd $LD $LD_ARGS -o $vmlinuz $OBJS $work/dummy_kernel.o $work/dummy_initrd.o
+  	else
+  		do_cmd $LD $LD_ARGS -o $vmlinuz $OBJS $work/dummy_kernel.o 
+  	fi
+  	do_cmd $ADDNOTE $vmlinuz
+      	;;
+      chrp,,2.6*)
+      	if [ -z "$linkaddr" ]; then linkaddr=0x00800000; fi
+  	LD_ARGS="$LD_ARGS -e _start -Ttext $linkaddr"
+  	do_cmd $LD -o $vmlinuz $LD_ARGS $objs/crt0.o $OBJS $work/image.o $LIBS
+  	do_cmd $OBJCOPY $OBJCOPY_ARGS $vmlinuz $vmlinuz
+  	do_cmd cp -p $objdir/boot/note $work
+  	do_cmd $ADDNOTE $vmlinuz
+  	;;
+      chrp,,2.4*)
+      	if [ -z "$linkaddr" ]; then linkaddr=0x00800000; fi
+  	LD_ARGS="$LD_ARGS -e _start -Ttext $linkaddr"
+  	do_cmd $LD -o $vmlinuz $LD_ARGS $objs/../common/crt0.o $OBJS $work/image.o $LIBS
+  	do_cmd $OBJCOPY $OBJCOPY_ARGS $vmlinuz $vmlinuz
+  	do_cmd $ADDNOTE $vmlinuz
+  	;;
+      coff,,2.6*)
+      	if [ -z "$linkaddr" ]; then linkaddr=0x00500000; fi
+  	LD_ARGS="$LD_ARGS -e _start -Ttext $linkaddr -Bstatic"
+  	OBJCOPY_ARGS="-O aixcoff-rs6000 -R .stab -R .stabstr $OBJCOPY_ARGS"
+  	do_cmd $LD -o $vmlinuz $LD_ARGS $objs/coffcrt0.o $OBJS $work/image.o $LIBS
+  	do_cmd $OBJCOPY $OBJCOPY_ARGS $vmlinuz $vmlinuz
+  	do_cmd $HACKOFF $vmlinuz
+  	;;
+      pmac,,2.6*)
+      	if [ -z "$linkaddr" ]; then linkaddr=0x01000000; fi
+  	LD_ARGS="$LD_ARGS -e _start -Ttext $linkaddr"
+  	OBJCOPY_ARGS="--add-section=.note=$work/note $OBJCOPY_ARGS"
+  	do_cmd $LD -o $vmlinuz $LD_ARGS $objs/crt0.o $OBJS $LIBS $work/image.o
+  	do_cmd $MKNOTE > $work/note
+  	do_cmd $OBJCOPY $OBJCOPY_ARGS $vmlinuz $vmlinuz
+  	;;
+      ppcbug,*,2.6*)
+      	if [ -z "$linkaddr" ]; then linkaddr=0x00800000; fi
+  	LD_ARGS="$LD_ARGS -Ttext $linkaddr -Bstatic"
+  	OBJCOPY_ARGS="-O elf32-powerpc $OBJCOPY_ARGS -R .stab -R .stabstr -R .sysmap"
+  	do_cmd $LD -o $vmlinuz $LD_ARGS $OBJS $work/image.o $LIBS
+  	do_cmd $OBJCOPY $OBJCOPY_ARGS $vmlinuz $vmlinuz.tmp
+  	do_cmd $MKBUGBOOT $vmlinuz.tmp $vmlinuz
+  	;;
+      prep,*,2.6*)
+      	if [ -z "$linkaddr" ]; then linkaddr=0x00800000; fi
+  	LD_ARGS="$LD_ARGS -Ttext $linkaddr -Bstatic"
+  	OBJCOPY_ARGS="-O elf32-powerpc $OBJCOPY_ARGS -R .stab -R .stabstr -R .sysmap"
+  	do_cmd $LD -o $vmlinuz $LD_ARGS $OBJS $work/image.o $LIBS
+  	do_cmd $OBJCOPY $OBJCOPY_ARGS $vmlinuz $vmlinuz.tmp
+  	do_cmd $MKPREP -pbp $vmlinuz.tmp $vmlinuz
+  	;;
+      miboot,,2.6*|apus,,2.6*)
+          do_cmd $MV $vmlinuz.tmp $vmlinuz
+  	;;
+      *)
+  	echo Sorry, I do not know how to handle PowerPC sub-architecture $arch in version $release.
+  esac
+fi
+
+# move bootable kernel image to its final location and creating symlinks.
+if test -e $vmlinuz; then
+  if test -n "$linkname"; then
+    oldlink="`readlink $linkname`"
+  fi
+  test -z "$verbose" || echo === Moving bootable kernel image file to $output...
+  if test -e $output; then
+    echo Output file $output exists, attempting to back it up...
+    mv $output $output.old 2> /dev/null
+    if test -n "$linkname" && test "$oldlink" = "`basename $output`"; then
+      oldlink=$output.old
+    fi
+  fi
+  cat $vmlinuz > $output
+  if test -n "$linkname"; then
+    test -z "$verbose" || echo Creating symlink : $linkname -\> $output
+    if test -L "$linkname"; then
+      unlink $linkname
+    fi
+    ln -sf "`basename $output`" $linkname
+    if test -n "$oldlink"; then
+      test -z "$verbose" || echo Creating backup symlink : $linkname.old -\> $oldlink
+      if test -L "$linkname.old"; then
+    	unlink $linkname.old
+      fi
+    ln -sf $oldlink $linkname.old
+    fi
+  fi
+fi
+
+# clean up
+test -z "$verbose" || echo === Cleaning up...
+rm -rf $work
diff -Nru ../mkvmlinuz-33+nmu1.old/output ../mkvmlinuz-33+nmu1/output
--- ../mkvmlinuz-33+nmu1.old/output	1970-01-01 01:00:00.000000000 +0100
+++ ../mkvmlinuz-33+nmu1/output	2007-01-14 14:21:33.000000000 +0100
@@ -0,0 +1,31 @@
+# This is a shell script fragment that is sourced by mkvmlinuz(8) in
+# order to determine the output file for the compressed kernel image.
+# if the output file is not specified on the command line.  Therefore,
+# it should set the shell variable "output" at some point.
+
+# When this fragment is sourced, the following shell variables are set
+# and may be used to construct the filename:
+#
+# arch    - PowerPC sub-architecture
+# kernel  - path to kernel image file in uncompressed ELF format
+# sysmap  - path to System.map file
+# initrd  - path to ramdisk (initrd) image file
+# objdir  - path to directory with additional object files
+# release - kernel release number
+
+# Example:
+output=/boot/vmlinuz-$release
+
+# Simple example:
+#output=/vmlinuz
+
+# Sophisticated example:
+#if test -z "$initrd"; then
+#output=/boot/vmlinuz-$release.$arch
+#else
+#output=/boot/vmlinuz-initrd-$release.$arch
+#fi
+
+# Let's define also the name of the symlink here.
+# An empty $linkname means no symlink created.
+linkname=/boot/vmlinuz

Attachment: signature.asc
Description: Digital signature


Reply to: