Remove redundant defintions of BYTES_IN_WORD and add conditional defintion in

aout64.h.
This commit is contained in:
Nick Clifton 2003-03-06 16:45:42 +00:00
parent 2d36fe5f1f
commit 7eb5191ac3
5 changed files with 149 additions and 156 deletions

View File

@ -1,3 +1,8 @@
2003-03-06 Elias Athanasopoulos <elathan@phys.uoa.gr>
* stabs.c (BYTES_IN_WORD): Remove definition.
* wrstabs.c (BYTES_IN_WORD): Likewise.
2003-03-04 Nick Clifton <nickc@redhat.com>
* nm.c (main): Print a warning message if --size-sort and

View File

@ -35,10 +35,6 @@
#include "debug.h"
#include "budbg.h"
#include "filenames.h"
/* Meaningless definition needs by aout64.h. FIXME. */
#define BYTES_IN_WORD 4
#include "aout/aout64.h"
#include "aout/stab_gnu.h"
@ -269,7 +265,6 @@ parse_number (pp, poverflow)
/* Note that even though strtoul overflowed, it should have set *pp
to the end of the number, which is where we want it. */
if (sizeof (bfd_vma) > sizeof (unsigned long))
{
const char *p;
@ -280,7 +275,6 @@ parse_number (pp, poverflow)
bfd_vma v;
/* Our own version of strtoul, for a bfd_vma. */
p = orig;
neg = FALSE;
@ -346,7 +340,6 @@ parse_number (pp, poverflow)
/* If we get here, the number is too large to represent in a
bfd_vma. */
if (poverflow != NULL)
*poverflow = TRUE;
else
@ -965,7 +958,6 @@ parse_stab_string (dhandle, info, stabtype, desc, value, string)
address on a big endian machine if it is smaller than an int.
We have no way to do that, since we don't really know much
about the target. */
break;
case 'P':
@ -1006,11 +998,10 @@ parse_stab_string (dhandle, info, stabtype, desc, value, string)
/* FIXME: At this point gdb checks to combine pairs of 'p' and
'r' stabs into a single 'P' stab. */
break;
case 'S':
/* Static symbol at top level of file */
/* Static symbol at top level of file. */
dtype = parse_stab_type (dhandle, info, (const char *) NULL, &p,
(debug_type **) NULL);
if (dtype == DEBUG_TYPE_NULL)
@ -1207,11 +1198,9 @@ parse_stab_type (dhandle, info, typename, pp, slotp)
return DEBUG_TYPE_NULL;
if (**pp != '=')
{
/* Type is not being defined here. Either it already
exists, or this is a forward reference to it. */
return stab_find_type (dhandle, info, typenums);
}
/* Type is not being defined here. Either it already
exists, or this is a forward reference to it. */
return stab_find_type (dhandle, info, typenums);
/* Only set the slot if the type is being defined. This means
that the mapping from type numbers to types will only record
@ -1239,10 +1228,8 @@ parse_stab_type (dhandle, info, typename, pp, slotp)
const char *attr;
if (ISDIGIT (*p) || *p == '(' || *p == '-')
{
/* Member type. */
break;
}
/* Member type. */
break;
/* Type attributes. */
attr = p;
@ -1289,7 +1276,6 @@ parse_stab_type (dhandle, info, typename, pp, slotp)
const char *q1, *q2, *p;
/* A cross reference to another type. */
switch (**pp)
{
case 's':
@ -1370,7 +1356,6 @@ parse_stab_type (dhandle, info, typename, pp, slotp)
int xtypenums[2];
/* This type is defined as another type. */
(*pp)--;
hold = *pp;
@ -1753,8 +1738,8 @@ parse_stab_range_type (dhandle, info, typename, pp, typenums)
{
/* gcc will emit range stabs for long long types. Handle this
as a special case. FIXME: This needs to be more general. */
#define LLLOW "01000000000000000000000;"
#define LLHIGH "0777777777777777777777;"
#define LLLOW "01000000000000000000000;"
#define LLHIGH "0777777777777777777777;"
#define ULLHIGH "01777777777777777777777;"
if (index_type == DEBUG_TYPE_NULL)
{

View File

@ -1,5 +1,5 @@
/* wrstabs.c -- Output stabs debugging information
Copyright 1996, 1997, 1998, 2000, 2001, 2002
Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
@ -32,10 +32,6 @@
#include "safe-ctype.h"
#include "debug.h"
#include "budbg.h"
/* Meaningless definition needs by aout64.h. FIXME. */
#define BYTES_IN_WORD 4
#include "aout/aout64.h"
#include "aout/stab_gnu.h"

View File

@ -1,3 +1,7 @@
2003-03-06 Elias Athanasopoulos <elathan@phys.uoa.gr>
* aout64.h (BYTES_IN_WORD): Define if necessary.
2001-09-18 Alan Modra <amodra@bigpond.net.au>
* aout64.h: Formatting fixes.
@ -6,7 +10,7 @@
* hp300hpux.h: Formatting fixes.
(N_DATADDR): Avoid negative unsigned warning.
Mon Apr 3 13:29:08 2000 Hans-Peter Nilsson <hp@axis.com>
2000-04-03 Hans-Peter Nilsson <hp@axis.com>
* aout64.h (RELOC_EXT_BITS_EXTERN_BIG): Wrap definition in #ifndef.
(RELOC_EXT_BITS_EXTERN_LITTLE): Ditto.
@ -20,97 +24,97 @@ Mon Apr 3 13:29:08 2000 Hans-Peter Nilsson <hp@axis.com>
* aout64.h (N_SHARED_LIB): Define as 0 if TEXT_START_ADDR is
defined as 0.
Sun Jun 28 11:33:48 1998 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
1998-06-28 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
* stab.def: Add N_ALIAS from SunPro F77.
Mon Mar 11 12:15:52 1996 Ian Lance Taylor <ian@cygnus.com>
1996-03-11 Ian Lance Taylor <ian@cygnus.com>
* stab.def: Use __define_stab_duplicate rather than __define_stab
for duplicate entries N_BROWS and N_MOD2.
* stab_gnu.h (__define_stab_duplicate): Define before including
stab.def.
Fri Oct 27 17:47:16 1995 Niklas Hallqvist <niklas@appli.se>
1995-10-27 Niklas Hallqvist <niklas@appli.se>
* aout64.h, host.h, hp300hpux.h, sun4.h: Changed PAGE_SIZE to
TARGET_PAGE_SIZE.
Tue Sep 12 12:07:02 1995 Ian Lance Taylor <ian@cygnus.com>
1995-09-12 Ian Lance Taylor <ian@cygnus.com>
* sun4.h (struct internal_sun4_dynamic_link): Change all fields
from long to unsigned long.
Wed Jul 12 00:15:13 1995 Ken Raeburn <raeburn@kr-pc.cygnus.com>
1995-07-12 Ken Raeburn <raeburn@kr-pc.cygnus.com>
* sun4.h (PAGE_SIZE): Undefine before defining.
Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
1994-09-04 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
* aout64.h: Only define QMAGIC if it isn't already defined.
Thu Jun 16 14:22:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
1994-06-16 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* aout64.h (BMAGIC): Define.
Sat Jun 11 16:16:09 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
1994-06-11 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
Add weak symbols as an extension to a.out.
* aout64.h (N_WEAKU, N_WEAKA, N_WEAKT, N_WEAKD, N_WEAKB): Define.
* stab.def: Update symbol value table.
Thu Jun 2 17:13:38 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
1994-06-02 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* sun4.h (EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE): Correct from 28 to
24. Fix up ld_got comment.
Wed Mar 30 00:31:49 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
1994-03-30 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
* dynix3.h: Cleanup, adapt to current bfd version.
Sat Feb 26 10:25:53 1994 Ian Lance Taylor (ian@cygnus.com)
1994-02-26 Ian Lance Taylor (ian@cygnus.com)
* aout64.h: Add casts to avoid warnings from SVR4 cc.
Fri Feb 11 12:56:04 1994 Stan Shebs (shebs@andros.cygnus.com)
1994-02-11 Stan Shebs (shebs@andros.cygnus.com)
* ar.h (ARMAG, ARMAGB, ARFMAG): Change '\n' to '\012', for greater
portability.
Fri Jan 21 00:59:06 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
1994-01-21 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* sun4.h: Added information about SunOS shared libraries.
Fri Jan 7 08:20:13 1994 Jim Kingdon (kingdon@deneb.cygnus.com)
1994-01-07 Jim Kingdon (kingdon@deneb.cygnus.com)
* aout64.h (N_TXTADDR): Add comment regarding OMAGIC and NMAGIC.
Sat Dec 25 14:55:41 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
1993-12-25 Jim Kingdon (kingdon@lioth.cygnus.com)
* aout64.h (N_DATOFF): Don't pad (revert change of 8 Jul 1993).
Tue Nov 16 15:43:46 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
1993-11-16 Jim Kingdon (kingdon@lioth.cygnus.com)
* aout64.h: New macros ZMAGIC_DISK_BLOCK_SIZE and N_DISK_BLOCK_SIZE
for Linux ZMAGIC.
(N_TXTOFF, N_DATOFF): Use them.
Thu Nov 4 00:33:48 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
1993-11-04 Ken Raeburn (raeburn@kr-pc.cygnus.com)
* aout64.h (RELOC_STD_BITS_RELATIVE_LITTLE): Fixed value to match
sun3 system; used to overlap other fields.
(RELOC_STD_BITS_JMPTABLE_LITTLE): Likewise.
Wed Nov 3 13:48:27 1993 David J. Mackenzie (djm@thepub.cygnus.com)
1993-11-03 David J. Mackenzie (djm@thepub.cygnus.com)
* aout64.h (RELOC_STD_BITS_BASEREL_LITTLE): Make it 0x10 (Ken's
suggestion) to avoid conflict with RELOC_STD_BITS_EXTERN_LITTLE.
Fri Oct 29 15:09:52 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
1993-10-29 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* hp300hpux.h (N_SHARED_LIB): Define to be 0.
Mon Sep 13 21:00:56 1993 John Gilmore (gnu@cygnus.com)
1993-09-13 John Gilmore (gnu@cygnus.com)
* ar.h (ARMAP_TIME_OFFSET): Add and describe.
@ -118,30 +122,30 @@ Mon Aug 23 Sean Fagan (sef@cygnus.com)
* aout64.h [ARCH_SIZE != 64]: Allow N_BADMAG to be overridden.
Mon Aug 16 14:30:14 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
1993-08-16 Jim Kingdon (kingdon@lioth.cygnus.com)
* stab_gnu.h: Include aout/stab.def not just stab.def.
Sun Jul 18 21:41:47 1993 Jim Kingdon (kingdon@rtl.cygnus.com)
1993-07-18 Jim Kingdon (kingdon@rtl.cygnus.com)
* dynix3.h: New, for symmetry running dynix.
Thu Jul 8 12:52:22 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
1993-07-08 Jim Kingdon (kingdon@lioth.cygnus.com)
* aout64.h (N_BADMAG): Recognize QMAGIC.
N_TXTOFF, N_TXTADDR, N_TXTSIZE: Special code for QMAGIC.
N_DATOFF: Pad text size if we need to.
Fri Jun 18 19:19:38 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
1993-06-18 Jim Kingdon (kingdon@lioth.cygnus.com)
* stab.def (N_ECOML): Fix comment.
Mon May 31 09:21:30 1993 Jim Kingdon (kingdon@cygnus.com)
1993-05-31 Jim Kingdon (kingdon@cygnus.com)
* stab.def: Remove Solaris information on N_FUN stabstring grammar;
I've transferred it to gdb/doc/stabs.texinfo, where it belongs.
Mon May 10 05:48:43 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
1993-05-10 Ken Raeburn (raeburn@kr-pc.cygnus.com)
* hp300hpux.h: Patch from Glenn Engel for linker problem and
compatibility fix:
@ -151,11 +155,11 @@ Mon May 10 05:48:43 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
(_N_BADMAG): Adjusted.
(N_HEADER_IN_TEXT, N_DATADDR): New macros.
Thu Apr 29 12:07:37 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
1993-04-29 Ken Raeburn (raeburn@deneb.cygnus.com)
* hp300hpux.h: New file from Glenn Engel, glenne@lsid.hp.com.
Tue Apr 27 05:51:04 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
1993-04-27 Ken Raeburn (raeburn@kr-pc.cygnus.com)
* aout64.h (struct external_exec, *MAGIC, N_BADMAG): Don't define
if `external_exec' is already defined as a macro.
@ -164,35 +168,35 @@ Tue Apr 27 05:51:04 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
(struct external_nlist, EXTERNAL_NLIST_SIZE): Don't define if
`external_nlist' is already defined as a macro.
Sat Aug 15 04:23:02 1992 John Gilmore (gnu@cygnus.com)
1992-08-15 John Gilmore (gnu@cygnus.com)
* adobe.h: Add description of a.out.adobe format.
Fri Jul 3 00:36:52 1992 John Gilmore (gnu at cygnus.com)
1992-07-03 John Gilmore (gnu at cygnus.com)
* stab.def: Update more Solaris definitions.
* stab_gnu.h: Add N_SO language types, and Solaris basic float types.
Sun Jun 14 10:53:53 1992 John Gilmore (gnu at cygnus.com)
1992-06-14 John Gilmore (gnu at cygnus.com)
* stab.def: Update descriptions of Solaris-2 stabs; add N_UNDF.
Thu Jun 11 01:12:07 1992 John Gilmore (gnu at cygnus.com)
1992-06-11 John Gilmore (gnu at cygnus.com)
* stab.def: Add N_OBJ and N_OPT from Solaris-2.
Thu Jan 30 18:12:44 1992 John Gilmore (gnu at cygnus.com)
1992-01-30 John Gilmore (gnu at cygnus.com)
* aout64.h: N_TXTSIZE needs some more parentheses.
I don't trust C precedence.
Wed Dec 18 14:32:01 1991 Per Bothner (bothner at cygnus.com)
1991-12-18 Per Bothner (bothner at cygnus.com)
* aout64.h: Move common sunos-specific test
to recognize shared libraries into new macro N_SHARED_LIB.
Use it to simplify & reformat N_TXTADDR, N_TXTOFF, N_TXTSIZE.
Sat Nov 30 20:34:52 1991 Steve Chamberlain (sac at rtl.cygnus.com)
1991-11-30 Steve Chamberlain (sac at rtl.cygnus.com)
* aout64.h, ar.h, encap.h, host.h, hp.h, ranlib.h, reloc.h,
stab.def, stab_gnu.h, sun4.h: All moved from the devo/include

View File

@ -1,6 +1,6 @@
/* `a.out' object-file definitions, including extensions to 64-bit fields
Copyright 2001 Free Software Foundation, Inc.
Copyright 2001, 2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -19,27 +19,31 @@
#ifndef __A_OUT_64_H__
#define __A_OUT_64_H__
/* This is the layout on disk of the 32-bit or 64-bit exec header. */
#ifndef BYTES_IN_WORD
#define BYTES_IN_WORD 4
#endif
/* This is the layout on disk of the 32-bit or 64-bit exec header. */
#ifndef external_exec
struct external_exec
{
bfd_byte e_info[4]; /* magic number and stuff */
bfd_byte e_text[BYTES_IN_WORD]; /* length of text section in bytes */
bfd_byte e_data[BYTES_IN_WORD]; /* length of data section in bytes */
bfd_byte e_bss[BYTES_IN_WORD]; /* length of bss area in bytes */
bfd_byte e_syms[BYTES_IN_WORD]; /* length of symbol table in bytes */
bfd_byte e_entry[BYTES_IN_WORD]; /* start address */
bfd_byte e_trsize[BYTES_IN_WORD]; /* length of text relocation info */
bfd_byte e_drsize[BYTES_IN_WORD]; /* length of data relocation info */
bfd_byte e_info[4]; /* Magic number and stuff. */
bfd_byte e_text[BYTES_IN_WORD]; /* Length of text section in bytes. */
bfd_byte e_data[BYTES_IN_WORD]; /* Length of data section in bytes. */
bfd_byte e_bss[BYTES_IN_WORD]; /* Length of bss area in bytes. */
bfd_byte e_syms[BYTES_IN_WORD]; /* Length of symbol table in bytes. */
bfd_byte e_entry[BYTES_IN_WORD]; /* Start address. */
bfd_byte e_trsize[BYTES_IN_WORD]; /* Length of text relocation info. */
bfd_byte e_drsize[BYTES_IN_WORD]; /* Length of data relocation info. */
};
#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7)
/* Magic numbers for a.out files */
/* Magic numbers for a.out files. */
#if ARCH_SIZE==64
#define OMAGIC 0x1001 /* Code indicating object file */
#define OMAGIC 0x1001 /* Code indicating object file. */
#define ZMAGIC 0x1002 /* Code indicating demand-paged executable. */
#define NMAGIC 0x1003 /* Code indicating pure executable. */
@ -49,7 +53,7 @@ struct external_exec
&& N_MAGIC(x) != NMAGIC \
&& N_MAGIC(x) != ZMAGIC)
#else
#define OMAGIC 0407 /* ...object file or impure executable. */
#define OMAGIC 0407 /* Object file or impure executable. */
#define NMAGIC 0410 /* Code indicating pure executable. */
#define ZMAGIC 0413 /* Code indicating demand-paged executable. */
#define BMAGIC 0415 /* Used by a b.out object. */
@ -125,8 +129,7 @@ struct external_exec
* QMAGIC is always like a ZMAGIC for which N_HEADER_IN_TEXT is true,
and for which the starting address is TARGET_PAGE_SIZE (or should this be
SEGMENT_SIZE?) (TEXT_START_ADDR only applies to ZMAGIC, not to QMAGIC).
*/
SEGMENT_SIZE?) (TEXT_START_ADDR only applies to ZMAGIC, not to QMAGIC). */
/* This macro is only relevant for ZMAGIC files; QMAGIC always has the header
in the text. */
@ -152,12 +155,12 @@ struct external_exec
#ifndef N_TXTADDR
#define N_TXTADDR(x) \
(/* The address of a QMAGIC file is always one page in, */ \
/* with the header in the text. */ \
(/* The address of a QMAGIC file is always one page in, \
with the header in the text. */ \
N_IS_QMAGIC (x) \
? (bfd_vma) TARGET_PAGE_SIZE + EXEC_BYTES_SIZE \
: (N_MAGIC (x) != ZMAGIC \
? (bfd_vma) 0 /* object file or NMAGIC */ \
? (bfd_vma) 0 /* Object file or NMAGIC. */ \
: (N_SHARED_LIB (x) \
? (bfd_vma) 0 \
: (N_HEADER_IN_TEXT (x) \
@ -187,8 +190,8 @@ struct external_exec
: (N_SHARED_LIB (x) \
? 0 \
: (N_HEADER_IN_TEXT (x) \
? EXEC_BYTES_SIZE /* no padding */ \
: ZMAGIC_DISK_BLOCK_SIZE /* a page of padding */)))
? EXEC_BYTES_SIZE /* No padding. */ \
: ZMAGIC_DISK_BLOCK_SIZE /* A page of padding. */)))
#endif
/* Size of the text section. It's always as stated, except that we
offset it to `undo' the adjustment to N_TXTADDR and N_TXTOFF
@ -203,12 +206,12 @@ struct external_exec
: ((N_MAGIC (x) != ZMAGIC || N_SHARED_LIB (x)) \
? (x).a_text \
: (N_HEADER_IN_TEXT (x) \
? (x).a_text - EXEC_BYTES_SIZE /* no padding */ \
: (x).a_text /* a page of padding */ )))
? (x).a_text - EXEC_BYTES_SIZE /* No padding. */ \
: (x).a_text /* A page of padding. */ )))
#endif
/* The address of the data segment in virtual memory.
It is the text segment address, plus text segment size, rounded
up to a N_SEGSIZE boundary for pure or pageable files. */
up to a N_SEGSIZE boundary for pure or pageable files. */
#ifndef N_DATADDR
#define N_DATADDR(x) \
(N_MAGIC (x) == OMAGIC \
@ -235,57 +238,59 @@ struct external_exec
for NMAGIC. */
#ifndef N_DATOFF
#define N_DATOFF(x) ( N_TXTOFF (x) + N_TXTSIZE (x) )
#define N_DATOFF(x) (N_TXTOFF (x) + N_TXTSIZE (x))
#endif
#ifndef N_TRELOFF
#define N_TRELOFF(x) ( N_DATOFF (x) + (x).a_data )
#define N_TRELOFF(x) (N_DATOFF (x) + (x).a_data)
#endif
#ifndef N_DRELOFF
#define N_DRELOFF(x) ( N_TRELOFF (x) + (x).a_trsize )
#define N_DRELOFF(x) (N_TRELOFF (x) + (x).a_trsize)
#endif
#ifndef N_SYMOFF
#define N_SYMOFF(x) ( N_DRELOFF (x) + (x).a_drsize )
#define N_SYMOFF(x) (N_DRELOFF (x) + (x).a_drsize)
#endif
#ifndef N_STROFF
#define N_STROFF(x) ( N_SYMOFF (x) + (x).a_syms )
#define N_STROFF(x) (N_SYMOFF (x) + (x).a_syms)
#endif
/* Symbols */
#ifndef external_nlist
struct external_nlist {
bfd_byte e_strx[BYTES_IN_WORD]; /* index into string table of name */
bfd_byte e_type[1]; /* type of symbol */
bfd_byte e_other[1]; /* misc info (usually empty) */
bfd_byte e_desc[2]; /* description field */
bfd_byte e_value[BYTES_IN_WORD]; /* value of symbol */
struct external_nlist
{
bfd_byte e_strx[BYTES_IN_WORD]; /* Index into string table of name. */
bfd_byte e_type[1]; /* Type of symbol. */
bfd_byte e_other[1]; /* Misc info (usually empty). */
bfd_byte e_desc[2]; /* Description field. */
bfd_byte e_value[BYTES_IN_WORD]; /* Value of symbol. */
};
#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD)
#endif
struct internal_nlist {
unsigned long n_strx; /* index into string table of name */
unsigned char n_type; /* type of symbol */
unsigned char n_other; /* misc info (usually empty) */
unsigned short n_desc; /* description field */
bfd_vma n_value; /* value of symbol */
struct internal_nlist
{
unsigned long n_strx; /* Index into string table of name. */
unsigned char n_type; /* Type of symbol. */
unsigned char n_other; /* Misc info (usually empty). */
unsigned short n_desc; /* Description field. */
bfd_vma n_value; /* Value of symbol. */
};
/* The n_type field is the symbol type, containing: */
#define N_UNDF 0 /* Undefined symbol */
#define N_ABS 2 /* Absolute symbol -- defined at particular addr */
#define N_TEXT 4 /* Text sym -- defined at offset in text seg */
#define N_DATA 6 /* Data sym -- defined at offset in data seg */
#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg */
#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink) */
#define N_FN 0x1f /* File name of .o file */
#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh) */
#define N_UNDF 0 /* Undefined symbol. */
#define N_ABS 2 /* Absolute symbol -- defined at particular addr. */
#define N_TEXT 4 /* Text sym -- defined at offset in text seg. */
#define N_DATA 6 /* Data sym -- defined at offset in data seg. */
#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg. */
#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink). */
#define N_FN 0x1f /* File name of .o file. */
#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh). */
/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT,
N_DATA, or N_BSS. When the low-order bit of other types is set,
(e.g. N_WARNING versus N_FN), they are two different types. */
#define N_EXT 1 /* External symbol (as opposed to local-to-this-file) */
#define N_EXT 1 /* External symbol (as opposed to local-to-this-file). */
#define N_TYPE 0x1e
#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol */
#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol. */
#define N_INDR 0x0a
@ -301,10 +306,10 @@ struct internal_nlist {
in that it can satisfy undefined external references. */
/* These appear as input to LD, in a .o file. */
#define N_SETA 0x14 /* Absolute set element symbol */
#define N_SETT 0x16 /* Text set element symbol */
#define N_SETD 0x18 /* Data set element symbol */
#define N_SETB 0x1A /* Bss set element symbol */
#define N_SETA 0x14 /* Absolute set element symbol. */
#define N_SETT 0x16 /* Text set element symbol. */
#define N_SETD 0x18 /* Data set element symbol. */
#define N_SETB 0x1A /* Bss set element symbol. */
/* This is output from LD. */
#define N_SETV 0x1C /* Pointer to set vector in data area. */
@ -335,18 +340,18 @@ struct internal_nlist {
instructions. Eg, on the 68k, each move instruction can reference
the target with a displacement of 16 or 32 bits. On the sparc, move
instructions use an offset of 14 bits, so the offset is stored in
the reloc field, and the data in the section is ignored.
*/
the reloc field, and the data in the section is ignored. */
/* This structure describes a single relocation to be performed.
The text-relocation section of the file is a vector of these structures,
all of which apply to the text section.
Likewise, the data-relocation section applies to the data section. */
struct reloc_std_external {
bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */
bfd_byte r_index[3]; /* symbol table index of symbol */
bfd_byte r_type[1]; /* relocation type */
struct reloc_std_external
{
bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */
bfd_byte r_index[3]; /* Symbol table index of symbol. */
bfd_byte r_type[1]; /* Relocation type. */
};
#define RELOC_STD_BITS_PCREL_BIG ((unsigned int) 0x80)
@ -369,7 +374,7 @@ struct reloc_std_external {
#define RELOC_STD_BITS_RELATIVE_BIG ((unsigned int) 0x02)
#define RELOC_STD_BITS_RELATIVE_LITTLE ((unsigned int) 0x40)
#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry */
#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry. */
struct reloc_std_internal
{
@ -392,21 +397,22 @@ struct reloc_std_internal
unsigned int r_extern:1;
/* The next three bits are for SunOS shared libraries, and seem to
be undocumented. */
unsigned int r_baserel:1; /* Linkage table relative */
unsigned int r_jmptable:1; /* pc-relative to jump table */
unsigned int r_relative:1; /* "relative relocation" */
unsigned int r_baserel:1; /* Linkage table relative. */
unsigned int r_jmptable:1; /* pc-relative to jump table. */
unsigned int r_relative:1; /* "relative relocation". */
/* unused */
unsigned int r_pad:1; /* Padding -- set to zero */
unsigned int r_pad:1; /* Padding -- set to zero. */
};
/* EXTENDED RELOCS */
/* EXTENDED RELOCS. */
struct reloc_ext_external {
bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */
bfd_byte r_index[3]; /* symbol table index of symbol */
bfd_byte r_type[1]; /* relocation type */
bfd_byte r_addend[BYTES_IN_WORD]; /* datum addend */
struct reloc_ext_external
{
bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */
bfd_byte r_index[3]; /* Symbol table index of symbol. */
bfd_byte r_type[1]; /* Relocation type. */
bfd_byte r_addend[BYTES_IN_WORD]; /* Datum addend. */
};
#ifndef RELOC_EXT_BITS_EXTERN_BIG
@ -433,20 +439,20 @@ struct reloc_ext_external {
#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3
#endif
/* Bytes per relocation entry */
/* Bytes per relocation entry. */
#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD)
enum reloc_type
{
/* simple relocations */
/* Simple relocations. */
RELOC_8, /* data[0:7] = addend + sv */
RELOC_16, /* data[0:15] = addend + sv */
RELOC_32, /* data[0:31] = addend + sv */
/* pc-rel displacement */
/* PC-rel displacement. */
RELOC_DISP8, /* data[0:7] = addend - pc + sv */
RELOC_DISP16, /* data[0:15] = addend - pc + sv */
RELOC_DISP32, /* data[0:31] = addend - pc + sv */
/* Special */
/* Special. */
RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */
RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */
RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */
@ -455,16 +461,16 @@ enum reloc_type
RELOC_LO10, /* data[0:9] = (addend + sv) */
RELOC_SFA_BASE,
RELOC_SFA_OFF13,
/* P.I.C. (base-relative) */
/* P.I.C. (base-relative). */
RELOC_BASE10, /* Not sure - maybe we can do this the */
RELOC_BASE13, /* right way now */
RELOC_BASE22,
/* for some sort of pc-rel P.I.C. (?) */
/* For some sort of pc-rel P.I.C. (?) */
RELOC_PC10,
RELOC_PC22,
/* P.I.C. jump table */
/* P.I.C. jump table. */
RELOC_JMP_TBL,
/* reputedly for shared libraries somehow */
/* Reputedly for shared libraries somehow. */
RELOC_SEGOFF16,
RELOC_GLOB_DAT,
RELOC_JMP_SLOT,
@ -476,13 +482,12 @@ enum reloc_type
RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */
RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */
/* 29K relocation types */
/* 29K relocation types. */
RELOC_JUMPTARG,
RELOC_CONST,
RELOC_CONSTH,
/* All the new ones I can think of, for sparc v9 */
/* All the new ones I can think of, for sparc v9. */
RELOC_64, /* data[0:63] = addend + sv */
RELOC_DISP64, /* data[0:63] = addend - pc + sv */
RELOC_WDISP21, /* data[0:20] = (addend + sv - pc)>>2 */
@ -492,25 +497,23 @@ enum reloc_type
What are the other ones,
Since this is a clean slate, can we throw away the ones we dont
understand ? Should we sort the values ? What about using a
microcode format like the 68k ?
*/
microcode format like the 68k ? */
NO_RELOC
};
struct reloc_internal {
bfd_vma r_address; /* offset of of data to relocate */
long r_index; /* symbol table index of symbol */
enum reloc_type r_type; /* relocation type */
bfd_vma r_addend; /* datum addend */
struct reloc_internal
{
bfd_vma r_address; /* Offset of of data to relocate. */
long r_index; /* Symbol table index of symbol. */
enum reloc_type r_type; /* Relocation type. */
bfd_vma r_addend; /* Datum addend. */
};
/* Q.
Should the length of the string table be 4 bytes or 8 bytes ?
Q.
What about archive indexes ?
*/
What about archive indexes ? */
#endif /* __A_OUT_64_H__ */