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