Even with the patches I just sent, the result is still not a workable implementation of NPTL on MIPS. Here's what I see from the "ex1.c" sample test code in the tree's test/pthread directory.
[r...@testmipsel /root]# ldd ./ex1 libpthread.so.0 => /lib/libpthread.so.0 (0x2aaf2000) libc.so.0 => /lib/libc.so.0 (0x2ab43000) libdl.so.0 => /lib/libdl.so.0 (0x2abdc000) ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000) [r...@testmipsel /root]# That doesn't look too bad, but when I run it I get a SEGFAULT. I re-built turning on uClibc's dynamic loader debugging features and this is the result. [r...@testmipsel /root]# ./ex1 _dl_get_ready_to_run:312: Cool, ldso survived making function calls _dl_malloc:194: mmapping more memory _dl_get_ready_to_run:496: Lib Loader: (0x2aaa8000) /lib/ld-uClibc.so.0 _dl_get_ready_to_run:435: calling mprotect on the application program _dl_get_ready_to_run:806: Loading: (0x2aaf2000) /lib/libpthread.so.0 _dl_load_elf_shared_library:738: Found TLS header for /lib/libc.so.0 _dl_load_elf_shared_library:760: Relocated TLS initial image from 0x942a8 to 0x2abd72a8 (size = 0x0) _dl_get_ready_to_run:806: Loading: (0x2ab43000) /lib/libc.so.0 _dl_get_ready_to_run:806: Loading: (0x2abdc000) /lib/libdl.so.0 _dl_get_ready_to_run:806: Loading: (0x2ab43000) /lib/libc.so.0 _dl_get_ready_to_run:806: Loading: (0x2ab43000) /lib/libc.so.0 _dl_get_ready_to_run:942: Calling init_tls()! _dl_malloc:194: mmapping more memory _dl_get_ready_to_run:947: Beginning relocation fixups TLS_TPREL : , 0xc, 0xffff900c TLS_TPREL : __libc_h_errno, 0x0, 0xffff9008 TLS_DTPMOD : __libc_resp, 0, 1 TLS_DTPREL : __libc_resp, 0xffff900c, 0xffff100c TLS_TPREL : __libc_resp, 0x0, 0xffff9000 TLS_TPREL : __libc_errno, 0x0, 0xffff9004 TLS_TPREL : __libc_tsd_RPC_VARS, 0xffff9000, 0xffff2010 TLS_TPREL : errno, 0x0, 0xffff9000 TLS_DTPMOD : h_errno, 0, 1 TLS_DTPREL : h_errno, 0x0, 0xffff8000 TLS_TPREL : __libc_errno, 0x0, 0xffff9000 TLS_TPREL : __resp, 0x0, 0xffff9000 _dl_get_ready_to_run:976: Calling _dl_allocate_tls_init()! Segmentation fault [r...@testmipsel /root]# I re-read Ulrich Drepper's NPTL paper again last week. Twice. I'm still not sure how to interpret or trace what I'm seeing here. The line numbers are familiar to me since I've spent a lot of time with the code these last few weeks. I recognize the loop, for example, at "_dl_get_ready_to_run:806". The TLS_xxxx labels are meaningless to me, as are the offsets that begin with 0xffff.... Do the values above look reasonable? Are they just negative offsets when added to unsigned 32-bit values? Here's the result of mipsel-linux-uclibc-objdump -x ex1: ---------- output start ----------------------------------- [r...@localhost bin]# ./mipsel-linux-uclibc-objdump -x ex1 ex1: file format elf32-tradlittlemips ex1 architecture: mips:isa32, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x00400550 Program Header: PHDR off 0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2 filesz 0x000000c0 memsz 0x000000c0 flags r-x INTERP off 0x000000f4 vaddr 0x004000f4 paddr 0x004000f4 align 2**0 filesz 0x00000014 memsz 0x00000014 flags r-- 0x70000000 off 0x00000108 vaddr 0x00400108 paddr 0x00400108 align 2**2 filesz 0x00000018 memsz 0x00000018 flags r-- LOAD off 0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**12 filesz 0x00000c04 memsz 0x00000c04 flags r-x LOAD off 0x00000c04 vaddr 0x00440c04 paddr 0x00440c04 align 2**12 filesz 0x000000a4 memsz 0x000000bc flags rw- DYNAMIC off 0x00000120 vaddr 0x00400120 paddr 0x00400120 align 2**2 filesz 0x000003a8 memsz 0x000003a8 flags rwx Dynamic Section: NEEDED libpthread.so.0 NEEDED libc.so.0 INIT 0x4004c8 FINI 0x400b20 HASH 0x400200 STRTAB 0x4003f0 SYMTAB 0x4002a0 STRSZ 0xd8 SYMENT 0x10 0x70000016 0x440c50 DEBUG 0x0 PLTGOT 0x440c60 REL 0x0 RELSZ 0x0 RELENT 0x8 0x70000001 0x1 0x70000005 0x2 0x70000006 0x400000 0x7000000a 0x8 0x70000011 0x15 0x70000012 0x1b 0x70000013 0xb private flags = 50001007: [abi=O32] [mips32] [not 32bitmode] Sections: Idx Name Size VMA LMA File off Algn 0 .interp 00000014 004000f4 004000f4 000000f4 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 1 .reginfo 00000018 00400108 00400108 00000108 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_DISCARD 2 .dynamic 000000e0 00400120 00400120 00000120 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .hash 000000a0 00400200 00400200 00000200 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .dynsym 00000150 004002a0 004002a0 000002a0 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 5 .dynstr 000000d8 004003f0 004003f0 000003f0 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 6 .init 00000088 004004c8 004004c8 000004c8 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 7 .text 00000560 00400550 00400550 00000550 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 8 .MIPS.stubs 00000070 00400ab0 00400ab0 00000ab0 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 9 .fini 00000058 00400b20 00400b20 00000b20 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 10 .rodata 00000080 00400b80 00400b80 00000b80 2**4 CONTENTS, ALLOC, LOAD, READONLY, DATA 11 .eh_frame 00000004 00400c00 00400c00 00000c00 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 12 .ctors 00000008 00440c04 00440c04 00000c04 2**2 CONTENTS, ALLOC, LOAD, DATA 13 .dtors 00000008 00440c0c 00440c0c 00000c0c 2**2 CONTENTS, ALLOC, LOAD, DATA 14 .jcr 00000004 00440c14 00440c14 00000c14 2**2 CONTENTS, ALLOC, LOAD, DATA 15 .data 00000030 00440c20 00440c20 00000c20 2**4 CONTENTS, ALLOC, LOAD, DATA 16 .rld_map 00000004 00440c50 00440c50 00000c50 2**2 CONTENTS, ALLOC, LOAD, DATA 17 .got 00000048 00440c60 00440c60 00000c60 2**4 CONTENTS, ALLOC, LOAD, DATA 18 .bss 00000010 00440cb0 00440cb0 00000ca8 2**4 ALLOC 19 .comment 0000005a 00000000 00000000 00000ca8 2**0 CONTENTS, READONLY 20 .debug_aranges 00000050 00000000 00000000 00000d08 2**3 CONTENTS, READONLY, DEBUGGING 21 .debug_info 000000ee 00000000 00000000 00000d58 2**0 CONTENTS, READONLY, DEBUGGING 22 .debug_abbrev 00000020 00000000 00000000 00000e46 2**0 CONTENTS, READONLY, DEBUGGING 23 .debug_line 0000009e 00000000 00000000 00000e66 2**0 CONTENTS, READONLY, DEBUGGING 24 .mdebug.abi32 00000000 0000009e 0000009e 00000f04 2**0 CONTENTS, READONLY 25 .pdr 000000c0 00000000 00000000 00000f04 2**2 CONTENTS, READONLY [r...@localhost bin]# ---------- end output ----------------------------------- I chopped off the SYMBOL TABLE output in the interest of brevity. I can post that, too, if anyone thinks it might help. If anyone has any suggestions about how to procede I'm all ears! Thanks. Dan E -- http://www.fastmail.fm - Access your email from home and the web _______________________________________________ uClibc mailing list uClibc@uclibc.org http://lists.busybox.net/mailman/listinfo/uclibc