This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.15-421-g374976d


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  374976dd138bd4d74608d5658c84c0e257716d0b (commit)
      from  edc218041ef05fde20a7f7e6b24033a72deedce1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=374976dd138bd4d74608d5658c84c0e257716d0b

commit 374976dd138bd4d74608d5658c84c0e257716d0b
Author: David S. Miller <davem@davemloft.net>
Date:   Fri Mar 16 19:28:51 2012 -0700

    Fix SHMLBA on sparc.
    
    	[BZ #6471]
    	* sysdeps/unix/sysv/linux/shmat.c (shmat): Test for syscall errors
    	properly.
    	* sysdeps/unix/sysv/linux/sparc/getshmlba.c: New file.
    	* sysdeps/unix/sysv/linux/sparc/Makefile: Add getshmlba to
    	sysdep_routines when subdir is sysvipc.
    	* sysdeps/unix/sysv/linux/sparc/bits/shm.h (SHMLBA): Use new
    	__getshmlba helper.

diff --git a/ChangeLog b/ChangeLog
index 4b3981f..df662af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2012-03-16  David S. Miller  <davem@davemloft.net>
 
+	[BZ #6471]
+	* sysdeps/unix/sysv/linux/shmat.c (shmat): Test for syscall errors
+	properly.
+	* sysdeps/unix/sysv/linux/sparc/getshmlba.c: New file.
+	* sysdeps/unix/sysv/linux/sparc/Makefile: Add getshmlba to
+	sysdep_routines when subdir is sysvipc.
+	* sysdeps/unix/sysv/linux/sparc/bits/shm.h (SHMLBA): Use new
+	__getshmlba helper.
+
 	* sysdeps/sparc/fpu/libm-test/ulps: Update.
 
 2012-03-16  H.J. Lu  <hongjiu.lu@intel.com>
diff --git a/NEWS b/NEWS
index cc897db..5af4f68 100644
--- a/NEWS
+++ b/NEWS
@@ -11,12 +11,12 @@ Version 2.16
 
   174, 350, 411, 2541, 2547, 2548, 2551, 2552, 2553, 2554, 2562, 2563, 2565,
   2566, 2576, 3335, 3976, 3992, 4026, 4108, 4596, 4822, 5077, 5461, 5805,
-  5993, 6884, 6907, 6911, 9739, 9902, 10110, 10135, 10140, 10210, 10545,
-  10716, 11174, 11322, 11365, 11494, 12047, 13058, 13525, 13526, 13527,
-  13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553,
-  13555, 13559, 13566, 13583, 13618, 13637, 13656, 13658, 13673, 13695,
-  13704, 13706, 13726, 13738, 13786, 13792, 13806, 13840, 13841, 13844,
-  13846, 13851, 13852, 13854
+  5993, 6471, 6884, 6907, 6911, 9739, 9902, 10110, 10135, 10140, 10210,
+  10545, 10716, 11174, 11322, 11365, 11494, 12047, 13058, 13525, 13526,
+  13527, 13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552,
+  13553, 13555, 13559, 13566, 13583, 13618, 13637, 13656, 13658, 13673,
+  13695, 13704, 13706, 13726, 13738, 13786, 13792, 13806, 13840, 13841,
+  13844, 13846, 13851, 13852, 13854
 
 * ISO C11 support:
 
diff --git a/sysdeps/unix/sysv/linux/shmat.c b/sysdeps/unix/sysv/linux/shmat.c
index 2eec6a6..dd75491 100644
--- a/sysdeps/unix/sysv/linux/shmat.c
+++ b/sysdeps/unix/sysv/linux/shmat.c
@@ -35,7 +35,8 @@ shmat (shmid, shmaddr, shmflg)
      const void *shmaddr;
      int shmflg;
 {
-  void *__unbounded result;
+  INTERNAL_SYSCALL_DECL(err);
+  unsigned long resultvar;
   void *__unbounded raddr;
 
 #if __BOUNDED_POINTERS__
@@ -47,12 +48,15 @@ shmat (shmid, shmaddr, shmflg)
     length = shmds.shm_segsz;
 #endif
 
-  result = (void *__unbounded) INLINE_SYSCALL (ipc, 5, IPCOP_shmat,
-					       shmid, shmflg,
-					       (long int) __ptrvalue (&raddr),
-					       __ptrvalue ((void *) shmaddr));
-  if ((unsigned long) result <= -(unsigned long) SHMLBA)
-    result = raddr;
-
-  return BOUNDED_N (result, length);
+  resultvar = INTERNAL_SYSCALL (ipc, err, 5, IPCOP_shmat,
+				shmid, shmflg,
+				(long int) __ptrvalue (&raddr),
+				__ptrvalue ((void *) shmaddr));
+  if (INTERNAL_SYSCALL_ERROR_P (resultvar, err))
+    {
+      __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err));
+      return (void *) -1;
+    }
+
+  return BOUNDED_N (raddr, length);
 }
diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile
index 96bf0bb..d769c48 100644
--- a/sysdeps/unix/sysv/linux/sparc/Makefile
+++ b/sysdeps/unix/sysv/linux/sparc/Makefile
@@ -7,3 +7,7 @@ syscall-list-64bit-condition := __WORDSIZE == 64
 ifeq ($(subdir),rt)
 librt-routines += rt-sysdep
 endif
+
+ifeq ($(subdir),sysvipc)
+sysdep_routines += getshmlba
+endif
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/shm.h b/sysdeps/unix/sysv/linux/sparc/bits/shm.h
index b0966d6..eb530de 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/shm.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/shm.h
@@ -40,8 +40,8 @@
 __BEGIN_DECLS
 
 /* Segment low boundary address multiple.  */
-#define SHMLBA		(__getpagesize ())
-extern int __getpagesize (void) __THROW __attribute__ ((__const__));
+#define SHMLBA		(__getshmlba ())
+extern int __getshmlba (void) __attribute__ ((__const__));
 
 
 /* Type to count number of attaches.  */
diff --git a/sysdeps/unix/sysv/linux/sparc/getshmlba.c b/sysdeps/unix/sysv/linux/sparc/getshmlba.c
new file mode 100644
index 0000000..205bed2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/getshmlba.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2012
+   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 <unistd.h>
+#include <sys/shm.h>
+#include <ldsodefs.h>
+
+int
+__getshmlba (void)
+{
+  uint64_t hwcap = GLRO(dl_hwcap);
+  int pgsz = GLRO(dl_pagesize);
+
+  if (hwcap & HWCAP_SPARC_V9)
+    {
+      if (pgsz < (16 * 1024))
+	return 16 * 1024;
+      else
+	return pgsz;
+    }
+  else if (!(hwcap & HWCAP_SPARC_FLUSH))
+    return 64 * 1024;
+  else
+    return 256 * 1024;
+}

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    9 ++++++
 NEWS                                               |   12 ++++----
 sysdeps/unix/sysv/linux/shmat.c                    |   22 +++++++++------
 sysdeps/unix/sysv/linux/sparc/Makefile             |    4 +++
 sysdeps/unix/sysv/linux/sparc/bits/shm.h           |    4 +-
 .../linux/{getpagesize.c => sparc/getshmlba.c}     |   28 ++++++++++++--------
 6 files changed, 51 insertions(+), 28 deletions(-)
 copy sysdeps/unix/sysv/linux/{getpagesize.c => sparc/getshmlba.c} (70%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]