PERFORCE change 31831 for review
Marcel Moolenaar
marcel at FreeBSD.org
Sat May 24 16:56:14 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=31831
Change 31831 by marcel at marcel_nfs on 2003/05/24 16:56:04
IFC @31826
Affected files ...
.. //depot/projects/ia64/gnu/lib/libstdc++/Makefile#16 integrate
.. //depot/projects/ia64/gnu/usr.bin/cc/cc_int/Makefile#7 integrate
.. //depot/projects/ia64/gnu/usr.bin/cc/cc_int/amd64.patch#1 branch
.. //depot/projects/ia64/lib/libc/amd64/SYS.h#2 integrate
.. //depot/projects/ia64/lib/libc/amd64/sys/brk.S#2 integrate
.. //depot/projects/ia64/lib/libc/amd64/sys/exect.S#2 integrate
.. //depot/projects/ia64/lib/libc/amd64/sys/ptrace.S#2 integrate
.. //depot/projects/ia64/lib/libc/amd64/sys/sbrk.S#2 integrate
.. //depot/projects/ia64/lib/libc/amd64/sys/setlogin.S#2 integrate
.. //depot/projects/ia64/lib/libc/amd64/sys/vfork.S#2 integrate
.. //depot/projects/ia64/lib/libc/posix1e/mac.conf.5#3 integrate
.. //depot/projects/ia64/lib/libc_r/man/pthread_getconcurrency.3#2 integrate
.. //depot/projects/ia64/lib/libpam/modules/pam_chroot/pam_chroot.8#3 integrate
.. //depot/projects/ia64/lib/libpthread/man/pthread_attr_get_np.3#2 integrate
.. //depot/projects/ia64/lib/libpthread/sys/lock.c#4 integrate
.. //depot/projects/ia64/lib/libpthread/sys/lock.h#4 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_cancel.c#6 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_concurrency.c#3 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_cond.c#9 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_create.c#9 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_detach.c#4 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_find_thread.c#4 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_join.c#5 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_kern.c#17 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_nanosleep.c#5 integrate
.. //depot/projects/ia64/lib/libpthread/thread/thr_sig.c#9 integrate
.. //depot/projects/ia64/libexec/Makefile#17 integrate
.. //depot/projects/ia64/libexec/rtld-elf/amd64/reloc.c#2 integrate
.. //depot/projects/ia64/libexec/rtld-elf/amd64/rtld_start.S#2 integrate
.. //depot/projects/ia64/release/doc/en_US.ISO8859-1/hardware/common/dev.sgml#52 integrate
.. //depot/projects/ia64/sbin/bsdlabel/bsdlabel.8#4 integrate
.. //depot/projects/ia64/sbin/mksnap_ffs/mksnap_ffs.8#2 integrate
.. //depot/projects/ia64/share/man/man4/usb.4#9 integrate
.. //depot/projects/ia64/share/man/man9/vnode.9#9 integrate
.. //depot/projects/ia64/sys/amd64/include/asm.h#3 integrate
.. //depot/projects/ia64/sys/dev/cardbus/cardbus_cis.c#14 integrate
.. //depot/projects/ia64/sys/ia64/ia64/exception.s#24 integrate
.. //depot/projects/ia64/sys/ia64/ia64/syscall.s#8 integrate
.. //depot/projects/ia64/sys/ia64/ia64/trap.c#51 integrate
.. //depot/projects/ia64/sys/ia64/include/cpu.h#14 integrate
.. //depot/projects/ia64/sys/ia64/include/cpufunc.h#11 integrate
.. //depot/projects/ia64/usr.sbin/Makefile#38 integrate
.. //depot/projects/ia64/usr.sbin/sysinstall/disks.c#14 integrate
.. //depot/projects/ia64/usr.sbin/sysinstall/dist.c#20 integrate
.. //depot/projects/ia64/usr.sbin/sysinstall/install.c#19 integrate
.. //depot/projects/ia64/usr.sbin/sysinstall/label.c#17 integrate
.. //depot/projects/ia64/usr.sbin/sysinstall/menus.c#30 integrate
.. //depot/projects/ia64/usr.sbin/sysinstall/sysinstall.h#20 integrate
Differences ...
==== //depot/projects/ia64/gnu/lib/libstdc++/Makefile#16 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/gnu/lib/libstdc++/Makefile,v 1.42 2003/02/10 06:09:55 kan Exp $
+# $FreeBSD: src/gnu/lib/libstdc++/Makefile,v 1.43 2003/05/24 19:38:18 peter Exp $
GCCDIR= ${.CURDIR}/../../../contrib/gcc
SRCDIR= ${.CURDIR}/../../../contrib/libstdc++
@@ -8,6 +8,11 @@
${SRCDIR}/config/locale/generic ${SRCDIR} ${SRCDIR}/std \
${SUPDIR} ${GCCDIR}
+.if ${MACHINE_ARCH} == "amd64"
+NOPIC= broken # need libgcc.so or libgcc_pic.a
+NOSHARED= broken
+.endif
+
#SUBDIR= doc
LIB= stdc++
==== //depot/projects/ia64/gnu/usr.bin/cc/cc_int/Makefile#7 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/gnu/usr.bin/cc/cc_int/Makefile,v 1.32 2002/09/17 01:48:49 peter Exp $
+# $FreeBSD: src/gnu/usr.bin/cc/cc_int/Makefile,v 1.33 2003/05/24 20:58:47 peter Exp $
.include "../Makefile.inc"
@@ -23,8 +23,19 @@
toplev.c tree.c unroll.c varasm.c version.c xcoffout.c \
alias.c bitmap.c dyn-string.c \
gcse.c genrtl.c profile.c regmove.c varray.c \
- attribs.c cselib.c debug.c rtl-error.c tree-dump.c tree-inline.c \
- ${GCC_CPU}.c
+ attribs.c cselib.c debug.c rtl-error.c tree-dump.c tree-inline.c
+
+.if ${TARGET_ARCH} != "amd64"
+SRCS+= ${GCC_CPU}.c
+.else
+SRCS+= i386-hacked.c
+CLEANFILES+= i386-hacked.c
+
+i386-hacked.c: ${GCCDIR}/config/i386/i386.c amd64.patch
+ rm -f i386-hacked.c # in case p4 readonly copied
+ cp ${GCCDIR}/config/i386/i386.c i386-hacked.c
+ patch -b .orig < ${.CURDIR}/amd64.patch
+.endif
SRCS+= bb-reorder.c conflict.c ggc-common.c \
ggc-page.c ifcvt.c lists.c predict.c regrename.c resource.c sibcall.c \
==== //depot/projects/ia64/lib/libc/amd64/SYS.h#2 (text+ko) ====
@@ -34,19 +34,30 @@
* SUCH DAMAGE.
*
* @(#)SYS.h 5.5 (Berkeley) 5/7/91
- * $FreeBSD: src/lib/libc/amd64/SYS.h,v 1.25 2003/04/30 18:06:14 peter Exp $
+ * $FreeBSD: src/lib/libc/amd64/SYS.h,v 1.26 2003/05/24 17:35:23 peter Exp $
*/
#include <sys/syscall.h>
#include <machine/asm.h>
-#define SYSCALL(x) 2: jmp PIC_PLT(HIDENAME(cerror)); \
+#ifdef PIC
+#define SYSCALL(x) 2: movq PIC_GOT(HIDENAME(cerror)),%rcx; \
+ jmp *%rcx; \
+ ENTRY(__CONCAT(__sys_,x)); \
+ .weak CNAME(x); \
+ .set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
+ .weak CNAME(__CONCAT(_,x)); \
+ .set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
+ mov __CONCAT($SYS_,x),%rax; KERNCALL; jb 2b
+#else
+#define SYSCALL(x) 2: jmp HIDENAME(cerror); \
ENTRY(__CONCAT(__sys_,x)); \
.weak CNAME(x); \
.set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
.weak CNAME(__CONCAT(_,x)); \
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
mov __CONCAT($SYS_,x),%rax; KERNCALL; jb 2b
+#endif
#define RSYSCALL(x) SYSCALL(x); ret
==== //depot/projects/ia64/lib/libc/amd64/sys/brk.S#2 (text+ko) ====
@@ -38,7 +38,7 @@
.asciz "@(#)brk.s 5.2 (Berkeley) 12/17/90"
#endif /* SYSLIBC_SCCS and not lint */
#include <machine/asm.h>
-__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/brk.S,v 1.11 2003/04/30 18:16:33 peter Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/brk.S,v 1.12 2003/05/24 17:35:23 peter Exp $");
#include "SYS.h"
@@ -51,17 +51,36 @@
ENTRY(brk)
pushq %rdi
movq %rdi,%rax
- cmpq %rax,PIC_GOT(HIDENAME(minbrk))
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(minbrk)),%rdx
+ cmpq %rax,(%rdx)
+#else
+ cmpq %rax,HIDENAME(minbrk)(%rip)
+#endif
jbe ok
- movq PIC_GOT(HIDENAME(minbrk)),%rdi
+#ifdef PIC
+ movq (%rdx),%rdi
+#else
+ movq HIDENAME(minbrk)(%rip),%rdi
+#endif
ok:
movq $SYS_break,%rax
KERNCALL
jb err
movq 0(%rsp),%rax
- movq %rax,PIC_GOT(HIDENAME(curbrk))
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(curbrk)),%rdx
+ movq %rax,(%rdx)
+#else
+ movq %rax,HIDENAME(curbrk)(%rip)
+#endif
movq $0,%rax
popq %rdi
ret
err:
- jmp PIC_PLT(HIDENAME(cerror))
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(cerror)),%rdx
+ jmp *%rdx
+#else
+ jmp HIDENAME(cerror)
+#endif
==== //depot/projects/ia64/lib/libc/amd64/sys/exect.S#2 (text+ko) ====
@@ -38,7 +38,7 @@
.asciz "@(#)exect.s 5.1 (Berkeley) 4/23/90"
#endif /* SYSLIBC_SCCS and not lint */
#include <machine/asm.h>
-__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/exect.S,v 1.10 2003/04/30 18:16:33 peter Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/exect.S,v 1.11 2003/05/24 17:35:23 peter Exp $");
#include "SYS.h"
#include <machine/psl.h>
@@ -51,4 +51,9 @@
pushq %r8
popfq
KERNCALL
- jmp PIC_PLT(HIDENAME(cerror)) /* exect(file, argv, env); */
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(cerror)),%rdx
+ jmp *%rdx
+#else
+ jmp HIDENAME(cerror)
+#endif
==== //depot/projects/ia64/lib/libc/amd64/sys/ptrace.S#2 (text+ko) ====
@@ -38,16 +38,26 @@
.asciz "@(#)ptrace.s 5.1 (Berkeley) 4/23/90"
#endif /* SYSLIBC_SCCS and not lint */
#include <machine/asm.h>
-__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/ptrace.S,v 1.10 2003/04/30 18:16:33 peter Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/ptrace.S,v 1.11 2003/05/24 17:35:23 peter Exp $");
#include "SYS.h"
ENTRY(ptrace)
xorl %eax,%eax
- movl %eax,PIC_GOT(CNAME(errno))
+#ifdef PIC
+ movq PIC_GOT(CNAME(errno)),%r8
+ movl %eax,(%r8)
+#else
+ movl %eax,CNAME(errno)(%rip)
+#endif
mov $SYS_ptrace,%eax
KERNCALL
jb err
ret
err:
- jmp PIC_PLT(HIDENAME(cerror))
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(cerror)),%rdx
+ jmp *%rdx
+#else
+ jmp HIDENAME(cerror)
+#endif
==== //depot/projects/ia64/lib/libc/amd64/sys/sbrk.S#2 (text+ko) ====
@@ -38,7 +38,7 @@
.asciz "@(#)sbrk.s 5.1 (Berkeley) 4/23/90"
#endif /* SYSLIBC_SCCS and not lint */
#include <machine/asm.h>
-__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/sbrk.S,v 1.12 2003/04/30 18:16:33 peter Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/sbrk.S,v 1.13 2003/05/24 17:35:23 peter Exp $");
#include "SYS.h"
@@ -54,19 +54,38 @@
ENTRY(sbrk)
pushq %rdi
movq %rdi,%rcx
- movq PIC_GOT(HIDENAME(curbrk)),%rax
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(curbrk)),%rdx
+ movq (%rdx),%rax
+#else
+ movq HIDENAME(curbrk)(%rip),%rax
+#endif
testq %rcx,%rcx
jz back
addq %rax,%rdi
mov $SYS_break,%eax
KERNCALL
jb err
- movq PIC_GOT(HIDENAME(curbrk)),%rax
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(curbrk)),%rdx
+ movq (%rdx),%rax
+#else
+ movq HIDENAME(curbrk)(%rip),%rax
+#endif
movq 0(%rsp), %rcx
- addq %rcx,PIC_GOT(HIDENAME(curbrk))
+#ifdef PIC
+ addq %rcx,(%rdx)
+#else
+ addq %rcx,HIDENAME(curbrk)(%rip)
+#endif
back:
addq $8, %rsp
ret
err:
addq $8, %rsp
- jmp PIC_PLT(HIDENAME(cerror))
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(cerror)),%rdx
+ jmp *%rdx
+#else
+ jmp HIDENAME(cerror)
+#endif
==== //depot/projects/ia64/lib/libc/amd64/sys/setlogin.S#2 (text+ko) ====
@@ -38,12 +38,17 @@
.asciz "@(#)setlogin.s 5.2 (Berkeley) 4/12/91"
#endif /* LIBC_SCCS and not lint */
#include <machine/asm.h>
-__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/setlogin.S,v 1.10 2003/04/30 18:16:33 peter Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/setlogin.S,v 1.11 2003/05/24 17:35:23 peter Exp $");
#include "SYS.h"
.globl CNAME(_logname_valid) /* in _getlogin() */
SYSCALL(setlogin)
- movl $0,PIC_GOT(CNAME(_logname_valid))
+#ifdef PIC
+ movq PIC_GOT(CNAME(_logname_valid)),%rdx
+ movl $0,(%rdx)
+#else
+ movl $0,CNAME(_logname_valid)(%rip)
+#endif
ret /* setlogin(name) */
==== //depot/projects/ia64/lib/libc/amd64/sys/vfork.S#2 (text+ko) ====
@@ -38,7 +38,7 @@
.asciz "@(#)Ovfork.s 5.1 (Berkeley) 4/23/90"
#endif /* SYSLIBC_SCCS and not lint */
#include <machine/asm.h>
-__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/vfork.S,v 1.20 2003/04/30 18:13:13 peter Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/amd64/sys/vfork.S,v 1.21 2003/05/24 17:35:23 peter Exp $");
#include "SYS.h"
@@ -53,5 +53,10 @@
jb 1f
jmp *%rsi
1:
- pushq %rcx
- jmp PIC_PLT(HIDENAME(cerror))
+ pushq %rsi
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(cerror)),%rdx
+ jmp *%rdx
+#else
+ jmp HIDENAME(cerror)
+#endif
==== //depot/projects/ia64/lib/libc/posix1e/mac.conf.5#3 (text+ko) ====
@@ -27,23 +27,22 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/lib/libc/posix1e/mac.conf.5,v 1.3 2003/04/26 03:32:18 rwatson Exp $
+.\" $FreeBSD: src/lib/libc/posix1e/mac.conf.5,v 1.4 2003/05/24 19:50:43 ru Exp $
.\"
.Dd April 19, 2003
.Dt MAC.CONF 5
.Os
.Sh NAME
.Nm mac.conf
-.Nd Format of the MAC library configuration file
+.Nd format of the MAC library configuration file
.Sh DESCRIPTION
The
.Nm
file configures the default label elements to be used by policy-agnostic
applications that operate on MAC labels.
-.Nm
-contains a series of default label sets specified by object class,
+A file contains a series of default label sets specified by object class,
in addition to blank lines and comments preceded by a
-.Dv #
+.Ql #
symbol.
.Pp
Each declaration consists of a single line with two fields separated
@@ -53,7 +52,7 @@
library calls prior to an application invocation of a function from
.Xr mac_get 3 .
Label element names may optionally begin with a
-.Dv ?
+.Ql \&?
symbol to indicate that a failure to retrieve the label element for
an object should be silently ignored, and improves usability if the
set of MAC policies may change over time.
@@ -86,9 +85,9 @@
MAC library configuration file.
.El
.Sh SEE ALSO
+.Xr mac 3 ,
.Xr mac_get 3 ,
.Xr mac_prepare 3 ,
-.Xr mac 3 ,
.Xr mac 4 ,
.Xr mac 9
.Sh HISTORY
==== //depot/projects/ia64/lib/libc_r/man/pthread_getconcurrency.3#2 (text+ko) ====
@@ -22,12 +22,12 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/lib/libc_r/man/pthread_getconcurrency.3,v 1.1 2003/04/20 01:53:12 jdp Exp $
+.\" $FreeBSD: src/lib/libc_r/man/pthread_getconcurrency.3,v 1.2 2003/05/24 19:50:43 ru Exp $
.Dd April 11, 2003
.Dt PTHREAD_GETCONCURRENCY 3
.Os
.Sh NAME
-.Nm pthread_getconcurrency,
+.Nm pthread_getconcurrency ,
.Nm pthread_setconcurrency
.Nd get or set level of concurrency
.Sh LIBRARY
@@ -35,7 +35,7 @@
.Sh SYNOPSIS
.In pthread.h
.Ft int
-.Fn pthread_getconcurrency "void"
+.Fn pthread_getconcurrency void
.Ft int
.Fn pthread_setconcurrency "int new_level"
.Sh DESCRIPTION
@@ -43,29 +43,37 @@
.Fn pthread_getconcurrency
function allows an application to inform the threads implementation
of its desired concurrency level,
-.Va new_level .
+.Fa new_level .
The actual level of concurrency provided by the implementation
-as a result of this function call is unspecified. If new_level is
-zero, it causes the implementation to maintain the concurrency
+as a result of this function call is unspecified.
+If
+.Fa new_level
+is zero, it causes the implementation to maintain the concurrency
level at its discretion as if
.Fn pthread_setconcurrency
-was never called. The
+was never called.
+The
.Fn pthread_getconcurrency
function returns the value set by a previous call to the
.Fn pthread_setconcurrency
-function. If the
+function.
+If the
.Fn pthread_setconcurrency
function was not previously called, this function returns zero to
indicate that the implementation is maintaining the concurrency
-level. When an application calls
-.Fn pthread_setconcurrency
+level.
+When an application calls
+.Fn pthread_setconcurrency ,
it is informing the implementation of its desired concurrency
-level. The implementation uses this as a hint, not a requirement.
+level.
+The implementation uses this as a hint, not a requirement.
.Sh RETURN VALUES
If successful, the
.Fn pthread_setconcurrency
-function returns zero. Otherwise, an error number is returned
-to indicate the error. The
+function returns zero.
+Otherwise, an error number is returned
+to indicate the error.
+The
.Fn pthread_getconcurrency
function always returns the concurrency level set by a previous
call to
@@ -82,21 +90,21 @@
.Bl -tag -width Er
.It Bq Er EINVAL
The value specified by
-.Va new_level
+.Fa new_level
is negative.
.It Bq Er EAGAIN
-The value specific by
-.Va new_level
+The value specified by
+.Fa new_level
would cause a system resource to be exceeded.
.El
.Sh APPLICATION USAGE
Use of these functions changes the state of the underlying
-concurrency upon which the application depends. Library
-developers are advised to not use the
+concurrency upon which the application depends.
+Library developers are advised to not use the
.Fn pthread_getconcurrency
and
.Fn pthread_setconcurrency
-functions since their use may conflict with an applications
+functions since their use may conflict with an application's
use of these functions.
.Sh STANDARDS
The
@@ -104,4 +112,4 @@
and
.Fn pthread_setconcurrency
functions conform to
-.St -susv2
+.St -susv2 .
==== //depot/projects/ia64/lib/libpam/modules/pam_chroot/pam_chroot.8#3 (text+ko) ====
@@ -3,7 +3,7 @@
.\"
.\" Portions of this software were developed for the FreeBSD Project by
.\" ThinkSec AS and NAI Labs, the Security Research Division of Network
-.\" Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+.\" Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
.\" ("CBOSS"), as part of the DARPA CHATS research program.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -30,7 +30,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/lib/libpam/modules/pam_chroot/pam_chroot.8,v 1.2 2003/04/08 16:52:18 des Exp $
+.\" $FreeBSD: src/lib/libpam/modules/pam_chroot/pam_chroot.8,v 1.3 2003/05/24 19:50:43 ru Exp $
.\"
.Dd February 10, 2003
.Dt PAM_CHROOT 8
@@ -48,11 +48,11 @@
The chroot service module for PAM chroots users into either a
predetermined directory or one derived from their home directory.
If a user's home directory as specified in the
-.Dv passwd
+.Vt passwd
structure returned by
.Xr getpwnam 3
contains the string
-.Dq /./ ,
+.Dq Li /./ ,
the portion of the directory name to the left of that string is used
as the chroot directory, and the portion to the right will be the
current working directory inside the chroot tree.
@@ -63,7 +63,7 @@
options (see below) are used.
.Bl -tag -width ".Cm also_root"
.It Cm also_root
-Do not hold user id 0 exempt from the chroot requirement.
+Do not hold user ID 0 exempt from the chroot requirement.
.It Cm always
Report a failure if a chroot directory could not be derived from the
user's home directory, and the
==== //depot/projects/ia64/lib/libpthread/man/pthread_attr_get_np.3#2 (text+ko) ====
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/lib/libpthread/man/pthread_attr_get_np.3,v 1.1 2003/03/03 22:40:20 phantom Exp $
+.\" $FreeBSD: src/lib/libpthread/man/pthread_attr_get_np.3,v 1.2 2003/05/24 19:50:43 ru Exp $
.\"
.Dd January 31, 2003
.Dt PTHREAD_ATTR_GET_NP 3
@@ -87,8 +87,9 @@
function returns 0.
Otherwise, an error number is returned to indicate the error.
.Sh ERRORS
+The
.Fn pthread_attr_get_np
-will fail if:
+function will fail if:
.Bl -tag -width Er
.It Bq Er EINVAL
Invalid value for one of given parameters.
==== //depot/projects/ia64/lib/libpthread/sys/lock.c#4 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libpthread/sys/lock.c,v 1.4 2003/05/16 19:58:29 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/sys/lock.c,v 1.5 2003/05/24 02:29:25 deischen Exp $
*/
#include <sys/types.h>
@@ -64,7 +64,6 @@
lck->l_head->lr_locked = 0;
lck->l_head->lr_watcher = NULL;
lck->l_head->lr_owner = NULL;
- lck->l_head->lr_waiting = 0;
lck->l_head->lr_active = 1;
lck->l_tail = lck->l_head;
}
@@ -84,7 +83,6 @@
lu->lu_myreq->lr_locked = 1;
lu->lu_myreq->lr_watcher = NULL;
lu->lu_myreq->lr_owner = lu;
- lu->lu_myreq->lr_waiting = 0;
lu->lu_myreq->lr_active = 0;
lu->lu_watchreq = NULL;
lu->lu_priority = 0;
@@ -109,6 +107,7 @@
_lock_acquire(struct lock *lck, struct lockuser *lu, int prio)
{
int i;
+ long lval;
/**
* XXX - We probably want to remove these checks to optimize
@@ -126,7 +125,6 @@
LCK_ASSERT(lu->lu_myreq->lr_locked == 1);
LCK_ASSERT(lu->lu_myreq->lr_watcher == NULL);
LCK_ASSERT(lu->lu_myreq->lr_owner == lu);
- LCK_ASSERT(lu->lu_myreq->lr_waiting == 0);
LCK_ASSERT(lu->lu_watchreq == NULL);
lu->lu_priority = prio;
@@ -169,10 +167,13 @@
if (lu->lu_watchreq->lr_active == 0)
break;
}
- atomic_store_rel_long(&lu->lu_watchreq->lr_waiting, 1);
- while (lu->lu_watchreq->lr_locked != 0)
+ atomic_swap_long((long *)&lu->lu_watchreq->lr_locked,
+ 2, &lval);
+ if (lval == 0)
+ lu->lu_watchreq->lr_locked = 0;
+ else
lck->l_wait(lck, lu);
- atomic_store_rel_long(&lu->lu_watchreq->lr_waiting, 0);
+
}
}
lu->lu_myreq->lr_active = 1;
@@ -187,6 +188,7 @@
struct lockuser *lu_tmp, *lu_h;
struct lockreq *myreq;
int prio_h;
+ long lval;
/**
* XXX - We probably want to remove these checks to optimize
@@ -224,7 +226,6 @@
lu->lu_myreq->lr_locked = 1;
lu->lu_myreq->lr_owner = lu;
lu->lu_myreq->lr_watcher = NULL;
- lu->lu_myreq->lr_waiting = 0;
/*
* Traverse the list of lock requests in reverse order
* looking for the user with the highest priority.
@@ -238,17 +239,26 @@
}
if (lu_h != NULL) {
/* Give the lock to the highest priority user. */
- if ((lu_h->lu_watchreq->lr_waiting != 0) &&
- (lck->l_wakeup != NULL))
- /* Notify the sleeper */
- lck->l_wakeup(lck, lu_h->lu_myreq->lr_watcher);
+ if (lck->l_wakeup != NULL) {
+ atomic_swap_long(
+ (long *)&lu_h->lu_watchreq->lr_locked,
+ 0, &lval);
+ if (lval == 2)
+ /* Notify the sleeper */
+ lck->l_wakeup(lck,
+ lu_h->lu_myreq->lr_watcher);
+ }
else
- atomic_store_rel_long(&lu_h->lu_watchreq->lr_locked, 0);
+ atomic_store_rel_long(
+ &lu_h->lu_watchreq->lr_locked, 0);
} else {
- if ((myreq->lr_waiting != 0) &&
- (lck->l_wakeup != NULL))
- /* Notify the sleeper */
- lck->l_wakeup(lck, myreq->lr_watcher);
+ if (lck->l_wakeup != NULL) {
+ atomic_swap_long((long *)&myreq->lr_locked,
+ 0, &lval);
+ if (lval == 2)
+ /* Notify the sleeper */
+ lck->l_wakeup(lck, myreq->lr_watcher);
+ }
else
/* Give the lock to the previous request. */
atomic_store_rel_long(&myreq->lr_locked, 0);
@@ -263,10 +273,12 @@
lu->lu_myreq = lu->lu_watchreq;
lu->lu_watchreq = NULL;
lu->lu_myreq->lr_locked = 1;
- lu->lu_myreq->lr_waiting = 0;
- if (myreq->lr_waiting != 0 && lck->l_wakeup)
- /* Notify the sleeper */
- lck->l_wakeup(lck, myreq->lr_watcher);
+ if (lck->l_wakeup) {
+ atomic_swap_long((long *)&myreq->lr_locked, 0, &lval);
+ if (lval == 2)
+ /* Notify the sleeper */
+ lck->l_wakeup(lck, myreq->lr_watcher);
+ }
else
/* Give the lock to the previous request. */
atomic_store_rel_long(&myreq->lr_locked, 0);
@@ -277,7 +289,7 @@
void
_lock_grant(struct lock *lck /* unused */, struct lockuser *lu)
{
- atomic_store_rel_long(&lu->lu_watchreq->lr_locked, 0);
+ atomic_store_rel_long(&lu->lu_watchreq->lr_locked, 3);
}
void
==== //depot/projects/ia64/lib/libpthread/sys/lock.h#4 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libpthread/sys/lock.h,v 1.4 2003/05/16 19:58:29 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/sys/lock.h,v 1.5 2003/05/24 02:29:25 deischen Exp $
*/
#ifndef _LOCK_H_
@@ -54,7 +54,6 @@
volatile long lr_locked; /* lock granted = 0, busy otherwise */
struct lockuser *lr_watcher; /* only used for priority locks */
struct lockuser *lr_owner; /* only used for priority locks */
- long lr_waiting; /* non-zero when wakeup needed */
volatile int lr_active; /* non-zero if the lock is last lock for thread */
};
@@ -73,7 +72,7 @@
#define _LCK_BUSY(lu) ((lu)->lu_watchreq->lr_locked != 0)
#define _LCK_ACTIVE(lu) ((lu)->lu_watchreq->lr_active != 0)
-#define _LCK_GRANTED(lu) ((lu)->lu_watchreq->lr_locked == 0)
+#define _LCK_GRANTED(lu) ((lu)->lu_watchreq->lr_locked == 3)
#define _LCK_SET_PRIVATE(lu, p) (lu)->lu_private = (void *)(p)
#define _LCK_GET_PRIVATE(lu) (lu)->lu_private
==== //depot/projects/ia64/lib/libpthread/thread/thr_cancel.c#6 (text+ko) ====
@@ -1,6 +1,6 @@
/*
* David Leonard <d at openbsd.org>, 1999. Public domain.
- * $FreeBSD: src/lib/libpthread/thread/thr_cancel.c,v 1.20 2003/05/06 00:02:54 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/thread/thr_cancel.c,v 1.21 2003/05/24 02:29:25 deischen Exp $
*/
#include <sys/errno.h>
#include <pthread.h>
@@ -19,6 +19,7 @@
_pthread_cancel(pthread_t pthread)
{
struct pthread *curthread = _get_curthread();
+ struct pthread *joinee = NULL;
int ret;
if ((ret = _thr_ref_add(curthread, pthread, /*include dead*/0)) == 0) {
@@ -64,7 +65,17 @@
break;
case PS_JOIN:
+ /* Disconnect the thread from the joinee: */
+ joinee = pthread->join_status.thread;
+ pthread->join_status.thread = NULL;
pthread->cancelflags |= THR_CANCELLING;
+ _thr_setrunnable_unlocked(pthread);
+ if ((joinee != NULL) &&
+ (curthread->kseg == joinee->kseg)) {
+ /* Remove the joiner from the joinee. */
+ joinee->joiner = NULL;
+ joinee = NULL;
+ }
break;
case PS_SUSPENDED:
@@ -103,6 +114,15 @@
*/
THR_SCHED_UNLOCK(curthread, pthread);
_thr_ref_delete(curthread, pthread);
+
+ if ((joinee != NULL) &&
+ (_thr_ref_add(curthread, joinee, /* include dead */1) == 0)) {
+ /* Remove the joiner from the joinee. */
+ THR_SCHED_LOCK(curthread, joinee);
+ joinee->joiner = NULL;
+ THR_SCHED_UNLOCK(curthread, joinee);
+ _thr_ref_delete(curthread, joinee);
+ }
}
return (ret);
}
==== //depot/projects/ia64/lib/libpthread/thread/thr_concurrency.c#3 (text+ko) ====
@@ -24,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libpthread/thread/thr_concurrency.c,v 1.2 2003/04/28 23:56:11 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/thread/thr_concurrency.c,v 1.3 2003/05/24 02:29:25 deischen Exp $
*/
#include <errno.h>
#include <pthread.h>
@@ -103,6 +103,7 @@
TAILQ_INSERT_TAIL(&newkse->k_kseg->kg_kseq,
newkse, k_kgqe);
newkse->k_kseg->kg_ksecount++;
+ newkse->k_flags |= KF_STARTED;
KSE_SCHED_UNLOCK(curthread->kse, newkse->k_kseg);
if (kse_create(&newkse->k_mbx, 0) != 0) {
KSE_SCHED_LOCK(curthread->kse, newkse->k_kseg);
==== //depot/projects/ia64/lib/libpthread/thread/thr_cond.c#9 (text+ko) ====
@@ -29,7 +29,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libpthread/thread/thr_cond.c,v 1.41 2003/05/19 23:04:50 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/thread/thr_cond.c,v 1.42 2003/05/24 02:29:25 deischen Exp $
*/
#include <stdlib.h>
#include <errno.h>
@@ -184,6 +184,9 @@
(rval = pthread_cond_init(cond, NULL)) != 0)
return (rval);
+ if (!_kse_isthreaded())
+ _kse_setthreaded(1);
+
/*
* Enter a loop waiting for a condition signal or broadcast
* to wake up this thread. A loop is needed in case the waiting
@@ -388,6 +391,9 @@
if (*cond == NULL && (rval = pthread_cond_init(cond, NULL)) != 0)
return (rval);
+ if (!_kse_isthreaded())
+ _kse_setthreaded(1);
+
/*
* Enter a loop waiting for a condition signal or broadcast
* to wake up this thread. A loop is needed in case the waiting
==== //depot/projects/ia64/lib/libpthread/thread/thr_create.c#9 (text+ko) ====
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libpthread/thread/thr_create.c,v 1.44 2003/05/04 16:17:01 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/thread/thr_create.c,v 1.45 2003/05/24 02:29:25 deischen Exp $
*/
#include <errno.h>
#include <stdlib.h>
@@ -44,8 +44,6 @@
#include "thr_private.h"
#include "libc_private.h"
-static u_int64_t next_uniqueid = 1;
-
#define OFF(f) offsetof(struct pthread, f)
int _thread_next_offset = OFF(tle.tqe_next);
int _thread_uniqueid_offset = OFF(uniqueid);
@@ -145,8 +143,13 @@
|| ((kseg = _kseg_alloc(curthread)) == NULL))) {
/* Insufficient memory to create a new KSE/KSEG: */
ret = EAGAIN;
- if (kse != NULL)
+#ifndef KMF_DONE
+#define KMF_DONE 0x04
+#endif
+ if (kse != NULL) {
+ kse->k_mbx.km_flags |= KMF_DONE;
_kse_free(curthread, kse);
+ }
if ((new_thread->attr.flags & THR_STACK_USER) == 0) {
crit = _kse_critical_enter();
curkse = _get_curkse();
@@ -161,7 +164,8 @@
else {
if (kseg != NULL) {
/* Add the KSE to the KSEG's list of KSEs. */
- TAILQ_INSERT_HEAD(&kseg->kg_kseq, kse, k_qe);
+ TAILQ_INSERT_HEAD(&kseg->kg_kseq, kse, k_kgqe);
+ kseg->kg_ksecount = 1;
kse->k_kseg = kseg;
kse->k_schedq = &kseg->kg_schedq;
}
@@ -286,30 +290,11 @@
kse->k_mbx.km_curthread = NULL;
}
- crit = _kse_critical_enter();
- KSE_LOCK_ACQUIRE(curthread->kse, &_thread_list_lock);
/*
- * Initialise the unique id which GDB uses to
- * track threads.
- */
- new_thread->uniqueid = next_uniqueid++;
- /* Add the thread to the linked list of all threads: */
- THR_LIST_ADD(new_thread);
- KSE_LOCK_RELEASE(curthread->kse, &_thread_list_lock);
-
- /*
* Schedule the new thread starting a new KSEG/KSE
* pair if necessary.
*/
ret = _thr_schedule_add(curthread, new_thread);
- if (ret != 0) {
- KSE_LOCK_ACQUIRE(curthread->kse,
- &_thread_list_lock);
- THR_LIST_REMOVE(new_thread);
- KSE_LOCK_RELEASE(curthread->kse,
- &_thread_list_lock);
- }
- _kse_critical_leave(crit);
if (ret != 0)
free_thread(curthread, new_thread);
@@ -341,7 +326,7 @@
/* Check if a stack was specified in the thread attributes: */
if ((pattr->stackaddr_attr) != NULL) {
pattr->guardsize_attr = 0;
- pattr->flags = THR_STACK_USER;
+ pattr->flags |= THR_STACK_USER;
ret = 0;
}
else
==== //depot/projects/ia64/lib/libpthread/thread/thr_detach.c#4 (text+ko) ====
@@ -29,7 +29,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libpthread/thread/thr_detach.c,v 1.21 2003/04/28 23:56:11 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/thread/thr_detach.c,v 1.22 2003/05/24 02:29:25 deischen Exp $
*/
#include <sys/types.h>
#include <machine/atomic.h>
@@ -70,8 +70,7 @@
/* Retrieve any joining thread and remove it: */
joiner = pthread->joiner;
- pthread->joiner = NULL;
- if (joiner->kseg == pthread->kseg) {
+ if ((joiner != NULL) && (joiner->kseg == pthread->kseg)) {
/*
* We already own the scheduler lock for the joiner.
* Take advantage of that and make the joiner runnable.
@@ -89,10 +88,10 @@
joiner = NULL;
}
THR_SCHED_UNLOCK(curthread, pthread);
- _thr_ref_delete(curthread, pthread);
/* See if there is a thread waiting in pthread_join(): */
- if (joiner != NULL && _thr_ref_add(curthread, joiner, 0) == 0) {
+ if ((joiner != NULL) &&
+ (_thr_ref_add(curthread, joiner, 0) == 0)) {
/* Lock the joiner before fiddling with it. */
THR_SCHED_LOCK(curthread, joiner);
if (joiner->join_status.thread == pthread) {
@@ -108,6 +107,7 @@
THR_SCHED_UNLOCK(curthread, joiner);
_thr_ref_delete(curthread, joiner);
}
+ _thr_ref_delete(curthread, pthread);
}
/* Return the completion status: */
==== //depot/projects/ia64/lib/libpthread/thread/thr_find_thread.c#4 (text+ko) ====
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libpthread/thread/thr_find_thread.c,v 1.11 2003/04/28 23:56:11 deischen Exp $
+ * $FreeBSD: src/lib/libpthread/thread/thr_find_thread.c,v 1.12 2003/05/24 02:29:25 deischen Exp $
*/
#include <errno.h>
#include <pthread.h>
@@ -47,13 +47,15 @@
{
kse_critical_t crit;
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list