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

r6682 - in glibc-package/branches/glibc-2.21/debian: . patches/kfreebsd



Author: aurel32
Date: 2015-11-21 15:40:41 +0000 (Sat, 21 Nov 2015)
New Revision: 6682

Modified:
   glibc-package/branches/glibc-2.21/debian/changelog
   glibc-package/branches/glibc-2.21/debian/patches/kfreebsd/local-fbtl.diff
   glibc-package/branches/glibc-2.21/debian/patches/kfreebsd/local-sysdeps.diff
Log:
patches/kfreebsd/local-sysdeps.diff, patches/kfreebsd/local-fbtl.diff:
update to revision 5836 (from glibc-bsd):



Modified: glibc-package/branches/glibc-2.21/debian/changelog
===================================================================
--- glibc-package/branches/glibc-2.21/debian/changelog	2015-11-21 13:11:24 UTC (rev 6681)
+++ glibc-package/branches/glibc-2.21/debian/changelog	2015-11-21 15:40:41 UTC (rev 6682)
@@ -13,7 +13,7 @@
     - testsuite-checking/expected-results-mips64el-linux-gnuabin32-mipsn32
     - testsuite-checking/expected-results-mipsel-linux-gnu-mips32
   * patches/kfreebsd/local-sysdeps.diff, patches/kfreebsd/local-fbtl.diff:
-    update to revision 5828 (from glibc-bsd):
+    update to revision 5836 (from glibc-bsd):
     - Update to glibc 2.21.
     - Define F_DUP2FD_CLOEXEC.  Closes: #712074.
     - Define SOCK_CLOEXEC and SOCK_NONBLOCK.

Modified: glibc-package/branches/glibc-2.21/debian/patches/kfreebsd/local-fbtl.diff
===================================================================
--- glibc-package/branches/glibc-2.21/debian/patches/kfreebsd/local-fbtl.diff	2015-11-21 13:11:24 UTC (rev 6681)
+++ glibc-package/branches/glibc-2.21/debian/patches/kfreebsd/local-fbtl.diff	2015-11-21 15:40:41 UTC (rev 6682)
@@ -13481,7 +13481,7 @@
 +sysd-rules-patterns += ptw-%:%
 --- /dev/null
 +++ b/fbtl/Makefile
-@@ -0,0 +1,643 @@
+@@ -0,0 +1,644 @@
 +# Copyright (C) 2002-2013 Free Software Foundation, Inc.
 +# This file is part of the GNU C Library.
 +
@@ -13576,6 +13576,7 @@
 +		      old_pthread_atfork pthread_atfork \
 +		      pthread_getcpuclockid \
 +		      pthread_clock_gettime pthread_clock_settime \
++		      shm-directory \
 +		      sem_init sem_destroy \
 +		      sem_open sem_close sem_unlink \
 +		      sem_getvalue \
@@ -14207,7 +14208,7 @@
 +  what to test?
 --- /dev/null
 +++ b/fbtl/Versions
-@@ -0,0 +1,250 @@
+@@ -0,0 +1,251 @@
 +libc {
 +  GLIBC_2.0 {
 +    pthread_attr_destroy; pthread_attr_init;
@@ -14456,6 +14457,7 @@
 +    __pthread_initialize_minimal;
 +    __pthread_clock_gettime; __pthread_clock_settime;
 +    __pthread_unwind; __pthread_get_minstack;
++    __shm_directory;
 +  }
 +}
 --- /dev/null
@@ -17704,7 +17706,7 @@
 +  /* Determine the default allowed stack size.  This is the size used
 +     in case the user does not specify one.  */
 +  struct rlimit limit;
