|
From: Nicholas N. <nj...@ca...> - 2004-07-11 18:02:17
|
CVS commit by nethercote:
Removed some code from VG_(client_alloc)() that could be left to VG_(mmap)().
Added a comment about stack extension failure.
M +8 -13 vg_memory.c 1.58
M +8 -0 vg_scheduler.c 1.156
--- valgrind/coregrind/vg_memory.c #1.57:1.58
@@ -681,18 +681,13 @@ Addr VG_(client_alloc)(Addr addr, UInt l
len = PGROUNDUP(len);
- if (!(sf_flags & SF_FIXED))
- addr = VG_(find_map_space)(addr, len, True);
-
- // Don't do the mapping if we couldn't find space!
- if (0 == addr)
- return 0;
+ sk_assert(!(sf_flags & SF_FIXED));
+ sk_assert(0 == addr);
- 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;
- }
-
+ else
return 0;
}
--- valgrind/coregrind/vg_scheduler.c #1.155:1.156
@@ -1942,4 +1942,12 @@ void do__apply_in_new_thread ( ThreadId
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;
|