* dwarf2dbg.c (scale_addr_delta): New.

(size_inc_line_addr): Use it.
(emit_inc_line_addr): Use it.
This commit is contained in:
DJ Delorie 2002-11-26 21:55:15 +00:00
parent b4b8817765
commit a3b7543479
2 changed files with 28 additions and 8 deletions

View File

@ -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.

View File

@ -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. */