This implements an idea that Nicolas had to overcome the Darwin
problem that it is not possible to extend a shared memory segment
on that system.
The remedy is simple: Use a memory segment that is larger than
what can reasonably be used. This should only waste a few page
table entries, while providing the functionality, at least for
further testing.
libgfortran/ChangeLog:
* caf_shared/shared_memory.c (shared_memory_init): On Apple,
use an initial size of 256 GB.
{
shared_memory_act *mem;
int fd;
+
+ /* Darwin does not appear to be able to grow shared memory segments. Choose
+ 256 GB; that will likely be enough. If not, the ftruncate will fail
+ noisily. */
+
+#ifdef __APPLE__
+ size_t initial_size = ((size_t) 1) << 38;
+#else
size_t initial_size = round_to_pagesize (sizeof (global_shared_memory_meta));
+#endif
mem = malloc (get_shared_memory_act_size (1));
fd = get_shmem_fd ();