Annotation of XNU/iokit/Families/IONDRVSupport/IOPEFInternals.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (c) 1997 Apple Computer, Inc.
                     24:  *
                     25:  *
                     26:  * HISTORY
                     27:  *
                     28:  * sdouglas  22 Oct 97 - first checked in.
                     29:  * sdouglas  21 July 98 - start IOKit
                     30:  */
                     31: 
                     32: 
                     33: /*
                     34:     File:       zPEF.h
                     35: 
                     36:     Contains:   PEF format declarations.
                     37: 
                     38:     Version:    Maxwell
                     39: 
                     40:     Copyright:  � 1992-1996 by Apple Computer, Inc., all rights reserved.
                     41: 
                     42:     File Ownership:
                     43: 
                     44:         DRI:                Alan Lillich
                     45: 
                     46:         Other Contact:      <<unknown>>
                     47: 
                     48:         Technology:         Core Runtime
                     49: 
                     50:     Writers:
                     51: 
                     52:         (AWL)   Alan Lillich
                     53:         (ELE)   Erik Eidt
                     54: 
                     55:      Change History (most recent first):
                     56: 
                     57:          <7>     2/28/96    AWL     Adapt for new container handler model.
                     58:          <6>     4/12/95    AWL     Fix bit field problem.
                     59:          <5>     8/29/94    AWL     Remove "never" share mode.
                     60:          <4>     8/23/94    AWL     Update section sharing constants.
                     61:          <3>     4/28/94    AWL     Simplify cross address space use for booting.
                     62:          <2>     4/11/94    AWL     Use 68K alignment for the export symbol structure.
                     63:          <1>     2/15/94    AWL     Initial checkin for kernel based CFM.
                     64: 
                     65:          -------------------------------------------------------------------------------------
                     66: 
                     67:             <7>   8/26/93    AWL        Move CFTypes.h and CFLoader.h up with other Apple private headers.
                     68:             <5>     7/8/93   AWL        (&ELE) Fixed version field names in import file IDs
                     69:             <4>     6/9/93   JRG        ELE & AWL Changes:
                     70:             <4>  06/08/93    AWL        (&ELE) Added more standard section types and packed data opcodes.
                     71:             <3>   9/23/92    ELE        added precomputed hash table for improved runtime performance.
                     72: 
                     73:      Version 1.3 Erik Eidt 9/23/92  updated for new hash table capabilities
                     74:      Version 1.2 Erik Eidt 7/8/92   updated for new relocations and other loader section size optimizations
                     75:      Version 1.1 Cheryl Lins 5/27/92 updated for PEF 1.2 definition
                     76:      Version 1.0 Cheryl Lins 4/7/92 initial version
                     77: */
                     78: 
                     79: 
                     80: #ifndef __IOPEFINTERNALS__
                     81: #define __IOPEFINTERNALS__ 1
                     82: 
                     83: #include "IOPEFLoader.h"
                     84: 
                     85: 
                     86: typedef signed int      PEF_SBits32;    // ! Can't use SInt32, it is "signed long".
                     87: typedef unsigned int    PEF_UBits32;    // ! Can't use UInt32, it is "unsigned long".
                     88: 
                     89: 
                     90: #pragma options align=mac68k
                     91: 
                     92: /*========== File Header ==========*/
                     93: 
                     94: typedef struct {
                     95:      UInt16 magic1;                 /* magic flag describing execution machine and environment */
                     96:      UInt16 magic2;                 /* magic flag describing execution machine and environment */
                     97:      OSType  fileTypeID;            /* OSType identifier = 'pef' */
                     98:      OSType  architectureID;        /* OSType identifier = 'pwpc' */
                     99:      UInt32  versionNumber;     /* version number of this file format */
                    100:      UInt32  dateTimeStamp;     /* Macintosh date/time stamp */
                    101:      UInt32  oldDefVersion;     /* old definition version number */
                    102:      UInt32  oldImpVersion;     /* old implementation version number */
                    103:      UInt32  currentVersion;        /* current version number */
                    104:      SInt16  numberSections;        /* number of sections */
                    105:      SInt16  loadableSections;  /* number of sections that are loadable for execution,
                    106:                                                     also the section # of first non-loadable section */
                    107:      BytePtr    memoryAddress;      /* the location this container was last loaded */
                    108: } FileHeader, *FileHeaderPtr;
                    109: 
                    110: #define kPEFVersion 1               /* current version number */
                    111: #define kPEFMagic1  0x4A6F          /* value of magic1 for PEF */
                    112: #define kPEFMagic2  0x7921          /* value of magic2 for PEF */
                    113: #define kPEFTypeID  0x70656666      /* value of fileTypeID for 'peff' */
                    114: #define kPowerPCID  0x70777063      /* value of architecture ID 'pwpc' */
                    115: 
                    116: /*========== Section Header ==========*/
                    117: 
                    118: typedef struct {
                    119:      ByteCount        sectionName;  /* offset into global string table for section name */
                    120:      BytePtr          sectionAddress; /* preferred base address for the section */
                    121:      ByteCount        execSize;         /* section size in bytes during execution in memory including zero initialization */
                    122:      ByteCount        initSize;         /* section size in bytes during execution in memory before zero initialization */
                    123:      ByteCount        rawSize;          /* section size in bytes in container before loading */
                    124:      ByteCount        containerOffset;/* container offest to section's raw data */
                    125:      UInt8  regionKind;     /* section/region classification */
                    126:      UInt8   shareKind;     /* sharing classification */
                    127:      UInt8    alignment;        /* execution alignment requirement (0=byte,1=half,2=word,3=doubleword,4=quadword..) */
                    128:      UInt8    reservedA;
                    129: } SectionHeader, *SectionHeaderPtr;
                    130: 
                    131: /* TCFLSectionKind */
                    132: #define kPEFCodeSection 0
                    133: #define kPEFDataSection 1
                    134: #define kPEFPIDataSection 2
                    135: #define kPEFConstantSection 3
                    136: #define kPEFLoaderSection 4
                    137: #define kPEFDebugSection 5
                    138: #define kPEFExecDataSection 6
                    139: #define kPEFExceptionSection 7
                    140: #define kPEFTracebackSection 8
                    141: 
                    142: /* TCFLShareKind */
                    143: #define kPEFContextShare 1
                    144: #define kPEFGlobalShare 4
                    145: #define kPEFProtectedShare 5
                    146: 
                    147: /* Defines for PIDataSections */
                    148: #define kPEFZero 0
                    149: #define kPEFBlock 1
                    150: #define kPEFRepeat 2
                    151: #define kPEFRepeatBlock 3
                    152: #define kPEFRepeatZero  4
                    153: #define kPEFNoOpcode 0x0fff
                    154: #define kPEFOpcodeShift 5
                    155: #define kPEFFirstOperandMask 31
                    156: 
                    157: 
                    158: /*========== Loader Header ==========*/
                    159: 
                    160: typedef struct {
                    161:      SInt32      entryPointSection;      /* section number containing entry point descriptor */
                    162:      ByteCount   entryPointOffset;       /* offset to entry point descriptor within section */
                    163: 
                    164:      SInt32      initPointSection;       /* section number containing entry point descriptor */
                    165:      ByteCount   initPointOffset;        /* offset to entry point descriptor within section */
                    166: 
                    167:      SInt32      termPointSection;       /* section number containing entry point descriptor */
                    168:      ByteCount   termPointOffset;        /* offset to entry point descriptor within section */
                    169: 
                    170:      ItemCount       numImportFiles;             /* number of import file id entries */
                    171:      ItemCount       numImportSyms;          /* number of import symbol table entries */
                    172:      ItemCount       numSections;                /* number of sections with load-time relocations */
                    173:      ByteCount   relocationsOffset;      /* offset to relocation descriptions table */
                    174: 
                    175:      ByteCount   stringsOffset;          /* offset to loader string table */
                    176: 
                    177:      ByteCount   hashSlotTable;          /* offset to hash slot table */
                    178:      ItemCount       hashSlotTabSize;        /* number of hash slot entries */
                    179:      ItemCount       numExportSyms;          /* number of export symbol table entries */
                    180: } LoaderHeader, *LoaderHeaderPtr;
                    181: 
                    182: /*========== Loader Section Header ==========*/
                    183: 
                    184: typedef struct {
                    185:      SInt16  sectionNumber;          /* reference to primary section number */
                    186:      SInt16  reservedA;                  /* if TSectNum were 16 bits, which it isn't */
                    187:      ItemCount       numRelocations;             /* number of loader relocations for this section */
                    188:      ByteCount   relocationsOffset;      /* offset to relocation descriptions for this section */
                    189: } LoaderRelExpHeader, *LoaderRelExpHeaderPtr;
                    190: 
                    191: /*========== Loader Import File ID's Entry ==========*/
                    192: 
                    193: typedef struct {
                    194:      ByteCount    fileNameOffset;         /* offset into loader string table for file name */
                    195:      UInt32       oldImpVersion;              /* oldest compatible implementation library */
                    196:      UInt32       linkedVersion;              /* current version at link time */
                    197:      ItemCount            numImports;                 /* number of imports from this file */
                    198:      ItemCount            impFirst;                   /* number of the first imports from this file (relative to all imports) */
                    199:      UInt8    options;                /* call this libraries initialization routine before mine */
                    200:      UInt8    reservedA;
                    201:      UInt16   reservedB;
                    202: } LoaderImportFileID, *LoaderImportFileIDPtr;
                    203: 
                    204: #define kPEFInitBeforeMask      0x80
                    205: #define kPEFWeakLibraryMask     0x40
                    206: #define kPEFDeferredBindMask    0x20
                    207: 
                    208: /*========== Loader Import Symbol Table Entry ==========*/
                    209: 
                    210: typedef struct {
                    211:      PEF_UBits32    symClass    :  8;   // Actually ot type TCFLSymbolClass.
                    212:      PEF_UBits32    nameOffset  : 24;
                    213: } LoaderImport, *LoaderImportPtr;
                    214: 
                    215: #define kPEFWeakSymbolMask  0x80
                    216: 
                    217: /*========== Loader Export Hash Slot Table Entry ==========*/
                    218: 
                    219: typedef struct {
                    220:     PEF_UBits32 chainCount : 14;
                    221:     PEF_UBits32 chainIndex : 18;
                    222: } HashSlotEntry, *HashSlotEntryPtr;
                    223: 
                    224: #define PEFHashHighBits(hashword,bitCount)  ((hashword) >> (bitCount))
                    225: #define PEFHashMaskBits(hashword,bitCount)  (((UInt32)(1) << (bitCount)) - 1)
                    226: 
                    227: #define GetPEFHashSlot(hashword,bitCount)   \
                    228:     ( (ItemCount) (((hashword) ^ PEFHashHighBits((hashword),(bitCount))) & PEFHashMaskBits((hashword),(bitCount))) )
                    229: 
                    230: /*========== Loader Export Hash Chain Table Entry ==========*/
                    231: 
                    232: typedef struct {
                    233:      UInt32  hashword;                        /* (hashword >> 16) == nameLength !! */
                    234: } HashChainEntry, *HashChainEntryPtr;
                    235: 
                    236: /*========== Loader Export Symbol Table Entry ==========*/
                    237: 
                    238: /*  Section number controls how 'address' is interpreted.
                    239:      >=0: section number exporting the symbol; 'address' is offset from start of the section to
                    240:             the symbol being exported (ie address of a routine or data item)
                    241:      -1:    value is absolute (non-relocatable)
                    242:      -2:    value is a physical address (non-relocatable)
                    243:      -3:    re-export imported symbol whose number is in 'address'
                    244: */
                    245: 
                    246: /* this struct is stored in the file, non-aligned: size = 10 */
                    247: typedef struct {
                    248:      PEF_UBits32    symClass    :  8;   // Actually ot type TCFLSymbolClass.
                    249:      PEF_UBits32    nameOffset  : 24;
                    250:      ByteCount      offset;                                       /* offset into section to exported symbol */
                    251:      SInt16         sectionNumber;
                    252: } LoaderExport, *LoaderExportPtr;
                    253: 
                    254: #define SIZEOF_LoaderExport (sizeof (TUnsigned32)*2 + sizeof (SInt16))
                    255: 
                    256: 
                    257: #define kPEFAbsoluteExport -1
                    258: #define kPEFPhysicalExport -2
                    259: #define kPEFReExportImport -3
                    260: 
                    261: /*========== Loader Relocation Entry ==========*/
                    262: 
                    263: typedef UInt16 RelocInstr;
                    264: 
                    265: typedef union {
                    266:     struct { unsigned op:7, rest:9;                  } opcode;
                    267:     struct { unsigned op:2, delta_d4:8, cnt:6;   } deltadata;
                    268:     struct { unsigned op:7, cnt_m1:9;                } run;
                    269:     struct { unsigned op:7, idx:9;                   } glp;
                    270:     struct { unsigned op:4, delta_m1:12;             } delta;
                    271:     struct { unsigned op:4, icnt_m1:4, rcnt_m1:8; } rpt;
                    272:     struct { unsigned op:6, idx_top:10;              } large1;
                    273:     struct { unsigned op:6, cnt_m1:4, idx_top:6;  } large2;
                    274:     UInt16 instr;
                    275:     UInt16 bot;
                    276: } Relocation;
                    277: 
                    278: // opcode definitions which can be used with
                    279: // Relocation.opcode.op:7, if masked properly
                    280: // by the up coming table
                    281: // (NOTE: a half word of 0 is garunteed to be an unused relocation instruction)
                    282: 
                    283: #define krDDAT 0x00 // type deltadata
                    284: 
                    285: #define krCODE 0x20 // type run
                    286: #define krDATA 0x21 // type run
                    287: #define krDESC 0x22 // type run
                    288: #define krDSC2 0x23 // type run
                    289: #define krVTBL 0x24 // type run
                    290: #define krSYMR 0x25 // type run
                    291: //              0x26
                    292: //              0x2F
                    293: 
                    294: #define krSYMB 0x30 // type glp
                    295: #define krCDIS 0x31 // type glp
                    296: #define krDTIS 0x32 // type glp
                    297: #define krSECN 0x33 // type glp
                    298: //              0x34
                    299: //              0x3F
                    300: 
                    301: #define krDELT 0x40 // type delta
                    302: #define krRPT   0x48 // type rpt
                    303: 
                    304: #define krLABS 0x50 // type large1
                    305: #define krLSYM 0x52 // type large1
                    306: //              0x54
                    307: //              0x56
                    308: 
                    309: #define krLRPT 0x58 // type large2
                    310: #define krLSEC 0x5A // type large2
                    311: //              0x5C
                    312: //              0x5E
                    313: 
                    314:             // LSEC usage:
                    315:             // LSEC 0, n         -- Long SECN
                    316:             // LSEC 1, n         -- Long CDIS
                    317:             // LSEC 2, n         -- Long DTIS
                    318:             // LSEC 3, n         -- free
                    319:             // LSEC 15, n        -- free
                    320: 
                    321: // constants that indicate the maximum sizes of fields
                    322: // (before packing, ie: subtracting one, in some cases)
                    323: 
                    324: #define ksDELTA 4096        // delta max for DELTA from
                    325: 
                    326: #define ksDDDMAX 1023       // delta max for DELTA-DAT (DDAT) form
                    327: #define ksDDRMAX 63         // run max for DELTA-DAT (DDAT) form
                    328: 
                    329: #define ksCODE   512        // count max for CODE form
                    330: #define ksDATA   512        // count max for DATA form
                    331: #define ksDEMAX  512        // count max for DESC form
                    332: #define ksVTMAX  512        // count max for VTBL form
                    333: #define ksISMAX  512        // count max for IMPS form
                    334: #define ksRPTMAX 256        // count max for RPT form
                    335: 
                    336: #define IsLARG(op) (((op) & 0x70) == 0x50)
                    337: 
                    338: #define RELOPSHFT 9
                    339: 
                    340: #define ksDVDMAX 0          // (63) delta max for DELTA-VTBL (DVBL) form
                    341: #define ksDVRMAX 0          // (256)  run max for DELTA-VTBL (DVBL) form
                    342: 
                    343: #define krXXXX 0xff
                    344: 
                    345: 
                    346: /*
                    347:                 From:               PEFBinaryFormat.i
                    348:                     Revision:       9
                    349: */
                    350: 
                    351: enum {
                    352:                                                                 /* The packed data opcodes. */
                    353:     kPEFPkDataZero              = 0,                            /* Zero fill "count" bytes. */
                    354:     kPEFPkDataBlock             = 1,                            /* Block copy "count" bytes. */
                    355:     kPEFPkDataRepeat            = 2,                            /* Repeat "count" bytes "count2"+1 times. */
                    356:     kPEFPkDataRepeatBlock       = 3,                            /* Interleaved repeated and unique data. */
                    357:     kPEFPkDataRepeatZero        = 4                             /* Interleaved zero and unique data. */
                    358: };
                    359: 
                    360: 
                    361: enum {
                    362:     kPEFPkDataOpcodeShift       = 5,
                    363:     kPEFPkDataCount5Mask        = 0x1F,
                    364:     kPEFPkDataMaxCount5         = 31,
                    365:     kPEFPkDataVCountShift       = 7,
                    366:     kPEFPkDataVCountMask        = 0x7F,
                    367:     kPEFPkDataVCountEndMask     = 0x80
                    368: };
                    369: 
                    370: #define PEFPkDataOpcode(byte) ( ((UInt8)(byte)) >> kPEFPkDataOpcodeShift )
                    371: 
                    372: #define PEFPkDataCount5(byte) ( ((UInt8)(byte)) & kPEFPkDataCount5Mask )
                    373: 
                    374: #define PEFPkDataComposeInstr(opcode,count5)        \
                    375:             ( (((UInt8)(opcode)) << kPEFPkDataOpcodeShift) | ((UInt8)(count5)) )
                    376: 
                    377: 
                    378: 
                    379: 
                    380: 
                    381: /*
                    382:     File:       CodeFragmentContainerPriv.h
                    383:  
                    384:     Contains:   Physical container routines of the ModernOS version of CFM.
                    385:  
                    386:     Version:    Maxwell
                    387:  
                    388:     DRI:        Alan Lillich
                    389:  
                    390:     Copyright:  � 1984-1996 by Apple Computer, Inc.
                    391:                 All rights reserved.
                    392:  
                    393:     Warning:    *** APPLE INTERNAL USE ONLY ***
                    394:                 This file contains unreleased SPI's
                    395:  
                    396:     BuildInfo:  Built by:           Simon Douglas
                    397:                 With Interfacer:    2.0d13   (PowerPC native)
                    398:                 From:               CodeFragmentContainerPriv.i
                    399:                     Revision:       9
                    400:                     Dated:          10/9/96
                    401:                     Last change by: AWL
                    402:                     Last comment:   Remove special SMP sharing, using prepare option instead.
                    403:  
                    404:     Bugs:       Report bugs to Radar component �System Interfaces�, �Latest�
                    405:                 List the version information (from above) in the Problem Description.
                    406:  
                    407: */
                    408: /*
                    409:  -------------------------------------------------------------------------------------------
                    410:  This file contains what used to be called the CFLoader interface.  The name was changed to
                    411:  fit the newer convention of having CodeFragment as a common prefix, and to reduce pervasive
                    412:  confusion between the Code Fragment Manager and the Code Fragment Loaders, promulgated by
                    413:  the long history of the Segment Loader.  This file defines the abstract interface to the
                    414:  physical representation of code fragments.
                    415:  !!! This version has minimal comments, the main purpose is to get things compiled.
                    416: */
                    417: 
                    418: 
                    419: /*
                    420:  �
                    421:  ===========================================================================================
                    422:  General Types and Constants
                    423:  ===========================
                    424: */
                    425: typedef SInt32 CFContSignedIndex;
                    426: typedef UInt32 CFContStringHash;
                    427: #define CFContStringHashLength(hashValue)   ((hashValue) >> 16)
                    428: struct CFContHashedName {
                    429:     CFContStringHash                nameHash;                   /* ! Includes the name length.*/
                    430:     BytePtr                         nameText;
                    431: };
                    432: typedef struct CFContHashedName CFContHashedName;
                    433: 
                    434: /*
                    435:  ------------------------------------------
                    436:  Declarations for code fragment containers.
                    437: */
                    438: 
                    439: enum {
                    440:     kCFContContainerInfoVersion = 0x00010001
                    441: };
                    442: 
                    443: struct CFContContainerInfo {
                    444:     CFContHashedName                cfragName;
                    445:     UInt32                          modDate;                    /* !!! Abstract type?*/
                    446:     OSType                          architecture;
                    447:     CFragVersionNumber              currentVersion;
                    448:     CFragVersionNumber              oldImpVersion;
                    449:     CFragVersionNumber              oldDefVersion;
                    450:     UInt32                          reservedA;
                    451:     void *                          reservedB;
                    452: };
                    453: typedef struct CFContContainerInfo CFContContainerInfo;
                    454: 
                    455: /*
                    456:  ----------------------------------------
                    457:  Declarations for code fragment sections.
                    458: */
                    459: struct CFContLogicalLocation {
                    460:     CFContSignedIndex               section;                    /* "Real" sections use zero based indices, special ones are negative.*/
                    461:     ByteCount                       offset;
                    462: };
                    463: typedef struct CFContLogicalLocation CFContLogicalLocation;
                    464: 
                    465: 
                    466: enum {
                    467:     kCFContNoSectionIndex       = -1,
                    468:     kCFContAbsoluteSectionIndex = -2,
                    469:     kCFContReexportSectionIndex = -3
                    470: };
                    471: 
                    472: typedef UInt8 CFContSectionSharing;
                    473: 
                    474: enum {
                    475:     kCFContShareSectionInClosure = 0,                           /* ! Not supported at present!*/
                    476:     kCFContShareSectionInProcess = 1,
                    477:     kCFContShareSectionAcrossSystem = 4,
                    478:     kCFContShareSectionWithProtection = 5
                    479: };
                    480: 
                    481: typedef UInt8 CFContMemoryAccess;
                    482: 
                    483: enum {
                    484:     kCFContMemReadMask          = 0x01,                         /* Readable memory can also be executed.*/
                    485:     kCFContMemWriteMask         = 0x02,
                    486:     kCFContMemExecuteMask       = 0x04,                         /* ! Affects cache actions, not protection!*/
                    487:     kCFContReadOnlyData         = kCFContMemReadMask,
                    488:     kCFContWriteableData        = kCFContMemReadMask | kCFContMemWriteMask,
                    489:     kCFContNormalCode           = kCFContMemReadMask | kCFContMemExecuteMask,
                    490:     kCFContExcludedMemory       = 0
                    491: };
                    492: 
                    493: typedef UInt32 CFContSectionOptions;
                    494: 
                    495: enum {
                    496:                                                                 /* Values for CFContSectionOptions.*/
                    497:     kPackedCFContSectionMask    = 0x01,                         /* Stored contents are compressed.*/
                    498:     kRelocatedCFContSectionMask = 0x02,                         /* Section contents have relocations.*/
                    499:     kEmptyFillCFContSectionMask = 0x04,                         /* The extension part may be left untouched.*/
                    500:     kResidentCFContSectionMask  = 0x08,
                    501:     kPrefaultCFContSectionMask  = 0x10
                    502: };
                    503: 
                    504: 
                    505: enum {
                    506:     kCFContSectionInfoVersion   = 0x00010001
                    507: };
                    508: 
                    509: struct CFContSectionInfo {
                    510:     CFContHashedName                sectionName;
                    511:     CFContMemoryAccess              access;
                    512:     CFContSectionSharing            sharing;
                    513:     UInt8                           alignment;                  /* ! The power of 2, a.k.a. number of low order zero bits.*/
                    514:     UInt8                           reservedA;
                    515:     CFContSectionOptions            options;
                    516:     ByteCount                       containerOffset;
                    517:     ByteCount                       containerLength;
                    518:     ByteCount                       unpackedLength;
                    519:     ByteCount                       totalLength;
                    520:     LogicalAddress                  defaultAddress;
                    521:     UInt32                          reservedB;
                    522:     void *                          reservedC;
                    523: };
                    524: typedef struct CFContSectionInfo CFContSectionInfo;
                    525: 
                    526: /*
                    527:  ----------------------------------
                    528:  Declarations for exported symbols.
                    529: */
                    530: typedef UInt32 CFContExportedSymbolOptions;
                    531: /*
                    532:  ! enum {   // Values for CFContExportedSymbolOptions.
                    533:  !  // ! No options at present.
                    534:  ! };
                    535: */
                    536: 
                    537: enum {
                    538:     kCFContExportedSymbolInfoVersion = 0x00010001
                    539: };
                    540: 
                    541: struct CFContExportedSymbolInfo {
                    542:     CFContHashedName                symbolName;
                    543:     CFContLogicalLocation           location;
                    544:     CFContExportedSymbolOptions     options;
                    545:     CFragSymbolClass                symbolClass;
                    546:     UInt8                           reservedA;
                    547:     UInt16                          reservedB;
                    548:     UInt32                          reservedC;
                    549:     void *                          reservedD;
                    550: };
                    551: typedef struct CFContExportedSymbolInfo CFContExportedSymbolInfo;
                    552: 
                    553: /*
                    554:  ------------------------------------------------
                    555:  Declarations for imported libraries and symbols.
                    556: */
                    557: typedef UInt32 CFContImportedLibraryOptions;
                    558: 
                    559: enum {
                    560:                                                                 /* Values for CFContImportedLibraryOptions.*/
                    561:     kCFContWeakLibraryMask      = 0x01,                         /* ! Same as kCFContWeakSymbolMask to reduce errors.*/
                    562:     kCFContInitBeforeMask       = 0x02,
                    563:     kCFContDeferredBindMask     = 0x04
                    564: };
                    565: 
                    566: 
                    567: enum {
                    568:     kCFContImportedLibraryInfoVersion = 0x00010001
                    569: };
                    570: 
                    571: struct CFContImportedLibraryInfo {
                    572:     CFContHashedName                libraryName;
                    573:     CFragVersionNumber              linkedVersion;
                    574:     CFragVersionNumber              oldImpVersion;
                    575:     CFContImportedLibraryOptions    options;
                    576: };
                    577: typedef struct CFContImportedLibraryInfo CFContImportedLibraryInfo;
                    578: 
                    579: typedef UInt32 CFContImportedSymbolOptions;
                    580: 
                    581: enum {
                    582:                                                                 /* Values for CFContImportedSymbolOptions.*/
                    583:     kCFContWeakSymbolMask       = 0x01                          /* ! Same as kCFContWeakLibraryMask to reduce errors.*/
                    584: };
                    585: 
                    586: 
                    587: enum {
                    588:     kCFContImportedSymbolInfoVersion = 0x00010001
                    589: };
                    590: 
                    591: struct CFContImportedSymbolInfo {
                    592:     CFContHashedName                symbolName;
                    593:     ItemCount                       libraryIndex;
                    594:     CFContImportedSymbolOptions     options;
                    595:     CFragSymbolClass                symbolClass;
                    596:     UInt8                           reservedA;
                    597:     UInt16                          reservedB;
                    598:     UInt32                          reservedC;
                    599:     void *                          reservedD;
                    600: };
                    601: typedef struct CFContImportedSymbolInfo CFContImportedSymbolInfo;
                    602: 
                    603: /*
                    604:  -------------------------------------------------
                    605:  Declarations for dealing with container handlers.
                    606: */
                    607: typedef UInt32 CFContOpenOptions;
                    608: 
                    609: enum {
                    610:                                                                 /* Values for CFContOpenOptions.*/
                    611:     kCFContPrepareInPlaceMask   = 0x01,
                    612:     kCFContMinimalOpenMask      = 0x02
                    613: };
                    614: 
                    615: typedef UInt32 CFContCloseOptions;
                    616: 
                    617: enum {
                    618:                                                                 /* Values for CFContCloseOptions.*/
                    619:     kCFContPartialCloseMask     = 0x01
                    620: };
                    621: 
                    622: typedef struct OpaqueCFContHandlerRef* CFContHandlerRef;
                    623: typedef struct CFContHandlerProcs CFContHandlerProcs;
                    624: typedef CFContHandlerProcs *CFContHandlerProcsPtr;
                    625: typedef LogicalAddress (*CFContAllocateMem)(ByteCount size);
                    626: typedef void (*CFContReleaseMem)(LogicalAddress address);
                    627: /*
                    628:  �
                    629:  ===========================================================================================
                    630:  Container Handler Routines
                    631:  ==========================
                    632: */
                    633: typedef OSStatus (*CFCont_OpenContainer)(LogicalAddress mappedAddress, LogicalAddress runningAddress, ByteCount containerLength, KernelProcessID runningProcessID, const CFContHashedName *cfragName, CFContOpenOptions options, CFContAllocateMem Allocate, CFContReleaseMem Release, CFContHandlerRef *containerRef, CFContHandlerProcsPtr *handlerProcs);
                    634: typedef OSStatus (*CFCont_CloseContainer)(CFContHandlerRef containerRef, CFContCloseOptions options);
                    635: typedef OSStatus (*CFCont_GetContainerInfo)(CFContHandlerRef containerRef, PBVersion infoVersion, CFContContainerInfo *containerInfo);
                    636: /* -------------------------------------------------------------------------------------------*/
                    637: typedef OSStatus (*CFCont_GetSectionCount)(CFContHandlerRef containerRef, ItemCount *sectionCount);
                    638: typedef OSStatus (*CFCont_GetSectionInfo)(CFContHandlerRef containerRef, ItemCount sectionIndex, PBVersion infoVersion, CFContSectionInfo *sectionInfo);
                    639: typedef OSStatus (*CFCont_FindSectionInfo)(CFContHandlerRef containerRef, const CFContHashedName *sectionName, PBVersion infoVersion, ItemCount *sectionIndex, CFContSectionInfo *sectionInfo);
                    640: typedef OSStatus (*CFCont_SetSectionAddress)(CFContHandlerRef containerRef, ItemCount sectionIndex, LogicalAddress mappedAddress, LogicalAddress runningAddress);
                    641: /* -------------------------------------------------------------------------------------------*/
                    642: typedef OSStatus (*CFCont_GetAnonymousSymbolLocations)(CFContHandlerRef containerRef, CFContLogicalLocation *mainLocation, CFContLogicalLocation *initLocation, CFContLogicalLocation *termLocation);
                    643: /* -------------------------------------------------------------------------------------------*/
                    644: typedef OSStatus (*CFCont_GetExportedSymbolCount)(CFContHandlerRef containerRef, ItemCount *exportCount);
                    645: typedef OSStatus (*CFCont_GetExportedSymbolInfo)(CFContHandlerRef containerRef, CFContSignedIndex exportedIndex, PBVersion infoVersion, CFContExportedSymbolInfo *exportInfo);
                    646: typedef OSStatus (*CFCont_FindExportedSymbolInfo)(CFContHandlerRef containerRef, const CFContHashedName *exportName, PBVersion infoVersion, ItemCount *exportIndex, CFContExportedSymbolInfo *exportInfo);
                    647: /* -------------------------------------------------------------------------------------------*/
                    648: typedef OSStatus (*CFCont_GetImportCounts)(CFContHandlerRef containerRef, ItemCount *libraryCount, ItemCount *symbolCount);
                    649: typedef OSStatus (*CFCont_GetImportedLibraryInfo)(CFContHandlerRef containerRef, ItemCount libraryIndex, PBVersion infoVersion, CFContImportedLibraryInfo *libraryInfo);
                    650: typedef OSStatus (*CFCont_GetImportedSymbolInfo)(CFContHandlerRef containerRef, ItemCount symbolIndex, PBVersion infoVersion, CFContImportedSymbolInfo *symbolInfo);
                    651: typedef OSStatus (*CFCont_SetImportedSymbolAddress)(CFContHandlerRef containerRef, ItemCount symbolIndex, LogicalAddress symbolAddress);
                    652: /* -------------------------------------------------------------------------------------------*/
                    653: typedef OSStatus (*CFCont_UnpackSection)(CFContHandlerRef containerRef, ItemCount sectionIndex, ByteCount sectionOffset, LogicalAddress bufferAddress, ByteCount bufferLength);
                    654: typedef OSStatus (*CFCont_RelocateSection)(CFContHandlerRef containerRef, ItemCount sectionIndex);
                    655: typedef OSStatus (*CFCont_RelocateImportsOnly)(CFContHandlerRef containerRef, ItemCount sectionIndex, ItemCount libraryIndex);
                    656: typedef OSStatus (*CFCont_MakeSectionExecutable)(CFContHandlerRef containerRef, ItemCount sectionIndex);
                    657: typedef OSStatus (*CFCont_AllocateSection)(CFContHandlerRef containerRef, ItemCount sectionIndex, LogicalAddress *mappedAddress, LogicalAddress *runningAddress);
                    658: typedef OSStatus (*CFCont_ReleaseSection)(CFContHandlerRef containerRef, ItemCount sectionIndex);
                    659: /* -------------------------------------------------------------------------------------------*/
                    660: 
                    661: #if 0
                    662: struct CFContHandlerInfo {
                    663:     OrderedItemName                 orderedName;
                    664:     OrderRequirements               orderedReq;
                    665:     CFCont_OpenContainer            OpenHandler;
                    666: };
                    667: typedef struct CFContHandlerInfo CFContHandlerInfo;
                    668: #endif
                    669: 
                    670: struct CFContHandlerProcs {
                    671:     ItemCount                       procCount;
                    672:     CFragShortVersionPair           abiVersion;
                    673: 
                    674:     CFCont_OpenContainer            OpenContainer;              /*  1*/
                    675:     CFCont_CloseContainer           CloseContainer;             /*  2*/
                    676:     CFCont_GetContainerInfo         GetContainerInfo;           /*  3*/
                    677: 
                    678:     CFCont_GetSectionCount          GetSectionCount;            /*  4*/
                    679:     CFCont_GetSectionInfo           GetSectionInfo;             /*  5*/
                    680:     CFCont_FindSectionInfo          FindSectionInfo;            /*  6*/
                    681:     CFCont_SetSectionAddress        SetSectionAddress;          /*  7*/
                    682: 
                    683:     CFCont_GetAnonymousSymbolLocations  GetAnonymousSymbolLocations; /*  8*/
                    684: 
                    685:     CFCont_GetExportedSymbolCount   GetExportedSymbolCount;     /*  9*/
                    686:     CFCont_GetExportedSymbolInfo    GetExportedSymbolInfo;      /* 10*/
                    687:     CFCont_FindExportedSymbolInfo   FindExportedSymbolInfo;     /* 11*/
                    688: 
                    689:     CFCont_GetImportCounts          GetImportCounts;            /* 12*/
                    690:     CFCont_GetImportedLibraryInfo   GetImportedLibraryInfo;     /* 13*/
                    691:     CFCont_GetImportedSymbolInfo    GetImportedSymbolInfo;      /* 14*/
                    692:     CFCont_SetImportedSymbolAddress  SetImportedSymbolAddress;  /* 15*/
                    693: 
                    694:     CFCont_UnpackSection            UnpackSection;              /* 16*/
                    695:     CFCont_RelocateSection          RelocateSection;            /* 17*/
                    696:     CFCont_RelocateImportsOnly      RelocateImportsOnly;        /* 18*/
                    697:     CFCont_MakeSectionExecutable    MakeSectionExecutable;      /* 19   (Opt.)*/
                    698:     CFCont_AllocateSection          AllocateSection;            /* 20   (Opt.)*/
                    699:     CFCont_ReleaseSection           ReleaseSection;             /* 21   (Opt.)*/
                    700: };
                    701: 
                    702: 
                    703: enum {
                    704:     kCFContMinimumProcCount     = 18,
                    705:     kCFContCurrentProcCount     = 21,
                    706:     kCFContHandlerABIVersion    = 0x00010001
                    707: };
                    708: 
                    709: /*
                    710:  -----------------------------------------------------------------------------------------
                    711:  The ABI version is a pair of UInt16s used as simple counters.  The high order part is the
                    712:  current version number, the low order part is the oldest compatible definition version.
                    713:  number.  This pair is to be used by the specific container handlers to describe what
                    714:  version of the container handler ABI they support.
                    715:     0x00010001
                    716:     ----------
                    717:     The initial release of this ABI.  (The old CFLoader ABI does not count.)
                    718:  �
                    719:  ===========================================================================================
                    720:  General Routines
                    721:  ================
                    722: */
                    723: extern CFContStringHash CFContHashName(BytePtr nameText, ByteCount nameLength);
                    724: 
                    725: #if 0
                    726: 
                    727: /* -------------------------------------------------------------------------------------------*/
                    728: extern OSStatus CFContOpenContainer(LogicalAddress mappedAddress, LogicalAddress runningAddress, ByteCount containerLength, KernelProcessID runningProcessID, const CFContHashedName *cfragName, CFContOpenOptions options, CFContAllocateMem Allocate, CFContReleaseMem Release, CFContHandlerRef *containerRef, CFContHandlerProcsPtr *handlerProcs);
                    729: 
                    730: /* -------------------------------------------------------------------------------------------*/
                    731: extern OSStatus CFContRegisterContainerHandler(const OrderedItemName *orderedName, const OrderRequirements *orderedReq, CFCont_OpenContainer OpenHandler, OrderedItemName *rejectingHandler);
                    732: 
                    733: extern OSStatus CFContUnregisterContainerHandler(const OrderedItemName *orderedName);
                    734: 
                    735: extern OSStatus CFContGetContainerHandlers(ItemCount requestedCount, ItemCount *totalCount, CFContHandlerInfo *handlers);
                    736: 
                    737: /* -------------------------------------------------------------------------------------------*/
                    738: #endif
                    739: 
                    740: 
                    741: 
                    742: 
                    743: 
                    744: 
                    745: /*
                    746:     File:       PEFLoader.h
                    747: 
                    748:     Contains:   PEF Loader Interface.
                    749: 
                    750:     Version:    Maxwell
                    751: 
                    752:     Copyright:  � 1992-1996 by Apple Computer, Inc., all rights reserved.
                    753: 
                    754:     File Ownership:
                    755: 
                    756:         DRI:                Alan Lillich
                    757: 
                    758:         Other Contact:      <<unknown>>
                    759: 
                    760:         Technology:         Core Runtime
                    761: 
                    762:     Writers:
                    763: 
                    764:         (AWL)   Alan Lillich
                    765:         (ELE)   Erik Eidt
                    766: 
                    767:      Change History (most recent first):
                    768: 
                    769:          <7>     8/23/96    AWL     (1379028) Propagate changes from CodeFragmentContainerPriv.
                    770:          <6>     2/28/96    AWL     Adapt for new container handler model.
                    771:          <5>     6/20/94    AWL     Move private PEF loader info struct here to be visible to the
                    772:                                     booting "wacky" PEF loader.
                    773:          <4>      6/8/94    AWL     Make all CFL routines visible for direct use in special cases
                    774:                                     such as booting.
                    775:          <3>     5/16/94    AWL     Fix typo.
                    776:          <2>     2/25/94    AWL     Update for Q&D solution to loading across address spaces.
                    777:          <1>     2/15/94    AWL     Initial checkin for kernel based CFM.
                    778: */
                    779: 
                    780: // ===========================================================================================
                    781: 
                    782: enum {
                    783:     kBuiltinSectionArraySize    = 4
                    784: };
                    785: 
                    786: struct PEFPrivateInfo { // !!! Clean up field names, collapse Booleans, etc.
                    787:     CFContAllocateMem       Allocate;
                    788:     CFContReleaseMem        Release;
                    789:     BytePtr                 mappedContainer;
                    790:     BytePtr                 runningContainer;
                    791:     ItemCount               sectionCount;       // Just the instantiated sections.
                    792:     SectionHeader *         sections;
                    793:     BytePtr                 stringTable;
                    794:     ItemCount               ldrSectionNo;
                    795:     LoaderHeader *          ldrHeader;
                    796:     BytePtr                 ldrStringTable;
                    797:     LoaderRelExpHeader *    ldrSections;
                    798:     LoaderImportFileID *    ldrImportFiles;
                    799:     LoaderImport *          ldrImportSymbols;
                    800:     HashSlotEntry *         ldrHashSlot;
                    801:     HashChainEntry *        ldrHashChain;
                    802:     LoaderExport *          ldrExportSymbols;
                    803:     BytePtr                 ldrRelocations;
                    804:     BytePtr *               mappedOrigins;      // Mapped base address for each section.
                    805:     ByteCount *             runningOffsets;     // Running offset from presumed address.
                    806:     BytePtr *               imports;
                    807:     BytePtr                 originArray [kBuiltinSectionArraySize]; // ! Only used if big enough.
                    808:     ByteCount               offsetArray [kBuiltinSectionArraySize]; // ! Only used if big enough.
                    809:     Boolean                 loadInPlace;
                    810:     Boolean                 resolved;
                    811: };
                    812: 
                    813: typedef struct PEFPrivateInfo   PEFPrivateInfo;
                    814: 
                    815: 
                    816: // ===========================================================================================
                    817: 
                    818: 
                    819: extern OSStatus PEF_OpenContainer       ( LogicalAddress            mappedAddress,
                    820:                                           LogicalAddress            runningAddress,
                    821:                                           ByteCount                 containerLength,
                    822:                                           KernelProcessID           runningProcessID,
                    823:                                           const CFContHashedName *  cfragName,
                    824:                                           CFContOpenOptions         options,
                    825:                                           CFContAllocateMem         Allocate,
                    826:                                           CFContReleaseMem          Release,
                    827:                                           CFContHandlerRef *        containerRef_o,
                    828:                                           CFContHandlerProcs * *    handlerProcs_o );
                    829: 
                    830: extern OSStatus PEF_CloseContainer      ( CFContHandlerRef          containerRef,
                    831:                                           CFContCloseOptions        options );
                    832: 
                    833: extern OSStatus PEF_GetContainerInfo    ( CFContHandlerRef          containerRef,
                    834:                                           PBVersion                 infoVersion,
                    835:                                           CFContContainerInfo *     containerInfo );
                    836: 
                    837: // -------------------------------------------------------------------------------------------
                    838: 
                    839: extern OSStatus PEF_GetSectionCount     ( CFContHandlerRef          containerRef,
                    840:                                           ItemCount *               sectionCount );
                    841: 
                    842: extern OSStatus PEF_GetSectionInfo      ( CFContHandlerRef          containerRef,
                    843:                                           ItemCount                 sectionIndex,
                    844:                                           PBVersion                 infoVersion,
                    845:                                           CFContSectionInfo *       sectionInfo );
                    846: 
                    847: extern OSStatus PEF_FindSectionInfo     ( CFContHandlerRef          containerRef,
                    848:                                           const CFContHashedName *  sectionName,
                    849:                                           PBVersion                 infoVersion,
                    850:                                           ItemCount *               sectionIndex,   // May be null.
                    851:                                           CFContSectionInfo *       sectionInfo );  // May be null.
                    852: 
                    853: extern OSStatus PEF_SetSectionAddress   ( CFContHandlerRef          containerRef,
                    854:                                           ItemCount                 sectionIndex,
                    855:                                           LogicalAddress            mappedAddress,
                    856:                                           LogicalAddress            runningAddress );
                    857: 
                    858: // -------------------------------------------------------------------------------------------
                    859: 
                    860: extern OSStatus PEF_GetAnonymousSymbolLocations ( CFContHandlerRef          containerRef,
                    861:                                                   CFContLogicalLocation *   mainLocation,   // May be null.
                    862:                                                   CFContLogicalLocation *   initLocation,   // May be null.
                    863:                                                   CFContLogicalLocation *   termLocation ); // May be null.
                    864: 
                    865: // -------------------------------------------------------------------------------------------
                    866: 
                    867: extern OSStatus PEF_GetExportedSymbolCount  ( CFContHandlerRef              containerRef,
                    868:                                               ItemCount *                   exportCount );
                    869: 
                    870: extern OSStatus PEF_GetExportedSymbolInfo   ( CFContHandlerRef              containerRef,
                    871:                                               CFContSignedIndex             exportIndex,
                    872:                                               PBVersion                     infoVersion,
                    873:                                               CFContExportedSymbolInfo *    exportInfo );
                    874: 
                    875: extern OSStatus PEF_FindExportedSymbolInfo  ( CFContHandlerRef              containerRef,
                    876:                                               const CFContHashedName *      exportName,
                    877:                                               PBVersion                     infoVersion,
                    878:                                               ItemCount *                   exportIndex,    // May be null.
                    879:                                               CFContExportedSymbolInfo *    exportInfo );   // May be null.
                    880: 
                    881: // -------------------------------------------------------------------------------------------
                    882: 
                    883: extern OSStatus PEF_GetImportCounts             ( CFContHandlerRef              containerRef,
                    884:                                                   ItemCount *                   libraryCount,   // May be null.
                    885:                                                   ItemCount *                   symbolCount );  // May be null.
                    886: 
                    887: extern OSStatus PEF_GetImportedLibraryInfo      ( CFContHandlerRef              containerRef,
                    888:                                                   ItemCount                     libraryIndex,
                    889:                                                   PBVersion                     infoVersion,
                    890:                                                   CFContImportedLibraryInfo *   libraryInfo );
                    891: 
                    892: extern OSStatus PEF_GetImportedSymbolInfo       ( CFContHandlerRef              containerRef,
                    893:                                                   ItemCount                     symbolIndex,
                    894:                                                   PBVersion                     infoVersion,
                    895:                                                   CFContImportedSymbolInfo *    symbolInfo );
                    896: 
                    897: extern OSStatus PEF_SetImportedSymbolAddress    ( CFContHandlerRef              containerRef,
                    898:                                                   ItemCount                     symbolIndex,
                    899:                                                   LogicalAddress                symbolAddress );
                    900: 
                    901: // -------------------------------------------------------------------------------------------
                    902: 
                    903: extern OSStatus PEF_UnpackSection           ( CFContHandlerRef      containerRef,
                    904:                                               ItemCount             sectionIndex,
                    905:                                               ByteCount             sectionOffset,
                    906:                                               LogicalAddress        bufferAddress,
                    907:                                               ByteCount             bufferLength );
                    908: 
                    909: extern OSStatus PEF_RelocateSection         ( CFContHandlerRef      containerRef,
                    910:                                               ItemCount             sectionIndex );
                    911: 
                    912: extern OSStatus PEF_RelocateImportsOnly     ( CFContHandlerRef      containerRef,
                    913:                                               ItemCount             sectionIndex,
                    914:                                               ItemCount             libraryIndex );
                    915: 
                    916: struct CFragInitBlock {
                    917:        void *          contextID;
                    918:        void *          closureID;
                    919:        void *          connectionID;
                    920:        SInt32          where;                  // locator rec
                    921:        LogicalAddress  address;
                    922:        ByteCount       length;
                    923:        Boolean         inPlace;
                    924:        UInt8           resvA;
                    925:        UInt16          resvB;
                    926:        char *          libName;
                    927:        UInt32          resvC;
                    928: };
                    929: typedef struct CFragInitBlock CFragInitBlock;
                    930: 
                    931: #pragma options align=reset
                    932: 
                    933: #endif  // __IOPEFINTERNALS__
                    934: 

unix.superglobalmegacorp.com

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