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

duanec <[email protected]>
Newsgroups gmane.comp.gnu.make.windows
Message-ID <[email protected]>
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.