* win32_threads.c (GC_push_all_stacks): Tolerate bad sp.
authorHans Boehm <Hans_Boehm@hp.com>
Sat, 29 Jun 2002 17:34:06 +0000 (17:34 +0000)
committerHans Boehm <hboehm@gcc.gnu.org>
Sat, 29 Jun 2002 17:34:06 +0000 (17:34 +0000)
From-SVN: r55104

boehm-gc/ChangeLog
boehm-gc/win32_threads.c

index 2c8ab1a..dc36581 100644 (file)
@@ -1,3 +1,8 @@
+2002-06-28  Hans Boehm <Hans_Boehm@hp.com>
+            Jonathan Clark
+
+        * win32_threads.c (GC_push_all_stacks): Tolerate bad sp.
+
 2002-06-09  H.J. Lu  (hjl@gnu.org)
 
        * include/private/gc_locks.h (GC_test_and_set): Support
index 38de099..d5e3920 100644 (file)
@@ -144,8 +144,15 @@ void GC_push_all_stacks()
          GC_push_one ((word) thread_table[i].context.Edx);
          GC_push_one ((word) thread_table[i].context.Ecx);
          GC_push_one ((word) thread_table[i].context.Eax);
-         GC_push_all_stack((char *) thread_table[i].context.Esp,
-                           thread_table[i].stack);
+         if (thread_table[i].context.Esp >= (DWORD)thread_table[i].stack
+             || thread_table[i].context.Esp < (DWORD)bottom) {
+             WARN("Thread stack pointer 0x%lx out of range, pushing everything",
+                  thread_table[i].context.Esp);
+             GC_push_all_stack((char *) bottom, thread_table[i].stack);
+         } else {
+             GC_push_all_stack((char *) thread_table[i].context.Esp,
+                               thread_table[i].stack);
+         }
 #       else
 #       ifdef ARM32
          if (thread_table[i].context.Sp >= (DWORD)thread_table[i].stack