Reduce stack pressure throughout Cygwin

* dcrt0.cc (initial_env): Reduce size of local path buffers to
        PATH_MAX.  Allocate debugger_command from process heap.
        (init_windows_system_directory): Very early initialize new global
        variable global_progname.
        * dll_init.cc (dll_list::alloc): Make path buffer static.  Explain why.
        (dll_list::populate_deps): Use tmp_pathbuf for local path buffer.
        * exceptions.cc (debugger_command): Convert to PWCHAR.
        (error_start_init): Allocate debugger_command and fill with wide char
        strings.  Only allocate if NULL.
        (try_to_debug): Just check if debugger_command is a NULL pointer to
        return.  Drop conversion from char to WCHAR and drop local variable
        dbg_cmd.
        * globals.cc (global_progname): New global variable to store Windows
        application path.
        * pinfo.cc (pinfo_basic::pinfo_basic): Just copy progname over from
        global_progname.
        (pinfo::status_exit): Let path_conv create the POSIX path to
        avoid local buffer.
        * pseudo_reloc.cc (__report_error): Utilize global_progname, drop local
        buffer.
        * smallprint.cc (__small_vsprintf): Just utilize global_progname for
        %P format specifier.
        (__small_vswprintf): Ditto.
        * strace.cc (PROTECT): Change to reflect x being a pointer.  Reformat.
        (CHECK): Ditto.  Reformat.
        (strace::activate): Utilize global_progname, drop local buffer.
        Fix formatting.
        (strace::vsprntf): Reduce size of local progname buffer to NAME_MAX.
        Copy and, if necessary, convert only the last path component to
        progname.
        (strace_buf_guard): New muto.
        (buf): New static pointer.
        (strace::vprntf): Use buf under strace_buf_guard lock only.  Allocate
        buffer space for buf on Windows heap.
        * wow64.cc (wow64_respawn_process): Utilize global_progname, drop
        local path buffer.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen
2015-07-19 22:38:30 +02:00
parent 93a8435f82
commit 4889f730c1
10 changed files with 141 additions and 85 deletions

View File

@@ -509,11 +509,11 @@ initial_env ()
_cygwin_testing = 1;
#ifdef DEBUGGING
char buf[NT_MAX_PATH];
char buf[PATH_MAX];
if (GetEnvironmentVariableA ("CYGWIN_DEBUG", buf, sizeof (buf) - 1))
{
char buf1[NT_MAX_PATH];
GetModuleFileName (NULL, buf1, NT_MAX_PATH);
char buf1[PATH_MAX];
GetModuleFileName (NULL, buf1, PATH_MAX);
char *p = strpbrk (buf, ":=");
if (!p)
p = (char *) "gdb.exe -nw";
@@ -521,6 +521,13 @@ initial_env ()
*p++ = '\0';
if (strcasestr (buf1, buf))
{
extern PWCHAR debugger_command;
debugger_command = (PWCHAR) HeapAlloc (GetProcessHeap (), 0,
(2 * NT_MAX_PATH + 20)
* sizeof (WCHAR));
if (!debugger_command)
return;
error_start_init (p);
jit_debug = true;
try_to_debug ();
@@ -736,6 +743,7 @@ void
dll_crt0_0 ()
{
wincap.init ();
GetModuleFileNameW (NULL, global_progname, NT_MAX_PATH);
child_proc_info = get_cygwin_startup_info ();
init_windows_system_directory ();
initial_env ();