NetBSD-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: child process is not created using clone()



Hi NetBSD Users,

I also found same issue with NetBSD 5.1 .
{{{
Not able to create a child process using clone()  if the executable build by
linking with pthread library.
}}}


I think this is an issue with 'run time linking' in NetBSD Library.
Please provide some valuable information on this issue.


Thanks,

Nikunj




On Wed, Apr 13, 2011 at 12:51 PM, amol pise <amolpise15%gmail.com@localhost> 
wrote:

> Dear All,
>
>  With further investigation to the above problem, I have analyzed the
> process memory maps on netbsd system for my sample scenario.
>
>  The observations are as follows:
>
>  <<Case:1>> Link with pthread:
> ----------------------------------------------
>
>  % gcc sample_clone.c -lpthread
>
>  % ./a.out
> {{{
>  child stack allocated = 804c000
> child stack = 804e710
> }}}
>
>  % pmap -a 5210
>  {{{
>
> Start    End         Size  Offset   rwxpc  RWX  I/W/A Dev     Inode - File
> 08048000-08048fff       4k 00000000 r-xp+ (rwx) 1/0/0 00:00  136709 -
> /home/amol/a.out [0xcb3d79dc]
> 08049000-0805efff      88k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdb15000-bdb15fff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdb16000-bdbc1fff     688k 00000000 r-xp+ (rwx) 1/0/0 00:00   68353 -
> /lib/libc.so.12.128.2 [0xca6ecbd0]
> bdbc2000-bdbc8fff      28k 000ab000 rw-p- (rwx) 1/0/0 00:00   68353 -
> /lib/libc.so.12.128.2 [0xca6ecbd0]
> bdbc9000-bdbd7fff      60k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbd8000-bdbe8fff      68k 00000000 r-xp+ (rwx) 1/0/0 00:00   46223 -
> /usr/lib/libpthread.so.0.6 [0xcb48ae70]
> bdbe9000-bdbe9fff       4k 00010000 rw-p- (rwx) 1/0/0 00:00   46223 -
> /usr/lib/libpthread.so.0.6 [0xcb48ae70]
> bdbea000-bdbeafff       4k 00000000 rw-p- (rwx) 1/1/0 00:00       0 -   [
> anon ]
> bdbeb000-bdbf2fff      32k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbf3000-bdbf3fff       4k 00000000 r-xs- (r-x) 0/0/1 00:00       0 -
>  [ uvm_aobj ]
> bdbf4000-bdbfdfff      40k 00000000 r-xp+ (rwx) 1/0/0 00:00  273409 -
> /libexec/ld.elf_so [0xca6ec5e8]
> bdbfe000-bdbfefff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbff000-bdbfffff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdc00000-bf9fffff   30720k 00000000 ---p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa00000-bfa00fff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa01000-bfa01fff       4k 00000000 ---p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa02000-bfa0ffff      56k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa10000-bfbbffff    1728k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfbc0000-bfbcffff      64k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfbd0000-bfbeffff     128k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfbf0000-bfbfffff      64k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -
>  [ stack ]
>  total               3076k
> }}}
>
>  <<Case:2>> Link without pthread:
> --------------------------------------------------
>
> % gcc sample_clone.c
>
> % ./a.out
> {{{
> child stack allocated = 804b000
> child stack = 804d710
>
>  In child
>  }}}
>
>  % pmap -a 3156
>  {{{
> Start    End         Size  Offset   rwxpc  RWX  I/W/A Dev     Inode - File
> 08048000-08048fff       4k 00000000 r-xp+ (rwx) 1/0/0 00:00  136709 -
> /home/amol/a.out [0xcb3d79dc]
> 08049000-0805dfff      84k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdb28000-bdb28fff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdb29000-bdbd4fff     688k 00000000 r-xp+ (rwx) 1/0/0 00:00   68353 -
> /lib/libc.so.12.128.2 [0xca6ecbd0]
> bdbd5000-bdbdbfff      28k 000ab000 rw-p- (rwx) 1/0/0 00:00   68353 -
> /lib/libc.so.12.128.2 [0xca6ecbd0]
> bdbdc000-bdbeafff      60k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbeb000-bdbf2fff      32k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbf3000-bdbf3fff       4k 00000000 r-xs- (r-x) 0/0/1 00:00       0 -
>  [ uvm_aobj ]
> bdbf4000-bdbfdfff      40k 00000000 r-xp+ (rwx) 1/0/0 00:00  273409 -
> /libexec/ld.elf_so [0xca6ec5e8]
> bdbfe000-bdbfefff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbff000-bdbfffff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdc00000-bf9fffff   30720k 00000000 ---p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa00000-bfbeffff    1984k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfbf0000-bfbfffff      64k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -
>  [ stack ]
>  total               3000k
> }}}
>
>
>  <<Case:3>> Link with pthread (static)
> --------------------------------------------------------
>
> % gcc -static sample_clone.c -lpthread
>
> % ./a.out
> {{{
> child stack allocated = 8058000
> child stack = 805a710
>
>  In child
>  }}}
>
>  % pmap -a 4478
>  {{{
> Start    End         Size  Offset   rwxpc  RWX  I/W/A Dev     Inode - File
> 08048000-08052fff      44k 00000000 r-xp+ (rwx) 1/0/0 00:00  136709 -
> /home/amol/a.out [0xcb3d79dc]
> 08053000-08053fff       4k 0000b000 rw-p+ (rwx) 1/0/0 00:00  136709 -
> /home/amol/a.out [0xcb3d79dc]
> 08054000-08054fff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> 08055000-0806afff      88k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbfe000-bdbfefff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbff000-bdbfffff       4k 00000000 r-xs- (r-x) 0/0/1 00:00       0 -
>  [ uvm_aobj ]
> bdc00000-bf9fffff   30720k 00000000 ---p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa00000-bfbeffff    1984k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfbf0000-bfbfffff      64k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -
>  [ stack ]
>  total               2196k
>
> }}}
>
>
>  <<Case:4>> If for child stack, instead of dynamicaly allocated memory
> used static array then also the issue seen as resolved.
>
> % ./a.out
> {{{
> array = bfbfedb4
>
>  In child
> }}}
>
> % pmap -a 6385
> {{{
> 08048000-08048fff       4k 00000000 r-xp+ (rwx) 1/0/0 00:00  136709 -
> /home/amol/a.out [0xcb3d79dc]
> 08049000-0805efff      88k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdb15000-bdb15fff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdb16000-bdbc1fff     688k 00000000 r-xp+ (rwx) 1/0/0 00:00   68353 -
> /lib/libc.so.12.128.2 [0xca6ecbd0]
> bdbc2000-bdbc8fff      28k 000ab000 rw-p- (rwx) 1/0/0 00:00   68353 -
> /lib/libc.so.12.128.2 [0xca6ecbd0]
> bdbc9000-bdbd7fff      60k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbd8000-bdbe8fff      68k 00000000 r-xp+ (rwx) 1/0/0 00:00   46223 -
> /usr/lib/libpthread.so.0.6 [0xcb48ae70]
> bdbe9000-bdbe9fff       4k 00010000 rw-p- (rwx) 1/0/0 00:00   46223 -
> /usr/lib/libpthread.so.0.6 [0xcb48ae70]
> bdbea000-bdbeafff       4k 00000000 rw-p- (rwx) 1/1/0 00:00       0 -   [
> anon ]
> bdbeb000-bdbf2fff      32k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbf3000-bdbf3fff       4k 00000000 r-xs- (r-x) 0/0/1 00:00       0 -
>  [ uvm_aobj ]
> bdbf4000-bdbfdfff      40k 00000000 r-xp+ (rwx) 1/0/0 00:00  273409 -
> /libexec/ld.elf_so [0xca6ec5e8]
> bdbfe000-bdbfefff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdbff000-bdbfffff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [
> anon ]
> bdc00000-bf9fffff   30720k 00000000 ---p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa00000-bfa00fff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa01000-bfa01fff       4k 00000000 ---p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa02000-bfa0ffff      56k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfa10000-bfbbffff    1728k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfbc0000-bfbcffff      64k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfbd0000-bfbeffff     128k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -
>  [ stack ]
> bfbf0000-bfbfffff      64k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -
>  [ stack ]
>
> }}}
>
> From the above observation it seems that, The dynamicaly allocated
> memory for the child stack having the issue on the NetBSD system.
>
> I appreciate your valuable inputs for this issue.
> Please help me in this regards.
>
> Thank You,
> Amol Pise
>
>
>
> On Tue, Apr 12, 2011 at 3:04 PM, amol pise <amolpise15%gmail.com@localhost> 
> wrote:
> > Hi,
> >
> > I have observed one issue with NetBSD-3.1.
> > The problem description is mentioned below.
> >
> > Issue:
> > -------
> > Not able to create a child process using clone()  if the executable
> > build by linking with pthread library.
> >
> > Scenario:
> > ------------
> >
> > $ cat sample_clone.c
> >
> > {{{
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <pthread.h>
> > #include <unistd.h>
> > #include <signal.h>
> >
> > #define ALIGNMENT 0x08
> >
> > int pid;
> >
> > int
> > fun(void *arg)
> > {
> >  printf("\n In child \n");
> >  _exit(0);
> > }
> >
> > int  main()
> > {
> >  char *ch_stck = NULL,*ch_stck2;
> >  int status;
> >
> >  if ((ch_stck = (char *)malloc(10000)) == NULL)
> >    printf("malloc() fail\n");
> >
> >  printf("child stack allocated = %x\n",ch_stck);
> >
> >  ch_stck2 = (void *)((unsigned long)(ch_stck + 10000) & ~(ALIGNMENT -1));
> >
> >  printf("child stack = %x\n",ch_stck2);
> >
> >  if ((pid = clone(&fun,ch_stck2,SIGCHLD,NULL)) == -1)
> >    printf("clone() fail\n");
> >
> >  if ((wait(&status)) == -1)
> >    printf("wait() fail\n");
> >
> >  return 0;
> > }
> > }}}
> >
> >
> > How to reproduce:
> > --------------------------
> > # gcc sample_clone.c -o sample_clone -lpthread
> >
> > # ./sample_clone
> > {{{
> > child stack allocated = 804c000
> > child stack = 804e710
> > }}}
> >
> > No child statements printed here.
> >
> > But the above issue is not observed for static build.
> >
> > # gcc -static sample_clone.c -o sample_clone -lpthread
> >
> > # ./sample_clone
> > {{{
> > child stack allocated = 8058000
> > child stack = 8058000
> >
> >  In child <===== Here child statements printed.
> > }}}
> >
> > Please let me know, is this the issue in the NetBSD library ?
> >
> > Waiting for the reply.
> >
> > Thank You,
> > Amol Pise


Home | Main Index | Thread Index | Old Index