-+  if (getrlimit (RLIMIT_STACK, &limit) != 0
++  if (__getrlimit (RLIMIT_STACK, &limit) != 0
 +      || limit.rlim_cur == RLIM_INFINITY)
 +    /* The system limit is not usable.  Use an architecture-specific
 +       default.  */
@@ -21976,7 +21978,7 @@
 +# else
 +	/* Get the current time.  So far we support only one clock.  */
 +	struct timeval tv;
-+	(void) gettimeofday (&tv, NULL);
++	(void) __gettimeofday (&tv, NULL);
 +
 +	/* Convert the absolute timeout value to a relative timeout.  */
 +	rt.tv_sec = abstime->tv_sec - tv.tv_sec;
@@ -27084,7 +27086,7 @@
 +     || !defined lll_futex_timed_wait_bitset)
 +      /* Get the current time.  So far we support only one clock.  */
 +      struct timeval tv;
-+      (void) gettimeofday (&tv, NULL);
++      (void) __gettimeofday (&tv, NULL);
 +
 +      /* Convert the absolute timeout value to a relative timeout.  */
 +      struct timespec rt;
@@ -27234,7 +27236,7 @@
 +     || !defined lll_futex_timed_wait_bitset)
 +      /* Get the current time.  So far we support only one clock.  */
 +      struct timeval tv;
-+      (void) gettimeofday (&tv, NULL);
++      (void) __gettimeofday (&tv, NULL);
 +
 +      /* Convert the absolute timeout value to a relative timeout.  */
 +      struct timespec rt;
@@ -29107,7 +29109,7 @@
 +#endif
 --- /dev/null
 +++ b/fbtl/sem_open.c
