gunzip(dst, 0x400000, im, &len); 
gunzip(dst, PROG_SIZE - PROG_START, im, &len); 
boot(int a1, int a2, void *prom){    unsigned sa, len;    void *dst;    unsigned char *im;    unsigned int initrd_size, initrd_start;    printf("chrpboot starting: loaded at 0x%p\n\r", &_start);    initrd_size = &__ramdisk_end - &__ramdisk_begin;    if (initrd_size) {	initrd_start = (RAM_END - initrd_size) & ~0xFFF;	a1 = initrd_start;	a2 = initrd_size;	claim(initrd_start, RAM_END - initrd_start, 0);	printf("initial ramdisk moving 0x%x <- 0x%p (%x bytes)\n\r",	       initrd_start, &__ramdisk_begin, initrd_size);	memcpy((char *)initrd_start, &__ramdisk_begin, initrd_size);    } else {	initrd_start = 0;	initrd_size = 0;	a2 = 0xdeadbeef;    }    im = &__image_begin;    len = &__image_end - &__image_begin;    /* claim 4MB starting at PROG_START */    claim(PROG_START, PROG_SIZE - PROG_START, 0);    dst = (void *) PROG_START;    if (im[0] == 0x1f && im[1] == 0x8b) {	avail_ram = scratch;	begin_avail = avail_high = avail_ram;	end_avail = scratch + sizeof(scratch);	printf("gunzipping (0x%p <- 0x%p:0x%p)...", dst, im, im+len);	gunzip(dst, 0x400000, im, &len);	printf("done %u bytes\n\r", len);	printf("%u bytes of heap consumed, max in use %u\n\r",	       avail_high - begin_avail, heap_max);    } else {	memmove(dst, im, len);    }    flush_cache(dst, len);    make_bi_recs(((unsigned long) dst + len), "chrpboot", _MACH_chrp,		    (PROG_START + PROG_SIZE));    sa = PROG_START;    printf("start address = 0x%x\n\r", sa);    (*(kernel_start_t)sa)(a1, a2, prom, initrd_start, initrd_size);    printf("returned?\n\r");    pause();}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/c49888203d7a316cb947bb8a1cf2ae191f28bcd3/chrpmain.c/buggy/arch/ppc/boot/openfirmware/chrpmain.c