[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r5661 - in glibc-package/trunk/debian: . patches/kfreebsd



Author: ps-guest
Date: 2013-07-08 20:04:14 +0000 (Mon, 08 Jul 2013)
New Revision: 5661

Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/kfreebsd/local-fbtl.diff
   glibc-package/trunk/debian/patches/kfreebsd/local-sysdeps.diff
Log:
kfreebsd/local-sysdeps.diff: update to revision 4699 (from glibc-bsd).



Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2013-07-08 11:53:47 UTC (rev 5660)
+++ glibc-package/trunk/debian/changelog	2013-07-08 20:04:14 UTC (rev 5661)
@@ -10,7 +10,7 @@
   * hurd-i386/tg-tls.diff: Move some hooks to tg-tls-threadvar.diff.
 
   [ Petr Salinger ]
-  * kfreebsd/local-sysdeps.diff: update to revision 4693 (from glibc-bsd).
+  * kfreebsd/local-sysdeps.diff: update to revision 4699 (from glibc-bsd).
   * split some parts of kfreebsd/local-linuxthreads29.diff
     into  kfreebsd/local-nscd-no-sockcloexec.diff and
           kfreebsd/local-linuxthreads-tlsdesc.diff

Modified: glibc-package/trunk/debian/patches/kfreebsd/local-fbtl.diff
===================================================================
--- glibc-package/trunk/debian/patches/kfreebsd/local-fbtl.diff	2013-07-08 11:53:47 UTC (rev 5660)
+++ glibc-package/trunk/debian/patches/kfreebsd/local-fbtl.diff	2013-07-08 20:04:14 UTC (rev 5661)
@@ -33184,269 +33184,6 @@
 +  return res;
 +}
 --- /dev/null
-+++ b/fbtl/sysdeps/pthread/createthread.c~
-@@ -0,0 +1,260 @@
-+/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
-+
-+#include <sched.h>
-+#include <setjmp.h>
-+#include <signal.h>
-+#include <stdlib.h>
-+#include <atomic.h>
-+#include <ldsodefs.h>
-+#include <tls.h>
-+#include <stdint.h>
-+
-+#include "kernel-features.h"
-+
-+
-+#define CLONE_SIGNAL		(CLONE_SIGHAND | CLONE_THREAD)
-+
-+/* Unless otherwise specified, the thread "register" is going to be
-+   initialized with a pointer to the TCB.  */
-+#ifndef TLS_VALUE
-+# define TLS_VALUE pd
-+#endif
-+
-+#ifndef ARCH_CLONE
-+# define ARCH_CLONE __clone
-+#endif
-+
-+
-+#ifndef TLS_MULTIPLE_THREADS_IN_TCB
-+/* Pointer to the corresponding variable in libc.  */
-+int *__libc_multiple_threads_ptr attribute_hidden;
-+#endif
-+
-+
-+static int
-+do_clone (struct pthread *pd, const struct pthread_attr *attr,
-+	  int clone_flags, int (*fct) (void *), STACK_VARIABLES_PARMS,
-+	  int stopped)
-+{
-+#ifdef PREPARE_CREATE
-+  PREPARE_CREATE;
-+#endif
-+
-+  if (__builtin_expect (stopped != 0, 0))
-+    /* We make sure the thread does not run far by forcing it to get a
-+       lock.  We lock it here too so that the new thread cannot continue
-+       until we tell it to.  */
-+    lll_lock (pd->lock, LLL_PRIVATE);
-+
-+  /* One more thread.  We cannot have the thread do this itself, since it
-+     might exist but not have been scheduled yet by the time we've returned
-+     and need to check the value to behave correctly.  We must do it before
-+     creating the thread, in case it does get scheduled first and then
-+     might mistakenly think it was the only thread.  In the failure case,
-+     we momentarily store a false value; this doesn't matter because there
-+     is no kosher thing a signal handler interrupting us right here can do
-+     that cares whether the thread count is correct.  */
-+  atomic_increment (&__nptl_nthreads);
-+
-+  int rc = ARCH_CLONE (fct, STACK_VARIABLES_ARGS, clone_flags,
-+		       pd, &pd->tid, TLS_VALUE, &pd->tid);
-+
-+  if (__builtin_expect (rc == -1, 0))
-+    {
-+      atomic_decrement (&__nptl_nthreads); /* Oops, we lied for a second.  */
-+
-+      /* Perhaps a thread wants to change the IDs and if waiting
-+	 for this stillborn thread.  */
-+      if (__builtin_expect (atomic_exchange_acq (&pd->setxid_futex, 0)
-+			    == -2, 0))
-+	lll_futex_wake (&pd->setxid_futex, 1, LLL_PRIVATE);
-+
-+      /* Free the resources.  */
-+	__deallocate_stack (pd);
-+
-+      /* We have to translate error codes.  */
-+      return errno == ENOMEM ? EAGAIN : errno;
-+    }
-+#warning set scheduling parameters
-+#if 0
-+  /* Now we have the possibility to set scheduling parameters etc.  */
-+  if (__builtin_expect (stopped != 0, 0))
-+    {
-+      INTERNAL_SYSCALL_DECL (err);
-+      int res = 0;
-+
-+      /* Set the affinity mask if necessary.  */
-+      if (attr->cpuset != NULL)
-+	{
-+	  res = INTERNAL_SYSCALL (sched_setaffinity, err, 3, pd->tid,
-+				  attr->cpusetsize, attr->cpuset);
-+
-+	  if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (res, err), 0))
-+	    {
-+	      /* The operation failed.  We have to kill the thread.  First
-+		 send it the cancellation signal.  */
-+	      INTERNAL_SYSCALL_DECL (err2);
-+	    err_out:
-+	      (void) INTERNAL_SYSCALL (tgkill, err2, 3,
-+				       THREAD_GETMEM (THREAD_SELF, pid),
-+				       pd->tid, SIGCANCEL);
-+
-+	      /* We do not free the stack here because the canceled thread
-+		 itself will do this.  */
-+
-+	      return (INTERNAL_SYSCALL_ERROR_P (res, err)
-+		      ? INTERNAL_SYSCALL_ERRNO (res, err)
-+		      : 0);
-+	    }
-+	}
-+
-+      /* Set the scheduling parameters.  */
-+      if ((attr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0)
-+	{
-+	  res = INTERNAL_SYSCALL (sched_setscheduler, err, 3, pd->tid,
-+				  pd->schedpolicy, &pd->schedparam);
-+
-+	  if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (res, err), 0))
-+	    goto err_out;
-+	}
-+    }
-+#endif
-+
-+  /* We now have for sure more than one thread.  The main thread might
-+     not yet have the flag set.  No need to set the global variable
-+     again if this is what we use.  */
-+  THREAD_SETMEM (THREAD_SELF, header.multiple_threads, 1);
-+
-+  return 0;
-+}
-+
-+
-+static int
-+create_thread (struct pthread *pd, const struct pthread_attr *attr,
-+	       STACK_VARIABLES_PARMS)
-+{
-+#ifdef TLS_TCB_AT_TP
-+  assert (pd->header.tcb != NULL);
-+#endif
-+
-+  /* We rely heavily on various flags the CLONE function understands:
-+
-+     CLONE_VM, CLONE_FS, CLONE_FILES
-+	These flags select semantics with shared address space and
-+	file descriptors according to what POSIX requires.
-+
-+     CLONE_SIGNAL
-+	This flag selects the POSIX signal semantics.
-+
-+     CLONE_SETTLS
-+	The sixth parameter to CLONE determines the TLS area for the
-+	new thread.
-+
-+     CLONE_PARENT_SETTID
-+	The kernels writes the thread ID of the newly created thread
-+	into the location pointed to by the fifth parameters to CLONE.
-+
-+	Note that it would be semantically equivalent to use
-+	CLONE_CHILD_SETTID but it is be more expensive in the kernel.
-+
-+     CLONE_CHILD_CLEARTID
-+	The kernels clears the thread ID of a thread that has called
-+	sys_exit() in the location pointed to by the seventh parameter
-+	to CLONE.
-+
-+     The termination signal is chosen to be zero which means no signal
-+     is sent.  */
-+#if 1
-+#define clone_flags 123456
-+#warning clone
-+#else
-+  int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL
-+		     | CLONE_SETTLS | CLONE_PARENT_SETTID
-+		     | CLONE_CHILD_CLEARTID | CLONE_SYSVSEM
-+		     | 0);
-+#endif		     
-+
-+  if (__builtin_expect (THREAD_GETMEM (THREAD_SELF, report_events), 0))
-+    {
-+      /* The parent thread is supposed to report events.  Check whether
-+	 the TD_CREATE event is needed, too.  */
-+      const int _idx = __td_eventword (TD_CREATE);
-+      const uint32_t _mask = __td_eventmask (TD_CREATE);
-+
-+      if ((_mask & (__nptl_threads_events.event_bits[_idx]
-+		    | pd->eventbuf.eventmask.event_bits[_idx])) != 0)
-+	{
-+	  /* We always must have the thread start stopped.  */
-+	  pd->stopped_start = true;
-+
-+	  /* Create the thread.  We always create the thread stopped
-+	     so that it does not get far before we tell the debugger.  */
-+	  int res = do_clone (pd, attr, clone_flags, start_thread,
-+			      STACK_VARIABLES_ARGS, 1);
-+	  if (res == 0)
-+	    {
-+	      /* Now fill in the information about the new thread in
-+		 the newly created thread's data structure.  We cannot let
-+		 the new thread do this since we don't know whether it was
-+		 already scheduled when we send the event.  */
-+	      pd->eventbuf.eventnum = TD_CREATE;
-+	      pd->eventbuf.eventdata = pd;
-+
-+	      /* Enqueue the descriptor.  */
-+	      do
-+		pd->nextevent = __nptl_last_event;
-+	      while (atomic_compare_and_exchange_bool_acq (&__nptl_last_event,
-+							   pd, pd->nextevent)
-+		     != 0);
-+
-+	      /* Now call the function which signals the event.  */
-+	      __nptl_create_event ();
-+
-+	      /* And finally restart the new thread.  */
-+	      lll_unlock (pd->lock, LLL_PRIVATE);
-+	    }
-+
-+	  return res;
-+	}
-+    }
-+
-+#ifdef NEED_DL_SYSINFO
-+  assert (THREAD_SELF_SYSINFO == THREAD_SYSINFO (pd));
-+#endif
-+
-+  /* Determine whether the newly created threads has to be started
-+     stopped since we have to set the scheduling parameters or set the
-+     affinity.  */
-+  bool stopped = false;
-+  if (attr != NULL && (attr->cpuset != NULL
-+		       || (attr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0))
-+    stopped = true;
-+  pd->stopped_start = stopped;
-+  pd->parent_cancelhandling = THREAD_GETMEM (THREAD_SELF, cancelhandling);
-+
-+  /* Actually create the thread.  */
-+  int res = do_clone (pd, attr, clone_flags, start_thread,
-+		      STACK_VARIABLES_ARGS, stopped);
-+
-+  if (res == 0 && stopped)
-+    /* And finally restart the new thread.  */
-+    lll_unlock (pd->lock, LLL_PRIVATE);
-+
-+  return res;
-+}
---- /dev/null
 +++ b/fbtl/sysdeps/pthread/flockfile.c
 @@ -0,0 +1,32 @@
 +/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
@@ -34250,7 +33987,7 @@
 +#endif	/* pthread-functions.h */
 --- /dev/null
 +++ b/fbtl/sysdeps/pthread/pthread.h
-@@ -0,0 +1,1160 @@
+@@ -0,0 +1,1181 @@
 +/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
 +
@@ -34312,6 +34049,8 @@
 +};
 +
 +
++#ifdef _LIBC /* not yet supported, so do not expose outside libc */
++
 +#ifdef __USE_XOPEN2K
 +/* Robust mutex or not flags.  */
 +enum
@@ -34334,6 +34073,7 @@
 +};
 +#endif
 +
++#endif /* not yet supported, so do not expose outside libc */
 +
 +/* Mutex initializers.  */
 +#ifdef __PTHREAD_MUTEX_HAVE_PREV
@@ -34643,6 +34383,9 @@
 +#endif
 +
 +#ifdef __USE_GNU
++
++#ifdef _LIBC /* not yet supported, so do not expose outside libc */
++
 +/* Thread created with attribute ATTR will be limited to run only on
 +   the processors represented in CPUSET.  */
 +extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
@@ -34666,6 +34409,8 @@
 +extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
 +     __THROW __nonnull ((1));
 +
++#endif /* not yet supported, so do not expose outside libc */
++
 +/* Initialize thread attribute *ATTR with attributes corresponding to the
 +   already running thread TH.  It shall be called on uninitialized ATTR
 +   and destroyed with pthread_attr_destroy when no longer needed.  */
