Hi Catalin and Will,
when we mmap the addr NULL with MAP_FIXED flag to the hugetlbfs, system
will return NULL successfully.
My question is: Why mmap to file with the hugepagesize=512M we got
SIGILL but mmap to the file with hugepagesize=2M we got a success ? Here
is my test steps:
1. echo 10 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
echo 10 > /sys/kernel/mm/hugepages/hugepages-524288kB/nr_hugepages
2. mount none /mnt -t tmpfs
3. mkdir /mnt/huge1
mkdir /mnt/huge2
4. mount none /mnt/huge1 -t hugetlbfs -o pagesize=512MB
mount none /mnt/huge2 -t hugetlbfs -o pagesize=2MB
5. test_case.c
... ...
fd = open("/mnt/huge1/file", O_RDWR | O_CREAT, 0777);
addr = mmap(NULL, hugepagesize, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE | MAP_FIXED, fd, 0);
... ...
The result is , mmap to the /mnt/huge1/file will got a success while
mmap to the /mnt/huge2/file will got SIGILL. Meanwile, we have found
that the kernel return the address NULL success but set the variable failed.
Here is the pc when SIGILL occured:
4009bc: 97ffff7d bl 4007b0 <mmap@plt>
pc->4009c0: aa0003e1 mov x1, x0
Kind regards,
Yongqiang Liu