From: Ian Lance Taylor Date: Fri, 8 Jan 1993 21:27:06 +0000 (+0000) Subject: Fri Jan 8 16:19:26 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) X-Git-Tag: gdb-4_18~20381 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=57115f09a8154282502633d616fe9b695b5409ce;p=platform%2Fupstream%2Fbinutils.git Fri Jan 8 16:19:26 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * ecoff-ext.h: Added prototypes for ECOFF swapping functions. * internal.h (internal_scnhdr): Always provide s_align field, not just on i960. (internal_reloc): Always provide r_size field, not just on RS/6000. * mips.h (_RDATA, _SDATA, _SBSS, _LIT4, _LIT8, STYP_RDATA, STYP_SDATA, STYP_SBSS, STYP_LIT4, STYP_LIT8): Defined. (CODE_MASK, MIPS_IS_STAB, MIPS_MARK_STAB, MIPS_UNMARK_STAB, STABS_SYMBOL): Moved in from gdb/mipsread.c. --- diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog index 4acc7b3..50985ce 100644 --- a/include/coff/ChangeLog +++ b/include/coff/ChangeLog @@ -1,3 +1,42 @@ +Fri Jan 8 16:19:26 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) + + * ecoff-ext.h: Added prototypes for ECOFF swapping functions. + * internal.h (internal_scnhdr): Always provide s_align field, not + just on i960. + (internal_reloc): Always provide r_size field, not just on + RS/6000. + * mips.h (_RDATA, _SDATA, _SBSS, _LIT4, _LIT8, STYP_RDATA, + STYP_SDATA, STYP_SBSS, STYP_LIT4, STYP_LIT8): Defined. + (CODE_MASK, MIPS_IS_STAB, MIPS_MARK_STAB, MIPS_UNMARK_STAB, + STABS_SYMBOL): Moved in from gdb/mipsread.c. + +Wed Jan 6 14:01:46 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) + + * i386.h, we32k.h: removed STYP_* defines, since they duplicated + those in internal.h. + +Tue Dec 29 15:40:07 1992 Ian Lance Taylor (ian@cygnus.com) + + * i386.h: define I386AIXMAGIC for Danbury AIX PS/2 compiler. + +Sat Dec 12 16:07:57 1992 Ian Lance Taylor (ian@cygnus.com) + + * i386.h: don't define BTYPE, ISPTR, ISFCN, ISARY, DECREF: they + are defined in internal.h. + +Thu Nov 12 09:52:01 1992 Steve Chamberlain (sac@thepub.cygnus.com) + + * internal.h: (internal_reloc): r_offset is now a long. + * z8k.h: slight comment enhancement + +Wed Sep 30 07:46:08 1992 Steve Chamberlain (sac@thepub.cygnus.com) + + * internal.h: changed z8k reloc types + +Fri Aug 28 10:16:31 1992 Brendan Kehoe (brendan@cygnus.com) + + * we32k.h: new file + Thu Aug 27 13:00:01 1992 Brendan Kehoe (brendan@cygnus.com) * symconst.h: comment out cruft at the end of #endif diff --git a/include/coff/ecoff-ext.h b/include/coff/ecoff-ext.h index b3074cc..bce6765 100644 --- a/include/coff/ecoff-ext.h +++ b/include/coff/ecoff-ext.h @@ -278,8 +278,8 @@ union aux_ext { }; /* FIXME! These are copied from ../bfd/libbfd.h */ -PROTO (bfd_vma, _do_getb32, (unsigned char *addr)); -PROTO (bfd_vma, _do_getl32, (unsigned char *addr)); +extern bfd_vma _do_getb32 PARAMS ((unsigned char *addr)); +extern bfd_vma _do_getl32 PARAMS ((unsigned char *addr)); #define AUX_GET_DNLOW(bigend, ax) (bigend? _do_getb32 ((ax)->a_dnLow): \ _do_getl32 ((ax)->a_dnLow)) @@ -299,3 +299,15 @@ PROTO (bfd_vma, _do_getl32, (unsigned char *addr)); struct rfd_ext { unsigned char rfd[4]; }; + +/* Prototypes for the swapping functions. These require that sym.h be + included before this file. */ +extern void ecoff_swap_hdr_in PARAMS ((bfd *, struct hdr_ext *, HDRR *)); +extern void ecoff_swap_fdr_in PARAMS ((bfd *, struct fdr_ext *, FDR *)); +extern void ecoff_swap_pdr_in PARAMS ((bfd *, struct pdr_ext *, PDR *)); +extern void ecoff_swap_sym_in PARAMS ((bfd *, struct sym_ext *, SYMR *)); +extern void ecoff_swap_ext_in PARAMS ((bfd *, struct ext_ext *, EXTR *)); +extern void ecoff_swap_tir_in PARAMS ((int bigend, struct tir_ext *, TIR *)); +extern void ecoff_swap_rndx_in PARAMS ((int bigend, struct rndx_ext *, + RNDXR *)); +extern void ecoff_swap_rfd_in PARAMS ((bfd *, struct rfd_ext *, RFDT *)); diff --git a/include/coff/internal.h b/include/coff/internal.h index be1316a..10a39fe 100644 --- a/include/coff/internal.h +++ b/include/coff/internal.h @@ -4,20 +4,20 @@ /* First, make "signed char" work, even on old compilers. */ #ifndef signed #ifndef __STDC__ -#define signed /**/ +#define signed /**/ #endif #endif /********************** FILE HEADER **********************/ -struct internal_filehdr +struct internal_filehdr { - unsigned short f_magic; /* magic number */ - unsigned short f_nscns; /* number of sections */ - long f_timdat; /* time & date stamp */ - long f_symptr; /* file pointer to symtab */ - long f_nsyms; /* number of symtab entries */ - unsigned short f_opthdr; /* sizeof(optional hdr) */ - unsigned short f_flags; /* flags */ + unsigned short f_magic; /* magic number */ + unsigned short f_nscns; /* number of sections */ + long f_timdat; /* time & date stamp */ + long f_symptr; /* file pointer to symtab */ + long f_nsyms; /* number of symtab entries */ + unsigned short f_opthdr; /* sizeof(optional hdr) */ + unsigned short f_flags; /* flags */ }; /* Bits for f_flags: @@ -43,31 +43,32 @@ struct internal_filehdr #define F_SHROBJ (0x2000) /********************** AOUT "OPTIONAL HEADER" **********************/ -struct internal_aouthdr { - short magic; /* type of file */ - short vstamp; /* version stamp */ - unsigned long tsize; /* text size in bytes, padded to FW bdry*/ - unsigned long dsize; /* initialized data " " */ - unsigned long bsize; /* uninitialized data " " */ - unsigned long entry; /* entry pt. */ - unsigned long text_start; /* base of text used for this file */ - unsigned long data_start; /* base of data used for this file */ - - /* i960 stuff */ - unsigned long tagentries; /* number of tag entries to follow */ - - /* RS/6000 stuff */ - unsigned long o_toc; /* address of TOC */ - short o_snentry; /* section number for entry point */ - short o_sntext; /* section number for text */ - short o_sndata; /* section number for data */ - short o_sntoc; /* section number for toc */ - short o_snloader; /* section number for loader section */ - short o_snbss; /* section number for bss */ - short o_algntext; /* max alignment for text */ - short o_algndata; /* max alignment for data */ - short o_modtype; /* Module type field, 1R,RE,RO */ - unsigned long o_maxstack; /* max stack size allowed. */ +struct internal_aouthdr +{ + short magic; /* type of file */ + short vstamp; /* version stamp */ + unsigned long tsize; /* text size in bytes, padded to FW bdry*/ + unsigned long dsize; /* initialized data " " */ + unsigned long bsize; /* uninitialized data " " */ + unsigned long entry; /* entry pt. */ + unsigned long text_start; /* base of text used for this file */ + unsigned long data_start; /* base of data used for this file */ + + /* i960 stuff */ + unsigned long tagentries; /* number of tag entries to follow */ + + /* RS/6000 stuff */ + unsigned long o_toc; /* address of TOC */ + short o_snentry; /* section number for entry point */ + short o_sntext; /* section number for text */ + short o_sndata; /* section number for data */ + short o_sntoc; /* section number for toc */ + short o_snloader; /* section number for loader section */ + short o_snbss; /* section number for bss */ + short o_algntext; /* max alignment for text */ + short o_algndata; /* max alignment for data */ + short o_modtype; /* Module type field, 1R,RE,RO */ + unsigned long o_maxstack; /* max stack size allowed. */ }; /********************** STORAGE CLASSES **********************/ @@ -102,25 +103,25 @@ struct internal_aouthdr { #define C_ALIAS 105 /* duplicate tag */ #define C_HIDDEN 106 /* ext symbol in dmert public lib */ - /* New storage classes for 80960 */ - + /* New storage classes for 80960 */ + /* C_LEAFPROC is obsolete. Use C_LEAFEXT or C_LEAFSTAT */ #define C_LEAFPROC 108 /* Leaf procedure, "call" via BAL */ #define C_SCALL 107 /* Procedure reachable via system call */ #define C_LEAFEXT 108 /* External leaf */ -#define C_LEAFSTAT 113 /* Static leaf */ +#define C_LEAFSTAT 113 /* Static leaf */ #define C_OPTVAR 109 /* Optimized variable */ #define C_DEFINE 110 /* Preprocessor #define */ #define C_PRAGMA 111 /* Advice to compiler or linker */ #define C_SEGMENT 112 /* 80960 segment name */ - /* New storage classes for RS/6000 */ -#define C_HIDEXT 107 /* Un-named external symbol */ -#define C_BINCL 108 /* Marks beginning of include file */ -#define C_EINCL 109 /* Marks ending of include file */ + /* New storage classes for RS/6000 */ +#define C_HIDEXT 107 /* Un-named external symbol */ +#define C_BINCL 108 /* Marks beginning of include file */ +#define C_EINCL 109 /* Marks ending of include file */ - /* storage classes for stab symbols for RS/6000 */ + /* storage classes for stab symbols for RS/6000 */ #define C_GSYM ((signed char)0x80) #define C_LSYM ((signed char)0x81) #define C_PSYM ((signed char)0x82) @@ -138,46 +139,48 @@ struct internal_aouthdr { #define C_ESTAT ((signed char)0x90) /********************** SECTION HEADER **********************/ -struct internal_scnhdr { - char s_name[8]; /* section name */ - long s_paddr; /* physical address, aliased s_nlib */ - long s_vaddr; /* virtual address */ - long s_size; /* section size */ - long s_scnptr; /* file ptr to raw data for section */ - long s_relptr; /* file ptr to relocation */ - long s_lnnoptr; /* file ptr to line numbers */ - unsigned long s_nreloc; /* number of relocation entries */ - unsigned long s_nlnno; /* number of line number entries*/ - long s_flags; /* flags */ -#ifdef I960 - long s_align; -#endif +struct internal_scnhdr +{ + char s_name[8]; /* section name */ + long s_paddr; /* physical address, aliased s_nlib */ + long s_vaddr; /* virtual address */ + long s_size; /* section size */ + long s_scnptr; /* file ptr to raw data for section */ + long s_relptr; /* file ptr to relocation */ + long s_lnnoptr; /* file ptr to line numbers */ + unsigned long s_nreloc; /* number of relocation entries */ + unsigned long s_nlnno; /* number of line number entries*/ + long s_flags; /* flags */ + long s_align; /* used on I960 */ }; - /* * s_flags "type" */ -#define STYP_REG (0x0000) /* "regular": allocated, relocated, loaded */ -#define STYP_DSECT (0x0001) /* "dummy": relocated only*/ -#define STYP_NOLOAD (0x0002) /* "noload": allocated, relocated, not loaded */ -#define STYP_GROUP (0x0004) /* "grouped": formed of input sections */ -#define STYP_PAD (0x0008) /* "padding": not allocated, not relocated, loaded */ -#define STYP_COPY (0x0010) /* "copy": for decision function used by field update; not allocated, not relocated, - loaded; reloc & lineno entries processed normally */ -#define STYP_TEXT (0x0020) /* section contains text only */ -#define S_SHRSEG (0x0020) /* In 3b Update files (output of ogen), sections which appear in SHARED segments of the Pfile - will have the S_SHRSEG flag set by ogen, to inform dufr that updating 1 copy of the proc. will - update all process invocations. */ -#define STYP_DATA (0x0040) /* section contains data only */ -#define STYP_BSS (0x0080) /* section contains bss only */ -#define S_NEWFCN (0x0100) /* In a minimal file or an update file, a new function (as compared with a replaced function) */ -#define STYP_INFO (0x0200) /* comment: not allocated not relocated, not loaded */ -#define STYP_OVER (0x0400) /* overlay: relocated not allocated or loaded */ -#define STYP_LIB (0x0800) /* for .lib: same as INFO */ -#define STYP_MERGE (0x2000) /* merge section -- combines with text, data or bss sections only */ -#define STYP_REVERSE_PAD (0x4000) /* section will be padded with no-op instructions wherever padding is necessary and there is a - word of contiguous bytes beginning on a word boundary. */ +#define STYP_REG (0x0000) /* "regular": allocated, relocated, loaded */ +#define STYP_DSECT (0x0001) /* "dummy": relocated only*/ +#define STYP_NOLOAD (0x0002) /* "noload": allocated, relocated, not loaded */ +#define STYP_GROUP (0x0004) /* "grouped": formed of input sections */ +#define STYP_PAD (0x0008) /* "padding": not allocated, not relocated, loaded */ +#define STYP_COPY (0x0010) /* "copy": for decision function used by field update; not allocated, not relocated, + loaded; reloc & lineno entries processed normally */ +#define STYP_TEXT (0x0020) /* section contains text only */ +#define S_SHRSEG (0x0020) /* In 3b Update files (output of ogen), sections which appear in SHARED segments of the Pfile + will have the S_SHRSEG flag set by ogen, to inform dufr that updating 1 copy of the proc. will + update all process invocations. */ +#define STYP_DATA (0x0040) /* section contains data only */ +#define STYP_BSS (0x0080) /* section contains bss only */ +#define S_NEWFCN (0x0100) /* In a minimal file or an update file, a new function (as compared with a replaced function) */ +#define STYP_INFO (0x0200) /* comment: not allocated not relocated, not loaded */ +#define STYP_OVER (0x0400) /* overlay: relocated not allocated or loaded */ +#define STYP_LIB (0x0800) /* for .lib: same as INFO */ +#define STYP_MERGE (0x2000) /* merge section -- combines with text, data or bss sections only */ +#define STYP_REVERSE_PAD (0x4000) /* section will be padded with no-op instructions wherever padding is necessary and there is a + + word of contiguous bytes + beginning on a word boundary. */ + +#define STYP_LIT 0x8020 /* Literal data (like STYP_TEXT) */ /********************** LINE NUMBERS **********************/ /* 1 line number entry for every "breakpointable" source line in a section. @@ -186,37 +189,42 @@ struct internal_scnhdr { * symbol table index of the function name. */ -struct internal_lineno { - union { - long l_symndx; /* function name symbol index, iff l_lnno == 0*/ - long l_paddr; /* (physical) address of line number */ - } l_addr; - unsigned long l_lnno; /* line number */ +struct internal_lineno +{ + union + { + long l_symndx; /* function name symbol index, iff l_lnno == 0*/ + long l_paddr; /* (physical) address of line number */ + } l_addr; + unsigned long l_lnno; /* line number */ }; - /********************** SYMBOLS **********************/ #define SYMNMLEN 8 /* # characters in a symbol name */ #define FILNMLEN 14 /* # characters in a file name */ #define DIMNUM 4 /* # array dimensions in auxiliary entry */ -struct internal_syment { - union { - char _n_name[SYMNMLEN]; /* old COFF version */ - struct { - long _n_zeroes; /* new == 0 */ - long _n_offset; /* offset into string table */ - } _n_n; - char *_n_nptr[2]; /* allows for overlaying */ - } _n; - long n_value; /* value of symbol */ - short n_scnum; /* section number */ - unsigned short n_flags; /* copy of flags from filhdr */ - unsigned short n_type; /* type and derived type */ - signed char n_sclass; /* storage class */ - char n_numaux; /* number of aux. entries */ +struct internal_syment +{ + union + { + char _n_name[SYMNMLEN]; /* old COFF version */ + struct + { + long _n_zeroes; /* new == 0 */ + long _n_offset; /* offset into string table */ + } _n_n; + char *_n_nptr[2]; /* allows for overlaying */ + } _n; + long n_value; /* value of symbol */ + short n_scnum; /* section number */ + unsigned short n_flags; /* copy of flags from filhdr */ + unsigned short n_type; /* type and derived type */ + signed char n_sclass; /* storage class */ + char n_numaux; /* number of aux. entries */ }; + #define n_name _n._n_name #define n_zeroes _n._n_n._n_zeroes #define n_offset _n._n_n._n_offset @@ -225,11 +233,11 @@ struct internal_syment { /* Relocatable symbols have number of the section in which they are defined, or one of the following: */ -#define N_UNDEF ((short)0) /* undefined symbol */ -#define N_ABS ((short)-1) /* value of symbol is absolute */ -#define N_DEBUG ((short)-2) /* debugging symbol -- value is meaningless */ -#define N_TV ((short)-3) /* indicates symbol needs preload transfer vector */ -#define P_TV ((short)-4) /* indicates symbol needs postload transfer vector*/ +#define N_UNDEF ((short)0) /* undefined symbol */ +#define N_ABS ((short)-1) /* value of symbol is absolute */ +#define N_DEBUG ((short)-2) /* debugging symbol -- value is meaningless */ +#define N_TV ((short)-3) /* indicates symbol needs preload transfer vector */ +#define P_TV ((short)-4) /* indicates symbol needs postload transfer vector*/ /* * Type of a symbol, in low N bits of the word @@ -269,140 +277,152 @@ struct internal_syment { #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK)) -union internal_auxent +union internal_auxent { - struct { + struct + { - union { + union + { long l; /* str, un, or enum tag indx */ struct coff_ptr_struct *p; - } x_tagndx; + } x_tagndx; - union { - struct { + union + { + struct + { unsigned short x_lnno; /* declaration line number */ unsigned short x_size; /* str/union/array size */ - } x_lnsz; + } x_lnsz; long x_fsize; /* size of function */ - } x_misc; + } x_misc; - union { - struct { /* if ISFCN, tag, or .bb */ + union + { + struct + { /* if ISFCN, tag, or .bb */ long x_lnnoptr; /* ptr to fcn line # */ - union { /* entry ndx past block end */ - long l; + union + { /* entry ndx past block end */ + long l; struct coff_ptr_struct *p; - } x_endndx; - } x_fcn; + } x_endndx; + } x_fcn; - struct { /* if ISARY, up to 4 dimen. */ + struct + { /* if ISARY, up to 4 dimen. */ unsigned short x_dimen[DIMNUM]; - } x_ary; - } x_fcnary; + } x_ary; + } x_fcnary; unsigned short x_tvndx; /* tv index */ - } x_sym; + } x_sym; - union { + union + { char x_fname[FILNMLEN]; - struct { + struct + { long x_zeroes; long x_offset; - } x_n; - } x_file; + } x_n; + } x_file; - struct { + struct + { long x_scnlen; /* section length */ unsigned short x_nreloc; /* # relocation entries */ unsigned short x_nlinno; /* # line numbers */ - } x_scn; + } x_scn; - struct { - long x_tvfill; /* tv fill value */ - unsigned short x_tvlen; /* length of .tv */ - unsigned short x_tvran[2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ + struct + { + long x_tvfill; /* tv fill value */ + unsigned short x_tvlen; /* length of .tv */ + unsigned short x_tvran[2]; /* tv range */ + } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ /****************************************** * RS/6000-specific auxent - last auxent for every external symbol ******************************************/ - struct { - long x_scnlen; /* csect length */ - long x_parmhash; /* parm type hash index */ - unsigned short x_snhash; /* sect num with parm hash */ - unsigned char x_smtyp; /* symbol align and type */ - /* 0-4 - Log 2 of alignment */ - /* 5-7 - symbol type */ - unsigned char x_smclas; /* storage mapping class */ - long x_stab; /* dbx stab info index */ - unsigned short x_snstab; /* sect num with dbx stab */ - } x_csect; /* csect definition information */ + struct + { + long x_scnlen; /* csect length */ + long x_parmhash; /* parm type hash index */ + unsigned short x_snhash; /* sect num with parm hash */ + unsigned char x_smtyp; /* symbol align and type */ + /* 0-4 - Log 2 of alignment */ + /* 5-7 - symbol type */ + unsigned char x_smclas; /* storage mapping class */ + long x_stab; /* dbx stab info index */ + unsigned short x_snstab; /* sect num with dbx stab */ + } x_csect; /* csect definition information */ /* x_smtyp values: */ #define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */ #define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type */ /* Symbol type values: */ -#define XTY_ER 0 /* External reference */ -#define XTY_SD 1 /* Csect definition */ -#define XTY_LD 2 /* Label definition */ -#define XTY_CM 3 /* .BSS */ -#define XTY_EM 4 /* Error message */ -#define XTY_US 5 /* "Reserved for internal use" */ +#define XTY_ER 0 /* External reference */ +#define XTY_SD 1 /* Csect definition */ +#define XTY_LD 2 /* Label definition */ +#define XTY_CM 3 /* .BSS */ +#define XTY_EM 4 /* Error message */ +#define XTY_US 5 /* "Reserved for internal use" */ /* x_smclas values: */ -#define XMC_PR 0 /* Read-only program code */ -#define XMC_RO 1 /* Read-only constant */ -#define XMC_DB 2 /* Read-only debug dictionary table */ -#define XMC_TC 3 /* Read-write general TOC entry */ -#define XMC_UA 4 /* Read-write unclassified */ -#define XMC_RW 5 /* Read-write data */ -#define XMC_GL 6 /* Read-only global linkage */ -#define XMC_XO 7 /* Read-only extended operation (simulated insn) */ -#define XMC_SV 8 /* Read-only supervisor call */ -#define XMC_BS 9 /* Read-write BSS */ -#define XMC_DS 10 /* Read-write descriptor csect */ -#define XMC_UC 11 /* Read-write unnamed Fortran common */ -#define XMC_TI 12 /* Read-only traceback index csect */ -#define XMC_TB 13 /* Read-only traceback table csect */ +#define XMC_PR 0 /* Read-only program code */ +#define XMC_RO 1 /* Read-only constant */ +#define XMC_DB 2 /* Read-only debug dictionary table */ +#define XMC_TC 3 /* Read-write general TOC entry */ +#define XMC_UA 4 /* Read-write unclassified */ +#define XMC_RW 5 /* Read-write data */ +#define XMC_GL 6 /* Read-only global linkage */ +#define XMC_XO 7 /* Read-only extended operation (simulated insn) */ +#define XMC_SV 8 /* Read-only supervisor call */ +#define XMC_BS 9 /* Read-write BSS */ +#define XMC_DS 10 /* Read-write descriptor csect */ +#define XMC_UC 11 /* Read-write unnamed Fortran common */ +#define XMC_TI 12 /* Read-only traceback index csect */ +#define XMC_TB 13 /* Read-only traceback table csect */ /* 14 ??? */ -#define XMC_TC0 15 /* Read-write TOC anchor for TOC addressability */ +#define XMC_TC0 15 /* Read-write TOC anchor for TOC addressability */ /****************************************** * I960-specific *2nd* aux. entry formats ******************************************/ - struct { + struct + { /* This is a very old typo that keeps getting propagated. */ #define x_stdindx x_stindx long x_stindx; /* sys. table entry */ - } x_sc; /* system call entry */ + } x_sc; /* system call entry */ - struct { + struct + { unsigned long x_balntry; /* BAL entry point */ - } x_bal; /* BAL-callable function */ + } x_bal; /* BAL-callable function */ - struct { - unsigned long x_timestamp; /* time stamp */ - char x_idstring[20]; /* producer identity string */ - } x_ident; /* Producer ident info */ + struct + { + unsigned long x_timestamp; /* time stamp */ + char x_idstring[20]; /* producer identity string */ + } x_ident; /* Producer ident info */ }; /********************** RELOCATION DIRECTIVES **********************/ -struct internal_reloc +struct internal_reloc { - long r_vaddr; /* Virtual address of reference */ - long r_symndx; /* Index into symbol table */ - unsigned short r_type; /* Relocation type */ - -#if RS6000COFF_C - unsigned char r_size; -#endif - - unsigned short r_offset; + long r_vaddr; /* Virtual address of reference */ + long r_symndx; /* Index into symbol table */ + unsigned short r_type; /* Relocation type */ + unsigned char r_size; /* Used on RS/6000 */ + unsigned long r_offset; }; @@ -435,27 +455,24 @@ struct internal_reloc #define R_GETPA (0x1e) #define R_TAGWORD (0x1f) #define R_JUMPTARG 0x20 /* strange 29k 00xx00xx reloc */ -#define R_MOVB1 0x41 /* Special h8 16bit or 8 bit reloc for mov.b */ -#define R_MOVB2 0x42 /* Special h8 opcode for 8bit which could - be 16 */ -#define R_JMP1 0x43 /* Special h8 16bit jmp which could be - pcrel */ -#define R_JMP2 0x44 /* a branch which used to be a jmp */ +#define R_MOVB1 0x41 /* Special h8 16bit or 8 bit reloc for mov.b */ +#define R_MOVB2 0x42 /* Special h8 opcode for 8bit which could + be 16 */ +#define R_JMP1 0x43 /* Special h8 16bit jmp which could be + pcrel */ +#define R_JMP2 0x44 /* a branch which used to be a jmp */ #define R_RELLONG_NEG 0x45 /* Z8k modes */ -#define R_DA 0x01 /* Absolute direct address */ -#define R_CALL 0x02 /* Absolute address which could be a callr */ -#define R_JP 0x03 /* Absolute address which could be a jp */ -#define R_REL16 0x04 /* 16 bit PC rel */ - -#define R_CALLR 0x05 /* callr 12 bit disp */ -#define R_JR 0x06 /* jr 8 bit disp */ -#define R_SEG 0x10 /* set if in segmented mode */ - -#define R_IMM16 0x20 /* 16 bit abs */ -#define R_IMM32 0x21 /* 32 bit abs */ -#define R_IMM8 0x22 /* 8 bit abs */ -#define R_IMM4L 0x23 /* low nibble */ -#define R_IMM4H 0x24 /* high nibble */ +#define R_DA 0x01 /* 16 bit Absolute direct address */ +#define R_JR 0x02 /* jr 8 bit disp */ +#define R_IMM4L 0x23 /* low nibble */ +#define R_IMM8 0x22 /* 8 bit abs */ +#define R_IMM32 0x21 /* 32 bit abs */ +#define R_CALL R_DA /* Absolute address which could be a callr */ +#define R_JP R_DA /* Absolute address which could be a jp */ +#define R_REL16 0x04 /* 16 bit PC rel */ +#define R_CALLR 0x05 /* callr 12 bit disp */ +#define R_SEG 0x10 /* set if in segmented mode */ +#define R_IMM4H 0x24 /* high nibble */ diff --git a/include/coff/mips.h b/include/coff/mips.h new file mode 100644 index 0000000..594def0 --- /dev/null +++ b/include/coff/mips.h @@ -0,0 +1,121 @@ +/* Rudimentary ECOFF support on MIPS machines. + This lacks symbol information, normally provided on MIPS Unix systems + in the files and . */ + +/********************** 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 */ +}; + + +/* Mips magics */ +#define MIPS_MAGIC_1 0x0180 +#define MIPS_MAGIC_2 0x0162 +#define MIPS_MAGIC_3 0x0160 + +#define ECOFFBADMAG(x) (((x).f_magic!=MIPS_MAGIC_1) && \ + ((x).f_magic!=MIPS_MAGIC_2) &&\ + ((x).f_magic!=MIPS_MAGIC_3)) + + +#define FILHDR struct external_filehdr +#define FILHSZ 20 + +/********************** AOUT "OPTIONAL HEADER" **********************/ + + +typedef struct external_aouthdr +{ + unsigned char magic[2]; /* type of file */ + unsigned char vstamp[2]; /* version stamp */ + unsigned char tsize[4]; /* text size in bytes, padded to FW bdry*/ + unsigned char dsize[4]; /* initialized data " " */ + unsigned char bsize[4]; /* uninitialized data " " */ + 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 */ +} AOUTHDR; + +/* compute size of a header */ + +#define AOUTSZ (sizeof(AOUTHDR)) + + +/********************** SECTION HEADER **********************/ + +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 */ +}; + +#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 + +/********************** RELOCATION DIRECTIVES **********************/ + +struct external_reloc { + unsigned char r_vaddr[4]; + unsigned char r_symndx[4]; + unsigned char r_type[2]; + unsigned char pad[2]; +}; + + +/* Relevent values for r_type and ecoff. Would someone please document them */ + +#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"