hi,

I have a recent build of 3.5.0 and the following output:

SYSCALL[13019,1](  9) sys_mmap ( 0x0, 1056768, 0, 34, -1, 0 ) -->
[pre-success] Success(0x0:0x404d000)
SYSCALL[13019,1]( 10) sys_mprotect ( 0x404e000, 1052672, 3 )[sync] -->
Success(0x0:0x0)
SYSCALL[13019,1]( 14) sys_rt_sigprocmask ( 0, 0x0, 0x64ee478, 8 ) -->
[pre-success] Success(0x0:0x0)
==13019== Invalid write of size 8
==13019==    at 0x339E041B2F: makecontext (makecontext.c:77)
==13019==    by 0x5B89D20: FiberContextNew (fiber-context-ucontext.c:212)
==13019==    by 0x5B34328:
ns3::ProcessManager::CreateThread(ns3::Process*, unsigned int)
(process-manager.cc:320)
==13019==    by 0x5B33B87:
ns3::ProcessManager::CreateWithStack(std::string, unsigned int,
std::vector<std::string, std::allocator<std::string> >,
std::vector<std::pair<std::string, std::string>,
std::allocator<std::pair<std::string, std::string> > >)
(process-manager.cc:262)
==13019==    by 0x5B475D4: ns3::ProcessManagerTestCase::DoRun()
(process-manager-test.cc:61)
==13019==    by 0x5497526: ns3::TestCase::Run() (test.cc:152)
==13019==    by 0x5499766: ns3::TestSuite::DoRun() (test.cc:684)
==13019==    by 0x5498E6A: ns3::TestSuite::Run() (test.cc:459)
==13019==    by 0x4023EA: main (test-runner.cc:263)
==13019==  Address 0x414dfe8 is not stack'd, malloc'd or (recently) free'd
==13019==
==13019==
==13019== ---- Attach to debugger ? --- [Return/N/n/Y/y/C/c] ---- y
==13019== starting debugger with cmd: /usr/bin/gdb -nw /proc/13023/fd/1014 13023

[...]

__makecontext (ucp=0x64ee350, func=0x5b369fc
<ns3::ProcessManager::DoCreateThread()>, argc=0)
    at ../sysdeps/unix/sysv/linux/x86_64/makecontext.c:77
77        sp[0] = (unsigned long int) &__start_context;
(gdb) p sp
$1 = (long unsigned int *) 0x414dfe8
Current language:  auto; currently minimal
(gdb) set output-radix 16
Output radix now set to decimal 16, hex 10, octal 20.
(gdb) p 0x404e000 + 1052672
$2 = 0x414f000
(gdb) p $pc
$3 = (void (*)()) 0x339e041b2f <__makecontext+95>
(gdb) disas
[...]
0x000000339e041b28 <__makecontext+88>:  mov    %rax,0x80(%rdi)
0x000000339e041b2f <__makecontext+95>:  mov    %rcx,(%r8)
[...]
(gdb) p $r8
$4 = 0x414dfe8
(gdb)

Which shows that I do a successfull annonymous mmap of read/write
memory from  0x404e000 to 0x414f000 and then the libc makecontext
function attempts to write at  0x414dfe8 and that triggers the
valgrind "invalid write of size 8" warning. Any idea of what I could
possible be doing wrong here ?

Mathieu
-- 
Mathieu Lacage <mathieu.lac...@gmail.com>

------------------------------------------------------------------------------
Download Intel&reg; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs 
proactively, and fine-tune applications for parallel performance. 
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to