Hi,

I have tried to use the mtcp library but not always succeed to restart a
image because a segmentation fault occurs ocaasionally.

And I've tried to investigate what was going on. Then I find that the
returning address of stopthisthread() is fastened to 0x110400 whenever we
restart any processes from a checkpointing image!

So a segmentation fault can not be avoid if any shared libraries have been
loaded into the memories on 0x0110400 previously.

Do you have any ideas to fix this bug?

garin@ubuntu:~$ uname -a
Linux ubuntu 2.6.32-41-generic #91-Ubuntu SMP Wed Jun 13 11:44:43 UTC 2012
i686 GNU/Linux

garin@ubuntu:~$ g++ -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
4.4.3-4ubuntu5.1' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared
--enable-multiarch --enable-linker-build-id --with-system-zlib
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4
--enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin
--enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486
--with-tune=generic --enable-checking=release --build=i486-linux-gnu
--host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)

garin@ubuntu:~$ ll /usr/lib/libstdc++*
lrwxrwxrwx 1 root root     19 2012-07-02 16:29 /usr/lib/libstdc++.so.6 ->
libstdc++.so.6.0.14
-rw-r--r-- 1 root root 975012 2012-03-08 21:23 /usr/lib/libstdc++.so.6.0.13
-rw-r--r-- 1 root root 930044 2012-07-02 16:28 /usr/lib/libstdc++.so.6.0.14


Thank you.

Guanglin
garin@ubuntu:~/workspace/mytestmtcp/Debug$ cat /proc/`pidof mytestmtcp`/maps
00110000-00134000 r-xp 00000000 07:00 1569902    
/lib/tls/i686/cmov/libm-2.11.1.so
00134000-00135000 r--p 00023000 07:00 1569902    
/lib/tls/i686/cmov/libm-2.11.1.so
00135000-00136000 rw-p 00024000 07:00 1569902    
/lib/tls/i686/cmov/libm-2.11.1.so
00136000-0014b000 r-xp 00000000 07:00 1569842    
/lib/tls/i686/cmov/libpthread-2.11.1.so
0014b000-0014c000 r--p 00014000 07:00 1569842    
/lib/tls/i686/cmov/libpthread-2.11.1.so
0014c000-0014d000 rw-p 00015000 07:00 1569842    
/lib/tls/i686/cmov/libpthread-2.11.1.so
0014d000-0014f000 rw-p 00000000 00:00 0 
0014f000-00151000 r-xp 00000000 07:00 1569825    
/lib/tls/i686/cmov/libdl-2.11.1.so
00151000-00152000 r--p 00001000 07:00 1569825    
/lib/tls/i686/cmov/libdl-2.11.1.so
00152000-00153000 rw-p 00002000 07:00 1569825    
/lib/tls/i686/cmov/libdl-2.11.1.so
002ec000-00305000 r-xp 00000000 07:00 1581016    
/home/garin/workspace/mytestmtcp/mtcp/libmtcp.so.1.0.0
00305000-00306000 r--p 00018000 07:00 1581016    
/home/garin/workspace/mytestmtcp/mtcp/libmtcp.so.1.0.0
00306000-00307000 rw-p 00019000 07:00 1581016    
/home/garin/workspace/mytestmtcp/mtcp/libmtcp.so.1.0.0
00307000-00314000 rw-p 00000000 00:00 0 
00374000-00375000 r-xp 00000000 00:00 0          [vdso]
004a2000-004bf000 r-xp 00000000 07:00 1573709    /lib/libgcc_s.so.1
004bf000-004c0000 r--p 0001c000 07:00 1573709    /lib/libgcc_s.so.1
004c0000-004c1000 rw-p 0001d000 07:00 1573709    /lib/libgcc_s.so.1
004c4000-005a3000 r-xp 00000000 07:00 524720     /usr/lib/libstdc++.so.6.0.14
005a3000-005a7000 r--p 000de000 07:00 524720     /usr/lib/libstdc++.so.6.0.14
005a7000-005a8000 rw-p 000e2000 07:00 524720     /usr/lib/libstdc++.so.6.0.14
005a8000-005af000 rw-p 00000000 00:00 0 
0088c000-009df000 r-xp 00000000 07:00 1569891    
/lib/tls/i686/cmov/libc-2.11.1.so
009df000-009e1000 r--p 00153000 07:00 1569891    
/lib/tls/i686/cmov/libc-2.11.1.so
009e1000-009e2000 rw-p 00155000 07:00 1569891    
/lib/tls/i686/cmov/libc-2.11.1.so
009e2000-009e5000 rw-p 00000000 00:00 0 
00dc0000-00ddb000 r-xp 00000000 07:00 1580341    /lib/ld-2.11.1.so
00ddb000-00ddc000 r--p 0001a000 07:00 1580341    /lib/ld-2.11.1.so
00ddc000-00ddd000 rw-p 0001b000 07:00 1580341    /lib/ld-2.11.1.so
08048000-08049000 r-xp 00000000 07:00 1590115    
/home/garin/workspace/mytestmtcp/Debug/mytestmtcp
08049000-0804a000 r--p 00000000 07:00 1590115    
/home/garin/workspace/mytestmtcp/Debug/mytestmtcp
0804a000-0804b000 rw-p 00001000 07:00 1590115    
/home/garin/workspace/mytestmtcp/Debug/mytestmtcp
0804b000-0804c000 rw-p 00000000 00:00 0 
08c0c000-08c2d000 rw-p 00000000 00:00 0          [heap]
b6783000-b6784000 ---p 00000000 00:00 0 
b6784000-b6f84000 rw-p 00000000 00:00 0 
b6f84000-b6f85000 ---p 00000000 00:00 0 
b6f85000-b7789000 rw-p 00000000 00:00 0 
b7797000-b779a000 rw-p 00000000 00:00 0 
bfd99000-bff9c000 rw-p 00000000 00:00 0          [stack]
garin@ubuntu:~/workspace/mytestmtcp/Debug$ env LD_LIBRARY_PATH=../mtcp/ 
../mtcp/mtcp_restart mytest.mtcp 
[5601] mtcp_restart_nolibc.c:122 mtcp_restoreverything:
  Entering mtcp_restart_nolibc.c:mtcp_restoreverything
