[klibc] Re: sys_mmap2 on different architectures
Paul Mackerras
paulus at samba.org
Wed Feb 22 18:56:38 PST 2006
H. Peter Anvin writes:
> I've looked through the code for sys_mmap2 on several architectures, and
> it looks like some architectures plays by the "shift is always 12" rule,
> e.g. SPARC, and some expect userspace to actually obtain the page
> size, e.g. PowerPC and MIPS. On some architectures, e.g. x86 and ARM,
> the point is moot since PAGE_SIZE is always 2^12.
>
> a. Is this correct, or have I misunderstood the code?
PowerPC always uses 12, even if PAGE_SHIFT is 16 (i.e. for 64k
pages).
> b. If so, is this right, or is this a bug? Right now both klibc and
> µClibc consider the latter a bug.
Glibc seems to expect it to always be 12, according to this excerpt
from sysdeps/unix/sysv/linux/mmap64.c:
/* This is always 12, even on architectures where PAGE_SHIFT != 12. */
# ifndef MMAP2_PAGE_SHIFT
# define MMAP2_PAGE_SHIFT 12
# endif
I would be very reluctant to change the shift to be PAGE_SHIFT, since
that would be a change in the user/kernel ABI. Of course, userspace
is still expected to make sure addresses and offsets are multiples of
the page size (and thus the offset argument to mmap2 has to be a
multiple of 16 if the page size is 64k).
Regards,
Paul.
More information about the klibc
mailing list