offset = uml_reserved - uml_physmem;
        map_size = len - offset;
        if(map_size <= 0) {
-               printf("Too few physical memory! Needed=%d, given=%d\n",
-                      offset, len);
+               os_warn("Too few physical memory! Needed=%lu, given=%lu\n",
+                       offset, len);
                exit(1);
        }
 
        err = os_map_memory((void *) uml_reserved, physmem_fd, offset,
                            map_size, 1, 1, 1);
        if (err < 0) {
-               printf("setup_physmem - mapping %ld bytes of memory at 0x%p "
-                      "failed - errno = %d\n", map_size,
-                      (void *) uml_reserved, err);
+               os_warn("setup_physmem - mapping %ld bytes of memory at 0x%p "
+                       "failed - errno = %d\n", map_size,
+                       (void *) uml_reserved, err);
                exit(1);
        }
 
 
 static void __init add_arg(char *arg)
 {
        if (strlen(command_line) + strlen(arg) + 1 > COMMAND_LINE_SIZE) {
-               printf("add_arg: Too many command line arguments!\n");
+               os_warn("add_arg: Too many command line arguments!\n");
                exit(1);
        }
        if (strlen(command_line) > 0)
 
 static int __init uml_version_setup(char *line, int *add)
 {
+       /* Explicitly use printf() to show version in stdout */
        printf("%s\n", init_utsname()->release);
        exit(0);
 
 
 static int __init no_skas_debug_setup(char *line, int *add)
 {
-       printf("'debug' is not necessary to gdb UML in skas mode - run \n");
-       printf("'gdb linux'\n");
+       os_warn("'debug' is not necessary to gdb UML in skas mode - run\n");
+       os_warn("'gdb linux'\n");
 
        return 0;
 }
 
        printf(usage_string, init_utsname()->release);
        p = &__uml_help_start;
+       /* Explicitly use printf() to show help in stdout */
        while (p < &__uml_help_end) {
                printf("%s", *p);
                p++;
 
        int err;
 
        if (umid_inited) {
-               printf("umid already set\n");
+               os_warn("umid already set\n");
                return 0;
        }
 
        *add = 0;
        err = set_umid(name);
        if (err == -EEXIST)
-               printf("umid '%s' already in use\n", name);
+               os_warn("umid '%s' already in use\n", name);
        else if (!err)
                umid_inited = 1;
 
 
        int ret;
        argc--;
        if (!argc) {
-               fprintf(stderr, "Not enough arguments\n");
+               os_warn("Not enough arguments\n");
                return 1;
        }
        argv++;
 
        action.sa_restorer = NULL;
        action.sa_handler = last_ditch_exit;
        if (sigaction(sig, &action, NULL) < 0) {
-               printf("failed to install handler for signal %d - errno = %d\n",
-                      sig, errno);
+               os_warn("failed to install handler for signal %d "
+                       "- errno = %d\n", sig, errno);
                exit(1);
        }
 }
        /* disable SIGIO for the fds and set SIGIO to be ignored */
        err = deactivate_all_fds();
        if (err)
-               printf("deactivate_all_fds failed, errno = %d\n", -err);
+               os_warn("deactivate_all_fds failed, errno = %d\n", -err);
 
        /*
         * Let any pending signals fire now.  This ensures
 
 
        dir = fallback_dir;
 warn:
-       printf("Warning: tempdir %s is not on tmpfs\n", dir);
+       os_warn("Warning: tempdir %s is not on tmpfs\n", dir);
 done:
        /* Make a copy since getenv results may not remain valid forever. */
        return strdup(dir);
        if (tempdir == NULL) {
                tempdir = choose_tempdir();
                if (tempdir == NULL) {
-                       fprintf(stderr, "Failed to choose tempdir: %s\n",
+                       os_warn("Failed to choose tempdir: %s\n",
                                strerror(errno));
                        return -1;
                }
        strcat(tempname, template);
        fd = mkstemp(tempname);
        if (fd < 0) {
-               fprintf(stderr, "open - cannot create %s: %s\n", tempname,
+               os_warn("open - cannot create %s: %s\n", tempname,
                        strerror(errno));
                goto out;
        }
        os_info("Checking PROT_EXEC mmap in %s...", tempdir);
        if (addr == MAP_FAILED) {
                err = errno;
-               printf("%s\n", strerror(err));
+               os_warn("%s\n", strerror(err));
                close(fd);
                if (err == EPERM)
-                       printf("%s must be not mounted noexec\n", tempdir);
+                       os_warn("%s must be not mounted noexec\n", tempdir);
                exit(1);
        }
        os_info("OK\n");
 
        driver = str;
        file = strchr(str,',');
        if (file == NULL) {
-               fprintf(stderr, "parse_iomem : failed to parse iomem\n");
+               os_warn("parse_iomem : failed to parse iomem\n");
                goto out;
        }
        *file = '\0';
 
 static int __init set_uml_dir(char *name, int *add)
 {
        if (*name == '\0') {
-               printf("uml_dir can't be an empty string\n");
+               os_warn("uml_dir can't be an empty string\n");
                return 0;
        }
 
 
        uml_dir = malloc(strlen(name) + 2);
        if (uml_dir == NULL) {
-               printf("Failed to malloc uml_dir - error = %d\n", errno);
+               os_warn("Failed to malloc uml_dir - error = %d\n", errno);
 
                /*
                 * Return 0 here because do_initcalls doesn't look at
        sprintf(dir, "%s%s", uml_dir, umid);
        err = remove_files_and_dir(dir);
        if (err)
-               printf("remove_umid_dir - remove_files_and_dir failed with "
-                      "err = %d\n", err);
+               os_warn("%s - remove_files_and_dir failed with err = %d\n",
+                       __func__, err);
 }
 
 __uml_exitcall(remove_umid_dir);