176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman/* 276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl> 376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl> 476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com> 54dc8a2aec63e4fb5ee2688544c4de323ed5de3efWichert Akkerman * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl> 676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * All rights reserved. 776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Redistribution and use in source and binary forms, with or without 976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * modification, are permitted provided that the following conditions 1076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * are met: 1176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1. Redistributions of source code must retain the above copyright 1276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer. 1376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 2. Redistributions in binary form must reproduce the above copyright 1476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer in the 1576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * documentation and/or other materials provided with the distribution. 1676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 3. The name of the author may not be used to endorse or promote products 1776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * derived from this software without specific prior written permission. 1876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 3076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include "defs.h" 3276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#define _LINUX_SOCKET_H 3414cd9f06e5420b15ff1ba8bbd3077bdedc708a8fWichert Akkerman#define _LINUX_FS_H 3576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 36cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_RDONLY 1 /* Mount read-only */ 37cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_NOSUID 2 /* Ignore suid and sgid bits */ 38cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_NODEV 4 /* Disallow access to device special files */ 39cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_NOEXEC 8 /* Disallow program execution */ 40cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_SYNCHRONOUS 16 /* Writes are synced at once */ 41cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_REMOUNT 32 /* Alter flags of a mounted FS */ 42cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_MANDLOCK 64 /* Allow mandatory locks on an FS */ 43cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_DIRSYNC 128 /* Directory modifications are synchronous */ 44cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_NOATIME 1024 /* Do not update access times. */ 45cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_NODIRATIME 2048 /* Do not update directory access times */ 46cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_BIND 4096 47cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_MOVE 8192 48cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_REC 16384 49817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin#define MS_SILENT 32768 50cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_POSIXACL (1<<16) /* VFS does not apply the umask */ 51817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin#define MS_UNBINDABLE (1<<17) /* change to unbindable */ 52817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin#define MS_PRIVATE (1<<18) /* change to private */ 53817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin#define MS_SLAVE (1<<19) /* change to slave */ 54817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin#define MS_SHARED (1<<20) /* change to shared */ 5522485b702b4fc7c66520896b67b9cda2a4cb2486Mike Frysinger#define MS_RELATIME (1<<21) 5622485b702b4fc7c66520896b67b9cda2a4cb2486Mike Frysinger#define MS_KERNMOUNT (1<<22) 5722485b702b4fc7c66520896b67b9cda2a4cb2486Mike Frysinger#define MS_I_VERSION (1<<23) 5822485b702b4fc7c66520896b67b9cda2a4cb2486Mike Frysinger#define MS_STRICTATIME (1<<24) 599e1a7d818a04d62f097a74b1ff525468c36b0e7cBernhard Reutner-Fischer#define MS_NOSEC (1<<28) 6022485b702b4fc7c66520896b67b9cda2a4cb2486Mike Frysinger#define MS_BORN (1<<29) 61cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_ACTIVE (1<<30) 62cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath#define MS_NOUSER (1<<31) 636af374811ba26950c2ac3e7f9bfd69cb986e0f27Roland McGrath#define MS_MGC_VAL 0xc0ed0000 /* Magic flag number */ 64817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin#define MS_MGC_MSK 0xffff0000 /* Magic flag mask */ 6576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 6676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/socket.h> 6776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <netinet/in.h> 6876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <arpa/inet.h> 69f48df6ce298672621718d3921d3f357fc68c4433Dmitry V. Levin#ifdef HAVE_LINUX_CAPABILITY_H 70a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/capability.h> 7176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 72f48df6ce298672621718d3921d3f357fc68c4433Dmitry V. Levin#ifdef HAVE_ASM_CACHECTL_H 73a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <asm/cachectl.h> 742e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#endif 75d6b924937038457f83b47b26b9163bdfbdc230f2Wichert Akkerman#ifdef HAVE_LINUX_USTNAME_H 76a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <linux/utsname.h> 77d6b924937038457f83b47b26b9163bdfbdc230f2Wichert Akkerman#endif 78f48df6ce298672621718d3921d3f357fc68c4433Dmitry V. Levin#ifdef HAVE_ASM_SYSMIPS_H 79a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <asm/sysmips.h> 80d6b924937038457f83b47b26b9163bdfbdc230f2Wichert Akkerman#endif 8122fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman#include <linux/sysctl.h> 822a32eaa157b2da63f181c37c37ecead405740d68Dmitry V. Levin#include <linux/personality.h> 8322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 840ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/mount_flags.h" 8576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 8676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 87817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levinsys_mount(struct tcb *tcp) 8876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 8976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 90817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin int ignore_type = 0, ignore_data = 0; 91817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin unsigned long flags = tcp->u_arg[3]; 92817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin 93817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin /* Discard magic */ 94817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin if ((flags & MS_MGC_MSK) == MS_MGC_VAL) 95817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin flags &= ~MS_MGC_MSK; 96817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin 97817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin if (flags & MS_REMOUNT) 98817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin ignore_type = 1; 99817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin else if (flags & (MS_BIND | MS_MOVE)) 100817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin ignore_type = ignore_data = 1; 101817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin 10276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printpath(tcp, tcp->u_arg[0]); 10360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 104817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin 10576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printpath(tcp, tcp->u_arg[1]); 10660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 107817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin 108817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin if (ignore_type && tcp->u_arg[2]) 109cbd3358a62fad460923d1626a220b6396e1fdd9fRoland McGrath tprintf("%#lx", tcp->u_arg[2]); 110817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin else 111817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin printstr(tcp, tcp->u_arg[2], -1); 11260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 113817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin 114b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(mount_flags, tcp->u_arg[3], "MS_???"); 11560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 116817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin 117817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin if (ignore_data && tcp->u_arg[4]) 1186af374811ba26950c2ac3e7f9bfd69cb986e0f27Roland McGrath tprintf("%#lx", tcp->u_arg[4]); 119817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin else 120817b708fcb7fb95dee484df2b95ecc2967877419Dmitry V. Levin printstr(tcp, tcp->u_arg[4], -1); 12176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 12276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 12376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 12476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1255c7ad8c9155271b3c7b8fc9f08da43d3d9138b71Dmitry V. Levin#define MNT_FORCE 0x00000001 /* Attempt to forcibily umount */ 1265c7ad8c9155271b3c7b8fc9f08da43d3d9138b71Dmitry V. Levin#define MNT_DETACH 0x00000002 /* Just detach from the tree */ 1275c7ad8c9155271b3c7b8fc9f08da43d3d9138b71Dmitry V. Levin#define MNT_EXPIRE 0x00000004 /* Mark for expiry */ 1285c7ad8c9155271b3c7b8fc9f08da43d3d9138b71Dmitry V. Levin 1290ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/umount_flags.h" 1305c7ad8c9155271b3c7b8fc9f08da43d3d9138b71Dmitry V. Levin 131dacfb6ebd630641d851b6df94c3b4587969a6cfbWichert Akkermanint 1325c7ad8c9155271b3c7b8fc9f08da43d3d9138b71Dmitry V. Levinsys_umount2(struct tcb *tcp) 133dacfb6ebd630641d851b6df94c3b4587969a6cfbWichert Akkerman{ 134dacfb6ebd630641d851b6df94c3b4587969a6cfbWichert Akkerman if (entering(tcp)) { 135dacfb6ebd630641d851b6df94c3b4587969a6cfbWichert Akkerman printstr(tcp, tcp->u_arg[0], -1); 13660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1375c7ad8c9155271b3c7b8fc9f08da43d3d9138b71Dmitry V. Levin printflags(umount_flags, tcp->u_arg[1], "MNT_???"); 138dacfb6ebd630641d851b6df94c3b4587969a6cfbWichert Akkerman } 139dacfb6ebd630641d851b6df94c3b4587969a6cfbWichert Akkerman return 0; 140dacfb6ebd630641d851b6df94c3b4587969a6cfbWichert Akkerman} 141dacfb6ebd630641d851b6df94c3b4587969a6cfbWichert Akkerman 142ced50da46b600af578f2c341ba0db31c72880eb2Roland McGrath/* These are not macros, but enums. We just copy the values by hand 143ced50da46b600af578f2c341ba0db31c72880eb2Roland McGrath from Linux 2.6.9 here. */ 1440ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/personality_options.h" 14576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 14676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1471201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_personality(struct tcb *tcp) 14876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 14976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) 15076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(personality_options, tcp->u_arg[0], "PER_???"); 15176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 15276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 15376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 154ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levinenum { 155ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_CLOSE = 0, 156ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_OPEN, 157ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_READ, 158ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_READ_ALL, 159ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_READ_CLEAR, 160ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_CLEAR, 161ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_CONSOLE_OFF, 162ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_CONSOLE_ON, 163ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_CONSOLE_LEVEL, 164ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_SIZE_UNREAD, 165ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin SYSLOG_ACTION_SIZE_BUFFER 166ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin}; 167ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin 1680ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/syslog_action_type.h" 169ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin 170ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levinint 171ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levinsys_syslog(struct tcb *tcp) 172ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin{ 173ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin int type = tcp->u_arg[0]; 174ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin 175ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin if (entering(tcp)) { 176ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin /* type */ 177ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin printxval(syslog_action_type, type, "SYSLOG_ACTION_???"); 178ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin tprints(", "); 179ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin } 180ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin 181ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin switch (type) { 182ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin case SYSLOG_ACTION_READ: 183ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin case SYSLOG_ACTION_READ_ALL: 184ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin case SYSLOG_ACTION_READ_CLEAR: 185ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin if (entering(tcp)) 186ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin return 0; 187ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin break; 188ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin default: 189ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin if (entering(tcp)) { 190ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin tprintf("%#lx, %lu", 191ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin tcp->u_arg[1], tcp->u_arg[2]); 192ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin } 193ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin return 0; 194ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin } 195ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin 196ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin /* bufp */ 197ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin if (syserror(tcp)) 198ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin tprintf("%#lx", tcp->u_arg[1]); 199ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin else 200ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin printstr(tcp, tcp->u_arg[1], tcp->u_rval); 201ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin /* len */ 202ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin tprintf(", %d", (int) tcp->u_arg[2]); 203ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin 204ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin return 0; 205ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin} 206ee3c22ce55bdca3c4a96ffaeddb0f67c4e4ee6d3Dmitry V. Levin 2072e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#ifdef M68K 2080ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/cacheflush_scope.h" 2092e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman 210d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat cacheflush_flags[] = { 2112e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#ifdef FLUSH_CACHE_BOTH 212bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(FLUSH_CACHE_BOTH), 2132e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#endif 2142e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#ifdef FLUSH_CACHE_DATA 215bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(FLUSH_CACHE_DATA), 2162e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#endif 2172e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#ifdef FLUSH_CACHE_INSN 218bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(FLUSH_CACHE_INSN), 2192e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#endif 220594527353359d9a6aad516992e09c393e11f3bd2Dmitry V. Levin XLAT_END 2212e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman}; 2222e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman 2232e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkermanint 2241201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_cacheflush(struct tcb *tcp) 2252e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman{ 2262e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman if (entering(tcp)) { 2272e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman /* addr */ 2282e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf("%#lx, ", tcp->u_arg[0]); 2292e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman /* scope */ 2302e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman printxval(cacheflush_scope, tcp->u_arg[1], "FLUSH_SCOPE_???"); 23160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2322e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman /* flags */ 233b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(cacheflush_flags, tcp->u_arg[2], "FLUSH_CACHE_???"); 2342e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman /* len */ 2352e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %lu", tcp->u_arg[3]); 2362e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman } 2372e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman return 0; 2382e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman} 2392e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman#endif /* M68K */ 2402e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman 24187ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin#ifdef BFIN 24287ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin 24387ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin#include <bfin_sram.h> 24487ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin 2450ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sram_alloc_flags.h" 24687ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin 24787ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levinint 248132c52a5ccf7b12a44a617f06c97d3f4344a4421Denys Vlasenkosys_sram_alloc(struct tcb *tcp) 24987ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin{ 25087ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin if (entering(tcp)) { 25187ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin /* size */ 252132c52a5ccf7b12a44a617f06c97d3f4344a4421Denys Vlasenko tprintf("%lu, ", tcp->u_arg[0]); 25387ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin /* flags */ 254149d7de7e7ab53dd8c5bd63147c704988e65ce35Mike Frysinger printflags(sram_alloc_flags, tcp->u_arg[1], "???_SRAM"); 25587ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin } 25687ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin return 1; 25787ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin} 25887ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin 259260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger#include <asm/cachectl.h> 260260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger 261260e571343b12221ad848a9c972fc5518d66ef2cMike Frysingerstatic const struct xlat cacheflush_flags[] = { 262bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ICACHE), 263bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(DCACHE), 264bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(BCACHE), 265594527353359d9a6aad516992e09c393e11f3bd2Dmitry V. Levin XLAT_END 266260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger}; 267260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger 268260e571343b12221ad848a9c972fc5518d66ef2cMike Frysingerint 269260e571343b12221ad848a9c972fc5518d66ef2cMike Frysingersys_cacheflush(struct tcb *tcp) 270260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger{ 271260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger if (entering(tcp)) { 272260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger /* start addr */ 273260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger tprintf("%#lx, ", tcp->u_arg[0]); 274260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger /* length */ 275260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger tprintf("%ld, ", tcp->u_arg[1]); 276260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger /* flags */ 277260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger printxval(cacheflush_flags, tcp->u_arg[1], "?CACHE"); 278260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger } 279260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger return 0; 280260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger} 281260e571343b12221ad848a9c972fc5518d66ef2cMike Frysinger 28287ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin#endif 28387ea1f4fe68c6110a96a76f8601b3e204200082dDmitry V. Levin 284f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#ifdef SH 285f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSOstatic const struct xlat cacheflush_flags[] = { 286f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#ifdef CACHEFLUSH_D_INVAL 287bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CACHEFLUSH_D_INVAL), 288f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#endif 289f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#ifdef CACHEFLUSH_D_WB 290bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CACHEFLUSH_D_WB), 291f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#endif 292f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#ifdef CACHEFLUSH_D_PURGE 293bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CACHEFLUSH_D_PURGE), 294f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#endif 295f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#ifdef CACHEFLUSH_I 296bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CACHEFLUSH_I), 297f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#endif 298594527353359d9a6aad516992e09c393e11f3bd2Dmitry V. Levin XLAT_END 299f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO}; 300f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO 301f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSOint 302f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSOsys_cacheflush(struct tcb *tcp) 303f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO{ 304f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO if (entering(tcp)) { 305f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO /* addr */ 306f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO tprintf("%#lx, ", tcp->u_arg[0]); 307f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO /* len */ 308f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO tprintf("%lu, ", tcp->u_arg[1]); 309f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO /* flags */ 310f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO printflags(cacheflush_flags, tcp->u_arg[2], "CACHEFLUSH_???"); 311f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO } 312f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO return 0; 313f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO} 314f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO#endif /* SH */ 315f8e56504749a4a5a79d40d115ae46718b4c949a4Carmelo AMOROSO 3168d5860c8d807440c28e838fa82f2ad7e83bade17Nate Sammons#ifdef SYS_capget 317c792698a99b640e7d256e8692c992bd967f0c5b2Wichert Akkerman 3180ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/capabilities.h" 319c792698a99b640e7d256e8692c992bd967f0c5b2Wichert Akkerman 3204a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin#ifndef _LINUX_CAPABILITY_VERSION_1 3214a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin# define _LINUX_CAPABILITY_VERSION_1 0x19980330 3224a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin#endif 3234a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin#ifndef _LINUX_CAPABILITY_VERSION_2 3244a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin# define _LINUX_CAPABILITY_VERSION_2 0x20071026 3254a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin#endif 3264a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin#ifndef _LINUX_CAPABILITY_VERSION_3 3274a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin# define _LINUX_CAPABILITY_VERSION_3 0x20080522 3284a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin#endif 3294a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin 3300ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/cap_version.h" 3314a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin 3324a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levinstatic void 3334a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levinprint_cap_header(struct tcb *tcp, unsigned long addr) 3344a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin{ 3354a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin union { cap_user_header_t p; long *a; char *c; } arg; 3364a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin long a[sizeof(*arg.p) / sizeof(long) + 1]; 3374a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin arg.a = a; 3384a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin 3394a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin if (!addr) 3404a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprints("NULL"); 3414a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin else if (!verbose(tcp) || 3424a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin umoven(tcp, addr, sizeof(*arg.p), arg.c) < 0) 3434a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprintf("%#lx", addr); 3444a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin else { 3454a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprints("{"); 3464a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin printxval(cap_version, arg.p->version, 3474a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin "_LINUX_CAPABILITY_VERSION_???"); 3484a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprintf(", %d}", arg.p->pid); 3494a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin } 3504a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin} 3514a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin 3524a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levinstatic void 3534a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levinprint_cap_data(struct tcb *tcp, unsigned long addr) 3544a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin{ 3554a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin union { cap_user_data_t p; long *a; char *c; } arg; 3564a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin long a[sizeof(*arg.p) / sizeof(long) + 1]; 3574a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin arg.a = a; 3584a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin 3594a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin if (!addr) 3604a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprints("NULL"); 3614a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin else if (!verbose(tcp) || 3624a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin (exiting(tcp) && syserror(tcp)) || 3634a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin umoven(tcp, addr, sizeof(*arg.p), arg.c) < 0) 3644a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprintf("%#lx", addr); 3654a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin else { 3664a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprints("{"); 3674a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin printflags(capabilities, arg.p->effective, "CAP_???"); 3684a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprints(", "); 3694a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin printflags(capabilities, arg.p->permitted, "CAP_???"); 3704a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprints(", "); 3714a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin printflags(capabilities, arg.p->inheritable, "CAP_???"); 3724a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin tprints("}"); 3734a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin } 3744a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin} 3754a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin 37676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3771201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_capget(struct tcb *tcp) 37876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 3794a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin if (entering(tcp)) { 3804a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin print_cap_header(tcp, tcp->u_arg[0]); 38160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3824a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin } else { 3834a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin print_cap_data(tcp, tcp->u_arg[1]); 38476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 38576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 38676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 38776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 38876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3891201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_capset(struct tcb *tcp) 39076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 391b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (entering(tcp)) { 3924a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin print_cap_header(tcp, tcp->u_arg[0]); 39360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3944a0ffeaf85f2f042d39ec1925f4aa2e5e4b9164cDmitry V. Levin print_cap_data(tcp, tcp->u_arg[1]); 39576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 39676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 39776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 39876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 39976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#else 40076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 4011201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoint sys_capget(struct tcb *tcp) 40276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 40376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return printargs(tcp); 40476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 40576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 4061201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoint sys_capset(struct tcb *tcp) 40776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 40876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return printargs(tcp); 40976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 41076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 41176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif 41276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 4130ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_root.h" 4140ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_kern.h" 4150ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_vm.h" 4160ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_net.h" 4170ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_net_core.h" 4180ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_net_unix.h" 4190ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_net_ipv4.h" 4200ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_net_ipv4_route.h" 4210ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_net_ipv4_conf.h" 4220ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_net_ipv6.h" 4230ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysctl_net_ipv6_route.h" 42422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 42522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkermanint 4261201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_sysctl(struct tcb *tcp) 42722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman{ 42822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman struct __sysctl_args info; 42922fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman int *name; 430aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath unsigned long size; 431aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath 432b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (umove(tcp, tcp->u_arg[0], &info) < 0) 4332cbe44e441726abf568fbc4ca3cb5ab157ae7684Roland McGrath return printargs(tcp); 4342cbe44e441726abf568fbc4ca3cb5ab157ae7684Roland McGrath 435b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko size = sizeof(int) * (unsigned long) info.nlen; 436b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko name = (size / sizeof(int) != info.nlen) ? NULL : malloc(size); 4372cbe44e441726abf568fbc4ca3cb5ab157ae7684Roland McGrath if (name == NULL || 438aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath umoven(tcp, (unsigned long) info.name, size, (char *) name) < 0) { 439aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath free(name); 440aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (entering(tcp)) 441048cc42f08ac64a04d14e6de17611a5e7ec3b400Denys Vlasenko tprintf("{%p, %d, %p, %p, %p, %lu}", 442aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath info.name, info.nlen, info.oldval, 443048cc42f08ac64a04d14e6de17611a5e7ec3b400Denys Vlasenko info.oldlenp, info.newval, (unsigned long)info.newlen); 4442cbe44e441726abf568fbc4ca3cb5ab157ae7684Roland McGrath return 0; 4452cbe44e441726abf568fbc4ca3cb5ab157ae7684Roland McGrath } 44622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 44722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman if (entering(tcp)) { 448aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath int cnt = 0, max_cnt; 44922fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 45060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{{"); 45122fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 45222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman if (info.nlen == 0) 45322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 45422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_root, name[0], "CTL_???"); 45522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman ++cnt; 45622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 45722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman if (info.nlen == 1) 45822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 45922fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman switch (name[0]) { 46022fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case CTL_KERN: 46160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 46222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_kern, name[1], "KERN_???"); 46322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman ++cnt; 46422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 46522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case CTL_VM: 46660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 46722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_vm, name[1], "VM_???"); 46822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman ++cnt; 46922fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 47022fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case CTL_NET: 47160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 47222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_net, name[1], "NET_???"); 47322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman ++cnt; 47422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 47522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman if (info.nlen == 2) 47622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 47722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman switch (name[1]) { 47822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case NET_CORE: 47960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 48022fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_net_core, name[2], 48122fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman "NET_CORE_???"); 48222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 48322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case NET_UNIX: 48460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 48522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_net_unix, name[2], 48622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman "NET_UNIX_???"); 48722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 48822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case NET_IPV4: 48960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 49022fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_net_ipv4, name[2], 49122fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman "NET_IPV4_???"); 49222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 49322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman if (info.nlen == 3) 49422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 49522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman switch (name[2]) { 49622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case NET_IPV4_ROUTE: 49760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 49822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_net_ipv4_route, 49922fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman name[3], 50022fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman "NET_IPV4_ROUTE_???"); 50122fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 50222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case NET_IPV4_CONF: 50360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 50422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_net_ipv4_conf, 50522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman name[3], 50622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman "NET_IPV4_CONF_???"); 50722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 50822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman default: 50922fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 51022fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman } 51122fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 51222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case NET_IPV6: 51360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 51422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_net_ipv6, name[2], 51522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman "NET_IPV6_???"); 51622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman 51722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman if (info.nlen == 3) 51822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 51922fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman switch (name[2]) { 52022fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman case NET_IPV6_ROUTE: 52160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 52222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printxval(sysctl_net_ipv6_route, 52322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman name[3], 52422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman "NET_IPV6_ROUTE_???"); 52522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 52622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman default: 52722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 52822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman } 52922fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 53022fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman default: 53122fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 53222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman } 53322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman break; 53422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman default: 53522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman goto out; 53622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman } 53722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman out: 5388e4a3e61ef9034308d273fd10cb2cf256c9f068dRoland McGrath max_cnt = info.nlen; 5398e4a3e61ef9034308d273fd10cb2cf256c9f068dRoland McGrath if (abbrev(tcp) && max_cnt > max_strlen) 5408e4a3e61ef9034308d273fd10cb2cf256c9f068dRoland McGrath max_cnt = max_strlen; 541aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath while (cnt < max_cnt) 54222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman tprintf(", %x", name[cnt++]); 543aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (cnt < info.nlen) 54460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", ..."); 54522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman tprintf("}, %d, ", info.nlen); 54622fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman } else { 5478560ef291ca06948e5f49bccf4bf1e714654b718Denys Vlasenko size_t oldlen = 0; 5480cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger if (info.oldval == NULL) { 5490cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger tprints("NULL"); 5500cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger } else if (umove(tcp, (long)info.oldlenp, &oldlen) >= 0 5510cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger && info.nlen >= 2 5520cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger && ((name[0] == CTL_KERN 5530cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger && (name[1] == KERN_OSRELEASE 5540cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger || name[1] == KERN_OSTYPE 5559ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#ifdef KERN_JAVA_INTERPRETER 5560cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger || name[1] == KERN_JAVA_INTERPRETER 5579ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 5589ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#ifdef KERN_JAVA_APPLETVIEWER 5590cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger || name[1] == KERN_JAVA_APPLETVIEWER 5609ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 5610cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger )))) { 56222fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman printpath(tcp, (size_t)info.oldval); 56322fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman } else { 5640cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger tprintf("%p", info.oldval); 56522fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman } 5660cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger tprintf(", %lu, ", (unsigned long)oldlen); 5670cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger if (info.newval == NULL) 5680cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger tprints("NULL"); 5690cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger else if (syserror(tcp)) 5700cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger tprintf("%p", info.newval); 5710cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger else 5720cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger printpath(tcp, (size_t)info.newval); 5730cf04b6595a951df7671eafef5f9e7a114a6c691Mike Frysinger tprintf(", %lu", (unsigned long)info.newlen); 57422fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman } 5752cbe44e441726abf568fbc4ca3cb5ab157ae7684Roland McGrath 5762cbe44e441726abf568fbc4ca3cb5ab157ae7684Roland McGrath free(name); 57722fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman return 0; 57822fe9d2b99a12e1b778ce0481473ed67aa53f628Wichert Akkerman} 579ced50da46b600af578f2c341ba0db31c72880eb2Roland McGrath 5800cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman#ifdef MIPS 5810cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman 582d6b924937038457f83b47b26b9163bdfbdc230f2Wichert Akkerman#ifndef __NEW_UTS_LEN 583d6b924937038457f83b47b26b9163bdfbdc230f2Wichert Akkerman#define __NEW_UTS_LEN 64 584d6b924937038457f83b47b26b9163bdfbdc230f2Wichert Akkerman#endif 585d6b924937038457f83b47b26b9163bdfbdc230f2Wichert Akkerman 5860ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/sysmips_operations.h" 5870cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman 5881201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoint sys_sysmips(struct tcb *tcp) 5890cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman{ 5900cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman if (entering(tcp)) { 5913472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman printxval(sysmips_operations, tcp->u_arg[0], "???"); 5920cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman if (!verbose(tcp)) { 5933472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman tprintf("%ld, %ld, %ld", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]); 594b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko } else if (tcp->u_arg[0] == SETNAME) { 5953472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman char nodename[__NEW_UTS_LEN + 1]; 5963472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman if (umovestr(tcp, tcp->u_arg[1], (__NEW_UTS_LEN + 1), nodename) < 0) 5970cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman tprintf(", %#lx", tcp->u_arg[1]); 5980cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman else 599a17e55ca8f6f3d9897d891215405715b1bee5131Denys Vlasenko tprintf(", \"%.*s\"", (int)(__NEW_UTS_LEN + 1), nodename); 6003472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman } else if (tcp->u_arg[0] == MIPS_ATOMIC_SET) { 6013472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman tprintf(", %#lx, 0x%lx", tcp->u_arg[1], tcp->u_arg[2]); 6023472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman } else if (tcp->u_arg[0] == MIPS_FIXADE) { 6033472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman tprintf(", 0x%lx", tcp->u_arg[1]); 6040cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman } else { 6053472dd562cdd6ce04fa1c26e2ef8bf2d2b29f95eWichert Akkerman tprintf("%ld, %ld, %ld", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]); 6060cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman } 6070cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman } 6080cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman 6090cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman return 0; 6100cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman} 6110cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman 6120cbfb324b54e4c5859c76dd132a7ad942c0f5e77Wichert Akkerman#endif /* MIPS */ 613492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson 614492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#ifdef OR1K 615492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_SWAP 1 616492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_CMPXCHG 2 617492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_XCHG 3 618492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_ADD 4 619492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_DECPOS 5 620492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_AND 6 621492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_OR 7 622492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_UMAX 8 623492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#define OR1K_ATOMIC_UMIN 9 624492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson 6250ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/atomic_ops.h" 626492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson 627492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svenssonint sys_or1k_atomic(struct tcb *tcp) 628492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson{ 629492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson if (entering(tcp)) { 630492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson printxval(atomic_ops, tcp->u_arg[0], "???"); 631492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson switch(tcp->u_arg[0]) { 632492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_SWAP: 633492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson tprintf(", 0x%lx, 0x%lx", tcp->u_arg[1], tcp->u_arg[2]); 634492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson break; 635492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_CMPXCHG: 636492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson tprintf(", 0x%lx, %#lx, %#lx", tcp->u_arg[1], tcp->u_arg[2], 637492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson tcp->u_arg[3]); 638492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson break; 639492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson 640492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_XCHG: 641492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_ADD: 642492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_AND: 643492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_OR: 644492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_UMAX: 645492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_UMIN: 646492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson tprintf(", 0x%lx, %#lx", tcp->u_arg[1], tcp->u_arg[2]); 647492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson break; 648492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson 649492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson case OR1K_ATOMIC_DECPOS: 650492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson tprintf(", 0x%lx", tcp->u_arg[1]); 651492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson break; 652492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson 653492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson default: 654492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson break; 655492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson } 656492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson } 657492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson 658492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson return RVAL_HEX; 659492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson} 660492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson 661492f81f14cc86c13b0f67ac66a3d5ea9f6ccb673Christian Svensson#endif /* OR1K */ 662