This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: CT 0.29 - stuck compiling gcc 4.0 glibc 2.2.5 ppc405: execvp:/bin/sh: Resource temporarily unavailable


I'm almost there - but it gets stuck when it should install gcc's multilibs.
Anybody got a clue to what causes the unavailability?
make[4]: execvp: /bin/sh: Resource temporarily unavailable
make[4]: *** [all-multi] Error 127
make[4]: Leaving directory `/cygdrive/c/DATA/crosstool-0.29/build/powerpc-405-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/build-gcc/powerpc-405-linux-gnu/nof/zlib'
This old thread reports a similar problem:
http://sources.redhat.com/ml/cygwin/2001-07/msg01333.html
He blames the command length when running under Cygwin...
Unfortunately there is no solution to the problem - other than changing to Linux...

The limit appears to be enforced in winsup/cygwin/spawn.cc: static int __stdcall spawn_guts (const char * prog_arg, const char *const *argv, const char *const envp[], int mode) { ... if (one_line.ix > 32767) { debug_printf ("Command line too long (>32K), return E2BIG"); set_errno (E2BIG); return -1; }

msdn says in
http://msdn.microsoft.com/library/en-us/dllproc/base/createprocess.asp

lpCommandLine
[in, out] Pointer to a null-terminated string that specifies the command line to execute.
The maximum length of this string is 32K characters.
Windows 2000: The maximum length of this string is MAX_PATH characters.


So it appears to be a Windows limitation, not a Cygwin one.

You have a couple options, in increasing order of difficulty:

1) switch to linux or some other real OS, like mac os x (putty is your friend, you can keep
your windows workstation, just remote log in to the other box)
2) cross-compile the cygwin toolchain from linux
3) patch gcc's build to use shorter commandlines
4) patch cygwin to bypass the windows commandline mechanism


5) cygwin already bypasses windows command line mechanism.  You just have
   to tell it to assume that the executables in /bin (or wherever) are
   100% pure cygwin executables.  See "man mount".

   mount -f -X c:\cygwin\bin /bin
   mount -f -X c:\cygwin\bin /usr/bin
   mount -f -x c:\cygwin\bin\strace.exe /bin/strace.exe       # buit with -mno-cygwin
   mount -f -x c:\cygwin\bin\strace.exe /usr/bin/strace.exe   # buit with -mno-cygwin
   mount -f -x c:\cygwin\bin\strace.exe /bin/cygcheck.exe     # buit with -mno-cygwin
   mount -f -x c:\cygwin\bin\strace.exe /usr/bin/cygcheck.exe # buit with -mno-cygwin

   This will bypass the 32K limitation in windows for command line and similar
   limitations for environment variables.

mount -f -x c:\cygwin\bin\strace.exe /bin/cygcheck.exe # buit with -mno-cygwin
mount -f -x c:\cygwin\bin\strace.exe /usr/bin/cygcheck.exe # buit with
-mno-cygwin
Should these in fact be "c:\cygwin\bin\cygcheck.exe" instead?
I'm running it at the moment as you stated (4 x strace.exe)... I'll return with the result in a couple of hours when it gets to the point.


Btw, it should be "\\" in order to escape the backslash...

But nevertheless, I don't quite understand the above mount commands. Isn't the c:\cygwin\bin\strace.exe the same as /bin/strace.exe for starters? Why the need for "aliasing" it?

BR,
 Martin


------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]