[uClibc 0002264]: pthread issues with 0.9.29

bugs at busybox.net bugs at busybox.net
Wed Mar 26 21:48:29 UTC 2008


A NOTE has been added to this issue. 
====================================================================== 
http://busybox.net/bugs/view.php?id=2264 
====================================================================== 
Reported By:                kannappan
Assigned To:                uClibc
====================================================================== 
Project:                    uClibc
Issue ID:                   2264
Category:                   Posix Threads
Reproducibility:            always
Severity:                   major
Priority:                   normal
Status:                     feedback
====================================================================== 
Date Submitted:             02-20-2008 03:29 PST
Last Modified:              03-26-2008 14:48 PDT
====================================================================== 
Summary:                    pthread issues with 0.9.29
Description: 
I am using uclibc0.9.29, binutils 2.18 for ARM926T
I am facing problems executing applications which uses pthread.
when including pthread library my application crashes giving message
"segmentation fault". But the same is working with glibc .

When I debugged using strace It gave following error message

# strace  ./run_loop
execve("./run_loop", ["./run_loop"], [/* 16 vars */]) = -1 ENOEXEC (Exec
format
error)
write(2, "strace: exec: Exec format error\n", 32strace: exec: Exec format
error
) = 32
exit(1)                                 = ?
Process 738 detached

====================================================================== 

---------------------------------------------------------------------- 
 carmelo73 - 02-20-08 04:40  
---------------------------------------------------------------------- 
>From your output there is no evidence of a segfault. Please provide more
information.
Command line used to build your application. Source code if available.
Further I suggest you to build with debug synmbol (both your application
and uclibc) and start using gdb to debug.
The info you provide are not enough to figure out what is going wrong 

---------------------------------------------------------------------- 
 kannappan - 02-22-08 00:06  
---------------------------------------------------------------------- 
The problem happens when -lpthread is used along with -lc.

for example:

# arm-linux-gcc -lc -lpthread sample.c 

The strace for this attached.

The same program works when i compile with
# arm-linux-gcc -lpthread sample.c 

---------------------------------------------------------------------- 
 carmelo73 - 02-22-08 00:13  
---------------------------------------------------------------------- 
As a general suggestion, you don't need to link explicitly against libc
(-lc)...
it is done by default by the compiler (append -v at your build command and
you will see what it is doing silently)
Further are you sure arm-linux-gcc is properly configured for uClibc ?
Could you post the output of the command readelf -l <executable> ? 

---------------------------------------------------------------------- 
 vapier - 02-22-08 17:25  
---------------------------------------------------------------------- 
straces are not terribly useful when talking about a threading crash

please post a source code test case which we can compile/debug 

---------------------------------------------------------------------- 
 kannappan - 02-28-08 02:32  
---------------------------------------------------------------------- 
Following is the output of readelf

[kans at localhost test]$ arm-linux-readelf -l a.out 

Elf file type is EXEC (Executable file)
Entry point 0x83ac
There are 5 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  PHDR           0x000034 0x00008034 0x00008034 0x000a0 0x000a0 R E 0x4
  INTERP         0x0000d4 0x000080d4 0x000080d4 0x00014 0x00014 R   0x1
      [Requesting program interpreter: /lib/ld-uClibc.so.0]
  LOAD           0x000000 0x00008000 0x00008000 0x0050c 0x0050c R E
0x8000
  LOAD           0x00050c 0x0001050c 0x0001050c 0x000ec 0x00108 RW 
0x8000
  DYNAMIC        0x000518 0x00010518 0x00010518 0x000c0 0x000c0 RW  0x4

 Section to Segment mapping:
  Segment Sections...
   00     
   01     .interp 
   02     .interp .hash .dynsym .dynstr .rel.plt .init .plt .text .fini
.rodata .eh_frame 
   03     .init_array .fini_array .jcr .dynamic .got .data .bss 
   04     .dynamic 

Following are the output when compiled with -v option

Using built-in specs.
Target: arm-linux-uclibcgnueabi
Configured with:
/data/buildroot/buildroot/toolchain_build_arm/gcc-4.1.2/configure
--prefix=/data/buildroot/buildroot/build_arm/staging_dir
--build=i386-pc-linux-gnu --host=i386-pc-linux-gnu
--target=arm-linux-uclibcgnueabi --enable-languages=c,c++
--disable-__cxa_atexit --enable-target-optspace --with-gnu-ld
--enable-shared --disable-nls --enable-threads --disable-multilib
--with-float=soft
Thread model: posix
gcc version 4.1.2

