* config/tc-mips.c (append_insn): Call dwarf2_emit_insn() before
emitting insn.

gas/testsuite/:
* gas/mips/mips16-dwarf2.d: New test to check DWARF2 line
information for MIPS16.
* gas/mips/mips16-dwarf2.s: Source for the new test.
* gas/mips/mips.exp: Run the new test.
This commit is contained in:
Maciej W. Rozycki 2005-02-22 12:32:26 +00:00
parent e4d180c27b
commit 58e2ea4d1c
6 changed files with 139 additions and 17 deletions

View File

@ -1,3 +1,8 @@
2005-02-22 Maciej W. Rozycki <macro@mips.com>
* config/tc-mips.c (append_insn): Call dwarf2_emit_insn() before
emitting insn.
2005-02-21 H.J. Lu <hongjiu.lu@intel.com>
* config/obj-coff.c (obj_coff_section): Replace SEC_SHARED with

View File

@ -2009,6 +2009,15 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
}
}
#ifdef OBJ_ELF
/* The value passed to dwarf2_emit_insn is the distance between
the beginning of the current instruction and the address that
should be recorded in the debug tables. For MIPS16 debug info
we want to use ISA-encoded addresses, so we pass -1 for an
address higher by one than the current. */
dwarf2_emit_insn (mips_opts.mips16 ? -1 : 0);
#endif
/* Record the frag type before frag_var. */
if (prev_insn_frag)
prev_insn_frag_type = prev_insn_frag->fr_type;
@ -2243,24 +2252,11 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
}
if (! mips_opts.mips16)
{
md_number_to_chars (f, ip->insn_opcode, 4);
#ifdef OBJ_ELF
dwarf2_emit_insn (4);
#endif
}
md_number_to_chars (f, ip->insn_opcode, 4);
else if (*reloc_type == BFD_RELOC_MIPS16_JMP)
{
md_number_to_chars (f, ip->insn_opcode >> 16, 2);
md_number_to_chars (f + 2, ip->insn_opcode & 0xffff, 2);
#ifdef OBJ_ELF
/* The value passed to dwarf2_emit_insn is the distance between
the end of the current instruction and the address that should
be recorded in the debug tables. Since we want to use ISA-encoded
addresses in MIPS16 debug info, the value is one byte less than
the real instruction length. */
dwarf2_emit_insn (3);
#endif
}
else
{
@ -2270,9 +2266,6 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
f += 2;
}
md_number_to_chars (f, ip->insn_opcode, 2);
#ifdef OBJ_ELF
dwarf2_emit_insn (ip->use_extend ? 3 : 1);
#endif
}
/* Update the register mask information. */

View File

@ -1,3 +1,10 @@
2005-02-22 Maciej W. Rozycki <macro@mips.com>
* gas/mips/mips16-dwarf2.d: New test to check DWARF2 line
information for MIPS16.
* gas/mips/mips16-dwarf2.s: Source for the new test.
* gas/mips/mips.exp: Run the new test.
2005-02-21 Alan Modra <amodra@bigpond.net.au>
* gas/d10v/instruction_packing-005.d: Adjust.

View File

@ -746,4 +746,8 @@ if { [istarget mips*-*-*] } then {
run_list_test "noat-5" ""
run_list_test "noat-6" ""
run_list_test "noat-7" ""
if { $elf && !$no_mips16 } {
run_dump_test "mips16-dwarf2"
}
}

View File

@ -0,0 +1,47 @@
#readelf: -wl
#name: MIPS16 DWARF2
#as: -mips16 -no-mdebug -g0
#source: mips16-dwarf2.s
Dump of debug contents of section \.debug_line:
Length: 64
DWARF Version: 2
Prologue Length: 35
Minimum Instruction Length: 1
Initial value of 'is_stmt': 1
Line Base: -5
Line Range: 14
Opcode Base: 10
\(Pointer size: 4\)
Opcodes:
Opcode 1 has 0 args
Opcode 2 has 1 args
Opcode 3 has 1 args
Opcode 4 has 1 args
Opcode 5 has 1 args
Opcode 6 has 0 args
Opcode 7 has 0 args
Opcode 8 has 0 args
Opcode 9 has 1 args
The Directory Table is empty\.
The File Name Table:
Entry Dir Time Size Name
1 0 0 0 mips16-dwarf2\.s
Line Number Statements:
Extended opcode 2: set Address to 0x1
Special opcode 5: advance Address by 0 to 0x1 and Line by 0 to 1
Special opcode 34: advance Address by 2 to 0x3 and Line by 1 to 2
Special opcode 34: advance Address by 2 to 0x5 and Line by 1 to 3
Special opcode 62: advance Address by 4 to 0x9 and Line by 1 to 4
Special opcode 34: advance Address by 2 to 0xb and Line by 1 to 5
Special opcode 62: advance Address by 4 to 0xf and Line by 1 to 6
Special opcode 62: advance Address by 4 to 0x13 and Line by 1 to 7
Advance PC by 2286 to 901
Special opcode 6: advance Address by 0 to 0x901 and Line by 1 to 8
Advance PC by 15 to 910
Extended opcode 1: End of Sequence

View File

@ -0,0 +1,66 @@
# Source file used to test DWARF2 information for MIPS16.
.set mips16
.text
.Ltext0:
.p2align 2
.file 1 "mips16-dwarf2.s"
stuff:
.loc 1 1 0
nop
.loc 1 2 0
li $2, 0
.loc 1 3 0
li $2, 0x1234
.loc 1 4 0
lw $2, 0f
.loc 1 5 0
lw $2, 1f
.loc 1 6 0
b 0f
nop
.loc 1 7 0
b 1f
nop
.loc 1 8 0
.p2align 8
0:
.space 2048
1:
nop
# align section end to 16-byte boundary for easier testing on multiple targets
.p2align 4
.Letext0:
.section .debug_info,"",@progbits
.Ldebug_info0:
.4byte .Ledebug_info0 - .L1debug_info0 # length
.L1debug_info0:
.2byte 2 # version
.4byte .Ldebug_abbrev0 # abbrev offset
.byte 4 # address size
.uleb128 0x1 # abbrev code
.4byte .Ldebug_line0 # DW_AT_stmt_list
.4byte .Ltext0 # DW_AT_low_pc
.4byte .Letext0 # DW_AT_high_pc
.Ledebug_info0:
.section .debug_abbrev,"",@progbits
.Ldebug_abbrev0:
.uleb128 0x1 # abbrev code
.uleb128 0x11 # DW_TAG_compile_unit
.byte 0x0 # DW_CHILDREN_no
.uleb128 0x10 # DW_AT_stmt_list
.uleb128 0x6 # DW_FORM_data4
.uleb128 0x11 # DW_AT_low_pc
.uleb128 0x1 # DW_FORM_addr
.uleb128 0x12 # DW_AT_high_pc
.uleb128 0x1 # DW_FORM_addr
.byte 0x0
.byte 0x0
.section .debug_line,"",@progbits
.Ldebug_line0: