aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/dwarf2dbg.c30
2 files changed, 28 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 6ca492d..cdf5c9e 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2002-11-26 DJ Delorie <dj@redhat.com.
+
+ * dwarf2dbg.c (scale_addr_delta): New.
+ (size_inc_line_addr): Use it.
+ (emit_inc_line_addr): Use it.
+
2002-11-26 Hans-Peter Nilsson <hp@axis.com>
* config/tc-cris.c (cris_relax_frag): Fix typo in comment.
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index ff1624b..578b3ac 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -174,6 +174,7 @@ static void out_debug_line PARAMS ((segT));
static void out_debug_aranges PARAMS ((segT, segT));
static void out_debug_abbrev PARAMS ((segT));
static void out_debug_info PARAMS ((segT, segT, segT));
+static void scale_addr_delta PARAMS ((int *));
/* Find or create an entry for SEG+SUBSEG in ALL_SEGS. */
@@ -596,6 +597,24 @@ out_set_addr (seg, frag, ofs)
emit_expr (&expr, sizeof_address);
}
+#if DWARF2_LINE_MIN_INSN_LENGTH > 1
+static void
+scale_addr_delta (addr_delta)
+ int *addr_delta;
+{
+ static int printed_this = 0;
+ if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0)
+ {
+ if (!printed_this)
+ as_bad("unaligned opcodes detected in executable segment");
+ printed_this = 1;
+ }
+ *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
+}
+#else
+#define scale_addr_delta(A)
+#endif
+
/* Encode a pair of line and address skips as efficiently as possible.
Note that the line skip is signed, whereas the address skip is unsigned.
@@ -612,10 +631,7 @@ size_inc_line_addr (line_delta, addr_delta)
int len = 0;
/* Scale the address delta by the minimum instruction length. */
-#if DWARF2_LINE_MIN_INSN_LENGTH > 1
- assert (addr_delta % DWARF2_LINE_MIN_INSN_LENGTH == 0);
- addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
-#endif
+ scale_addr_delta (&addr_delta);
/* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
We cannot use special opcodes here, since we want the end_sequence
@@ -678,11 +694,9 @@ emit_inc_line_addr (line_delta, addr_delta, p, len)
int need_copy = 0;
char *end = p + len;
-#if DWARF2_LINE_MIN_INSN_LENGTH > 1
/* Scale the address delta by the minimum instruction length. */
- assert (addr_delta % DWARF2_LINE_MIN_INSN_LENGTH == 0);
- addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
-#endif
+ scale_addr_delta (&addr_delta);
+
/* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
We cannot use special opcodes here, since we want the end_sequence
to emit the matrix entry. */