[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#824449: firefox: FTBFS on sparc64 due to wrong platform definitions



On Fri, May 20, 2016 at 11:06:06PM +0200, John Paul Adrian Glaubitz wrote:
> Thus, in order to fix this issue on sparc64/Linux, a more elaborate
> fix will have to be developed.

I just made a test installation of NetBSD to verify the theory.

On Linux:

glaubitz@ikarus:~$ cat vmtest.c 
#include <stdio.h>
#include <sys/mman.h>

int main(void)
{
	void *ptr1, *ptr2, *ptr3, *ptr4, *ptr5, *ptr6;
	ptr1 = mmap(NULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr2 = mmap((void*)0x0000070000000000ULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr3 = mmap((void*)0x0000070000000000ULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr4 = mmap((void*)0x0000070000000000ULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr5 = mmap((void*)0x0000070000000000ULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr6 = mmap(NULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	printf("%p %p %p %p %p %p\n", ptr1, ptr2, ptr3, ptr4, ptr5, ptr6);
}
glaubitz@ikarus:~$ ./vmtest 
0x7f80c32f6000 0x70000000000 0x7f80c2d5d000 0x7f80c2c5d000 0x7f80c2b5d000 0x7f80c2a5d000
glaubitz@ikarus:~$ uname -vm
#1 SMP Debian 4.5.1-1 (2016-04-14) x86_64
glaubitz@ikarus:~$

On NetBSD:

testbsd# cat vmtest.c
#include <stdio.h>
#include <sys/mman.h>

int main(void)
{
	void *ptr1, *ptr2, *ptr3, *ptr4, *ptr5, *ptr6;
	ptr1 = mmap(NULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr2 = mmap((void*)0x0000070000000000ULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr3 = mmap((void*)0x0000070000000000ULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr4 = mmap((void*)0x0000070000000000ULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr5 = mmap((void*)0x0000070000000000ULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	ptr6 = mmap(NULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
	printf("%p %p %p %p %p %p\n", ptr1, ptr2, ptr3, ptr4, ptr5, ptr6);
}
testbsd# ./vmtest
0x7f7ff7ef8000 0x70000000000 0x6fffff00000 0x6ffffe00000 0x6ffffd00000 0x7f7ff7b00000
testbsd# uname -vm
NetBSD 7.0 (GENERIC.201509250726Z) amd64
testbsd#

As you can see, on NetBSD, mmmap with a hint will always return memory
in the requested region, even if the memory has already been allocated
before. On Linux, the hint is ignored when the memory pointed to by it
is already allocated.

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - glaubitz@debian.org
`. `'   Freie Universitaet Berlin - glaubitz@physik.fu-berlin.de
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913


Reply to: