Only tested on mipsel o32.
---
 file.c                      |   35 +++++++++++++++++++++++++++++++++++
 linux/dummy.h               |    2 --
 linux/mips/syscallent-o32.h |    2 +-
 linux/syscall.h             |    2 ++
 4 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/file.c b/file.c
index 9a83287..016fc94 100644
--- a/file.c
+++ b/file.c
@@ -2686,6 +2686,41 @@ sys_fadvise64_64(struct tcb *tcp)
        return 0;
 }
 
+static const struct xlat sync_file_range_flags[] = {
+       { SYNC_FILE_RANGE_WAIT_BEFORE,  "SYNC_FILE_RANGE_WAIT_BEFORE"   },
+       { SYNC_FILE_RANGE_WRITE,        "SYNC_FILE_RANGE_WRITE"         },
+       { SYNC_FILE_RANGE_WAIT_AFTER,   "SYNC_FILE_RANGE_WAIT_AFTER"    },
+       { 0,                            NULL                            }
+};
+
+int
+sys_sync_file_range(struct tcb *tcp)
+{
+       if (entering(tcp)) {
+               int argn;
+               printfd(tcp, tcp->u_arg[0]);
+               argn = printllval(tcp, ", %lld, ", 1);
+               argn = printllval(tcp, "%lld, ", argn);
+               printflags(sync_file_range_flags, tcp->u_arg[argn],
+                          "SYNC_FILE_RANGE_???");
+       }
+       return 0;
+}
+
+int
+sys_sync_file_range2(struct tcb *tcp)
+{
+       if (entering(tcp)) {
+               int argn;
+               printfd(tcp, tcp->u_arg[0]);
+               printflags(sync_file_range_flags, 1,
+                          "SYNC_FILE_RANGE_???");
+               argn = printllval(tcp, ", %lld, ", 2);
+               argn = printllval(tcp, "%lld, ", argn);
+       }
+       return 0;
+}
+
 static const struct xlat inotify_modes[] = {
        { 0x00000001,   "IN_ACCESS"     },
        { 0x00000002,   "IN_MODIFY"     },
diff --git a/linux/dummy.h b/linux/dummy.h
index 9d33fe1..6af5ec7 100644
--- a/linux/dummy.h
+++ b/linux/dummy.h
@@ -47,8 +47,6 @@
 #define        sys_name_to_handle_at   printargs
 #define        sys_open_by_handle_at   printargs
 #define        sys_request_key         printargs
-#define        sys_sync_file_range     printargs
-#define        sys_sync_file_range2    printargs
 #define        sys_sysfs               printargs
 #define        sys_vm86old             printargs
 #define        sys_vm86                printargs
diff --git a/linux/mips/syscallent-o32.h b/linux/mips/syscallent-o32.h
index c23ac14..a154d92 100644
--- a/linux/mips/syscallent-o32.h
+++ b/linux/mips/syscallent-o32.h
@@ -305,7 +305,7 @@
        { 5,    TD,     sys_ppoll,              "ppoll"         }, /* 4302 */
        { 1,    TP,     sys_unshare,            "unshare"       }, /* 4303 */
        { 6,    TD,     sys_splice,             "splice"        }, /* 4304 */
-       { 6,    TD,     sys_sync_file_range,    "sync_file_range" }, /* 4305 */
+       { 7,    TD,     sys_sync_file_range,    "sync_file_range" }, /* 4305 */
        { 4,    TD,     sys_tee,                "tee"           }, /* 4306 */
        { 4,    TD,     sys_vmsplice,           "vmsplice"      }, /* 4307 */
        { 6,    TM,     sys_move_pages,         "move_pages"    }, /* 4308 */
diff --git a/linux/syscall.h b/linux/syscall.h
index f6afcac..502e8eb 100644
--- a/linux/syscall.h
+++ b/linux/syscall.h
@@ -267,6 +267,8 @@ int sys_statfs64();
 int sys_stime();
 int sys_swapon();
 int sys_symlinkat();
+int sys_sync_file_range();
+int sys_sync_file_range2();
 int sys_sysctl();
 int sys_sysinfo();
 int sys_syslog();
-- 
1.7.10.4


------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
Strace-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to