linux-user: If loading fails, print error as string, not number
If the attempt to load the guest executable fails, print the error message as a string, not a number. This requires us to fix a couple of places in loader_exec() where we were returning -1 instead of a valid negative errno. The change allows us to drop the "Unknown binary format" message because the strerror-enhanced message is now a more self-explanatory "Error while loading $guest-binary: Exec format error". Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
		
							parent
							
								
									a05c640915
								
							
						
					
					
						commit
						885c1d10b8
					
				| 
						 | 
				
			
			@ -140,8 +140,9 @@ int loader_exec(const char * filename, char ** argv, char ** envp,
 | 
			
		|||
    bprm->p = TARGET_PAGE_SIZE*MAX_ARG_PAGES-sizeof(unsigned int);
 | 
			
		||||
    memset(bprm->page, 0, sizeof(bprm->page));
 | 
			
		||||
    retval = open(filename, O_RDONLY);
 | 
			
		||||
    if (retval < 0)
 | 
			
		||||
        return retval;
 | 
			
		||||
    if (retval < 0) {
 | 
			
		||||
        return -errno;
 | 
			
		||||
    }
 | 
			
		||||
    bprm->fd = retval;
 | 
			
		||||
    bprm->filename = (char *)filename;
 | 
			
		||||
    bprm->argc = count(argv);
 | 
			
		||||
| 
						 | 
				
			
			@ -165,8 +166,7 @@ int loader_exec(const char * filename, char ** argv, char ** envp,
 | 
			
		|||
            retval = load_flt_binary(bprm,regs,infop);
 | 
			
		||||
#endif
 | 
			
		||||
        } else {
 | 
			
		||||
            fprintf(stderr, "Unknown binary format\n");
 | 
			
		||||
            return -1;
 | 
			
		||||
            return -ENOEXEC;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3569,7 +3569,7 @@ int main(int argc, char **argv, char **envp)
 | 
			
		|||
    ret = loader_exec(filename, target_argv, target_environ, regs,
 | 
			
		||||
        info, &bprm);
 | 
			
		||||
    if (ret != 0) {
 | 
			
		||||
        printf("Error %d while loading %s\n", ret, filename);
 | 
			
		||||
        printf("Error while loading %s: %s\n", filename, strerror(-ret));
 | 
			
		||||
        _exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue