{
len = PGROUNDUP(len);
- if (!(sf_flags & SF_FIXED))
- addr = VG_(find_map_space)(addr, len, True);
+ sk_assert(!(sf_flags & SF_FIXED));
+ sk_assert(0 == addr);
- // Don't do the mapping if we couldn't find space!
- if (0 == addr)
- return 0;
-
- if (VG_(mmap)((void *)addr, len, prot,
- VKI_MAP_FIXED | VKI_MAP_PRIVATE | VKI_MAP_ANONYMOUS | VKI_MAP_CLIENT,
- sf_flags | SF_CORE, -1, 0) == (void *)addr)
- {
+ addr = (Addr)VG_(mmap)((void *)addr, len, prot,
+ VKI_MAP_PRIVATE | VKI_MAP_ANONYMOUS | VKI_MAP_CLIENT,
+ sf_flags | SF_CORE, -1, 0);
+ if ((Addr)-1 != addr)
return addr;
- }
-
- return 0;
+ else
+ return 0;
}
void VG_(client_free)(Addr addr)
new_stack = VG_(client_alloc)(0, new_stk_szb,
VKI_PROT_READ|VKI_PROT_WRITE|VKI_PROT_EXEC,
SF_STACK);
+ // Given the low number of threads Valgrind can handle, stack
+ // allocation should pretty much always succeed, so having an
+ // assertion here isn't too bad. However, probably better would be
+ // this:
+ //
+ // if (0 == new_stack)
+ // SET_PTHREQ_RETVAL(parent_tid, -VKI_EAGAIN);
+ //
vg_assert(0 != new_stack);
VG_(threads)[tid].stack_base = new_stack;
VG_(threads)[tid].stack_size = new_stk_szb;