-@@ -0,0 +1,461 @@
+@@ -0,0 +1,299 @@
 +/* 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.
@@ -29128,8 +29130,6 @@
 +
 +#include <errno.h>
 +#include <fcntl.h>
-+#include <mntent.h>
-+#include <paths.h>
 +#include <pthread.h>
 +#include <search.h>
 +#include <semaphore.h>
@@ -29140,141 +29140,10 @@
 +#include <unistd.h>
 +#include <sys/mman.h>
 +#include <sys/stat.h>
-+#include <sys/statfs.h>
-+#if 0
-+#include <linux_fsinfo.h>
-+#endif
 +#include "semaphoreP.h"
++#include <shm-directory.h>
 +
 +
-+
-+/* Information about the mount point.  */
-+struct mountpoint_info mountpoint attribute_hidden;
-+
-+/* This is the default mount point.  */
-+static const char defaultmount[] = "/dev/shm";
-+/* This is the default directory.  */
-+static const char defaultdir[] = "/dev/shm/sem.";
-+
-+/* Protect the `mountpoint' variable above.  */
-+pthread_once_t __namedsem_once attribute_hidden = PTHREAD_ONCE_INIT;
-+
-+#if 1
-+
-+/* This is the alternate debian mount point.  */
-+static const char alternatemount[] = "/run/shm";
-+/* This is the alternate debian directory.  */
-+static const char alternatedir[] = "/run/shm/sem.";
-+
-+/* Determine where the shmfs is mounted (if at all).  */
-+void
-+attribute_hidden
-+__where_is_shmfs (void)
-+{
-+  struct statfs f;
-+
-+  /* The canonical place is /dev/shm.  This is at least what the
-+     documentation tells everybody to do.  */
-+  if (statfs (defaultmount, &f) == 0)
-+    {
-+      /* It is in the normal place.  */
-+      mountpoint.dir = (char *) defaultdir;
-+      mountpoint.dirlen = sizeof (defaultdir) - 1;
-+
-+      return;
-+    }
-+
-+  /* The alternate place is /run/shm.  */
-+  if (statfs (alternatemount, &f) == 0)
-+    {
-+      /* It is in the normal place.  */
-+      mountpoint.dir = (char *) alternatedir;
-+      mountpoint.dirlen = sizeof (alternatedir) - 1;
-+
-+      return;
-+    }
-+    
-+  /* Not configured => not supported */  
-+}
-+
-+#else
-+
-+
-+/* Determine where the shmfs is mounted (if at all).  */
-+void
-+attribute_hidden
-+__where_is_shmfs (void)
-+{
-+  char buf[512];
-+  struct statfs f;
-+  struct mntent resmem;
-+  struct mntent *mp;
-+  FILE *fp;
-+
-+  /* The canonical place is /dev/shm.  This is at least what the
-+     documentation tells everybody to do.  */
-+  if (__statfs (defaultmount, &f) == 0 && f.f_type == SHMFS_SUPER_MAGIC)
-+    {
-+      /* It is in the normal place.  */
-+      mountpoint.dir = (char *) defaultdir;
-+      mountpoint.dirlen = sizeof (defaultdir) - 1;
-+
-+      return;
-+    }
-+
-+  /* OK, do it the hard way.  Look through the /proc/mounts file and if
-+     this does not exist through /etc/fstab to find the mount point.  */
-+  fp = __setmntent ("/proc/mounts", "r");
-+  if (__builtin_expect (fp == NULL, 0))
-+    {
-+      fp = __setmntent (_PATH_MNTTAB, "r");
-+      if (__builtin_expect (fp == NULL, 0))
-+	/* There is nothing we can do.  Blind guesses are not helpful.  */
-+	return;
-+    }
-+
-+  /* Now read the entries.  */
-+  while ((mp = __getmntent_r (fp, &resmem, buf, sizeof buf)) != NULL)
-+    /* The original name is "shm" but this got changed in early Linux
-+       2.4.x to "tmpfs".  */
-+    if (strcmp (mp->mnt_type, "tmpfs") == 0
-+	|| strcmp (mp->mnt_type, "shm") == 0)
-+      {
-+	/* Found it.  There might be more than one place where the
-+           filesystem is mounted but one is enough for us.  */
-+	size_t namelen;
-+
-+	/* First make sure this really is the correct entry.  At least
-+	   some versions of the kernel give wrong information because
-+	   of the implicit mount of the shmfs for SysV IPC.  */
-+	if (__statfs (mp->mnt_dir, &f) != 0 || f.f_type != SHMFS_SUPER_MAGIC)
-+	  continue;
-+
-+	namelen = strlen (mp->mnt_dir);
-+
-+	if (namelen == 0)
-+	  /* Hum, maybe some crippled entry.  Keep on searching.  */
-+	  continue;
-+
-+	mountpoint.dir = (char *) malloc (namelen + 4 + 2);
-+	if (mountpoint.dir != NULL)
-+	  {
-+	    char *cp = __mempcpy (mountpoint.dir, mp->mnt_dir, namelen);
-+	    if (cp[-1] != '/')
-+	      *cp++ = '/';
-+	    cp = stpcpy (cp, "sem.");
-+	    mountpoint.dirlen = cp - mountpoint.dir;
-+	  }
-+
-+	break;
-+      }
-+
-+  /* Close the stream.  */
-+  __endmntent (fp);
-+}
-+
-+#endif
-+
 +/* Comparison function for search of existing mapping.  */
 +int
 +attribute_hidden
@@ -29368,14 +29237,9 @@
 +  if (result != existing && existing != SEM_FAILED && existing != MAP_FAILED)
 +    {
 +      /* Do not disturb errno.  */
-+#if 1
 +      int saved_errno = errno;
 +      munmap(existing, sizeof (sem_t));
 +      errno = saved_errno; 
-+#else    
-+      INTERNAL_SYSCALL_DECL (err);
-+      INTERNAL_SYSCALL (munmap, err, 2, existing, sizeof (sem_t));
-+#endif
 +    }
 +
 +  return result;
