]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support on Darwin for fstat_extended() and fstat64_extended(). Partly
authorNicholas Nethercote <njn@valgrind.org>
Wed, 15 Jul 2009 06:01:45 +0000 (06:01 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Wed, 15 Jul 2009 06:01:45 +0000 (06:01 +0000)
addresses bug 198624.

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

coregrind/m_syswrap/syswrap-darwin.c
memcheck/tests/darwin/scalar.c
memcheck/tests/darwin/scalar.stderr.exp

index bf0c4595a38819b3457818c1d7e50d8a2d3a8341..4f487f2e2780128b217a5086fd220b636399ca34 100644 (file)
@@ -1875,7 +1875,6 @@ PRE(stat_extended)
    if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
       PRE_MEM_WRITE("stat_extended(fsacl)",      ARG3, *(vki_size_t *)ARG4 );
    PRE_MEM_READ(    "stat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
-   PRE_MEM_WRITE(   "stat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
 }
 POST(stat_extended)
 {
@@ -1897,7 +1896,6 @@ PRE(lstat_extended)
    if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
       PRE_MEM_WRITE("lstat_extended(fsacl)",      ARG3, *(vki_size_t *)ARG4 );
    PRE_MEM_READ(    "lstat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
-   PRE_MEM_WRITE(   "lstat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
 }
 POST(lstat_extended)
 {
@@ -1908,6 +1906,26 @@ POST(lstat_extended)
 }
 
 
+PRE(fstat_extended)
+{
+   PRINT("fstat_extended( %ld, %#lx, %#lx, %#lx )",
+      ARG1, ARG2, ARG3, ARG4);
+   PRE_REG_READ4(int, "fstat_extended", int, fd, struct stat *, buf, 
+                 void *, fsacl, vki_size_t *, fsacl_size);
+   PRE_MEM_WRITE(   "fstat_extended(buf)",        ARG2, sizeof(struct vki_stat) );
+   if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+      PRE_MEM_WRITE("fstat_extended(fsacl)",      ARG3, *(vki_size_t *)ARG4 );
+   PRE_MEM_READ(    "fstat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
+}
+POST(fstat_extended)
+{
+   POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
+   if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+      POST_MEM_WRITE( ARG3, *(vki_size_t *)ARG4 );
+   POST_MEM_WRITE( ARG4, sizeof(vki_size_t) );
+}
+
+
 PRE(stat64_extended)
 {
    PRINT("stat64_extended( %#lx(%s), %#lx, %#lx, %#lx )",
@@ -1919,7 +1937,6 @@ PRE(stat64_extended)
    if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
       PRE_MEM_WRITE("stat64_extended(fsacl)",      ARG3, *(vki_size_t *)ARG4 );
    PRE_MEM_READ(    "stat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
-   PRE_MEM_WRITE(   "stat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
 }
 POST(stat64_extended)
 {
@@ -1941,7 +1958,6 @@ PRE(lstat64_extended)
    if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
       PRE_MEM_WRITE(   "lstat64_extended(fsacl)",   ARG3, *(vki_size_t *)ARG4 );
    PRE_MEM_READ(    "lstat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
-   PRE_MEM_WRITE(   "lstat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
 }
 POST(lstat64_extended)
 {
@@ -1952,6 +1968,26 @@ POST(lstat64_extended)
 }
 
 
+PRE(fstat64_extended)
+{
+   PRINT("fstat64_extended( %ld, %#lx, %#lx, %#lx )",
+      ARG1, ARG2, ARG3, ARG4);
+   PRE_REG_READ4(int, "fstat64_extended", int, fd, struct stat64 *, buf, 
+                 void *, fsacl, vki_size_t *, fsacl_size);
+   PRE_MEM_WRITE(   "fstat64_extended(buf)",        ARG2, sizeof(struct vki_stat64) );
+   if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+      PRE_MEM_WRITE("fstat64_extended(fsacl)",      ARG3, *(vki_size_t *)ARG4 );
+   PRE_MEM_READ(    "fstat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
+}
+POST(fstat64_extended)
+{
+   POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
+   if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+      POST_MEM_WRITE( ARG3, *(vki_size_t *)ARG4 );
+   POST_MEM_WRITE( ARG4, sizeof(vki_size_t) );
+}
+
+
 PRE(fchmod_extended)
 {
    /* DDD: Note: this is not really correct.  Handling of
@@ -7323,7 +7359,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
 // _____(__NR_umask_extended), 
    MACXY(__NR_stat_extended,  stat_extended), 
    MACXY(__NR_lstat_extended, lstat_extended),   // 280
-// _____(__NR_fstat_extended), 
+   MACXY(__NR_fstat_extended, fstat_extended), 
    MACX_(__NR_chmod_extended,    chmod_extended), 
    MACX_(__NR_fchmod_extended,   fchmod_extended), 
 // _____(__NR_access_extended), 
@@ -7385,7 +7421,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
    MACXY(__NR_lstat64,     lstat64),    // 340
    MACXY(__NR_stat64_extended,  stat64_extended), 
    MACXY(__NR_lstat64_extended, lstat64_extended), 
-// _____(__NR_fstat64_extended), 
+   MACXY(__NR_fstat64_extended, fstat64_extended),
    MACXY(__NR_getdirentries64, getdirentries64), 
    MACXY(__NR_statfs64,    statfs64), 
    MACXY(__NR_fstatfs64,   fstatfs64), 
index 24ac0e532cbc90eb4c616668e655d0f09e44f0ca..ac3dff85316e6ae479977d186d85f8ca80e70f19 100644 (file)
@@ -498,9 +498,14 @@ int main(void)
       // Go again to get a complaint about where the 3rd arg points;  it
       // requires the 4th arg to point to a valid value.
       SY(__NR_lstat_extended, 0, 0, 0, &one); FAIL;
+
+      GO(__NR_fstat_extended, 280, "4s 3m");
+      SY(__NR_fstat_extended, x0, x0, x0, x0); FAIL;
+      // Go again to get a complaint about where the 3rd arg points;  it
+      // requires the 4th arg to point to a valid value.
+      SY(__NR_fstat_extended, 0, 0, 0, &one); FAIL;
    }
 
-   // __NR_fstat_extended 281
    // __NR_chmod_extended 282
    // __NR_fchmod_extended 283
    // __NR_access_extended 284
@@ -599,6 +604,12 @@ int main(void)
       // Go again to get a complaint about where the 3rd arg points;  it
       // requires the 4th arg to point to a valid value.
       SY(__NR_lstat64_extended, 0, 0, 0, &one); FAIL;
+
+      GO(__NR_fstat64_extended, 342, "4s 3m");
+      SY(__NR_fstat64_extended, x0, x0, x0, x0); FAIL;
+      // Go again to get a complaint about where the 3rd arg points;  it
+      // requires the 4th arg to point to a valid value.
+      SY(__NR_fstat64_extended, 0, 0, 0, &one); FAIL;
    }
 
    // __NR_fstat64_extended 343
index 01c6ec43108ed51da473edfca9ed8422297de228..9976f8594fdf55e40cf9e805043edf5b53e0d8d6 100644 (file)
@@ -682,6 +682,33 @@ Syscall param lstat_extended(fsacl) points to unaddressable byte(s)
    ...
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 -----------------------------------------------------
+x2000119(280): __NR_fstat_extended 4s 3m
+-----------------------------------------------------
+
+Syscall param fstat_extended(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat_extended(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat_extended(fsacl) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat_extended(fsacl_size) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat_extended(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fstat_extended(fsacl_size) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fstat_extended(fsacl) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
 (296):           old load_shared_file
 -----------------------------------------------------
 -----------------------------------------------------
@@ -816,6 +843,33 @@ Syscall param lstat64_extended(fsacl) points to unaddressable byte(s)
    ...
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 -----------------------------------------------------
+x2000157(342):__NR_fstat64_extended 4s 3m
+-----------------------------------------------------
+
+Syscall param fstat64_extended(fd) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat64_extended(buf) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat64_extended(fsacl) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat64_extended(fsacl_size) contains uninitialised byte(s)
+   ...
+
+Syscall param fstat64_extended(buf) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fstat64_extended(fsacl_size) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param fstat64_extended(fsacl) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
 (369-379):       unused
 -----------------------------------------------------
 -----------------------------------------------------