Messages in this thread | | | Subject | Re: mmap syscall problem | From | Valdis.Kletnieks@vt ... | Date | Mon, 06 Jul 2009 20:44:57 -0400 |
| |
On Mon, 06 Jul 2009 16:16:11 +0200, Arnd Bergmann said:
> What happens in a simple user space program that mmaps the same > page to two addresses? Something like > > #include <sys/mman.h> > #include <fcntl.h> > int main(void) > { > int fd = open("existing-4k-file", O_RDWR); > char *p1 = mmap(0, 4096, PROT_READ | PROT_WRITE, > MAP_SHARED, fd, 0); > char *p2 = mmap(p1 + 4096, 4096, PROT_READ | PROT_WRITE, > MAP_SHARED | MAP_FIXED, fd, 0); > > *p1 = 0xaa; *p2 = 0x55; > > return *p1; /* returns 0xaa if broken, 0x55 if correct */ > }
Strictly speaking, doesn't that need a barrier of some sort between the two assignments? I mean, how is gcc supposed to intuit that p1 and p2 alias each other and it needs to reload *p1 before returning that value?
(And in more complicated code, I could even see the compiler re-ordering those two assignments, so the in-file value is different as well as the return; value)
[unhandled content-type:application/pgp-signature] | |