@@ -29385,42 +29249,17 @@
 +sem_t *
 +sem_open (const char *name, int oflag, ...)
 +{
-+  char *finalname;
-+  sem_t *result = SEM_FAILED;
 +  int fd;
++  sem_t *result;
 +
-+  /* Determine where the shmfs is mounted.  */
-+  __pthread_once (&__namedsem_once, __where_is_shmfs);
++  /* Create the name of the final file in local variable SHM_NAME.  */
++  SHM_GET_NAME (EINVAL, SEM_FAILED, SEM_SHM_PREFIX);
 +
-+  /* If we don't know the mount points there is nothing we can do.  Ever.  */
-+  if (mountpoint.dir == NULL)
-+    {
-+      __set_errno (ENOSYS);
-+      return SEM_FAILED;
-+    }
-+
-+  /* Construct the filename.  */
-+  while (name[0] == '/')
-+    ++name;
-+
-+  if (name[0] == '\0')
-+    {
-+      /* The name "/" is not supported.  */
-+      __set_errno (EINVAL);
-+      return SEM_FAILED;
-+    }
-+  size_t namelen = strlen (name) + 1;
-+
-+  /* Create the name of the final file.  */
-+  finalname = (char *) alloca (mountpoint.dirlen + namelen);
-+  __mempcpy (__mempcpy (finalname, mountpoint.dir, mountpoint.dirlen),
-+	     name, namelen);
-+
 +  /* If the semaphore object has to exist simply open it.  */
 +  if ((oflag & O_CREAT) == 0 || (oflag & O_EXCL) == 0)
 +    {
 +    try_again:
-+      fd = __libc_open (finalname,
++      fd = __libc_open (shm_name,
 +			(oflag & ~(O_CREAT|O_ACCMODE)) | O_NOFOLLOW | O_RDWR);
 +
 +      if (fd == -1)
@@ -29478,8 +29317,8 @@
 +      memset ((char *) &sem.initsem + sizeof (struct new_sem), '\0',
 +	      sizeof (sem_t) - sizeof (struct new_sem));
 +
-+      tmpfname = (char *) alloca (mountpoint.dirlen + 6 + 1);
-+      char *xxxxxx = __mempcpy (tmpfname, mountpoint.dir, mountpoint.dirlen);
++      tmpfname = (char *) alloca (shm_dirlen + sizeof SEM_SHM_PREFIX + 6);
++      char *xxxxxx = __mempcpy (tmpfname, shm_dir, shm_dirlen);
 +
 +      int retries = 0;
 +#define NRETRIES 50
@@ -29522,7 +29361,7 @@
 +				       fd, 0)) != MAP_FAILED)
 +	{
 +	  /* Create the file.  Don't overwrite an existing file.  */
-+	  if (link (tmpfname, finalname) != 0)
++	  if (link (tmpfname, shm_name) != 0)
 +	    {
 +	      /* Undo the mapping.  */
 +	      (void) munmap (result, sizeof (sem_t));
@@ -29563,15 +29402,16 @@
 +  if (fd != -1)
 +    {
 +      /* Do not disturb errno.  */
-+      INTERNAL_SYSCALL_DECL (err);
-+      INTERNAL_SYSCALL (close, err, 1, fd);
++      int save = errno;
++      __libc_close (fd);
++      errno = save;
 +    }
 +
 +  return result;
 +}
 --- /dev/null
 +++ b/fbtl/sem_unlink.c
-@@ -0,0 +1,66 @@
+@@ -0,0 +1,38 @@
 +/* 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.
@@ -29596,44 +29436,16 @@
 +#include <string.h>
 +#include <unistd.h>
 +#include "semaphoreP.h"
++#include <shm-directory.h>
 +
-+
 +int
-+sem_unlink (name)
-+     const char *name;
++sem_unlink (const char *name)
 +{
-+  char *fname;
-+  size_t namelen;
-+
-+  /* Determine where the shmfs is mounted.  */
-+  __pthread_once (&__namedsem_once, __where_is_shmfs);
-+
-+  /* If we don't know the mount points there is nothing we can do.  Ever.  */
-+  if (mountpoint.dir == NULL)
-+    {
-+      __set_errno (ENOSYS);
-+      return -1;
-+    }
-+
 +  /* Construct the filename.  */
-+  while (name[0] == '/')
-+    ++name;
++  SHM_GET_NAME (ENOENT, -1, SEM_SHM_PREFIX);
 +
-+  if (name[0] == '\0')
-+    {
-+      /* The name "/" is not supported.  */
-+      __set_errno (ENOENT);
-+      return -1;
-+    }
-+  namelen = strlen (name);
-+
-+  /* Create the name of the file.  */
-+  fname = (char *) alloca (mountpoint.dirlen + namelen + 1);
-+  __mempcpy (__mempcpy (fname, mountpoint.dir, mountpoint.dirlen),
-+	     name, namelen + 1);
-+
 +  /* Now try removing it.  */
-+  int ret = unlink (fname);
++  int ret = unlink (shm_name);
 +  if (ret < 0 && errno == EPERM)
 +    __set_errno (EACCES);
 +  return ret;
@@ -29721,7 +29533,7 @@
 +#endif	/* semaphore.h */
 --- /dev/null
 +++ b/fbtl/semaphoreP.h
-@@ -0,0 +1,68 @@
+@@ -0,0 +1,54 @@
 +/* 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.
@@ -29743,14 +29555,8 @@
 +#include <semaphore.h>
 +#include "pthreadP.h"
 +
++#define SEM_SHM_PREFIX  "sem."
 +
-+/* Mount point of the shared memory filesystem.  */
-+struct mountpoint_info
-+{
-+  char *dir;
-+  size_t dirlen;
-+};
-+
 +/* Keeping track of currently used mappings.  */
 +struct inuse_sem
 +{
@@ -29762,11 +29568,6 @@
 +};
 +
 +
-+/* Variables used in multiple interfaces.  */
-+extern struct mountpoint_info mountpoint attribute_hidden;
-+
-+extern pthread_once_t __namedsem_once attribute_hidden;
-+
 +/* The search tree for existing mappings.  */
 +extern void *__sem_mappings attribute_hidden;
 +
@@ -29774,9 +29575,6 @@
 +extern int __sem_mappings_lock attribute_hidden;
 +
 +
-+/* Initializer for mountpoint.  */
-+extern void __where_is_shmfs (void) attribute_hidden;
-+
 +/* Comparison function for search in tree with existing mappings.  */
 +extern int __sem_search (const void *a, const void *b) attribute_hidden;
 +
@@ -31618,7 +31416,7 @@
 +#endif	/* bits/libc-lock.h */
 --- /dev/null
 +++ b/fbtl/sysdeps/pthread/bits/libc-lockP.h
-@@ -0,0 +1,424 @@
+@@ -0,0 +1,436 @@
 +/* Private libc-internal interface for mutex locks.  NPTL version.
 +   Copyright (C) 1996-2013 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -31655,6 +31453,12 @@
 +#include <tls.h>
 +#include <pthread-functions.h>
 +
++#if IS_IN (libpthread)
++/* This gets us the declarations of the __pthread_* internal names,
++   and hidden_proto for them.  */
++# include <fbtl/pthreadP.h>
++#endif
++
 +/* Mutex type.  */
 +#if !IS_IN (libc) && !IS_IN (libpthread)
 +typedef pthread_mutex_t __libc_lock_t;
@@ -31735,6 +31539,12 @@
 +  (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE)
 +# define __libc_ptf_call_always(FUNC, ARGS) \
 +  PTHFCT_CALL (ptr_##FUNC, ARGS)
++#elif IS_IN (libpthread)
++# define PTFAVAIL(NAME) 1
++# define __libc_ptf_call(FUNC, ARGS, ELSE) \
++  FUNC ARGS
++# define __libc_ptf_call_always(FUNC, ARGS) \
++  FUNC ARGS
 +#else
 +# define PTFAVAIL(NAME) (NAME != NULL)
 +# define __libc_ptf_call(FUNC, ARGS, ELSE) \
@@ -34737,6 +34547,40 @@
 +   })
 +#endif
 --- /dev/null
