[uclibc-ng-devel,22/32,FDPIC] nptl: Allow sem_open to work on MMU-less systems

Message ID 20180704155605.1892-23-christophe.lyon@st.com
State New
Headers show
Series
  • FDPIC ABI for ARM
Related show

Commit Message

Christophe Lyon July 4, 2018, 3:55 p.m.
Allow both tmpfs and ramfs for shm devices.

	* libpthread/nptl/linux_fsinfo.h (SHMFS_SUPER_MAGIC_WITH_MMU): Define.
	(SHMFS_SUPER_MAGIC_WITHOUT_MMU): Define.
	* libpthread/nptl/sem_open.c (__where_is_shmfs): Add support for
	SHMFS_SUPER_MAGIC_WITHOUT_MMU.

Signed-off-by: Mickaël Guêné <mickael.guene@st.com>
Signed-off-by: Christophe Lyon <christophe.lyon@st.com>

Patch

diff --git a/libpthread/nptl/linux_fsinfo.h b/libpthread/nptl/linux_fsinfo.h
index 8537581..4abe792 100644
--- a/libpthread/nptl/linux_fsinfo.h
+++ b/libpthread/nptl/linux_fsinfo.h
@@ -126,7 +126,10 @@ 
 #define XENIX_SUPER_MAGIC	0x012ff7b4
 
 /* Constant that identifies the `shm' filesystem.  */
-#define SHMFS_SUPER_MAGIC	0x01021994
+/* Mount as tmpfs.  */
+#define SHMFS_SUPER_MAGIC_WITH_MMU      0x01021994
+/* The kernel uses a ramfs file system for tmpfs.  */
+#define SHMFS_SUPER_MAGIC_WITHOUT_MMU   0x858458f6
 
 /* Constants that identify the `xfs' filesystem.  */
 #define XFS_SUPER_MAGIC		0x58465342
diff --git a/libpthread/nptl/sem_open.c b/libpthread/nptl/sem_open.c
index d811ec5..2746da1 100644
--- a/libpthread/nptl/sem_open.c
+++ b/libpthread/nptl/sem_open.c
@@ -72,7 +72,9 @@  __where_is_shmfs (void)
 
   /* 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)
+  if (__statfs (defaultmount, &f) == 0
+      && (f.f_type == SHMFS_SUPER_MAGIC_WITH_MMU
+	  || f.f_type == SHMFS_SUPER_MAGIC_WITHOUT_MMU))
     {
       /* It is in the normal place.  */
       mountpoint.dir = (char *) defaultdir;
@@ -106,7 +108,9 @@  __where_is_shmfs (void)
 	/* 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)
+	if (__statfs (mp->mnt_dir, &f) != 0
+	    || (f.f_type != SHMFS_SUPER_MAGIC_WITH_MMU
+		&& f.f_type != SHMFS_SUPER_MAGIC_WITHOUT_MMU))
 	  continue;
 
 	namelen = strlen (mp->mnt_dir);