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] |