Also update syscall tables to the point where they include renameat2. * file.c (sys_renameat2): New function. * pathtrace.c (pathtrace_match): Handle sys_renameat2. * linux/syscall.h (sys_renameat2): New prototype. * linux/aarch64/syscallent1.h: Add kcmp/finit_module/sched_setattr/ sched_getattr/renameat2. * linux/alpha/syscallent.h: Add kcmp/finit_module. * linux/arm/syscallent.h: Add sched_setattr/sched_getattr/renameat2. * linux/hppa/syscallent.h: Add sched_setattr/sched_getattr/utimes/renameat2. * linux/i386/syscallent.h: Add sched_setattr/sched_getattr/renameat2. * linux/ia64/syscallent.h: Likewise. * linux/m68k/syscallent.h: Likewise. * linux/microblaze/syscallent.h: Likewise. * linux/mips/syscallent-n32.h: Likewise. * linux/mips/syscallent-n64.h: Add getdents64/sched_setattr/sched_getattr/ renameat2. * linux/mips/syscallent-o32.h: Add sched_setattr/sched_getattr/renameat2. * linux/powerpc/syscallent.h: Fix finit_module/kcmp order. Add sched_setattr/ sched_getattr/renameat2. * linux/s390/syscallent.h: Add sched_setattr/sched_getattr/renameat2. * linux/s390x/syscallent.h: Likewise. * linux/sparc/syscallent.h: Likewise. * linux/x32/syscallent.h: Likewise. * linux/x86_64/syscallent.h: Likewise. * linux/xtensa/syscallent.h: Add sched_setattr/sched_getattr. * xlat/rename_flags.in: New file. --- file.c | 16 ++++++++++++++++ linux/aarch64/syscallent1.h | 5 +++++ linux/alpha/syscallent.h | 2 ++ linux/arm/syscallent.h | 3 +++ linux/hppa/syscallent.h | 4 ++++ linux/i386/syscallent.h | 6 +++--- linux/ia64/syscallent.h | 3 +++ linux/m68k/syscallent.h | 6 +++--- linux/microblaze/syscallent.h | 3 +++ linux/mips/syscallent-n32.h | 10 ++++++++-- linux/mips/syscallent-n64.h | 12 ++++++++++-- linux/mips/syscallent-o32.h | 6 ++++++ linux/powerpc/syscallent.h | 10 +++++----- linux/s390/syscallent.h | 6 +++--- linux/s390x/syscallent.h | 6 +++--- linux/sparc/syscallent.h | 7 +++---- linux/syscall.h | 1 + linux/x32/syscallent.h | 5 ++++- linux/x86_64/syscallent.h | 3 +++ linux/xtensa/syscallent.h | 2 ++ pathtrace.c | 1 + xlat/rename_flags.in | 2 ++ 22 files changed, 93 insertions(+), 26 deletions(-) create mode 100644 xlat/rename_flags.in
diff --git a/file.c b/file.c index 360408f..18b0f9d 100644 --- a/file.c +++ b/file.c @@ -1780,6 +1780,22 @@ sys_renameat(struct tcb *tcp) return 0; } +#include "xlat/rename_flags.h" + +int +sys_renameat2(struct tcb *tcp) +{ + if (entering(tcp)) { + int ret = sys_renameat(tcp); + if (ret) + return ret; + + tprints(", "); + printflags(rename_flags, tcp->u_arg[4], "RENAME_??"); + } + return 0; +} + int sys_chown(struct tcb *tcp) { diff --git a/linux/aarch64/syscallent1.h b/linux/aarch64/syscallent1.h index ef23db3..d1a9eae 100644 --- a/linux/aarch64/syscallent1.h +++ b/linux/aarch64/syscallent1.h @@ -258,6 +258,11 @@ { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 269 */ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 270 */ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 271 */ + { 5, 0, sys_kcmp, "kcmp" }, /* 272 */ + { 3, TD, sys_finit_module, "finit_module" }, /* 273 */ + { 3, 0, printargs, "sched_setattr" }, /* 274 */ + { 4, 0, printargs, "sched_getattr" }, /* 275 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 276 */ /* Blank down to 1023 */ [272 ... 1023] = { }, diff --git a/linux/alpha/syscallent.h b/linux/alpha/syscallent.h index 581475c..408854e 100644 --- a/linux/alpha/syscallent.h +++ b/linux/alpha/syscallent.h @@ -532,3 +532,5 @@ { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 503 */ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 504 */ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 505 */ + { 5, 0, sys_kcmp, "kcmp" }, /* 506 */ + { 3, TD, sys_finit_module, "finit_module" }, /* 507 */ diff --git a/linux/arm/syscallent.h b/linux/arm/syscallent.h index 1656af6..e8aa3d0 100644 --- a/linux/arm/syscallent.h +++ b/linux/arm/syscallent.h @@ -408,6 +408,9 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 377 */ { 5, 0, sys_kcmp, "kcmp" }, /* 378 */ { 3, TD, sys_finit_module, "finit_module" }, /* 379 */ + { 3, 0, printargs, "sched_setattr" }, /* 380 */ + { 4, 0, printargs, "sched_getattr" }, /* 381 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 382 */ #ifdef __ARM_EABI__ # define ARM_LAST_ORDINARY_SYSCALL 379 #else diff --git a/linux/hppa/syscallent.h b/linux/hppa/syscallent.h index 2548f46..4098f88 100644 --- a/linux/hppa/syscallent.h +++ b/linux/hppa/syscallent.h @@ -336,3 +336,7 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 331 */ { 5, 0, sys_kcmp, "kcmp" }, /* 332 */ { 3, TD, sys_finit_module, "finit_module" }, /* 333 */ + { 3, 0, printargs, "sched_setattr" }, /* 334 */ + { 4, 0, printargs, "sched_getattr" }, /* 335 */ + { 2, TF, sys_utimes, "utimes" }, /* 336 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 337 */ diff --git a/linux/i386/syscallent.h b/linux/i386/syscallent.h index a8daacf..455485f 100644 --- a/linux/i386/syscallent.h +++ b/linux/i386/syscallent.h @@ -379,9 +379,9 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 348 */ { 5, 0, sys_kcmp, "kcmp" }, /* 349 */ { 3, TD, sys_finit_module, "finit_module" }, /* 350 */ - { 5, 0, NULL, NULL }, /* 351 */ - { 5, 0, NULL, NULL }, /* 352 */ - { 5, 0, NULL, NULL }, /* 353 */ + { 3, 0, printargs, "sched_setattr" }, /* 351 */ + { 4, 0, printargs, "sched_getattr" }, /* 352 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 353 */ { 5, 0, NULL, NULL }, /* 354 */ { 5, 0, NULL, NULL }, /* 355 */ { 5, 0, NULL, NULL }, /* 356 */ diff --git a/linux/ia64/syscallent.h b/linux/ia64/syscallent.h index 9aeef0b..7c00602 100644 --- a/linux/ia64/syscallent.h +++ b/linux/ia64/syscallent.h @@ -1127,3 +1127,6 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 1333 */ { 4, TN, sys_accept4, "accept4" }, /* 1334 */ { 3, TD, sys_finit_module, "finit_module" }, /* 1335 */ + { 3, 0, printargs, "sched_setattr" }, /* 1336 */ + { 4, 0, printargs, "sched_getattr" }, /* 1337 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 1338 */ diff --git a/linux/m68k/syscallent.h b/linux/m68k/syscallent.h index b227776..d0b88c9 100644 --- a/linux/m68k/syscallent.h +++ b/linux/m68k/syscallent.h @@ -375,9 +375,9 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 346 */ { 5, 0, sys_kcmp, "kcmp" }, /* 347 */ { 3, TD, sys_finit_module, "finit_module" }, /* 348 */ - { 5, 0, NULL, NULL }, /* 349 */ - { 5, 0, NULL, NULL }, /* 350 */ - { 5, 0, NULL, NULL }, /* 351 */ + { 3, 0, printargs, "sched_setattr" }, /* 349 */ + { 4, 0, printargs, "sched_getattr" }, /* 350 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 351 */ { 5, 0, NULL, NULL }, /* 352 */ { 5, 0, NULL, NULL }, /* 353 */ { 5, 0, NULL, NULL }, /* 354 */ diff --git a/linux/microblaze/syscallent.h b/linux/microblaze/syscallent.h index 5c5be55..f75978d 100644 --- a/linux/microblaze/syscallent.h +++ b/linux/microblaze/syscallent.h @@ -407,3 +407,6 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 378 */ { 5, 0, sys_kcmp, "kcmp" }, /* 379 */ { 3, TD, sys_finit_module, "finit_module" }, /* 380 */ + { 3, 0, printargs, "sched_setattr" }, /* 381 */ + { 4, 0, printargs, "sched_getattr" }, /* 382 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 383 */ diff --git a/linux/mips/syscallent-n32.h b/linux/mips/syscallent-n32.h index 4b0e6bc..4527df6 100644 --- a/linux/mips/syscallent-n32.h +++ b/linux/mips/syscallent-n32.h @@ -311,8 +311,11 @@ { 2, TD, sys_setns, "setns" }, /* 6308 */ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 6309 */ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 6310 */ - { 5, 0, sys_kcmp, "kcmp" }, /* 6311 */ - { 3, TD, sys_finit_module, "finit_module" }, /* 6312 */ + { 5, 0, sys_kcmp, "kcmp" }, /* 6311 */ + { 3, TD, sys_finit_module, "finit_module" }, /* 6312 */ + { 3, 0, printargs, "sched_setattr" }, /* 6313 */ + { 4, 0, printargs, "sched_getattr" }, /* 6314 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 6315 */ #else { 0, 0, printargs, "n32_read" }, /* 6000 */ { 0, 0, printargs, "n32_write" }, /* 6001 */ @@ -627,4 +630,7 @@ { 6, 0, printargs, "n32_process_vm_writev" }, /* 6310 */ { 5, 0, printargs, "n32_kcmp" }, /* 6311 */ { 3, TD, printargs, "n32_finit_module" }, /* 6312 */ + { 3, 0, printargs, "n32_sched_setattr" }, /* 6313 */ + { 4, 0, printargs, "n32_sched_getattr" }, /* 6314 */ + { 5, TD|TF, printargs, "n32_renameat2" }, /* 6315 */ #endif diff --git a/linux/mips/syscallent-n64.h b/linux/mips/syscallent-n64.h index 524f280..39f0a9a 100644 --- a/linux/mips/syscallent-n64.h +++ b/linux/mips/syscallent-n64.h @@ -308,6 +308,10 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 5305 */ { 5, 0, sys_kcmp, "kcmp" }, /* 5306 */ { 3, TD, sys_finit_module, "finit_module" }, /* 5307 */ + { 3, TD, sys_getdents64, "getdents64" }, /* 5308 */ + { 3, 0, printargs, "sched_setattr" }, /* 5309 */ + { 4, 0, printargs, "sched_getattr" }, /* 5310 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 5311 */ #else { 0, 0, printargs, "n64_read" }, /* 5000 */ { 0, 0, printargs, "n64_write" }, /* 5001 */ @@ -615,7 +619,11 @@ { 2, TD, printargs, "n64_setns" }, /* 5303 */ { 6, 0, printargs, "n64_process_vm_readv" }, /* 5304 */ { 6, 0, printargs, "n64_process_vm_writev" }, /* 5305 */ - { 5, 0, printargs, "kcmp" }, /* 5306 */ - { 3, TD, printargs, "finit_module" }, /* 5307 */ + { 5, 0, printargs, "n64_kcmp" }, /* 5306 */ + { 3, TD, printargs, "n64_finit_module" }, /* 5307 */ + { 3, TD, printargs, "n64_getdents64" }, /* 5308 */ + { 3, 0, printargs, "n64_sched_setattr" }, /* 5309 */ + { 4, 0, printargs, "n64_sched_getattr" }, /* 5310 */ + { 5, TD|TF, printargs, "n64_renameat2" }, /* 5311 */ #endif [5308 ... 5999] = { }, /* 5999 */ /* end of Linux N64 */ diff --git a/linux/mips/syscallent-o32.h b/linux/mips/syscallent-o32.h index a371fb1..0418132 100644 --- a/linux/mips/syscallent-o32.h +++ b/linux/mips/syscallent-o32.h @@ -349,6 +349,9 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 4346 */ { 5, 0, sys_kcmp, "kcmp" }, /* 4347 */ { 3, TD, sys_finit_module, "finit_module" }, /* 4348 */ + { 3, 0, printargs, "sched_setattr" }, /* 4349 */ + { 4, 0, printargs, "sched_getattr" }, /* 4350 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 4351 */ #else { 0, 0, printargs, "o32_syscall" }, /* 4000 */ { 1, TP|SE, printargs, "o32_exit" }, /* 4001 */ @@ -699,5 +702,8 @@ { 6, 0, printargs, "o32_process_vm_writev" }, /* 4346 */ { 5, 0, printargs, "o32_kcmp" }, /* 4347 */ { 3, TD, printargs, "o32_finit_module" }, /* 4348 */ + { 3, 0, printargs, "o32_sched_setattr" }, /* 4349 */ + { 4, 0, printargs, "o32_sched_getattr" }, /* 4350 */ + { 5, TD|TF, printargs, "o32_renameat2" }, /* 4351 */ #endif [4349 ... 4999] = { }, /* 4999 */ /* end of Linux o32 */ diff --git a/linux/powerpc/syscallent.h b/linux/powerpc/syscallent.h index 7d7825e..d6f516c 100644 --- a/linux/powerpc/syscallent.h +++ b/linux/powerpc/syscallent.h @@ -379,11 +379,11 @@ { 2, TD, sys_setns, "setns" }, /* 350 */ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 351 */ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 352 */ - { 5, 0, sys_kcmp, "kcmp" }, /* 353 */ - { 3, TD, sys_finit_module, "finit_module" }, /* 354 */ - { 5, 0, NULL, NULL }, /* 355 */ - { 5, 0, NULL, NULL }, /* 356 */ - { 5, 0, NULL, NULL }, /* 357 */ + { 3, TD, sys_finit_module, "finit_module" }, /* 353 */ + { 5, 0, sys_kcmp, "kcmp" }, /* 354 */ + { 3, 0, printargs, "sched_setattr" }, /* 355 */ + { 4, 0, printargs, "sched_getattr" }, /* 356 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 357 */ { 5, 0, NULL, NULL }, /* 358 */ { 5, 0, NULL, NULL }, /* 359 */ { 5, 0, NULL, NULL }, /* 360 */ diff --git a/linux/s390/syscallent.h b/linux/s390/syscallent.h index 108e4c0..e319c08 100644 --- a/linux/s390/syscallent.h +++ b/linux/s390/syscallent.h @@ -373,9 +373,9 @@ { 2, 0, printargs, "s390_runtime_instr" }, /* 342 */ { 5, 0, sys_kcmp, "kcmp" }, /* 343 */ { 3, TD, sys_finit_module, "finit_module" }, /* 344 */ - { 5, 0, NULL, NULL }, /* 345 */ - { 5, 0, NULL, NULL }, /* 346 */ - { 5, 0, NULL, NULL }, /* 347 */ + { 3, 0, printargs, "sched_setattr" }, /* 345 */ + { 4, 0, printargs, "sched_getattr" }, /* 346 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 347 */ { 5, 0, NULL, NULL }, /* 348 */ { 5, 0, NULL, NULL }, /* 349 */ { 5, 0, NULL, NULL }, /* 350 */ diff --git a/linux/s390x/syscallent.h b/linux/s390x/syscallent.h index 3b93a80..bef3a6e 100644 --- a/linux/s390x/syscallent.h +++ b/linux/s390x/syscallent.h @@ -372,9 +372,9 @@ { 2, 0, printargs, "s390_runtime_instr" }, /* 342 */ { 5, 0, sys_kcmp, "kcmp" }, /* 343 */ { 3, TD, sys_finit_module, "finit_module" }, /* 344 */ - { 5, 0, NULL, NULL }, /* 345 */ - { 5, 0, NULL, NULL }, /* 346 */ - { 5, 0, NULL, NULL }, /* 347 */ + { 3, 0, printargs, "sched_setattr" }, /* 345 */ + { 4, 0, printargs, "sched_getattr" }, /* 346 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 347 */ { 5, 0, NULL, NULL }, /* 348 */ { 5, 0, NULL, NULL }, /* 349 */ { 5, 0, NULL, NULL }, /* 350 */ diff --git a/linux/sparc/syscallent.h b/linux/sparc/syscallent.h index e62e4e1..b3d84fa 100644 --- a/linux/sparc/syscallent.h +++ b/linux/sparc/syscallent.h @@ -341,10 +341,9 @@ { 0, NF, printargs, "kern_features" }, /* 340 */ { 5, 0, sys_kcmp, "kcmp" }, /* 341 */ { 3, TD, sys_finit_module, "finit_module" }, /* 342 */ - { 5, 0, NULL, NULL }, /* 343 */ - { 5, 0, NULL, NULL }, /* 344 */ - { 5, 0, NULL, NULL }, /* 345 */ - { 5, 0, NULL, NULL }, /* 346 */ + { 3, 0, printargs, "sched_setattr" }, /* 343 */ + { 4, 0, printargs, "sched_getattr" }, /* 345 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 346 */ { 5, 0, NULL, NULL }, /* 347 */ { 5, 0, NULL, NULL }, /* 348 */ { 5, 0, NULL, NULL }, /* 349 */ diff --git a/linux/syscall.h b/linux/syscall.h index 38aa4bd..0e69598 100644 --- a/linux/syscall.h +++ b/linux/syscall.h @@ -207,6 +207,7 @@ int sys_recvmsg(); int sys_remap_file_pages(); int sys_removexattr(); int sys_renameat(); +int sys_renameat2(); int sys_request_key(); int sys_restart_syscall(); int sys_rt_sigaction(); diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h index 7059cbf..a032698 100644 --- a/linux/x32/syscallent.h +++ b/linux/x32/syscallent.h @@ -312,8 +312,11 @@ { 6, 0, printargs, "64:process_vm_writev" }, /* 311 */ { 5, 0, sys_kcmp, "kcmp" }, /* 312 */ { 3, TD, sys_finit_module, "finit_module" }, /* 313 */ + { 3, 0, printargs, "sched_setattr" }, /* 314 */ + { 4, 0, printargs, "sched_getattr" }, /* 315 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 316 */ - [314 ... 511] = {}, + [317 ... 511] = {}, { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 512 */ { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 513 */ diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h index 10c4eeb..59775d6 100644 --- a/linux/x86_64/syscallent.h +++ b/linux/x86_64/syscallent.h @@ -312,3 +312,6 @@ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 311 */ { 5, 0, sys_kcmp, "kcmp" }, /* 312 */ { 3, TD, sys_finit_module, "finit_module" }, /* 313 */ + { 3, 0, printargs, "sched_setattr" }, /* 314 */ + { 4, 0, printargs, "sched_getattr" }, /* 315 */ + { 5, TD|TF, sys_renameat2, "renameat2" }, /* 316 */ diff --git a/linux/xtensa/syscallent.h b/linux/xtensa/syscallent.h index cc32cec..9666ce4 100644 --- a/linux/xtensa/syscallent.h +++ b/linux/xtensa/syscallent.h @@ -324,3 +324,5 @@ { 5, 0, sys_kcmp, "kcmp" }, /* 331 */ { 3, TD, sys_finit_module, "finit_module" }, /* 332 */ { 4, TN, sys_accept4, "accept4" }, /* 333 */ + { 3, 0, printargs, "sched_setattr" }, /* 334 */ + { 4, 0, printargs, "sched_getattr" }, /* 335 */ diff --git a/pathtrace.c b/pathtrace.c index 9fb99c4..ccfb3c2 100644 --- a/pathtrace.c +++ b/pathtrace.c @@ -211,6 +211,7 @@ pathtrace_match(struct tcb *tcp) } if (s->sys_func == sys_renameat || + s->sys_func == sys_renameat2 || s->sys_func == sys_linkat) { /* fd, path, fd, path */ diff --git a/xlat/rename_flags.in b/xlat/rename_flags.in new file mode 100644 index 0000000..324bded --- /dev/null +++ b/xlat/rename_flags.in @@ -0,0 +1,2 @@ +RENAME_NOREPLACE +RENAME_EXCHANGE -- 2.0.0 ------------------------------------------------------------------------------ _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel