mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 04:00:07 +08:00
gas/
* config/tc-mips.c: Remove OBJ_ELF, OBJ_MAYBE_ELF and IS_ELF conditions. Remove any code deselected by them. (s_mips_frame, s_mips_mask): Handle ECOFF_DEBUGGING case first.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2013-06-22 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
|
* config/tc-mips.c: Remove OBJ_ELF, OBJ_MAYBE_ELF and IS_ELF
|
||||||
|
conditions. Remove any code deselected by them.
|
||||||
|
(s_mips_frame, s_mips_mask): Handle ECOFF_DEBUGGING case first.
|
||||||
|
|
||||||
2013-06-22 Richard Sandiford <rdsandiford@googlemail.com>
|
2013-06-22 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
* NEWS: Note removal of ECOFF support.
|
* NEWS: Note removal of ECOFF support.
|
||||||
|
@ -40,7 +40,6 @@
|
|||||||
#define DBG(x)
|
#define DBG(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OBJ_MAYBE_ELF
|
|
||||||
/* Clean up namespace so we can include obj-elf.h too. */
|
/* Clean up namespace so we can include obj-elf.h too. */
|
||||||
static int mips_output_flavor (void);
|
static int mips_output_flavor (void);
|
||||||
static int mips_output_flavor (void) { return OUTPUT_FLAVOR; }
|
static int mips_output_flavor (void) { return OUTPUT_FLAVOR; }
|
||||||
@ -61,11 +60,8 @@ static int mips_output_flavor (void) { return OUTPUT_FLAVOR; }
|
|||||||
/* Fix any of them that we actually care about. */
|
/* Fix any of them that we actually care about. */
|
||||||
#undef OUTPUT_FLAVOR
|
#undef OUTPUT_FLAVOR
|
||||||
#define OUTPUT_FLAVOR mips_output_flavor()
|
#define OUTPUT_FLAVOR mips_output_flavor()
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (OBJ_ELF)
|
|
||||||
#include "elf/mips.h"
|
#include "elf/mips.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ECOFF_DEBUGGING
|
#ifndef ECOFF_DEBUGGING
|
||||||
#define NO_ECOFF_DEBUGGING
|
#define NO_ECOFF_DEBUGGING
|
||||||
@ -85,9 +81,7 @@ int mips_flag_pdr = TRUE;
|
|||||||
|
|
||||||
#include "ecoff.h"
|
#include "ecoff.h"
|
||||||
|
|
||||||
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
|
|
||||||
static char *mips_regmask_frag;
|
static char *mips_regmask_frag;
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ZERO 0
|
#define ZERO 0
|
||||||
#define ATREG 1
|
#define ATREG 1
|
||||||
@ -1425,7 +1419,6 @@ enum options
|
|||||||
OPTION_SINGLE_FLOAT,
|
OPTION_SINGLE_FLOAT,
|
||||||
OPTION_DOUBLE_FLOAT,
|
OPTION_DOUBLE_FLOAT,
|
||||||
OPTION_32,
|
OPTION_32,
|
||||||
#ifdef OBJ_ELF
|
|
||||||
OPTION_CALL_SHARED,
|
OPTION_CALL_SHARED,
|
||||||
OPTION_CALL_NONPIC,
|
OPTION_CALL_NONPIC,
|
||||||
OPTION_NON_SHARED,
|
OPTION_NON_SHARED,
|
||||||
@ -1438,7 +1431,6 @@ enum options
|
|||||||
OPTION_PDR,
|
OPTION_PDR,
|
||||||
OPTION_NO_PDR,
|
OPTION_NO_PDR,
|
||||||
OPTION_MVXWORKS_PIC,
|
OPTION_MVXWORKS_PIC,
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
OPTION_END_OF_ENUM
|
OPTION_END_OF_ENUM
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1539,7 +1531,6 @@ struct option md_longopts[] =
|
|||||||
{"32", no_argument, NULL, OPTION_32},
|
{"32", no_argument, NULL, OPTION_32},
|
||||||
|
|
||||||
/* ELF-specific options. */
|
/* ELF-specific options. */
|
||||||
#ifdef OBJ_ELF
|
|
||||||
{"KPIC", no_argument, NULL, OPTION_CALL_SHARED},
|
{"KPIC", no_argument, NULL, OPTION_CALL_SHARED},
|
||||||
{"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
|
{"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
|
||||||
{"call_nonpic", no_argument, NULL, OPTION_CALL_NONPIC},
|
{"call_nonpic", no_argument, NULL, OPTION_CALL_NONPIC},
|
||||||
@ -1553,7 +1544,6 @@ struct option md_longopts[] =
|
|||||||
{"mpdr", no_argument, NULL, OPTION_PDR},
|
{"mpdr", no_argument, NULL, OPTION_PDR},
|
||||||
{"mno-pdr", no_argument, NULL, OPTION_NO_PDR},
|
{"mno-pdr", no_argument, NULL, OPTION_NO_PDR},
|
||||||
{"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC},
|
{"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC},
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
|
|
||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
@ -1826,12 +1816,10 @@ static unsigned int forced_insn_length;
|
|||||||
|
|
||||||
static bfd_boolean mips_assembling_insn;
|
static bfd_boolean mips_assembling_insn;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
/* The pdr segment for per procedure frame/regmask info. Not used for
|
/* The pdr segment for per procedure frame/regmask info. Not used for
|
||||||
ECOFF debugging. */
|
ECOFF debugging. */
|
||||||
|
|
||||||
static segT pdr_seg;
|
static segT pdr_seg;
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The default target format to use. */
|
/* The default target format to use. */
|
||||||
|
|
||||||
@ -2835,93 +2823,88 @@ md_begin (void)
|
|||||||
|
|
||||||
bfd_set_gp_size (stdoutput, g_switch_value);
|
bfd_set_gp_size (stdoutput, g_switch_value);
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
/* On a native system other than VxWorks, sections must be aligned
|
||||||
if (IS_ELF)
|
to 16 byte boundaries. When configured for an embedded ELF
|
||||||
|
target, we don't bother. */
|
||||||
|
if (strncmp (TARGET_OS, "elf", 3) != 0
|
||||||
|
&& strncmp (TARGET_OS, "vxworks", 7) != 0)
|
||||||
{
|
{
|
||||||
/* On a native system other than VxWorks, sections must be aligned
|
(void) bfd_set_section_alignment (stdoutput, text_section, 4);
|
||||||
to 16 byte boundaries. When configured for an embedded ELF
|
(void) bfd_set_section_alignment (stdoutput, data_section, 4);
|
||||||
target, we don't bother. */
|
(void) bfd_set_section_alignment (stdoutput, bss_section, 4);
|
||||||
if (strncmp (TARGET_OS, "elf", 3) != 0
|
|
||||||
&& strncmp (TARGET_OS, "vxworks", 7) != 0)
|
|
||||||
{
|
|
||||||
(void) bfd_set_section_alignment (stdoutput, text_section, 4);
|
|
||||||
(void) bfd_set_section_alignment (stdoutput, data_section, 4);
|
|
||||||
(void) bfd_set_section_alignment (stdoutput, bss_section, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create a .reginfo section for register masks and a .mdebug
|
|
||||||
section for debugging information. */
|
|
||||||
{
|
|
||||||
segT seg;
|
|
||||||
subsegT subseg;
|
|
||||||
flagword flags;
|
|
||||||
segT sec;
|
|
||||||
|
|
||||||
seg = now_seg;
|
|
||||||
subseg = now_subseg;
|
|
||||||
|
|
||||||
/* The ABI says this section should be loaded so that the
|
|
||||||
running program can access it. However, we don't load it
|
|
||||||
if we are configured for an embedded target */
|
|
||||||
flags = SEC_READONLY | SEC_DATA;
|
|
||||||
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
|
||||||
flags |= SEC_ALLOC | SEC_LOAD;
|
|
||||||
|
|
||||||
if (mips_abi != N64_ABI)
|
|
||||||
{
|
|
||||||
sec = subseg_new (".reginfo", (subsegT) 0);
|
|
||||||
|
|
||||||
bfd_set_section_flags (stdoutput, sec, flags);
|
|
||||||
bfd_set_section_alignment (stdoutput, sec, HAVE_NEWABI ? 3 : 2);
|
|
||||||
|
|
||||||
mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* The 64-bit ABI uses a .MIPS.options section rather than
|
|
||||||
.reginfo section. */
|
|
||||||
sec = subseg_new (".MIPS.options", (subsegT) 0);
|
|
||||||
bfd_set_section_flags (stdoutput, sec, flags);
|
|
||||||
bfd_set_section_alignment (stdoutput, sec, 3);
|
|
||||||
|
|
||||||
/* Set up the option header. */
|
|
||||||
{
|
|
||||||
Elf_Internal_Options opthdr;
|
|
||||||
char *f;
|
|
||||||
|
|
||||||
opthdr.kind = ODK_REGINFO;
|
|
||||||
opthdr.size = (sizeof (Elf_External_Options)
|
|
||||||
+ sizeof (Elf64_External_RegInfo));
|
|
||||||
opthdr.section = 0;
|
|
||||||
opthdr.info = 0;
|
|
||||||
f = frag_more (sizeof (Elf_External_Options));
|
|
||||||
bfd_mips_elf_swap_options_out (stdoutput, &opthdr,
|
|
||||||
(Elf_External_Options *) f);
|
|
||||||
|
|
||||||
mips_regmask_frag = frag_more (sizeof (Elf64_External_RegInfo));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
else if (mips_flag_pdr)
|
|
||||||
{
|
|
||||||
pdr_seg = subseg_new (".pdr", (subsegT) 0);
|
|
||||||
(void) bfd_set_section_flags (stdoutput, pdr_seg,
|
|
||||||
SEC_READONLY | SEC_RELOC
|
|
||||||
| SEC_DEBUGGING);
|
|
||||||
(void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
subseg_set (seg, subseg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
|
/* Create a .reginfo section for register masks and a .mdebug
|
||||||
|
section for debugging information. */
|
||||||
|
{
|
||||||
|
segT seg;
|
||||||
|
subsegT subseg;
|
||||||
|
flagword flags;
|
||||||
|
segT sec;
|
||||||
|
|
||||||
|
seg = now_seg;
|
||||||
|
subseg = now_subseg;
|
||||||
|
|
||||||
|
/* The ABI says this section should be loaded so that the
|
||||||
|
running program can access it. However, we don't load it
|
||||||
|
if we are configured for an embedded target */
|
||||||
|
flags = SEC_READONLY | SEC_DATA;
|
||||||
|
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
||||||
|
flags |= SEC_ALLOC | SEC_LOAD;
|
||||||
|
|
||||||
|
if (mips_abi != N64_ABI)
|
||||||
|
{
|
||||||
|
sec = subseg_new (".reginfo", (subsegT) 0);
|
||||||
|
|
||||||
|
bfd_set_section_flags (stdoutput, sec, flags);
|
||||||
|
bfd_set_section_alignment (stdoutput, sec, HAVE_NEWABI ? 3 : 2);
|
||||||
|
|
||||||
|
mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The 64-bit ABI uses a .MIPS.options section rather than
|
||||||
|
.reginfo section. */
|
||||||
|
sec = subseg_new (".MIPS.options", (subsegT) 0);
|
||||||
|
bfd_set_section_flags (stdoutput, sec, flags);
|
||||||
|
bfd_set_section_alignment (stdoutput, sec, 3);
|
||||||
|
|
||||||
|
/* Set up the option header. */
|
||||||
|
{
|
||||||
|
Elf_Internal_Options opthdr;
|
||||||
|
char *f;
|
||||||
|
|
||||||
|
opthdr.kind = ODK_REGINFO;
|
||||||
|
opthdr.size = (sizeof (Elf_External_Options)
|
||||||
|
+ sizeof (Elf64_External_RegInfo));
|
||||||
|
opthdr.section = 0;
|
||||||
|
opthdr.info = 0;
|
||||||
|
f = frag_more (sizeof (Elf_External_Options));
|
||||||
|
bfd_mips_elf_swap_options_out (stdoutput, &opthdr,
|
||||||
|
(Elf_External_Options *) f);
|
||||||
|
|
||||||
|
mips_regmask_frag = frag_more (sizeof (Elf64_External_RegInfo));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
else if (mips_flag_pdr)
|
||||||
|
{
|
||||||
|
pdr_seg = subseg_new (".pdr", (subsegT) 0);
|
||||||
|
(void) bfd_set_section_flags (stdoutput, pdr_seg,
|
||||||
|
SEC_READONLY | SEC_RELOC
|
||||||
|
| SEC_DEBUGGING);
|
||||||
|
(void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
subseg_set (seg, subseg);
|
||||||
|
}
|
||||||
|
|
||||||
if (! ECOFF_DEBUGGING)
|
if (! ECOFF_DEBUGGING)
|
||||||
md_obj_begin ();
|
md_obj_begin ();
|
||||||
@ -3206,14 +3189,12 @@ s_is_linkonce (symbolS *sym, segT from_seg)
|
|||||||
{
|
{
|
||||||
if ((bfd_get_section_flags (stdoutput, symseg) & SEC_LINK_ONCE))
|
if ((bfd_get_section_flags (stdoutput, symseg) & SEC_LINK_ONCE))
|
||||||
linkonce = TRUE;
|
linkonce = TRUE;
|
||||||
#ifdef OBJ_ELF
|
|
||||||
/* The GNU toolchain uses an extension for ELF: a section
|
/* The GNU toolchain uses an extension for ELF: a section
|
||||||
beginning with the magic string .gnu.linkonce is a
|
beginning with the magic string .gnu.linkonce is a
|
||||||
linkonce section. */
|
linkonce section. */
|
||||||
if (strncmp (segment_name (symseg), ".gnu.linkonce",
|
if (strncmp (segment_name (symseg), ".gnu.linkonce",
|
||||||
sizeof ".gnu.linkonce" - 1) == 0)
|
sizeof ".gnu.linkonce" - 1) == 0)
|
||||||
linkonce = TRUE;
|
linkonce = TRUE;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return linkonce;
|
return linkonce;
|
||||||
}
|
}
|
||||||
@ -3231,15 +3212,10 @@ mips_compressed_mark_label (symbolS *label)
|
|||||||
{
|
{
|
||||||
gas_assert (HAVE_CODE_COMPRESSION);
|
gas_assert (HAVE_CODE_COMPRESSION);
|
||||||
|
|
||||||
#if defined(OBJ_ELF) || defined(OBJ_MAYBE_ELF)
|
if (mips_opts.mips16)
|
||||||
if (IS_ELF)
|
S_SET_OTHER (label, ELF_ST_SET_MIPS16 (S_GET_OTHER (label)));
|
||||||
{
|
else
|
||||||
if (mips_opts.mips16)
|
S_SET_OTHER (label, ELF_ST_SET_MICROMIPS (S_GET_OTHER (label)));
|
||||||
S_SET_OTHER (label, ELF_ST_SET_MIPS16 (S_GET_OTHER (label)));
|
|
||||||
else
|
|
||||||
S_SET_OTHER (label, ELF_ST_SET_MICROMIPS (S_GET_OTHER (label)));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if ((S_GET_VALUE (label) & 1) == 0
|
if ((S_GET_VALUE (label) & 1) == 0
|
||||||
/* Don't adjust the address if the label is global or weak, or
|
/* Don't adjust the address if the label is global or weak, or
|
||||||
in a link-once section, since we'll be emitting symbol reloc
|
in a link-once section, since we'll be emitting symbol reloc
|
||||||
@ -4395,12 +4371,7 @@ micromips_add_label (void)
|
|||||||
|
|
||||||
s = colon (micromips_label_name ());
|
s = colon (micromips_label_name ());
|
||||||
micromips_label_inc ();
|
micromips_label_inc ();
|
||||||
#if defined(OBJ_ELF) || defined(OBJ_MAYBE_ELF)
|
S_SET_OTHER (s, ELF_ST_SET_MICROMIPS (S_GET_OTHER (s)));
|
||||||
if (IS_ELF)
|
|
||||||
S_SET_OTHER (s, ELF_ST_SET_MICROMIPS (S_GET_OTHER (s)));
|
|
||||||
#else
|
|
||||||
(void) s;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If assembling microMIPS code, then return the microMIPS reloc
|
/* If assembling microMIPS code, then return the microMIPS reloc
|
||||||
@ -4687,7 +4658,6 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
|
|||||||
method = get_append_method (ip, address_expr, reloc_type);
|
method = get_append_method (ip, address_expr, reloc_type);
|
||||||
branch_disp = method == APPEND_SWAP ? insn_length (history) : 0;
|
branch_disp = method == APPEND_SWAP ? insn_length (history) : 0;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
dwarf2_emit_insn (0);
|
dwarf2_emit_insn (0);
|
||||||
/* We want MIPS16 and microMIPS debug info to use ISA-encoded addresses,
|
/* We want MIPS16 and microMIPS debug info to use ISA-encoded addresses,
|
||||||
so "move" the instruction address accordingly.
|
so "move" the instruction address accordingly.
|
||||||
@ -4701,7 +4671,6 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
|
|||||||
and a 16-bit delay slot, since the current position would then be
|
and a 16-bit delay slot, since the current position would then be
|
||||||
in the middle of a branch. */
|
in the middle of a branch. */
|
||||||
dwarf2_move_insn ((HAVE_CODE_COMPRESSION ? 1 : 0) - branch_disp);
|
dwarf2_move_insn ((HAVE_CODE_COMPRESSION ? 1 : 0) - branch_disp);
|
||||||
#endif
|
|
||||||
|
|
||||||
relax32 = (mips_relax_branch
|
relax32 = (mips_relax_branch
|
||||||
/* Don't try branch relaxation within .set nomacro, or within
|
/* Don't try branch relaxation within .set nomacro, or within
|
||||||
@ -12938,14 +12907,13 @@ mips_ip (char *str, struct mips_cl_insn *ip)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
new_seg = subseg_new (newname, (subsegT) 0);
|
new_seg = subseg_new (newname, (subsegT) 0);
|
||||||
if (IS_ELF)
|
bfd_set_section_flags (stdoutput, new_seg,
|
||||||
bfd_set_section_flags (stdoutput, new_seg,
|
(SEC_ALLOC
|
||||||
(SEC_ALLOC
|
| SEC_LOAD
|
||||||
| SEC_LOAD
|
| SEC_READONLY
|
||||||
| SEC_READONLY
|
| SEC_DATA));
|
||||||
| SEC_DATA));
|
|
||||||
frag_align (*args == 'l' ? 2 : 3, 0, 0);
|
frag_align (*args == 'l' ? 2 : 3, 0, 0);
|
||||||
if (IS_ELF && strncmp (TARGET_OS, "elf", 3) != 0)
|
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
||||||
record_alignment (new_seg, 4);
|
record_alignment (new_seg, 4);
|
||||||
else
|
else
|
||||||
record_alignment (new_seg, *args == 'l' ? 2 : 3);
|
record_alignment (new_seg, *args == 'l' ? 2 : 3);
|
||||||
@ -14795,7 +14763,6 @@ struct percent_op_match
|
|||||||
static const struct percent_op_match mips_percent_op[] =
|
static const struct percent_op_match mips_percent_op[] =
|
||||||
{
|
{
|
||||||
{"%lo", BFD_RELOC_LO16},
|
{"%lo", BFD_RELOC_LO16},
|
||||||
#ifdef OBJ_ELF
|
|
||||||
{"%call_hi", BFD_RELOC_MIPS_CALL_HI16},
|
{"%call_hi", BFD_RELOC_MIPS_CALL_HI16},
|
||||||
{"%call_lo", BFD_RELOC_MIPS_CALL_LO16},
|
{"%call_lo", BFD_RELOC_MIPS_CALL_LO16},
|
||||||
{"%call16", BFD_RELOC_MIPS_CALL16},
|
{"%call16", BFD_RELOC_MIPS_CALL16},
|
||||||
@ -14817,7 +14784,6 @@ static const struct percent_op_match mips_percent_op[] =
|
|||||||
{"%tprel_hi", BFD_RELOC_MIPS_TLS_TPREL_HI16},
|
{"%tprel_hi", BFD_RELOC_MIPS_TLS_TPREL_HI16},
|
||||||
{"%tprel_lo", BFD_RELOC_MIPS_TLS_TPREL_LO16},
|
{"%tprel_lo", BFD_RELOC_MIPS_TLS_TPREL_LO16},
|
||||||
{"%gottprel", BFD_RELOC_MIPS_TLS_GOTTPREL},
|
{"%gottprel", BFD_RELOC_MIPS_TLS_GOTTPREL},
|
||||||
#endif
|
|
||||||
{"%hi", BFD_RELOC_HI16_S}
|
{"%hi", BFD_RELOC_HI16_S}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -14971,7 +14937,6 @@ md_number_to_chars (char *buf, valueT val, int n)
|
|||||||
number_to_chars_littleendian (buf, val, n);
|
number_to_chars_littleendian (buf, val, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
static int support_64bit_objects(void)
|
static int support_64bit_objects(void)
|
||||||
{
|
{
|
||||||
const char **list, **l;
|
const char **list, **l;
|
||||||
@ -14986,7 +14951,6 @@ static int support_64bit_objects(void)
|
|||||||
free (list);
|
free (list);
|
||||||
return yes;
|
return yes;
|
||||||
}
|
}
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
|
|
||||||
/* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to
|
/* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to
|
||||||
NEW_VALUE. Warn if another value was already specified. Note:
|
NEW_VALUE. Warn if another value was already specified. Note:
|
||||||
@ -15240,36 +15204,20 @@ md_parse_option (int c, char *arg)
|
|||||||
mips_opts.sym32 = FALSE;
|
mips_opts.sym32 = FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
/* When generating ELF code, we permit -KPIC and -call_shared to
|
/* When generating ELF code, we permit -KPIC and -call_shared to
|
||||||
select SVR4_PIC, and -non_shared to select no PIC. This is
|
select SVR4_PIC, and -non_shared to select no PIC. This is
|
||||||
intended to be compatible with Irix 5. */
|
intended to be compatible with Irix 5. */
|
||||||
case OPTION_CALL_SHARED:
|
case OPTION_CALL_SHARED:
|
||||||
if (!IS_ELF)
|
|
||||||
{
|
|
||||||
as_bad (_("-call_shared is supported only for ELF format"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
mips_pic = SVR4_PIC;
|
mips_pic = SVR4_PIC;
|
||||||
mips_abicalls = TRUE;
|
mips_abicalls = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OPTION_CALL_NONPIC:
|
case OPTION_CALL_NONPIC:
|
||||||
if (!IS_ELF)
|
|
||||||
{
|
|
||||||
as_bad (_("-call_nonpic is supported only for ELF format"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
mips_pic = NO_PIC;
|
mips_pic = NO_PIC;
|
||||||
mips_abicalls = TRUE;
|
mips_abicalls = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OPTION_NON_SHARED:
|
case OPTION_NON_SHARED:
|
||||||
if (!IS_ELF)
|
|
||||||
{
|
|
||||||
as_bad (_("-non_shared is supported only for ELF format"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
mips_pic = NO_PIC;
|
mips_pic = NO_PIC;
|
||||||
mips_abicalls = FALSE;
|
mips_abicalls = FALSE;
|
||||||
break;
|
break;
|
||||||
@ -15280,7 +15228,6 @@ md_parse_option (int c, char *arg)
|
|||||||
case OPTION_XGOT:
|
case OPTION_XGOT:
|
||||||
mips_big_got = 1;
|
mips_big_got = 1;
|
||||||
break;
|
break;
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
|
|
||||||
case 'G':
|
case 'G':
|
||||||
g_switch_value = atoi (arg);
|
g_switch_value = atoi (arg);
|
||||||
@ -15290,33 +15237,18 @@ md_parse_option (int c, char *arg)
|
|||||||
/* The -32, -n32 and -64 options are shortcuts for -mabi=32, -mabi=n32
|
/* The -32, -n32 and -64 options are shortcuts for -mabi=32, -mabi=n32
|
||||||
and -mabi=64. */
|
and -mabi=64. */
|
||||||
case OPTION_32:
|
case OPTION_32:
|
||||||
if (IS_ELF)
|
mips_abi = O32_ABI;
|
||||||
mips_abi = O32_ABI;
|
|
||||||
/* We silently ignore -32 for non-ELF targets. This greatly
|
|
||||||
simplifies the construction of the MIPS GAS test cases. */
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
case OPTION_N32:
|
case OPTION_N32:
|
||||||
if (!IS_ELF)
|
|
||||||
{
|
|
||||||
as_bad (_("-n32 is supported for ELF format only"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
mips_abi = N32_ABI;
|
mips_abi = N32_ABI;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OPTION_64:
|
case OPTION_64:
|
||||||
if (!IS_ELF)
|
|
||||||
{
|
|
||||||
as_bad (_("-64 is supported for ELF format only"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
mips_abi = N64_ABI;
|
mips_abi = N64_ABI;
|
||||||
if (!support_64bit_objects())
|
if (!support_64bit_objects())
|
||||||
as_fatal (_("No compiled in support for 64 bit object file format"));
|
as_fatal (_("No compiled in support for 64 bit object file format"));
|
||||||
break;
|
break;
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
|
|
||||||
case OPTION_GP32:
|
case OPTION_GP32:
|
||||||
file_mips_gp32 = 1;
|
file_mips_gp32 = 1;
|
||||||
@ -15350,13 +15282,7 @@ md_parse_option (int c, char *arg)
|
|||||||
file_mips_soft_float = 0;
|
file_mips_soft_float = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
case OPTION_MABI:
|
case OPTION_MABI:
|
||||||
if (!IS_ELF)
|
|
||||||
{
|
|
||||||
as_bad (_("-mabi is supported for ELF format only"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcmp (arg, "32") == 0)
|
if (strcmp (arg, "32") == 0)
|
||||||
mips_abi = O32_ABI;
|
mips_abi = O32_ABI;
|
||||||
else if (strcmp (arg, "o64") == 0)
|
else if (strcmp (arg, "o64") == 0)
|
||||||
@ -15378,7 +15304,6 @@ md_parse_option (int c, char *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
|
|
||||||
case OPTION_M7000_HILO_FIX:
|
case OPTION_M7000_HILO_FIX:
|
||||||
mips_7000_hilo_fix = TRUE;
|
mips_7000_hilo_fix = TRUE;
|
||||||
@ -15388,7 +15313,6 @@ md_parse_option (int c, char *arg)
|
|||||||
mips_7000_hilo_fix = FALSE;
|
mips_7000_hilo_fix = FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
case OPTION_MDEBUG:
|
case OPTION_MDEBUG:
|
||||||
mips_flag_mdebug = TRUE;
|
mips_flag_mdebug = TRUE;
|
||||||
break;
|
break;
|
||||||
@ -15408,7 +15332,6 @@ md_parse_option (int c, char *arg)
|
|||||||
case OPTION_MVXWORKS_PIC:
|
case OPTION_MVXWORKS_PIC:
|
||||||
mips_pic = VXWORKS_PIC;
|
mips_pic = VXWORKS_PIC;
|
||||||
break;
|
break;
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
@ -16198,16 +16121,13 @@ s_change_sec (int sec)
|
|||||||
{
|
{
|
||||||
segT seg;
|
segT seg;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
/* The ELF backend needs to know that we are changing sections, so
|
/* The ELF backend needs to know that we are changing sections, so
|
||||||
that .previous works correctly. We could do something like check
|
that .previous works correctly. We could do something like check
|
||||||
for an obj_section_change_hook macro, but that might be confusing
|
for an obj_section_change_hook macro, but that might be confusing
|
||||||
as it would not be appropriate to use it in the section changing
|
as it would not be appropriate to use it in the section changing
|
||||||
functions in read.c, since obj-elf.c intercepts those. FIXME:
|
functions in read.c, since obj-elf.c intercepts those. FIXME:
|
||||||
This should be cleaner, somehow. */
|
This should be cleaner, somehow. */
|
||||||
if (IS_ELF)
|
obj_elf_section_change_hook ();
|
||||||
obj_elf_section_change_hook ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mips_emit_delays ();
|
mips_emit_delays ();
|
||||||
|
|
||||||
@ -16227,37 +16147,28 @@ s_change_sec (int sec)
|
|||||||
case 'r':
|
case 'r':
|
||||||
seg = subseg_new (RDATA_SECTION_NAME,
|
seg = subseg_new (RDATA_SECTION_NAME,
|
||||||
(subsegT) get_absolute_expression ());
|
(subsegT) get_absolute_expression ());
|
||||||
if (IS_ELF)
|
bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD
|
||||||
{
|
| SEC_READONLY | SEC_RELOC
|
||||||
bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD
|
| SEC_DATA));
|
||||||
| SEC_READONLY | SEC_RELOC
|
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
||||||
| SEC_DATA));
|
record_alignment (seg, 4);
|
||||||
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
|
||||||
record_alignment (seg, 4);
|
|
||||||
}
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
|
seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
|
||||||
if (IS_ELF)
|
bfd_set_section_flags (stdoutput, seg,
|
||||||
{
|
SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
|
||||||
bfd_set_section_flags (stdoutput, seg,
|
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
||||||
SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
|
record_alignment (seg, 4);
|
||||||
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
|
||||||
record_alignment (seg, 4);
|
|
||||||
}
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'B':
|
case 'B':
|
||||||
seg = subseg_new (".sbss", (subsegT) get_absolute_expression ());
|
seg = subseg_new (".sbss", (subsegT) get_absolute_expression ());
|
||||||
if (IS_ELF)
|
bfd_set_section_flags (stdoutput, seg, SEC_ALLOC);
|
||||||
{
|
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
||||||
bfd_set_section_flags (stdoutput, seg, SEC_ALLOC);
|
record_alignment (seg, 4);
|
||||||
if (strncmp (TARGET_OS, "elf", 3) != 0)
|
|
||||||
record_alignment (seg, 4);
|
|
||||||
}
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -16268,7 +16179,6 @@ s_change_sec (int sec)
|
|||||||
void
|
void
|
||||||
s_change_section (int ignore ATTRIBUTE_UNUSED)
|
s_change_section (int ignore ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
#ifdef OBJ_ELF
|
|
||||||
char *section_name;
|
char *section_name;
|
||||||
char c;
|
char c;
|
||||||
char next_c = 0;
|
char next_c = 0;
|
||||||
@ -16277,9 +16187,6 @@ s_change_section (int ignore ATTRIBUTE_UNUSED)
|
|||||||
int section_entry_size;
|
int section_entry_size;
|
||||||
int section_alignment;
|
int section_alignment;
|
||||||
|
|
||||||
if (!IS_ELF)
|
|
||||||
return;
|
|
||||||
|
|
||||||
section_name = input_line_pointer;
|
section_name = input_line_pointer;
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
if (c)
|
if (c)
|
||||||
@ -16339,7 +16246,6 @@ s_change_section (int ignore ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
if (now_seg->name != section_name)
|
if (now_seg->name != section_name)
|
||||||
free (section_name);
|
free (section_name);
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -17407,17 +17313,14 @@ md_section_align (asection *seg, valueT addr)
|
|||||||
{
|
{
|
||||||
int align = bfd_get_section_alignment (stdoutput, seg);
|
int align = bfd_get_section_alignment (stdoutput, seg);
|
||||||
|
|
||||||
if (IS_ELF)
|
/* We don't need to align ELF sections to the full alignment.
|
||||||
{
|
However, Irix 5 may prefer that we align them at least to a 16
|
||||||
/* We don't need to align ELF sections to the full alignment.
|
byte boundary. We don't bother to align the sections if we
|
||||||
However, Irix 5 may prefer that we align them at least to a 16
|
are targeted for an embedded system. */
|
||||||
byte boundary. We don't bother to align the sections if we
|
if (strncmp (TARGET_OS, "elf", 3) == 0)
|
||||||
are targeted for an embedded system. */
|
return addr;
|
||||||
if (strncmp (TARGET_OS, "elf", 3) == 0)
|
if (align > 4)
|
||||||
return addr;
|
align = 4;
|
||||||
if (align > 4)
|
|
||||||
align = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((addr + (1 << align) - 1) & (-1 << align));
|
return ((addr + (1 << align) - 1) & (-1 << align));
|
||||||
}
|
}
|
||||||
@ -17524,11 +17427,8 @@ pic_need_relax (symbolS *sym, asection *segtype)
|
|||||||
&& !bfd_is_abs_section (symsec)
|
&& !bfd_is_abs_section (symsec)
|
||||||
&& !bfd_is_com_section (symsec)
|
&& !bfd_is_com_section (symsec)
|
||||||
&& !s_is_linkonce (sym, segtype)
|
&& !s_is_linkonce (sym, segtype)
|
||||||
#ifdef OBJ_ELF
|
|
||||||
/* A global or weak symbol is treated as external. */
|
/* A global or weak symbol is treated as external. */
|
||||||
&& (!IS_ELF || (! S_IS_WEAK (sym) && ! S_IS_EXTERNAL (sym)))
|
&& (!S_IS_WEAK (sym) && !S_IS_EXTERNAL (sym)));
|
||||||
#endif
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -18045,7 +17945,6 @@ mips_fix_adjustable (fixS *fixp)
|
|||||||
|| jalr_reloc_p (fixp->fx_r_type)))
|
|| jalr_reloc_p (fixp->fx_r_type)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
/* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
|
/* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
|
||||||
to a floating-point stub. The same is true for non-R_MIPS16_26
|
to a floating-point stub. The same is true for non-R_MIPS16_26
|
||||||
relocations against MIPS16 functions; in this case, the stub becomes
|
relocations against MIPS16 functions; in this case, the stub becomes
|
||||||
@ -18088,15 +17987,13 @@ mips_fix_adjustable (fixS *fixp)
|
|||||||
targets.) This approach is a little simpler than trying to detect
|
targets.) This approach is a little simpler than trying to detect
|
||||||
stub sections, and gives the "all or nothing" per-symbol consistency
|
stub sections, and gives the "all or nothing" per-symbol consistency
|
||||||
that we have for MIPS16 symbols. */
|
that we have for MIPS16 symbols. */
|
||||||
if (IS_ELF
|
if (fixp->fx_subsy == NULL
|
||||||
&& fixp->fx_subsy == NULL
|
|
||||||
&& (ELF_ST_IS_MIPS16 (S_GET_OTHER (fixp->fx_addsy))
|
&& (ELF_ST_IS_MIPS16 (S_GET_OTHER (fixp->fx_addsy))
|
||||||
|| *symbol_get_tc (fixp->fx_addsy)
|
|| *symbol_get_tc (fixp->fx_addsy)
|
||||||
|| (HAVE_IN_PLACE_ADDENDS
|
|| (HAVE_IN_PLACE_ADDENDS
|
||||||
&& ELF_ST_IS_MICROMIPS (S_GET_OTHER (fixp->fx_addsy))
|
&& ELF_ST_IS_MICROMIPS (S_GET_OTHER (fixp->fx_addsy))
|
||||||
&& jmp_reloc_p (fixp->fx_r_type))))
|
&& jmp_reloc_p (fixp->fx_r_type))))
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -18128,14 +18025,6 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
|
|||||||
/* At this point, fx_addnumber is "symbol offset - pcrel address".
|
/* At this point, fx_addnumber is "symbol offset - pcrel address".
|
||||||
Relocations want only the symbol offset. */
|
Relocations want only the symbol offset. */
|
||||||
reloc->addend = fixp->fx_addnumber + reloc->address;
|
reloc->addend = fixp->fx_addnumber + reloc->address;
|
||||||
if (!IS_ELF)
|
|
||||||
{
|
|
||||||
/* A gruesome hack which is a result of the gruesome gas
|
|
||||||
reloc handling. What's worse, for COFF (as opposed to
|
|
||||||
ECOFF), we might need yet another copy of reloc->address.
|
|
||||||
See bfd_install_relocation. */
|
|
||||||
reloc->addend += reloc->address;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
reloc->addend = fixp->fx_addnumber;
|
reloc->addend = fixp->fx_addnumber;
|
||||||
@ -18546,10 +18435,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
|
|||||||
/* Make a label at the end for use with the branch. */
|
/* Make a label at the end for use with the branch. */
|
||||||
l = symbol_new (micromips_label_name (), asec, fragp->fr_fix, fragp);
|
l = symbol_new (micromips_label_name (), asec, fragp->fr_fix, fragp);
|
||||||
micromips_label_inc ();
|
micromips_label_inc ();
|
||||||
#if defined(OBJ_ELF) || defined(OBJ_MAYBE_ELF)
|
S_SET_OTHER (l, ELF_ST_SET_MICROMIPS (S_GET_OTHER (l)));
|
||||||
if (IS_ELF)
|
|
||||||
S_SET_OTHER (l, ELF_ST_SET_MICROMIPS (S_GET_OTHER (l)));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Refer to it. */
|
/* Refer to it. */
|
||||||
fixp = fix_new (fragp, buf - fragp->fr_literal, 4, l, 0, TRUE,
|
fixp = fix_new (fragp, buf - fragp->fr_literal, 4, l, 0, TRUE,
|
||||||
@ -18783,8 +18669,6 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
|
|
||||||
/* This function is called after the relocs have been generated.
|
/* This function is called after the relocs have been generated.
|
||||||
We've been storing mips16 text labels as odd. Here we convert them
|
We've been storing mips16 text labels as odd. Here we convert them
|
||||||
back to even for the convenience of the debugger. */
|
back to even for the convenience of the debugger. */
|
||||||
@ -18795,9 +18679,6 @@ mips_frob_file_after_relocs (void)
|
|||||||
asymbol **syms;
|
asymbol **syms;
|
||||||
unsigned int count, i;
|
unsigned int count, i;
|
||||||
|
|
||||||
if (!IS_ELF)
|
|
||||||
return;
|
|
||||||
|
|
||||||
syms = bfd_get_outsymbols (stdoutput);
|
syms = bfd_get_outsymbols (stdoutput);
|
||||||
count = bfd_get_symcount (stdoutput);
|
count = bfd_get_symcount (stdoutput);
|
||||||
for (i = 0; i < count; i++, syms++)
|
for (i = 0; i < count; i++, syms++)
|
||||||
@ -18812,8 +18693,6 @@ mips_frob_file_after_relocs (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function is called whenever a label is defined, including fake
|
/* This function is called whenever a label is defined, including fake
|
||||||
labels instantiated off the dot special symbol. It is used when
|
labels instantiated off the dot special symbol. It is used when
|
||||||
handling branch delays; if a branch has a label, we assume we cannot
|
handling branch delays; if a branch has a label, we assume we cannot
|
||||||
@ -18846,9 +18725,7 @@ void
|
|||||||
mips_define_label (symbolS *sym)
|
mips_define_label (symbolS *sym)
|
||||||
{
|
{
|
||||||
mips_record_label (sym);
|
mips_record_label (sym);
|
||||||
#ifdef OBJ_ELF
|
|
||||||
dwarf2_emit_label (sym);
|
dwarf2_emit_label (sym);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function is called by tc_new_dot_label whenever a new dot symbol
|
/* This function is called by tc_new_dot_label whenever a new dot symbol
|
||||||
@ -18862,8 +18739,6 @@ mips_add_dot_label (symbolS *sym)
|
|||||||
mips_compressed_mark_label (sym);
|
mips_compressed_mark_label (sym);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
|
|
||||||
|
|
||||||
/* Some special processing for a MIPS ELF file. */
|
/* Some special processing for a MIPS ELF file. */
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -18949,8 +18824,6 @@ mips_elf_final_processing (void)
|
|||||||
elf_elfheader (stdoutput)->e_flags |= ???;
|
elf_elfheader (stdoutput)->e_flags |= ???;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* OBJ_ELF || OBJ_MAYBE_ELF */
|
|
||||||
|
|
||||||
typedef struct proc {
|
typedef struct proc {
|
||||||
symbolS *func_sym;
|
symbolS *func_sym;
|
||||||
@ -19200,7 +19073,6 @@ s_mips_end (int x ATTRIBUTE_UNUSED)
|
|||||||
else
|
else
|
||||||
as_warn (_(".end directive missing or unknown symbol"));
|
as_warn (_(".end directive missing or unknown symbol"));
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
/* Create an expression to calculate the size of the function. */
|
/* Create an expression to calculate the size of the function. */
|
||||||
if (p && cur_proc_ptr)
|
if (p && cur_proc_ptr)
|
||||||
{
|
{
|
||||||
@ -19217,7 +19089,7 @@ s_mips_end (int x ATTRIBUTE_UNUSED)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Generate a .pdr section. */
|
/* Generate a .pdr section. */
|
||||||
if (IS_ELF && !ECOFF_DEBUGGING && mips_flag_pdr)
|
if (!ECOFF_DEBUGGING && mips_flag_pdr)
|
||||||
{
|
{
|
||||||
segT saved_seg = now_seg;
|
segT saved_seg = now_seg;
|
||||||
subsegT saved_subseg = now_subseg;
|
subsegT saved_subseg = now_subseg;
|
||||||
@ -19249,7 +19121,6 @@ s_mips_end (int x ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
subseg_set (saved_seg, saved_subseg);
|
subseg_set (saved_seg, saved_subseg);
|
||||||
}
|
}
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
|
|
||||||
cur_proc_ptr = NULL;
|
cur_proc_ptr = NULL;
|
||||||
}
|
}
|
||||||
@ -19307,8 +19178,9 @@ s_mips_ent (int aent)
|
|||||||
static void
|
static void
|
||||||
s_mips_frame (int ignore ATTRIBUTE_UNUSED)
|
s_mips_frame (int ignore ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
#ifdef OBJ_ELF
|
if (ECOFF_DEBUGGING)
|
||||||
if (IS_ELF && !ECOFF_DEBUGGING)
|
s_ignore (ignore);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
long val;
|
long val;
|
||||||
|
|
||||||
@ -19336,9 +19208,6 @@ s_mips_frame (int ignore ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
s_ignore (ignore);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The .fmask and .mask directives. If the mdebug section is present
|
/* The .fmask and .mask directives. If the mdebug section is present
|
||||||
@ -19350,8 +19219,9 @@ s_mips_frame (int ignore ATTRIBUTE_UNUSED)
|
|||||||
static void
|
static void
|
||||||
s_mips_mask (int reg_type)
|
s_mips_mask (int reg_type)
|
||||||
{
|
{
|
||||||
#ifdef OBJ_ELF
|
if (ECOFF_DEBUGGING)
|
||||||
if (IS_ELF && !ECOFF_DEBUGGING)
|
s_ignore (reg_type);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
long mask, off;
|
long mask, off;
|
||||||
|
|
||||||
@ -19385,9 +19255,6 @@ s_mips_mask (int reg_type)
|
|||||||
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif /* OBJ_ELF */
|
|
||||||
s_ignore (reg_type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A table describing all the processors gas knows about. Names are
|
/* A table describing all the processors gas knows about. Names are
|
||||||
@ -19787,7 +19654,6 @@ MIPS options:\n\
|
|||||||
--[no-]construct-floats [dis]allow floating point values to be constructed\n\
|
--[no-]construct-floats [dis]allow floating point values to be constructed\n\
|
||||||
--[no-]relax-branch [dis]allow out-of-range branches to be relaxed\n"
|
--[no-]relax-branch [dis]allow out-of-range branches to be relaxed\n"
|
||||||
));
|
));
|
||||||
#ifdef OBJ_ELF
|
|
||||||
fprintf (stream, _("\
|
fprintf (stream, _("\
|
||||||
-KPIC, -call_shared generate SVR4 position independent code\n\
|
-KPIC, -call_shared generate SVR4 position independent code\n\
|
||||||
-call_nonpic generate non-PIC code that can operate with DSOs\n\
|
-call_nonpic generate non-PIC code that can operate with DSOs\n\
|
||||||
@ -19813,7 +19679,6 @@ MIPS options:\n\
|
|||||||
-32 create o32 ABI object file (default)\n\
|
-32 create o32 ABI object file (default)\n\
|
||||||
-n32 create n32 ABI object file\n\
|
-n32 create n32 ABI object file\n\
|
||||||
-64 create 64 ABI object file\n"));
|
-64 create 64 ABI object file\n"));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TE_IRIX
|
#ifdef TE_IRIX
|
||||||
|
Reference in New Issue
Block a user