https://sourceware.org/bugzilla/show_bug.cgi?id=29292
--- Comment #2 from Rainer Orth <ro at CeBiTec dot Uni-Bielefeld.DE> --- > --- Comment #1 from Rainer Orth <ro at gcc dot gnu.org> --- > I'll try to create a minimal testcase (just tmpfile, mmap, fill buffer, msync, > munmap, fread) to see if the problem reproduces there. Here's what I've got: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <unistd.h> #define headersz 72 int main (void) { FILE *f = tmpfile (); int fd = fileno (f); lseek (fd, headersz - 1, SEEK_SET); char dummy = 0; write (fd, &dummy, 1); void *hdr = mmap (NULL, headersz, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); memset (hdr, 'a', headersz - 1); msync (hdr, headersz, MS_ASYNC); munmap (hdr, headersz); fseek (f, 0, SEEK_END); long fsize = ftell (f); fseek (f, 0, SEEK_SET); unsigned char *buf = malloc (fsize); fread (buf, fsize, 1, f); printf ("%s\n", buf); return 0; } It works (printing 71 x 'a') on all of Linux/x86_64, Mac OS X 10.7, Solaris 10 and Solaris 11.3. Only on Solaris 11.4 do I get an empty buffer, matching what I see with gld. > However, I very much wonder what's the advantage of this complicated > mmap/msync/munmap > dance instead of just writing the header to the tmp file and be done with it. Despite the fact that obviously Solaris 11.4 is wrong here, this question remains valid. -- You are receiving this mail because: You are on the CC list for the bug.