1*1eaf0ac3Slogwang /*- 2*1eaf0ac3Slogwang * Copyright (c) 1991, 1993 3*1eaf0ac3Slogwang * The Regents of the University of California. All rights reserved. 4*1eaf0ac3Slogwang * (c) UNIX System Laboratories, Inc. 5*1eaf0ac3Slogwang * All or some portions of this file are derived from material licensed 6*1eaf0ac3Slogwang * to the University of California by American Telephone and Telegraph 7*1eaf0ac3Slogwang * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8*1eaf0ac3Slogwang * the permission of UNIX System Laboratories, Inc. 9*1eaf0ac3Slogwang * 10*1eaf0ac3Slogwang * Redistribution and use in source and binary forms, with or without 11*1eaf0ac3Slogwang * modification, are permitted provided that the following conditions 12*1eaf0ac3Slogwang * are met: 13*1eaf0ac3Slogwang * 1. Redistributions of source code must retain the above copyright 14*1eaf0ac3Slogwang * notice, this list of conditions and the following disclaimer. 15*1eaf0ac3Slogwang * 2. Redistributions in binary form must reproduce the above copyright 16*1eaf0ac3Slogwang * notice, this list of conditions and the following disclaimer in the 17*1eaf0ac3Slogwang * documentation and/or other materials provided with the distribution. 18*1eaf0ac3Slogwang * 4. Neither the name of the University nor the names of its contributors 19*1eaf0ac3Slogwang * may be used to endorse or promote products derived from this software 20*1eaf0ac3Slogwang * without specific prior written permission. 21*1eaf0ac3Slogwang * 22*1eaf0ac3Slogwang * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23*1eaf0ac3Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24*1eaf0ac3Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25*1eaf0ac3Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26*1eaf0ac3Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27*1eaf0ac3Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28*1eaf0ac3Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29*1eaf0ac3Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30*1eaf0ac3Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31*1eaf0ac3Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32*1eaf0ac3Slogwang * SUCH DAMAGE. 33*1eaf0ac3Slogwang * 34*1eaf0ac3Slogwang * @(#)nlist.h 8.2 (Berkeley) 1/21/94 35*1eaf0ac3Slogwang * 36*1eaf0ac3Slogwang * $FreeBSD$ 37*1eaf0ac3Slogwang */ 38*1eaf0ac3Slogwang 39*1eaf0ac3Slogwang #ifndef _SYS_NLIST_AOUT_H_ 40*1eaf0ac3Slogwang #define _SYS_NLIST_AOUT_H_ 41*1eaf0ac3Slogwang 42*1eaf0ac3Slogwang /* 43*1eaf0ac3Slogwang * Symbol table entries in a.out files. 44*1eaf0ac3Slogwang */ 45*1eaf0ac3Slogwang 46*1eaf0ac3Slogwang /* 47*1eaf0ac3Slogwang * Layout of each symbol. The "#ifdef _AOUT_INCLUDE_" is so that 48*1eaf0ac3Slogwang * programs including nlist.h can initialize nlist structures 49*1eaf0ac3Slogwang * statically. 50*1eaf0ac3Slogwang */ 51*1eaf0ac3Slogwang struct nlist { 52*1eaf0ac3Slogwang #ifdef _AOUT_INCLUDE_ 53*1eaf0ac3Slogwang union { 54*1eaf0ac3Slogwang const char *n_name; /* symbol name (in memory) */ 55*1eaf0ac3Slogwang long n_strx; /* file string table offset (on disk) */ 56*1eaf0ac3Slogwang } n_un; 57*1eaf0ac3Slogwang #else 58*1eaf0ac3Slogwang const char *n_name; /* symbol name (in memory) */ 59*1eaf0ac3Slogwang #endif 60*1eaf0ac3Slogwang unsigned char n_type; /* type defines */ 61*1eaf0ac3Slogwang char n_other; /* ".type" and binding information */ 62*1eaf0ac3Slogwang short n_desc; /* used by stab entries */ 63*1eaf0ac3Slogwang unsigned long n_value; /* address/value of the symbol */ 64*1eaf0ac3Slogwang }; 65*1eaf0ac3Slogwang 66*1eaf0ac3Slogwang #define n_hash n_desc /* used internally by ld(1); XXX */ 67*1eaf0ac3Slogwang 68*1eaf0ac3Slogwang /* 69*1eaf0ac3Slogwang * Defines for n_type. 70*1eaf0ac3Slogwang */ 71*1eaf0ac3Slogwang #define N_UNDF 0x00 /* undefined */ 72*1eaf0ac3Slogwang #define N_ABS 0x02 /* absolute address */ 73*1eaf0ac3Slogwang #define N_TEXT 0x04 /* text segment */ 74*1eaf0ac3Slogwang #define N_DATA 0x06 /* data segment */ 75*1eaf0ac3Slogwang #define N_BSS 0x08 /* bss segment */ 76*1eaf0ac3Slogwang #define N_INDR 0x0a /* alias definition */ 77*1eaf0ac3Slogwang #define N_SIZE 0x0c /* pseudo type, defines a symbol's size */ 78*1eaf0ac3Slogwang #define N_COMM 0x12 /* common reference */ 79*1eaf0ac3Slogwang /* GNU extensions */ 80*1eaf0ac3Slogwang #define N_SETA 0x14 /* Absolute set element symbol */ 81*1eaf0ac3Slogwang #define N_SETT 0x16 /* Text set element symbol */ 82*1eaf0ac3Slogwang #define N_SETD 0x18 /* Data set element symbol */ 83*1eaf0ac3Slogwang #define N_SETB 0x1a /* Bss set element symbol */ 84*1eaf0ac3Slogwang #define N_SETV 0x1c /* Pointer to set vector in data area. */ 85*1eaf0ac3Slogwang /* end GNU extensions */ 86*1eaf0ac3Slogwang #define N_FN 0x1e /* file name (N_EXT on) */ 87*1eaf0ac3Slogwang #define N_WARN 0x1e /* warning message (N_EXT off) */ 88*1eaf0ac3Slogwang 89*1eaf0ac3Slogwang #define N_EXT 0x01 /* external (global) bit, OR'ed in */ 90*1eaf0ac3Slogwang #define N_TYPE 0x1e /* mask for all the type bits */ 91*1eaf0ac3Slogwang #define N_STAB 0xe0 /* mask for debugger symbols -- stab(5) */ 92*1eaf0ac3Slogwang 93*1eaf0ac3Slogwang /* 94*1eaf0ac3Slogwang * Defines for n_other. It contains the ".type" (AUX) field in the least 95*1eaf0ac3Slogwang * significant 4 bits, and the binding (for weak symbols) in the most 96*1eaf0ac3Slogwang * significant 4 bits. 97*1eaf0ac3Slogwang */ 98*1eaf0ac3Slogwang #define N_AUX(p) ((p)->n_other & 0xf) 99*1eaf0ac3Slogwang #define N_BIND(p) (((unsigned int)(p)->n_other >> 4) & 0xf) 100*1eaf0ac3Slogwang #define N_OTHER(r, v) (((unsigned int)(r) << 4) | ((v) & 0xf)) 101*1eaf0ac3Slogwang 102*1eaf0ac3Slogwang #define AUX_OBJECT 1 /* data object */ 103*1eaf0ac3Slogwang #define AUX_FUNC 2 /* function */ 104*1eaf0ac3Slogwang 105*1eaf0ac3Slogwang /*#define BIND_LOCAL 0 not used */ 106*1eaf0ac3Slogwang /*#define BIND_GLOBAL 1 not used */ 107*1eaf0ac3Slogwang #define BIND_WEAK 2 /* weak binding */ 108*1eaf0ac3Slogwang 109*1eaf0ac3Slogwang #define N_FORMAT "%08x" /* namelist value format; XXX */ 110*1eaf0ac3Slogwang 111*1eaf0ac3Slogwang #endif /* !_SYS_NLIST_AOUT_H_ */ 112