(root)/
binutils-2.41/
gprofng/
src/
stab.h
       1  /* Copyright (C) 2021-2023 Free Software Foundation, Inc.
       2     Contributed by Oracle.
       3  
       4     This file is part of GNU Binutils.
       5  
       6     This program is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU General Public License as published by
       8     the Free Software Foundation; either version 3, or (at your option)
       9     any later version.
      10  
      11     This program is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14     GNU General Public License for more details.
      15  
      16     You should have received a copy of the GNU General Public License
      17     along with this program; if not, write to the Free Software
      18     Foundation, 51 Franklin Street - Fifth Floor, Boston,
      19     MA 02110-1301, USA.  */
      20  
      21  /*
      22   * This file gives definitions supplementing <a.out.h>
      23   * for debugging symbol table entries.
      24   * These entries must have one of the N_STAB bits on,
      25   * and are subject to relocation according to the masks in <a.out.h>
      26   * on 4.x (stabs not relocated on SVR4).
      27   */
      28  
      29  #ifndef _STAB_H
      30  #define _STAB_H
      31  
      32  /* this file also contains fragments of a.out.h relevant to
      33   * support of stab processing within ELF files
      34   * (when a.out.h is not available)
      35   */
      36  struct stab
      37  {
      38    unsigned n_strx;      /* index into file string table */
      39    unsigned char n_type; /* type flag (N_TEXT,..)  */
      40    char n_other;         /* used by N_SLINE stab */
      41    short n_desc;         /* see stabs documentation */
      42    unsigned n_value;     /* value of symbol (or sdb offset) */
      43  };
      44  
      45  /* patchtypes for N_PATCH stab (n_desc field) */
      46  #define P_BITFIELD          0x1
      47  #define P_SPILL             0x2
      48  #define P_SCOPY             0x3
      49  
      50  /* markers for N_CODETAG stab (n_other field) */
      51  #define CODETAG_BITFIELD    0x1 /* load/store of a bit field */
      52  #define CODETAG_SPILL       0x2 /* spill of registers */
      53  #define CODETAG_SCOPY       0x3 /* structure copy load/store */
      54  #define CODETAG_FSTART      0x4 /* points to first inst of new frame (0==leaf)*/
      55  #define CODETAG_END_CTORS   0x5 /* end of calls to super-class constructors */
      56  /* UNUSED 0x6 DW_ATCF_SUN_branch_target in dwarf, not used in stabs */
      57  #define CODETAG_STACK_PROBE 0x7 /* marks insns which probe the stack memory */
      58  
      59  /*
      60   * Simple values for n_type.
      61   */
      62  #define N_UNDF      0x0     /* undefined */
      63  #define N_ABS       0x2     /* absolute */
      64  #define N_TEXT      0x4     /* text */
      65  #define N_DATA      0x6     /* data */
      66  #define N_BSS       0x8     /* bss */
      67  #define N_COMM      0x12    /* common (internal to ld) */
      68  #define N_FN        0x1f    /* file name symbol */
      69  #define N_EXT       01      /* external bit, or'ed in */
      70  #define N_TYPE      0x1e    /* mask for all the type bits */
      71  
      72  /*
      73   * maximum length of stab string before using continuation stab.
      74   *   (this is just a suggested limit), assembler has no limit.
      75   */
      76  #define MAX_STAB_STR_LEN 250
      77  
      78  /*
      79   * for symbolic debuggers:
      80   */
      81  #define N_GSYM      0x20  /* global symbol: name,,0,type,0 */
      82  #define N_FNAME     0x22  /* procedure name (f77 kludge): name,,0 */
      83  #define N_FUN       0x24  /* procedure: name,,0,linenumber,0 */
      84  #define N_OUTL      0x25  /* outlined func: name,,0,linenumber,0 */
      85  #define N_STSYM     0x26  /* static symbol: name,,0,type,0 or section relative */
      86  #define N_TSTSYM    0x27  /* thread static symbol: Ttdata.data */
      87  #define N_LCSYM     0x28  /* .lcomm symbol: name,,0,type,0 or section relative */
      88  #define N_TLCSYM    0x29  /* thread local symbol: Ttbss.bss */
      89  #define N_MAIN      0x2a  /* name of main routine : name,,0,0,0 */
      90  #define N_ROSYM     0x2c  /* ro_data: name,,0,type,0 or section relative */
      91  #define N_FLSYM     0x2e  /* fragmented data: name,,0,type,0 */
      92  #define N_TFLSYM    0x2f  /* thread fragmented data: name,,0,type,0 */
      93  #define N_PC        0x30  /* global pascal symbol: name,,0,subtype,line */
      94  #define N_CMDLINE   0x34  /* command line info */
      95  #define N_OBJ       0x38  /* object file path or name */
      96  #define N_OPT       0x3c  /* compiler options */
      97  #define N_RSYM      0x40  /* register sym: name,,0,type,register */
      98  #define N_SLINE     0x44  /* src line: 0,,0,linenumber,function relative */
      99  #define N_XLINE     0x45  /* h.o. src line: 0,,0,linenumber>>16,0 */
     100  #define N_ILDPAD    0x4c  /* now used as ild pad stab value=strtab delta
     101  			   * was designed for "function start.end" */
     102  #define N_SSYM      0x60  /* structure elt: name,,0,type,struct_offset */
     103  #define N_ENDM      0x62  /* last stab emitted for object module */
     104  #define N_SO        0x64  /* source file name: name,,0,0,0 */
     105  #define N_MOD       0x66  /* f90 module: name,,0,0,0 */
     106  #define N_EMOD      0x68  /* end of f90 module: name,,0,0,0 */
     107  #define N_READ_MOD  0x6a  /* use of f90 module: name;locallist,,0,0,0 */
     108  #define N_ALIAS     0x6c  /* alias name: name,,0,0,0 */
     109  #define N_LSYM      0x80  /* local sym: name,,0,type,offset */
     110  #define N_BINCL     0x82  /* header file: name,,0,0,0 */
     111  #define N_SOL       0x84  /* #included file name: name,,0,0,0 */
     112  #define N_PSYM      0xa0  /* parameter: name,,0,type,offset */
     113  #define N_EINCL     0xa2  /* end of include file */
     114  #define N_ENTRY     0xa4  /* alternate entry: name,linenumber,0 */
     115  #define N_SINCL     0xa6  /* shared include file */
     116  #define N_LBRAC     0xc0  /* left bracket: 0,,0,nesting level,function relative */
     117  #define N_EXCL      0xc2  /* excluded include file */
     118  #define N_USING     0xc4  /* C++ using command */
     119  #define N_ISYM      0xc6  /* position independent type symbol, internal */
     120  #define N_ESYM      0xc8  /* position independent type symbol, external */
     121  #define N_PATCH     0xd0  /* Instruction to be ignored by run-time checking. */
     122  #define N_CONSTRUCT 0xd2  /* C++ constructor call. */
     123  #define N_DESTRUCT  0xd4  /* C++ destructor call. */
     124  #define N_CODETAG   0xd8  /* Generic code tag */
     125  #define N_FUN_CHILD 0xd9  /* Identifies a child function */
     126  #define N_RBRAC     0xe0  /* right bracket: 0,,0,nesting level,function relative */
     127  #define N_BCOMM     0xe2  /* begin common: name,, */
     128  #define N_TCOMM     0xe3  /* begin task common: name,, */
     129  #define N_ECOMM     0xe4  /* end task_common/common: name,, */
     130  #define N_XCOMM     0xe6  /* excluded common block */
     131  #define N_ECOML     0xe8  /* end common (local name): ,,address */
     132  #define N_WITH      0xea  /* pascal with statement: type,,0,0,offset */
     133  #define N_LENG      0xfe  /* second stab entry with length information */
     134  
     135  /*
     136   * for analyzer (cache profile feedback support)
     137   */
     138  #define N_CPROF     0xf0  /* annotation for cache profile feedback */
     139  
     140  /*
     141   * n_descr values used in N_CPROF stabs.  The n_descr field of
     142   * an N_CPROF stab identifies the type of table whose location
     143   * is defined by the N_CPROF stab.
     144   */
     145  typedef enum n_cprof_instr_type_t
     146  {
     147    N_CPROF_INSTR_TYPE_LOAD = 0,  /* profiled load ops */
     148    N_CPROF_INSTR_TYPE_STORE,     /* profiled store ops */
     149    N_CPROF_INSTR_TYPE_PREFETCH,  /* profiled prefetch ops */
     150    N_CPROF_INSTR_TYPE_BRTARGET,  /* branch target locations */
     151    N_CPROF_INSTR_TYPE_NTYPES     /* number of types */
     152  } n_cprof_instr_type_t;
     153  
     154  /*
     155   * for code browser only
     156   */
     157  #define N_BROWS 0x48  /* path to associated .cb file */
     158  
     159  /*
     160   * for functions -- n_other bits for N_FUN stab
     161   */
     162  #define N_FUN_PURE              (1 << 0)
     163  #define N_FUN_ELEMENTAL         (1 << 1)
     164  #define N_FUN_RECURSIVE         (1 << 2)
     165  #define N_FUN_AMD64_PARMDUMP    (1 << 3)
     166  
     167  /*
     168   * for variables -- n_other bits for N_LSYM, N_GSYM, N_LCSYM, N_STSYM, ...
     169   */
     170  #define N_SYM_OMP_TLS       (1 << 3)
     171  
     172  /*
     173   * Optional language designations for N_SO (n_desc field)
     174   */
     175  #define N_SO_AS             1   /* Assembler  */
     176  #define N_SO_C              2   /* C          */
     177  #define N_SO_ANSI_C         3   /* ANSI C     */
     178  #define N_SO_CC             4   /* C++        */
     179  #define N_SO_FORTRAN        5   /* Fortran 77 */
     180  #define N_SO_FORTRAN77      5   /* Fortran 77 */
     181  #define N_SO_PASCAL         6   /* Pascal     */
     182  #define N_SO_FORTRAN90      7   /* Fortran 90 */
     183  #define N_SO_JAVA           8   /* Java       */
     184  #define N_SO_C99            9   /* C99        */
     185  
     186  /*
     187   * Floating point type values (encoded in "R" type specification string)
     188   */
     189  #define NF_NONE             0   /* Undefined type */
     190  #define NF_SINGLE           1   /* Float IEEE 32 bit floating point */
     191  #define NF_DOUBLE           2   /* Double IEEE 64 bit floating point */
     192  #define NF_COMPLEX          3   /* Complex (2 32bit floats) */
     193  #define NF_COMPLEX16        4   /* Complex (2 64bit doubles) */
     194  #define NF_COMPLEX32        5   /* Complex (2 128bit long doubles) */
     195  #define NF_LDOUBLE          6   /* Long double 128 bit floating point */
     196  #define NF_INTERARITH       7   /* Interval (2 32bit floats) */
     197  #define NF_DINTERARITH      8   /* Interval (2 64bit doubles) */
     198  #define NF_QINTERARITH      9   /* Interval (2 128bit long doubles) */
     199  #define NF_IMAGINARY        10  /* Imaginary (1 32bit floats) */
     200  #define NF_DIMAGINARY       11  /* Imaginary (1 64bit doubles) */
     201  #define NF_QIMAGINARY       12  /* Imaginary (1 128bit long doubles) */
     202  
     203  #endif
     204  
     205