mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 19:50:13 +08:00
Sat Nov 22 15:50:09 1997 Klaus Kaempf <kkaempf@progis.de>
* config/tc-alpha.c (alpha_basereg_clobbered): Remove variable and all corresponding code.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
Sat Nov 22 15:50:09 1997 Klaus Kaempf <kkaempf@progis.de>
|
||||||
|
|
||||||
|
* config/tc-alpha.c (alpha_basereg_clobbered): Remove variable and
|
||||||
|
all corresponding code.
|
||||||
|
|
||||||
Thu Nov 20 15:06:08 1997 Richard Earnshaw <rearnsha@arm.com>
|
Thu Nov 20 15:06:08 1997 Richard Earnshaw <rearnsha@arm.com>
|
||||||
|
|
||||||
* config/tc-arm.h (TARGET_FORMAT for generic a.out targets): Allow
|
* config/tc-arm.h (TARGET_FORMAT for generic a.out targets): Allow
|
||||||
|
@ -398,7 +398,6 @@ static int alpha_flag_show_after_trunc = 0; /* -H */
|
|||||||
* longer than 64 characters, else longer symbol names are truncated.
|
* longer than 64 characters, else longer symbol names are truncated.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int alpha_basereg_clobbered;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* A table of CPU names and opcode sets. */
|
/* A table of CPU names and opcode sets. */
|
||||||
@ -2269,16 +2268,6 @@ load_expression (targreg, exp, pbasereg, poffset)
|
|||||||
#ifdef OBJ_EVAX
|
#ifdef OBJ_EVAX
|
||||||
offsetT link;
|
offsetT link;
|
||||||
|
|
||||||
if (alpha_basereg_clobbered)
|
|
||||||
{
|
|
||||||
/* no basereg, reload basreg from 0(FP). */
|
|
||||||
set_tok_reg (newtok[0], targreg);
|
|
||||||
set_tok_const (newtok[1], 0);
|
|
||||||
set_tok_preg (newtok[2], AXP_REG_FP);
|
|
||||||
basereg = targreg;
|
|
||||||
assemble_tokens ("ldq", newtok, 3, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Find symbol or symbol pointer in link section. */
|
/* Find symbol or symbol pointer in link section. */
|
||||||
|
|
||||||
if (exp->X_add_symbol == alpha_evax_proc.symbol)
|
if (exp->X_add_symbol == alpha_evax_proc.symbol)
|
||||||
@ -2602,15 +2591,6 @@ emit_ir_load (tok, ntok, opname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
emit_insn (&insn);
|
emit_insn (&insn);
|
||||||
#ifdef OBJ_EVAX
|
|
||||||
/* special hack. If the basereg is clobbered for a call
|
|
||||||
all lda's before the call don't have a basereg. */
|
|
||||||
if ((tok[0].X_op == O_register)
|
|
||||||
&& (tok[0].X_add_number == alpha_gp_register))
|
|
||||||
{
|
|
||||||
alpha_basereg_clobbered = 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle fp register loads, and both integer and fp register stores.
|
/* Handle fp register loads, and both integer and fp register stores.
|
||||||
@ -3249,19 +3229,6 @@ emit_jsrjmp (tok, ntok, vopname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
emit_insn (&insn);
|
emit_insn (&insn);
|
||||||
|
|
||||||
#ifdef OBJ_EVAX
|
|
||||||
alpha_basereg_clobbered = 0;
|
|
||||||
|
|
||||||
/* reload PV from 0(FP) if it is our current base register. */
|
|
||||||
if (alpha_gp_register == AXP_REG_PV)
|
|
||||||
{
|
|
||||||
set_tok_reg (newtok[0], AXP_REG_PV);
|
|
||||||
set_tok_const (newtok[1], 0);
|
|
||||||
set_tok_preg (newtok[2], AXP_REG_FP);
|
|
||||||
assemble_tokens ("ldq", newtok, 3, 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The ret and jcr instructions differ from their instruction
|
/* The ret and jcr instructions differ from their instruction
|
||||||
@ -3329,9 +3296,10 @@ s_alpha_data (i)
|
|||||||
alpha_current_align = 0;
|
alpha_current_align = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OBJ_ECOFF
|
#if defined (OBJ_ECOFF) || defined (OBJ_EVAX)
|
||||||
|
|
||||||
/* Handle the OSF/1 .comm pseudo quirks. */
|
/* Handle the OSF/1 and openVMS .comm pseudo quirks.
|
||||||
|
openVMS constructs a section for every common symbol. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
s_alpha_comm (ignore)
|
s_alpha_comm (ignore)
|
||||||
@ -3343,6 +3311,12 @@ s_alpha_comm (ignore)
|
|||||||
offsetT temp;
|
offsetT temp;
|
||||||
register symbolS *symbolP;
|
register symbolS *symbolP;
|
||||||
|
|
||||||
|
#ifdef OBJ_EVAX
|
||||||
|
segT current_section = now_seg;
|
||||||
|
int current_subsec = now_subseg;
|
||||||
|
segT new_seg;
|
||||||
|
#endif
|
||||||
|
|
||||||
name = input_line_pointer;
|
name = input_line_pointer;
|
||||||
c = get_symbol_end ();
|
c = get_symbol_end ();
|
||||||
|
|
||||||
@ -3369,6 +3343,11 @@ s_alpha_comm (ignore)
|
|||||||
symbolP = symbol_find_or_make (name);
|
symbolP = symbol_find_or_make (name);
|
||||||
*p = c;
|
*p = c;
|
||||||
|
|
||||||
|
#ifdef OBJ_EVAX
|
||||||
|
/* Make a section for the common symbol. */
|
||||||
|
new_seg = subseg_new (xstrdup (name), 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP))
|
if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP))
|
||||||
{
|
{
|
||||||
as_bad ("Ignoring attempt to re-define symbol");
|
as_bad ("Ignoring attempt to re-define symbol");
|
||||||
@ -3376,6 +3355,16 @@ s_alpha_comm (ignore)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OBJ_EVAX
|
||||||
|
if (bfd_section_size (stdoutput, new_seg) > 0)
|
||||||
|
{
|
||||||
|
if (bfd_section_size (stdoutput, new_seg) != temp)
|
||||||
|
as_bad ("Length of .comm \"%s\" is already %ld. Not changed to %ld.",
|
||||||
|
S_GET_NAME (symbolP),
|
||||||
|
(long) bfd_section_size (stdoutput, new_seg),
|
||||||
|
(long) temp);
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (S_GET_VALUE (symbolP))
|
if (S_GET_VALUE (symbolP))
|
||||||
{
|
{
|
||||||
if (S_GET_VALUE (symbolP) != (valueT) temp)
|
if (S_GET_VALUE (symbolP) != (valueT) temp)
|
||||||
@ -3384,12 +3373,25 @@ s_alpha_comm (ignore)
|
|||||||
(long) S_GET_VALUE (symbolP),
|
(long) S_GET_VALUE (symbolP),
|
||||||
(long) temp);
|
(long) temp);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#ifdef OBJ_EVAX
|
||||||
|
subseg_set (new_seg, 0);
|
||||||
|
p = frag_more (temp);
|
||||||
|
new_seg->flags |= SEC_IS_COMMON;
|
||||||
|
if (! S_IS_DEFINED (symbolP))
|
||||||
|
symbolP->bsym->section = new_seg;
|
||||||
|
#else
|
||||||
S_SET_VALUE (symbolP, (valueT) temp);
|
S_SET_VALUE (symbolP, (valueT) temp);
|
||||||
|
#endif
|
||||||
S_SET_EXTERNAL (symbolP);
|
S_SET_EXTERNAL (symbolP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OBJ_EVAX
|
||||||
|
subseg_set (current_section, current_subsec);
|
||||||
|
#endif
|
||||||
|
|
||||||
know (symbolP->sy_frag == &zero_address_frag);
|
know (symbolP->sy_frag == &zero_address_frag);
|
||||||
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
@ -3490,7 +3492,6 @@ static void
|
|||||||
s_alpha_prologue (ignore)
|
s_alpha_prologue (ignore)
|
||||||
int ignore;
|
int ignore;
|
||||||
{
|
{
|
||||||
alpha_basereg_clobbered = 0;
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -3886,7 +3887,6 @@ s_alpha_end (ignore)
|
|||||||
*input_line_pointer = c;
|
*input_line_pointer = c;
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
alpha_evax_proc.symbol = 0;
|
alpha_evax_proc.symbol = 0;
|
||||||
alpha_basereg_clobbered = 0;
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -4312,7 +4312,7 @@ const pseudo_typeS md_pseudo_table[] =
|
|||||||
{ "end", s_alpha_end, 0},
|
{ "end", s_alpha_end, 0},
|
||||||
{ "file", s_alpha_file, 0},
|
{ "file", s_alpha_file, 0},
|
||||||
{ "rdata", s_alpha_section, 1},
|
{ "rdata", s_alpha_section, 1},
|
||||||
{ "comm", s_alpha_section, 2},
|
{ "comm", s_alpha_comm, 0},
|
||||||
{ "link", s_alpha_section, 3},
|
{ "link", s_alpha_section, 3},
|
||||||
{ "ctors", s_alpha_section, 4},
|
{ "ctors", s_alpha_section, 4},
|
||||||
{ "dtors", s_alpha_section, 5},
|
{ "dtors", s_alpha_section, 5},
|
||||||
|
Reference in New Issue
Block a user