/* This file describes the a.out file format Copyright (C) 1987 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. GAS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. GAS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* $Id$ */ #ifdef USE_HP_INC_HDR #include "../binutils/hp-include/a.out.h" #else #ifdef USE_SYSTEM_HDR #include "/usr/include/a.out.h" #else #ifdef USE_HP_HDR /* The `exec' structure and overall layout must be close to HP's when we are running on an HP system, otherwise we will not be able to execute the resulting file. */ struct exec { unsigned short a_machtype; /* machine type */ unsigned short a_magic; /* magic number */ unsigned long a_spare1; unsigned long a_spare2; unsigned long a_text; /* length of text, in bytes */ unsigned long a_data; /* length of data, in bytes */ unsigned long a_bss; /* length of uninitialized data area for file, in bytes */ unsigned long a_trsize; /* length of relocation info for text, in bytes */ unsigned long a_drsize; /* length of relocation info for data, in bytes */ unsigned long a_spare3; /* HP = pascal interface size */ unsigned long a_spare4; /* HP = symbol table size */ unsigned long a_spare5; /* HP = debug name table size */ unsigned long a_entry; /* start address */ unsigned long a_spare6; /* HP = source line table size */ unsigned long a_spare7; /* HP = value table size */ unsigned long a_syms; /* length of symbol table data in file, in bytes */ unsigned long a_spare8; }; #define N_MAGIC(exec) ((exec) . a_magic) #define N_MACHTYPE(exec) ((exec) . a_machtype) #define N_SET_MAGIC(exec, magic) (((exec) . a_magic) = (magic)) #define N_SET_MACHTYPE(exec, machtype) (((exec) . a_machtype) = (machtype)) #define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x))) #define _N_BADMACH(x) \ (((N_MACHTYPE (x)) != HP9000S200_ID) && \ ((N_MACHTYPE (x)) != HP98x6_ID)) #define _N_BADMAG(x) \ (((x).a_magic)!=OMAGIC && ((x).a_magic)!=NMAGIC && ((x).a_magic)!=ZMAGIC) #define HP98x6_ID 0x20A #define HP9000S200_ID 0x20C #else /* A Generic machine. . . */ /* JF I'm not sure where this file came from. I put the permit.text message in it anyway. This file came to me as part of the original VAX assembler, but had no copyright notices in it. */ struct exec { long a_magic; /* number identifies as .o file and gives type of such. */ unsigned a_text; /* length of text, in bytes */ unsigned a_data; /* length of data, in bytes */ unsigned a_bss; /* length of uninitialized data area for file, in bytes */ unsigned a_syms; /* length of symbol table data in file, in bytes */ unsigned a_entry; /* start address */ unsigned a_trsize; /* length of relocation info for text, in bytes */ unsigned a_drsize; /* length of relocation info for data, in bytes */ }; #define N_BADMAG(x) \ (((x).a_magic)!=OMAGIC && ((x).a_magic)!=NMAGIC && ((x).a_magic)!=ZMAGIC) #endif /* From here down is common to both the HP and the generic machine */ #define OMAGIC 0407 #define NMAGIC 0410 #define ZMAGIC 0413 #define N_TXTOFF(x) \ ((x).a_magic == ZMAGIC ? 1024 : sizeof(struct exec)) #define N_SYMOFF(x) \ (N_TXTOFF(x) + (x).a_text + (x).a_data + (x).a_trsize + (x).a_drsize) #define N_STROFF(x) \ (N_SYMOFF(x) + (x).a_syms) struct nlist { union { char *n_name; struct nlist *n_next; long n_strx; } n_un; char n_type; char n_other; short n_desc; unsigned n_value; }; #define N_UNDF 0 #define N_ABS 2 #define N_TEXT 4 #define N_DATA 6 #define N_BSS 8 #define N_FN 31 /* JF: Someone claims this should be 31 instead of 15. I just inherited this file; I didn't write it. Who is right? */ #define N_EXT 1 #define N_TYPE 036 #define N_STAB 0340 struct relocation_info { int r_address; unsigned r_symbolnum:24, r_pcrel:1, r_length:2, r_extern:1, r_bsr:1, /* OVE: used on ns32k based systems, if you want */ r_disp:1, /* OVE: used on ns32k based systems, if you want */ nuthin:2; }; #endif #endif