mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-09 09:18:42 +09:00
Issue #1471 - Fix building on sparc64 Linux
Correct various pre-processor defines for sparc64 and in mozjemalloc use the JS arm64 allocator on Linux/sparc64. This corrects build problems opn Linux sparc64 and is in line with bugzilla bug #1275204.
This commit is contained in:
parent
7f372898a8
commit
1640ee7bc6
8 changed files with 39 additions and 15 deletions
|
|
@ -1971,7 +1971,7 @@ static void *
|
|||
pages_map(void *addr, size_t size)
|
||||
{
|
||||
void *ret;
|
||||
#if defined(__ia64__)
|
||||
#if defined(__ia64__) || (defined(__sparc__) && defined(__arch64__) && defined(__linux__))
|
||||
/*
|
||||
* The JS engine assumes that all allocated pointers have their high 17 bits clear,
|
||||
* which ia64's mmap doesn't support directly. However, we can emulate it by passing
|
||||
|
|
@ -1992,6 +1992,28 @@ pages_map(void *addr, size_t size)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(__sparc__) && defined(__arch64__) && defined(__linux__)
|
||||
const uintptr_t start = 0x0000070000000000ULL;
|
||||
const uintptr_t end = 0x0000800000000000ULL;
|
||||
|
||||
/* Copied from js/src/gc/Memory.cpp and adapted for this source */
|
||||
|
||||
uintptr_t hint;
|
||||
void* region = MAP_FAILED;
|
||||
for (hint = start; region == MAP_FAILED && hint + size <= end; hint += chunksize) {
|
||||
region = mmap((void*)hint, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
|
||||
if (region != MAP_FAILED) {
|
||||
if (((size_t) region + (size - 1)) & 0xffff800000000000) {
|
||||
if (munmap(region, size)) {
|
||||
MOZ_ASSERT(errno == ENOMEM);
|
||||
}
|
||||
region = MAP_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = region;
|
||||
#else
|
||||
|
||||
/*
|
||||
* We don't use MAP_FIXED here, because it can cause the *replacement*
|
||||
* of existing mappings, and we only want to create new mappings.
|
||||
|
|
@ -2000,10 +2022,11 @@ pages_map(void *addr, size_t size)
|
|||
MAP_PRIVATE | MAP_ANON, -1, 0);
|
||||
assert(ret != NULL);
|
||||
|
||||
#endif
|
||||
if (ret == MAP_FAILED) {
|
||||
ret = NULL;
|
||||
}
|
||||
#if defined(__ia64__)
|
||||
#if defined(__ia64__) || (defined(__sparc__) && defined(__arch64__) && defined(__linux__))
|
||||
/*
|
||||
* If the allocated memory doesn't have its upper 17 bits clear, consider it
|
||||
* as out of memory.
|
||||
|
|
@ -2036,7 +2059,7 @@ pages_map(void *addr, size_t size)
|
|||
MozTagAnonymousMemory(ret, size, "jemalloc");
|
||||
}
|
||||
|
||||
#if defined(__ia64__)
|
||||
#if defined(__ia64__) || (defined(__sparc__) && defined(__arch64__) && defined(__linux__))
|
||||
assert(ret == NULL || (!check_placement && ret != NULL)
|
||||
|| (check_placement && ret == addr));
|
||||
#else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue