X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fcoff%2Ftic80.h;h=921ee5070c696961fe222a30890609a530b834c6;hb=62e6599087efba193e0156d89ee65fb74fc99cb2;hp=6a677bc939102db27537986b2692be6d12cc800b;hpb=fa803dc60f0bf01297674c41d001798e18ade4dc;p=deliverable%2Fbinutils-gdb.git diff --git a/include/coff/tic80.h b/include/coff/tic80.h index 6a677bc939..921ee5070c 100644 --- a/include/coff/tic80.h +++ b/include/coff/tic80.h @@ -1,57 +1,55 @@ -/*** coff information for TI TMS320C80 (MVP) */ +/* coff information for TI TMS320C80 (MVP) + + Copyright (C) 2001-2019 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 + 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 DO_NOT_DEFINE_FILHDR +#define DO_NOT_DEFINE_SCNHDR +#define L_LNNO_SIZE 2 +#include "coff/external.h" /********************** FILE HEADER **********************/ -struct external_filehdr { - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ - char f_target_id[2]; /* target id (TIc80 specific) */ +struct external_filehdr + { + char f_magic[2]; /* magic number */ + char f_nscns[2]; /* number of sections */ + char f_timdat[4]; /* time & date stamp */ + char f_symptr[4]; /* file pointer to symtab */ + char f_nsyms[4]; /* number of symtab entries */ + char f_opthdr[2]; /* sizeof(optional hdr) */ + char f_flags[2]; /* flags */ + char f_target_id[2];/* target id (TIc80 specific) */ }; - - #define TIC80_ARCH_MAGIC 0x0C1 /* Goes in the file header magic number field */ -#define TIC80MAGIC 0x108 /* Goes in the optional file header magic number field */ - +#define TIC80_TARGET_ID 0x95 /* Goes in the target id field */ #define TIC80BADMAG(x) ((x).f_magic != TIC80_ARCH_MAGIC) #define FILHDR struct external_filehdr #define FILHSZ 22 - -/********************** AOUT "OPTIONAL HEADER" **********************/ - - -typedef struct -{ - char magic[2]; /* type of file */ - char vstamp[2]; /* version stamp */ - char tsize[4]; /* text size in bytes, padded to FW bdry*/ - char dsize[4]; /* initialized data " " */ - char bsize[4]; /* uninitialized data " " */ - char entry[4]; /* entry pt. */ - char text_start[4]; /* base of text used for this file */ - char data_start[4]; /* base of data used for this file */ -} -AOUTHDR; - - -#define AOUTHDRSZ 28 -#define AOUTSZ 28 - - - +#define TIC80_AOUTHDR_MAGIC 0x108 /* Goes in the optional file header magic number field */ /********************** SECTION HEADER **********************/ - -struct external_scnhdr { +struct external_scnhdr +{ char s_name[8]; /* section name */ char s_paddr[4]; /* physical address, aliased s_nlib */ char s_vaddr[4]; /* virtual address */ @@ -66,9 +64,7 @@ struct external_scnhdr { char s_mempage[1]; /* memory page number (TIc80) */ }; -/* - * names of "special" sections - */ +/* Names of "special" sections. */ #define _TEXT ".text" #define _DATA ".data" #define _BSS ".bss" @@ -78,129 +74,26 @@ struct external_scnhdr { #define _STACK ".stack" #define _SYSMEM ".sysmem" - #define SCNHDR struct external_scnhdr #define SCNHSZ 40 - - -/********************** LINE NUMBERS **********************/ - -/* 1 line number entry for every "breakpointable" source line in a section. - * Line numbers are grouped on a per function basis; first entry in a function - * grouping will have l_lnno = 0 and in place of physical address will be the - * symbol table index of the function name. - */ -struct external_lineno { - union { - char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/ - char l_paddr[4]; /* (physical) address of line number */ - } l_addr; - char l_lnno[2]; /* line number */ -}; - -#define GET_LINENO_LNNO(abfd, ext) bfd_h_get_16(abfd, (bfd_byte *) (ext->l_lnno)); -#define PUT_LINENO_LNNO(abfd,val, ext) bfd_h_put_16(abfd,val, (bfd_byte *) (ext->l_lnno)); - -#define LINENO struct external_lineno -#define LINESZ 6 - - -/********************** SYMBOLS **********************/ - -#define E_SYMNMLEN 8 /* # characters in a symbol name */ -#define E_FILNMLEN 14 /* # characters in a file name */ -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -struct external_syment -{ - union { - char e_name[E_SYMNMLEN]; - struct { - char e_zeroes[4]; - char e_offset[4]; - } e; - } e; - char e_value[4]; - char e_scnum[2]; - char e_type[2]; - char e_sclass[1]; - char e_numaux[1]; -}; - - - -#define N_BTMASK (017) -#define N_TMASK (060) -#define N_BTSHFT (4) -#define N_TSHIFT (2) -/* FIXME - need to correlate with TIc80 Code Generation Tools User's Guide, CG:A-25 */ -union external_auxent { - struct { - char x_tagndx[4]; /* str, un, or enum tag indx */ - union { - struct { - char x_lnno[2]; /* declaration line number */ - char x_size[2]; /* str/union/array size */ - } x_lnsz; - char x_fsize[4]; /* size of function */ - } x_misc; - union { - struct { /* if ISFCN, tag, or .bb */ - char x_lnnoptr[4]; /* ptr to fcn line # */ - char x_endndx[4]; /* entry ndx past block end */ - } x_fcn; - struct { /* if ISARY, up to 4 dimen. */ - char x_dimen[E_DIMNUM][2]; - } x_ary; - } x_fcnary; - char x_tvndx[2]; /* tv index */ - } x_sym; - - union { - char x_fname[E_FILNMLEN]; - struct { - char x_zeroes[4]; - char x_offset[4]; - } x_n; - } x_file; - - struct { - char x_scnlen[4]; /* section length */ - char x_nreloc[2]; /* # relocation entries */ - char x_nlinno[2]; /* # line numbers */ - } x_scn; - - struct { - char x_tvfill[4]; /* tv fill value */ - char x_tvlen[2]; /* length of .tv */ - char x_tvran[2][2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ - - -}; - -#define SYMENT struct external_syment -#define SYMESZ 18 -#define AUXENT union external_auxent -#define AUXESZ 18 - - +/* FIXME - need to correlate external_auxent with + TIc80 Code Generation Tools User's Guide, CG:A-25 */ /********************** RELOCATION DIRECTIVES **********************/ /* The external reloc has an offset field, because some of the reloc types on the h8 don't have room in the instruction for the entire - offset - eg the strange jump and high page addressing modes */ + offset - eg the strange jump and high page addressing modes. */ -struct external_reloc { +struct external_reloc +{ char r_vaddr[4]; char r_symndx[4]; char r_reserved[2]; char r_type[2]; }; - #define RELOC struct external_reloc #define RELSZ 12 @@ -217,7 +110,7 @@ struct external_reloc { #define R_PPL15 0x3C /* PP: Local 15 bit offset */ #define R_PPL15W 0x3D /* PP: Local 15 bit offset divided by 4 */ #define R_PPL15H 0x3E /* PP: Local 15 bit offset divided by 2 */ -#define R_PPL16B 0x03 /* PP: Local 16 bit offset for bytes */ +#define R_PPL16B 0x3F /* PP: Local 16 bit offset for bytes */ #define R_PPN15 0x40 /* PP: Global 15 bit negative offset */ #define R_PPN15W 0x41 /* PP: Global 15 bit negative offset divided by 4 */ #define R_PPN15H 0x42 /* PP: Global 15 bit negative offset divided by 2 */ @@ -226,4 +119,5 @@ struct external_reloc { #define R_PPLN15W 0x45 /* PP: Local 15 bit negative offset divided by 4 */ #define R_PPLN15H 0x46 /* PP: Local 15 bit negative offset divided by 2 */ #define R_PPLN16B 0x47 /* PP: Local 16 bit negative byte offset */ +#define R_MPPCR15W 0x4E /* MP: 15 bit PC-relative divided by 4 */ #define R_MPPCR 0x4F /* MP: 32 bit PC-relative divided by 4 */