Annotation of objc/Test/ostats/ObjcProcess.m, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.0 (the 'License').  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License."
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: #import <objc/Storage.h>
                     26: #import <objc/List.h>
                     27: #import <objc/HashTable.h>
                     28: #import <objc/objc-runtime.h>
                     29: 
                     30: 
                     31: #import <sys/file.h>
                     32: #import <string.h>
                     33: #import <sys/loader.h>
                     34: #import <sys/table.h>
                     35: #import <sys/types.h>
                     36: #import <sys/stat.h>
                     37: #import <ldsyms.h>
                     38: #import <mach.h>
                     39: #import <stdlib.h>
                     40: 
                     41: #import "RegionManager.h"
                     42: #import "ObjcProcess.h"
                     43: #import "ObjcImage.h"
                     44: #import <sys/loader.h>
                     45: 
                     46: struct section *getsectbynamefromheader(struct mach_header *, char *, char *);
                     47: int table(int, int, void *, int, int);
                     48: int open(const char *, int, ...);
                     49: int close(int);
                     50: kern_return_t map_fd(int, vm_offset_t, vm_offset_t *, boolean_t, vm_size_t);
                     51: 
                     52: @implementation ObjcProcess
                     53: 
                     54: 
                     55: + newFromTask:(vm_task_t)task
                     56: {
                     57:        struct mach_headers **machhdrs;
                     58: 
                     59:        self = [super new];
                     60:        regionManager = [RegionManager newTask:task];
                     61:        imageList = [List new];
                     62: 
                     63:        machhdrs = [regionManager getMachHeaders];
                     64:        while (*machhdrs) {
                     65:                id image = [ObjcImage newFromHeader:*machhdrs];
                     66:                [[image regionManager:regionManager] getModules];
                     67:                [imageList addObject:image];
                     68:                machhdrs++;
                     69:        }
                     70:        return self;
                     71: }
                     72: 
                     73: 
                     74: #if 0
                     75: 
                     76: -(List *)getClasses
                     77: {
                     78:        struct objc_symtab *memSymtab;
                     79:        struct objc_module *memModules, *memModule, *endOfModules;
                     80:        struct mach_header *memHeader;
                     81:        int numClass, headerIndex;
                     82:        Class memClass, memMetaClass;
                     83:        List *orphans;
                     84:        int memSize;
                     85:        orphans = [List new];
                     86:        for (headerIndex = 0; headerIndex < machhdrs[headerIndex]; headerIndex++) {
                     87:        
                     88:                memHeader = machhdrs[headerIndex];
                     89: 
                     90:                memModules = [regionManager 
                     91:                                getSectData: SEG_OBJC 
                     92:                                section: SECT_OBJC_MODULES 
                     93:                                size: &memSize 
                     94:                                forHeader: memHeader]; 
                     95: 
                     96:                endOfModules =  (struct objc_module *)((char *)memModules + memSize);                                                                                                                                   
                     97:                for (   memModule = memModules;
                     98:                        memModule < endOfModules; 
                     99:                        memModule =  (struct objc_module *)((STR)memModule + memModule->size)) {
                    100:                        if (memSymtab = WARP(memModule->symtab)) {
                    101:                                for (numClass = 0; numClass < memSymtab->cls_def_cnt; numClass++) {
                    102:                                        if (memClass = WARP(memSymtab->defs[numClass])) {
                    103:                                                [self adopt: orphans with: memClass];
                    104:                                        }
                    105:                                }
                    106:                        }
                    107:                }
                    108:        }
                    109:        return orphans;
                    110: }
                    111: 
                    112: #endif
                    113: 
                    114: 
                    115: @end
                    116: 
                    117: 
                    118: 
                    119: 
                    120: 
                    121: 
                    122: 
                    123: 
                    124: 
                    125: 
                    126: 
                    127: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.