SK_(pre_reg_read)(Vg_CoreSysCall, tid, "(syscallno)", \
R_SYSCALL_NUM, sizeof(UWord));
-#define PRRAn(n,s,a,t) \
+#define PRRAn(n,s,t,a) \
SK_(pre_reg_read)(Vg_CoreSysCall, tid, X(s,a), \
R_SYSCALL_ARG##n, sizeof(t));
#define PRE_REG_READ1(tr, s, t1, a1) \
if (VG_(defined_pre_reg_read)()) { \
PRRSN; \
- PRRAn(1,s,); \
+ PRRAn(1,s,t1,a1); \
}
#define PRE_REG_READ2(tr, s, t1, a1, t2, a2) \
if (VG_(defined_pre_reg_read)()) { \
PRRSN; \
- PRRAn(1,s,a1,t1); PRRAn(2,s,a2,t2); \
+ PRRAn(1,s,t1,a1); PRRAn(2,s,t2,a2); \
}
#define PRE_REG_READ3(tr, s, t1, a1, t2, a2, t3, a3) \
if (VG_(defined_pre_reg_read)()) { \
PRRSN; \
- PRRAn(1,s,a1,t1); PRRAn(2,s,a2,t2); PRRAn(3,s,a3,t3); \
+ PRRAn(1,s,t1,a1); PRRAn(2,s,t2,a2); PRRAn(3,s,t3,a3); \
}
#define PRE_REG_READ4(tr, s, t1, a1, t2, a2, t3, a3, t4, a4) \
if (VG_(defined_pre_reg_read)()) { \
PRRSN; \
- PRRAn(1,s,a1,t1); PRRAn(2,s,a2,t2); PRRAn(3,s,a3,t3); \
- PRRAn(4,s,a4,t4); \
+ PRRAn(1,s,t1,a1); PRRAn(2,s,t2,a2); PRRAn(3,s,t3,a3); \
+ PRRAn(4,s,t4,a4); \
}
#define PRE_REG_READ5(tr, s, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \
if (VG_(defined_pre_reg_read)()) { \
PRRSN; \
- PRRAn(1,s,a1,t1); PRRAn(2,s,a2,t2); PRRAn(3,s,a3,t3); \
- PRRAn(4,s,a4,t4); PRRAn(5,s,a5,t5); \
+ PRRAn(1,s,t1,a1); PRRAn(2,s,t2,a2); PRRAn(3,s,t3,a3); \
+ PRRAn(4,s,t4,a4); PRRAn(5,s,t5,a5); \
}
#define PRE_REG_READ6(tr, s, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \
if (VG_(defined_pre_reg_read)()) { \
PRRSN; \
- PRRAn(1,s,a1,t1); PRRAn(2,s,a2,t2); PRRAn(3,s,a3,t3); \
- PRRAn(4,s,a4,t4); PRRAn(5,s,a5,t5); PRRAn(6,s,a6,t6); \
+ PRRAn(1,s,t1,a1); PRRAn(2,s,t2,a2); PRRAn(3,s,t3,a3); \
+ PRRAn(4,s,t4,a4); PRRAn(5,s,t5,a5); PRRAn(6,s,t6,a6); \
}
// by 'data'.
PRINT( "sys_mount( %p, %p, %p, %p, %p )" ,arg1,arg2,arg3);
PRE_REG_READ5(long, "mount",
- char __user *, source, char __user *, target,
- char __user *, type, unsigned long, flags,
- void __user *, data);
+ char *, source, char *, target, char *, type,
+ unsigned long, flags, void *, data);
PRE_MEM_RASCIIZ( "mount(source)", arg1);
PRE_MEM_RASCIIZ( "mount(target)", arg2);
PRE_MEM_RASCIIZ( "mount(type)", arg3);
PRINT("setresgid ( %d, %d, %d )", arg1, arg2, arg3);
}
-PRE(vhangup)
+PREx(sys_vhangup, 0)
{
- PRINT("vhangup()");
+ PRINT("sys_vhangup ( )");
+ PRE_REG_READ0(long, "vhangup");
}
PRE(iopl)
PRINT("mlockall ( %x )", arg1);
}
-PRE(munlockall)
+PREx(sys_munlockall, MayBlock)
{
- /* int munlockall(void) */
- PRINT("munlockall()");
+ PRINT("sys_munlockall ( )");
+ PRE_REG_READ0(long, "munlockall");
}
PRE(sched_get_priority_max)
PRE_MEM_READ( "pwrite64(buf)", arg2, arg3 );
}
-PRE(sync)
+PREx(sys_sync, MayBlock)
{
- /* int sync(); */
- PRINT("sync ( )");
+ PRINT("sys_sync ( )");
+ PRE_REG_READ0(long, "sync");
}
PRE(fstatfs)
POST_MEM_WRITE( arg1, res );
}
-PRE(geteuid)
+PREx(sys_geteuid16, 0)
{
- /* uid_t geteuid(void); */
- PRINT("geteuid ( )");
+ PRINT("sys_geteuid16 ( )");
+ PRE_REG_READ0(long, "geteuid16");
}
-PRE(geteuid32)
+PREx(sys_geteuid, 0)
{
- /* ?? uid_t geteuid32(void); */
- PRINT("geteuid32(?) ( )");
+ PRINT("sys_geteuid ( )");
+ PRE_REG_READ0(long, "geteuid");
}
-PRE(getegid)
+PREx(sys_getegid16, 0)
{
- /* gid_t getegid(void); */
- PRINT("getegid ()");
+ PRINT("sys_getegid16 ( )");
+ PRE_REG_READ0(long, "getegid16");
}
-PRE(getegid32)
+PREx(sys_getegid, 0)
{
- /* gid_t getegid32(void); */
- PRINT("getegid32 ()");
+ PRINT("sys_getegid ( )");
+ PRE_REG_READ0(long, "getegid");
}
-PRE(getgid)
+PREx(sys_getgid16, 0)
{
- /* gid_t getgid(void); */
- PRINT("getgid ()");
+ PRINT("sys_getgid16 ( )");
+ PRE_REG_READ0(long, "getgid16");
}
-PRE(getgid32)
+PREx(sys_getgid, 0)
{
- /* gid_t getgid32(void); */
- PRINT("getgid32 ()");
+ PRINT("sys_getgid ( )");
+ PRE_REG_READ0(long, "getgid");
}
PREx(sys_getpid, 0)
PRINT("getpgid ( %d )", arg1);
}
-PRE(getpgrp)
+PREx(sys_getpgrp, 0)
{
- /* pid_t getpgrp(void); */
- PRINT("getpgrp ()");
+ PRINT("sys_getpgrp ()");
+ PRE_REG_READ0(long, "getpgrp");
}
PREx(sys_getppid, 0)
}
}
-PRE(getuid)
+PREx(sys_getuid16, 0)
{
- /* uid_t getuid(void); */
- PRINT("getuid ( )");
+ PRINT("sys_getuid16 ( )");
+ PRE_REG_READ0(long, "getuid16");
}
-PRE(getuid32)
+PREx(sys_getuid, 0)
{
- /* ???uid_t getuid32(void); */
- PRINT("getuid32 ( )");
+ PRINT("sys_getuid ( )");
+ PRE_REG_READ0(long, "getuid");
}
PRE(ipc)
// 3-arg version
PRINT("sys_open ( %p(%s), %d, %d )",arg1,arg1,arg2,arg3);
PRE_REG_READ3(long, "open",
- const char __user *, filename, int, flags, int, mode);
+ const char *, filename, int, flags, int, mode);
} else {
// 2-arg version
PRINT("sys_open ( %p(%s), %d )",arg1,arg1,arg2);
PRE_REG_READ2(long, "open",
- const char __user *, filename, int, flags);
+ const char *, filename, int, flags);
}
PRE_MEM_RASCIIZ( "open(filename)", arg1 );
}
{
PRINT("sys_read ( %d, %p, %llu )", arg1, arg2, (ULong)arg3);
PRE_REG_READ3(ssize_t, "read",
- unsigned int, fd, char __user *, buf, size_t, count);
+ unsigned int, fd, char *, buf, size_t, count);
if (!fd_allowed(arg1, "read", tid, False))
set_result( -VKI_EBADF );
{
PRINT("sys_write ( %d, %p, %llu )", arg1, arg2, (ULong)arg3);
PRE_REG_READ3(ssize_t, "write",
- unsigned int, fd, const char __user *, buf, size_t, count);
+ unsigned int, fd, const char *, buf, size_t, count);
if (!fd_allowed(arg1, "write", tid, False))
set_result( -VKI_EBADF );
else
PREALIAS(setgid32, setgid);
-PRE(setsid)
+PREx(sys_setsid, 0)
{
- /* pid_t setsid(void); */
- PRINT("setsid ()");
+ PRINT("sys_setsid ( )");
+ PRE_REG_READ0(long, "setsid");
}
PRE(setgroups)
PRE_MEM_RASCIIZ( "acct(filename)", arg1 );
}
-PRE(pause)
+PREx(sys_pause, MayBlock)
{
- /* int pause(void); */
- PRINT("pause ( )");
+ PRINT("sys_pause ( )");
+ PRE_REG_READ0(long, "pause");
}
PRE(rt_sigsuspend)
SYSX_(__NR_mount, sys_mount), // 21 *
SYSB_(umount, 0), // 22 sys_oldumount *
SYSB_(setuid, 0), // 23 sys_setuid16 ##
- SYSB_(getuid, 0), // 24 sys_getuid16 ##
+ SYSX_(__NR_getuid, sys_getuid16), // 24 ##
// stime 25 sys_stime *
SYSBA(ptrace, 0), // 26 sys_ptrace
SYSB_(alarm, MayBlock), /* not blocking, but must run in LWP context */ // 27 sys_alarm *
// oldfstat 28 sys_fstat *
- SYSB_(pause, MayBlock), // 29 sys_pause *
+ SYSX_(__NR_pause, sys_pause), // 29 *
SYSB_(utime, MayBlock), // 30 sys_utime *
// stty 31 sys_ni_syscall
SYSB_(nice, 0), // 34 sys_nice *
// ftime 35 sys_ni_syscall
- SYSB_(sync, MayBlock), // 36 sys_sync *
+ SYSX_(__NR_sync, sys_sync), // 36 *
SYSBA(kill, 0), // 37 sys_kill *
SYSB_(rename, 0), // 38 sys_rename *
SYSB_(mkdir, MayBlock), // 39 sys_mkdir *
SYSB_(brk, Special), // 45 sys_brk *
SYSB_(setgid, 0), // 46 sys_setgid16 ##
- SYSB_(getgid, 0), // 47 sys_getgid16 ##
+ SYSX_(__NR_getgid, sys_getgid16), // 47 ##
// signal 48 sys_signal *
- SYSB_(geteuid, 0), // 49 sys_geteuid16 ##
+ SYSX_(__NR_geteuid, sys_geteuid16), // 49 ##
- SYSB_(getegid, 0), // 50 sys_getegid16 ##
+ SYSX_(__NR_getegid, sys_getegid16), // 50 ##
SYSB_(acct, 0), // 51 sys_acct *
// umount2 52 sys_umount
// lock 53 sys_ni_syscall
SYSB_(chroot, 0), // 61 sys_chroot *
// ustat 62 sys_ustat *
SYSBA(dup2, 0), // 63 sys_dup2 *
- SYSX_(__NR_getppid, sys_getppid), // 64 *
+ SYSX_(__NR_getppid, sys_getppid), // 64 *
- SYSB_(getpgrp, 0), // 65 sys_getpgrp *
- SYSB_(setsid, 0), // 66 sys_setsid *
+ SYSX_(__NR_getpgrp, sys_getpgrp), // 65 *
+ SYSX_(__NR_setsid, sys_setsid), // 66 *
SYSBA(sigaction, SIG_SIM), // 67 sys_sigaction
// sgetmask 68 sys_sgetmask *
// ssetmask 69 sys_ssetmask *
// olduname 109 sys_uname
SYSB_(iopl, 0), // 110 sys_iopl
- SYSB_(vhangup, 0), // 111 sys_vhangup *
+ SYSX_(__NR_vhangup, sys_vhangup), // 111 *
// idle 112 sys_ni_syscall
// vm86old 113 sys_vm86old
SYSBA(wait4, MayBlock), // 114 sys_wait4 *
SYSB_(mlock, MayBlock), // 150 sys_mlock *
SYSB_(munlock, MayBlock), // 151 sys_unlock *
SYSB_(mlockall, MayBlock), // 152 sys_mlockall *
- SYSB_(munlockall, MayBlock), // 153 sys_munlockall *
+ SYSX_(__NR_munlockall, sys_munlockall), // 153 *
SYSBA(sched_setparam, 0), /* ??? */ // 154 sys_sched_setparam *
SYSBA(sched_getparam, 0), /* ??? */ // 155 sys_sched_getparam *
SYSBA(lstat64, 0), // 196 sys_lstat64 %%
SYSBA(fstat64, 0), // 197 sys_fstat64 %%
SYSB_(lchown32, 0), // 198 sys_lchown *
- SYSB_(getuid32, 0), // 199 sys_getuid *
+ SYSX_(__NR_getuid32, sys_getuid), // 199 *
- SYSB_(getgid32, 0), // 200 sys_getgid *
- SYSB_(geteuid32, 0), // 201 sys_geteuid *
- SYSB_(getegid32, 0), // 202 sys_getegid *
+ SYSX_(__NR_getgid32, sys_getgid), // 200 *
+ SYSX_(__NR_geteuid32, sys_geteuid), // 201 *
+ SYSX_(__NR_getegid32, sys_getegid), // 202 *
SYSB_(setreuid32, 0), // 203 sys_setreuid *
SYSB_(setregid32, 0), // 204 sys_setregid *
// for (very) basic syscall use. Generally not trying to do anything
// meaningful with the syscalls.
-void GO(char* s) {
- fprintf(stderr, "---------- %s\n", s);
-}
+#define GO(__NR_xxx, s) \
+ fprintf(stderr, "-----------------------------------------------------\n" \
+ "%3d:%20s %s\n" \
+ "-----------------------------------------------------\n", \
+ __NR_xxx, #__NR_xxx, s);
int main(void)
{
// __NR_read 3 --> sys_read()
// Nb: here we are also getting an error from the syscall arg itself.
- GO("__NR_read, 1+3 scalar errors");
+ GO(__NR_read, "1+3 scalar errors");
syscall(i0+__NR_read, i0, s0, i0);
// __NR_write 4 --> sys_write()
- GO("__NR_write, 3 scalar errors, 1 memory error");
+ GO(__NR_write, "3 scalar errors, 1 memory error");
syscall(__NR_write, i0, s0, i0+1);
// __NR_open 5
- GO("__NR_open(2), 2 scalar errors, 1 memory error");
+ GO(__NR_open, "(2-args), 2 scalar errors, 1 memory error");
syscall(__NR_open, s0, i0, i0+1);
- GO("__NR_open(3), 1 scalar error");
+ GO(__NR_open, "(3-args), 1 scalar error");
syscall(__NR_open, "tmp_write_file_foo", O_CREAT, i0);
// __NR_close 6
// __NR_oldstat 18
// __NR_lseek 19
// __NR_getpid 20 --> sys_getpid()
- GO("__NR_getpid, 0 errors");
+ GO(__NR_getpid, "0 errors");
syscall(__NR_getpid);
// __NR_mount 21
- GO("__NR_mount, 4 scalar errors, 3 memory errors");
+ GO(__NR_mount, "4 scalar errors, 3 memory errors");
syscall(__NR_mount, s0, s0, s0, i0, s0);
// __NR_umount 22
// __NR_setuid 23
+
// __NR_getuid 24
+ GO(__NR_getuid, "0 errors");
+ syscall(__NR_getuid);
+
// __NR_stime 25
// __NR_ptrace 26
// __NR_alarm 27
// __NR_oldfstat 28
+
// __NR_pause 29
+ // XXX: will have to be tested separately
+
// __NR_utime 30
// __NR_stty 31
// __NR_gtty 32
// __NR_access 33
// __NR_nice 34
// __NR_ftime 35
+
// __NR_sync 36
+ GO(__NR_sync, "0 errors");
+ syscall(__NR_sync);
+
// __NR_kill 37
// __NR_rename 38
// __NR_mkdir 39
// __NR_prof 44
// __NR_brk 45
// __NR_setgid 46
+
// __NR_getgid 47
+ GO(__NR_getgid, "0 errors");
+ syscall(__NR_getgid);
+
// __NR_signal 48
+
// __NR_geteuid 49
+ GO(__NR_geteuid, "0 errors");
+ syscall(__NR_geteuid);
+
// __NR_getegid 50
+ GO(__NR_getegid, "0 errors");
+ syscall(__NR_getegid);
+
// __NR_acct 51
// __NR_umount2 52
// __NR_lock 53
// __NR_dup2 63
// __NR_getppid 64
- GO("__NR_getppid, 0 errors");
+ GO(__NR_getppid, "0 errors");
syscall(__NR_getppid);
// __NR_getpgrp 65
+ GO(__NR_getpgrp, "0 errors");
+ syscall(__NR_getpgrp);
+
// __NR_setsid 66
+ GO(__NR_setsid, "0 errors");
+ syscall(__NR_setsid);
+
// __NR_sigaction 67
// __NR_sgetmask 68
// __NR_ssetmask 69
// __NR_sigpending 73
// __NR_sethostname 74
// __NR_setrlimit 75
- // __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */
+ // __NR_getrlimit 76
// __NR_getrusage 77
// __NR_gettimeofday 78
// __NR_settimeofday 79
// __NR_fstat 108
// __NR_olduname 109
// __NR_iopl 110
+
// __NR_vhangup 111
+ GO(__NR_vhangup, "0 errors");
+ syscall(__NR_vhangup);
+
// __NR_idle 112
// __NR_vm86old 113
// __NR_wait4 114
// __NR_bdflush 134
// __NR_sysfs 135
// __NR_personality 136
- // __NR_afs_syscall 137 /* Syscall for Andrew File System */
+ // __NR_afs_syscall 137
// __NR_setfsuid 138
// __NR_setfsgid 139
// __NR__llseek 140
// __NR_mlock 150
// __NR_munlock 151
// __NR_mlockall 152
+
// __NR_munlockall 153
+ GO(__NR_munlockall, "0 errors");
+ syscall(__NR_munlockall);
+
// __NR_sched_setparam 154
// __NR_sched_getparam 155
// __NR_sched_setscheduler 156
// __NR_capset 185
// __NR_sigaltstack 186
// __NR_sendfile 187
- // __NR_getpmsg 188 /* some people actually want streams */
- // __NR_putpmsg 189 /* some people actually want streams */
+ // __NR_getpmsg 188
+ // __NR_putpmsg 189
// __NR_vfork 190
- // __NR_ugetrlimit 191 /* SuS compliant getrlimit */
+ // __NR_ugetrlimit 191
// __NR_mmap2 192
// __NR_truncate64 193
// __NR_ftruncate64 194
// __NR_lstat64 196
// __NR_fstat64 197
// __NR_lchown32 198
+
// __NR_getuid32 199
+ GO(__NR_getuid32, "0 errors");
+ syscall(__NR_getuid32);
+
// __NR_getgid32 200
+ GO(__NR_getgid32, "0 errors");
+ syscall(__NR_getgid32);
+
// __NR_geteuid32 201
+ GO(__NR_geteuid32, "0 errors");
+ syscall(__NR_geteuid32);
+
// __NR_getegid32 202
+ GO(__NR_getegid32, "0 errors");
+ syscall(__NR_getegid32);
+
// __NR_setreuid32 203
// __NR_setregid32 204
// __NR_getgroups32 205
// __NR_pivot_root 217
// __NR_mincore 218
// __NR_madvise 219
- // __NR_madvise1 219 /* delete when C lib stub is removed */
// __NR_getdents64 220
// __NR_fcntl64 221
/* 223 is unused */
// __NR_mq_getsetattr (__NR_mq_open+5)
// __NR_sys_kexec_load 283
- GO("bogus constant, 1 message");
+ GO(9999, "1 message");
syscall(9999);
// __NR_exit 1 --> sys_exit()
- GO("__NR_exit, 1 scalar error");
+ GO(__NR_exit, "1 scalar error");
syscall(__NR_exit, i0);
assert(0);
----------- __NR_read, 1+3 scalar errors
+-----------------------------------------------------
+ 3: __NR_read 1+3 scalar errors
+-----------------------------------------------------
Syscall param (syscallno) contains uninitialised byte(s)
at 0x........: syscall (in /...libc...)
by 0x........: __libc_start_main (...libc...)
at 0x........: syscall (in /...libc...)
by 0x........: __libc_start_main (...libc...)
by 0x........: ...
----------- __NR_write, 3 scalar errors, 1 memory error
+-----------------------------------------------------
+ 4: __NR_write 3 scalar errors, 1 memory error
+-----------------------------------------------------
Syscall param write(fd) contains uninitialised byte(s)
at 0x........: syscall (in /...libc...)
by 0x........: __libc_start_main (...libc...)
by 0x........: ...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
----------- __NR_open(2), 2 scalar errors, 1 memory error
+-----------------------------------------------------
+ 5: __NR_open (2-args), 2 scalar errors, 1 memory error
+-----------------------------------------------------
Syscall param open(filename) contains uninitialised byte(s)
at 0x........: syscall (in /...libc...)
by 0x........: __libc_start_main (...libc...)
by 0x........: ...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
----------- __NR_open(3), 1 scalar error
+-----------------------------------------------------
+ 5: __NR_open (3-args), 1 scalar error
+-----------------------------------------------------
Syscall param open(mode) contains uninitialised byte(s)
at 0x........: syscall (in /...libc...)
by 0x........: __libc_start_main (...libc...)
by 0x........: ...
----------- __NR_getpid, 0 errors
----------- __NR_mount, 4 scalar errors, 3 memory errors
+-----------------------------------------------------
+ 20: __NR_getpid 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+ 21: __NR_mount 4 scalar errors, 3 memory errors
+-----------------------------------------------------
Syscall param mount(source) contains uninitialised byte(s)
at 0x........: syscall (in /...libc...)
by 0x........: __libc_start_main (...libc...)
by 0x........: ...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
----------- __NR_getppid, 0 errors
----------- bogus constant, 1 message
+-----------------------------------------------------
+ 24: __NR_getuid 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+ 36: __NR_sync 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+ 47: __NR_getgid 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+ 49: __NR_geteuid 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+ 50: __NR_getegid 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+ 64: __NR_getppid 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+ 65: __NR_getpgrp 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+ 66: __NR_setsid 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+111: __NR_vhangup 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+153: __NR_munlockall 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+199: __NR_getuid32 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+200: __NR_getgid32 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+201: __NR_geteuid32 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+202: __NR_getegid32 0 errors
+-----------------------------------------------------
+-----------------------------------------------------
+9999: 9999 1 message
+-----------------------------------------------------
WARNING: unhandled syscall: 9999
Do not panic. You may be able to fix this easily.
Read the file README_MISSING_SYSCALL_OR_IOCTL.
----------- __NR_exit, 1 scalar error
+-----------------------------------------------------
+ 1: __NR_exit 1 scalar error
+-----------------------------------------------------
Syscall param exit(error_code) contains uninitialised byte(s)
at 0x........: syscall (in /...libc...)