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