++++ b/fbtl/sysdeps/pthread/shm-directory.h
+@@ -0,0 +1,31 @@
++/* Header for directory for shm/sem files.  NPTL version.
++   Copyright (C) 2014-2015 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   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/>.  */
++
++#ifndef _SHM_DIRECTORY_H
++
++#include <sysdeps/posix/shm-directory.h>
++
++/* For NPTL the __shm_directory function lives in libpthread.
++   We don't want PLT calls from there.  But it's also used from
++   librt, so it cannot just be declared hidden.  */
++
++#if IS_IN (libpthread)
++hidden_proto (__shm_directory)
++#endif
++
++#endif  /* shm-directory.h */
+--- /dev/null
 +++ b/fbtl/sysdeps/pthread/sigfillset.c
 @@ -0,0 +1,20 @@
 +/* Copyright (C) 2003-2013 Free Software Foundation, Inc.

Modified: glibc-package/branches/glibc-2.21/debian/patches/kfreebsd/local-sysdeps.diff
===================================================================
--- glibc-package/branches/glibc-2.21/debian/patches/kfreebsd/local-sysdeps.diff	2015-11-21 13:11:24 UTC (rev 6681)
+++ glibc-package/branches/glibc-2.21/debian/patches/kfreebsd/local-sysdeps.diff	2015-11-21 15:40:41 UTC (rev 6682)
@@ -187,7 +187,7 @@
 +endif
 --- /dev/null
 +++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/Versions
-@@ -0,0 +1,126 @@
+@@ -0,0 +1,129 @@
 +libc {
 +  # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk.
 +  # When you get an error from errlist-compat.awk, you need to add a new
@@ -296,6 +296,9 @@
 +    #errlist-compat 97
 +    _sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
 +  }
++  GLIBC_2.21 {
++    __statfs;
++  }
 +  GLIBC_PRIVATE {
 +    # needed by libpthread.
 +    __clone; __libc_fork; __libc_sigaction; __kernel_getosreldate;
@@ -4707,7 +4710,7 @@
 +/* CAE XSH, Issue 4, Version 2: <time.h>
 +   The value of CLOCKS_PER_SEC is required to be 1 million on all
 +   XSI-conformant systems. */
