mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +08:00
* config/tc-hppa.c (pa_ip): Fix thinko in 21bit range check.
This commit is contained in:
@ -1,3 +1,13 @@
|
|||||||
|
Tue Nov 16 20:38:21 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
|
||||||
|
|
||||||
|
* config/tc-hppa.c (pa_ip): Fix thinko in 21bit range check.
|
||||||
|
|
||||||
|
Sat Nov 13 18:22:48 1993 Steve Chamberlain (sac@jonny.cygnus.com)
|
||||||
|
|
||||||
|
* config/tc-sh.c (md_apply_fix): Cope with IMM16 type too.
|
||||||
|
* config/tc-z8k.c (build_bytes, md_apply_fix): Understand nDISP7
|
||||||
|
relocs.
|
||||||
|
|
||||||
Fri Nov 12 16:51:47 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
|
Fri Nov 12 16:51:47 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
|
||||||
|
|
||||||
* config/tc-hppa.[ch]: Fix assorted trivial indention problems.
|
* config/tc-hppa.[ch]: Fix assorted trivial indention problems.
|
||||||
@ -8,7 +18,7 @@ Fri Nov 12 15:26:21 1993 Ken Raeburn (raeburn@cygnus.com)
|
|||||||
|
|
||||||
* Makefile.in (VERSION): Updated following 2.2 release.
|
* Makefile.in (VERSION): Updated following 2.2 release.
|
||||||
|
|
||||||
Fri Nov 12 14:52:17 1993 Jeffrey A. Law (law@snake.cs.utah.edu
|
Fri Nov 12 14:52:17 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
|
||||||
|
|
||||||
* config/tc-hppa.c (hppa_fix_struct): Use a real type for the
|
* config/tc-hppa.c (hppa_fix_struct): Use a real type for the
|
||||||
field selector, rather than an int. All uses of field selectors
|
field selector, rather than an int. All uses of field selectors
|
||||||
|
@ -184,17 +184,18 @@ fp_operand_format;
|
|||||||
an EXPORT or IMPORT directive. Only SOM uses this formation
|
an EXPORT or IMPORT directive. Only SOM uses this formation
|
||||||
(ELF has no need for it). */
|
(ELF has no need for it). */
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
SYMBOL_TYPE_UNKNOWN,
|
SYMBOL_TYPE_UNKNOWN,
|
||||||
SYMBOL_TYPE_ABSOLUTE,
|
SYMBOL_TYPE_ABSOLUTE,
|
||||||
SYMBOL_TYPE_CODE,
|
SYMBOL_TYPE_CODE,
|
||||||
SYMBOL_TYPE_DATA,
|
SYMBOL_TYPE_DATA,
|
||||||
SYMBOL_TYPE_ENTRY,
|
SYMBOL_TYPE_ENTRY,
|
||||||
SYMBOL_TYPE_MILLICODE,
|
SYMBOL_TYPE_MILLICODE,
|
||||||
SYMBOL_TYPE_PLABEL,
|
SYMBOL_TYPE_PLABEL,
|
||||||
SYMBOL_TYPE_PRI_PROG,
|
SYMBOL_TYPE_PRI_PROG,
|
||||||
SYMBOL_TYPE_SEC_PROG,
|
SYMBOL_TYPE_SEC_PROG,
|
||||||
} pa_symbol_type;
|
}
|
||||||
|
pa_symbol_type;
|
||||||
|
|
||||||
/* This structure contains information needed to assemble
|
/* This structure contains information needed to assemble
|
||||||
individual instructions. */
|
individual instructions. */
|
||||||
@ -489,7 +490,7 @@ struct default_space_dict
|
|||||||
|
|
||||||
/* Extra information needed to perform fixups (relocations) on the PA. */
|
/* Extra information needed to perform fixups (relocations) on the PA. */
|
||||||
struct hppa_fix_struct
|
struct hppa_fix_struct
|
||||||
{
|
{
|
||||||
/* The field selector. */
|
/* The field selector. */
|
||||||
enum hppa_reloc_field_selector_type fx_r_field;
|
enum hppa_reloc_field_selector_type fx_r_field;
|
||||||
|
|
||||||
@ -504,31 +505,31 @@ struct hppa_fix_struct
|
|||||||
|
|
||||||
/* The unwind descriptor associated with this fixup. */
|
/* The unwind descriptor associated with this fixup. */
|
||||||
char fx_unwind[8];
|
char fx_unwind[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Structure to hold information about predefined registers. */
|
/* Structure to hold information about predefined registers. */
|
||||||
|
|
||||||
struct pd_reg
|
struct pd_reg
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
int value;
|
int value;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This structure defines the mapping from a FP condition string
|
/* This structure defines the mapping from a FP condition string
|
||||||
to a condition number which can be recorded in an instruction. */
|
to a condition number which can be recorded in an instruction. */
|
||||||
struct fp_cond_map
|
struct fp_cond_map
|
||||||
{
|
{
|
||||||
char *string;
|
char *string;
|
||||||
int cond;
|
int cond;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This structure defines a mapping from a field selector
|
/* This structure defines a mapping from a field selector
|
||||||
string to a field selector type. */
|
string to a field selector type. */
|
||||||
struct selector_entry
|
struct selector_entry
|
||||||
{
|
{
|
||||||
char *prefix;
|
char *prefix;
|
||||||
int field_selector;
|
int field_selector;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Prototypes for functions local to tc-hppa.c. */
|
/* Prototypes for functions local to tc-hppa.c. */
|
||||||
|
|
||||||
@ -586,11 +587,11 @@ static label_symbol_struct *pa_get_label PARAMS ((void));
|
|||||||
static sd_chain_struct *create_new_space PARAMS ((char *, int, char,
|
static sd_chain_struct *create_new_space PARAMS ((char *, int, char,
|
||||||
char, char, char,
|
char, char, char,
|
||||||
asection *, int));
|
asection *, int));
|
||||||
static ssd_chain_struct * create_new_subspace PARAMS ((sd_chain_struct *,
|
static ssd_chain_struct *create_new_subspace PARAMS ((sd_chain_struct *,
|
||||||
char *, char, char,
|
char *, char, char,
|
||||||
char, char, char,
|
char, char, char,
|
||||||
char, int, int, int,
|
char, int, int, int,
|
||||||
int, asection *));
|
int, asection *));
|
||||||
static ssd_chain_struct *update_subspace PARAMS ((sd_chain_struct *,
|
static ssd_chain_struct *update_subspace PARAMS ((sd_chain_struct *,
|
||||||
char *, char, char, char,
|
char *, char, char, char,
|
||||||
char, char, char, int,
|
char, char, char, int,
|
||||||
@ -599,8 +600,8 @@ static ssd_chain_struct *update_subspace PARAMS ((sd_chain_struct *,
|
|||||||
static sd_chain_struct *is_defined_space PARAMS ((char *));
|
static sd_chain_struct *is_defined_space PARAMS ((char *));
|
||||||
static ssd_chain_struct *is_defined_subspace PARAMS ((char *));
|
static ssd_chain_struct *is_defined_subspace PARAMS ((char *));
|
||||||
static sd_chain_struct *pa_segment_to_space PARAMS ((asection *));
|
static sd_chain_struct *pa_segment_to_space PARAMS ((asection *));
|
||||||
static ssd_chain_struct * pa_subsegment_to_subspace PARAMS ((asection *,
|
static ssd_chain_struct *pa_subsegment_to_subspace PARAMS ((asection *,
|
||||||
subsegT));
|
subsegT));
|
||||||
static sd_chain_struct *pa_find_space_by_number PARAMS ((int));
|
static sd_chain_struct *pa_find_space_by_number PARAMS ((int));
|
||||||
static unsigned int pa_subspace_start PARAMS ((sd_chain_struct *, int));
|
static unsigned int pa_subspace_start PARAMS ((sd_chain_struct *, int));
|
||||||
static void pa_ip PARAMS ((char *));
|
static void pa_ip PARAMS ((char *));
|
||||||
@ -646,7 +647,8 @@ static struct call_info *last_call_info;
|
|||||||
static struct call_desc last_call_desc;
|
static struct call_desc last_call_desc;
|
||||||
|
|
||||||
/* Relaxation isn't supported for the PA yet. */
|
/* Relaxation isn't supported for the PA yet. */
|
||||||
const relax_typeS md_relax_table[] = {0};
|
const relax_typeS md_relax_table[] =
|
||||||
|
{0};
|
||||||
|
|
||||||
/* Jumps are always the same size -- one instruction. */
|
/* Jumps are always the same size -- one instruction. */
|
||||||
int md_short_jump_size = 4;
|
int md_short_jump_size = 4;
|
||||||
@ -1057,7 +1059,7 @@ static const struct pd_reg pre_defined_registers[] =
|
|||||||
/* This table is sorted by order of the length of the string. This is
|
/* This table is sorted by order of the length of the string. This is
|
||||||
so we check for <> before we check for <. If we had a <> and checked
|
so we check for <> before we check for <. If we had a <> and checked
|
||||||
for < first, we would get a false match. */
|
for < first, we would get a false match. */
|
||||||
static const struct fp_cond_map fp_cond_map [] =
|
static const struct fp_cond_map fp_cond_map[] =
|
||||||
{
|
{
|
||||||
{"false?", 0},
|
{"false?", 0},
|
||||||
{"false", 1},
|
{"false", 1},
|
||||||
@ -1329,7 +1331,7 @@ fix_new_hppa (frag, where, size, add_symbol, offset, exp, pcrel,
|
|||||||
fixS *new_fix;
|
fixS *new_fix;
|
||||||
|
|
||||||
struct hppa_fix_struct *hppa_fix = (struct hppa_fix_struct *)
|
struct hppa_fix_struct *hppa_fix = (struct hppa_fix_struct *)
|
||||||
obstack_alloc (¬es, sizeof (struct hppa_fix_struct));
|
obstack_alloc (¬es, sizeof (struct hppa_fix_struct));
|
||||||
|
|
||||||
if (exp != NULL)
|
if (exp != NULL)
|
||||||
new_fix = fix_new_exp (frag, where, size, exp, pcrel, r_type);
|
new_fix = fix_new_exp (frag, where, size, exp, pcrel, r_type);
|
||||||
@ -1345,8 +1347,8 @@ fix_new_hppa (frag, where, size, add_symbol, offset, exp, pcrel,
|
|||||||
bcopy (unwind_desc, hppa_fix->fx_unwind, 8);
|
bcopy (unwind_desc, hppa_fix->fx_unwind, 8);
|
||||||
|
|
||||||
/* If necessary call BFD backend function to attach the
|
/* If necessary call BFD backend function to attach the
|
||||||
unwind bits to the target dependent parts of a BFD symbol.
|
unwind bits to the target dependent parts of a BFD symbol.
|
||||||
Yuk. */
|
Yuk. */
|
||||||
#ifdef obj_attach_unwind_info
|
#ifdef obj_attach_unwind_info
|
||||||
obj_attach_unwind_info (add_symbol->bsym, unwind_desc);
|
obj_attach_unwind_info (add_symbol->bsym, unwind_desc);
|
||||||
#endif
|
#endif
|
||||||
@ -1431,7 +1433,7 @@ md_begin ()
|
|||||||
while (i < NUMOPCODES)
|
while (i < NUMOPCODES)
|
||||||
{
|
{
|
||||||
const char *name = pa_opcodes[i].name;
|
const char *name = pa_opcodes[i].name;
|
||||||
retval = hash_insert (op_hash, name, (struct pa_opcode *)&pa_opcodes[i]);
|
retval = hash_insert (op_hash, name, (struct pa_opcode *) &pa_opcodes[i]);
|
||||||
if (retval != NULL && *retval != '\0')
|
if (retval != NULL && *retval != '\0')
|
||||||
{
|
{
|
||||||
as_fatal ("Internal error: can't hash `%s': %s\n", name, retval);
|
as_fatal ("Internal error: can't hash `%s': %s\n", name, retval);
|
||||||
@ -1644,7 +1646,7 @@ pa_ip (str)
|
|||||||
num = pa_get_absolute_expression (&the_insn, &s);
|
num = pa_get_absolute_expression (&the_insn, &s);
|
||||||
s = expr_end;
|
s = expr_end;
|
||||||
CHECK_FIELD (num, 15, -16, 0)
|
CHECK_FIELD (num, 15, -16, 0)
|
||||||
low_sign_unext (num, 5, &num);
|
low_sign_unext (num, 5, &num);
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, num, 0);
|
INSERT_FIELD_AND_CONTINUE (opcode, num, 0);
|
||||||
|
|
||||||
/* Handle an unsigned 5 bit immediate at 31. */
|
/* Handle an unsigned 5 bit immediate at 31. */
|
||||||
@ -2173,7 +2175,7 @@ pa_ip (str)
|
|||||||
if (the_insn.exp.X_op == O_constant)
|
if (the_insn.exp.X_op == O_constant)
|
||||||
{
|
{
|
||||||
num = evaluate_absolute (&the_insn);
|
num = evaluate_absolute (&the_insn);
|
||||||
CHECK_FIELD (num, 2097151, 0, 0);
|
CHECK_FIELD (num >> 11, 1048575, -1048576, 0);
|
||||||
dis_assemble_21 (num, &num);
|
dis_assemble_21 (num, &num);
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, num, 0);
|
INSERT_FIELD_AND_CONTINUE (opcode, num, 0);
|
||||||
}
|
}
|
||||||
@ -2231,7 +2233,7 @@ pa_ip (str)
|
|||||||
get_expression (s);
|
get_expression (s);
|
||||||
s = expr_end;
|
s = expr_end;
|
||||||
the_insn.pcrel = 1;
|
the_insn.pcrel = 1;
|
||||||
if (! the_insn.exp.X_add_symbol
|
if (!the_insn.exp.X_add_symbol
|
||||||
|| !strcmp (S_GET_NAME (the_insn.exp.X_add_symbol),
|
|| !strcmp (S_GET_NAME (the_insn.exp.X_add_symbol),
|
||||||
"L$0\001"))
|
"L$0\001"))
|
||||||
{
|
{
|
||||||
@ -2251,7 +2253,7 @@ pa_ip (str)
|
|||||||
sign_unext (num >> 2, 17, &result);
|
sign_unext (num >> 2, 17, &result);
|
||||||
dis_assemble_17 (result, &w1, &w2, &w);
|
dis_assemble_17 (result, &w1, &w2, &w);
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode,
|
INSERT_FIELD_AND_CONTINUE (opcode,
|
||||||
((w2 << 2) | (w1 << 16) | w), 0);
|
((w2 << 2) | (w1 << 16) | w), 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2271,7 +2273,7 @@ pa_ip (str)
|
|||||||
get_expression (s);
|
get_expression (s);
|
||||||
s = expr_end;
|
s = expr_end;
|
||||||
the_insn.pcrel = 0;
|
the_insn.pcrel = 0;
|
||||||
if (! the_insn.exp.X_add_symbol
|
if (!the_insn.exp.X_add_symbol
|
||||||
|| !strcmp (S_GET_NAME (the_insn.exp.X_add_symbol),
|
|| !strcmp (S_GET_NAME (the_insn.exp.X_add_symbol),
|
||||||
"L$0\001"))
|
"L$0\001"))
|
||||||
{
|
{
|
||||||
@ -2291,7 +2293,7 @@ pa_ip (str)
|
|||||||
sign_unext (num >> 2, 17, &result);
|
sign_unext (num >> 2, 17, &result);
|
||||||
dis_assemble_17 (result, &w1, &w2, &w);
|
dis_assemble_17 (result, &w1, &w2, &w);
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode,
|
INSERT_FIELD_AND_CONTINUE (opcode,
|
||||||
((w2 << 2) | (w1 << 16) | w), 0);
|
((w2 << 2) | (w1 << 16) | w), 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2848,7 +2850,7 @@ tc_gen_reloc (section, fixp)
|
|||||||
case R_HPPA_COMPLEX:
|
case R_HPPA_COMPLEX:
|
||||||
case R_HPPA_COMPLEX_PCREL_CALL:
|
case R_HPPA_COMPLEX_PCREL_CALL:
|
||||||
case R_HPPA_COMPLEX_ABS_CALL:
|
case R_HPPA_COMPLEX_ABS_CALL:
|
||||||
abort();
|
abort ();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert (n_relocs == 1);
|
assert (n_relocs == 1);
|
||||||
@ -2857,7 +2859,7 @@ tc_gen_reloc (section, fixp)
|
|||||||
|
|
||||||
reloc->sym_ptr_ptr = &fixp->fx_addsy->bsym;
|
reloc->sym_ptr_ptr = &fixp->fx_addsy->bsym;
|
||||||
reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
|
reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
|
||||||
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where ;
|
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
||||||
|
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
@ -3038,7 +3040,7 @@ md_apply_fix_1 (fixP, val)
|
|||||||
fmt = 0;
|
fmt = 0;
|
||||||
|
|
||||||
/* Remember this value for emit_reloc. FIXME, is this braindamage
|
/* Remember this value for emit_reloc. FIXME, is this braindamage
|
||||||
documented anywhere!?! */
|
documented anywhere!?! */
|
||||||
fixP->fx_addnumber = val;
|
fixP->fx_addnumber = val;
|
||||||
|
|
||||||
/* Check if this is an undefined symbol. No relocation can
|
/* Check if this is an undefined symbol. No relocation can
|
||||||
@ -3095,7 +3097,7 @@ md_apply_fix_1 (fixP, val)
|
|||||||
CHECK_FIELD (new_val, 8191, -8192, 0)
|
CHECK_FIELD (new_val, 8191, -8192, 0)
|
||||||
|
|
||||||
/* Mask off 11 bits to be changed. */
|
/* Mask off 11 bits to be changed. */
|
||||||
sign_unext ((new_val - 8) >> 2, 12, &result);
|
sign_unext ((new_val - 8) >> 2, 12, &result);
|
||||||
bfd_put_32 (stdoutput,
|
bfd_put_32 (stdoutput,
|
||||||
bfd_get_32 (stdoutput, buf) & 0xffffe002,
|
bfd_get_32 (stdoutput, buf) & 0xffffe002,
|
||||||
buf);
|
buf);
|
||||||
@ -3110,7 +3112,7 @@ md_apply_fix_1 (fixP, val)
|
|||||||
|
|
||||||
/* Handle some of the opcodes with the 'W' operand type. */
|
/* Handle some of the opcodes with the 'W' operand type. */
|
||||||
case 17:
|
case 17:
|
||||||
/* If a long-call stub or argument relocation stub is
|
/* If a long-call stub or argument relocation stub is
|
||||||
needed, then we can not apply this relocation, instead
|
needed, then we can not apply this relocation, instead
|
||||||
the linker must handle it. */
|
the linker must handle it. */
|
||||||
if (new_val > 262143 || new_val < -262144
|
if (new_val > 262143 || new_val < -262144
|
||||||
@ -4315,7 +4317,7 @@ pa_callinfo (unused)
|
|||||||
temp = 0;
|
temp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* callinfo is in bytes and unwind_desc is in 8 byte units. */
|
/* callinfo is in bytes and unwind_desc is in 8 byte units. */
|
||||||
last_call_info->ci_unwind.descriptor.frame_size = temp / 8;
|
last_call_info->ci_unwind.descriptor.frame_size = temp / 8;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -4384,7 +4386,7 @@ pa_callinfo (unused)
|
|||||||
last_call_info->ci_unwind.descriptor.save_sp = 1;
|
last_call_info->ci_unwind.descriptor.save_sp = 1;
|
||||||
}
|
}
|
||||||
/* Is this an unwindable procedure. If so mark it so
|
/* Is this an unwindable procedure. If so mark it so
|
||||||
in the unwind descriptor. */
|
in the unwind descriptor. */
|
||||||
else if ((strncasecmp (name, "no_unwind", 9) == 0))
|
else if ((strncasecmp (name, "no_unwind", 9) == 0))
|
||||||
{
|
{
|
||||||
p = input_line_pointer;
|
p = input_line_pointer;
|
||||||
@ -4392,7 +4394,7 @@ pa_callinfo (unused)
|
|||||||
last_call_info->ci_unwind.descriptor.cannot_unwind = 1;
|
last_call_info->ci_unwind.descriptor.cannot_unwind = 1;
|
||||||
}
|
}
|
||||||
/* Is this an interrupt routine. If so mark it in the
|
/* Is this an interrupt routine. If so mark it in the
|
||||||
unwind descriptor. */
|
unwind descriptor. */
|
||||||
else if ((strncasecmp (name, "hpux_int", 7) == 0))
|
else if ((strncasecmp (name, "hpux_int", 7) == 0))
|
||||||
{
|
{
|
||||||
p = input_line_pointer;
|
p = input_line_pointer;
|
||||||
@ -4467,9 +4469,9 @@ pa_comm (unused)
|
|||||||
if (symbol)
|
if (symbol)
|
||||||
{
|
{
|
||||||
/* It is incorrect to check S_IS_DEFINED at this point as
|
/* It is incorrect to check S_IS_DEFINED at this point as
|
||||||
the symbol will *always* be defined. FIXME. How to
|
the symbol will *always* be defined. FIXME. How to
|
||||||
correctly determine when this label really as been
|
correctly determine when this label really as been
|
||||||
defined before. */
|
defined before. */
|
||||||
if (S_GET_VALUE (symbol))
|
if (S_GET_VALUE (symbol))
|
||||||
{
|
{
|
||||||
if (S_GET_VALUE (symbol) != size)
|
if (S_GET_VALUE (symbol) != size)
|
||||||
@ -4537,7 +4539,7 @@ static void
|
|||||||
pa_enter (unused)
|
pa_enter (unused)
|
||||||
int unused;
|
int unused;
|
||||||
{
|
{
|
||||||
abort();
|
abort ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4579,7 +4581,7 @@ pa_entry (unused)
|
|||||||
fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
|
fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
|
||||||
last_call_info->start_symbol, (offsetT) 0, NULL,
|
last_call_info->start_symbol, (offsetT) 0, NULL,
|
||||||
0, R_HPPA_ENTRY, e_fsel, 0, 0,
|
0, R_HPPA_ENTRY, e_fsel, 0, 0,
|
||||||
(char *)&last_call_info->ci_unwind.descriptor);
|
(char *) &last_call_info->ci_unwind.descriptor);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -4780,11 +4782,11 @@ pa_type_args (symbolP, is_export)
|
|||||||
{
|
{
|
||||||
input_line_pointer += 4;
|
input_line_pointer += 4;
|
||||||
/* IMPORTing/EXPORTing CODE types for functions is meaningless for SOM,
|
/* IMPORTing/EXPORTing CODE types for functions is meaningless for SOM,
|
||||||
instead one should be IMPORTing/EXPORTing ENTRY types.
|
instead one should be IMPORTing/EXPORTing ENTRY types.
|
||||||
|
|
||||||
Complain if one tries to EXPORT a CODE type since that's never
|
Complain if one tries to EXPORT a CODE type since that's never
|
||||||
done. Both GCC and HP C still try to IMPORT CODE types, so
|
done. Both GCC and HP C still try to IMPORT CODE types, so
|
||||||
silently fix them to be ENTRY types. */
|
silently fix them to be ENTRY types. */
|
||||||
if (symbolP->bsym->flags & BSF_FUNCTION)
|
if (symbolP->bsym->flags & BSF_FUNCTION)
|
||||||
{
|
{
|
||||||
if (is_export)
|
if (is_export)
|
||||||
@ -4923,9 +4925,9 @@ pa_import (unused)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Sigh. To be compatable with the HP assembler and to help
|
/* Sigh. To be compatable with the HP assembler and to help
|
||||||
poorly written assembly code, we assign a type based on
|
poorly written assembly code, we assign a type based on
|
||||||
the the current segment. Note only BSF_FUNCTION really
|
the the current segment. Note only BSF_FUNCTION really
|
||||||
matters, we do not need to set the full SYMBOL_TYPE_* info here. */
|
matters, we do not need to set the full SYMBOL_TYPE_* info here. */
|
||||||
if (now_seg == text_section)
|
if (now_seg == text_section)
|
||||||
symbol->bsym->flags |= BSF_FUNCTION;
|
symbol->bsym->flags |= BSF_FUNCTION;
|
||||||
|
|
||||||
@ -4975,7 +4977,7 @@ static void
|
|||||||
pa_leave (unused)
|
pa_leave (unused)
|
||||||
int unused;
|
int unused;
|
||||||
{
|
{
|
||||||
abort();
|
abort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle a .ORIGIN pseudo-op. */
|
/* Handle a .ORIGIN pseudo-op. */
|
||||||
@ -5198,7 +5200,7 @@ pa_parse_space_stmt (space_name, create_flag)
|
|||||||
{
|
{
|
||||||
as_bad ("Invalid .SPACE argument");
|
as_bad ("Invalid .SPACE argument");
|
||||||
*input_line_pointer = c;
|
*input_line_pointer = c;
|
||||||
if (! is_end_of_statement ())
|
if (!is_end_of_statement ())
|
||||||
input_line_pointer++;
|
input_line_pointer++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5495,7 +5497,7 @@ pa_subspace (unused)
|
|||||||
space = current_space;
|
space = current_space;
|
||||||
ssd = is_defined_subspace (ss_name);
|
ssd = is_defined_subspace (ss_name);
|
||||||
/* Allow user to override the builtin attributes of subspaces. But
|
/* Allow user to override the builtin attributes of subspaces. But
|
||||||
only allow the attributes to be changed once! */
|
only allow the attributes to be changed once! */
|
||||||
if (ssd && SUBSPACE_DEFINED (ssd))
|
if (ssd && SUBSPACE_DEFINED (ssd))
|
||||||
{
|
{
|
||||||
subseg_set (ssd->ssd_seg, ssd->ssd_subseg);
|
subseg_set (ssd->ssd_seg, ssd->ssd_subseg);
|
||||||
@ -5604,7 +5606,7 @@ pa_subspace (unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Compute a reasonable set of BFD flags based on the information
|
/* Compute a reasonable set of BFD flags based on the information
|
||||||
in the .subspace directive. */
|
in the .subspace directive. */
|
||||||
applicable = bfd_applicable_section_flags (stdoutput);
|
applicable = bfd_applicable_section_flags (stdoutput);
|
||||||
flags = 0;
|
flags = 0;
|
||||||
if (loadable)
|
if (loadable)
|
||||||
@ -5622,17 +5624,17 @@ pa_subspace (unused)
|
|||||||
applicable &= flags;
|
applicable &= flags;
|
||||||
|
|
||||||
/* If this is an existing subspace, then we want to use the
|
/* If this is an existing subspace, then we want to use the
|
||||||
segment already associated with the subspace.
|
segment already associated with the subspace.
|
||||||
|
|
||||||
FIXME NOW! ELF BFD doesn't appear to be ready to deal with
|
FIXME NOW! ELF BFD doesn't appear to be ready to deal with
|
||||||
lots of sections. It might be a problem in the PA ELF
|
lots of sections. It might be a problem in the PA ELF
|
||||||
code, I do not know yet. For now avoid creating anything
|
code, I do not know yet. For now avoid creating anything
|
||||||
but the "standard" sections for ELF. */
|
but the "standard" sections for ELF. */
|
||||||
if (ssd)
|
if (ssd)
|
||||||
section = ssd->ssd_seg;
|
section = ssd->ssd_seg;
|
||||||
else if (alias)
|
else if (alias)
|
||||||
section = subseg_new (alias, 0);
|
section = subseg_new (alias, 0);
|
||||||
else if (! alias && USE_ALIASES)
|
else if (!alias && USE_ALIASES)
|
||||||
{
|
{
|
||||||
as_warn ("Ignoring subspace decl due to ELF BFD bugs.");
|
as_warn ("Ignoring subspace decl due to ELF BFD bugs.");
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
@ -5665,7 +5667,7 @@ pa_subspace (unused)
|
|||||||
code_only, common,
|
code_only, common,
|
||||||
dup_common, zero, sort,
|
dup_common, zero, sort,
|
||||||
access, space_index,
|
access, space_index,
|
||||||
alignment, quadrant, section);
|
alignment, quadrant, section);
|
||||||
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
current_subspace->ssd_seg = section;
|
current_subspace->ssd_seg = section;
|
||||||
@ -5695,7 +5697,7 @@ pa_spaces_begin ()
|
|||||||
if (pa_def_spaces[i].alias && USE_ALIASES)
|
if (pa_def_spaces[i].alias && USE_ALIASES)
|
||||||
name = pa_def_spaces[i].alias;
|
name = pa_def_spaces[i].alias;
|
||||||
else
|
else
|
||||||
name = pa_def_spaces[i].name;
|
name = pa_def_spaces[i].name;
|
||||||
|
|
||||||
pa_def_spaces[i].segment = subseg_new (name, 0);
|
pa_def_spaces[i].segment = subseg_new (name, 0);
|
||||||
create_new_space (pa_def_spaces[i].name, pa_def_spaces[i].spnum,
|
create_new_space (pa_def_spaces[i].name, pa_def_spaces[i].spnum,
|
||||||
@ -5714,7 +5716,7 @@ pa_spaces_begin ()
|
|||||||
sd_chain_struct *space;
|
sd_chain_struct *space;
|
||||||
|
|
||||||
/* Pick the right name for the new section and pick the right
|
/* Pick the right name for the new section and pick the right
|
||||||
subsegment number. */
|
subsegment number. */
|
||||||
if (pa_def_subspaces[i].alias && USE_ALIASES)
|
if (pa_def_subspaces[i].alias && USE_ALIASES)
|
||||||
{
|
{
|
||||||
name = pa_def_subspaces[i].alias;
|
name = pa_def_subspaces[i].alias;
|
||||||
@ -5731,8 +5733,8 @@ pa_spaces_begin ()
|
|||||||
|
|
||||||
|
|
||||||
/* For SOM we want to replace the standard .text, .data, and .bss
|
/* For SOM we want to replace the standard .text, .data, and .bss
|
||||||
sections with our own. */
|
sections with our own. */
|
||||||
if (! strcmp (pa_def_subspaces[i].name, "$CODE$") && ! USE_ALIASES)
|
if (!strcmp (pa_def_subspaces[i].name, "$CODE$") && !USE_ALIASES)
|
||||||
{
|
{
|
||||||
text_section = segment;
|
text_section = segment;
|
||||||
applicable = bfd_applicable_section_flags (stdoutput);
|
applicable = bfd_applicable_section_flags (stdoutput);
|
||||||
@ -5742,7 +5744,7 @@ pa_spaces_begin ()
|
|||||||
| SEC_READONLY
|
| SEC_READONLY
|
||||||
| SEC_HAS_CONTENTS));
|
| SEC_HAS_CONTENTS));
|
||||||
}
|
}
|
||||||
else if (! strcmp (pa_def_subspaces[i].name, "$DATA$") && ! USE_ALIASES)
|
else if (!strcmp (pa_def_subspaces[i].name, "$DATA$") && !USE_ALIASES)
|
||||||
{
|
{
|
||||||
data_section = segment;
|
data_section = segment;
|
||||||
applicable = bfd_applicable_section_flags (stdoutput);
|
applicable = bfd_applicable_section_flags (stdoutput);
|
||||||
@ -5753,7 +5755,7 @@ pa_spaces_begin ()
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (! strcmp (pa_def_subspaces[i].name, "$BSS$") && ! USE_ALIASES)
|
else if (!strcmp (pa_def_subspaces[i].name, "$BSS$") && !USE_ALIASES)
|
||||||
{
|
{
|
||||||
bss_section = segment;
|
bss_section = segment;
|
||||||
applicable = bfd_applicable_section_flags (stdoutput);
|
applicable = bfd_applicable_section_flags (stdoutput);
|
||||||
@ -6080,7 +6082,7 @@ static ssd_chain_struct *
|
|||||||
is_defined_subspace (name)
|
is_defined_subspace (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
sd_chain_struct*space_chain;
|
sd_chain_struct *space_chain;
|
||||||
ssd_chain_struct *subspace_chain;
|
ssd_chain_struct *subspace_chain;
|
||||||
|
|
||||||
/* Walk through each space. */
|
/* Walk through each space. */
|
||||||
@ -6588,10 +6590,10 @@ elf_hppa_final_processing ()
|
|||||||
call_info_pointer = call_info_pointer->ci_next)
|
call_info_pointer = call_info_pointer->ci_next)
|
||||||
{
|
{
|
||||||
elf_symbol_type *esym
|
elf_symbol_type *esym
|
||||||
= (elf_symbol_type *) call_info_pointer->start_symbol->bsym;
|
= (elf_symbol_type *) call_info_pointer->start_symbol->bsym;
|
||||||
esym->internal_elf_sym.st_size =
|
esym->internal_elf_sym.st_size =
|
||||||
S_GET_VALUE (call_info_pointer->end_symbol)
|
S_GET_VALUE (call_info_pointer->end_symbol)
|
||||||
- S_GET_VALUE (call_info_pointer->start_symbol) + 4;
|
- S_GET_VALUE (call_info_pointer->start_symbol) + 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user