but not supported in valgrind
492663 Valgrind ignores debug info for some binaries
493454 Missing FUSE_COMPATIBLE_MAY_BLOCK markers
+493507 direct readlink syscall from PRE handler is incompatible with
+ FUSE_COMPATIBLE_MAY_BLOCK
To see details of a given bug, visit
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
GENX_(__NR_link, sys_link), // 86
GENX_(__NR_unlink, sys_unlink), // 87
GENX_(__NR_symlink, sys_symlink), // 88
- GENX_(__NR_readlink, sys_readlink), // 89
+ GENXY(__NR_readlink, sys_readlink), // 89
GENX_(__NR_chmod, sys_chmod), // 90
GENX_(__NR_fchmod, sys_fchmod), // 91
LINX_(__NR_linkat, sys_linkat), // 265
LINX_(__NR_symlinkat, sys_symlinkat), // 266
- LINX_(__NR_readlinkat, sys_readlinkat), // 267
+ LINXY(__NR_readlinkat, sys_readlinkat), // 267
LINX_(__NR_fchmodat, sys_fchmodat), // 268
LINX_(__NR_faccessat, sys_faccessat), // 269
GENX_(__NR_symlink, sys_symlink), // 83
//zz // (__NR_oldlstat, sys_lstat), // 84 -- obsolete
//zz
- GENX_(__NR_readlink, sys_readlink), // 85
+ GENXY(__NR_readlink, sys_readlink), // 85
//zz // (__NR_uselib, sys_uselib), // 86 */Linux
//zz // (__NR_swapon, sys_swapon), // 87 */Linux
//zz // (__NR_reboot, sys_reboot), // 88 */Linux
LINX_(__NR_linkat, sys_linkat), // 303
LINX_(__NR_symlinkat, sys_symlinkat), // 304
- LINX_(__NR_readlinkat, sys_readlinkat), //
+ LINXY(__NR_readlinkat, sys_readlinkat), //
LINX_(__NR_fchmodat, sys_fchmodat), //
LINX_(__NR_faccessat, sys_faccessat), //
LINXY(__NR_shmat, sys_shmat), //305
LINX_(__NR_vmsplice, sys_vmsplice), // 75
LINX_(__NR_splice, sys_splice), // 76
LINX_(__NR_tee, sys_tee), // 77
- LINX_(__NR_readlinkat, sys_readlinkat), // 78
+ LINXY(__NR_readlinkat, sys_readlinkat), // 78
LINXY(__NR_newfstatat, sys_newfstatat), // 79
GENXY(__NR_fstat, sys_newfstat), // 80
GENX_(__NR_sync, sys_sync), // 81
PRE(sys_readlink)
{
FUSE_COMPATIBLE_MAY_BLOCK();
- Word saved = SYSNO;
-
PRINT("sys_readlink ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %llu )",
ARG1, (char*)(Addr)ARG1, ARG2, (ULong)ARG3);
PRE_REG_READ3(long, "readlink",
const char *, path, char *, buf, int, bufsiz);
PRE_MEM_RASCIIZ( "readlink(path)", ARG1 );
PRE_MEM_WRITE( "readlink(buf)", ARG2,ARG3 );
+}
-
- {
+POST(sys_readlink)
+{
#if defined(VGO_linux) || defined(VGO_solaris)
+ {
+ Word saved = SYSNO;
#if defined(VGO_linux)
#define PID_EXEPATH "/proc/%d/exe"
#define SELF_EXEPATH "/proc/self/exe"
&& (VG_STREQ(arg1s, name) || VG_STREQ(arg1s, SELF_EXEPATH))) {
VG_(sprintf)(name, SELF_EXEFD, VG_(cl_exec_fd));
SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, (UWord)name,
- ARG2, ARG3));
- } else
-#endif
- {
- /* Normal case */
- SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, ARG1, ARG2, ARG3));
+ ARG2, ARG3));
}
}
-
+#endif
if (SUCCESS && RES > 0)
POST_MEM_WRITE( ARG2, RES );
}
PRE(sys_readlinkat)
{
- HChar name[30]; // large enough
- Word saved = SYSNO;
-
FUSE_COMPATIBLE_MAY_BLOCK();
-
PRINT("sys_readlinkat ( %ld, %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %"
FMT_REGWORD "u )", SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4);
PRE_REG_READ4(long, "readlinkat",
int, dfd, const char *, path, char *, buf, vki_size_t, bufsiz);
PRE_MEM_RASCIIZ( "readlinkat(path)", ARG2 );
PRE_MEM_WRITE( "readlinkat(buf)", ARG3,ARG4 );
+}
+
+POST(sys_readlinkat)
+{
+ HChar name[30]; // large enough
+ Word saved = SYSNO;
/*
* Handle the case where readlinkat is looking at /proc/self/exe or
|| VG_(strcmp)((HChar *)(Addr)ARG2, "/proc/self/exe") == 0)) {
VG_(sprintf)(name, "/proc/self/fd/%d", VG_(cl_exec_fd));
SET_STATUS_from_SysRes( VG_(do_syscall4)(saved, ARG1, (UWord)name,
- ARG3, ARG4));
- } else {
- /* Normal case */
- SET_STATUS_from_SysRes( VG_(do_syscall4)(saved, ARG1, ARG2, ARG3, ARG4));
+ ARG3, ARG4));
}
if (SUCCESS && RES > 0)
//.. PLAX_(__NR_select, old_select), // 82
GENX_ (__NR_symlink, sys_symlink), // 83
//.. // (__NR_oldlstat, sys_lstat), // 84
- GENX_ (__NR_readlink, sys_readlink), // 85
+ GENXY (__NR_readlink, sys_readlink), // 85
//.. // (__NR_uselib, sys_uselib), // 86
//.. // (__NR_swapon, sys_swapon), // 87
//.. // (__NR_reboot, sys_reboot), // 88
LINX_ (__NR_renameat, sys_renameat), // 295
LINX_ (__NR_linkat, sys_linkat), // 296
LINX_ (__NR_symlinkat, sys_symlinkat), // 297
- LINX_ (__NR_readlinkat, sys_readlinkat), // 298
+ LINXY (__NR_readlinkat, sys_readlinkat), // 298
LINX_ (__NR_fchmodat, sys_fchmodat), // 299
LINX_ (__NR_faccessat, sys_faccessat), // 300
LINXY (__NR_pselect6, sys_pselect6), // 301
GENX_ (__NR_link, sys_link),
GENX_ (__NR_unlink, sys_unlink),
GENX_ (__NR_symlink, sys_symlink),
- GENX_ (__NR_readlink, sys_readlink),
+ GENXY (__NR_readlink, sys_readlink),
GENX_ (__NR_chmod, sys_chmod),
GENX_ (__NR_fchmod, sys_fchmod),
GENX_ (__NR_chown, sys_chown),
LINX_ (__NR_renameat, sys_renameat),
LINX_ (__NR_linkat, sys_linkat),
LINX_ (__NR_symlinkat, sys_symlinkat),
- LINX_ (__NR_readlinkat, sys_readlinkat),
+ LINXY (__NR_readlinkat, sys_readlinkat),
LINX_ (__NR_fchmodat, sys_fchmodat),
LINX_ (__NR_faccessat, sys_faccessat),
LINXY (__NR_pselect6, sys_pselect6),
LINX_ (__NR_vmsplice, sys_vmsplice),
LINX_ (__NR_splice, sys_splice),
LINX_ (__NR_tee, sys_tee),
- LINX_ (__NR_readlinkat, sys_readlinkat),
+ LINXY (__NR_readlinkat, sys_readlinkat),
GENX_ (__NR_sync, sys_sync),
GENX_ (__NR_fsync, sys_fsync),
GENX_ (__NR_fdatasync, sys_fdatasync),
GENX_(__NR_symlink, sys_symlink), // 83
//.. // (__NR_oldlstat, sys_lstat), // 84 -- obsolete
//..
- GENX_(__NR_readlink, sys_readlink), // 85
+ GENXY(__NR_readlink, sys_readlink), // 85
//.. // (__NR_uselib, sys_uselib), // 86 */Linux
//.. // (__NR_swapon, sys_swapon), // 87 */Linux
//.. // (__NR_reboot, sys_reboot), // 88 */Linux
LINX_(__NR_renameat, sys_renameat), // 293
LINX_(__NR_linkat, sys_linkat), // 294
LINX_(__NR_symlinkat, sys_symlinkat), // 295
- LINX_(__NR_readlinkat, sys_readlinkat), // 296
+ LINXY(__NR_readlinkat, sys_readlinkat), // 296
LINX_(__NR_fchmodat, sys_fchmodat), // 297
LINX_(__NR_faccessat, sys_faccessat), // 298
LINX_(__NR_set_robust_list, sys_set_robust_list), // 299
GENX_(__NR_symlink, sys_symlink), // 83
// _____(__NR_oldlstat, sys_oldlstat), // 84
- GENX_(__NR_readlink, sys_readlink), // 85
+ GENXY(__NR_readlink, sys_readlink), // 85
// _____(__NR_uselib, sys_uselib), // 86
// _____(__NR_swapon, sys_swapon), // 87
// _____(__NR_reboot, sys_reboot), // 88
LINX_(__NR_renameat, sys_renameat), // 293
LINX_(__NR_linkat, sys_linkat), // 294
LINX_(__NR_symlinkat, sys_symlinkat), // 295
- LINX_(__NR_readlinkat, sys_readlinkat), // 296
+ LINXY(__NR_readlinkat, sys_readlinkat), // 296
LINX_(__NR_fchmodat, sys_fchmodat), // 297
LINX_(__NR_faccessat, sys_faccessat), // 298
LINX_(__NR_set_robust_list, sys_set_robust_list), // 299
GENX_(__NR_symlink, sys_symlink), // 83
GENX_(84, sys_ni_syscall), /* unimplemented (by the kernel) */ // 84
- GENX_(__NR_readlink, sys_readlink), // 85
+ GENXY(__NR_readlink, sys_readlink), // 85
// ?????(__NR_uselib, ), // 86
// ?????(__NR_swapon, ), // 87
// ?????(__NR_reboot, ), // 88
LINX_(__NR_renameat, sys_renameat), // 295
LINX_(__NR_linkat, sys_linkat), // 296
LINX_(__NR_symlinkat, sys_symlinkat), // 297
- LINX_(__NR_readlinkat, sys_readlinkat), // 298
+ LINXY(__NR_readlinkat, sys_readlinkat), // 298
LINX_(__NR_fchmodat, sys_fchmodat), // 299
LINX_(__NR_faccessat, sys_faccessat), // 300
#if defined(SOLARIS_OLD_SYSCALLS)
SOLXY(__NR_lstat, sys_lstat), /* 88 */
GENX_(__NR_symlink, sys_symlink), /* 89 */
- GENX_(__NR_readlink, sys_readlink), /* 90 */
+ GENXY(__NR_readlink, sys_readlink), /* 90 */
#endif /* SOLARIS_OLD_SYSCALLS */
GENX_(__NR_setgroups, sys_setgroups), /* 91 */
GENXY(__NR_getgroups, sys_getgroups), /* 92 */
GENX_(__NR_symlink, sys_symlink), // 83
//zz // (__NR_oldlstat, sys_lstat), // 84 -- obsolete
//zz
- GENX_(__NR_readlink, sys_readlink), // 85
+ GENXY(__NR_readlink, sys_readlink), // 85
//zz // (__NR_uselib, sys_uselib), // 86 */Linux
//zz // (__NR_swapon, sys_swapon), // 87 */Linux
//zz // (__NR_reboot, sys_reboot), // 88 */Linux
LINX_(__NR_linkat, sys_linkat), // 303
LINX_(__NR_symlinkat, sys_symlinkat), // 304
- LINX_(__NR_readlinkat, sys_readlinkat), // 305
+ LINXY(__NR_readlinkat, sys_readlinkat), // 305
LINX_(__NR_fchmodat, sys_fchmodat), // 306
LINX_(__NR_faccessat, sys_faccessat), // 307
LINXY(__NR_pselect6, sys_pselect6), // 308