-+#  define CLOCKS_PER_SEC  1000000l
++#  define CLOCKS_PER_SEC  ((clock_t) 1000000l)
 +
 +#  if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
 +/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
@@ -13119,7 +13122,7 @@
 +#include <sysdeps/posix/getcwd.c>
 --- /dev/null
 +++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/getdents.c
-@@ -0,0 +1,90 @@
+@@ -0,0 +1,43 @@
 +/* Read directory entries, 3 argument function.  FreeBSD version.
 +   Copyright (C) 2002 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -13145,8 +13148,6 @@
 +#include <errno.h>
 +#include <sysdep.h>
 +
-+#if 1
-+
 +/* Use the 3-argument system call.  */
 +
 +extern int __syscall_getdents (int fd, char *buf, size_t nbytes);
@@ -13162,51 +13163,6 @@
 +  return __syscall_getdents (fd, buf, nbytes);
 +}
 +
-+/* Export getdents().  Not an internal_function.  */
-+ssize_t
-+getdents (int fd, char *buf, size_t nbytes)
-+{
-+  return __syscall_getdents (fd, buf, nbytes);
-+}
-+
-+#else
-+
-+/* Use the 4-argument system call.  */
-+
-+extern int __syscall_getdirentries (int fd, char *buf, unsigned int nbytes,
-+				    long *basep);
-+
-+/* Read directory entries from FD into BUF, reading at most NBYTES.
-+   Returns the number of bytes read; zero when at end of directory; or
-+   -1 for errors.  */
-+ssize_t
-+internal_function
-+__getdents (int fd, char *buf, size_t nbytes)
-+{
-+  /* On 64-bit platforms, the system call differs from this function
-+     because it takes an 'unsigned int', not a 'size_t'.  */
-+  unsigned int nbytes32;
-+
-+  nbytes32 = nbytes;
-+  if (nbytes32 == nbytes)
-+    return __syscall_getdirentries (fd, buf, nbytes32, NULL);
-+  else
-+    {
-+      /* NBYTES is too large.  */
-+      __set_errno (EINVAL);
-+      return -1;
-+    }
-+}
-+
-+/* Export getdents().  Not an internal_function.  */
-+ssize_t
-+getdents (int fd, char *buf, size_t nbytes)
-+{
-+  return __getdents (fd, buf, nbytes);
-+}
-+
-+#endif
-+
 +/* Since 'struct dirent64' == 'struct dirent', the functions '__getdents64'
 +   and '__getdents' are equal.  */
 +strong_alias (__getdents, __getdents64)
@@ -15600,7 +15556,7 @@
 + getaddrinfo_a F
 --- /dev/null
 +++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/i386/libc.abilist
-@@ -0,0 +1,2202 @@
+@@ -0,0 +1,2205 @@
 +GLIBC_2.10
 + GLIBC_2.10 A
 + __cxa_at_quick_exit F
@@ -15695,6 +15651,9 @@
 + sys_errlist D 0x184
 + sys_nerr D 0x4
 + waitid F
++GLIBC_2.21
++ GLIBC_2.21 A
++ __statfs F
 +GLIBC_2.3
 + GLIBC_2.3 A
 + _Exit F
@@ -18818,6 +18777,28 @@
 + logwtmp F
 + openpty F
 --- /dev/null
++++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/i386/localplt.data
+@@ -0,0 +1,19 @@
++# See scripts/check-localplt.awk for how this file is processed.
++# PLT use is required for the malloc family and for matherr because
++# users can define their own functions and have library internals call them.
++# Linker in binutils 2.26 and newer consolidates R_386_JUMP_SLOT
++# relocation with R_386_GLOB_DAT relocation against the same symbol.
++libc.so: calloc
++libc.so: free + REL R_386_GLOB_DAT
++libc.so: malloc + REL R_386_GLOB_DAT
++libc.so: memalign
++libc.so: realloc
++libm.so: matherr
++# The dynamic loader uses __libc_memalign internally to allocate aligned
++# TLS storage. The other malloc family of functions are expected to allow
++# user symbol interposition.
++ld.so: __libc_memalign
++ld.so: malloc
++ld.so: calloc
++ld.so: realloc
++ld.so: free + REL R_386_GLOB_DAT
+--- /dev/null
 +++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/i386/lseek.S
 @@ -0,0 +1,53 @@
 +/* Copyright (C) 2002 Free Software Foundation, Inc.
@@ -25254,7 +25235,7 @@
 +    return rv;
 +}
 +
-+strong_alias (posix_fadvise, posix_fadvise64)
++weak_alias (posix_fadvise, posix_fadvise64)
 --- /dev/null
 +++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/posix_fadvise64.c
 @@ -0,0 +1 @@
@@ -25341,7 +25322,7 @@
 +versioned_symbol (libc, __posix_fallocate, posix_fallocate64, GLIBC_2_3_3);
 +compat_symbol (libc, __posix_fallocate64_l32, posix_fallocate64, GLIBC_2_2);
 +#else
-+strong_alias (__posix_fallocate, posix_fallocate64)
++weak_alias (__posix_fallocate, posix_fallocate64)
 +#endif
 --- /dev/null
 +++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/posix_fallocate64.c
@@ -26683,6 +26664,111 @@
 @@ -0,0 +1 @@
 +/* 'setrlimit64' is the same as 'setrlimit', because __rlim64_t == __rlim_t.  */
 --- /dev/null
