Hi All, The gcc-[ar|nm|ranlib] LTO utils use 'pex_one' to spawn the wrapped binutils program. However, currently it is blindly returning the value of the 'err' parameter for the exit code. According the documentation [1] 'err' is only set for an error return and 'status' is only set for a successful return.
This patch fixes the bug by appropriately checking the returned status and extracting the exit code when needed. Tested on GNU/Linux and Windows. OK? 2012-09-27 Meador Inge <mead...@codesourcery.com> * gcc-ar.c (main): Handle the returning of the sub-process error code correctly. [1] http://gcc.gnu.org/onlinedocs/libiberty/Functions.html#Functions Index: gcc/gcc-ar.c =================================================================== --- gcc/gcc-ar.c (revision 191792) +++ gcc/gcc-ar.c (working copy) @@ -42,6 +42,7 @@ const char *err_msg; const char **nargv; bool is_ar = !strcmp (PERSONALITY, "ar"); + int exit_code = FATAL_EXIT_CODE; exe_name = PERSONALITY; #ifdef CROSS_DIRECTORY_STRUCTURE @@ -96,6 +97,20 @@ NULL,NULL, &status, &err); if (err_msg) fprintf(stderr, "Error running %s: %s\n", exe_name, err_msg); + else if (status) + { + if (WIFSIGNALED (status)) + { + int sig = WTERMSIG (status); + fprintf (stderr, "%s terminated with signal %d [%s]%s\n", + exe_name, sig, strsignal(sig), + WCOREDUMP(status) ? ", core dumped" : ""); + } + else if (WIFEXITED (status)) + exit_code = WEXITSTATUS (status); + } + else + exit_code = SUCCESS_EXIT_CODE; - return err; + return exit_code; }