From 6603bf38d74409906b3814f6a26c0483a5d32e41 Mon Sep 17 00:00:00 2001 From: John Gilmore Date: Fri, 25 Oct 1991 05:36:31 +0000 Subject: [PATCH] =?utf8?q?RS/6000=20support,=20by=20Metin=20G.=20Ozisik,?= =?utf8?q?=20Mimi=20Ph=C3=BB=C3=B4ng-Th=C3=A5o=20V=C3=B5,=20and=20John=20G?= =?utf8?q?ilmore.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- gas/a.out.gnu.h | 5 ++- include/ChangeLog | 11 ++++++ include/bfd.h | 10 +++-- include/internalcoff.h | 90 ++++++++++++++++++++++++++++++++++++------ 4 files changed, 98 insertions(+), 18 deletions(-) diff --git a/gas/a.out.gnu.h b/gas/a.out.gnu.h index 9ce531d9f55..7f9fb78f1a3 100755 --- a/gas/a.out.gnu.h +++ b/gas/a.out.gnu.h @@ -55,6 +55,7 @@ enum machine_type { /* skip a bunch so we don't run into any of sun's numbers */ M_386 = 100, M_29K = 101, + M_RS6000 = 102, /* IBM RS/6000 */ /* HP/BSD formats */ M_HP200 = 200, /* hp200 (68010) BSD binary */ M_HP300 = 300, /* hp300 (68020+68881) BSD binary */ @@ -252,7 +253,9 @@ struct reloc_info_extended # define r_symbolnum r_index unsigned r_extern:1; unsigned :2; - enum reloc_type r_type:5; +/* RS/6000 compiler does not support enum bitfield + enum reloc_type r_type:5; */ + enum reloc_type r_type; long int r_addend; }; diff --git a/include/ChangeLog b/include/ChangeLog index 4384eb0d5d6..ffcf1239320 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,14 @@ +Thu Oct 24 22:11:11 1991 John Gilmore (gnu at cygnus.com) + + RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and + John Gilmore. + + * a.out.gnu.h: Update slightly. + * bfd.h: Add new error code, fix doc, add bfd_arch_rs6000. + * internalcoff.h: Add more F_ codes for filehdr. Add + rs/6000-dependent fields to aouthdr. Add storage classes + to syments. Add 6000-specific auxent. Add r_size in reloc. + Thu Oct 24 04:13:20 1991 Fred Fish (fnf at cygnus.com) * dwarf.h: New file for dwarf support. Copied from gcc2 diff --git a/include/bfd.h b/include/bfd.h index 318588d2c6a..9bd167d9ef4 100644 --- a/include/bfd.h +++ b/include/bfd.h @@ -204,7 +204,8 @@ typedef enum bfd_error { no_more_archived_files, malformed_archive, symbol_not_found, file_not_recognized, file_ambiguously_recognized, no_contents, - bfd_error_nonrepresentable_section, + bfd_error_nonrepresentable_section, + no_debug_section, invalid_error_code} bfd_ec; extern bfd_ec bfd_error; @@ -742,8 +743,8 @@ who's name matches that provided, otherwise NULL. @xref{Sections}, for more info bfd_make_section This function creates a new empty section called @var{name} and attaches it to the end of the chain of sections for the BFD supplied. An attempt to -create a section with a name which is already in use, returns the old -section by that name instead. +create a section with a name which is already in use, returns NULL without +changing the section chain. Possible errors are: @table @code @@ -906,12 +907,13 @@ enum bfd_architecture bfd_arch_ns32k, /* National Semiconductor 32xxx */ bfd_arch_tahoe, /* CCI/Harris Tahoe */ bfd_arch_i860, /* Intel 860 */ - bfd_arch_romp, /* IBM ROMP RS/6000 */ + bfd_arch_romp, /* IBM ROMP PC/RT */ bfd_arch_alliant, /* Alliant */ bfd_arch_convex, /* Convex */ bfd_arch_m88k, /* Motorola 88xxx */ bfd_arch_pyramid, /* Pyramid Technology */ bfd_arch_h8300, /* Hitachi H8/300 */ + bfd_arch_rs6000, /* IBM RS/6000 */ bfd_arch_last }; diff --git a/include/internalcoff.h b/include/internalcoff.h index 7971008c140..4c187dd2b94 100755 --- a/include/internalcoff.h +++ b/include/internalcoff.h @@ -15,15 +15,23 @@ struct internal_filehdr * F_EXEC file is executable (no unresolved external references) * F_LNNO line numbers stripped from file * F_LSYMS local symbols stripped from file - * F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax) + * F_AR16WR file is 16-bit little-endian + * F_AR32WR file is 32-bit little-endian + * F_AR32W file is 32-bit big-endian + * F_DYNLOAD rs/6000 aix: dynamically loadable w/imports & exports + * F_SHROBJ rs/6000 aix: file is a shared object */ -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) -#define F_AR32WR (0x0010) -#define F_AR32W 0x200 +#define F_RELFLG (0x0001) +#define F_EXEC (0x0002) +#define F_LNNO (0x0004) +#define F_LSYMS (0x0008) +#define F_AR16WR (0x0080) +#define F_AR32WR (0x0100) +#define F_AR32W (0x0200) +#define F_DYNLOAD (0x1000) +#define F_SHROBJ (0x2000) + /********************** AOUT "OPTIONAL HEADER" **********************/ struct internal_aouthdr { short magic; /* type of file */ @@ -34,7 +42,22 @@ struct internal_aouthdr { 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 */ + ulong 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 */ + ulong o_maxstack; /* max stack size allowed. */ } ; /********************** STORAGE CLASSES **********************/ @@ -82,6 +105,28 @@ struct internal_aouthdr { #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 */ + + /* storage classes for stab symbols for RS/6000 */ +#define C_GSYM 0x80 +#define C_LSYM 0x81 +#define C_PSYM 0x82 +#define C_RSYM 0x83 +#define C_RPSYM 0x84 +#define C_STSYM 0x85 +#define C_TCSYM 0x86 +#define C_BCOMM 0x87 +#define C_ECOML 0x88 +#define C_ECOMM 0x89 +#define C_DECL 0x8c +#define C_ENTRY 0x8d +#define C_FUN 0x8e +#define C_BSTAT 0x8f +#define C_ESTAT 0x90 + /********************** SECTION HEADER **********************/ struct internal_scnhdr { char s_name[8]; /* section name */ @@ -234,6 +279,7 @@ union internal_auxent long l; /* str, un, or enum tag indx */ struct coff_ptr_struct *p; } x_tagndx; + union { struct { unsigned short x_lnno; /* declaration line number */ @@ -241,22 +287,21 @@ union internal_auxent } x_lnsz; long x_fsize; /* size of function */ } x_misc; - union { + union { struct { /* if ISFCN, tag, or .bb */ long x_lnnoptr; /* ptr to fcn line # */ union { /* entry ndx past block end */ long l; struct coff_ptr_struct *p; - } x_endndx; - - } x_fcn; + struct { /* if ISARY, up to 4 dimen. */ unsigned short x_dimen[DIMNUM]; } x_ary; } x_fcnary; + unsigned short x_tvndx; /* tv index */ } x_sym; @@ -278,7 +323,22 @@ union internal_auxent 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)) */ + } 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 */ /****************************************** * I960-specific *2nd* aux. entry formats @@ -298,7 +358,6 @@ union internal_auxent char x_idstring[20]; /* producer identity string */ } x_ident; /* Producer ident info */ - }; /********************** RELOCATION DIRECTIVES **********************/ @@ -307,6 +366,11 @@ struct internal_reloc { long r_vaddr; /* Virtual address of reference */ long r_symndx; /* Index into symbol table */ unsigned short r_type; /* Relocation type */ + +#if AIXCOFF_C + unsigned char r_size; +#endif + #if M88 unsigned short r_offset; #endif -- 2.30.2