@@ -34688,6 +34433,9 @@
 +				  struct sched_param *__restrict __param)
 +     __THROW __nonnull ((2, 3));
 +
++
++#ifdef _LIBC /* not yet supported, so do not expose outside libc */
++
 +/* Set the scheduling priority for TARGET_THREAD.  */
 +extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
 +     __THROW;
@@ -34704,6 +34452,7 @@
 +     __THROW __nonnull ((2));
 +#endif
 +
++#endif /* not yet supported, so do not expose outside libc */
 +
 +#ifdef __USE_UNIX98
 +/* Determine level of concurrency.  */
@@ -34720,6 +34469,7 @@
 +   implementation.  */
 +extern int pthread_yield (void) __THROW;
 +
++#ifdef _LIBC /* not yet supported, so do not expose outside libc */
 +
 +/* Limit specified thread TH to run only on the processors represented
 +   in CPUSET.  */
@@ -34731,6 +34481,9 @@
 +extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
 +				   cpu_set_t *__cpuset)
 +     __THROW __nonnull ((3));
++
++#endif /* not yet supported, so do not expose outside libc */
++
 +#endif
 +
 +
@@ -35025,6 +34778,7 @@
 +extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
 +     __THROWNL __nonnull ((1));
 +
++#ifdef _LIBC /* not yet supported, so do not expose outside libc */
 +
 +/* Get the priority ceiling of MUTEX.  */
 +extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
@@ -35050,6 +34804,7 @@
 +# endif
 +#endif
 +
++#endif /* not yet supported, so do not expose outside libc */
 +
 +/* Functions for handling mutex attributes.  */
 +
@@ -35086,6 +34841,8 @@
 +     __THROW __nonnull ((1));
 +#endif
 +
++#ifdef _LIBC /* not yet supported, so do not expose outside libc */
++
 +/* Return in *PROTOCOL the mutex protocol attribute in *ATTR.  */
 +extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
 +					  __restrict __attr,
@@ -35131,6 +34888,7 @@
 +# endif
 +#endif
 +
++#endif /* not yet supported, so do not expose outside libc */
 +
 +#if defined __USE_UNIX98 || defined __USE_XOPEN2K
 +/* Functions for handling read-write locks.  */

Modified: glibc-package/trunk/debian/patches/kfreebsd/local-sysdeps.diff
===================================================================
--- glibc-package/trunk/debian/patches/kfreebsd/local-sysdeps.diff	2013-07-08 11:53:47 UTC (rev 5660)
+++ glibc-package/trunk/debian/patches/kfreebsd/local-sysdeps.diff	2013-07-08 20:04:14 UTC (rev 5661)
@@ -7168,7 +7168,7 @@
 +#define SEM_VALUE_MAX   (2147483647)
 --- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/fbtl/bits/posix_opt.h
-@@ -0,0 +1,190 @@
+@@ -0,0 +1,201 @@
 +/* Define POSIX options for FreeBSD.
 +   Copyright (C) 1996-1997, 1999, 2000, 2002 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -7231,6 +7231,7 @@
 +
 +/* Filenames are not silently truncated.  */
 +#define	_POSIX_NO_TRUNC	1
++
 +/* X/Open realtime support is only partially available.  */
 +#define _XOPEN_REALTIME	-1
 +
@@ -7262,11 +7263,25 @@
 +/* We support user-defined stacks.  */
 +#define _POSIX_THREAD_ATTR_STACKADDR	200809L
 +
++/* We do not support priority inheritence.  */
++#define _POSIX_THREAD_PRIO_INHERIT      -1
++
++/* We do not support priority protection */
++#define _POSIX_THREAD_PRIO_PROTECT      -1
++
++#ifdef __USE_XOPEN2K8
++/* We do not support priority inheritence for robust mutexes.  */
++# define _POSIX_THREAD_ROBUST_PRIO_INHERIT	-1
++
++/* We do not support priority protection for robust mutexes.  */
++# define _POSIX_THREAD_ROBUST_PRIO_PROTECT      -1
++#endif
++
 +/* We support POSIX.1b semaphores, but only the non-shared form for now.  */
 +#define _POSIX_SEMAPHORES	200809L
 +
-+/* Real-time signals are not available.  */
-+#define _POSIX_REALTIME_SIGNALS	-1
++/* Real-time signals are available.  */
++#define _POSIX_REALTIME_SIGNALS	200809L
 +
 +/* We support asynchronous I/O.  */
 +#define _POSIX_ASYNCHRONOUS_IO	200809L
@@ -7326,11 +7341,11 @@
 +/* The monotonic clock is available.  */
 +#define _POSIX_MONOTONIC_CLOCK	200809L
 +
-+/* The clock selection interfaces are not available.  */
-+#define _POSIX_CLOCK_SELECTION	-1
++/* The clock selection interfaces are available.  */
++#define _POSIX_CLOCK_SELECTION	200809L
 +
-+/* Advisory information interfaces are not available.  */
-+#define _POSIX_ADVISORY_INFO	-1
++/* Advisory information interfaces are available.  */
++#define _POSIX_ADVISORY_INFO	200809L
 +
 +/* IPv6 support is available.  */
 +#define _POSIX_IPV6	200809L
@@ -7354,10 +7369,6 @@
 +/* Typed memory objects are not available.  */
 +#define _POSIX_TYPED_MEMORY_OBJECTS	-1
 +
-+/* No support for priority inheritance or protection.  */
-+#define _POSIX_THREAD_PRIO_INHERIT	-1
-+#define _POSIX_THREAD_PRIO_PROTECT	-1
-+
 +#endif /* bits/posix_opt.h */
 --- /dev/null
 +++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/fbtl/bits/sigthread.h
@@ -13530,7 +13541,7 @@
 +# undef DB_THREAD_SELF_INCLUDE
 +# undef DB_THREAD_SELF
 +# define DB_THREAD_SELF \
-+  REGISTER_THREAD_AREA (32, 12, 3)  /* offsetof (struct user_regs_struct, xgs) */ \
++  REGISTER_THREAD_AREA (32, 10 * 4, 3) /* offsetof (struct user_regs_struct, xgs) */ \
 +  REGISTER_THREAD_AREA (64, 26 * 8, 3) /* x86-64's user_regs_struct->gs */
 +#endif
 +


Reply to: