} else {
                if ((unsigned long)_start < ei.memsize)
                        fatal("Insufficient memory for kernel at address 0!"
-                              " (_start=%lx)\n\r", _start);
+                              " (_start=%p)\n\r", _start);
        }
 
        /* Finally, gunzip the kernel */
        /* discard up to the actual load data */
        gunzip_discard(&gzstate, ei.elfoffset - sizeof(elfheader));
        len = gunzip_finish(&gzstate, addr, ei.memsize);
-       printf("done 0x%lx bytes\n\r", len);
+       printf("done 0x%x bytes\n\r", len);
 
        flush_cache(addr, ei.loadsize);
 
                if (! initrd_addr)
                        fatal("Can't allocate memory for initial "
                               "ramdisk !\n\r");
-               printf("Relocating initrd 0x%p <- 0x%p (0x%lx bytes)\n\r",
+               printf("Relocating initrd 0x%lx <- 0x%p (0x%lx bytes)\n\r",
                       initrd_addr, old_addr, initrd_size);
                memmove((void *)initrd_addr, old_addr, initrd_size);
        }
 
 #define        EINVAL          22      /* Invalid argument */
 #define ENOSPC         28      /* No space left on device */
 
-extern int printf(const char *fmt, ...);
+extern int printf(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
 
 #define fprintf(fmt, args...)  printf(args)
 
-extern int sprintf(char *buf, const char *fmt, ...);
+extern int sprintf(char *buf, const char *fmt, ...)
+       __attribute__((format(printf, 2, 3)));
 
 extern int vsprintf(char *buf, const char *fmt, va_list args);