[PATCH] Correct handling of gcc-[ar|nm|ranlib] exit codes
Meador Inge
meadori@codesourcery.com
Thu Sep 27 13:53:00 GMT 2012
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 <meadori@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;
}
More information about the Gcc-patches
mailing list