diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index faebf37301dcfc3d6a170876975bc4f4a9df9f8f..a2c4a1dd0b94e634cc3e69f8b7e9768c0830d6d8 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,8 @@
+2006-12-08  Jakub Jelinek  <jakub@redhat.com>
+
+	* testsuite/util/testsuite_hooks.cc (set_memory_limits): Don't set
+	RLIMIT_AS below 16MB on x86_64-linux.
+
 2006-12-06  Benjamin Kosnik  <bkoz@redhat.com>
 
 	* include/Makefile.am (std_headers_rename): Remove.
diff --git a/libstdc++-v3/testsuite/util/testsuite_hooks.cc b/libstdc++-v3/testsuite/util/testsuite_hooks.cc
index 40189fbf5d4bc340fcff9fbf63caa1225534539c..b649e9ba7d7e9b2e3725ea0f294891672b4234cc 100644
--- a/libstdc++-v3/testsuite/util/testsuite_hooks.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_hooks.cc
@@ -89,6 +89,16 @@ namespace __gnu_test
 #endif
 
     // Virtual memory.
+    // On x86_64-linux, the default is -z max-page-size=0x200000
+    // which means up to 2MB of address space are accounted for
+    // PROT_NONE mappings between text and data segments of
+    // each shared library.  There are 4 shared libs involved
+    // in addition to the dynamic linker.  Use at least 16MB address space
+    // limit.
+#if defined(__x86_64__) && defined(__linux__)
+    if (limit < 16777216)
+      limit = 16777216;
+#endif
     // On HP-UX 11.23, a trivial C++ program that sets RLIMIT_AS to
     // anything less than 128MB cannot "malloc" even 1K of memory.
     // Therefore, we skip RLIMIT_AS on HP-UX.