aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2001-07-06 08:21:35 +0000
committerNick Clifton <nickc@redhat.com>2001-07-06 08:21:35 +0000
commit7099f9f917e81faddb74b18c36125d783ea3d403 (patch)
treeaa19c02cdcdf5fbd46bb7157cef2226a3bea9286 /gas
parenteed1d0acc7812d5d6f8427871c7e38fff6b674f1 (diff)
downloadgdb-7099f9f917e81faddb74b18c36125d783ea3d403.zip
gdb-7099f9f917e81faddb74b18c36125d783ea3d403.tar.gz
gdb-7099f9f917e81faddb74b18c36125d783ea3d403.tar.bz2
Catch and ignore empty, ineffectual alignment frags when deciding if a
branch can be short.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-m68k.c20
2 files changed, 22 insertions, 4 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 860b8a8..d5d4c18 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2001-07-06 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * config/tc-m68k.c (md_estimate_size_before_relax): Catch and
+ ignore empty, ineffectual alignment frags when deciding if a
+ branch can be short.
+
2001-07-05 Steve Ellcey <sje@cup.hp.com>
* config/tc-ia64.c (special_section): Add SPECIAL_SECTION_INIT_ARRAY
diff --git a/gas/config/tc-m68k.c b/gas/config/tc-m68k.c
index e14c8cb..a15d9f5 100644
--- a/gas/config/tc-m68k.c
+++ b/gas/config/tc-m68k.c
@@ -4694,13 +4694,25 @@ md_estimate_size_before_relax (fragP, segment)
fragS *l;
stop = symbol_get_frag (fragP->fr_symbol);
+
for (l = fragP->fr_next; l != stop; l = l->fr_next)
- if (l->fr_fix + l->fr_var != 0)
- break;
- if (l == stop)
{
- fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
+ /* Catch empty alignment frags whoes fr_offset field
+ is an alignment requirement of 2 bytes. The check
+ below will misinterpret this as evidence that real
+ code exists between the symbol and the instruction
+ and so will not convert the short jump into a word
+ jump. */
+ if (l->fr_fix == 0
+ && l->fr_var == 1
+ && (l->fr_type == rs_align || l->fr_type == rs_align_code))
+ continue;
+
+ if (l->fr_fix + l->fr_var != 0)
+ break;
}
+ if (l == stop)
+ fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
}
break;
default: