[gdb/symtab] Fix missing breakpoint location for inlined function
[deliverable/binutils-gdb.git] / include / coff / mips.h
index 594def04ff94f609e0e318feaa259fee69431f63..2b8e0d93d2bd97020406daee1151632b50d95a4f 100644 (file)
@@ -1,36 +1,39 @@
-/* Rudimentary ECOFF support on MIPS machines. 
-   This lacks symbol information, normally provided on MIPS Unix systems
-   in the files <sym.h> and <symconst.h>.  */
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr {
-  unsigned char f_magic[2];    /* magic number                 */
-  unsigned char f_nscns[2];    /* number of sections           */
-  unsigned char f_timdat[4];   /* time & date stamp            */
-  unsigned char f_symptr[4];   /* file pointer to symtab       */
-  unsigned char f_nsyms[4];    /* number of symtab entries     */
-  unsigned char f_opthdr[2];   /* sizeof(optional hdr)         */
-  unsigned char f_flags[2];    /* flags                        */
-};
-
+/* ECOFF support on MIPS machines.
+   coff/ecoff.h must be included before this file.
+   
+   Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
-/* Mips magics */
-#define MIPS_MAGIC_1 0x0180
-#define MIPS_MAGIC_2 0x0162
-#define MIPS_MAGIC_3 0x0160
+   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
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
-#define ECOFFBADMAG(x) (((x).f_magic!=MIPS_MAGIC_1) && \
-                       ((x).f_magic!=MIPS_MAGIC_2) &&\
-                       ((x).f_magic!=MIPS_MAGIC_3))
+#define DO_NOT_DEFINE_AOUTHDR
+#define L_LNNO_SIZE 4
+#include "coff/external.h"
 
+/* Magic numbers are defined in coff/ecoff.h.  */
+#define MIPS_ECOFF_BADMAG(x) (((x).f_magic!=MIPS_MAGIC_1) && \
+                             ((x).f_magic!=MIPS_MAGIC_LITTLE) &&\
+                             ((x).f_magic!=MIPS_MAGIC_BIG) && \
+                             ((x).f_magic!=MIPS_MAGIC_LITTLE2) && \
+                             ((x).f_magic!=MIPS_MAGIC_BIG2) && \
+                             ((x).f_magic!=MIPS_MAGIC_LITTLE3) && \
+                             ((x).f_magic!=MIPS_MAGIC_BIG3))
 
-#define        FILHDR  struct external_filehdr
-#define        FILHSZ  20
 
 /********************** AOUT "OPTIONAL HEADER" **********************/
 
-
 typedef struct external_aouthdr
 {
   unsigned char magic[2];      /* type of file                         */
@@ -41,81 +44,301 @@ typedef struct external_aouthdr
   unsigned char        entry[4];       /* entry pt.                            */
   unsigned char text_start[4]; /* base of text used for this file */
   unsigned char data_start[4]; /* base of data used for this file */
+  unsigned char bss_start[4];  /* base of bss used for this file */
+  unsigned char gprmask[4];    /* ?? */
+  unsigned char cprmask[4][4]; /* ?? */
+  unsigned char gp_value[4];   /* value for gp register */
 } AOUTHDR;
 
 /* compute size of a header */
 