/data/buildroot/buildroot/build_arm/staging_dir/libexec/gcc/arm-linux-uclibcgnueabi/4.1.2/cc1
-quiet -v sample.c -quiet -dumpbase sample.c -mfloat-abi=soft -auxbase
sample -version -o /tmp/ccESRQ7x.s
ignoring nonexistent directory
"/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/../../../../arm-linux-uclibcgnueabi/include"
#include "..." search starts here:
#include <...> search starts here:

/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/include

/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/../../../../arm-linux-uclibcgnueabi/sys-include
End of search list.
GNU C version 4.1.2 (arm-linux-uclibcgnueabi)
        compiled by GNU C version 3.4.6 20060404 (Red Hat 3.4.6-8).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64298
Compiler executable checksum: 38e7075577afcde72725d9029281c4bb

/data/buildroot/buildroot/build_arm/staging_dir/usr/bin/arm-linux-uclibcgnueabi-as
-mfloat-abi=soft -meabi=4 -o /tmp/ccW0JqfY.o /tmp/ccESRQ7x.s

/data/buildroot/buildroot/build_arm/staging_dir/libexec/gcc/arm-linux-uclibcgnueabi/4.1.2/collect2
--eh-frame-hdr -dynamic-linker /lib/ld-uClibc.so.0 -X -m armelf_linux_eabi
/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/../../../../arm-linux-uclibcgnueabi/lib/crt1.o
/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/../../../../arm-linux-uclibcgnueabi/lib/crti.o
/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/crtbegin.o
-L/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2
-L/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/../../../../arm-linux-uclibcgnueabi/lib
/tmp/ccW0JqfY.o -lpthread -lgcc --as-needed -lgcc_s --no-as-needed -lc
-lgcc --as-needed -lgcc_s --no-as-needed
/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/crtend.o
/data/buildroot/buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.2/../../../../arm-linux-uclibcgnueabi/lib/crtn.o


---------------------------------------------------------------------- 
 xi - 03-26-08 14:48  
---------------------------------------------------------------------- 
This is very similar to what I encountered with our MIPS toolchain and
NPTL. 0002414 might be the same problem too. 

I found one potential cause:

- Once libpthread is linked, standard loader is used instead of uClibc
loader


Here is a console log showing this problem with ldd:

$
/opt/toolchains/uclibc-crosstools-gcc-4.2.1-7/usr/bin/mips-linux-uclibc-gcc
-o test testc.o
/opt/toolchains/uclibc-crosstools-gcc-4.2.1-7/usr/bin/mips-linux-uclibc-ldd
test
checking sub-depends for 'not found'
        libc.so.0 => not found (0x00000000)
        /lib/ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x00000000)
/opt/toolchains/uclibc-crosstools-gcc-4.2.1-7/usr/bin/mips-linux-uclibc-gcc
-o test testc.o –lpthread

$
/opt/toolchains/uclibc-crosstools-gcc-4.2.1-7/usr/bin/mips-linux-uclibc-ldd
test
checking sub-depends for '/lib/libpthread.so.0'
checking sub-depends for 'not found'
checking sub-depends for '/lib/libc.so.6'
        libpthread.so.0 => /lib/libpthread.so.0 (0x00000000)
        libc.so.0 => not found (0x00000000)
        libc.so.6 => /lib/libc.so.6 (0x00000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)
$ 

Issue History 
Date Modified   Username       Field                    Change               
====================================================================== 
02-20-08 03:29  kannappan      New Issue                                    
02-20-08 03:29  kannappan      Status                   new => assigned     
02-20-08 03:29  kannappan      Assigned To               => uClibc          
02-20-08 04:40  carmelo73      Note Added: 0005174                          
02-20-08 04:40  carmelo73      Status                   assigned => feedback
02-22-08 00:03  kannappan      File Added: a                                
02-22-08 00:06  kannappan      Note Added: 0005224                          
02-22-08 00:13  carmelo73      Note Added: 0005234                          
02-22-08 17:25  vapier         Note Added: 0005254                          
02-28-08 02:32  kannappan      Note Added: 0005494                          
02-28-08 02:34  kannappan      File Added: sample.c                         
03-26-08 14:48  xi             Note Added: 0006074                          
======================================================================




More information about the uClibc-cvs mailing list