* child_info.h (CURR_CHILD_INFO_MAGIC): Reset for previous changes.
* dcrt0.cc (get_cygwin_startup_info): Signal readiness when stracing since strace::write_child relies on it. Use strace.activate to notify strace process, passing in arg indicating whether we're forked. * sigproc.cc (wait_sig): Accommodate new strace::activate argument. * spawn.cc (child_info_spawn::worker): Oops. Previous suspended test was actually correct. Revert and document. * strace.cc (strace::activate): Send additional flag indicating whether this is an attempt to activate a forked process. (strace::hello): Report on windows pid. * include/sys/strace.h (strace::strace): Make a dummy. (strace::activate): Modify declaration to accept an argument. (strace::write_childpid): Set regparm.
This commit is contained in:
parent
5f38ec4681
commit
8942ed09ac
|
@ -1,3 +1,20 @@
|
||||||
|
2011-11-23 Christopher Faylor <me.cygwin2011@cgf.cx>
|
||||||
|
|
||||||
|
* child_info.h (CURR_CHILD_INFO_MAGIC): Reset for previous changes.
|
||||||
|
|
||||||
|
* dcrt0.cc (get_cygwin_startup_info): Signal readiness when stracing
|
||||||
|
since strace::write_child relies on it. Use strace.activate to notify
|
||||||
|
strace process, passing in arg indicating whether we're forked.
|
||||||
|
* sigproc.cc (wait_sig): Accommodate new strace::activate argument.
|
||||||
|
* spawn.cc (child_info_spawn::worker): Oops. Previous suspended test
|
||||||
|
was actually correct. Revert and document.
|
||||||
|
* strace.cc (strace::activate): Send additional flag indicating whether
|
||||||
|
this is an attempt to activate a forked process.
|
||||||
|
(strace::hello): Report on windows pid.
|
||||||
|
* include/sys/strace.h (strace::strace): Make a dummy.
|
||||||
|
(strace::activate): Modify declaration to accept an argument.
|
||||||
|
(strace::write_childpid): Set regparm.
|
||||||
|
|
||||||
2011-11-23 Christopher Faylor <me.cygwin2011@cgf.cx>
|
2011-11-23 Christopher Faylor <me.cygwin2011@cgf.cx>
|
||||||
|
|
||||||
* pipe.cc (fhandler_pipe::create): Avoid derefencing a NULL pointer.
|
* pipe.cc (fhandler_pipe::create): Avoid derefencing a NULL pointer.
|
||||||
|
|
|
@ -35,7 +35,7 @@ enum child_status
|
||||||
#define EXEC_MAGIC_SIZE sizeof(child_info)
|
#define EXEC_MAGIC_SIZE sizeof(child_info)
|
||||||
|
|
||||||
/* Change this value if you get a message indicating that it is out-of-sync. */
|
/* Change this value if you get a message indicating that it is out-of-sync. */
|
||||||
#define CURR_CHILD_INFO_MAGIC 0x24f4be4bU
|
#define CURR_CHILD_INFO_MAGIC 0x76041b78U
|
||||||
|
|
||||||
#define NPROCS 256
|
#define NPROCS 256
|
||||||
|
|
||||||
|
|
|
@ -545,9 +545,10 @@ get_cygwin_startup_info ()
|
||||||
multiple_cygwin_problem ("fhandler size", res->fhandler_union_cb, sizeof (fhandler_union));
|
multiple_cygwin_problem ("fhandler size", res->fhandler_union_cb, sizeof (fhandler_union));
|
||||||
if (res->isstraced ())
|
if (res->isstraced ())
|
||||||
{
|
{
|
||||||
for (unsigned i = 0; !being_debugged () && i < 10000; i++)
|
res->ready (false);
|
||||||
|
for (unsigned i = 0; !being_debugged () && i < 1000000; i++)
|
||||||
yield ();
|
yield ();
|
||||||
strace.hello ();
|
strace.activate (res->type == _CH_FORK);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -39,8 +39,8 @@ class strace
|
||||||
void write (unsigned category, const char *buf, int count);
|
void write (unsigned category, const char *buf, int count);
|
||||||
unsigned char _active;
|
unsigned char _active;
|
||||||
public:
|
public:
|
||||||
void activate ();
|
void activate (bool) __attribute__ ((regparm (2)));;
|
||||||
strace () {activate ();}
|
strace () {}
|
||||||
int microseconds ();
|
int microseconds ();
|
||||||
int version;
|
int version;
|
||||||
int lmicrosec;
|
int lmicrosec;
|
||||||
|
@ -50,7 +50,7 @@ public:
|
||||||
void prntf (unsigned, const char *func, const char *, ...) /*__attribute__ ((regparm(3)))*/;
|
void prntf (unsigned, const char *func, const char *, ...) /*__attribute__ ((regparm(3)))*/;
|
||||||
void vprntf (unsigned, const char *func, const char *, va_list ap) /*__attribute__ ((regparm(3)))*/;
|
void vprntf (unsigned, const char *func, const char *, va_list ap) /*__attribute__ ((regparm(3)))*/;
|
||||||
void wm (int message, int word, int lon) __attribute__ ((regparm(3)));
|
void wm (int message, int word, int lon) __attribute__ ((regparm(3)));
|
||||||
void write_childpid (child_info&, unsigned long) __attribute__ ((regparm (2)));
|
void write_childpid (child_info&, unsigned long) __attribute__ ((regparm (3)));
|
||||||
bool attached () const {return _active == 3;}
|
bool attached () const {return _active == 3;}
|
||||||
bool active () const {return _active & 1;}
|
bool active () const {return _active & 1;}
|
||||||
unsigned char& active_val () {return _active;}
|
unsigned char& active_val () {return _active;}
|
||||||
|
|
|
@ -1295,7 +1295,7 @@ wait_sig (VOID *)
|
||||||
talktome (&pack.si);
|
talktome (&pack.si);
|
||||||
break;
|
break;
|
||||||
case __SIGSTRACE:
|
case __SIGSTRACE:
|
||||||
strace.activate ();
|
strace.activate (false);
|
||||||
strace.hello ();
|
strace.hello ();
|
||||||
break;
|
break;
|
||||||
case __SIGPENDING:
|
case __SIGPENDING:
|
||||||
|
|
|
@ -692,7 +692,8 @@ loop:
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iscygwin ())
|
/* The CREATE_SUSPENDED case is handled below */
|
||||||
|
if (!(c_flags & CREATE_SUSPENDED))
|
||||||
strace.write_childpid (*this, pi.dwProcessId);
|
strace.write_childpid (*this, pi.dwProcessId);
|
||||||
|
|
||||||
/* Fixup the parent data structures if needed and resume the child's
|
/* Fixup the parent data structures if needed and resume the child's
|
||||||
|
|
|
@ -32,12 +32,12 @@ class strace NO_COPY strace;
|
||||||
#ifndef NOSTRACE
|
#ifndef NOSTRACE
|
||||||
|
|
||||||
void
|
void
|
||||||
strace::activate ()
|
strace::activate (bool isfork)
|
||||||
{
|
{
|
||||||
if (!dynamically_loaded && !_active && being_debugged ())
|
if (!dynamically_loaded && !_active && being_debugged ())
|
||||||
{
|
{
|
||||||
char buf[30];
|
char buf[30];
|
||||||
__small_sprintf (buf, "cYg%8x %x", _STRACE_INTERFACE_ACTIVATE_ADDR, &_active);
|
__small_sprintf (buf, "cYg%8x %x %d", _STRACE_INTERFACE_ACTIVATE_ADDR, &_active, isfork);
|
||||||
OutputDebugString (buf);
|
OutputDebugString (buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,9 +47,10 @@ strace::hello ()
|
||||||
{
|
{
|
||||||
if (active ())
|
if (active ())
|
||||||
{
|
{
|
||||||
char pidbuf[40];
|
char pidbuf[80];
|
||||||
if (myself->progname[0])
|
if (myself->progname[0])
|
||||||
__small_sprintf (pidbuf, "(pid %d, ppid %d)", myself->pid, myself->ppid ?: 1);
|
__small_sprintf (pidbuf, "(pid %d, ppid %d, windows pid %u)", myself->pid,
|
||||||
|
myself->ppid ?: 1, GetCurrentProcessId ());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetModuleFileNameW (NULL, myself->progname, sizeof (myself->progname));
|
GetModuleFileNameW (NULL, myself->progname, sizeof (myself->progname));
|
||||||
|
|
Loading…
Reference in New Issue