# HG changeset patch
# Parent 73da06114bd60792e31b30c4fd95ee5fe340167b
Use getexecname() on Solaris

diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac
--- a/libbacktrace/configure.ac
+++ b/libbacktrace/configure.ac
@@ -242,6 +242,19 @@ fi
 
 AC_CHECK_DECLS(strnlen)
 
+# Check for getexecname function.
+if test -n "${with_target_subdir}"; then
+   case "${host}" in
+   *-*-solaris2*) have_getexecname=yes ;;
+   *) have_getexecname=no ;;
+   esac
+else
+  AC_CHECK_FUNC(getexecname, [have_getexecname=yes], [have_getexename=no])
+fi
+if test "$have_getexecname" = "yes"; then
+  AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.])
+fi
+
 AC_CACHE_CHECK([whether tests can run],
   [libbacktrace_cv_sys_native],
   [AC_RUN_IFELSE([AC_LANG_PROGRAM([], [return 0;])],
diff --git a/libbacktrace/fileline.c b/libbacktrace/fileline.c
--- a/libbacktrace/fileline.c
+++ b/libbacktrace/fileline.c
@@ -49,6 +49,7 @@ fileline_initialize (struct backtrace_st
 {
   int failed;
   fileline fileline_fn;
+  const char *execname;
   int descriptor;
 
   failed = state->fileline_initialization_failed;
@@ -82,7 +83,14 @@ fileline_initialize (struct backtrace_st
   if (state->filename != NULL)
     descriptor = backtrace_open (state->filename, error_callback, data);
   else
-    descriptor = backtrace_open ("/proc/self/exe", error_callback, data);
+    {
+#ifdef HAVE_GETEXECNAME
+      execname = getexecname ();
+#else
+      execname = "/proc/self/exe";
+#endif
+      descriptor = backtrace_open (execname, error_callback, data);
+    }
   if (descriptor < 0)
     failed = 1;
 
