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 * All rights reserved. 734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Redistribution and use in source and binary forms, with or without 934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * modification, are permitted provided that the following conditions 1034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * are met: 1134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 1234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * notice, this list of conditions and the following disclaimer. 1334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 1434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 1534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * documentation and/or other materials provided with the distribution. 1634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 3. The name of the author may not be used to endorse or promote products 1734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * derived from this software without specific prior written permission. 1834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 30f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * $Id$ 3134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */ 3234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include "defs.h" 3334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 3434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined(LINUX) 3534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 3634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <fcntl.h> 3734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/stat.h> 3834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/time.h> 3934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/wait.h> 4034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/resource.h> 4134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/utsname.h> 4234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_ANDROID_OS 4334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/user.h> 4434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 4534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/syscall.h> 4634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <signal.h> 4734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 4834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/* Bits of module.flags. */ 4934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 5034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MOD_UNINITIALIZED 0 5134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MOD_RUNNING 1 5234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MOD_DELETED 2 5334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MOD_AUTOCLEAN 4 5434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MOD_VISITED 8 5534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MOD_USED_ONCE 16 5634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MOD_JUST_FREED 32 5734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define MOD_INITIALIZING 64 5834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 5934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/* Values for query_module's which. */ 6034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 6134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define QM_MODULES 1 6234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define QM_DEPS 2 6334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define QM_REFS 3 6434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define QM_SYMBOLS 4 6534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#define QM_INFO 5 6634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 6734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct module_symbol 6834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 6934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project unsigned long value; 7034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project const char *name; 7134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 7234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 7334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct module_info 7434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 7534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project unsigned long addr; 7634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project unsigned long size; 7734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project unsigned long flags; 7834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project long usecount; 7934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 8034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 8134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat which[] = { 8234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, "0" }, 8334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { QM_MODULES, "QM_MODULES" }, 8434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { QM_DEPS, "QM_DEPS" }, 8534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { QM_REFS, "QM_REFS" }, 8634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { QM_SYMBOLS, "QM_SYMBOLS" }, 8734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { QM_INFO, "QM_INFO" }, 8834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, NULL }, 8934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 9034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 9134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat modflags[] = { 9234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { MOD_UNINITIALIZED, "MOD_UNINITIALIZED" }, 9334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { MOD_RUNNING, "MOD_RUNNING" }, 9434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { MOD_DELETED, "MOD_DELETED" }, 9534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { MOD_AUTOCLEAN, "MOD_AUTOCLEAN" }, 9634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { MOD_VISITED, "MOD_VISITED" }, 9734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { MOD_USED_ONCE, "MOD_USED_ONCE" }, 9834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { MOD_JUST_FREED, "MOD_JUST_FREED" }, 9934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, NULL }, 10034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 10134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 10234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint 103f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_query_module(struct tcb *tcp) 10434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 105f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (entering(tcp)) { 10634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printstr(tcp, tcp->u_arg[0], -1); 10734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", "); 10834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printxval(which, tcp->u_arg[1], "QM_???"); 10934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", "); 110f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } else { 111f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown size_t ret; 112f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown 113f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (!verbose(tcp) || syserror(tcp) || 114f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown umove(tcp, tcp->u_arg[4], &ret) < 0) { 115f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("%#lx, %lu, %#lx", tcp->u_arg[2], 116f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tcp->u_arg[3], tcp->u_arg[4]); 11734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else if (tcp->u_arg[1]==QM_INFO) { 11834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project struct module_info mi; 119f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (umove(tcp, tcp->u_arg[2], &mi) < 0) { 120f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("%#lx, ", tcp->u_arg[2]); 121f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } else { 122f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("{address=%#lx, size=%lu, flags=", 123f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown mi.addr, mi.size); 124f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown printflags(modflags, mi.flags, "MOD_???"); 125f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf(", usecount=%lu}, ", mi.usecount); 126f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } 127f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("%Zu", ret); 12834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else if ((tcp->u_arg[1]==QM_MODULES) || 129f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown (tcp->u_arg[1]==QM_DEPS) || 130f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown (tcp->u_arg[1]==QM_REFS)) { 13134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("{"); 13234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (!abbrev(tcp)) { 133f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown char* data = malloc(tcp->u_arg[3]); 13434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project char* mod = data; 13534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project size_t idx; 13634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 137f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (!data) { 13834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project fprintf(stderr, "out of memory\n"); 13934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(" /* %Zu entries */ ", ret); 14034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else { 141f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (umoven(tcp, tcp->u_arg[2], 142f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tcp->u_arg[3], data) < 0) { 143f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf(" /* %Zu entries */ ", ret); 144f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } else { 145f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown for (idx=0; idx<ret; idx++) { 146f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("%s%s", 147f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown (idx ? ", " : ""), 148f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown mod); 149f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown mod += strlen(mod)+1; 150f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } 15134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 15234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project free(data); 15334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 15434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else 15534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(" /* %Zu entries */ ", ret); 15634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("}, %Zu", ret); 15734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else if (tcp->u_arg[1]==QM_SYMBOLS) { 15834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("{"); 15934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (!abbrev(tcp)) { 160f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown char* data = malloc(tcp->u_arg[3]); 16134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project struct module_symbol* sym = (struct module_symbol*)data; 16234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project size_t idx; 16334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 164f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (!data) { 16534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project fprintf(stderr, "out of memory\n"); 16634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(" /* %Zu entries */ ", ret); 16734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else { 168f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (umoven(tcp, tcp->u_arg[2], 169f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tcp->u_arg[3], data) < 0) { 170f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf(" /* %Zu entries */ ", ret); 171f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } else { 172f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown for (idx=0; idx<ret; idx++) { 173f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("%s{name=%s, value=%lu}", 174f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown (idx ? " " : ""), 175f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown data+(long)sym->name, 176f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown sym->value); 177f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown sym++; 178f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } 17934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 18034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project free(data); 18134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 18234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else 18334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(" /* %Zu entries */ ", ret); 18434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("}, %Zd", ret); 18534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else { 18634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printstr(tcp, tcp->u_arg[2], tcp->u_arg[3]); 18734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", %#lx", tcp->u_arg[4]); 18834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 18934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 19034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 0; 19134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} 19234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 19334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint 19434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_create_module(tcp) 19534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp; 19634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 19734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (entering(tcp)) { 19834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printpath(tcp, tcp->u_arg[0]); 19934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", %lu", tcp->u_arg[1]); 20034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 20134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return RVAL_HEX; 20234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} 20334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 20434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint 20534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_init_module(tcp) 20634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp; 20734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 20834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (entering(tcp)) { 209f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("%#lx, ", tcp->u_arg[0]); 210f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("%lu, ", tcp->u_arg[1]); 211f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown printstr(tcp, tcp->u_arg[2], -1); 21234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 21334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 0; 21434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} 21534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */ 216