134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/*
234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 2000 PocketPenguins Inc.  Linux for Hitachi SuperH
734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *                    port by Greg Banks <gbanks@pocketpenguins.com>
834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * All rights reserved.
934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
1034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Redistribution and use in source and binary forms, with or without
1134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * modification, are permitted provided that the following conditions
1234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * are met:
1334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
1434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
1534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
1634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
1734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    documentation and/or other materials provided with the distribution.
1834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 3. The name of the author may not be used to endorse or promote products
1934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    derived from this software without specific prior written permission.
2034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
2134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
3034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
32f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown *	$Id$
3334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */
3434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
3534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include "defs.h"
3634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
3734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
3834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <asm/mman.h>
3934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
4034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/mman.h>
4134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
4234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(I386)
4334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <asm/ldt.h>
4434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# ifdef HAVE_STRUCT_USER_DESC
4534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#  define modify_ldt_ldt_s user_desc
4634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# endif
4734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
4834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(SH64)
4934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <asm/page.h>	    /* for PAGE_SHIFT */
5034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
5134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
5234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_LONG_LONG_OFF_T
5334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/*
5434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Ugly hacks for systems that have a long long off_t
5534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */
5634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define sys_mmap64	sys_mmap
5734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
5834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
5934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
6034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_brk(tcp)
6134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
6234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
6334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
6434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", tcp->u_arg[0]);
6534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
6634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
6734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_HEX;
6834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
6934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
7034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
7134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
7234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
73f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(FREEBSD) || defined(SUNOS4)
7434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
7534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_sbrk(tcp)
7634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
7734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
7834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
7934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu", tcp->u_arg[0]);
8034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
8134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_HEX;
8234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
83f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* FREEBSD || SUNOS4 */
8434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
8534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mmap_prot[] = {
8634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ PROT_NONE,	"PROT_NONE",	},
8734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ PROT_READ,	"PROT_READ"	},
8834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ PROT_WRITE,	"PROT_WRITE"	},
8934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ PROT_EXEC,	"PROT_EXEC"	},
9034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PROT_SEM
9134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ PROT_SEM,	"PROT_SEM"	},
9234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
9334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PROT_GROWSDOWN
9434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ PROT_GROWSDOWN,"PROT_GROWSDOWN"},
9534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
9634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PROT_GROWSUP
9734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ PROT_GROWSUP, "PROT_GROWSUP"	},
9834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
99f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef PROT_SAO
100f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ PROT_SAO,	"PROT_SAO"	},
101f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
10234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
10334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
10434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
10534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mmap_flags[] = {
10634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_SHARED,	"MAP_SHARED"	},
10734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_PRIVATE,	"MAP_PRIVATE"	},
10834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_FIXED,	"MAP_FIXED"	},
10934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_ANONYMOUS
11034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_ANONYMOUS,"MAP_ANONYMOUS"	},
11134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
112f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef MAP_32BIT
113f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MAP_32BIT,	"MAP_32BIT"	},
114f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
11534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_RENAME
11634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_RENAME,	"MAP_RENAME"	},
11734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
11834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_NORESERVE
11934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_NORESERVE,"MAP_NORESERVE"	},
12034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
12134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_POPULATE
12234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_POPULATE, "MAP_POPULATE" },
12334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
12434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_NONBLOCK
12534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_NONBLOCK, "MAP_NONBLOCK" },
12634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
12734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	/*
12834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 * XXX - this was introduced in SunOS 4.x to distinguish between
12934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 * the old pre-4.x "mmap()", which:
13034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
13134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *	only let you map devices with an "mmap" routine (e.g.,
13234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *	frame buffers) in;
13334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
13434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *	required you to specify the mapping address;
13534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
13634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *	returned 0 on success and -1 on failure;
13734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
13834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 * memory and which, and the 4.x "mmap()" which:
13934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
14034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *	can map plain files;
14134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
14234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *	can be asked to pick where to map the file;
14334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
14434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *	returns the address where it mapped the file on success
14534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *	and -1 on failure.
14634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
14734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 * It's not actually used in source code that calls "mmap()"; the
14834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 * "mmap()" routine adds it for you.
14934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 *
15034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 * It'd be nice to come up with some way of eliminating it from
15134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 * the flags, e.g. reporting calls *without* it as "old_mmap()"
15234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 * and calls with it as "mmap()".
15334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	 */
15434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef _MAP_NEW
15534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ _MAP_NEW,	"_MAP_NEW"	},
15634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
15734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_GROWSDOWN
15834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_GROWSDOWN,"MAP_GROWSDOWN"	},
15934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
16034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_DENYWRITE
16134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_DENYWRITE,"MAP_DENYWRITE"	},
16234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
16334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_EXECUTABLE
16434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_EXECUTABLE,"MAP_EXECUTABLE"},
16534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
16634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_INHERIT
16734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_INHERIT,"MAP_INHERIT"	},
16834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
16934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_FILE
17034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_FILE,"MAP_FILE"},
17134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
17234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_LOCKED
17334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_LOCKED,"MAP_LOCKED"},
17434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
17534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	/* FreeBSD ones */
17634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_ANON
17734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_ANON,		"MAP_ANON"	},
17834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
17934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_HASSEMAPHORE
18034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_HASSEMAPHORE,	"MAP_HASSEMAPHORE"	},
18134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
18234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_STACK
18334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_STACK,		"MAP_STACK"	},
18434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
18534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_NOSYNC
18634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_NOSYNC,		"MAP_NOSYNC"	},
18734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
18834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_NOCORE
18934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MAP_NOCORE,		"MAP_NOCORE"	},
19034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
191f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TILE
192f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MAP_CACHE_NO_LOCAL, "MAP_CACHE_NO_LOCAL" },
193f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MAP_CACHE_NO_L2, "MAP_CACHE_NO_L2" },
194f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MAP_CACHE_NO_L1, "MAP_CACHE_NO_L1" },
195f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
19634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
19734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
19834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
199f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TILE
20034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic
20134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
202f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownaddtileflags(flags)
203f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownlong flags;
204f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
205f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	long home = flags & _MAP_CACHE_MKHOME(_MAP_CACHE_HOME_MASK);
206f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	flags &= ~_MAP_CACHE_MKHOME(_MAP_CACHE_HOME_MASK);
207f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
208f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (flags & _MAP_CACHE_INCOHERENT) {
209f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		flags &= ~_MAP_CACHE_INCOHERENT;
210f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (home == MAP_CACHE_HOME_NONE) {
211f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("|MAP_CACHE_INCOHERENT");
212f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return flags;
213f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
214f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("|_MAP_CACHE_INCOHERENT");
215f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
216f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
217f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	switch (home) {
218f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case 0:	break;
219f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case MAP_CACHE_HOME_HERE: tprintf("|MAP_CACHE_HOME_HERE"); break;
220f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case MAP_CACHE_HOME_NONE: tprintf("|MAP_CACHE_HOME_NONE"); break;
221f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case MAP_CACHE_HOME_SINGLE: tprintf("|MAP_CACHE_HOME_SINGLE"); break;
222f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case MAP_CACHE_HOME_TASK: tprintf("|MAP_CACHE_HOME_TASK"); break;
223f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	case MAP_CACHE_HOME_HASH: tprintf("|MAP_CACHE_HOME_HASH"); break;
224f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	default:
225f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("|MAP_CACHE_HOME(%d)",
226f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			(home >> _MAP_CACHE_HOME_SHIFT) );
227f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		break;
228f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
229f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
230f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return flags;
231f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
232f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
233f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
234f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if !HAVE_LONG_LONG_OFF_T
235f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
236f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprint_mmap(struct tcb *tcp, long *u_arg, long long offset)
23734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
23834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
23934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* addr */
24034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (!u_arg[0])
24134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("NULL, ");
24234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
24334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx, ", u_arg[0]);
24434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* len */
24534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu, ", u_arg[1]);
24634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* prot */
24734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mmap_prot, u_arg[2], "PROT_???");
24834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
24934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* flags */
25034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_TYPE
25134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(mmap_flags, u_arg[3] & MAP_TYPE, "MAP_???");
252f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TILE
253f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		addflags(mmap_flags, addtileflags(u_arg[3] & ~MAP_TYPE));
254f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
25534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		addflags(mmap_flags, u_arg[3] & ~MAP_TYPE);
256f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
25734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
25834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mmap_flags, u_arg[3], "MAP_???");
25934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
260f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		/* fd */
261f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
262f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, u_arg[4]);
26334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* offset */
264f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", %#llx", offset);
26534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
26634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_HEX;
26734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
26834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
26934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
27034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint sys_old_mmap(tcp)
27134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
27234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
273f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	long u_arg[6];
27434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
27534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if	defined(IA64)
276f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int i, v;
277f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	/*
278f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 *  IA64 processes never call this routine, they only use the
279f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 *  new `sys_mmap' interface.  This code converts the integer
280f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 *  arguments that the IA32 process pushed onto the stack into
281f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 *  longs.
282f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 *
283f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 *  Note that addresses with bit 31 set will be sign extended.
284f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 *  Fortunately, those addresses are not currently being generated
285f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 *  for IA32 processes so it's not a problem.
286f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 */
287f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	for (i = 0; i < 6; i++)
288f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (umove(tcp, tcp->u_arg[0] + (i * sizeof(int)), &v) == -1)
289f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return 0;
290f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
291f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			u_arg[i] = v;
29234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#elif defined(SH) || defined(SH64)
293f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	/* SH has always passed the args in registers */
294f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	int i;
295f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	for (i=0; i<6; i++)
296f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		u_arg[i] = tcp->u_arg[i];
29734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
298f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# if defined(X86_64)
299f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (current_personality == 1) {
300f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int i;
301f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		for (i = 0; i < 6; ++i) {
302f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			unsigned int val;
303f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (umove(tcp, tcp->u_arg[0] + i * 4, &val) == -1)
304f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				return 0;
305f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			u_arg[i] = val;
306f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
307f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
308f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else
309f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown# endif
310f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (umoven(tcp, tcp->u_arg[0], sizeof u_arg, (char *) u_arg) == -1)
311f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return 0;
31234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif	// defined(IA64)
313f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return print_mmap(tcp, u_arg, u_arg[5]);
31434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
31534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
31634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
31734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
31834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_mmap(tcp)
31934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
32034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
321f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	long long offset = tcp->u_arg[5];
322f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
32334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(SH64)
324f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	/*
325f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 * Old mmap differs from new mmap in specifying the
326f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 * offset in units of bytes rather than pages.  We
327f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 * pretend it's in byte units so the user only ever
328f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 * sees bytes in the printout.
329f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	 */
330f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	offset <<= PAGE_SHIFT;
331f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
332f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(LINUX_MIPSN32)
333f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	offset = tcp->ext_arg[5];
334f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
335f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return print_mmap(tcp, tcp->u_arg, offset);
33634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
33734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !HAVE_LONG_LONG_OFF_T */
33834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
33934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
34034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
341f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mmap64(struct tcb *tcp)
34234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
34334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef linux
34434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
34534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long *u_arg = tcp->u_arg;
34634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else /* !ALPHA */
34734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long u_arg[7];
34834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !ALPHA */
34934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else /* !linux */
35034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	long *u_arg = tcp->u_arg;
35134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !linux */
35234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
35334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
35434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef linux
35534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef ALPHA
35634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (umoven(tcp, tcp->u_arg[0], sizeof u_arg,
35734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				(char *) u_arg) == -1)
35834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			return 0;
35934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* ALPHA */
36034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* linux */
36134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
36234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* addr */
36334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, ", u_arg[0]);
36434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* len */
36534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%lu, ", u_arg[1]);
36634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* prot */
36734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mmap_prot, u_arg[2], "PROT_???");
36834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
36934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* flags */
37034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_TYPE
37134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(mmap_flags, u_arg[3] & MAP_TYPE, "MAP_???");
37234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		addflags(mmap_flags, u_arg[3] & ~MAP_TYPE);
37334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
37434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mmap_flags, u_arg[3], "MAP_???");
37534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
37634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* fd */
377f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
378f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[4]);
37934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* offset */
380f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printllval(tcp, ", %#llx", 5);
38134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
38234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_HEX;
38334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
38434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
38534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
38634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
38734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
38834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_munmap(tcp)
38934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
39034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
39134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
39234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu",
39334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tcp->u_arg[0], tcp->u_arg[1]);
39434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
39534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
39634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
39734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
39834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
39934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_mprotect(tcp)
40034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
40134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
40234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
40334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, ",
40434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tcp->u_arg[0], tcp->u_arg[1]);
40534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mmap_prot, tcp->u_arg[2], "PROT_???");
40634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
40734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
40834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
40934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
41034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
41134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
41234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mremap_flags[] = {
41334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MREMAP_MAYMOVE,	"MREMAP_MAYMOVE"	},
414f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef MREMAP_FIXED
415f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MREMAP_FIXED,		"MREMAP_FIXED"		},
416f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
41734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,			NULL			}
41834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
41934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
42034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
421f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_mremap(struct tcb *tcp)
42234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
42334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
42434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, %lu, ", tcp->u_arg[0], tcp->u_arg[1],
42534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tcp->u_arg[2]);
42634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mremap_flags, tcp->u_arg[3], "MREMAP_???");
427f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef MREMAP_FIXED
428f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if ((tcp->u_arg[3] & (MREMAP_MAYMOVE | MREMAP_FIXED)) ==
429f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		    (MREMAP_MAYMOVE | MREMAP_FIXED))
430f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf(", %#lx", tcp->u_arg[4]);
431f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
43234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
43334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return RVAL_HEX;
43434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
43534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
436f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat madvise_cmds[] = {
43734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MADV_NORMAL
43834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MADV_NORMAL,		"MADV_NORMAL" },
43934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
440f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef MADV_RANDOM
44134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MADV_RANDOM,		"MADV_RANDOM" },
44234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
44334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MADV_SEQUENTIAL
44434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MADV_SEQUENTIAL,	"MADV_SEQUENTIAL" },
44534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
44634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MADV_WILLNEED
44734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MADV_WILLNEED,	"MADV_WILLNEED" },
44834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
449f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef MADV_DONTNEED
45034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MADV_DONTNEED,	"MADV_DONTNEED" },
45134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
45234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,			NULL },
45334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
45434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
45534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
45634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
45734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_madvise(tcp)
45834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
45934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
46034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
46134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
462f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(madvise_cmds, tcp->u_arg[2], "MADV_???");
46334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
46434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
46534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
46634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
46734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
46834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mlockall_flags[] = {
46934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MCL_CURRENT
47034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MCL_CURRENT,	"MCL_CURRENT" },
47134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
47234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MCL_FUTURE
47334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MCL_FUTURE,	"MCL_FUTURE" },
47434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
47534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL}
47634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
47734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
47834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
47934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_mlockall(tcp)
48034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
48134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
48234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
48334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mlockall_flags, tcp->u_arg[0], "MCL_???");
48434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
48534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
48634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
48734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
48834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
48934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
49034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
49134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MS_ASYNC
49234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
49334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mctl_sync[] = {
49434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MS_SYNC
49534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MS_SYNC,	"MS_SYNC"	},
49634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
49734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MS_ASYNC,	"MS_ASYNC"	},
49834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MS_INVALIDATE,"MS_INVALIDATE"	},
49934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
50034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
50134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
50234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
50334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_msync(tcp)
50434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
50534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
50634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
50734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* addr */
50834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", tcp->u_arg[0]);
50934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* len */
51034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, ", tcp->u_arg[1]);
51134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* flags */
51234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mctl_sync, tcp->u_arg[2], "MS_???");
51334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
51434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
51534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
51634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
51734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* MS_ASYNC */
51834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
51934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MC_SYNC
52034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
52134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mctl_funcs[] = {
52234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MC_LOCK,	"MC_LOCK"	},
52334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MC_LOCKAS,	"MC_LOCKAS"	},
52434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MC_SYNC,	"MC_SYNC"	},
52534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MC_UNLOCK,	"MC_UNLOCK"	},
52634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MC_UNLOCKAS,	"MC_UNLOCKAS"	},
52734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
52834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
52934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
53034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mctl_lockas[] = {
53134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MCL_CURRENT,	"MCL_CURRENT"	},
53234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MCL_FUTURE,	"MCL_FUTURE"	},
53334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
53434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
53534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
53634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
53734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_mctl(tcp)
53834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
53934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
54034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	int arg, function;
54134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
54234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
54334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* addr */
54434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", tcp->u_arg[0]);
54534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* len */
54634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, ", tcp->u_arg[1]);
54734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* function */
54834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		function = tcp->u_arg[2];
54934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mctl_funcs, function, "MC_???");
55034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		/* arg */
55134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		arg = tcp->u_arg[3];
55234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
55334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		switch (function) {
55434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		case MC_SYNC:
55534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printflags(mctl_sync, arg, "MS_???");
55634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
55734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		case MC_LOCKAS:
55834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printflags(mctl_lockas, arg, "MCL_???");
55934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
56034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		default:
56134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#x", arg);
56234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			break;
56334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
56434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
56534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
56634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
56734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
56834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* MC_SYNC */
56934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
57034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
57134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_mincore(tcp)
57234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
57334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
57434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned long i, len;
57534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	char *vec = NULL;
57634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
57734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
57834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
57934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
58034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		len = tcp->u_arg[1];
58134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp) || tcp->u_arg[2] == 0 ||
58234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			(vec = malloc(len)) == NULL ||
58334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			umoven(tcp, tcp->u_arg[2], len, vec) < 0)
58434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[2]);
58534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else {
58634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("[");
58734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			for (i = 0; i < len; i++) {
58834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				if (abbrev(tcp) && i >= max_strlen) {
58934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project					tprintf("...");
59034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project					break;
59134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				}
59234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf((vec[i] & 1) ? "1" : "0");
59334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
59434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("]");
59534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
59634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (vec)
59734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			free(vec);
59834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
59934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
60034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
60134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
602f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(ALPHA) || defined(FREEBSD) || defined(IA64) || defined(SUNOS4) || defined(SVR4) || defined(SPARC) || defined(SPARC64)
60334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
60434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_getpagesize(tcp)
60534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
60634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
60734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp))
60834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		return RVAL_HEX;
60934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
61034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
611f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* ALPHA || FREEBSD || IA64 || SUNOS4 || SVR4 */
61234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
61334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) && defined(__i386__)
61434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectvoid
615f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprint_ldt_entry(struct modify_ldt_ldt_s *ldt_entry)
61634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
61734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("base_addr:%#08lx, "
61834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		"limit:%d, "
61934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		"seg_32bit:%d, "
62034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		"contents:%d, "
62134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		"read_exec_only:%d, "
62234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		"limit_in_pages:%d, "
62334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		"seg_not_present:%d, "
62434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		"useable:%d}",
625f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		(long) ldt_entry->base_addr,
62634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		ldt_entry->limit,
62734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		ldt_entry->seg_32bit,
62834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		ldt_entry->contents,
62934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		ldt_entry->read_exec_only,
63034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		ldt_entry->limit_in_pages,
63134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		ldt_entry->seg_not_present,
63234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		ldt_entry->useable);
63334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
63434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
63534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
63634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_modify_ldt(tcp)
63734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
63834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
63934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
64034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		struct modify_ldt_ldt_s copy;
64134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%ld", tcp->u_arg[0]);
64234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[1] == 0
64334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				|| tcp->u_arg[2] != sizeof (struct modify_ldt_ldt_s)
64434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				|| umove(tcp, tcp->u_arg[1], &copy) == -1)
64534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %lx", tcp->u_arg[1]);
64634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else {
64734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", {entry_number:%d, ", copy.entry_number);
64834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (!verbose(tcp))
64934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("...}");
65034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else {
65134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				print_ldt_entry(&copy);
65234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
65334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
65434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu", tcp->u_arg[2]);
65534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
65634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
65734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
65834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
65934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
66034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_set_thread_area(tcp)
66134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
66234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
66334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct modify_ldt_ldt_s copy;
66434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
66534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (umove(tcp, tcp->u_arg[0], &copy) != -1) {
66634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (copy.entry_number == -1)
66734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("{entry_number:%d -> ",
66834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project					copy.entry_number);
66934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else
67034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("{entry_number:");
67134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
67234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
67334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (umove(tcp, tcp->u_arg[0], &copy) != -1) {
67434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%d, ", copy.entry_number);
67534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (!verbose(tcp))
67634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("...}");
67734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else {
67834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				print_ldt_entry(&copy);
67934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
68034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		} else {
68134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%lx", tcp->u_arg[0]);
68234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
68334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
68434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
68534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
68634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
68734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
68834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
68934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_get_thread_area(tcp)
69034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
69134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
69234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct modify_ldt_ldt_s copy;
69334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp)) {
69434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (umove(tcp, tcp->u_arg[0], &copy) != -1) {
69534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{entry_number:%d, ", copy.entry_number);
69634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (!verbose(tcp))
69734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("...}");
69834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else {
69934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				print_ldt_entry(&copy);
70034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
70134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		} else {
70234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%lx", tcp->u_arg[0]);
70334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
70434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
70534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
70634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
70734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
70834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX && __i386__ */
70934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
710f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(LINUX) && defined(M68K)
711f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
712f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
713f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_set_thread_area(tcp)
714f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct tcb *tcp;
715f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
716f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp))
717f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%#lx", tcp->u_arg[0]);
718f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
719f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
720f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
721f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
722f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
723f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_get_thread_area(tcp)
724f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct tcb *tcp;
725f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
726f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return RVAL_HEX;
727f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
728f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
729f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
73034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX)
73134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
73234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_remap_file_pages(tcp)
73334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
73434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
73534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
73634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
73734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mmap_prot, tcp->u_arg[2], "PROT_???");
73834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %lu, ", tcp->u_arg[3]);
73934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef MAP_TYPE
74034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(mmap_flags, tcp->u_arg[4] & MAP_TYPE, "MAP_???");
74134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		addflags(mmap_flags, tcp->u_arg[4] & ~MAP_TYPE);
74234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
74334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mmap_flags, tcp->u_arg[4], "MAP_???");
74434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
74534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
74634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
74734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
74834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
74934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
75034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MPOL_DEFAULT    0
75134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MPOL_PREFERRED  1
75234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MPOL_BIND       2
75334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MPOL_INTERLEAVE 3
75434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
75534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MPOL_F_NODE     (1<<0)
75634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MPOL_F_ADDR     (1<<1)
75734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
75834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MPOL_MF_STRICT  (1<<0)
759f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#define MPOL_MF_MOVE	(1<<1)
760f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#define MPOL_MF_MOVE_ALL (1<<2)
76134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
76234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
76334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat policies[] = {
76434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MPOL_DEFAULT,		"MPOL_DEFAULT"		},
76534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MPOL_PREFERRED,	"MPOL_PREFERRED"	},
76634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MPOL_BIND,		"MPOL_BIND"		},
76734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MPOL_INTERLEAVE,	"MPOL_INTERLEAVE"	},
76834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,			NULL			}
76934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
77034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
77134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mbindflags[] = {
77234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MPOL_MF_STRICT,	"MPOL_MF_STRICT"	},
773f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MPOL_MF_MOVE,		"MPOL_MF_MOVE"		},
774f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MPOL_MF_MOVE_ALL,	"MPOL_MF_MOVE_ALL"	},
77534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,			NULL			}
77634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
77734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
77834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat mempolicyflags[] = {
77934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MPOL_F_NODE,		"MPOL_F_NODE"		},
78034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ MPOL_F_ADDR,		"MPOL_F_ADDR"		},
78134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,			NULL			}
78234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
78334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
784f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat move_pages_flags[] = {
785f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MPOL_MF_MOVE,		"MPOL_MF_MOVE"		},
786f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ MPOL_MF_MOVE_ALL,	"MPOL_MF_MOVE_ALL"	},
787f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,			NULL			}
788f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
789f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
79034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
79134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
79234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectget_nodes(tcp, ptr, maxnodes, err)
79334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
79434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectunsigned long ptr;
79534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectunsigned long maxnodes;
79634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint err;
79734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
79834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	unsigned long nlongs, size, end;
79934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
80034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	nlongs = (maxnodes + 8 * sizeof(long) - 1) / (8 * sizeof(long));
80134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	size = nlongs * sizeof(long);
80234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	end = ptr + size;
80334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (nlongs == 0 || ((err || verbose(tcp)) && (size * 8 == maxnodes)
80434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			    && (end > ptr))) {
80534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		unsigned long n, cur, abbrev_end;
80634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		int failed = 0;
80734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
80834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (abbrev(tcp)) {
80934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			abbrev_end = ptr + max_strlen * sizeof(long);
81034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (abbrev_end < ptr)
81134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				abbrev_end = end;
81234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		} else {
81334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			abbrev_end = end;
81434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
81534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", {");
81634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		for (cur = ptr; cur < end; cur += sizeof(long)) {
81734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (cur > ptr)
81834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", ");
81934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (cur >= abbrev_end) {
82034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("...");
82134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				break;
82234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
82334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (umoven(tcp, cur, sizeof(n), (char *) &n) < 0) {
82434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("?");
82534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				failed = 1;
82634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				break;
82734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
82834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#0*lx", (int) sizeof(long) * 2 + 2, n);
82934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
83034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
83134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (failed)
83234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(" %#lx", ptr);
83334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else
83434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lx", ptr);
83534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf(", %lu", maxnodes);
83634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
83734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
83834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
83934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_mbind(tcp)
84034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
84134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
84234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
843f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%#lx, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
84434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(policies, tcp->u_arg[2], "MPOL_???");
84534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		get_nodes(tcp, tcp->u_arg[3], tcp->u_arg[4], 0);
84634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
84734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mbindflags, tcp->u_arg[5], "MPOL_???");
84834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
84934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
85034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
85134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
85234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
85334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_set_mempolicy(tcp)
85434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
85534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
85634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
85734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(policies, tcp->u_arg[0], "MPOL_???");
85834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		get_nodes(tcp, tcp->u_arg[1], tcp->u_arg[2], 0);
85934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
86034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
86134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
86234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
86334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
86434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_get_mempolicy(tcp)
86534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
86634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
86734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp)) {
86834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		int pol;
86934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == 0)
87034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("NULL");
87134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (syserror(tcp) || umove(tcp, tcp->u_arg[0], &pol) < 0)
87234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[0]);
87334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
87434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printxval(policies, pol, "MPOL_???");
87534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		get_nodes(tcp, tcp->u_arg[1], tcp->u_arg[2], syserror(tcp));
87634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", %#lx, ", tcp->u_arg[3]);
87734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(mempolicyflags, tcp->u_arg[4], "MPOL_???");
87834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
87934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
88034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
881f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
882f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
883f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_move_pages(tcp)
884f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct tcb *tcp;
885f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
886f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
887f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long npages = tcp->u_arg[1];
888f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%ld, %lu, ", tcp->u_arg[0], npages);
889f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[2] == 0)
890f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("NULL, ");
891f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else {
892f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			int i;
893f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			long puser = tcp->u_arg[2];
894f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{");
895f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			for (i = 0; i < npages; ++i) {
896f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				void *p;
897f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (i > 0)
898f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf(", ");
899f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (umove(tcp, puser, &p) < 0) {
900f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf("???");
901f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					break;
902f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				}
903f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("%p", p);
904f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				puser += sizeof (void *);
905f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
906f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("}, ");
907f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
908f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[3] == 0)
909f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("NULL, ");
910f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else {
911f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			int i;
912f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			long nodeuser = tcp->u_arg[3];
913f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{");
914f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			for (i = 0; i < npages; ++i) {
915f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				int node;
916f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (i > 0)
917f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf(", ");
918f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (umove(tcp, nodeuser, &node) < 0) {
919f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf("???");
920f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					break;
921f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				}
922f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("%#x", node);
923f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				nodeuser += sizeof (int);
924f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
925f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("}, ");
926f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
927f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
928f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (exiting(tcp)) {
929f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long npages = tcp->u_arg[1];
930f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->u_arg[4] == 0)
931f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("NULL, ");
932f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else {
933f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			int i;
934f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			long statususer = tcp->u_arg[4];
935f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{");
936f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			for (i = 0; i < npages; ++i) {
937f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				int status;
938f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (i > 0)
939f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf(", ");
940f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (umove(tcp, statususer, &status) < 0) {
941f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf("???");
942f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					break;
943f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				}
944f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("%#x", status);
945f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				statususer += sizeof (int);
946f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
947f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("}, ");
948f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
949f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(move_pages_flags, tcp->u_arg[5], "MPOL_???");
950f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
951f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
952f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
953f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
954f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
955f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(LINUX) && defined(POWERPC)
956f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
957f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_subpage_prot(tcp)
958f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct tcb *tcp;
959f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
960f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
961f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned long cur, end, abbrev_end, entries;
962f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned int entry;
963f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
964f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%#lx, %#lx, ", tcp->u_arg[0], tcp->u_arg[1]);
965f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		entries = tcp->u_arg[1] >> 16;
966f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!entries || !tcp->u_arg[2]) {
967f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{}");
968f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return 0;
969f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
970f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		cur = tcp->u_arg[2];
971f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		end = cur + (sizeof(int) * entries);
972f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!verbose(tcp) || end < tcp->u_arg[2]) {
973f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[2]);
974f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return 0;
975f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
976f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (abbrev(tcp)) {
977f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			abbrev_end = cur + (sizeof(int) * max_strlen);
978f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (abbrev_end > end)
979f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				abbrev_end = end;
980f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
981f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
982f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			abbrev_end = end;
983f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{");
984f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		for (; cur < end; cur += sizeof(int)) {
985f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (cur > tcp->u_arg[2])
986f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf(", ");
987f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (cur >= abbrev_end) {
988f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("...");
989f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				break;
990f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
991f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if (umove(tcp, cur, &entry) < 0) {
992f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("??? [%#lx]", cur);
993f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				break;
994f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
995f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			else
996f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("%#08x", entry);
997f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
998f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("}");
999f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1000f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1001f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
1002f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
100334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
1004