[5601] mtcp_restart_nolibc.c:171 mtcp_restoreverything:
  current_brk: 0x8053000; mtcp_saved_break: 0x863F000; new_brk: 0x863F000
[5601] mtcp_restart_nolibc.c:218 mtcp_restoreverything:
  new_brk (end of heap): 0x863F000, holebase (libmtcp.so): 0x92D000,
 stack_end_addr: 0xC0000000, vdso_addr: 0x110000, highest_va: 0xC0000000,
 vsyscall_addr: 0x0
[5601] mtcp_restart_nolibc.c:222 mtcp_restoreverything:
  unmapping 0x0..0x10FFFF, 0x111000..0x92CFFF
[5601] mtcp_restart_nolibc.c:250 mtcp_restoreverything:
  unmapping 0x955000..0xBFFFFFFF
[5601] mtcp_restart_nolibc.c:264 mtcp_restoreverything:
  
[5601] mtcp_restart_nolibc.c:277 mtcp_restoreverything:
  restoring file descriptors
[5601] mtcp_restart_nolibc.c:284 mtcp_restoreverything:
  restoring memory areas
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1D000 at 0x110000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x12D000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x12E000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x153000 at 0x15A000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x2000 at 0x2AD000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x2AF000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x3000 at 0x2B0000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0xDF000 at 0x55F000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x4000 at 0x63E000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x642000
[5601] mtcp_restart_nolibc.c:462 readmemoryareas:
  restoring non-rwx anonymous area 0x1000 at 0x643000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x644000
[5601] mtcp_restart_nolibc.c:462 readmemoryareas:
  restoring non-rwx anonymous area 0x5000 at 0x645000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x24000 at 0x727000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x74B000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x74C000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1B000 at 0x7C2000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x7DD000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x7DE000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0xCF7000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x15000 at 0xD9C000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0xDB1000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0xDB2000
[5601] mtcp_restart_nolibc.c:462 readmemoryareas:
  restoring non-rwx anonymous area 0x1000 at 0xDB3000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0xDB4000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x2000 at 0xE96000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0xE98000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0xE99000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x8048000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x8049000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x804A000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x1000 at 0x804B000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x21000 at 0x861E000
[5601] mtcp_restart_nolibc.c:462 readmemoryareas:
  restoring non-rwx anonymous area 0x1000 at 0xB674A000
[5601] mtcp_restart_nolibc.c:462 readmemoryareas:
  restoring non-rwx anonymous area 0x7FE000 at 0xB674B000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x2000 at 0xB6F49000
[5601] mtcp_restart_nolibc.c:462 readmemoryareas:
  restoring non-rwx anonymous area 0x1000 at 0xB6F4B000
[5601] mtcp_restart_nolibc.c:462 readmemoryareas:
  restoring non-rwx anonymous area 0x7F9000 at 0xB6F4C000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0xB000 at 0xB7745000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x3000 at 0xB775E000
[5601] mtcp_restart_nolibc.c:496 readmemoryareas:
  restoring anonymous area 0x203000 at 0xBFB39000
[5601] mtcp_restart_nolibc.c:289 mtcp_restoreverything:
  close cpfd 4
[5601] mtcp_restart_nolibc.c:292 mtcp_restoreverything:
  waiting on gzip_child_pid: 5618
[5601] mtcp_restart_nolibc.c:300 mtcp_restoreverything:
  restore complete, resuming...
[5601] mtcp.c:4214 finishrestore:
  mtcp_printf works; libc should work
mtcp finishrestore*: time 78519 uS
[5601] mtcp.c:1260 set_tid_address:
  thread 0x94D660 -> tid 5617, tidptr 0x94D690
[5601] mtcp.c:1789 restore_term_settings:
  restore terminal attributes, check foreground status first: 1
[5601] mtcp.c:1796 restore_term_settings:
  restored terminal
[5601] mtcp.c:3723 restore_sig_handlers:
  restoring signal handlers
[5601] mtcp.c:3669 restore_sig_state:
  restoring handlers for thread 5601
[5601] mtcp.c:4374 restarthread:
  Parent:5617, tid of newly created thread:5619
[5601] mtcp.c:4374 restarthread:
  Parent:5617, tid of newly created thread:5620
[5601] mtcp.c:4392 restarthread:
  calling setcontext: thread->tid: 5617, original_tid:5601
[5601] mtcp.c:3426 stopthisthread:
  after getcontext
[5601] mtcp.c:3669 restore_sig_state:
  restoring handlers for thread 5602
[5601] mtcp.c:4392 restarthread:
  calling setcontext: thread->tid: 5620, original_tid:5602
[5601] mtcp.c:1865 checkpointhread:
  after getcontext. current_tid 5620, original_tid:5602
[5601] mtcp.c:1876 checkpointhread:
  waiting for other threads after restore
[5601] mtcp.c:3669 restore_sig_state:
  restoring handlers for thread 5603
[5601] mtcp.c:4392 restarthread:
  calling setcontext: thread->tid: 5619, original_tid:5603
[5601] mtcp.c:3426 stopthisthread:
  after getcontext
[5601] mtcp.c:3498 stopthisthread:
  thread 5617 restored
[5601] mtcp.c:3511 stopthisthread:
  tid 5617 returning to 0xCF7400
[5601] mtcp.c:1878 checkpointhread:
  resuming after restore
[5601] mtcp.c:1889 checkpointhread:
  After verify count mtcp checkpointhread*: 5620 started
[5601] mtcp.c:3498 stopthisthread:
  thread 5619 restored
[5601] mtcp.c:3511 stopthisthread:
  tid 5619 returning to 0xCF7400
[5601] mtcp.c:3353 stopthisthread:
  tid 5619 returns to 0x110400
[5601] mtcp.c:3426 stopthisthread:
  after getcontext
[5601] mtcp.c:3453 stopthisthread:
  thread 5619 suspending
[5601] mtcp.c:3353 stopthisthread:
  tid 5617 returns to 0x110400
[5601] mtcp.c:3426 stopthisthread:
  after getcontext
[5601] mtcp.c:3453 stopthisthread:
  thread 5617 suspending
[5601] mtcp.c:2063 checkpointhread:
  everything suspended
[5601] mtcp.c:3695 save_sig_handlers:
  saving signal handlers
[5601] mtcp.c:3710 save_sig_handlers:
  saving signal handler (non-default) for 33 -> 0xDA08F0
[5601] mtcp.c:3710 save_sig_handlers:
  saving signal handler (non-default) for 32 -> 0xDA0410
[5601] mtcp.c:3710 save_sig_handlers:
  saving signal handler (non-default) for 12 -> 0x9398B3
[5601] mtcp.c:2092 checkpointhread:
  syncing shared memory with backup files
[5601] mtcp.c:2096 checkpointhread:
  before callback_pre_ckpt() (&94B608,8048803) 
preckpt
[5601] mtcp.c:2122 checkpointhread:
  mtcp_saved_break=0x863F000
[5601] mtcp.c:2345 checkpointeverything:
  thread:5620 performing checkpoint.
[5601] mtcp.c:2277 open_ckpt_to_write_gz:
  open_ckpt_to_write_gz
[5601] mtcp.c:2647 write_ckpt_to_file:
  restore_begin 28000 at 0x92D000 from [libmtcp.so]
[5601] mtcp.c:2658 write_ckpt_to_file:
  saved stack resource limit: soft_lim:0x10000000, hard_lim:0x10000000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1D000 at 0x110000 from /lib/libgcc_s.so.1 + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x12D000 from /lib/libgcc_s.so.1 + 1C000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x12E000 from /lib/libgcc_s.so.1 + 1D000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x153000 at 0x15A000 from /lib/tls/i686/cmov/libc-2.11.1.so + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x2000 at 0x2AD000 from /lib/tls/i686/cmov/libc-2.11.1.so + 
153000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x2AF000 from /lib/tls/i686/cmov/libc-2.11.1.so + 
155000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x3000 at 0x2B0000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0xDF000 at 0x55F000 from /usr/lib/libstdc++.so.6.0.14 + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x4000 at 0x63E000 from /usr/lib/libstdc++.so.6.0.14 + DE000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x642000 from /usr/lib/libstdc++.so.6.0.14 + E2000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x7000 at 0x643000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x24000 at 0x727000 from /lib/tls/i686/cmov/libm-2.11.1.so + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x74B000 from /lib/tls/i686/cmov/libm-2.11.1.so + 
23000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x74C000 from /lib/tls/i686/cmov/libm-2.11.1.so + 
24000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1B000 at 0x7C2000 from /lib/ld-2.11.1.so + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x7DD000 from /lib/ld-2.11.1.so + 1A000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x7DE000 from /lib/ld-2.11.1.so + 1B000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x1000 at 0xCF7000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x15000 at 0xD9C000 from 
/lib/tls/i686/cmov/libpthread-2.11.1.so + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0xDB1000 from 
/lib/tls/i686/cmov/libpthread-2.11.1.so + 14000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0xDB2000 from 
/lib/tls/i686/cmov/libpthread-2.11.1.so + 15000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x2000 at 0xDB3000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x2000 at 0xE96000 from /lib/tls/i686/cmov/libdl-2.11.1.so + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0xE98000 from /lib/tls/i686/cmov/libdl-2.11.1.so + 
1000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0xE99000 from /lib/tls/i686/cmov/libdl-2.11.1.so + 
2000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x8048000 from 
/home/garin/workspace/mytestmtcp/Debug/mytestmtcp + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x8049000 from 
/home/garin/workspace/mytestmtcp/Debug/mytestmtcp + 0
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x1000 at 0x804A000 from 
/home/garin/workspace/mytestmtcp/Debug/mytestmtcp + 1000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x1000 at 0x804B000
[5601] mtcp.c:3181 writememoryarea:
  save anonymous 0x21000 at 0x861E000 from [heap] + 0
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x1000 at 0xB674A000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x800000 at 0xB674B000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x1000 at 0xB6F4B000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x804000 at 0xB6F4C000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x3000 at 0xB775E000
[5601] mtcp.c:3179 writememoryarea:
  save anonymous 0x203000 at 0xBFB39000
[5601] mtcp.c:2378 checkpointeverything:
  (compression): waitpid: No child processes
[5601] mtcp.c:2413 checkpointeverything:
  checkpoint complete
[5601] mtcp.c:2159 checkpointhread:
  resuming everything
[5601] mtcp.c:2172 checkpointhread:
  everything resumed
[5601] mtcp.c:3488 stopthisthread:
  thread 5619 resuming
[5601] mtcp.c:3511 stopthisthread:
  tid 5619 returning to 0x110400
Segmentation fault
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Dmtcp-forum mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dmtcp-forum

Reply via email to