aboutsummaryrefslogtreecommitdiff
path: root/gas/dwarf2dbg.c
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2002-11-26 21:55:15 +0000
committerDJ Delorie <dj@redhat.com>2002-11-26 21:55:15 +0000
commita3b754347958261ec9fcaa627d57540fed673e2d (patch)
treed9ecec96e29d77b5ff7bfcb3f4b751afa46599f2 /gas/dwarf2dbg.c
parentb4b8817765a197496048fe0386b925242a7732f2 (diff)
downloadgdb-a3b754347958261ec9fcaa627d57540fed673e2d.zip
gdb-a3b754347958261ec9fcaa627d57540fed673e2d.tar.gz
gdb-a3b754347958261ec9fcaa627d57540fed673e2d.tar.bz2
* dwarf2dbg.c (scale_addr_delta): New.
(size_inc_line_addr): Use it. (emit_inc_line_addr): Use it.
Diffstat (limited to 'gas/dwarf2dbg.c')
-rw-r--r--gas/dwarf2dbg.c30
1 files changed, 22 insertions, 8 deletions
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. */