Make Irix 5 configuration work again:

* config/obj-multi.h (obj_frob_symbol, obj_frob_file, S_GET_SIZE, S_SET_SIZE,
S_GET_ALIGN, S_SET_ALIGN, obj_copy_symbol_attributes, OBJ_PROCESS_STAB): New
macros.
* config/tc-mips.c: Protect against redefining them also when including
obj-elf.h.  Test only OBJ_ELF for including elf/mips.h.
This commit is contained in:
Ken Raeburn 1995-05-16 22:28:26 +00:00
parent 80a0c990b0
commit 739708fa4a
2 changed files with 77 additions and 82 deletions

View File

@ -1,5 +1,11 @@
Tue May 16 16:29:58 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
* config/obj-multi.h (obj_frob_symbol, obj_frob_file, S_GET_SIZE,
S_SET_SIZE, S_GET_ALIGN, S_SET_ALIGN, obj_copy_symbol_attributes,
OBJ_PROCESS_STAB): New macros.
* config/tc-mips.c: Protect against redefining them also when
including obj-elf.h. Test only OBJ_ELF for including elf/mips.h.
* read.c (s_lcomm): Do ELF/ECOFF test at run time, not compile
time.

View File

@ -37,10 +37,35 @@
#include "opcode/mips.h"
#ifdef OBJ_ELF
#ifdef OBJ_MAYBE_ELF
/* Clean up namespace so we can include obj-elf.h too. */
static int mips_output_flavor () { return OUTPUT_FLAVOR; }
#undef OBJ_PROCESS_STAB
#undef OUTPUT_FLAVOR
#undef S_GET_ALIGN
#undef S_GET_SIZE
#undef S_SET_ALIGN
#undef S_SET_SIZE
#undef TARGET_SYMBOL_FIELDS
#undef obj_frob_file
#undef obj_frob_symbol
#undef obj_pop_insert
#undef obj_sec_sym_ok_for_reloc
#include "obj-elf.h"
/* Fix any of them that we actually care about. */
#undef OUTPUT_FLAVOR
#define OUTPUT_FLAVOR mips_output_flavor()
#endif
#if defined (OBJ_ELF)
#include "elf/mips.h"
#endif
#ifndef ECOFF_DEBUGGING
#define ECOFF_DEBUGGING 0
#endif
static char *mips_regmask_frag;
#define AT 1
@ -374,22 +399,12 @@ static void s_cpload PARAMS ((int));
static void s_cprestore PARAMS ((int));
static void s_gpword PARAMS ((int));
static void s_cpadd PARAMS ((int));
#ifndef ECOFF_DEBUGGING
static void md_obj_begin PARAMS ((void));
static void md_obj_end PARAMS ((void));
static long get_number PARAMS ((void));
static void s_ent PARAMS ((int));
static void s_mipsend PARAMS ((int));
static void s_file PARAMS ((int));
#if 0
static void s_frame PARAMS ((int));
static void s_loc PARAMS ((int));
static void s_mask PARAMS ((char));
#endif
#endif
#ifdef OBJ_ELF
static void s_elf_section PARAMS ((int));
#endif
/* Pseudo-op table.
@ -409,7 +424,7 @@ static void s_elf_section PARAMS ((int));
they are not currently supported: .asm0, .endr, .lab, .repeat,
.struct, .weakext. */
const pseudo_typeS md_pseudo_table[] =
static const pseudo_typeS mips_pseudo_table[] =
{
/* MIPS specific pseudo-ops. */
{"option", s_option, 0},
@ -417,15 +432,15 @@ const pseudo_typeS md_pseudo_table[] =
{"rdata", s_change_sec, 'r'},
{"sdata", s_change_sec, 's'},
{"livereg", s_ignore, 0},
{ "abicalls", s_abicalls, 0},
{ "cpload", s_cpload, 0},
{ "cprestore", s_cprestore, 0},
{ "gpword", s_gpword, 0},
{ "cpadd", s_cpadd, 0},
{"abicalls", s_abicalls, 0},
{"cpload", s_cpload, 0},
{"cprestore", s_cprestore, 0},
{"gpword", s_gpword, 0},
{"cpadd", s_cpadd, 0},
/* Relatively generic pseudo-ops that happen to be used on MIPS
chips. */
{"asciiz", s_stringer, 1},
{"asciiz", stringer, 1},
{"bss", s_change_sec, 'b'},
{"err", s_err, 0},
{"half", s_cons, 1},
@ -434,8 +449,6 @@ const pseudo_typeS md_pseudo_table[] =
/* These pseudo-ops are defined in read.c, but must be overridden
here for one reason or another. */
{"align", s_align, 0},
{"ascii", s_stringer, 0},
{"asciz", s_stringer, 1},
{"byte", s_cons, 0},
{"data", s_change_sec, 'd'},
{"double", s_float_cons, 'd'},
@ -450,11 +463,12 @@ const pseudo_typeS md_pseudo_table[] =
{"quad", s_cons, 3},
{"short", s_cons, 1},
{"single", s_float_cons, 'f'},
{"space", s_mips_space, 0},
{"text", s_change_sec, 't'},
{"word", s_cons, 2},
{ 0 },
};
#ifndef ECOFF_DEBUGGING
static const pseudo_typeS mips_nonecoff_pseudo_table[] = {
/* These pseudo-ops should be defined by the object file format.
However, a.out doesn't support them, so we have versions here. */
{"aent", s_ent, 1},
@ -468,21 +482,29 @@ const pseudo_typeS md_pseudo_table[] =
{"loc", s_ignore, 0},
{"mask", s_ignore, 'R'},
{"verstamp", s_ignore, 0},
#endif
#ifdef OBJ_ELF
/* We need to tweak the ELF ".section" pseudo-op a bit. */
{"section", s_elf_section, 0},
{ 0 },
};
static const pseudo_typeS mips_elf_pseudo_table[] = {
/* Redirect additional ELF data allocation pseudo-ops. */
{"2byte", s_cons, 2},
{"4byte", s_cons, 4},
{"8byte", s_cons, 8},
#endif
/* Sentinel. */
/* Sentinel. */
{NULL}
};
extern void pop_insert PARAMS ((const pseudo_typeS *));
void
mips_pop_insert ()
{
pop_insert (mips_pseudo_table);
if (! ECOFF_DEBUGGING)
pop_insert (mips_nonecoff_pseudo_table);
if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
pop_insert (mips_elf_pseudo_table);
}
static char *expr_end;
@ -679,28 +701,27 @@ md_begin ()
mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
#endif
#ifdef ECOFF_DEBUGGING
sec = subseg_new (".mdebug", (subsegT) 0);
(void) bfd_set_section_flags (stdoutput, sec,
SEC_HAS_CONTENTS | SEC_READONLY);
(void) bfd_set_section_alignment (stdoutput, sec, 2);
#endif
if (ECOFF_DEBUGGING)
{
sec = subseg_new (".mdebug", (subsegT) 0);
(void) bfd_set_section_flags (stdoutput, sec,
SEC_HAS_CONTENTS | SEC_READONLY);
(void) bfd_set_section_alignment (stdoutput, sec, 2);
}
subseg_set (seg, subseg);
}
}
#ifndef ECOFF_DEBUGGING
md_obj_begin ();
#endif
if (! ECOFF_DEBUGGING)
md_obj_begin ();
}
void
md_mips_end ()
{
#ifndef ECOFF_DEBUGGING
md_obj_end ();
#endif
if (! ECOFF_DEBUGGING)
md_obj_end ();
}
void
@ -5897,16 +5918,11 @@ s_align (x)
demand_empty_rest_of_line ();
}
/* Handle .ascii and .asciiz. This just calls stringer and forgets
that there was a previous instruction. */
static void
s_stringer (append_zero)
int append_zero;
void
mips_flush_pending_output ()
{
mips_emit_delays ();
insn_label = NULL;
stringer (append_zero);
}
static void
@ -5986,22 +6002,12 @@ s_change_sec (sec)
auto_align = 1;
}
#ifdef OBJ_ELF
/* Handle the ELF .section pseudo-op. This is a wrapper around
obj_elf_section. */
static void
s_elf_section (x)
int x;
void
mips_enable_auto_align ()
{
mips_emit_delays ();
obj_elf_section (x);
auto_align = 1;
}
#endif /* OBJ_ELF */
static void
s_cons (log_size)
int log_size;
@ -6036,9 +6042,8 @@ s_extern (x)
size = get_absolute_expression ();
S_SET_EXTERNAL (symbolP);
#ifdef ECOFF_DEBUGGING
symbolP->ecoff_extern_size = size;
#endif
if (ECOFF_DEBUGGING)
symbolP->ecoff_extern_size = size;
}
static void
@ -6224,18 +6229,6 @@ s_mipsset (x)
demand_empty_rest_of_line ();
}
/* The same as the usual .space directive, except that we have to
forget about any previous instruction. */
static void
s_mips_space (param)
int param;
{
mips_emit_delays ();
insn_label = NULL;
s_space (param);
}
/* Handle the .abicalls pseudo-op. I believe this is equivalent to
.option pic2. It means to generate SVR4 PIC calls. */
@ -6734,7 +6727,7 @@ mips_define_label (sym)
insn_label = sym;
}
#ifdef OBJ_ELF
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
/* Some special processing for a MIPS ELF file. */
@ -6763,10 +6756,8 @@ mips_elf_final_processing ()
elf_elfheader (stdoutput)->e_flags |= EF_MIPS_PIC;
}
#endif /* OBJ_ELF */
#endif /* OBJ_ELF || OBJ_MAYBE_ELF */
#ifndef ECOFF_DEBUGGING
/* These functions should really be defined by the object file format,
since they are related to debugging information. However, this
code has to work for the a.out format, which does not define them,
@ -7106,5 +7097,3 @@ s_loc (x)
symbolP->sy_segment = now_seg;
}
#endif
#endif /* ! defined (ECOFF_DEBUGGING) */