home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gdb-4.16-base.tgz / gdb-4.16-base.tar / fsf / gdb / include / coff / m68k.h < prev    next >
C/C++ Source or Header  |  1996-01-31  |  6KB  |  222 lines

  1. /*** coff information for M68K */
  2.  
  3. #ifndef GNU_COFF_M68K_H
  4. #define GNU_COFF_M68K_H 1
  5.  
  6. /********************** FILE HEADER **********************/
  7.  
  8. struct external_filehdr {
  9.     char f_magic[2];    /* magic number            */
  10.     char f_nscns[2];    /* number of sections        */
  11.     char f_timdat[4];    /* time & date stamp        */
  12.     char f_symptr[4];    /* file pointer to symtab    */
  13.     char f_nsyms[4];    /* number of symtab entries    */
  14.     char f_opthdr[2];    /* sizeof(optional hdr)        */
  15.     char f_flags[2];    /* flags            */
  16. };
  17.  
  18.  
  19. /* Motorola 68000/68008/68010/68020 */
  20. #define    MC68MAGIC    0520
  21. #define MC68KWRMAGIC    0520    /* writeable text segments */
  22. #define    MC68TVMAGIC    0521
  23. #define MC68KROMAGIC    0521    /* readonly shareable text segments */
  24. #define MC68KPGMAGIC    0522    /* demand paged text segments */
  25. #define    M68MAGIC    0210
  26. #define    M68TVMAGIC    0211
  27.  
  28. /* this is the magic of the Bull dpx/2 */
  29. #define MC68KBCSMAGIC    0526
  30.  
  31. /* This is Lynx's all-platform magic number for executables. */
  32.  
  33. #define LYNXCOFFMAGIC    0415
  34.  
  35. #define OMAGIC M68MAGIC
  36.  
  37. /* This intentionally does not include MC68KBCSMAGIC; it only includes
  38.    magic numbers which imply that names do not have underscores.  */
  39. #define M68KBADMAG(x) (((x).f_magic!=MC68MAGIC) && ((x).f_magic!=MC68KWRMAGIC) && ((x).f_magic!=MC68TVMAGIC) && \
  40.   ((x).f_magic!=MC68KROMAGIC) && ((x).f_magic!=MC68KPGMAGIC) && ((x).f_magic!=M68MAGIC) && ((x).f_magic!=M68TVMAGIC) && ((x).f_magic!=LYNXCOFFMAGIC) )
  41.  
  42. /* Magic numbers for the a.out header.  */
  43.  
  44. #define PAGEMAGICEXECSWAPPED  0407 /* executable (swapped) */
  45. #define PAGEMAGICPEXECSWAPPED 0410 /* pure executable (swapped) */
  46. #define PAGEMAGICPEXECTSHLIB  0443 /* pure executable (target shared library) */
  47. #define PAGEMAGICPEXECPAGED   0413 /* pure executable (paged) */
  48.  
  49. #define    FILHDR    struct external_filehdr
  50. #define    FILHSZ    sizeof(FILHDR)
  51.  
  52.  
  53. /********************** AOUT "OPTIONAL HEADER" **********************/
  54.  
  55.  
  56. typedef struct 
  57. {
  58.   char     magic[2];        /* type of file                */
  59.   char    vstamp[2];        /* version stamp            */
  60.   char    tsize[4];        /* text size in bytes, padded to FW bdry*/
  61.   char    dsize[4];        /* initialized data "  "        */
  62.   char    bsize[4];        /* uninitialized data "   "        */
  63.   char    entry[4];        /* entry pt.                */
  64.   char     text_start[4];        /* base of text used for this file */
  65.   char     data_start[4];        /* base of data used for this file */
  66. }
  67. AOUTHDR;
  68.  
  69. #define AOUTSZ (sizeof(AOUTHDR))
  70.  
  71.  
  72.  
  73. /********************** SECTION HEADER **********************/
  74.  
  75.  
  76. struct external_scnhdr {
  77.     char        s_name[8];    /* section name            */
  78.     char        s_paddr[4];    /* physical address, aliased s_nlib */
  79.     char        s_vaddr[4];    /* virtual address        */
  80.     char        s_size[4];    /* section size            */
  81.     char        s_scnptr[4];    /* file ptr to raw data for section */
  82.     char        s_relptr[4];    /* file ptr to relocation    */
  83.     char        s_lnnoptr[4];    /* file ptr to line numbers    */
  84.     char        s_nreloc[2];    /* number of relocation entries    */
  85.     char        s_nlnno[2];    /* number of line number entries*/
  86.     char        s_flags[4];    /* flags            */
  87. };
  88.  
  89. /*
  90.  * names of "special" sections
  91.  */
  92. #define _TEXT    ".text"
  93. #define _DATA    ".data"
  94. #define _BSS    ".bss"
  95. #define _COMMENT ".comment"
  96.  
  97. #define    SCNHDR    struct external_scnhdr
  98. #define    SCNHSZ    sizeof(SCNHDR)
  99.  
  100.  
  101. /********************** LINE NUMBERS **********************/
  102.  
  103. /* 1 line number entry for every "breakpointable" source line in a section.
  104.  * Line numbers are grouped on a per function basis; first entry in a function
  105.  * grouping will have l_lnno = 0 and in place of physical address will be the
  106.  * symbol table index of the function name.
  107.  */
  108. struct external_lineno {
  109.     union {
  110.         char l_symndx[4];    /* function name symbol index, iff l_lnno == 0*/
  111.         char l_paddr[4];    /* (physical) address of line number    */
  112.     } l_addr;
  113.     char l_lnno[2];    /* line number        */
  114. };
  115.  
  116.  
  117. #define    LINENO    struct external_lineno
  118. #define    LINESZ    sizeof(LINENO) 
  119.  
  120.  
  121. /********************** SYMBOLS **********************/
  122.  
  123. #define E_SYMNMLEN    8    /* # characters in a symbol name    */
  124. #define E_FILNMLEN    14    /* # characters in a file name        */
  125. #define E_DIMNUM    4    /* # array dimensions in auxiliary entry */
  126.  
  127. struct external_syment 
  128. {
  129.   union {
  130.     char e_name[E_SYMNMLEN];
  131.     struct {
  132.       char e_zeroes[4];
  133.       char e_offset[4];
  134.     } e;
  135.   } e;
  136.   char e_value[4];
  137.   char e_scnum[2];
  138.   char e_type[2];
  139.   char e_sclass[1];
  140.   char e_numaux[1];
  141. };
  142.  
  143.  
  144.  
  145. #define N_BTMASK    (017)
  146. #define N_TMASK        (060)
  147. #define N_BTSHFT    (4)
  148. #define N_TSHIFT    (2)
  149.   
  150.  
  151. union external_auxent {
  152.     struct {
  153.         char x_tagndx[4];    /* str, un, or enum tag indx */
  154.         union {
  155.             struct {
  156.                 char  x_lnno[2]; /* declaration line number */
  157.                 char  x_size[2]; /* str/union/array size */
  158.             } x_lnsz;
  159.             char x_fsize[4];    /* size of function */
  160.         } x_misc;
  161.         union {
  162.             struct {        /* if ISFCN, tag, or .bb */
  163.                 char x_lnnoptr[4];    /* ptr to fcn line # */
  164.                 char x_endndx[4];    /* entry ndx past block end */
  165.             } x_fcn;
  166.             struct {        /* if ISARY, up to 4 dimen. */
  167.                 char x_dimen[E_DIMNUM][2];
  168.             } x_ary;
  169.         } x_fcnary;
  170.         char x_tvndx[2];        /* tv index */
  171.     } x_sym;
  172.  
  173.     union {
  174.         char x_fname[E_FILNMLEN];
  175.         struct {
  176.             char x_zeroes[4];
  177.             char x_offset[4];
  178.         } x_n;
  179.     } x_file;
  180.  
  181.     struct {
  182.         char x_scnlen[4];            /* section length */
  183.         char x_nreloc[2];    /* # relocation entries */
  184.         char x_nlinno[2];    /* # line numbers */
  185.     } x_scn;
  186.  
  187.         struct {
  188.         char x_tvfill[4];    /* tv fill value */
  189.         char x_tvlen[2];    /* length of .tv */
  190.         char x_tvran[2][2];    /* tv range */
  191.     } x_tv;        /* info about .tv section (in auxent of symbol .tv)) */
  192.  
  193.  
  194. };
  195.  
  196. #define    SYMENT    struct external_syment
  197. #define    SYMESZ    18    
  198. #define    AUXENT    union external_auxent
  199. #define    AUXESZ    18
  200.  
  201.  
  202.  
  203. /********************** RELOCATION DIRECTIVES **********************/
  204.  
  205.  
  206. struct external_reloc {
  207.   char r_vaddr[4];
  208.   char r_symndx[4];
  209.   char r_type[2];
  210. #ifdef M68K_COFF_OFFSET
  211.   char r_offset[4];
  212. #endif
  213.  
  214. };
  215.  
  216.  
  217. #define RELOC struct external_reloc
  218.  
  219. #define RELSZ sizeof(struct external_reloc)
  220.  
  221. #endif /* GNU_COFF_M68K_H */
  222.