OSDN Git Service

fix ld.so.cache handling on no-mmu setups
authorMike Frysinger <vapier@gentoo.org>
Tue, 17 Apr 2007 21:54:11 +0000 (21:54 -0000)
committerMike Frysinger <vapier@gentoo.org>
Tue, 17 Apr 2007 21:54:11 +0000 (21:54 -0000)
ldso/include/dl-defs.h
ldso/ldso/dl-elf.c
utils/ldconfig.c

index eb59ca2..6a94ee9 100644 (file)
@@ -62,6 +62,12 @@ typedef struct {
        int sooffset;
        int liboffset;
 } libentry_t;
+
+#ifdef __ARCH_USE_MMU__
+#define LDSO_CACHE_MMAP_FLAGS (MAP_SHARED)
+#else
+#define LDSO_CACHE_MMAP_FLAGS (MAP_PRIVATE)
+#endif
 #endif /* __LDSO_CACHE_SUPPORT__ */
 
 #endif
index e67257e..a6ed8f6 100644 (file)
@@ -57,7 +57,7 @@ int _dl_map_cache(void)
        }
 
        _dl_cache_size = st.st_size;
-       _dl_cache_addr = (caddr_t) _dl_mmap(0, _dl_cache_size, PROT_READ, MAP_SHARED, fd, 0);
+       _dl_cache_addr = _dl_mmap(0, _dl_cache_size, PROT_READ, LDSO_CACHE_MMAP_FLAGS, fd, 0);
        _dl_close(fd);
        if (_dl_mmap_check_error(_dl_cache_addr)) {
                _dl_dprintf(2, "%s:%i: can't map '%s'\n",
index 30e5fdb..6715612 100644 (file)
@@ -813,7 +813,7 @@ void cache_print(void)
 
     if (stat(realcachefile, &st) || (fd = open(realcachefile, O_RDONLY))<0)
        err(EXIT_FATAL,"can't read %s (%s)", cachefile, strerror(errno));
-    if ((c = mmap(0,st.st_size, PROT_READ, MAP_SHARED ,fd, 0)) == (caddr_t)-1)
+    if ((c = mmap(0,st.st_size, PROT_READ, LDSO_CACHE_MMAP_FLAGS, fd, 0)) == (caddr_t)-1)
        err(EXIT_FATAL,"can't map %s (%s)", cachefile, strerror(errno));
     close(fd);