diff options
author | Christopher Faylor <me@cgf.cx> | 2003-12-12 08:04:47 +0300 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2003-12-12 08:04:47 +0300 |
commit | fac0681d6cd0dea950ccf1ea79c0879fdf4321b4 (patch) | |
tree | 9464de11b461b0121a7403d38dcdadd28d549b6e /winsup | |
parent | c76d70d7c04797ab9c24ae134d602b78d201b052 (diff) |
* dcrt0.cc (alloc_stack): Move _main_tls if stack is relocated.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 4 | ||||
-rw-r--r-- | winsup/cygwin/dcrt0.cc | 30 |
2 files changed, 21 insertions, 13 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 8cc59fd6c..fc9f1e7ed 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,7 @@ +2003-12-12 Christopher Faylor <cgf@redhat.com> + + * dcrt0.cc (alloc_stack): Move _main_tls if stack is relocated. + 2003-12-11 Christopher Faylor <cgf@redhat.com> * miscfuncs.cc (low_priority_sleep): Correct thinko which caused diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 31655c0bd..0b878a8b3 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -54,6 +54,16 @@ bool strip_title_path; bool allow_glob = true; codepage_type current_codepage = ansi_cp; +static NO_COPY int mypid = 0; +int __argc_safe; +int _declspec(dllexport) __argc; +char _declspec(dllexport) **__argv; +vfork_save NO_COPY *main_vfork = NULL; + +extern "C" void __sinit (_reent *); + +_threadinfo NO_COPY *_main_tls; + int cygwin_finished_initializing; /* Used in SIGTOMASK for generating a bit for insertion into a sigset_t. @@ -507,24 +517,18 @@ alloc_stack (child_info_fork *ci) if (!VirtualQuery ((LPCVOID) &b, &sm, sizeof sm)) api_fatal ("fork: couldn't get stack info, %E"); - if (sm.AllocationBase != ci->stacktop) - alloc_stack_hard_way (ci, b + sizeof (b) - 1); - else + if (sm.AllocationBase == ci->stacktop) ci->stacksize = 0; + else + { + alloc_stack_hard_way (ci, b + sizeof (b) - 1); + _main_tls = &_my_tls; + _main_tls->init_thread (NULL); + } return; } -static NO_COPY int mypid = 0; -int __argc_safe; -int _declspec(dllexport) __argc; -char _declspec(dllexport) **__argv; -vfork_save NO_COPY *main_vfork = NULL; - -extern "C" void __sinit (_reent *); - -_threadinfo NO_COPY *_main_tls; - /* Take over from libc's crt0.o and start the application. Note the various special cases when Cygwin DLL is being runtime loaded (as opposed to being link-time loaded by Cygwin apps) from a non |