aspacem_minAddr = VG_(clo_aspacem_minAddr);
+ // --- Darwin -------------------------------------------
#if defined(VGO_darwin)
# if VG_WORDSIZE == 4
suggested_clstack_end = -1; // ignored; Mach-O specifies its stack
+ // --- Solaris ------------------------------------------
#elif defined(VGO_solaris)
# if VG_WORDSIZE == 4
/*
| |
|--------------------------------|
| dynamic shared objects |
- |--------------------------------| 0x0000000f_ffffffff
+ |--------------------------------| 0x0000001f_ffffffff
| |
| |
|--------------------------------|
*/
/* Kernel likes to place objects at the end of the address space.
- However accessing memory beyond 64GB makes memcheck slow
+ However accessing memory beyond 128GB makes memcheck slow
(see memcheck/mc_main.c, internal representation). Therefore:
- mmapobj() syscall is emulated so that libraries are subject to
Valgrind's aspacemgr control
- Kernel shared pages (such as schedctl and hrt) are left as they are
because kernel cannot be told where they should be put */
# ifdef ENABLE_INNER
- aspacem_maxAddr = (Addr) 0x00000007ffffffff; // 32GB
- aspacem_vStart = (Addr) 0x0000000400000000; // 16GB
-# else
aspacem_maxAddr = (Addr) 0x0000000fffffffff; // 64GB
aspacem_vStart = (Addr) 0x0000000800000000; // 32GB
+# else
+ aspacem_maxAddr = (Addr) 0x0000001fffffffff; // 128GB
+ aspacem_vStart = (Addr) 0x0000001000000000; // 64GB
# endif
# else
# error "Unknown word size"
suggested_clstack_end = (Addr) 0x37ff0000 - 1; // 64kB below V's text
# endif
+ // --- Linux --------------------------------------------
#else
/* Establish address limits and block out unusable parts
sp_at_startup );
# if VG_WORDSIZE == 8
- aspacem_maxAddr = (Addr)0x1000000000ULL - 1; // 64G
+ aspacem_maxAddr = (Addr)0x2000000000ULL - 1; // 128G
# ifdef ENABLE_INNER
{ Addr cse = VG_PGROUNDDN( sp_at_startup ) - 1;
if (aspacem_maxAddr > cse)
aspacem_vStart = VG_PGROUNDUP(aspacem_minAddr
+ (aspacem_maxAddr - aspacem_minAddr + 1) / 2);
# ifdef ENABLE_INNER
- aspacem_vStart -= 0x10000000; // 256M
+ aspacem_vStart -= 0x20000000; // 512M
# endif
suggested_clstack_end = aspacem_maxAddr - 16*1024*1024ULL
+ VKI_PAGE_SIZE;
#endif
+ // --- (end) --------------------------------------------
aspacem_assert(VG_IS_PAGE_ALIGNED(aspacem_minAddr));
aspacem_assert(VG_IS_PAGE_ALIGNED(aspacem_maxAddr + 1));
#else
-/* Just handle the first 64G fast and the rest via auxiliary
+/* Just handle the first 128G fast and the rest via auxiliary
primaries. If you change this, Memcheck will assert at startup.
See the definition of UNALIGNED_OR_HIGH for extensive comments. */
-# define N_PRIMARY_BITS 20
+# define N_PRIMARY_BITS 21
#endif
tl_assert(sizeof(Addr) == 8);
tl_assert(sizeof(UWord) == 8);
tl_assert(sizeof(Word) == 8);
- tl_assert(MAX_PRIMARY_ADDRESS == 0xFFFFFFFFFULL);
- tl_assert(MASK(1) == 0xFFFFFFF000000000ULL);
- tl_assert(MASK(2) == 0xFFFFFFF000000001ULL);
- tl_assert(MASK(4) == 0xFFFFFFF000000003ULL);
- tl_assert(MASK(8) == 0xFFFFFFF000000007ULL);
+ tl_assert(MAX_PRIMARY_ADDRESS == 0x1FFFFFFFFFULL);
+ tl_assert(MASK(1) == 0xFFFFFFE000000000ULL);
+ tl_assert(MASK(2) == 0xFFFFFFE000000001ULL);
+ tl_assert(MASK(4) == 0xFFFFFFE000000003ULL);
+ tl_assert(MASK(8) == 0xFFFFFFE000000007ULL);
# endif
/* Check some assertions to do with the instrumentation machinery. */