On Tue, Mar 24, 2015 at 11:35:30AM -0500, Steven Munroe wrote: > On Tue, 2015-03-24 at 12:19 +0000, Richard W.M. Jones wrote: > > For the OCaml packages on ppc64/ppc64le, we keep having bugs like this > > one: https://bugzilla.redhat.com/show_bug.cgi?id=1204876 > > > > The OCaml compiler is quite recursive, and so it can easily overflow > > the default stack. For reasons that are not entirely clear this > > happens only on ppc64/ppc64le (not on x86 or aarch64). Perhaps POWER > > stack frames are bigger, or the default stack size is smaller. > > > The default thread stack is 8MB-64KB plus a 64KB guard page. PPC uses a > 64K default page size. > > So there are two possible problems: > > 1) running into the guard page for a single thread. > 2) the sum of all thread stacks exceeds the ulimit -s The OCaml compiler is single threaded AFAIK. > If changing the ulimit -s solves the problem the sum of all thread > stacks has exceeded the ulimit. > > If in cases where increasing the ulimit -s to unlimited does no help > then you have at least one thread that has overflowed the default stack. > > Power has lots of registers (32x64b GPRs + 32x64b FPRs + 32x128b VRs) so > we are likely to need a bigger stack frame at each level. The minimums > are 112 bytes for ELF V1 ABI (PPC64BE) and 48 for ELF V2 ABI (PPC64LE), > but any interesting function will need additional space to spill > non-volatiles across function calls and store any local variables. > > You (ocaml runtime) can control the stack size on a per thread basis via > pthread_attr_setstack(). > > I am not sure how ocaml is generating code for PPC64, you could look in > to split stack support, OCaml uses its own code generator. However the description of -fsplit-stack from GCC sounds interesting. Are there any more details of how exactly it works? Does it catch the segfault from hitting the guard page and do something clever? > but at this time GCC does not implement split > stack. Did you mean "does implement"? GCC 5 documents it at least ... Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into KVM guests. http://libguestfs.org/virt-v2v -- devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/devel Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct