From: Nicholas Nethercote Date: Wed, 15 Jul 2009 06:01:45 +0000 (+0000) Subject: Add support on Darwin for fstat_extended() and fstat64_extended(). Partly X-Git-Tag: svn/VALGRIND_3_5_0~389 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ef7925e7bc134c0c50abd69259a6b4e7f571a6f3;p=thirdparty%2Fvalgrind.git Add support on Darwin for fstat_extended() and fstat64_extended(). Partly addresses bug 198624. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10458 --- diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index bf0c4595a3..4f487f2e27 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -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), diff --git a/memcheck/tests/darwin/scalar.c b/memcheck/tests/darwin/scalar.c index 24ac0e532c..ac3dff8531 100644 --- a/memcheck/tests/darwin/scalar.c +++ b/memcheck/tests/darwin/scalar.c @@ -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 diff --git a/memcheck/tests/darwin/scalar.stderr.exp b/memcheck/tests/darwin/scalar.stderr.exp index 01c6ec4310..9976f8594f 100644 --- a/memcheck/tests/darwin/scalar.stderr.exp +++ b/memcheck/tests/darwin/scalar.stderr.exp @@ -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 ----------------------------------------------------- -----------------------------------------------------