Justus Winter, le Sat 13 Sep 2014 02:40:17 +0200, a écrit : > Quoting Samuel Thibault (2014-09-13 01:39:05) > > So it seems we need what is not actually documented, i.e. a vm_map > > with anywhere=1, but which takes into account the suggested address. > > I'm fine with officially supporting that, we just need to fix the > > documentation, > > I'm sorry, I'm lost. What other interpretation of 'anywhere' is > there?
Not taking the address into account at all. > And since you aligned the semantic of vm_maps 'anywhere' with > 'vm_allocate', then it follows that the current interpretation is > either wrong or right for both functions, no? Well, it depends what is documented :) > I just looked at mmap(2). If one specifies a non-NULL address, Linux > will use the address as hint. If it is NULL, and MAP_FIXED is not > given, Linux choses a suitable address. It isn't explicitly stated, > but I'm pretty sure the Linux kernel doesn't consider the zero page a > suitable place. Sure, that's the common Unix semantic, and our mmap implements this from the documented gnumach behavior by trying the suggested address first with anywhere=0, then anywhere=1. > > and fix all places which weren't aware of this behavior (there are > > very few). > > How would I chose a suitable address? E.g. ext2fs/dir.c initializes > the address to 0, but then vm_map_enter would set it to > map->min_offset anyway (or map->min_offset is 0), which is the same as > vm_map_min(map). I've dug a bit more, glibc's _hurd_startup reserves page 0, so no vm_map or vm_allocate call should be allocating at address 0. But with the change, address 0 is already taken by the first mapped binary, ld.so. I guess exec needs to be fixed, and then we can keep the documented behavior. Samuel