Annotation of objc/Test/ostats/ObjcProcess.m, revision 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.