i found the reason why SIGSEGV is generated i didnt call exit(0) in the end
thanks On Nov 17, 10:04 pm, "David Turner" <[EMAIL PROTECTED]> wrote: > You are using arm-none-linux-gnueabi-gcc which is not compatible with the > android toolchain. > This kind of issue is perfectly normal and non supported. > > Only trivial programs may correctly work that way, more by chance that > anything else. > > On Mon, Nov 17, 2008 at 1:35 PM, allstars <[EMAIL PROTECTED]> wrote: > > > hello world > > i try to do a simple pthread test on android (natively) > > > /*========START OF CODE ===============*/ > > #include <stdio.h> > > #include <sys/types.h> > > #include <pthread.h> > > > void *hello(void *arg) > > { > > printf("Hello from node %d\n", *(int *)arg); > > } > > > int main(int argc, char* argv[]) > > { > > int n,i; > > pthread_t threads[2]; > > > n = 2; > > > /* Start up thread */ > > for (i = 0; i < n; i++) > > { > > pthread_create(&threads[i], NULL, hello, (void *)&i); > > } > > > /* Synchronize the completion of each thread. */ > > for (i = 0; i < n; i++) > > { > > pthread_join(threads[i],NULL); > > } > > printf("pthread_test returns \n"); > > return 0; > > } > > /*===========END OF CODE=========*/ > > > then i compile it (pthread.c) > > $>arm-none-linux-gnueabi-gcc -c -g pthread.c > > $>arm-none-linux-gnueabi-ld --entry=main --dynamic-linker /system/bin/ > > linker -nostdlib -rpath /system/lib -rpath system/lib -L system/lib - > > lc -o pthread_test pthread.o > > > ./system is the directory of system image > > > but in pthread_join , SIGSEGV will be generated > > > i use strace to debug this > > # ./strace ./pthread_test > > execve("./pthread_test", ["./pthread_test"], [/* 10 vars */]) = 0 > > getpid() = 189 > > syscall_983045(0xb00169c4, 0x4990, 0xb0011030, 0, 0x1, 0xbecf6d94, > > 0xbecf6d9c, 0xf0005, 0, 0, 0, 0, 0, 0xbecf6d60, 0xb0000dcd, > > 0xb00015ac, 0x80000010, 0xb00169c4, 0, 0, 0, 0xeb48, 0xcd1f8, 0xcd1d0, > > 0, 0, 0, 0, 0, 0, 0, 0) = 0 > > gettid() = 189 > > sigaction(SIGILL, {0xb0001211, [], SA_RESTART}, {SIG_DFL}, 0) = 0 > > sigaction(SIGABRT, {0xb0001211, [], SA_RESTART}, {SIG_DFL}, 0) = 0 > > sigaction(SIGBUS, {0xb0001211, [], SA_RESTART}, {SIG_DFL}, 0) = 0 > > sigaction(SIGFPE, {0xb0001211, [], SA_RESTART}, {SIG_DFL}, 0) = 0 > > sigaction(SIGSEGV, {0xb0001211, [], SA_RESTART}, {SIG_DFL}, 0) = 0 > > sigaction(SIGSTKFLT, {0xb0001211, [], SA_RESTART}, {SIG_DFL}, 0) = 0 > > open("libc.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or > > directory) > > open("/system/lib/libc.so", O_RDONLY|O_LARGEFILE) = 3 > > lseek(3, 0, SEEK_SET) = 0 > > read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0` > > \225\0\000"..., 4096) = 4096 > > lseek(3, -8, SEEK_END) = 227472 > > read(3, "\0\0\340\257PRE ", 8) = 8 > > mmap2(0xafe00000, 274432, PROT_READ|PROT_EXEC, MAP_PRIVATE| > > MAP_ANONYMOUS, -1, 0) = 0xafe00000 > > mmap2(0xafe00000, 214032, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, > > 3, 0) = 0xafe00000 > > mprotect(0xafe00000, 217088, PROT_READ|PROT_WRITE|PROT_EXEC) = 0 > > mmap2(0xafe35000, 8420, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, > > 3, 0x35) = 0xafe35000 > > mmap2(0xafe38000, 41760, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED| > > MAP_ANONYMOUS, -1, 0) = 0xafe38000 > > close(3) = 0 > > mprotect(0xafe00000, 217088, PROT_READ|PROT_EXEC) = 0 > > getuid32() = 0 > > geteuid32() = 0 > > open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3 > > read(3, "%\374\353\364", 4) = 4 > > close(3) = 0 > > mprotect(0x8000, 4096, PROT_READ|PROT_EXEC) = 0 > > getuid32() = 0 > > geteuid32() = 0 > > brk(0) = 0x11000 > > brk(0x11000) = 0x11000 > > brk(0x12000) = 0x12000 > > mmap2(0x10000000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE| > > MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x10000000 > > mprotect(0x10000000, 4096, PROT_NONE) = 0 > > clone(child_stack=0x100fff00, flags=CLONE_VM|CLONE_FS|CLONE_FILES| > > CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_DETACHED) = 190 > > futex(0x100fff00, FUTEX_WAKE, 1Hello from node 0 > > ) = 1 > > mmap2(0x10000000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE| > > MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x10000000 > > mprotect(0x10000000, 4096, PROT_NONE) = 0 > > clone(child_stack=0x100fff00, flags=CLONE_VM|CLONE_FS|CLONE_FILES| > > CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_DETACHED) = 191 > > futex(0x100fff00, FUTEX_WAKE, 1Hello from node 1 > > ) = 1 > > --- SIGSEGV (Segmentation fault) @ 0 (4) --- > > sigaction(SIGUSR1, {SIG_IGN}, {SIG_DFL}, 0) = 0 > > gettid() = 189 > > SYS_281(0x1, 0x1, 0, 0xffffe52c, 0xb000f55c) = 3 > > SYS_283(0x3, 0xbecf69b6, 0x14, 0x1, 0x3) = 0 > > write(3, "\275\0\0\0", 4) = 4 > > read(3, 0xbecf6a54, 1) = ? ERESTARTSYS (To be > > restarted) > > --- SIGCONT (Continued) @ 0 (0) --- > > read(3, "", 1) = 0 > > close(3) = 0 > > sigaction(SIGSEGV, {SIG_IGN}, {0xb0001211, [], SA_RESTART}, 0) = 0 > > sigreturn() = ? (mask now []) > > --- SIGSEGV (Segmentation fault) @ 0 (4) --- > > +++ killed by SIGSEGV +++ > > > so i would like to ask why pthread_join here will always generate > > SIGSEGV??? > > > thanks > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---