-#define AOUTSZ (sizeof(AOUTHDR))
+#define AOUTSZ 56
+#define AOUTHDRSZ 56
+
+/********************** RELOCATION DIRECTIVES **********************/
+
+struct external_reloc
+  {
+    unsigned char r_vaddr[4];
+    unsigned char r_bits[4];
+  };
+
+#define RELOC struct external_reloc
+#define RELSZ 8
+
+/* MIPS ECOFF uses a packed 8 byte format for relocs.  These constants
+   are used to unpack the r_bits field.  */
+
+#define RELOC_BITS0_SYMNDX_SH_LEFT_BIG         16
+#define RELOC_BITS0_SYMNDX_SH_LEFT_LITTLE      0
+
+#define RELOC_BITS1_SYMNDX_SH_LEFT_BIG         8
+#define RELOC_BITS1_SYMNDX_SH_LEFT_LITTLE      8
+
+#define RELOC_BITS2_SYMNDX_SH_LEFT_BIG         0
+#define RELOC_BITS2_SYMNDX_SH_LEFT_LITTLE      16
+
+/* Originally, ECOFF used four bits for the reloc type and had three
+   reserved bits.  Irix 4 added another bit for the reloc type, which
+   was easy because it was big endian and one of the spare bits became
+   the new most significant bit.  To make this also work for little
+   endian ECOFF, we need to wrap one of the reserved bits around to
+   become the most significant bit of the reloc type.  */
+#define RELOC_BITS3_TYPE_BIG                   0x3E
+#define RELOC_BITS3_TYPE_SH_BIG                        1
+#define RELOC_BITS3_TYPE_LITTLE                        0x78
+#define RELOC_BITS3_TYPE_SH_LITTLE             3
+#define RELOC_BITS3_TYPEHI_LITTLE              0x04
+#define RELOC_BITS3_TYPEHI_SH_LITTLE           2
+
+#define RELOC_BITS3_EXTERN_BIG                 0x01
+#define RELOC_BITS3_EXTERN_LITTLE              0x80
+
+/* The r_type field in a reloc is one of the following values.  I
+   don't know if any other values can appear.  These seem to be all
+   that occur in the Ultrix 4.2 libraries.  */
+#define MIPS_R_IGNORE  0
+#define MIPS_R_REFHALF 1
+#define MIPS_R_REFWORD 2
+#define MIPS_R_JMPADDR 3
+#define MIPS_R_REFHI   4
+#define MIPS_R_REFLO   5
+#define MIPS_R_GPREL   6
+#define MIPS_R_LITERAL 7
+
+/* FIXME: This relocation is used (internally only) to represent branches
+   when assembling.  It should never appear in output files, and  
+   be removed.  (It used to be used for embedded-PIC support.)  */
+#define MIPS_R_PCREL16 12
+
+/********************** STABS **********************/
+
+#define MIPS_IS_STAB ECOFF_IS_STAB
+#define MIPS_MARK_STAB ECOFF_MARK_STAB
+#define MIPS_UNMARK_STAB ECOFF_UNMARK_STAB
 
+/********************** SYMBOLIC INFORMATION **********************/
 
-/********************** SECTION HEADER **********************/
+/* Written by John Gilmore.  */
 
-struct external_scnhdr {
-  unsigned char        s_name[8];      /* section name                 */
-  unsigned char        s_paddr[4];     /* physical address, aliased s_nlib */
-  unsigned char        s_vaddr[4];     /* virtual address              */
-  unsigned char        s_size[4];      /* section size                 */
-  unsigned char        s_scnptr[4];    /* file ptr to raw data for section */
-  unsigned char        s_relptr[4];    /* file ptr to relocation       */
-  unsigned char        s_lnnoptr[4];   /* file ptr to line numbers     */
-  unsigned char        s_nreloc[2];    /* number of relocation entries */
-  unsigned char        s_nlnno[2];     /* number of line number entries*/
-  unsigned char        s_flags[4];     /* flags                        */
+/* ECOFF uses COFF-like section structures, but its own symbol format.
+   This file defines the symbol format in fields whose size and alignment
+   will not vary on different host systems.  */
+
+/* File header as a set of bytes */
+
+struct hdr_ext
+{
+       unsigned char   h_magic[2];
+       unsigned char   h_vstamp[2];
+       unsigned char   h_ilineMax[4];
+       unsigned char   h_cbLine[4];
+       unsigned char   h_cbLineOffset[4];
+       unsigned char   h_idnMax[4];
+       unsigned char   h_cbDnOffset[4];
+       unsigned char   h_ipdMax[4];
+       unsigned char   h_cbPdOffset[4];
+       unsigned char   h_isymMax[4];
+       unsigned char   h_cbSymOffset[4];
+       unsigned char   h_ioptMax[4];
+       unsigned char   h_cbOptOffset[4];
+       unsigned char   h_iauxMax[4];
+       unsigned char   h_cbAuxOffset[4];
+       unsigned char   h_issMax[4];
+       unsigned char   h_cbSsOffset[4];
+       unsigned char   h_issExtMax[4];
+       unsigned char   h_cbSsExtOffset[4];
+       unsigned char   h_ifdMax[4];
+       unsigned char   h_cbFdOffset[4];
+       unsigned char   h_crfd[4];
+       unsigned char   h_cbRfdOffset[4];
+       unsigned char   h_iextMax[4];
+       unsigned char   h_cbExtOffset[4];
 };
 
-#define        SCNHDR  struct external_scnhdr
-#define        SCNHSZ  sizeof(SCNHDR)
-
-/*
- * names of "special" sections
- */
-#define _TEXT   ".text"
-#define _DATA   ".data"
-#define _BSS    ".bss"
-#define _RDATA ".rdata"
-#define _SDATA ".sdata"
-#define _SBSS  ".sbss"
-#define _LIT4  ".lit4"
-#define _LIT8  ".lit8"
-
-#define DEFAULT_DATA_SECTION_ALIGNMENT 4
-#define DEFAULT_BSS_SECTION_ALIGNMENT 4
-#define DEFAULT_TEXT_SECTION_ALIGNMENT 16
-/* For new sections we havn't heard of before */
-#define DEFAULT_SECTION_ALIGNMENT 4
-
-/* MIPS ECOFF uses some additional section types.  */
-#define STYP_RDATA 0x100
-#define STYP_SDATA 0x200
-#define STYP_SBSS 0x400
-#define STYP_LIT8 0x8000000
-#define STYP_LIT4 0x10000000
-
-/* I don't know when this is used.  */
-#define STYP_OTHER_LOAD 0x80000000
+/* File descriptor external record */
 
-/********************** RELOCATION DIRECTIVES **********************/
+struct fdr_ext
+{
+       unsigned char   f_adr[4];
+       unsigned char   f_rss[4];
+       unsigned char   f_issBase[4];
+       unsigned char   f_cbSs[4];
+       unsigned char   f_isymBase[4];
+       unsigned char   f_csym[4];
+       unsigned char   f_ilineBase[4];
+       unsigned char   f_cline[4];
+       unsigned char   f_ioptBase[4];
+       unsigned char   f_copt[4];
+       unsigned char   f_ipdFirst[2];
+       unsigned char   f_cpd[2];
+       unsigned char   f_iauxBase[4];
+       unsigned char   f_caux[4];
+       unsigned char   f_rfdBase[4];
+       unsigned char   f_crfd[4];
+       unsigned char   f_bits1[1];
+       unsigned char   f_bits2[3];
+       unsigned char   f_cbLineOffset[4];
+       unsigned char   f_cbLine[4];
+};
+
+#define        FDR_BITS1_LANG_BIG              0xF8
+#define        FDR_BITS1_LANG_SH_BIG           3
+#define        FDR_BITS1_LANG_LITTLE           0x1F
+#define        FDR_BITS1_LANG_SH_LITTLE        0
+
+#define        FDR_BITS1_FMERGE_BIG            0x04
+#define        FDR_BITS1_FMERGE_LITTLE         0x20
+
+#define        FDR_BITS1_FREADIN_BIG           0x02
+#define        FDR_BITS1_FREADIN_LITTLE        0x40
 
-struct external_reloc {
-  unsigned char r_vaddr[4];
-  unsigned char r_symndx[4];
-  unsigned char r_type[2];
-  unsigned char pad[2];
+#define        FDR_BITS1_FBIGENDIAN_BIG        0x01
+#define        FDR_BITS1_FBIGENDIAN_LITTLE     0x80
+
+#define        FDR_BITS2_GLEVEL_BIG            0xC0
+#define        FDR_BITS2_GLEVEL_SH_BIG         6
+#define        FDR_BITS2_GLEVEL_LITTLE         0x03
+#define        FDR_BITS2_GLEVEL_SH_LITTLE      0
+
+/* We ignore the `reserved' field in bits2. */
+
+/* Procedure descriptor external record */
+
+struct pdr_ext
+{
+       unsigned char   p_adr[4];
+       unsigned char   p_isym[4];
+       unsigned char   p_iline[4];
+       unsigned char   p_regmask[4];
+       unsigned char   p_regoffset[4];
+       unsigned char   p_iopt[4];
+       unsigned char   p_fregmask[4];
+       unsigned char   p_fregoffset[4];
+       unsigned char   p_frameoffset[4];
+       unsigned char   p_framereg[2];
+       unsigned char   p_pcreg[2];
+       unsigned char   p_lnLow[4];
+       unsigned char   p_lnHigh[4];
+       unsigned char   p_cbLineOffset[4];
 };
 
+/* Runtime procedure table */
 
-/* Relevent values for r_type and ecoff.  Would someone please document them */
+struct rpdr_ext
+{
+       unsigned char   p_adr[4];
+       unsigned char   p_regmask[4];
+       unsigned char   p_regoffset[4];
+       unsigned char   p_fregmask[4];
+       unsigned char   p_fregoffset[4];
+       unsigned char   p_frameoffset[4];
+       unsigned char   p_framereg[2];
+       unsigned char   p_pcreg[2];
+       unsigned char   p_irpss[4];
+       unsigned char   p_reserved[4];
+       unsigned char   p_exception_info[4];
+};
 
-#define RELOC struct external_reloc
-#define RELSZ 12
-
-/* 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 MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)
-#define MIPS_MARK_STAB(code) ((code)+CODE_MASK)
-#define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK)
-#define STABS_SYMBOL "@stabs"
+/* Line numbers */
+
+struct line_ext
+{
+       unsigned char   l_line[4];
+};
+
+/* Symbol external record */
+
+struct sym_ext
+{
+       unsigned char   s_iss[4];
+       unsigned char   s_value[4];
+       unsigned char   s_bits1[1];
+       unsigned char   s_bits2[1];
+       unsigned char   s_bits3[1];
+       unsigned char   s_bits4[1];
+};
+
+#define        SYM_BITS1_ST_BIG                0xFC
+#define        SYM_BITS1_ST_SH_BIG             2
+#define        SYM_BITS1_ST_LITTLE             0x3F
+#define        SYM_BITS1_ST_SH_LITTLE          0
+
+#define        SYM_BITS1_SC_BIG                0x03
+#define        SYM_BITS1_SC_SH_LEFT_BIG        3
+#define        SYM_BITS1_SC_LITTLE             0xC0
+#define        SYM_BITS1_SC_SH_LITTLE          6
+
+#define        SYM_BITS2_SC_BIG                0xE0
+#define        SYM_BITS2_SC_SH_BIG             5
+#define        SYM_BITS2_SC_LITTLE             0x07
+#define        SYM_BITS2_SC_SH_LEFT_LITTLE     2
+
+#define        SYM_BITS2_RESERVED_BIG          0x10
+#define        SYM_BITS2_RESERVED_LITTLE       0x08
+
+#define        SYM_BITS2_INDEX_BIG             0x0F
+#define        SYM_BITS2_INDEX_SH_LEFT_BIG     16
+#define        SYM_BITS2_INDEX_LITTLE          0xF0
+#define        SYM_BITS2_INDEX_SH_LITTLE       4
+
+#define        SYM_BITS3_INDEX_SH_LEFT_BIG     8
+#define        SYM_BITS3_INDEX_SH_LEFT_LITTLE  4
+
+#define        SYM_BITS4_INDEX_SH_LEFT_BIG     0
+#define        SYM_BITS4_INDEX_SH_LEFT_LITTLE  12
+
+/* External symbol external record */
+
+struct ext_ext
+{
+       unsigned char   es_bits1[1];
+       unsigned char   es_bits2[1];
+       unsigned char   es_ifd[2];
+       struct  sym_ext es_asym;
+};
+
+#define        EXT_BITS1_JMPTBL_BIG            0x80
+#define        EXT_BITS1_JMPTBL_LITTLE         0x01
+
+#define        EXT_BITS1_COBOL_MAIN_BIG        0x40
+#define        EXT_BITS1_COBOL_MAIN_LITTLE     0x02
+
+#define        EXT_BITS1_WEAKEXT_BIG           0x20
+#define        EXT_BITS1_WEAKEXT_LITTLE        0x04
+
+/* Dense numbers external record */
+
+struct dnr_ext
+{
+       unsigned char   d_rfd[4];
+       unsigned char   d_index[4];
+};
+
+/* Relative file descriptor */
+
+struct rfd_ext
+{
+  unsigned char        rfd[4];
+};
+
+/* Optimizer symbol external record */
+
+struct opt_ext
+{
+  unsigned char o_bits1[1];
+  unsigned char o_bits2[1];
+  unsigned char o_bits3[1];
+  unsigned char o_bits4[1];
+  struct rndx_ext o_rndx;
+  unsigned char o_offset[4];
+};
+
+#define OPT_BITS2_VALUE_SH_LEFT_BIG    16
+#define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0
+
+#define OPT_BITS3_VALUE_SH_LEFT_BIG    8
+#define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8
+
+#define OPT_BITS4_VALUE_SH_LEFT_BIG    0
+#define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16
This page took 0.027885 seconds and 4 git commands to generate.