This is the mail archive of the cygwin mailing list for the Cygwin project.


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: Error linking under Cygwin: fork: can't reserve memory for stack XXX, Win32 error 487


Hi,

I've ended up here after having rounded the gcc-irc-channel and the crosscompiler mailing-list.

The story:

I have compiled a gcc crosscompiler hosted under Cygwin using Dan Kegel's Crosstool scripts.

However, as my application is growing in size (number of .o files) I suddenly get the following fault message from collect2.exe when trying to link them all together:

$ powerpc-405-linux-gnu-gcj --main=foo.Main *.o
C:\cygwin\opt\crosstool\powerpc-405-linux-gnu\gcc-3.4.0-glibc-2.2.5\libexec\gcc\powerpc-405-linux-gnu\3.4.0\collect2.exe (1740): *** fork: can't reserve memory for stack 0x40000 - 0x240000, Win32 error 487
<REPEATED>


There is roughly 600 .o files to link together.

Andrew Haley from RedHat mentioned that
"There's some magic in Win32 to extend the size of a stack segment"
"I can't remember the command"

Can anybody on this list help me out here?

  % gcc -v --help |& grep stack
    -fstack-limit-register=<register>  Trap if the stack goes past <register>
    -fstack-limit-symbol=<name>  Trap if the stack goes past symbol <name>
    -fstack-check           Insert stack checking code into the program
    -fomit-frame-pointer    When possible do not generate stack frames
    -fdefer-pop             Defer popping functions args from stack until later
    -fstack-checking        Enable stack checking (same as `{$S+}')
    -fno-stack-checking     Disable stack checking (same as `{$S-} (default)')
    -mstack-arg-probe         Enable stack probing
    -mpreferred-stack-boundar Attempt to keep stack aligned to this power of 2
    --stack <size>                     Set size of the initial stack
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Hum, these options are not available in my crosscompiler:

$ powerpc-405-linux-gnu-gcc -v --help 2>&1 | grep stack
  -fdefer-pop                 Defer popping functions args from stack until
  -fomit-frame-pointer        When possible do not generate stack frames
  -fstack-check               Insert stack checking code into the program
  -fstack-limit               This switch lacks documentation
  -fstack-limit-register=<register> Trap if the stack goes past <register>
  -fstack-limit-symbol=<name> Trap if the stack goes past symbol <name>
  --execstack             require executable stack for this object
  --noexecstack           don't require executable stack for this object
  -z execstack          Mark executable as requiring executable stack
  -z noexecstack        Mark executable as not requiring executable stack
  -z execstack          Mark executable as requiring executable stack
  -z noexecstack        Mark executable as not requiring executable stack
  -z execstack          Mark executable as requiring executable stack
  -z noexecstack        Mark executable as not requiring executable stack

However, this may actually also be a sign that you need to run rebaseall.
I've tried running rebaseall without any errors, but also without any changes in the above behavior...

// Martin


-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/


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