]> granicus.if.org Git - gc/commitdiff
* win32_threads.c (GC_push_all_stacks): Tolerate bad sp.
authorhboehm <hboehm@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 29 Jun 2002 17:34:06 +0000 (17:34 +0000)
committerguest <ivmai@mail.ru>
Fri, 29 Jul 2011 06:54:22 +0000 (10:54 +0400)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55104 138bc75d-0d04-0410-961f-82ee72b054a4

ChangeLog
win32_threads.c

index 2c8ab1a7a05d32303c871b481de076db011bebe3..dc365819d4ea5b56df1c71af69e26bae396aecfe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 38de099fa87cc677351945ec35066d9442a57e36..d5e3920cbe4cb2a0ed1e60c2e2fa8dc0066e1e95 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