make-w32
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Interrupt/Exception caught (code = 0xc0000005, addr = 0x77c478ac)


From: duanec
Subject: Re: Interrupt/Exception caught (code = 0xc0000005, addr = 0x77c478ac)
Date: Tue, 1 Sep 2009 11:43:12 -0700 (PDT)

The patch seems to have worked flawlessly.  Thank You!

I would love to see a new distribution asap (as I prefer to use distribution
built binaries when reasonable) :)
So, I'd appreciate it if you could let me know if/when/where you publish a
new
version.

Below:
  - Rough sketch of what I tested.  I'm entirely convinced this bug is gone.
    (Examining the change: it looks very unlikely any new bugs were
introduced).
  - Details on how I built it (thanks! for the details in the distribution
    readme)
  - Alternate patch (functionally identical; minor code simplification)

.duanec.

----------------------------------------------------------------
Rough sketch of what I tested:

  Note: I test (almost) nothing other than the fixing of the
Interrupt/Exception
        caused by the $(shell) function.  That said, I feel I tested this
        limited scope quite thoroughly.
  With PATH not set in the environment
    For 0 to 1025 envvars in the environment
      For 25 different makefiles
          each with a different command line length
          - some with cmd.exe built-in commands
          - some with filename.exe commands
          - some with filename (no .exe extension) commands
          - some with commands that existed
          - some with commands that did not exist
        run newly patched make & check results
  Repeated above WITH path set in environment (with 1 to 1026 envvars).
  Ran similar (limitted) tests checking the return value of the $(shell)
    function.
----------------------------------------------------------------

----------------------------------------------------------------
Alternate patch (functionally identical; minor code simplification):
diff -du new/function.c old/function.c
--- new/function.c      2009-09-01 11:50:50.984839900 -0500
+++ old/function.c      2009-09-01 11:51:14.781714900 -0500
@@ -1429,7 +1429,7 @@


 void
-windows32_openpipe (int *pipedes, int *pid_p, char **command_argv)
+windows32_openpipe (int *pipedes, int *pid_p, char **command_argv, char
**envp)
 {
   SECURITY_ATTRIBUTES saAttr;
   HANDLE hIn;
@@ -1476,7 +1476,7 @@
   /* make sure that CreateProcess() has Path it needs */
   sync_Path_environment();

-  if (!process_begin(hProcess, command_argv, environ, command_argv[0],
NULL)) {
+  if (!process_begin(hProcess, command_argv, envp, command_argv[0], NULL))
{
     /* register process for wait */
     process_register(hProcess);

@@ -1634,7 +1634,7 @@

 #ifdef WINDOWS32

-  windows32_openpipe (pipedes, &pid, command_argv);
+  windows32_openpipe (pipedes, &pid, command_argv, envp);
   /* Restore the value of just_print_flag.  */
   just_print_flag = j_p_f;
----------------------------------------------------------------

----------------------------------------------------------------
How I built it:
  Installed MinGW per
http://www.mingw.org/wiki/HOWTO_Install_the_MinGW_GCC_Compiler_Suite.
    // gcc.exe (GCC) 3.4.5 (mingw-vista special r3)

  Used my existing cygnus install with above MinGW/bin pre-pended to the
path.
  Then
    # get clean source
    cd /c/temp/mingw32-make-3.81-20080326-src.tar
    rm -rf make-3.81-patched
    tar -xzvf ../mingw32-make-3.81-20080326-src.tar.gz
    #
    # apply the patch
    cd ./make-3.81-patched
    mv function.c function.c.ORIGINAL
    cp ../function.c function.c
    diff -du function.c.ORIGINAL function.c
    #
    # put MinGW/bin first on the path
    export PATH=/c/MinGW/bin:$PATH
    #
    #- build per this readme:
mingw32-make-3.81-20080326-3.tar/doc/mingw32-make/README.mingw
    ../make-3.81-patched/configure \
      --disable-dependency-tracking \
      --disable-nls \
      --enable-case-insensitive-file-system \
      --disable-job-server \
      --disable-rpath \
      --program-prefix=mingw32- \
      --host=i386-pc-mingw32 \
      --build=i386-pc-mingw32 \
      --target=i386-pc-mingw32 \
      --prefix=/mingw
    mv config.h config.orig ; sed -e 's/:/;/' config.orig > config.h
    make CFLAGS="-s -O2 -mms-bitfields -mtune=i686"
    for i in `find . -type f -iname dir`; do rm $i; done
    #- did not do this: make prefix=`cd ../dist;pwd` install
----------------------------------------------------------------

-- 
View this message in context: 
http://www.nabble.com/Interrupt-Exception-caught-%28code-%3D-0xc0000005%2C-addr-%3D-0x77c478ac%29-tp25214756p25244276.html
Sent from the Gnu - Make - W32 mailing list archive at Nabble.com.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]