aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@acm.org>2005-04-14 22:38:49 +0000
committerBob Wilson <bob.wilson@acm.org>2005-04-14 22:38:49 +0000
commitdd49a749cd5e710c683464795e1494ce4e4643a0 (patch)
tree14dab61dbc0e6cee318f133b87ffe0a22040b28f /gas
parent53f541af8d1854d17a2919e787446e502d205799 (diff)
downloadgdb-dd49a749cd5e710c683464795e1494ce4e4643a0.zip
gdb-dd49a749cd5e710c683464795e1494ce4e4643a0.tar.gz
gdb-dd49a749cd5e710c683464795e1494ce4e4643a0.tar.bz2
* config/tc-xtensa.h (struct xtensa_frag_type): Add lit_frchain field.
* config/tc-xtensa.c (xg_translate_sysreg_op, xtensa_translate_old_userregs_ops, xtensa_find_unaligned_branch_targets, xtensa_find_unaligned_loops, xtensa_fix_close_loop_end_frags, relax_frag_add_nop): Support 64-bit host. (xtensa_mark_literal_pool_location, xtensa_move_literals): Use tc_frag_data lit_frchain and lit_seg fields instead of fr_var.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog12
-rw-r--r--gas/config/tc-xtensa.c32
-rw-r--r--gas/config/tc-xtensa.h6
3 files changed, 32 insertions, 18 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 59a384a..3f03aa8 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,15 @@
+2005-04-14 Bob Wilson <bob.wilson@acm.org>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-xtensa.h (struct xtensa_frag_type): Add lit_frchain field.
+ * config/tc-xtensa.c (xg_translate_sysreg_op,
+ xtensa_translate_old_userregs_ops,
+ xtensa_find_unaligned_branch_targets,
+ xtensa_find_unaligned_loops, xtensa_fix_close_loop_end_frags,
+ relax_frag_add_nop): Support 64-bit host.
+ (xtensa_mark_literal_pool_location, xtensa_move_literals): Use
+ tc_frag_data lit_frchain and lit_seg fields instead of fr_var.
+
2005-04-14 Mark Kettenis <kettenis@gnu.org>
* configure.tgt: Add support for OpenBSD/sparc ELF.
diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
index 0dadbfb..cf71aad 100644
--- a/gas/config/tc-xtensa.c
+++ b/gas/config/tc-xtensa.c
@@ -2247,7 +2247,7 @@ xg_translate_sysreg_op (char **popname, int *pnum_args, char **arg_strings)
if (sr == XTENSA_UNDEFINED)
{
as_bad (_("invalid register number (%ld) for '%s' instruction"),
- val, opname);
+ (long) val, opname);
return -1;
}
}
@@ -2316,7 +2316,7 @@ xtensa_translate_old_userreg_ops (char **popname)
if (sr == XTENSA_UNDEFINED)
{
as_bad (_("invalid register number (%ld) for '%s'"),
- val, opname);
+ (long) val, opname);
return -1;
}
}
@@ -4645,15 +4645,15 @@ xtensa_mark_literal_pool_location (void)
frag_align (2, 0, 0);
record_alignment (now_seg, 2);
- /* We stash info in the fr_var of these frags
- so we can later move the literal's fixes into this
- frchain's fix list. We can use fr_var because fr_var's
- interpretation depends solely on the fr_type and subtype. */
+ /* We stash info in these frags so we can later move the literal's
+ fixes into this frchain's fix list. */
pool_location = frag_now;
- frag_variant (rs_machine_dependent, 0, (int) frchain_now,
+ frag_now->tc_frag_data.lit_frchain = frchain_now;
+ frag_variant (rs_machine_dependent, 0, 0,
RELAX_LITERAL_POOL_BEGIN, NULL, 0, NULL);
xtensa_set_frag_assembly_state (frag_now);
- frag_variant (rs_machine_dependent, 0, (int) now_seg,
+ frag_now->tc_frag_data.lit_seg = now_seg;
+ frag_variant (rs_machine_dependent, 0, 0,
RELAX_LITERAL_POOL_END, NULL, 0, NULL);
xtensa_set_frag_assembly_state (frag_now);
@@ -4882,7 +4882,7 @@ xtensa_find_unaligned_branch_targets (bfd *abfd ATTRIBUTE_UNUSED,
if (frag_addr + op_size > branch_align)
as_warn_where (frag->fr_file, frag->fr_line,
_("unaligned branch target: %d bytes at 0x%lx"),
- op_size, frag->fr_address);
+ op_size, (long) frag->fr_address);
}
frag = frag->fr_next;
}
@@ -4921,7 +4921,7 @@ xtensa_find_unaligned_loops (bfd *abfd ATTRIBUTE_UNUSED,
if (frag_addr + op_size > xtensa_fetch_width)
as_warn_where (frag->fr_file, frag->fr_line,
_("unaligned loop: %d bytes at 0x%lx"),
- op_size, frag->fr_address);
+ op_size, (long) frag->fr_address);
}
frag = frag->fr_next;
}
@@ -7462,7 +7462,7 @@ xtensa_fix_close_loop_end_frags (void)
if (fragP->fr_var < length)
as_fatal (_("fr_var %lu < length %d"),
- fragP->fr_var, length);
+ (long) fragP->fr_var, length);
else
{
assemble_nop (length,
@@ -8410,7 +8410,7 @@ relax_frag_add_nop (fragS *fragP)
if (fragP->fr_var < length)
{
- as_fatal (_("fr_var (%ld) < length (%d)"), fragP->fr_var, length);
+ as_fatal (_("fr_var (%ld) < length (%d)"), (long) fragP->fr_var, length);
return 0;
}
@@ -9869,17 +9869,15 @@ xtensa_move_literals (void)
{
literal_pool = search_frag->tc_frag_data.literal_frag;
assert (literal_pool->fr_subtype == RELAX_LITERAL_POOL_BEGIN);
- /* Note that we set this fr_var to be a fix
- chain when we created the literal pool location
- as RELAX_LITERAL_POOL_BEGIN. */
- frchain_to = (frchainS *) literal_pool->fr_var;
+ frchain_to = literal_pool->tc_frag_data.lit_frchain;
+ assert (frchain_to);
}
insert_after = literal_pool;
while (insert_after->fr_next->fr_subtype != RELAX_LITERAL_POOL_END)
insert_after = insert_after->fr_next;
- dest_seg = (segT) insert_after->fr_next->fr_var;
+ dest_seg = insert_after->fr_next->tc_frag_data.lit_seg;
*frag_splice = next_frag;
search_frag->fr_next = insert_after->fr_next;
diff --git a/gas/config/tc-xtensa.h b/gas/config/tc-xtensa.h
index 99032fd..4b1ade3 100644
--- a/gas/config/tc-xtensa.h
+++ b/gas/config/tc-xtensa.h
@@ -227,9 +227,13 @@ struct xtensa_frag_type
fragS *literal_frag;
/* The destination segment for literal frags. (Note that this is only
- valid after xtensa_move_literals. */
+ valid after xtensa_move_literals.) This field is also used for
+ LITERAL_POOL_END frags. */
segT lit_seg;
+ /* Frag chain for LITERAL_POOL_BEGIN frags. */
+ struct frchain *lit_frchain;
+
/* For the relaxation scheme, some literal fragments can have their
expansions modified by an instruction that relaxes. */
int text_expansion[MAX_SLOTS];