diff options
author | Hans Boehm <Hans_Boehm@hp.com> | 2002-06-29 17:34:06 +0000 |
---|---|---|
committer | Hans Boehm <hboehm@gcc.gnu.org> | 2002-06-29 17:34:06 +0000 |
commit | 5ddf82b4c715a3382a2e0b558f465e6a35eb8bb4 (patch) | |
tree | 26f258462c9ac6e5b975c83babf86f1388f5e9ef /boehm-gc | |
parent | 38800fe8762fe73e24dc6b38d31c417cf6cf2dab (diff) | |
download | gcc-5ddf82b4c715a3382a2e0b558f465e6a35eb8bb4.tar.gz |
* win32_threads.c (GC_push_all_stacks): Tolerate bad sp.
From-SVN: r55104
Diffstat (limited to 'boehm-gc')
-rw-r--r-- | boehm-gc/ChangeLog | 5 | ||||
-rw-r--r-- | boehm-gc/win32_threads.c | 11 |
2 files changed, 14 insertions, 2 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 2c8ab1a7a05..dc365819d4e 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/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 diff --git a/boehm-gc/win32_threads.c b/boehm-gc/win32_threads.c index 38de099fa87..d5e3920cbe4 100644 --- a/boehm-gc/win32_threads.c +++ b/boehm-gc/win32_threads.c @@ -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 |