aboutsummaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2004-02-18 22:32:15 +0000
committerChristopher Faylor <me@cgf.cx>2004-02-18 22:32:15 +0000
commit0e061ecf96928e04e46bf07ce87e81a7d2fd00a6 (patch)
tree139dca3eaef2a57a2078786010ebfbbde17bee0f /winsup
parent2d6c4a1a65051b08422c1503ba648e9cee0a0acc (diff)
downloadnewlib-0e061ecf96928e04e46bf07ce87e81a7d2fd00a6.zip
newlib-0e061ecf96928e04e46bf07ce87e81a7d2fd00a6.tar.gz
newlib-0e061ecf96928e04e46bf07ce87e81a7d2fd00a6.tar.bz2
* fork.cc (fork_child): Invert sense of test which defeated correct handling in
a fork from a non-main thread. * dcrt0.cc (initial_env): Eliminate parameter and just send DebugBreak when appropriate. (dll_crt0_0): Reflect parameter change to initial_env. (dll_crt0_1): Don't call initial_env.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog10
-rw-r--r--winsup/cygwin/dcrt0.cc21
-rw-r--r--winsup/cygwin/fork.cc2
3 files changed, 17 insertions, 16 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 12e69f5..abb7de5 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,15 @@
2004-02-18 Christopher Faylor <cgf@redhat.com>
+ * fork.cc (fork_child): Invert sense of test which defeated correct
+ handling in a fork from a non-main thread.
+
+ * dcrt0.cc (initial_env): Eliminate parameter and just send DebugBreak
+ when appropriate.
+ (dll_crt0_0): Reflect parameter change to initial_env.
+ (dll_crt0_1): Don't call initial_env.
+
+2004-02-18 Christopher Faylor <cgf@redhat.com>
+
* gendef (stabilize_sig_stack): New function.
(setjmp): Import, add sig stack handling. Store sig stack info.
(longjmp): Call stabilize_sig_stack. Restore sig stack info.
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 4d48314..06982e6 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -536,25 +536,15 @@ break_here ()
#endif
static void
-initial_env (bool first)
+initial_env ()
{
char buf[CYG_MAX_PATH + 1];
- if (!first)
- /* nothing */;
- else if (GetEnvironmentVariable ("CYGWIN_TESTING", buf, sizeof (buf) - 1))
+ if (GetEnvironmentVariable ("CYGWIN_TESTING", buf, sizeof (buf) - 1))
_cygwin_testing = 1;
+
#ifdef DEBUGGING
DWORD len;
- static bool NO_COPY did_debugging_stuff;
-#if 0
- if (did_debugging_stuff || (first && wincap.cant_debug_dll_entry ()))
- return;
-#else
- if (first)
- return;
-#endif
- did_debugging_stuff = true;
if (GetEnvironmentVariable ("CYGWIN_SLEEP", buf, sizeof (buf) - 1))
{
DWORD ms = atoi (buf);
@@ -583,6 +573,8 @@ initial_env (bool first)
{
error_start_init (p);
try_to_debug ();
+ console_printf ("*** Sending Break. gdb may issue spurious SIGTRAP message.\n");
+ DebugBreak ();
break_here ();
}
}
@@ -594,7 +586,7 @@ void __stdcall
dll_crt0_0 ()
{
wincap.init ();
- initial_env (true);
+ initial_env ();
char zeros[sizeof (child_proc_info->zero)] = {0};
@@ -736,7 +728,6 @@ dll_crt0_1 (char *)
/* FIXME: Verify forked children get their exception handler set up ok. */
exception_list cygwin_except_entry;
- initial_env (false);
check_sanity_and_sync (user_data);
malloc_init ();
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc
index b8cd3ed..c26d2d6 100644
--- a/winsup/cygwin/fork.cc
+++ b/winsup/cygwin/fork.cc
@@ -246,7 +246,7 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
/* If we've played with the stack, stacksize != 0. That means that
fork() was invoked from other than the main thread. Make sure that
the threadinfo information is properly set up. */
- if (!fork_info->stacksize)
+ if (fork_info->stacksize)
{
_main_tls = &_my_tls;
_main_tls->init_thread (NULL, NULL);