diff options
author | DJ Delorie <dj@redhat.com> | 2002-11-26 21:55:15 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2002-11-26 21:55:15 +0000 |
commit | a3b754347958261ec9fcaa627d57540fed673e2d (patch) | |
tree | d9ecec96e29d77b5ff7bfcb3f4b751afa46599f2 /gas/dwarf2dbg.c | |
parent | b4b8817765a197496048fe0386b925242a7732f2 (diff) | |
download | gdb-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.c | 30 |
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. */ |