diff --git a/acinclude.m4 b/acinclude.m4
index 43280597a409f972ce96e0edc3413d05eeea225d..9ab684877a09010330dff377b5df4ef7b6f3cb58 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -71,9 +71,12 @@ AC_DEFUN([TOR_CHECK_LDFLAGS], [
     CFLAGS="$CFLAGS -pedantic -Werror"
     LDFLAGS="$LDFLAGS $2 $1"
     LIBS="$LIBS $3"
-    AC_TRY_LINK([], [return 0;],
-                   [AS_VAR_SET(VAR,yes)],
-                   [AS_VAR_SET(VAR,no)])
+    AC_RUN_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [fputs("", stdout)])],
+                  [AS_VAR_SET(VAR,yes)],
+                  [AS_VAR_SET(VAR,no)],
+	          [AC_TRY_LINK([], [return 0;],
+                                   [AS_VAR_SET(VAR,yes)],
+                                   [AS_VAR_SET(VAR,no)])])
     CFLAGS="$tor_saved_CFLAGS"
     LDFLAGS="$tor_saved_LDFLAGS"
     LIBS="$tor_saved_LIBS"
diff --git a/changes/bug6173 b/changes/bug6173
new file mode 100644
index 0000000000000000000000000000000000000000..3b467a9aca9a4c1968e661889b405201787b567a
--- /dev/null
+++ b/changes/bug6173
@@ -0,0 +1,5 @@
+  o Major bugfixes:
+    - Make our linker option detection code more robust against linkers
+      where a bad combination of options completes successfully but
+      makes an unrunnable binary. Fixes bug 6173; bugfix on 0.2.3.17-beta.
+