[Define to 1 if the system provides __builtin_popcount function])
fi
+AC_CACHE_CHECK([for program_invocation_name], [st_cv_have_program_invocation_name],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
+ [[return !*program_invocation_name]])],
+ [st_cv_have_program_invocation_name=yes],
+ [st_cv_have_program_invocation_name=no])])
+if test "x$st_cv_have_program_invocation_name" = xyes; then
+ AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1],
+ [Define to 1 if the system provides program_invocation_name variable])
+fi
+
AC_CHECK_LIB([dl], [dladdr], [dl_LIBS='-ldl'], [dl_LIBS=])
if test "x$ac_cv_lib_dl_dladdr" = xyes; then
AC_DEFINE([HAVE_DLADDR], [1], [Define to 1 if the system provides dladdr])
static struct tcb **tcbtab;
static unsigned int nprocs, tcbtabsize;
-static const char *progname;
+
+#ifndef HAVE_PROGRAM_INVOCATION_NAME
+char *program_invocation_name;
+#endif
unsigned os_release; /* generated from uname()'s u.release */
msg = NULL;
if (vasprintf(&msg, fmt, p) >= 0) {
if (err_no)
- fprintf(stderr, "%s: %s: %s\n", progname, msg, strerror(err_no));
+ fprintf(stderr, "%s: %s: %s\n",
+ program_invocation_name, msg, strerror(err_no));
else
- fprintf(stderr, "%s: %s\n", progname, msg);
+ fprintf(stderr, "%s: %s\n",
+ program_invocation_name, msg);
free(msg);
} else {
/* malloc in vasprintf failed, try it without malloc */
- fprintf(stderr, "%s: ", progname);
+ fprintf(stderr, "%s: ", program_invocation_name);
vfprintf(stderr, fmt, p);
if (err_no)
fprintf(stderr, ": %s\n", strerror(err_no));
va_start(p, fmt);
verror_msg(0, fmt, p);
}
- fprintf(stderr, "Try '%s -h' for more information.\n", progname);
+ fprintf(stderr, "Try '%s -h' for more information.\n",
+ program_invocation_name);
die();
}
int c, i;
int optF = 0;
- progname = argv[0] ? argv[0] : "strace";
+ if (!program_invocation_name || !*program_invocation_name) {
+ static char name[] = "strace";
+ program_invocation_name =
+ (argv[0] && *argv[0]) ? argv[0] : name;
+ }
strace_tracer_pid = getpid();