++++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/shm-directory.c
+@@ -0,0 +1,102 @@
++/* Determine directory for shm/sem files.  GNU/kFreeBSD version.
++   Copyright (C) 2000-2015 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   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 "shm-directory.h"
++
++#include <errno.h>
++#include <mntent.h>
++#include <paths.h>
++#include <stdio.h>
++#include <string.h>
++#include <sys/statfs.h>
++#include <bits/libc-lock.h>
++
++/* Mount point of the shared memory filesystem.  */
++static struct
++{
++  char *dir;
++  size_t dirlen;
++} mountpoint;
++
++/* This is the default directory.  */
++static const char defaultdir[] = "/dev/shm/";
++
++/* This is the alternate debian directory.  */
++static const char alternatedir[] = "/run/shm";
++
++/* Protect the `mountpoint' variable above.  */
++__libc_once_define (static, once);
++
++
++/* Determine where the shmfs is mounted (if at all).  */
++static void
++where_is_shmfs (void)
++{
++  struct statfs f;
++
++  /* The canonical place is /dev/shm.  This is at least what the
++     documentation tells everybody to do.  */
++  if (__statfs (defaultdir, &f) == 0)
++    {
++      /* It is in the normal place.  */
++      mountpoint.dir = (char *) defaultdir;
++      mountpoint.dirlen = sizeof (defaultdir) - 1;
++
++      return;
++    }
++
++  /* The alternate place is /run/shm.  */
++  if (__statfs (alternatedir, &f) == 0)
++    {
++      /* It is in the normal place.  */
++      mountpoint.dir = (char *) alternatedir;
++      mountpoint.dirlen = sizeof (alternatedir) - 1;
++
++      return;
++    }
++}
++
++
++const char *
++__shm_directory (size_t *len)
++{
++  /* Determine where the shmfs is mounted.  */
++  __libc_once (once, where_is_shmfs);
++
++  /* If we don't know the mount points there is nothing we can do.  Ever.  */
++  if (__glibc_unlikely (mountpoint.dir == NULL))
++    {
++      __set_errno (ENOSYS);
++      return NULL;
++    }
++
++  *len = mountpoint.dirlen;
++  return mountpoint.dir;
++}
++#if IS_IN (libpthread)
++hidden_def (__shm_directory)
++#endif
++
++
++/* Make sure the table is freed if we want to free everything before
++   exiting.  */
++libc_freeres_fn (freeit)
++{
++  if (mountpoint.dir != defaultdir)
++    free (mountpoint.dir);
++}
+--- /dev/null
 +++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/shm_open.c
 @@ -0,0 +1,40 @@
 +/* Copyright (C) 2014 Free Software Foundation, Inc.
@@ -29428,7 +29514,7 @@
 +sys_futimesat		-	futimesat		i:isp		__syscall_futimesat
 +getcontext		-	getcontext		i:p		__getcontext getcontext
 +sys_getcwd		-	getcwd			i:bn		__syscall_getcwd
-+sys_getdents		-	getdents		i:ibn		__syscall_getdents
++sys_getdents		-	getdents		i:ibn		__syscall_getdents getdents
 +sys_getdirentries	-	getdirentries		i:ibnP		__syscall_getdirentries
 +getegid			-	getegid			i:		__getegid getegid
 +geteuid			-	geteuid			i:		__geteuid geteuid
@@ -32882,7 +32968,7 @@
 + getaddrinfo_a F
 --- /dev/null
 +++ b/sysdeps/unix/bsd/bsd4.4/kfreebsd/x86_64/libc.abilist
-@@ -0,0 +1,2150 @@
+@@ -0,0 +1,2153 @@
 +GLIBC_2.10
 + GLIBC_2.10 A
 + __cxa_at_quick_exit F
@@ -32979,6 +33065,9 @@
 + sys_errlist D 0x308
 + sys_nerr D 0x4
 + waitid F
++GLIBC_2.21
++ GLIBC_2.21 A
++ __statfs F
 +GLIBC_2.3
 + GLIBC_2.3 A
 + _Exit F


Reply to: