My brother Abramo discovered that this behaviour is due to
a misfeature of GNU Make, whose main procedure contains:

#ifdef SET_STACK_SIZE
 /* Get rid of any avoidable limit on stack size.  */
  {
    struct rlimit rlim;

    /* Set the stack limit huge so that alloca does not fail.  */
    if (getrlimit (RLIMIT_STACK, &rlim) == 0
        && rlim.rlim_cur > 0 && rlim.rlim_cur < rlim.rlim_max)
      {
        stack_limit = rlim;
        rlim.rlim_cur = rlim.rlim_max;
        setrlimit (RLIMIT_STACK, &rlim);
      }
    else
      stack_limit.rlim_cur = 0;
  }
#endif

This limit is never restored again.

The Fedora package ships GNU Make 3.81 along with a patch that
restores the original rlimit before executing programs via execvp(),
and this explains why the problem was not reproducible there.

This bug of GNU Make (http://savannah.gnu.org/bugs/index.php?22010)
has been fixed in GNU Make 3.82, just released.
Thanks again to everyone,

   Roberto

--
Prof. Roberto Bagnara
Applied Formal Methods Laboratory
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagn...@cs.unipr.it

Reply via email to