* 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> 2002-11-26 Hans-Peter Nilsson <hp@axis.com>
* config/tc-cris.c (cris_relax_frag): Fix typo in comment. * 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_aranges PARAMS ((segT, segT));
static void out_debug_abbrev PARAMS ((segT)); static void out_debug_abbrev PARAMS ((segT));
static void out_debug_info PARAMS ((segT, segT, 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. */ /* 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); 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. /* 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. 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; int len = 0;
/* Scale the address delta by the minimum instruction length. */ /* Scale the address delta by the minimum instruction length. */
#if DWARF2_LINE_MIN_INSN_LENGTH > 1 scale_addr_delta (&addr_delta);
assert (addr_delta % DWARF2_LINE_MIN_INSN_LENGTH == 0);
addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
#endif
/* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. /* 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 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; int need_copy = 0;
char *end = p + len; char *end = p + len;
#if DWARF2_LINE_MIN_INSN_LENGTH > 1
/* Scale the address delta by the minimum instruction length. */ /* Scale the address delta by the minimum instruction length. */
assert (addr_delta % DWARF2_LINE_MIN_INSN_LENGTH == 0); scale_addr_delta (&addr_delta);
addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
#endif
/* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. /* 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 We cannot use special opcodes here, since we want the end_sequence
to emit the matrix entry. */ to emit the matrix entry. */