diff --git a/configure.ac b/configure.ac
index b6d27d18b630ef9a37b385ec2eae0657d8d0c12f..1af433377046ac0776ec9f09659bed89a060fca6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,6 +66,7 @@ AC_LIBTOOL_WIN32_DLL
 dnl libtool setup
 AM_PROG_LIBTOOL
 
+AC_MSG_CHECKING([if we need -no-undefined])
 case $host in
   *-*-cygwin | *-*-mingw* | *-*-pw32*)
     need_no_undefined=yes
@@ -74,9 +75,23 @@ case $host in
     need_no_undefined=no
     ;;
 esac
-
+AC_MSG_RESULT($need_no_undefined)
 AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
 
+AC_MSG_CHECKING([if we need -mimpure-text])
+case $host in
+  *-*-solaris2*)
+    if test "$GCC" = "yes"; then
+      mimpure="yes"
+    fi
+    ;;
+  *)
+    mimpure=no
+    ;;
+esac
+AC_MSG_RESULT($mimpure)
+AM_CONDITIONAL(MIMPURE, test x$mimpure = xyes)
+
 dnl The install stuff has already been taken care of by the automake stuff
 dnl AC_PROG_INSTALL
 AC_PROG_MAKE_SET
diff --git a/lib/Makefile.am b/lib/Makefile.am
index e09e921a5513eb950640ab5fdbde7c329b785ddd..0c3d8a24a3966e9c60170089860f2c517202dbe1 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -54,15 +54,19 @@ VERSION=-version-info 2:2:0
 if NO_UNDEFINED
 # The -no-undefined flag is CRUCIAL for this to build fine on Cygwin.
 UNDEF = -no-undefined
-else
-UNDEF =
+endif
+
+if MIMPURE
+# This is for gcc on Solaris (8+ ?) to avoid "relocations remain against
+# allocatable but non-writable sections" problems.
+MIMPURE = -mimpure-text
 endif
 
 if ARES
 ARESLIB = -lares -L$(top_builddir)/ares
 endif
 
-libcurl_la_LDFLAGS = $(UNDEF) $(VERSION) $(ARESLIB)
+libcurl_la_LDFLAGS = $(UNDEF) $(VERSION) $(ARESLIB) $(MIMPURE)
 
 libcurl_la_SOURCES = arpa_telnet.h file.c netrc.h timeval.c	\
 base64.c file.h hostip.c progress.c timeval.h base64.h formdata.c	\