133965Sjdp/* This file is aout_gnu.h
233965Sjdp
3218822Sdim   Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 2000, 2002
478828Sobrien   Free Software Foundation, Inc.
533965Sjdp
633965Sjdp   This file is part of GAS, the GNU Assembler.
733965Sjdp
833965Sjdp   GAS is free software; you can redistribute it and/or modify
933965Sjdp   it under the terms of the GNU General Public License as published by
1033965Sjdp   the Free Software Foundation; either version 2, or (at your option)
1133965Sjdp   any later version.
1233965Sjdp
1333965Sjdp   GAS is distributed in the hope that it will be useful,
1433965Sjdp   but WITHOUT ANY WARRANTY; without even the implied warranty of
1533965Sjdp   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1633965Sjdp   GNU General Public License for more details.
1733965Sjdp
1833965Sjdp   You should have received a copy of the GNU General Public License
1933965Sjdp   along with GAS; see the file COPYING.  If not, write to
20218822Sdim   the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
2133965Sjdp
2233965Sjdp#ifndef __A_OUT_GNU_H__
2333965Sjdp#define __A_OUT_GNU_H__
2433965Sjdp
2533965Sjdp/* There are two main flavours of a.out, one which uses the standard
2633965Sjdp   relocations, and one which uses extended relocations.
2733965Sjdp
2833965Sjdp   Today, the extended reloc uses are
29218822Sdim   TC_SPARC
3033965Sjdp
3133965Sjdp   each must define the enum reloc_type
3233965Sjdp
3333965Sjdp*/
3433965Sjdp
35218822Sdim#define USE_EXTENDED_RELOC defined(TC_SPARC)
3633965Sjdp
37218822Sdim#if defined(TC_SPARC)
3833965Sjdpenum reloc_type
3933965Sjdp  {
4033965Sjdp    RELOC_8, RELOC_16, RELOC_32,/* simple relocations */
4133965Sjdp    RELOC_DISP8, RELOC_DISP16, RELOC_DISP32,	/* pc-rel displacement */
4233965Sjdp    RELOC_WDISP30, RELOC_WDISP22,
4333965Sjdp    RELOC_HI22, RELOC_22,
4433965Sjdp    RELOC_13, RELOC_LO10,
4533965Sjdp    RELOC_SFA_BASE, RELOC_SFA_OFF13,
4633965Sjdp    RELOC_BASE10, RELOC_BASE13, RELOC_BASE22,	/* P.I.C. (base-relative) */
4733965Sjdp    RELOC_PC10, RELOC_PC22,	/* for some sort of pc-rel P.I.C. (?) */
4833965Sjdp    RELOC_JMP_TBL,		/* P.I.C. jump table */
4933965Sjdp    RELOC_SEGOFF16,		/* reputedly for shared libraries somehow */
5033965Sjdp    RELOC_GLOB_DAT, RELOC_JMP_SLOT, RELOC_RELATIVE,
5133965Sjdp    RELOC_10, RELOC_11,
5233965Sjdp    RELOC_WDISP2_14,
5333965Sjdp    RELOC_WDISP19,
5433965Sjdp    RELOC_HHI22,
5533965Sjdp    RELOC_HLO10,
5633965Sjdp
5733965Sjdp    /* 29K relocation types */
5833965Sjdp    RELOC_JUMPTARG, RELOC_CONST, RELOC_CONSTH,
5933965Sjdp
6033965Sjdp    RELOC_WDISP14, RELOC_WDISP21,
6133965Sjdp
6233965Sjdp    NO_RELOC
6333965Sjdp  };
6433965Sjdp
65218822Sdim#endif /* TC_SPARC */
6633965Sjdp
6733965Sjdp#define __GNU_EXEC_MACROS__
6833965Sjdp
6933965Sjdp#ifndef __STRUCT_EXEC_OVERRIDE__
7033965Sjdp
7133965Sjdp/* This is the layout on disk of a Unix V7, Berkeley, SunOS, Vax Ultrix
7233965Sjdp   "struct exec".  Don't assume that on this machine, the "struct exec"
7333965Sjdp   will lay out the same sizes or alignments.  */
7433965Sjdp
7533965Sjdpstruct exec_bytes
7633965Sjdp  {
7733965Sjdp    unsigned char a_info[4];
7833965Sjdp    unsigned char a_text[4];
7933965Sjdp    unsigned char a_data[4];
8033965Sjdp    unsigned char a_bss[4];
8133965Sjdp    unsigned char a_syms[4];
8233965Sjdp    unsigned char a_entry[4];
8333965Sjdp    unsigned char a_trsize[4];
8433965Sjdp    unsigned char a_drsize[4];
8533965Sjdp  };
8633965Sjdp
8733965Sjdp/* How big the "struct exec" is on disk */
8833965Sjdp#define	EXEC_BYTES_SIZE	(8 * 4)
8933965Sjdp
9033965Sjdp/* This is the layout in memory of a "struct exec" while we process it.  */
9133965Sjdp
9233965Sjdpstruct exec
9333965Sjdp{
9433965Sjdp  unsigned long a_info;		/* Use macros N_MAGIC, etc for access */
9533965Sjdp  unsigned a_text;		/* length of text, in bytes */
9633965Sjdp  unsigned a_data;		/* length of data, in bytes */
9733965Sjdp  unsigned a_bss;		/* length of uninitialized data area for file, in bytes */
9833965Sjdp  unsigned a_syms;		/* length of symbol table data in file, in bytes */
9933965Sjdp  unsigned a_entry;		/* start address */
10033965Sjdp  unsigned a_trsize;		/* length of relocation info for text, in bytes */
10133965Sjdp  unsigned a_drsize;		/* length of relocation info for data, in bytes */
10233965Sjdp};
10333965Sjdp
10433965Sjdp#endif /* __STRUCT_EXEC_OVERRIDE__ */
10533965Sjdp
10633965Sjdp/* these go in the N_MACHTYPE field */
10733965Sjdp/* These symbols could be defined by code from Suns...punt 'em */
10833965Sjdp#undef M_UNKNOWN
10933965Sjdp#undef M_68010
11033965Sjdp#undef M_68020
11133965Sjdp#undef M_SPARC
11233965Sjdpenum machine_type
11333965Sjdp  {
11433965Sjdp    M_UNKNOWN = 0,
11533965Sjdp    M_68010 = 1,
11633965Sjdp    M_68020 = 2,
11733965Sjdp    M_SPARC = 3,
11833965Sjdp    /* skip a bunch so we don't run into any of sun's numbers */
11933965Sjdp    M_386 = 100,
12033965Sjdp    M_29K = 101,
12133965Sjdp    M_RS6000 = 102,		/* IBM RS/6000 */
122104834Sobrien    M_VAX4K_NETBSD = 150,
12333965Sjdp    /* HP/BSD formats */
12433965Sjdp    M_HP200 = 200,		/* hp200 (68010) BSD binary */
12533965Sjdp    M_HP300 = 300,		/* hp300 (68020+68881) BSD binary */
12633965Sjdp    M_HPUX23 = 0x020C		/* hp200/300 HPUX binary */
12733965Sjdp  };
12833965Sjdp
12933965Sjdp#define N_MAGIC(exec) ((exec).a_info & 0xffff)
13033965Sjdp#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
13133965Sjdp#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
13233965Sjdp#define N_SET_INFO(exec, magic, type, flags) \
13333965Sjdp    ((exec).a_info = ((magic) & 0xffff) \
13433965Sjdp     | (((int)(type) & 0xff) << 16) \
13533965Sjdp     | (((flags) & 0xff) << 24))
13633965Sjdp#define N_SET_MAGIC(exec, magic) \
13733965Sjdp    ((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff)))
13833965Sjdp
13933965Sjdp#define N_SET_MACHTYPE(exec, machtype) \
14033965Sjdp    ((exec).a_info = \
14133965Sjdp     ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
14233965Sjdp
14333965Sjdp#define N_SET_FLAGS(exec, flags) \
14433965Sjdp    ((exec).a_info = \
14533965Sjdp     ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
14633965Sjdp
14733965Sjdp/* Code indicating object file or impure executable.  */
14833965Sjdp#ifndef OMAGIC
14933965Sjdp#define OMAGIC 0407
15033965Sjdp#endif
15133965Sjdp/* Code indicating pure executable.  */
15233965Sjdp#define NMAGIC 0410
15333965Sjdp/* Code indicating demand-paged executable.  */
15433965Sjdp#define ZMAGIC 0413
15533965Sjdp
15633965Sjdp/* Virtual Address of text segment from the a.out file.  For OMAGIC,
15733965Sjdp   (almost always "unlinked .o's" these days), should be zero.
15833965Sjdp   For linked files, should reflect reality if we know it.  */
15933965Sjdp
16033965Sjdp#ifndef N_TXTADDR
16133965Sjdp#define N_TXTADDR(x)	(N_MAGIC(x)==OMAGIC? 0 : TEXT_START_ADDR)
16233965Sjdp#endif
16333965Sjdp
16433965Sjdp#ifndef N_BADMAG
16533965Sjdp#define N_BADMAG(x)	  (N_MAGIC(x) != OMAGIC		\
16633965Sjdp			   && N_MAGIC(x) != NMAGIC		\
16733965Sjdp			   && N_MAGIC(x) != ZMAGIC)
16833965Sjdp#endif
16933965Sjdp
17033965Sjdp/* By default, segment size is constant.  But on some machines, it can
17133965Sjdp   be a function of the a.out header (e.g. machine type).  */
17233965Sjdp#ifndef	N_SEGSIZE
17333965Sjdp#define	N_SEGSIZE(x)	SEGMENT_SIZE
17433965Sjdp#endif
17533965Sjdp
17633965Sjdp/* This complexity is for encapsulated COFF support */
17733965Sjdp#ifndef _N_HDROFF
17833965Sjdp#define _N_HDROFF(x)	(N_SEGSIZE(x) - sizeof (struct exec))
17933965Sjdp#endif
18033965Sjdp
18133965Sjdp#ifndef N_TXTOFF
18233965Sjdp#define N_TXTOFF(x)	(N_MAGIC(x) == ZMAGIC ?	\
18333965Sjdp			 _N_HDROFF((x)) + sizeof (struct exec) :	\
18433965Sjdp			 sizeof (struct exec))
18533965Sjdp#endif
18633965Sjdp
18733965Sjdp#ifndef N_DATOFF
18833965Sjdp#define N_DATOFF(x)	( N_TXTOFF(x) + (x).a_text )
18933965Sjdp#endif
19033965Sjdp
19133965Sjdp#ifndef N_TRELOFF
19233965Sjdp#define N_TRELOFF(x)	( N_DATOFF(x) + (x).a_data )
19333965Sjdp#endif
19433965Sjdp
19533965Sjdp#ifndef N_DRELOFF
19633965Sjdp#define N_DRELOFF(x)	( N_TRELOFF(x) + (x).a_trsize )
19733965Sjdp#endif
19833965Sjdp
19933965Sjdp#ifndef N_SYMOFF
20033965Sjdp#define N_SYMOFF(x)	( N_DRELOFF(x) + (x).a_drsize )
20133965Sjdp#endif
20233965Sjdp
20333965Sjdp#ifndef N_STROFF
20433965Sjdp#define N_STROFF(x)	( N_SYMOFF(x) + (x).a_syms )
20533965Sjdp#endif
20633965Sjdp
20733965Sjdp/* Address of text segment in memory after it is loaded.  */
20833965Sjdp#ifndef N_TXTADDR
20933965Sjdp#define	N_TXTADDR(x)	0
21033965Sjdp#endif
21133965Sjdp
21233965Sjdp#ifndef N_DATADDR
21333965Sjdp#define N_DATADDR(x) \
21433965Sjdp    (N_MAGIC(x)==OMAGIC? (N_TXTADDR(x)+(x).a_text) \
21533965Sjdp     :  (N_SEGSIZE(x) + ((N_TXTADDR(x)+(x).a_text-1) & ~(N_SEGSIZE(x)-1))))
21633965Sjdp#endif
21733965Sjdp
21833965Sjdp/* Address of bss segment in memory after it is loaded.  */
21933965Sjdp#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
22033965Sjdp
22133965Sjdpstruct nlist
22233965Sjdp  {
22333965Sjdp    union
22433965Sjdp      {
22533965Sjdp	char *n_name;
22633965Sjdp	struct nlist *n_next;
22733965Sjdp	long n_strx;
22833965Sjdp      }
22933965Sjdp    n_un;
23033965Sjdp    unsigned char n_type;
23133965Sjdp    char n_other;
23233965Sjdp    short n_desc;
23333965Sjdp    unsigned long n_value;
23433965Sjdp  };
23533965Sjdp
23633965Sjdp#define N_UNDF 0
23733965Sjdp#define N_ABS 2
23833965Sjdp#define N_TEXT 4
23933965Sjdp#define N_DATA 6
24033965Sjdp#define N_BSS 8
24133965Sjdp#define	N_COMM	0x12		/* common (visible in shared lib commons) */
24233965Sjdp#define N_FN 0x1F		/* File name of a .o file */
24333965Sjdp
24433965Sjdp/* Note: N_EXT can only usefully be OR-ed with N_UNDF, N_ABS, N_TEXT,
24533965Sjdp   N_DATA, or N_BSS.  When the low-order bit of other types is set,
24633965Sjdp   (e.g. N_WARNING versus N_FN), they are two different types.  */
24733965Sjdp#define N_EXT 1
24833965Sjdp#define N_TYPE 036
24933965Sjdp#define N_STAB 0340
25033965Sjdp
25133965Sjdp/* The following type indicates the definition of a symbol as being
25233965Sjdp   an indirect reference to another symbol.  The other symbol
25333965Sjdp   appears as an undefined reference, immediately following this symbol.
25433965Sjdp
25533965Sjdp   Indirection is asymmetrical.  The other symbol's value will be used
25633965Sjdp   to satisfy requests for the indirect symbol, but not vice versa.
25733965Sjdp   If the other symbol does not have a definition, libraries will
25833965Sjdp   be searched to find a definition.  */
25933965Sjdp
26033965Sjdp#define N_INDR 0xa
26133965Sjdp
26233965Sjdp/* The following symbols refer to set elements.
26333965Sjdp   All the N_SET[ATDB] symbols with the same name form one set.
26433965Sjdp   Space is allocated for the set in the text section, and each set
26533965Sjdp   element's value is stored into one word of the space.
26633965Sjdp   The first word of the space is the length of the set (number of elements).
26733965Sjdp
26833965Sjdp   The address of the set is made into an N_SETV symbol
26933965Sjdp   whose name is the same as the name of the set.
27033965Sjdp   This symbol acts like a N_DATA global symbol
27133965Sjdp   in that it can satisfy undefined external references.  */
27233965Sjdp
27333965Sjdp/* These appear as input to LD, in a .o file.  */
27433965Sjdp#define	N_SETA	0x14		/* Absolute set element symbol */
27533965Sjdp#define	N_SETT	0x16		/* Text set element symbol */
27633965Sjdp#define	N_SETD	0x18		/* Data set element symbol */
27733965Sjdp#define	N_SETB	0x1A		/* Bss set element symbol */
27833965Sjdp
27933965Sjdp/* This is output from LD.  */
28033965Sjdp#define N_SETV	0x1C		/* Pointer to set vector in data area.  */
28133965Sjdp
28233965Sjdp/* Warning symbol. The text gives a warning message, the next symbol
28333965Sjdp   in the table will be undefined. When the symbol is referenced, the
28433965Sjdp   message is printed.  */
28533965Sjdp
28633965Sjdp#define	N_WARNING 0x1e
28733965Sjdp
28833965Sjdp/* Weak symbols.  These are a GNU extension to the a.out format.  The
28933965Sjdp   semantics are those of ELF weak symbols.  Weak symbols are always
29033965Sjdp   externally visible.  The N_WEAK? values are squeezed into the
29133965Sjdp   available slots.  The value of a N_WEAKU symbol is 0.  The values
29233965Sjdp   of the other types are the definitions.  */
29333965Sjdp#define N_WEAKU	0x0d		/* Weak undefined symbol.  */
29433965Sjdp#define N_WEAKA 0x0e		/* Weak absolute symbol.  */
29533965Sjdp#define N_WEAKT 0x0f		/* Weak text symbol.  */
29633965Sjdp#define N_WEAKD 0x10		/* Weak data symbol.  */
29733965Sjdp#define N_WEAKB 0x11		/* Weak bss symbol.  */
29833965Sjdp
29933965Sjdp/* This structure describes a single relocation to be performed.
30033965Sjdp   The text-relocation section of the file is a vector of these structures,
30133965Sjdp   all of which apply to the text section.
30233965Sjdp   Likewise, the data-relocation section applies to the data section.  */
30333965Sjdp
30433965Sjdp/* The following enum and struct were borrowed from SunOS's
30533965Sjdp   /usr/include/sun4/a.out.h  and extended to handle
30633965Sjdp   other machines.  It is currently used on SPARC and AMD 29000.
30733965Sjdp
30833965Sjdp   reloc_ext_bytes is how it looks on disk.  reloc_info_extended is
30933965Sjdp   how we might process it on a native host.  */
31033965Sjdp#if USE_EXTENDED_RELOC
31133965Sjdp
31233965Sjdpstruct reloc_ext_bytes
31333965Sjdp  {
31433965Sjdp    unsigned char r_address[4];
31533965Sjdp    unsigned char r_index[3];
31633965Sjdp    unsigned char r_bits[1];
31733965Sjdp    unsigned char r_addend[4];
31833965Sjdp  };
31933965Sjdp
32033965Sjdp#define	RELOC_EXT_BITS_EXTERN_BIG	0x80
32133965Sjdp#define	RELOC_EXT_BITS_EXTERN_LITTLE	0x01
32233965Sjdp
32333965Sjdp#define	RELOC_EXT_BITS_TYPE_BIG		0x1F
32433965Sjdp#define	RELOC_EXT_BITS_TYPE_SH_BIG	0
32533965Sjdp#define	RELOC_EXT_BITS_TYPE_LITTLE	0xF8
32633965Sjdp#define	RELOC_EXT_BITS_TYPE_SH_LITTLE	3
32733965Sjdp
32833965Sjdp#define	RELOC_EXT_SIZE	12	/* Bytes per relocation entry */
32933965Sjdp
33033965Sjdpstruct reloc_info_extended
33133965Sjdp{
33233965Sjdp  unsigned long r_address;
33333965Sjdp  unsigned int r_index:24;
33433965Sjdp# define	r_symbolnum  r_index
33533965Sjdp  unsigned r_extern:1;
33633965Sjdp  unsigned:2;
33733965Sjdp  /*  RS/6000 compiler does not support enum bitfield
33833965Sjdp	    enum reloc_type r_type:5; */
33933965Sjdp  enum reloc_type r_type;
34033965Sjdp  long int r_addend;
34133965Sjdp};
34233965Sjdp
34333965Sjdp#else
34433965Sjdp
34533965Sjdp/* The standard, old-fashioned, Berkeley compatible relocation struct */
34633965Sjdp
34733965Sjdp#ifdef TC_I860
34833965Sjdp/* NOTE: three bits max, see struct reloc_info_i860.r_type */
34933965Sjdpenum i860_reloc_type
35033965Sjdp  {
35133965Sjdp    NO_RELOC = 0, BRADDR, LOW0, LOW1, LOW2, LOW3, LOW4, SPLIT0, SPLIT1, SPLIT2, RELOC_32,
35233965Sjdp  };
35333965Sjdp
35433965Sjdptypedef enum i860_reloc_type reloc_type;
35533965Sjdp
35633965Sjdp/* NOTE: two bits max, see reloc_info_i860.r_type */
35733965Sjdpenum highlow_type
35833965Sjdp  {
35933965Sjdp    NO_SPEC = 0, PAIR, HIGH, HIGHADJ,
36033965Sjdp  };
36133965Sjdp
36233965Sjdpstruct reloc_info_i860
36333965Sjdp{
36433965Sjdp  unsigned long r_address;
36533965Sjdp  /*
36633965Sjdp	 * Using bit fields here is a bad idea because the order is not portable. :-(
36733965Sjdp	 */
36833965Sjdp  unsigned int r_symbolnum:24;
36933965Sjdp  unsigned int r_pcrel:1;
37033965Sjdp  unsigned int r_extern:1;
37133965Sjdp  /* combining the two field simplifies the argument passing in "new_fix()" */
37233965Sjdp  /* and is compatible with the existing Sparc #ifdef's */
37333965Sjdp  /* r_type:  highlow_type - bits 5,4; reloc_type - bits 3-0 */
37433965Sjdp  unsigned int r_type:6;
37533965Sjdp  long r_addend;
37633965Sjdp};
37733965Sjdp
37833965Sjdp#endif /* TC_I860 */
37933965Sjdp
38033965Sjdpstruct reloc_std_bytes
38133965Sjdp  {
38233965Sjdp    unsigned char r_address[4];
38333965Sjdp    unsigned char r_index[3];
38433965Sjdp    unsigned char r_bits[1];
38533965Sjdp  };
38633965Sjdp
38733965Sjdp#define	RELOC_STD_BITS_PCREL_BIG	0x80
38833965Sjdp#define	RELOC_STD_BITS_PCREL_LITTLE	0x01
38933965Sjdp
39033965Sjdp#define	RELOC_STD_BITS_LENGTH_BIG	0x60
39133965Sjdp#define	RELOC_STD_BITS_LENGTH_SH_BIG	5	/* To shift to units place */
39233965Sjdp#define	RELOC_STD_BITS_LENGTH_LITTLE	0x06
39333965Sjdp#define	RELOC_STD_BITS_LENGTH_SH_LITTLE	1
39433965Sjdp
39533965Sjdp#define	RELOC_STD_BITS_EXTERN_BIG	0x10
39633965Sjdp#define	RELOC_STD_BITS_EXTERN_LITTLE	0x08
39733965Sjdp
39833965Sjdp#define	RELOC_STD_BITS_BASEREL_BIG	0x08
39933965Sjdp#define	RELOC_STD_BITS_BASEREL_LITTLE	0x08
40033965Sjdp
40133965Sjdp#define	RELOC_STD_BITS_JMPTABLE_BIG	0x04
40233965Sjdp#define	RELOC_STD_BITS_JMPTABLE_LITTLE	0x04
40333965Sjdp
40433965Sjdp#define	RELOC_STD_BITS_RELATIVE_BIG	0x02
40533965Sjdp#define	RELOC_STD_BITS_RELATIVE_LITTLE	0x02
40633965Sjdp
40733965Sjdp#define	RELOC_STD_SIZE	8	/* Bytes per relocation entry */
40833965Sjdp
40933965Sjdp#endif /* USE_EXTENDED_RELOC */
41033965Sjdp
41133965Sjdp#ifndef CUSTOM_RELOC_FORMAT
41233965Sjdpstruct relocation_info
41333965Sjdp{
41433965Sjdp  /* Address (within segment) to be relocated.  */
41533965Sjdp  int r_address;
41633965Sjdp  /* The meaning of r_symbolnum depends on r_extern.  */
41733965Sjdp  unsigned int r_symbolnum:24;
41833965Sjdp  /* Nonzero means value is a pc-relative offset
41933965Sjdp	   and it should be relocated for changes in its own address
42033965Sjdp	   as well as for changes in the symbol or section specified.  */
42133965Sjdp  unsigned int r_pcrel:1;
42233965Sjdp  /* Length (as exponent of 2) of the field to be relocated.
42333965Sjdp	   Thus, a value of 2 indicates 1<<2 bytes.  */
42433965Sjdp  unsigned int r_length:2;
42533965Sjdp  /* 1 => relocate with value of symbol.
42633965Sjdp	   r_symbolnum is the index of the symbol
42733965Sjdp	   in file's the symbol table.
42833965Sjdp	   0 => relocate with the address of a segment.
42933965Sjdp	   r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
43033965Sjdp	   (the N_EXT bit may be set also, but signifies nothing).  */
43133965Sjdp  unsigned int r_extern:1;
43233965Sjdp  /* The next three bits are for SunOS shared libraries, and seem to
43333965Sjdp	   be undocumented.  */
43433965Sjdp#ifdef TC_NS32K
43533965Sjdp  unsigned int r_bsr:1;
43633965Sjdp  unsigned int r_disp:2;
43733965Sjdp#else
43833965Sjdp  unsigned int r_baserel:1;	/* Linkage table relative */
43933965Sjdp  unsigned int r_jmptable:1;	/* pc-relative to jump table */
44033965Sjdp  unsigned int r_relative:1;	/* "relative relocation" */
44133965Sjdp#endif /* TC_NS32K */
44233965Sjdp  /* unused */
44333965Sjdp  unsigned int r_pad:1;		/* Padding -- set to zero */
44433965Sjdp};
44533965Sjdp
44633965Sjdp#endif /* CUSTOM_RELOC_FORMAT */
44733965Sjdp
44833965Sjdp#endif /* __A_OUT_GNU_H__ */
44933965Sjdp
45033965Sjdp/* end of aout_gnu.h */
451