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], ©) == -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(©); 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], ©) != -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], ©) != -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(©); 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], ©) != -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(©); 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