Annotation of XNU/EXTERNAL_HEADERS/mach-o/nlist.h, 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.1 (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: #ifndef _MACHO_NLIST_H_
                     25: #define _MACHO_NLIST_H_
                     26: /*     $NetBSD: nlist.h,v 1.5 1994/10/26 00:56:11 cgd Exp $    */
                     27: 
                     28: /*-
                     29:  * Copyright (c) 1991, 1993
                     30:  *     The Regents of the University of California.  All rights reserved.
                     31:  * (c) UNIX System Laboratories, Inc.
                     32:  * All or some portions of this file are derived from material licensed
                     33:  * to the University of California by American Telephone and Telegraph
                     34:  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
                     35:  * the permission of UNIX System Laboratories, Inc.
                     36:  *
                     37:  * Redistribution and use in source and binary forms, with or without
                     38:  * modification, are permitted provided that the following conditions
                     39:  * are met:
                     40:  * 1. Redistributions of source code must retain the above copyright
                     41:  *    notice, this list of conditions and the following disclaimer.
                     42:  * 2. Redistributions in binary form must reproduce the above copyright
                     43:  *    notice, this list of conditions and the following disclaimer in the
                     44:  *    documentation and/or other materials provided with the distribution.
                     45:  * 3. All advertising materials mentioning features or use of this software
                     46:  *    must display the following acknowledgement:
                     47:  *     This product includes software developed by the University of
                     48:  *     California, Berkeley and its contributors.
                     49:  * 4. Neither the name of the University nor the names of its contributors
                     50:  *    may be used to endorse or promote products derived from this software
                     51:  *    without specific prior written permission.
                     52:  *
                     53:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     54:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     55:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     56:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     57:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     58:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     59:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     60:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     61:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     62:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     63:  * SUCH DAMAGE.
                     64:  *
                     65:  *     @(#)nlist.h     8.2 (Berkeley) 1/21/94
                     66:  */
                     67: 
                     68: /*
                     69:  * Format of a symbol table entry of a Mach-O file.  Modified from the BSD
                     70:  * format.  The modifications from the original format were changing n_other
                     71:  * (an unused field) to n_sect and the addition of the N_SECT type.  These
                     72:  * modifications are required to support symbols in an arbitrary number of
                     73:  * sections not just the three sections (text, data and bss) in a BSD file.
                     74:  */
                     75: struct nlist {
                     76:        union {
                     77:                char *n_name;   /* for use when in-core */
                     78:                long  n_strx;   /* index into the string table */
                     79:        } n_un;
                     80:        unsigned char n_type;   /* type flag, see below */
                     81:        unsigned char n_sect;   /* section number or NO_SECT */
                     82:        short         n_desc;   /* see <mach-o/stab.h> */
                     83:        unsigned long n_value;  /* value of this symbol (or stab offset) */
                     84: };
                     85: 
                     86: /*
                     87:  * Symbols with a index into the string table of zero (n_un.n_strx == 0) are
                     88:  * defined to have a null, "", name.  Therefore all string indexes to non null
                     89:  * names must not have a zero string index.  This is bit historical information
                     90:  * that has never been well documented.
                     91:  */
                     92: 
                     93: /*
                     94:  * The n_type field really contains three fields:
                     95:  *     unsigned char N_STAB:3,
                     96:  *                   N_PEXT:1,
                     97:  *                   N_TYPE:3,
                     98:  *                   N_EXT:1;
                     99:  * which are used via the following masks.
                    100:  */
                    101: #define        N_STAB  0xe0  /* if any of these bits set, a symbolic debugging entry */
                    102: #define        N_PEXT  0x10  /* private external symbol bit */
                    103: #define        N_TYPE  0x0e  /* mask for the type bits */
                    104: #define        N_EXT   0x01  /* external symbol bit, set for external symbols */
                    105: 
                    106: /*
                    107:  * Only symbolic debugging entries have some of the N_STAB bits set and if any
                    108:  * of these bits are set then it is a symbolic debugging entry (a stab).  In
                    109:  * which case then the values of the n_type field (the entire field) are given
                    110:  * in <mach-o/stab.h>
                    111:  */
                    112: 
                    113: /*
                    114:  * Values for N_TYPE bits of the n_type field.
                    115:  */
                    116: #define        N_UNDF  0x0             /* undefined, n_sect == NO_SECT */
                    117: #define        N_ABS   0x2             /* absolute, n_sect == NO_SECT */
                    118: #define        N_SECT  0xe             /* defined in section number n_sect */
                    119: #define        N_PBUD  0xc             /* prebound undefined (defined in a dylib) */
                    120: #define N_INDR 0xa             /* indirect */
                    121: 
                    122: /* 
                    123:  * If the type is N_INDR then the symbol is defined to be the same as another
                    124:  * symbol.  In this case the n_value field is an index into the string table
                    125:  * of the other symbol's name.  When the other symbol is defined then they both
                    126:  * take on the defined type and value.
                    127:  */
                    128: 
                    129: /*
                    130:  * If the type is N_SECT then the n_sect field contains an ordinal of the
                    131:  * section the symbol is defined in.  The sections are numbered from 1 and 
                    132:  * refer to sections in order they appear in the load commands for the file
                    133:  * they are in.  This means the same ordinal may very well refer to different
                    134:  * sections in different files.
                    135:  *
                    136:  * The n_value field for all symbol table entries (including N_STAB's) gets
                    137:  * updated by the link editor based on the value of it's n_sect field and where
                    138:  * the section n_sect references gets relocated.  If the value of the n_sect 
                    139:  * field is NO_SECT then it's n_value field is not changed by the link editor.
                    140:  */
                    141: #define        NO_SECT         0       /* symbol is not in any section */
                    142: #define MAX_SECT       255     /* 1 thru 255 inclusive */
                    143: 
                    144: /*
                    145:  * Common symbols are represented by undefined (N_UNDF) external (N_EXT) types
                    146:  * who's values (n_value) are non-zero.  In which case the value of the n_value
                    147:  * field is the size (in bytes) of the common symbol.  The n_sect field is set
                    148:  * to NO_SECT.
                    149:  */
                    150: 
                    151: /*
                    152:  * To support the lazy binding of undefined symbols in the dynamic link-editor,
                    153:  * the undefined symbols in the symbol table (the nlist structures) are marked
                    154:  * with the indication if the undefined reference is a lazy reference or
                    155:  * non-lazy reference.  If both a non-lazy reference and a lazy reference is
                    156:  * made to the same symbol the non-lazy reference takes precedence.  A reference
                    157:  * is lazy only when all references to that symbol are made through a symbol
                    158:  * pointer in a lazy symbol pointer section.
                    159:  *
                    160:  * The implementation of marking nlist structures in the symbol table for
                    161:  * undefined symbols will be to use some of the bits of the n_desc field as a
                    162:  * reference type.  The mask REFERENCE_TYPE will be applied to the n_desc field
                    163:  * of an nlist structure for an undefined symbol to determine the type of
                    164:  * undefined reference (lazy or non-lazy).
                    165:  *
                    166:  * The constants for the REFERENCE FLAGS are propagated to the reference table
                    167:  * in a shared library file.  In that case the constant for a defined symbol,
                    168:  * REFERENCE_FLAG_DEFINED, is also used.
                    169:  */
                    170: /* Reference type bits of the n_desc field of undefined symbols */
                    171: #define REFERENCE_TYPE                         0xf
                    172: /* types of references */
                    173: #define REFERENCE_FLAG_UNDEFINED_NON_LAZY              0
                    174: #define REFERENCE_FLAG_UNDEFINED_LAZY                  1
                    175: #define REFERENCE_FLAG_DEFINED                         2
                    176: #define REFERENCE_FLAG_PRIVATE_DEFINED                 3
                    177: #define REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY      4
                    178: #define REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY          5
                    179: 
                    180: /*
                    181:  * To simplify stripping of objects that use are used with the dynamic link
                    182:  * editor, the static link editor marks the symbols defined an object that are
                    183:  * referenced by a dynamicly bound object (dynamic shared libraries, bundles).
                    184:  * With this marking strip knows not to strip these symbols.
                    185:  */
                    186: #define REFERENCED_DYNAMICALLY 0x0010
                    187: 
                    188: /*
                    189:  * The non-reference type bits of the n_desc field for global symbols are
                    190:  * reserved for the dynamic link editor.  All of these bits must start out
                    191:  * zero in the object file.
                    192:  */
                    193: #define N_DESC_DISCARDED 0x8000        /* symbol is discarded */
                    194: 
                    195: #endif

unix.superglobalmegacorp.com

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