|
From: Nicholas N. <nj...@ca...> - 2004-07-10 17:49:26
|
CVS commit by nethercote:
Added assertion checking to a whole bunch of mmap() and munmap() calls. I used
assertions because if these calls fail, it's a bug in Valgrind.
M +18 -11 vg_main.c 1.167
M +2 -1 vg_scheduler.c 1.155
M +11 -4 vg_symtab2.c 1.82
M +2 -1 vg_syscalls.c 1.108
--- valgrind/coregrind/vg_main.c #1.166:1.167
@@ -502,4 +502,7 @@ static void layout_client_space(Addr arg
static void layout_remaining_space(float ratio)
{
+ Int ires;
+ void* vres;
+
/* This tries to give the client as large as possible address space while
* taking into account the tool's shadow needs. */
@@ -543,15 +546,19 @@ static void layout_remaining_space(float
// Ban redzone
- mmap((void *)VG_(client_end), REDZONE_SIZE, PROT_NONE,
+ vres = mmap((void *)VG_(client_end), REDZONE_SIZE, PROT_NONE,
MAP_FIXED|MAP_ANON|MAP_PRIVATE, -1, 0);
+ vg_assert((void*)-1 != vres);
// Make client hole
- munmap((void*)VG_(client_base), client_size);
+ ires = munmap((void*)VG_(client_base), client_size);
+ vg_assert(0 == ires);
// Map shadow memory.
// Initially all inaccessible, incrementally initialized as it is used
- if (shadow_size != 0)
- mmap((char *)VG_(shadow_base), shadow_size, PROT_NONE,
+ if (shadow_size != 0) {
+ vres = mmap((char *)VG_(shadow_base), shadow_size, PROT_NONE,
MAP_PRIVATE|MAP_ANON|MAP_FIXED, -1, 0);
+ vg_assert((void*)-1 != vres);
+ }
}
@@ -981,4 +988,5 @@ static Addr setup_client_stack(char **or
UInt** client_auxv)
{
+ void* res;
char **cpp;
char *strtab; /* string table */
@@ -1067,9 +1075,8 @@ static Addr setup_client_stack(char **or
/* allocate a stack - mmap enough space for the stack */
- mmap((void *)PGROUNDDN(cl_esp),
- VG_(client_end) - PGROUNDDN(cl_esp),
+ res = mmap((void *)PGROUNDDN(cl_esp), VG_(client_end) - PGROUNDDN(cl_esp),
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANON | MAP_FIXED, -1, 0);
-
+ vg_assert((void*)-1 != res);
/* ==================== copy client stack ==================== */
--- valgrind/coregrind/vg_scheduler.c #1.154:1.155
@@ -1940,6 +1940,7 @@ void do__apply_in_new_thread ( ThreadId
VG_(client_free)(VG_(threads)[tid].stack_base);
new_stack = VG_(client_alloc)(0, new_stk_szb,
- VKI_PROT_READ | VKI_PROT_WRITE | VKI_PROT_EXEC,
+ VKI_PROT_READ|VKI_PROT_WRITE|VKI_PROT_EXEC,
SF_STACK);
+ vg_assert(0 != new_stack);
VG_(threads)[tid].stack_base = new_stack;
VG_(threads)[tid].stack_size = new_stk_szb;
--- valgrind/coregrind/vg_symtab2.c #1.81:1.82
@@ -1106,5 +1106,6 @@ Addr open_debug_file( Char* name, UInt c
if (calc_gnu_debuglink_crc32(0, (UChar*)addr, *size) != crc) {
- VG_(munmap)((void*)addr, *size);
+ int res = VG_(munmap)((void*)addr, *size);
+ vg_assert(0 == res);
return 0;
}
@@ -1493,9 +1494,15 @@ Bool vg_read_lib_symbols ( SegInfo* si )
res = True;
- out:
+ out: {
+ Int m_res;
/* Last, but not least, heave the image(s) back overboard. */
- if (dimage) VG_(munmap) ( (void*)dimage, n_dimage );
- VG_(munmap) ( (void*)oimage, n_oimage );
+ if (dimage) {
+ m_res = VG_(munmap) ( (void*)dimage, n_dimage );
+ vg_assert(0 == m_res);
+ }
+ m_res = VG_(munmap) ( (void*)oimage, n_oimage );
+ vg_assert(0 == m_res);
return res;
+ }
}
--- valgrind/coregrind/vg_syscalls.c #1.107:1.108
@@ -999,5 +999,6 @@ static Addr do_brk(Addr newbrk)
if (newaddr != current) {
- VG_(munmap)((void *)newaddr, current - newaddr);
+ int res = VG_(munmap)((void *)newaddr, current - newaddr);
+ vg_assert(0 == res);
}
ret = newbrk;
|