]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Move some kernel constants to the right place.
authorNicholas Nethercote <njn@valgrind.org>
Sat, 27 Aug 2005 17:20:53 +0000 (17:20 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Sat, 27 Aug 2005 17:20:53 +0000 (17:20 +0000)
Also reinstated SF_DEVICE, which is used to ensure we don't try and
leakcheck a page that is mapped from a device.  This got lost in the
2.x-to-3.x transition, or some time after.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4538

coregrind/m_aspacemgr/aspacemgr.c
coregrind/m_signals.c
coregrind/pub_core_aspacemgr.h
include/vki-linux.h
include/vki-x86-linux.h

index 5b1abba7486669851a95d7b0f9310858855cb319..46a8a644b8b8a934c4c7fd8f5fbd3dfaffd71871 100644 (file)
@@ -851,8 +851,13 @@ void VG_(map_fd_segment)(Addr addr, SizeT len, UInt prot, UInt flags,
    if (fd != -1 && (flags & SF_FILE)) {
       vg_assert((off & (VKI_PAGE_SIZE-1)) == 0);
 
-      if (VG_(fstat)(fd, &st) < 0)
+      if (VG_(fstat)(fd, &st) < 0) {
         flags &= ~SF_FILE;
+      } else {
+         // Note unusual mapping types
+         if (VKI_S_ISCHR(st.st_mode) || VKI_S_ISBLK(st.st_mode))
+            flags |= SF_DEVICE;
+      }
    }
 
    if ((flags & SF_FILE) && filename == NULL && fd != -1)
@@ -1180,7 +1185,8 @@ void VG_(find_root_memory)(void (*add_rootrange)(Addr a, SizeT sz))
 
    for (i = 0; i < segments_used; i++) {
       s = &segments[i];
-      flags = s->flags & (SF_SHARED|SF_MMAP|SF_VALGRIND|SF_CORE|SF_STACK);
+      // Note that, for example, we don't want to touch a device page.
+      flags = s->flags & (SF_SHARED|SF_MMAP|SF_VALGRIND|SF_CORE|SF_STACK|SF_DEVICE);
       if (flags != SF_MMAP && flags != SF_STACK && flags != (SF_MMAP|SF_STACK))
          continue;
       if ((s->prot & (VKI_PROT_READ|VKI_PROT_WRITE)) 
index 0aa44176ab9ad3cbaf6b32d2e4c8bbee85a5fb47..9ea159115de4863d01068b5df95e9703364ec45c 100644 (file)
@@ -928,7 +928,7 @@ void VG_(kill_self)(Int sigNo)
 /* If true, then this Segment may be mentioned in the core */
 static Bool may_dump(const Segment *seg)
 {
-   return (seg->flags & SF_VALGRIND) == 0 && VG_(is_client_addr)(seg->addr);
+   return (seg->flags & (SF_DEVICE|SF_VALGRIND)) == 0 && VG_(is_client_addr)(seg->addr);
 }
 
 /* If true, then this Segment's contents will be in the core */
index 6d2e99f57968d4e13ca3c9662e832943ef67c6c5..e3bd9a5cade41e9aee959bce9a6d3de7888cb600 100644 (file)
@@ -80,6 +80,7 @@ extern SysRes VG_(mprotect_native) ( void *start, SizeT length, UInt prot );
 #define SF_CORE     (1 <<  7) // allocated by core on behalf of the client
 #define SF_VALGRIND (1 <<  8) // a valgrind-internal mapping - not in client
 #define SF_CODE     (1 <<  9) // segment contains cached code
+#define SF_DEVICE   (1 << 10) // device mapping;  avoid careless touching
 
 typedef struct _Segment Segment;
 
index a7010f837a2b439c10432fa1b2a06f79c84f392a..6868e3b3aceb5e380b883dabff81a666d1b89569 100644 (file)
@@ -1073,6 +1073,26 @@ struct  vki_seminfo {
 // From linux-2.6.8.1/include/linux/stat.h
 //----------------------------------------------------------------------
 
+#define VKI_S_IFMT  00170000
+#define VKI_S_IFSOCK 0140000
+#define VKI_S_IFLNK  0120000
+#define VKI_S_IFREG  0100000
+#define VKI_S_IFBLK  0060000
+#define VKI_S_IFDIR  0040000
+#define VKI_S_IFCHR  0020000
+#define VKI_S_IFIFO  0010000
+#define VKI_S_ISUID  0004000
+#define VKI_S_ISGID  0002000
+#define VKI_S_ISVTX  0001000
+
+#define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
+#define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) == VKI_S_IFREG)
+#define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
+#define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
+#define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
+#define VKI_S_ISFIFO(m)        (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
+#define VKI_S_ISSOCK(m)        (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
+
 #define VKI_S_IRUSR 00400
 #define VKI_S_IWUSR 00200
 
index 550402adc606eb1e5b18b86cd2cd98a1e9217cef..f713fb32ba49e5f25868f803364cff83aab6bf2f 100644 (file)
@@ -318,26 +318,6 @@ struct vki_sigcontext {
 // From linux-2.6.8.1/include/asm-i386/stat.h
 //----------------------------------------------------------------------
 
-#define VKI_S_IFMT  00170000
-#define VKI_S_IFSOCK 0140000
-#define VKI_S_IFLNK     0120000
-#define VKI_S_IFREG  0100000
-#define VKI_S_IFBLK  0060000
-#define VKI_S_IFDIR  0040000
-#define VKI_S_IFCHR  0020000
-#define VKI_S_IFIFO  0010000
-#define VKI_S_ISUID  0004000
-#define VKI_S_ISGID  0002000
-#define VKI_S_ISVTX  0001000
-
-#define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
-#define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) == VKI_S_IFREG)
-#define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
-#define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
-#define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
-#define VKI_S_ISFIFO(m)        (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
-#define VKI_S_ISSOCK(m)        (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
-
 struct vki_stat {
        unsigned long  st_dev;
        unsigned long  st_ino;