This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! sparc32 built --with-tls --without-__thread just fine, passed make check. sparc64 is worse. The following patch contains some fixes, now I need to build a fixed kernel to actually test the rest (kernel clobbers the thread register on setjmp and getcontext). 2003-02-21 Jakub Jelinek <jakub at redhat dot com> * sysdeps/sparc/sparc64/elf/configure.in: New file. * sysdeps/sparc/sparc64/elf/configure: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/Makefile (sysdep-CFLAGS): Use -fcall-used-g6, not -fcall-used-g7. linuxthreads/ * sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S (__vfork): Call __fork instead of branching to it if BROKEN_SPARC_WDISP22. * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h (PSEUDO): Fix typo. * sysdeps/unix/sysv/linux/sparc/Makefile (specs): Add ./ prefix to crti.o and crtn.o. * sysdeps/unix/sysv/linux/x86_64/Makefile (specs): Likewise. --- libc/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S.jj Tue Feb 11 01:28:49 2003 +++ libc/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S Fri Feb 21 08:39:01 2003 @@ -34,13 +34,16 @@ ENTRY(__vfork) mov %o1, %o7 or %o2, %lo(__libc_pthread_functions), %o2 ldx [%o0 + %o2], %o2 - ldx [%o2], %o2 - cmp %o2, 0 - bne HIDDEN_JUMPTARGET(__fork) + ldx [%o2], %o0 #else .weak pthread_create sethi %hi(pthread_create), %o0 or %o0, %lo(pthread_create), %o0 +#endif +#if defined SHARED && !defined BROKEN_SPARC_WDISP22 + cmp %o0, 0 + bne HIDDEN_JUMPTARGET(__fork) +#else brnz,pn %o0, 1f #endif mov __NR_vfork, %g1 @@ -50,7 +53,7 @@ ENTRY(__vfork) sub %o1, 1, %o1 retl and %o0, %o1, %o0 -#ifndef SHARED +#if !defined SHARED || defined BROKEN_SPARC_WDISP22 1: mov %o7, %g1 call HIDDEN_JUMPTARGET(__fork) mov %g1, %o7 --- libc/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h.jj Mon Jan 27 15:48:41 2003 +++ libc/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h Fri Feb 21 12:25:42 2003 @@ -30,7 +30,7 @@ .text; \ ENTRY(name) \ ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1; \ - brz,pn %g1, 1f; \ + brnz,pn %g1, 1f; \ mov SYS_ify(syscall_name), %g1; \ ta 0x6d; \ bcs,pn %xcc, __syscall_error_handler; \ --- libc/linuxthreads/sysdeps/unix/sysv/linux/sparc/Makefile.jj Mon Sep 16 21:47:38 2002 +++ libc/linuxthreads/sysdeps/unix/sysv/linux/sparc/Makefile Fri Feb 21 17:09:39 2003 @@ -6,5 +6,6 @@ before-compile += $(objpfx)specs generated += specs $(objpfx)specs: $(CC) $(CFLAGS) $(CPPFLAGS) -dumpspecs \ - | sed 's,/usr/lib\(\|64\)/\(crt[in]\.o\),\2,g' > $@ + | sed 's,\(/usr/lib\(\|64\)/\|^\|\([^/a-z]\)\)\(crt[in]\.o\),\3./\4,g' > $ at dot new + mv -f $ at dot new $@ endif --- libc/linuxthreads/sysdeps/unix/sysv/linux/x86_64/Makefile.jj Sat Aug 31 01:31:17 2002 +++ libc/linuxthreads/sysdeps/unix/sysv/linux/x86_64/Makefile Fri Feb 21 17:11:35 2003 @@ -7,6 +7,6 @@ before-compile += $(objpfx)specs generated += specs $(objpfx)specs: $(CC) $(CFLAGS) $(CPPFLAGS) -dumpspecs \ - | sed 's,/usr/lib64/\(crt[in]\.o\),\1,g' > $ at dot new + | sed 's,\(/usr/lib\(\|64\)/\|^\|\([^/a-z]\)\)\(crt[in]\.o\),\3./\4,g' > $ at dot new mv -f $ at dot new $@ endif --- libc/sysdeps/sparc/sparc64/elf/configure.in.jj Fri Feb 21 08:18:54 2003 +++ libc/sysdeps/sparc/sparc64/elf/configure.in Fri Feb 21 08:29:36 2003 @@ -0,0 +1,61 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/sparc/sparc64/elf. + +if test "$usetls" != no; then +# Check for support of thread-local storage handling in assembler and linker. +AC_CACHE_CHECK(for sparc64 TLS support, libc_cv_sparc64_tls, [dnl +cat > conftest.s <<\EOF + .section ".tdata", "awT", @progbits + .globl foo +foo: .word 1 + .section ".tbss", "awT", @nobits + .globl bar +bar: .skip 4 + .text + .globl main +main: sethi %tgd_hi22(foo), %l1 + add %l1, %tgd_lo10(foo), %l1 + add %l7, %l1, %o0, %tgd_add(foo) + call __tls_get_addr, %tgd_call(foo) + sethi %tldm_hi22(bar), %l1 + add %l1, %tldm_lo10(bar), %l1 + add %l7, %l1, %o0, %tldm_add(bar) + call __tls_get_addr, %tldm_call(bar) + sethi %tldo_hix22(bar), %l1 + xor %l1, %tldo_lox10(bar), %l1 + add %o0, %l1, %l1, %tldo_add(bar) + sethi %tie_hi22(foo), %l1 + add %l1, %tie_lo10(foo), %l1 + ldx [%l7 + %l1], %l1, %tie_ldx(foo) + add %g7, %l1, %l1, %tie_add(foo) + sethi %tle_hix22(foo), %l1 + xor %l1, %tle_lox10(foo), %l1 +EOF +dnl +if AC_TRY_COMMAND(${CC-cc} -o conftest.bin $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then + libc_cv_sparc64_tls=yes +else + libc_cv_sparc64_tls=no +fi +rm -f conftest*]) +if test $libc_cv_sparc64_tls = yes; then + AC_DEFINE(HAVE_TLS_SUPPORT) +fi +fi + +# Check for broken WDISP22 in the linker. +AC_CACHE_CHECK(for sparc64 ld WDISP22 handling, libc_cv_sparc64_wdisp22, [dnl +echo 'bne foo; nop' > conftest1.s +echo '.globl foo; .hidden foo; foo: nop' > conftest2.s +libc_cv_sparc64_wdisp22=unknown +if AC_TRY_COMMAND(${CC-cc} -nostdlib -shared $CFLAGS conftest1.s conftest2.s -o conftest.so 1>&AS_MESSAGE_LOG_FD); then + if readelf -r conftest.so | grep -q R_SPARC_WDISP22; then + libc_cv_sparc64_wdisp22=broken + else + libc_cv_sparc64_wdisp22=ok + fi +fi +rm -f conftest*]) +if test $libc_cv_sparc64_wdisp22 != ok; then + AC_DEFINE(BROKEN_SPARC_WDISP22) +fi --- libc/sysdeps/sparc/sparc64/elf/configure.jj Fri Feb 21 08:19:00 2003 +++ libc/sysdeps/sparc/sparc64/elf/configure Fri Feb 21 08:31:02 2003 @@ -0,0 +1,90 @@ +# This file is generated from configure.in by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/sparc/sparc64/elf. + +if test "$usetls" != no; then +# Check for support of thread-local storage handling in assembler and linker. +echo "$as_me:$LINENO: checking for sparc64 TLS support" >&5 +echo $ECHO_N "checking for sparc64 TLS support... $ECHO_C" >&6 +if test "${libc_cv_sparc64_tls+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat > conftest.s <<\EOF + .section ".tdata", "awT", @progbits + .globl foo +foo: .word 1 + .section ".tbss", "awT", @nobits + .globl bar +bar: .skip 4 + .text + .globl main +main: sethi %tgd_hi22(foo), %l1 + add %l1, %tgd_lo10(foo), %l1 + add %l7, %l1, %o0, %tgd_add(foo) + call __tls_get_addr, %tgd_call(foo) + sethi %tldm_hi22(bar), %l1 + add %l1, %tldm_lo10(bar), %l1 + add %l7, %l1, %o0, %tldm_add(bar) + call __tls_get_addr, %tldm_call(bar) + sethi %tldo_hix22(bar), %l1 + xor %l1, %tldo_lox10(bar), %l1 + add %o0, %l1, %l1, %tldo_add(bar) + sethi %tie_hi22(foo), %l1 + add %l1, %tie_lo10(foo), %l1 + ldx [%l7 + %l1], %l1, %tie_ldx(foo) + add %g7, %l1, %l1, %tie_add(foo) + sethi %tle_hix22(foo), %l1 + xor %l1, %tle_lox10(foo), %l1 +EOF +if { ac_try='${CC-cc} -o conftest.bin $CFLAGS conftest.s 1>&5' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libc_cv_sparc64_tls=yes +else + libc_cv_sparc64_tls=no +fi +rm -f conftest* +fi +echo "$as_me:$LINENO: result: $libc_cv_sparc64_tls" >&5 +echo "${ECHO_T}$libc_cv_sparc64_tls" >&6 +if test $libc_cv_sparc64_tls = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_TLS_SUPPORT 1 +_ACEOF + +fi +fi + +# Check for broken WDISP22 in the linker. +echo "$as_me:$LINENO: checking for sparc64 ld WDISP22 handling" >&5 +echo $ECHO_N "checking for sparc64 ld WDISP22 handling... $ECHO_C" >&6 +if test "${libc_cv_sparc64_wdisp22+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + echo 'bne foo; nop' > conftest1.s +echo '.globl foo; .hidden foo; foo: nop' > conftest2.s +libc_cv_sparc64_wdisp22=unknown +if { ac_try='${CC-cc} -nostdlib -shared $CFLAGS conftest1.s conftest2.s -o conftest.so 1>&5' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + if readelf -r conftest.so | grep -q R_SPARC_WDISP22; then + libc_cv_sparc64_wdisp22=broken + else + libc_cv_sparc64_wdisp22=ok + fi +fi +rm -f conftest* +fi +echo "$as_me:$LINENO: result: $libc_cv_sparc64_wdisp22" >&5 +echo "${ECHO_T}$libc_cv_sparc64_wdisp22" >&6 +if test $libc_cv_sparc64_wdisp22 != ok; then + cat >>confdefs.h <<\_ACEOF +#define BROKEN_SPARC_WDISP22 1 +_ACEOF + +fi --- libc/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile.jj Tue Apr 18 02:15:16 2000 +++ libc/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile Fri Feb 21 08:48:10 2003 @@ -1,2 +1,2 @@ -sysdep-CFLAGS += -fcall-used-g7 +sysdep-CFLAGS += -fcall-used-g6 LD += -melf64_sparc Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |