1e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <stdio.h> 2e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <stdlib.h> 3e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <math.h> 4e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <string.h> 5e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <errno.h> 6e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <unistd.h> 7e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <fcntl.h> 8e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 9e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <ctype.h> 10e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <stddef.h> 11e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 12e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projecttypedef struct mapinfo mapinfo; 13e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 14e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstruct mapinfo { 15e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mapinfo *next; 16e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned start; 17e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned end; 18e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned size; 19e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned rss; 20e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned pss; 21e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned shared_clean; 22e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned shared_dirty; 23e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned private_clean; 24e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned private_dirty; 25e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project char name[1]; 26e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project}; 27e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 28e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project// 6f000000-6f01e000 rwxp 00000000 00:0c 16389419 /android/lib/libcomposer.so 29e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project// 012345678901234567890123456789012345678901234567890123456789 30e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project// 0 1 2 3 4 5 31e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 32e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectmapinfo *read_mapinfo(FILE *fp) 33e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 34e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project char line[1024]; 35e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mapinfo *mi; 36e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int len; 37e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int skip; 38e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 39e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectagain: 40e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project skip = 0; 41e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 42e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fgets(line, 1024, fp) == 0) return 0; 43e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 44e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project len = strlen(line); 45e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(len < 1) return 0; 46e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project line[--len] = 0; 47e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 48e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi = calloc(1, sizeof(mapinfo) + len + 16); 49e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(mi == 0) return 0; 50e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 51e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->start = strtoul(line, 0, 16); 52e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->end = strtoul(line + 9, 0, 16); 53e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 54e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(len < 50) { 55e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if((mi->start >= 0x10000000) && (mi->start < 0x40000000)) { 56e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project strcpy(mi->name, "[stack]"); 57e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } else if(mi->start > 0x50000000) { 58e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project strcpy(mi->name, "[lib_bss]"); 59e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } else { 60e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project strcpy(mi->name, "[anon]"); 61e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 62e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } else { 63e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project strcpy(mi->name, line + 49); 64e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 65e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 66e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fgets(line, 1024, fp) == 0) goto oops; 67e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(sscanf(line, "Size: %d kB", &mi->size) != 1) goto oops; 68e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fgets(line, 1024, fp) == 0) goto oops; 69e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(sscanf(line, "Rss: %d kB", &mi->rss) != 1) goto oops; 70e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fgets(line, 1024, fp) == 0) goto oops; 71e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(sscanf(line, "Pss: %d kB", &mi->pss) == 1) 72e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fgets(line, 1024, fp) == 0) goto oops; 73e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(sscanf(line, "Shared_Clean: %d kB", &mi->shared_clean) != 1) goto oops; 74e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fgets(line, 1024, fp) == 0) goto oops; 75e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(sscanf(line, "Shared_Dirty: %d kB", &mi->shared_dirty) != 1) goto oops; 76e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fgets(line, 1024, fp) == 0) goto oops; 77e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(sscanf(line, "Private_Clean: %d kB", &mi->private_clean) != 1) goto oops; 78e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fgets(line, 1024, fp) == 0) goto oops; 79e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(sscanf(line, "Private_Dirty: %d kB", &mi->private_dirty) != 1) goto oops; 8089f9b9118a393ca5ca16467ec9e5e3e4a84690b5San Mehat 8189f9b9118a393ca5ca16467ec9e5e3e4a84690b5San Mehat if(fgets(line, 1024, fp) == 0) goto oops; // Referenced 8289f9b9118a393ca5ca16467ec9e5e3e4a84690b5San Mehat if(fgets(line, 1024, fp) == 0) goto oops; // Swap 8389f9b9118a393ca5ca16467ec9e5e3e4a84690b5San Mehat if(fgets(line, 1024, fp) == 0) goto oops; // KernelPageSize 8489f9b9118a393ca5ca16467ec9e5e3e4a84690b5San Mehat if(fgets(line, 1024, fp) == 0) goto oops; // MMUPageSize 85e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 86e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(skip) { 87e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project free(mi); 88e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project goto again; 89e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 90e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 91e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return mi; 92e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectoops: 93e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr, "WARNING: Format of /proc/<pid>/smaps has changed!\n"); 94e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project free(mi); 95e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return 0; 96e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 97e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 98e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 99e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectmapinfo *load_maps(int pid, int verbose) 100e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 101e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project char tmp[128]; 102e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project FILE *fp; 103e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mapinfo *milist = 0; 104e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mapinfo *mi; 105e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 106e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project sprintf(tmp, "/proc/%d/smaps", pid); 107e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fp = fopen(tmp, "r"); 108e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(fp == 0) return 0; 109e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 110e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project while((mi = read_mapinfo(fp)) != 0) { 111e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project /* if not verbose, coalesce mappings from the same entity */ 112e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(!verbose && milist) { 113e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if((!strcmp(mi->name, milist->name) && (mi->name[0] != '[')) 114e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project || !strcmp(mi->name,"[lib_bss]")) { 115e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist->size += mi->size; 116e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist->rss += mi->rss; 117e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist->pss += mi->pss; 118e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist->shared_clean += mi->shared_clean; 119e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist->shared_dirty += mi->shared_dirty; 120e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist->private_clean += mi->private_clean; 121e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist->private_dirty += mi->private_dirty; 122e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist->end = mi->end; 123e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project free(mi); 124e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project continue; 125e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 126e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 127e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 128e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->next = milist; 129e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist = mi; 130e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 131e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fclose(fp); 132e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 133e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return milist; 134e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 135e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 136e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic int verbose = 0; 137e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic int terse = 0; 138e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic int addresses = 0; 139e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 140e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectint show_map(int pid) 141e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 142e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mapinfo *milist; 143e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mapinfo *mi; 144e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned shared_dirty = 0; 145e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned shared_clean = 0; 146e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned private_dirty = 0; 147e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned private_clean = 0; 148e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned rss = 0; 149e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned pss = 0; 150e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned size = 0; 151e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 152e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project milist = load_maps(pid, verbose); 153e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(milist == 0) { 154e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr,"cannot get /proc/smaps for pid %d\n", pid); 155e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return 1; 156e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 157e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 158e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(addresses) { 159e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("start end shared private object\n"); 160e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("-------- -------- -------- -------- ------------------------------\n"); 161e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } else { 162e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("virtual shared shared private private\n"); 163e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("size RSS PSS clean dirty clean dirty object\n"); 164e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("-------- -------- -------- -------- -------- -------- -------- ------------------------------\n"); 165e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 166e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for(mi = milist; mi; mi = mi->next){ 167e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project shared_clean += mi->shared_clean; 168e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project shared_dirty += mi->shared_dirty; 169e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project private_clean += mi->private_clean; 170e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project private_dirty += mi->private_dirty; 171e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project rss += mi->rss; 172e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project pss += mi->pss; 173e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project size += mi->size; 174e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 175e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(terse && !mi->private_dirty) continue; 176e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 177e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(addresses) { 178e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("%08x %08x %8d %8d %s\n", mi->start, mi->end, 179e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->shared_clean + mi->shared_dirty, 180e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->private_clean + mi->private_dirty, 181e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->name); 182e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } else { 183e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("%8d %8d %8d %8d %8d %8d %8d %s\n", mi->size, 184e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->rss, 185e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->pss, 186e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->shared_clean, mi->shared_dirty, 187e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->private_clean, mi->private_dirty, 188e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project mi->name); 189e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 190e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 191e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(addresses) { 192e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("-------- -------- -------- -------- ------------------------------\n"); 193e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf(" %8d %8d TOTAL\n", 194e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project shared_dirty + shared_clean, 195e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project private_dirty + private_clean); 196e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } else { 197e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("-------- -------- -------- -------- -------- -------- -------- ------------------------------\n"); 198e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project printf("%8d %8d %8d %8d %8d %8d %8d TOTAL\n", size, 199e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project rss, pss, 200e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project shared_clean, shared_dirty, 201e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project private_clean, private_dirty); 202e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 203e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return 0; 204e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 205e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 206e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectint main(int argc, char *argv[]) 207e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 208e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int usage = 1; 209e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 210e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for(argc--, argv++; argc > 0; argc--, argv++) { 211e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(!strcmp(argv[0],"-v")) { 212e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project verbose = 1; 213e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project continue; 214e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 215e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(!strcmp(argv[0],"-t")) { 216e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project terse = 1; 217e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project continue; 218e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 219e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(!strcmp(argv[0],"-a")) { 220e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project addresses = 1; 221e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project continue; 222e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 223e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project show_map(atoi(argv[0])); 224e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project usage = 0; 225e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 226e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 227e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(usage) { 228e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr, 229e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project "showmap [-t] [-v] [-c] <pid>\n" 230e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project " -t = terse (show only items with private pages)\n" 231e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project " -v = verbose (don't coalesce adjacant maps)\n" 232e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project " -a = addresses (show virtual memory map)\n" 233e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project ); 234e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 235e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 236e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return 0; 237e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 238