diff options
Diffstat (limited to 'contrib/binutils/include/coff/ecoff.h')
| -rw-r--r-- | contrib/binutils/include/coff/ecoff.h | 421 | 
1 files changed, 0 insertions, 421 deletions
| diff --git a/contrib/binutils/include/coff/ecoff.h b/contrib/binutils/include/coff/ecoff.h deleted file mode 100644 index 9e4202e475763..0000000000000 --- a/contrib/binutils/include/coff/ecoff.h +++ /dev/null @@ -1,421 +0,0 @@ -#ifndef ECOFF_H -#define ECOFF_H - -/* Generic ECOFF support. -   This does not include symbol information, found in sym.h and -   symconst.h.  */ - -/* Mips magic numbers used in filehdr.  MIPS_MAGIC_LITTLE is used on -   little endian machines.  MIPS_MAGIC_BIG is used on big endian -   machines.  Where is MIPS_MAGIC_1 from?  */ -#define MIPS_MAGIC_1 0x0180 -#define MIPS_MAGIC_LITTLE 0x0162 -#define MIPS_MAGIC_BIG 0x0160 - -/* These are the magic numbers used for MIPS code compiled at ISA -   level 2.  */ -#define MIPS_MAGIC_LITTLE2 0x0166 -#define MIPS_MAGIC_BIG2 0x0163 - -/* These are the magic numbers used for MIPS code compiled at ISA -   level 3.  */ -#define MIPS_MAGIC_LITTLE3 0x142 -#define MIPS_MAGIC_BIG3 0x140 - -/* Alpha magic numbers used in filehdr.  */ -#define ALPHA_MAGIC 0x183 -#define ALPHA_MAGIC_BSD 0x185 - -/* Magic numbers used in a.out header.  */ -#define ECOFF_AOUT_OMAGIC 0407	/* not demand paged (ld -N).  */ -#define ECOFF_AOUT_ZMAGIC 0413	/* demand load format, eg normal ld output */ - -/* Names of special sections.  */ -#define _TEXT   ".text" -#define _DATA   ".data" -#define _BSS    ".bss" -#define _RDATA	".rdata" -#define _SDATA	".sdata" -#define _SBSS	".sbss" -#define _LITA	".lita" -#define _LIT4	".lit4" -#define _LIT8	".lit8" -#define _LIB	".lib" -#define _INIT	".init" -#define _FINI	".fini" -#define _PDATA	".pdata" -#define _XDATA	".xdata" -#define _GOT	".got" -#define _HASH	".hash" -#define _DYNSYM	".dynsym" -#define _DYNSTR	".dynstr" -#define _RELDYN	".rel.dyn" -#define _CONFLIC ".conflic" -#define _COMMENT ".comment" -#define _LIBLIST ".liblist" -#define _DYNAMIC ".dynamic" -#define _RCONST	".rconst" - -/* ECOFF uses some additional section flags.  */ -#define STYP_RDATA	     0x100 -#define STYP_SDATA	     0x200 -#define STYP_SBSS	     0x400 -#define STYP_GOT	    0x1000 -#define STYP_DYNAMIC	    0x2000 -#define STYP_DYNSYM	    0x4000 -#define STYP_RELDYN	    0x8000 -#define STYP_DYNSTR	   0x10000 -#define STYP_HASH	   0x20000 -#define STYP_LIBLIST	   0x40000 -#define STYP_CONFLIC	  0x100000 -#define STYP_ECOFF_FINI	 0x1000000 -#define STYP_EXTENDESC	 0x2000000 /* 0x02FFF000 bits => scn type, rest clr */ -#define STYP_LITA	 0x4000000 -#define STYP_LIT8	 0x8000000 -#define STYP_LIT4	0x10000000 -#define STYP_ECOFF_LIB	0x40000000 -#define STYP_ECOFF_INIT 0x80000000 -#define STYP_OTHER_LOAD (STYP_ECOFF_INIT | STYP_ECOFF_FINI) - -/* extended section types */ -#define STYP_COMMENT	 0x2100000 -#define STYP_RCONST	 0x2200000 -#define STYP_XDATA	 0x2400000 -#define STYP_PDATA	 0x2800000 - -/* The linker needs a section to hold small common variables while -   linking.  There is no convenient way to create it when the linker -   needs it, so we always create one for each BFD.  We then avoid -   writing it out.  */ -#define SCOMMON ".scommon" - -/* If the extern bit in a reloc is 1, then r_symndx is an index into -   the external symbol table.  If the extern bit is 0, then r_symndx -   indicates a section, and is one of the following values.  */ -#define RELOC_SECTION_NONE	0 -#define RELOC_SECTION_TEXT	1 -#define RELOC_SECTION_RDATA	2 -#define RELOC_SECTION_DATA	3 -#define RELOC_SECTION_SDATA	4 -#define RELOC_SECTION_SBSS	5 -#define RELOC_SECTION_BSS	6 -#define RELOC_SECTION_INIT	7 -#define RELOC_SECTION_LIT8	8 -#define RELOC_SECTION_LIT4	9 -#define RELOC_SECTION_XDATA    10 -#define RELOC_SECTION_PDATA    11 -#define RELOC_SECTION_FINI     12 -#define RELOC_SECTION_LITA     13 -#define RELOC_SECTION_ABS      14 -#define RELOC_SECTION_RCONST   15 - -#define NUM_RELOC_SECTIONS     16 - -/********************** STABS **********************/ - -/* gcc uses mips-tfile to output type information in special stabs -   entries.  These must match the corresponding definition in -   gcc/config/mips.h.  At some point, these should probably go into a -   shared include file, but currently gcc and gdb do not share any -   directories. */ -#define CODE_MASK 0x8F300 -#define ECOFF_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK) -#define ECOFF_MARK_STAB(code) ((code)+CODE_MASK) -#define ECOFF_UNMARK_STAB(code) ((code)-CODE_MASK) -#define STABS_SYMBOL "@stabs" - -/********************** COFF **********************/ - -/* gcc also uses mips-tfile to output COFF debugging information. -   These are the values it uses when outputting the .type directive. -   These should also be in a shared include file.  */ -#define N_BTMASK	(017) -#define N_TMASK		(060) -#define N_BTSHFT	(4) -#define N_TSHIFT	(2) - -/********************** AUX **********************/ - -/* The auxiliary type information is the same on all known ECOFF -   targets.  I can't see any reason that it would ever change, so I am -   going to gamble and define the external structures here, in the -   target independent ECOFF header file.  The internal forms are -   defined in coff/sym.h, which was originally donated by MIPS -   Computer Systems.  */ - -/* Type information external record */ - -struct tir_ext { -	unsigned char	t_bits1[1]; -	unsigned char	t_tq45[1]; -	unsigned char	t_tq01[1]; -	unsigned char	t_tq23[1]; -}; - -#define	TIR_BITS1_FBITFIELD_BIG		((unsigned int) 0x80) -#define	TIR_BITS1_FBITFIELD_LITTLE	((unsigned int) 0x01) - -#define	TIR_BITS1_CONTINUED_BIG		((unsigned int) 0x40) -#define	TIR_BITS1_CONTINUED_LITTLE	((unsigned int) 0x02) - -#define	TIR_BITS1_BT_BIG		((unsigned int) 0x3F) -#define	TIR_BITS1_BT_SH_BIG		0 -#define	TIR_BITS1_BT_LITTLE		((unsigned int) 0xFC) -#define	TIR_BITS1_BT_SH_LITTLE		2 - -#define	TIR_BITS_TQ4_BIG		((unsigned int) 0xF0) -#define	TIR_BITS_TQ4_SH_BIG		4 -#define	TIR_BITS_TQ5_BIG		((unsigned int) 0x0F) -#define	TIR_BITS_TQ5_SH_BIG		0 -#define	TIR_BITS_TQ4_LITTLE		((unsigned int) 0x0F) -#define	TIR_BITS_TQ4_SH_LITTLE		0 -#define	TIR_BITS_TQ5_LITTLE		((unsigned int) 0xF0) -#define	TIR_BITS_TQ5_SH_LITTLE		4 - -#define	TIR_BITS_TQ0_BIG		((unsigned int) 0xF0) -#define	TIR_BITS_TQ0_SH_BIG		4 -#define	TIR_BITS_TQ1_BIG		((unsigned int) 0x0F) -#define	TIR_BITS_TQ1_SH_BIG		0 -#define	TIR_BITS_TQ0_LITTLE		((unsigned int) 0x0F) -#define	TIR_BITS_TQ0_SH_LITTLE		0 -#define	TIR_BITS_TQ1_LITTLE		((unsigned int) 0xF0) -#define	TIR_BITS_TQ1_SH_LITTLE		4 - -#define	TIR_BITS_TQ2_BIG		((unsigned int) 0xF0) -#define	TIR_BITS_TQ2_SH_BIG		4 -#define	TIR_BITS_TQ3_BIG		((unsigned int) 0x0F) -#define	TIR_BITS_TQ3_SH_BIG		0 -#define	TIR_BITS_TQ2_LITTLE		((unsigned int) 0x0F) -#define	TIR_BITS_TQ2_SH_LITTLE		0 -#define	TIR_BITS_TQ3_LITTLE		((unsigned int) 0xF0) -#define	TIR_BITS_TQ3_SH_LITTLE		4 - -/* Relative symbol external record */ - -struct rndx_ext { -	unsigned char	r_bits[4]; -}; - -#define	RNDX_BITS0_RFD_SH_LEFT_BIG	4 -#define	RNDX_BITS1_RFD_BIG		((unsigned int) 0xF0) -#define	RNDX_BITS1_RFD_SH_BIG		4 - -#define	RNDX_BITS0_RFD_SH_LEFT_LITTLE	0 -#define	RNDX_BITS1_RFD_LITTLE		((unsigned int) 0x0F) -#define	RNDX_BITS1_RFD_SH_LEFT_LITTLE	8 - -#define	RNDX_BITS1_INDEX_BIG		((unsigned int) 0x0F) -#define	RNDX_BITS1_INDEX_SH_LEFT_BIG	16 -#define	RNDX_BITS2_INDEX_SH_LEFT_BIG	8 -#define	RNDX_BITS3_INDEX_SH_LEFT_BIG	0 - -#define	RNDX_BITS1_INDEX_LITTLE		((unsigned int) 0xF0) -#define	RNDX_BITS1_INDEX_SH_LITTLE	4 -#define	RNDX_BITS2_INDEX_SH_LEFT_LITTLE	4 -#define	RNDX_BITS3_INDEX_SH_LEFT_LITTLE	12 - -/* Auxiliary symbol information external record */ - -union aux_ext { -	struct tir_ext	a_ti; -	struct rndx_ext	a_rndx; -	unsigned char	a_dnLow[4]; -	unsigned char	a_dnHigh[4]; -	unsigned char	a_isym[4]; -	unsigned char	a_iss[4]; -	unsigned char	a_width[4]; -	unsigned char	a_count[4]; -}; - -#define AUX_GET_ANY(bigend, ax, field) \ -  ((bigend) ? bfd_getb32 ((ax)->field) : bfd_getl32 ((ax)->field)) - -#define	AUX_GET_DNLOW(bigend, ax)	AUX_GET_ANY ((bigend), (ax), a_dnLow) -#define	AUX_GET_DNHIGH(bigend, ax)	AUX_GET_ANY ((bigend), (ax), a_dnHigh) -#define	AUX_GET_ISYM(bigend, ax)	AUX_GET_ANY ((bigend), (ax), a_isym) -#define AUX_GET_ISS(bigend, ax)		AUX_GET_ANY ((bigend), (ax), a_iss) -#define AUX_GET_WIDTH(bigend, ax)	AUX_GET_ANY ((bigend), (ax), a_width) -#define AUX_GET_COUNT(bigend, ax)	AUX_GET_ANY ((bigend), (ax), a_count) - -#define AUX_PUT_ANY(bigend, val, ax, field) \ -  ((bigend) \ -   ? (bfd_putb32 ((bfd_vma) (val), (ax)->field), 0) \ -   : (bfd_putl32 ((bfd_vma) (val), (ax)->field), 0)) - -#define AUX_PUT_DNLOW(bigend, val, ax) \ -  AUX_PUT_ANY ((bigend), (val), (ax), a_dnLow) -#define AUX_PUT_DNHIGH(bigend, val, ax) \ -  AUX_PUT_ANY ((bigend), (val), (ax), a_dnHigh) -#define AUX_PUT_ISYM(bigend, val, ax) \ -  AUX_PUT_ANY ((bigend), (val), (ax), a_isym) -#define AUX_PUT_ISS(bigend, val, ax) \ -  AUX_PUT_ANY ((bigend), (val), (ax), a_iss) -#define AUX_PUT_WIDTH(bigend, val, ax) \ -  AUX_PUT_ANY ((bigend), (val), (ax), a_width) -#define AUX_PUT_COUNT(bigend, val, ax) \ -  AUX_PUT_ANY ((bigend), (val), (ax), a_count) - -/********************** SYMBOLS **********************/ - -/* For efficiency, gdb deals directly with the unswapped symbolic -   information (that way it only takes the time to swap information -   that it really needs to read).  gdb originally retrieved the -   information directly from the BFD backend information, but that -   strategy, besides being sort of ugly, does not work for MIPS ELF, -   which also uses ECOFF debugging information.  This structure holds -   pointers to the (mostly) unswapped symbolic information.  */ - -struct ecoff_debug_info -{ -  /* The swapped ECOFF symbolic header.  */ -  HDRR symbolic_header; - -  /* Pointers to the unswapped symbolic information.  Note that the -     pointers to external structures point to different sorts of -     information on different ECOFF targets.  The ecoff_debug_swap -     structure provides the sizes of the structures and the functions -     needed to swap the information in and out.  These pointers are -     all pointers to arrays, not single structures.  They will be NULL -     if there are no instances of the relevant structure.  These -     fields are also used by the assembler to output ECOFF debugging -     information.  */ -  unsigned char *line; -  PTR external_dnr;	/* struct dnr_ext */ -  PTR external_pdr;	/* struct pdr_ext */ -  PTR external_sym;	/* struct sym_ext */ -  PTR external_opt;	/* struct opt_ext */ -  union aux_ext *external_aux; -  char *ss; -  char *ssext; -  PTR external_fdr;	/* struct fdr_ext */ -  PTR external_rfd;	/* struct rfd_ext */ -  PTR external_ext;	/* struct ext_ext */ - -  /* These fields are used when linking.  They may disappear at some -     point.  */ -  char *ssext_end; -  PTR external_ext_end; - -  /* When linking, this field holds a mapping from the input FDR -     numbers to the output numbers, and is used when writing out the -     external symbols.  It is NULL if no mapping is required.  */ -  RFDT *ifdmap; - -  /* The swapped FDR information.  Currently this is never NULL, but -     code using this structure should probably double-check in case -     this changes in the future.  This is a pointer to an array, not a -     single structure.  */ -  FDR *fdr; - -  /* When relaxing MIPS embedded PIC code, we may need to adjust -     symbol values when they are output.  This is a linked list of -     structures indicating how values should be adjusted.  There is no -     requirement that the entries be in any order, or that they not -     overlap.  This field is normally NULL, in which case no -     adjustments need to be made.  */ -  struct ecoff_value_adjust *adjust; -}; - -/* This structure describes how to adjust symbol values when -   outputting MIPS embedded PIC code.  These adjustments only apply to -   the internal symbols, as the external symbol values will come from -   the hash table and have already been adjusted.  */ - -struct ecoff_value_adjust -{ -  /* Next entry on adjustment list.  */ -  struct ecoff_value_adjust *next; -  /* Starting VMA of adjustment.  This is the VMA in the ECOFF file, -     not the offset from the start of the section.  Thus it should -     indicate a particular section.  */ -  bfd_vma start; -  /* Ending VMA of adjustment.  */ -  bfd_vma end; -  /* Adjustment.  This should be added to the value of the symbol, or -     FDR.  This is zero for the last entry in the array.  */ -  long adjust; -}; - -/* These structures are used by the ECOFF find_nearest_line function.  */ - -struct ecoff_fdrtab_entry -{ -  /* Base address in .text of this FDR.  */ -  bfd_vma base_addr; -  FDR *fdr; -}; - -struct ecoff_find_line -{ -  /* Allocated memory to hold function and file names.  */ -  char *find_buffer; - -  /* FDR table, sorted by address: */ -  long fdrtab_len; -  struct ecoff_fdrtab_entry *fdrtab; - -  /* Cache entry for most recently found line information.  The sect -     field is NULL if this cache does not contain valid information.  */ -  struct -    { -      asection *sect; -      bfd_vma start; -      bfd_vma stop; -      const char *filename; -      const char *functionname; -      unsigned int line_num; -    } cache; -}; - -/********************** SWAPPING **********************/ - -/* The generic ECOFF code needs to be able to swap debugging -   information in and out in the specific format used by a particular -   ECOFF implementation.  This structure provides the information -   needed to do this.  */ - -struct ecoff_debug_swap -{ -  /* Symbol table magic number.  */ -  int sym_magic; -  /* Alignment of debugging information.  E.g., 4.  */ -  bfd_size_type debug_align; -  /* Sizes of external symbolic information.  */ -  bfd_size_type external_hdr_size; -  bfd_size_type external_dnr_size; -  bfd_size_type external_pdr_size; -  bfd_size_type external_sym_size; -  bfd_size_type external_opt_size; -  bfd_size_type external_fdr_size; -  bfd_size_type external_rfd_size; -  bfd_size_type external_ext_size; -  /* Functions to swap in external symbolic data.  */ -  void (*swap_hdr_in) PARAMS ((bfd *, PTR, HDRR *)); -  void (*swap_dnr_in) PARAMS ((bfd *, PTR, DNR *)); -  void (*swap_pdr_in) PARAMS ((bfd *, PTR, PDR *)); -  void (*swap_sym_in) PARAMS ((bfd *, PTR, SYMR *)); -  void (*swap_opt_in) PARAMS ((bfd *, PTR, OPTR *)); -  void (*swap_fdr_in) PARAMS ((bfd *, PTR, FDR *)); -  void (*swap_rfd_in) PARAMS ((bfd *, PTR, RFDT *)); -  void (*swap_ext_in) PARAMS ((bfd *, PTR, EXTR *)); -  void (*swap_tir_in) PARAMS ((int, const struct tir_ext *, TIR *)); -  void (*swap_rndx_in) PARAMS ((int, const struct rndx_ext *, RNDXR *)); -  /* Functions to swap out external symbolic data.  */ -  void (*swap_hdr_out) PARAMS ((bfd *, const HDRR *, PTR)); -  void (*swap_dnr_out) PARAMS ((bfd *, const DNR *, PTR)); -  void (*swap_pdr_out) PARAMS ((bfd *, const PDR *, PTR)); -  void (*swap_sym_out) PARAMS ((bfd *, const SYMR *, PTR)); -  void (*swap_opt_out) PARAMS ((bfd *, const OPTR *, PTR)); -  void (*swap_fdr_out) PARAMS ((bfd *, const FDR *, PTR)); -  void (*swap_rfd_out) PARAMS ((bfd *, const RFDT *, PTR)); -  void (*swap_ext_out) PARAMS ((bfd *, const EXTR *, PTR)); -  void (*swap_tir_out) PARAMS ((int, const TIR *, struct tir_ext *)); -  void (*swap_rndx_out) PARAMS ((int, const RNDXR *, struct rndx_ext *)); -  /* Function to read symbol data and set up pointers in -     ecoff_debug_info structure.  The section argument is used for -     ELF, not straight ECOFF.  */ -  boolean (*read_debug_info) PARAMS ((bfd *, asection *, -				      struct ecoff_debug_info *)); -}; - -#endif /* ! defined (ECOFF_H) */ | 
