Annotation of linux/include/a.out.h, revision 1.1

1.1     ! root        1: #ifndef _A_OUT_H
        !             2: #define _A_OUT_H
        !             3: 
        !             4: #define __GNU_EXEC_MACROS__
        !             5: 
        !             6: struct exec {
        !             7:   unsigned long a_magic;       /* Use macros N_MAGIC, etc for access */
        !             8:   unsigned a_text;             /* length of text, in bytes */
        !             9:   unsigned a_data;             /* length of data, in bytes */
        !            10:   unsigned a_bss;              /* length of uninitialized data area for file, in bytes */
        !            11:   unsigned a_syms;             /* length of symbol table data in file, in bytes */
        !            12:   unsigned a_entry;            /* start address */
        !            13:   unsigned a_trsize;           /* length of relocation info for text, in bytes */
        !            14:   unsigned a_drsize;           /* length of relocation info for data, in bytes */
        !            15: };
        !            16: 
        !            17: #ifndef N_MAGIC
        !            18: #define N_MAGIC(exec) ((exec).a_magic)
        !            19: #endif
        !            20: 
        !            21: #ifndef OMAGIC
        !            22: /* Code indicating object file or impure executable.  */
        !            23: #define OMAGIC 0407
        !            24: /* Code indicating pure executable.  */
        !            25: #define NMAGIC 0410
        !            26: /* Code indicating demand-paged executable.  */
        !            27: #define ZMAGIC 0413
        !            28: #endif /* not OMAGIC */
        !            29: 
        !            30: #ifndef N_BADMAG
        !            31: #define N_BADMAG(x)                                    \
        !            32:  (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC         \
        !            33:   && N_MAGIC(x) != ZMAGIC)
        !            34: #endif
        !            35: 
        !            36: #define _N_BADMAG(x)                                   \
        !            37:  (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC         \
        !            38:   && N_MAGIC(x) != ZMAGIC)
        !            39: 
        !            40: #define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec))
        !            41: 
        !            42: #ifndef N_TXTOFF
        !            43: #define N_TXTOFF(x) \
        !            44:  (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec))
        !            45: #endif
        !            46: 
        !            47: #ifndef N_DATOFF
        !            48: #define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
        !            49: #endif
        !            50: 
        !            51: #ifndef N_TRELOFF
        !            52: #define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
        !            53: #endif
        !            54: 
        !            55: #ifndef N_DRELOFF
        !            56: #define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
        !            57: #endif
        !            58: 
        !            59: #ifndef N_SYMOFF
        !            60: #define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
        !            61: #endif
        !            62: 
        !            63: #ifndef N_STROFF
        !            64: #define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
        !            65: #endif
        !            66: 
        !            67: /* Address of text segment in memory after it is loaded.  */
        !            68: #ifndef N_TXTADDR
        !            69: #define N_TXTADDR(x) 0
        !            70: #endif
        !            71: 
        !            72: /* Address of data segment in memory after it is loaded.
        !            73:    Note that it is up to you to define SEGMENT_SIZE
        !            74:    on machines not listed here.  */
        !            75: #if defined(vax) || defined(hp300) || defined(pyr)
        !            76: #define SEGMENT_SIZE PAGE_SIZE
        !            77: #endif
        !            78: #ifdef hp300
        !            79: #define        PAGE_SIZE       4096
        !            80: #endif
        !            81: #ifdef sony
        !            82: #define        SEGMENT_SIZE    0x2000
        !            83: #endif /* Sony.  */
        !            84: #ifdef is68k
        !            85: #define SEGMENT_SIZE 0x20000
        !            86: #endif
        !            87: #if defined(m68k) && defined(PORTAR)
        !            88: #define PAGE_SIZE 0x400
        !            89: #define SEGMENT_SIZE PAGE_SIZE
        !            90: #endif
        !            91: 
        !            92: #define PAGE_SIZE 4096
        !            93: #define SEGMENT_SIZE 1024
        !            94: 
        !            95: #define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
        !            96: 
        !            97: #define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
        !            98: 
        !            99: #ifndef N_DATADDR
        !           100: #define N_DATADDR(x) \
        !           101:     (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \
        !           102:      : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
        !           103: #endif
        !           104: 
        !           105: /* Address of bss segment in memory after it is loaded.  */
        !           106: #ifndef N_BSSADDR
        !           107: #define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
        !           108: #endif
        !           109: 
        !           110: #ifndef N_NLIST_DECLARED
        !           111: struct nlist {
        !           112:   union {
        !           113:     char *n_name;
        !           114:     struct nlist *n_next;
        !           115:     long n_strx;
        !           116:   } n_un;
        !           117:   unsigned char n_type;
        !           118:   char n_other;
        !           119:   short n_desc;
        !           120:   unsigned long n_value;
        !           121: };
        !           122: #endif
        !           123: 
        !           124: #ifndef N_UNDF
        !           125: #define N_UNDF 0
        !           126: #endif
        !           127: #ifndef N_ABS
        !           128: #define N_ABS 2
        !           129: #endif
        !           130: #ifndef N_TEXT
        !           131: #define N_TEXT 4
        !           132: #endif
        !           133: #ifndef N_DATA
        !           134: #define N_DATA 6
        !           135: #endif
        !           136: #ifndef N_BSS
        !           137: #define N_BSS 8
        !           138: #endif
        !           139: #ifndef N_COMM
        !           140: #define N_COMM 18
        !           141: #endif
        !           142: #ifndef N_FN
        !           143: #define N_FN 15
        !           144: #endif
        !           145: 
        !           146: #ifndef N_EXT
        !           147: #define N_EXT 1
        !           148: #endif
        !           149: #ifndef N_TYPE
        !           150: #define N_TYPE 036
        !           151: #endif
        !           152: #ifndef N_STAB
        !           153: #define N_STAB 0340
        !           154: #endif
        !           155: 
        !           156: /* The following type indicates the definition of a symbol as being
        !           157:    an indirect reference to another symbol.  The other symbol
        !           158:    appears as an undefined reference, immediately following this symbol.
        !           159: 
        !           160:    Indirection is asymmetrical.  The other symbol's value will be used
        !           161:    to satisfy requests for the indirect symbol, but not vice versa.
        !           162:    If the other symbol does not have a definition, libraries will
        !           163:    be searched to find a definition.  */
        !           164: #define N_INDR 0xa
        !           165: 
        !           166: /* The following symbols refer to set elements.
        !           167:    All the N_SET[ATDB] symbols with the same name form one set.
        !           168:    Space is allocated for the set in the text section, and each set
        !           169:    element's value is stored into one word of the space.
        !           170:    The first word of the space is the length of the set (number of elements).
        !           171: 
        !           172:    The address of the set is made into an N_SETV symbol
        !           173:    whose name is the same as the name of the set.
        !           174:    This symbol acts like a N_DATA global symbol
        !           175:    in that it can satisfy undefined external references.  */
        !           176: 
        !           177: /* These appear as input to LD, in a .o file.  */
        !           178: #define        N_SETA  0x14            /* Absolute set element symbol */
        !           179: #define        N_SETT  0x16            /* Text set element symbol */
        !           180: #define        N_SETD  0x18            /* Data set element symbol */
        !           181: #define        N_SETB  0x1A            /* Bss set element symbol */
        !           182: 
        !           183: /* This is output from LD.  */
        !           184: #define N_SETV 0x1C            /* Pointer to set vector in data area.  */
        !           185: 
        !           186: #ifndef N_RELOCATION_INFO_DECLARED
        !           187: 
        !           188: /* This structure describes a single relocation to be performed.
        !           189:    The text-relocation section of the file is a vector of these structures,
        !           190:    all of which apply to the text section.
        !           191:    Likewise, the data-relocation section applies to the data section.  */
        !           192: 
        !           193: struct relocation_info
        !           194: {
        !           195:   /* Address (within segment) to be relocated.  */
        !           196:   int r_address;
        !           197:   /* The meaning of r_symbolnum depends on r_extern.  */
        !           198:   unsigned int r_symbolnum:24;
        !           199:   /* Nonzero means value is a pc-relative offset
        !           200:      and it should be relocated for changes in its own address
        !           201:      as well as for changes in the symbol or section specified.  */
        !           202:   unsigned int r_pcrel:1;
        !           203:   /* Length (as exponent of 2) of the field to be relocated.
        !           204:      Thus, a value of 2 indicates 1<<2 bytes.  */
        !           205:   unsigned int r_length:2;
        !           206:   /* 1 => relocate with value of symbol.
        !           207:           r_symbolnum is the index of the symbol
        !           208:          in file's the symbol table.
        !           209:      0 => relocate with the address of a segment.
        !           210:           r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
        !           211:          (the N_EXT bit may be set also, but signifies nothing).  */
        !           212:   unsigned int r_extern:1;
        !           213:   /* Four bits that aren't used, but when writing an object file
        !           214:      it is desirable to clear them.  */
        !           215:   unsigned int r_pad:4;
        !           216: };
        !           217: #endif /* no N_RELOCATION_INFO_DECLARED.  */
        !           218: 
        !           219: 
        !           220: #endif /* __A_OUT_GNU_H__ */

unix.superglobalmegacorp.com

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