Implement decoding of splice, tee and vmsplice(2) syscalls

* io.c (print_loff_t): New function.
(sys_sendfile64): Use it.
(splice_flags): New xlat structure.
(sys_tee, sys_splice, sys_vmsplice): New functions.
* linux/syscall.h (sys_tee, sys_splice, sys_vmsplice): Declare them.
* linux/*/syscallent.h: Use them.
diff --git a/linux/mips/syscallent.h b/linux/mips/syscallent.h
index a6c4c13..4f400a3 100644
--- a/linux/mips/syscallent.h
+++ b/linux/mips/syscallent.h
@@ -4306,10 +4306,10 @@
 	{ 6,	TD,	sys_pselect6,		"pselect6"	}, /* 4301 */
 	{ 5,	TD,	sys_ppoll,		"ppoll"		}, /* 4302 */
 	{ 1,	TP,	sys_unshare,		"unshare"	}, /* 4303 */
-	{ 6,	TD,	printargs,		"splice"	}, /* 4304 */
+	{ 6,	TD,	sys_splice,		"splice"	}, /* 4304 */
 	{ 4,	TD,	printargs,		"sync_file_range" }, /* 4305 */
-	{ 4,	TD,	printargs,		"tee"		}, /* 4306 */
-	{ 4,	TD,	printargs,		"vmsplice"	}, /* 4307 */
+	{ 4,	TD,	sys_tee,		"tee"		}, /* 4306 */
+	{ 4,	TD,	sys_vmsplice,		"vmsplice"	}, /* 4307 */
 	{ 6,	0,	sys_move_pages,		"move_pages"	}, /* 4308 */
 	{ 2,	0,	printargs,		"set_robust_list" }, /* 4309 */
 	{ 3,	0,	printargs,		"get_robust_list" }, /* 4310 */
@@ -5608,10 +5608,10 @@
 	{ 6,	TD,	sys_pselect6,		"pselect6"	}, /* 5260 */
 	{ 5,	TD,	sys_ppoll,		"ppoll"		}, /* 5261 */
 	{ 1,	TP,	sys_unshare,		"unshare"	}, /* 5262 */
-	{ 6,	TD,	printargs,		"splice"	}, /* 5263 */
+	{ 6,	TD,	sys_splice,		"splice"	}, /* 5263 */
 	{ 4,	TD,	printargs,		"sync_file_range" }, /* 5264 */
-	{ 4,	TD,	printargs,		"tee"		}, /* 5265 */
-	{ 4,	TD,	printargs,		"vmsplice"	}, /* 5266 */
+	{ 4,	TD,	sys_tee,		"tee"		}, /* 5265 */
+	{ 4,	TD,	sys_vmsplice,		"vmsplice"	}, /* 5266 */
 	{ 6,	0,	printargs,		"move_pages"	}, /* 5267 */
 	{ 2,	0,	printargs,		"set_robust_list" }, /* 5268 */
 	{ 3,	0,	printargs,		"get_robust_list" }, /* 5269 */
@@ -6918,10 +6918,10 @@
 	{ 6,	TD,	sys_pselect6,		"pselect6"	}, /* 6264 */
 	{ 5,	TD,	sys_ppoll,		"ppoll"		}, /* 6265 */
 	{ 1,	TP,	sys_unshare,		"unshare"	}, /* 6266 */
-	{ 6,	TD,	printargs,		"splice"	}, /* 6267 */
+	{ 6,	TD,	sys_splice,		"splice"	}, /* 6267 */
 	{ 4,	TD,	printargs,		"sync_file_range" }, /* 6268 */
-	{ 4,	TD,	printargs,		"tee"		}, /* 6269 */
-	{ 4,	TD,	printargs,		"vmsplice"	}, /* 6270 */
+	{ 4,	TD,	sys_tee,		"tee"		}, /* 6269 */
+	{ 4,	TD,	sys_vmsplice,		"vmsplice"	}, /* 6270 */
 	{ 6,	0,	printargs,		"move_pages"	}, /* 6271 */
 	{ 2,	0,	printargs,		"set_robust_list" }, /* 6272 */
 	{ 3,	0,	printargs,		"get_robust_list" }, /* 6273 */