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)

Attachment: pgp687ujuIvrB.pgp
Description: PGP signature

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have 
the opportunity to enter the BlackBerry Developer Challenge. See full prize 
details at: http://p.sf.net/sfu/blackberry
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to