On 13/06/2019 16:32, Szabolcs Nagy wrote:
On 13/06/2019 15:03, Vincenzo Frascino wrote:
On 13/06/2019 13:28, Szabolcs Nagy wrote:
On 13/06/2019 12:16, Vincenzo Frascino wrote:
On 13/06/2019 11:14, Szabolcs Nagy wrote:
On 13/06/2019 10:20, Catalin Marinas wrote:
On Wed, Jun 12, 2019 at 05:30:34PM +0100, Szabolcs Nagy wrote: > On 12/06/2019 15:21, Vincenzo Frascino wrote: >> + - a mapping below sbrk(0) done by the process itself > > doesn't the mmap rule cover this?
IIUC it doesn't cover it as that's memory mapped by the kernel automatically on access vs a pointer returned by mmap(). The statement above talks about how the address is obtained by the user.
ok i read 'mapping below sbrk' as an mmap (possibly MAP_FIXED) that happens to be below the heap area.
i think "below sbrk(0)" is not the best term to use: there may be address range below the heap area that can be mmapped and thus below sbrk(0) and sbrk is a posix api not a linux syscall, the libc can implement it with mmap or whatever.
i'm not sure what the right term for 'heap area' is (the address range between syscall(__NR_brk,0) at program startup and its current value?)
I used sbrk(0) with the meaning of "end of the process's data segment" not implying that this is a syscall, but just as a useful way to identify the mapping. I agree that it is a posix function implemented by libc but when it is used with 0 finds the current location of the program break, which can be changed by brk() and depending on the new address passed to this syscall can have the effect of allocating or deallocating memory.
Will changing sbrk(0) with "end of the process's data segment" make it more clear?
i don't understand what's the relevance of the *end* of the data segment.
i'd expect the text to say something about the address range of the data segment.
i can do
mmap((void*)65536, 65536, PROT_READ|PROT_WRITE, MAP_FIXED|MAP_SHARED|MAP_ANON, -1, 0);
and it will be below the end of the data segment.
As far as I understand the data segment "lives" below the program break, hence it is a way of describing the range from which the user can obtain a valid tagged pointer.> Said that, I am not really sure on how do you want me to document this (my aim is for this to be clear to the userspace developers). Could you please propose something?
[...], it is in the memory ranges privately owned by a userspace process and it is obtained in one of the following ways:
mmap done by the process itself, [...]
brk syscall done by the process itself. (i.e. the heap area between the initial location of the program break at process creation and its current location.)
any memory mapped by the kernel [...]
the data segment that's part of the process image is already covered by the last point.
Thanks Szabolcs, I will update the document accordingly.