|
From: <sv...@va...> - 2005-08-27 17:20:56
|
Author: njn
Date: 2005-08-27 18:20:53 +0100 (Sat, 27 Aug 2005)
New Revision: 4538
Log:
Move some kernel constants to the right place.
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.
Modified:
trunk/coregrind/m_aspacemgr/aspacemgr.c
trunk/coregrind/m_signals.c
trunk/coregrind/pub_core_aspacemgr.h
trunk/include/vki-linux.h
trunk/include/vki-x86-linux.h
Modified: trunk/coregrind/m_aspacemgr/aspacemgr.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_aspacemgr/aspacemgr.c 2005-08-27 15:07:21 UTC (rev =
4537)
+++ trunk/coregrind/m_aspacemgr/aspacemgr.c 2005-08-27 17:20:53 UTC (rev =
4538)
@@ -851,8 +851,13 @@
if (fd !=3D -1 && (flags & SF_FILE)) {
vg_assert((off & (VKI_PAGE_SIZE-1)) =3D=3D 0);
=20
- if (VG_(fstat)(fd, &st) < 0)
+ if (VG_(fstat)(fd, &st) < 0) {
flags &=3D ~SF_FILE;
+ } else {
+ // Note unusual mapping types
+ if (VKI_S_ISCHR(st.st_mode) || VKI_S_ISBLK(st.st_mode))
+ flags |=3D SF_DEVICE;
+ }
}
=20
if ((flags & SF_FILE) && filename =3D=3D NULL && fd !=3D -1)
@@ -1180,7 +1185,8 @@
=20
for (i =3D 0; i < segments_used; i++) {
s =3D &segments[i];
- flags =3D s->flags & (SF_SHARED|SF_MMAP|SF_VALGRIND|SF_CORE|SF_STA=
CK);
+ // Note that, for example, we don't want to touch a device page.
+ flags =3D s->flags & (SF_SHARED|SF_MMAP|SF_VALGRIND|SF_CORE|SF_STA=
CK|SF_DEVICE);
if (flags !=3D SF_MMAP && flags !=3D SF_STACK && flags !=3D (SF_MM=
AP|SF_STACK))
continue;
if ((s->prot & (VKI_PROT_READ|VKI_PROT_WRITE))=20
Modified: trunk/coregrind/m_signals.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_signals.c 2005-08-27 15:07:21 UTC (rev 4537)
+++ trunk/coregrind/m_signals.c 2005-08-27 17:20:53 UTC (rev 4538)
@@ -928,7 +928,7 @@
/* If true, then this Segment may be mentioned in the core */
static Bool may_dump(const Segment *seg)
{
- return (seg->flags & SF_VALGRIND) =3D=3D 0 && VG_(is_client_addr)(seg=
->addr);
+ return (seg->flags & (SF_DEVICE|SF_VALGRIND)) =3D=3D 0 && VG_(is_clie=
nt_addr)(seg->addr);
}
=20
/* If true, then this Segment's contents will be in the core */
Modified: trunk/coregrind/pub_core_aspacemgr.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_aspacemgr.h 2005-08-27 15:07:21 UTC (rev 453=
7)
+++ trunk/coregrind/pub_core_aspacemgr.h 2005-08-27 17:20:53 UTC (rev 453=
8)
@@ -80,6 +80,7 @@
#define SF_CORE (1 << 7) // allocated by core on behalf of the clie=
nt
#define SF_VALGRIND (1 << 8) // a valgrind-internal mapping - not in cl=
ient
#define SF_CODE (1 << 9) // segment contains cached code
+#define SF_DEVICE (1 << 10) // device mapping; avoid careless touchin=
g
=20
typedef struct _Segment Segment;
=20
Modified: trunk/include/vki-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/vki-linux.h 2005-08-27 15:07:21 UTC (rev 4537)
+++ trunk/include/vki-linux.h 2005-08-27 17:20:53 UTC (rev 4538)
@@ -1073,6 +1073,26 @@
// From linux-2.6.8.1/include/linux/stat.h
//----------------------------------------------------------------------
=20
+#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) =3D=3D VKI_S_IFLNK)
+#define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFREG)
+#define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFDIR)
+#define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFCHR)
+#define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFBLK)
+#define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFIFO)
+#define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFSOCK)
+
#define VKI_S_IRUSR 00400
#define VKI_S_IWUSR 00200
=20
Modified: trunk/include/vki-x86-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/vki-x86-linux.h 2005-08-27 15:07:21 UTC (rev 4537)
+++ trunk/include/vki-x86-linux.h 2005-08-27 17:20:53 UTC (rev 4538)
@@ -318,26 +318,6 @@
// From linux-2.6.8.1/include/asm-i386/stat.h
//----------------------------------------------------------------------
=20
-#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) =3D=3D VKI_S_IFLNK)
-#define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFREG)
-#define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFDIR)
-#define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFCHR)
-#define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFBLK)
-#define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFIFO)
-#define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFSOCK)
-
struct vki_stat {
unsigned long st_dev;
unsigned long st_ino;
|