RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and
John Gilmore.
This commit is contained in:
parent
d1ac7440ae
commit
6603bf38d7
4 changed files with 98 additions and 18 deletions
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue