mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 21:41:47 +08:00
gas/
PR gas/13024 * dwarf2dbg.c (pending_lines, pending_lines_tail): New variables. (dwarf2_gen_line_info_1): Delete. (dwarf2_push_line, dwarf2_flush_pending_lines): New functions. (dwarf2_gen_line_info, dwarf2_emit_label): Use them. (dwarf2_consume_line_info): Call dwarf2_flush_pending_lines. (dwarf2_directive_loc): Push previous .locs instead of generating them immediately. gas/testsuite/ * gas/mips/loc-swap-2.s, gas/mips/loc-swap-2.d, gas/mips/micromips@loc-swap-2.d, gas/mips/mips16@loc-swap-2.d: New test. * gas/mips/mips.exp: Run it.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2011-09-05 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
|
PR gas/13024
|
||||||
|
* dwarf2dbg.c (pending_lines, pending_lines_tail): New variables.
|
||||||
|
(dwarf2_gen_line_info_1): Delete.
|
||||||
|
(dwarf2_push_line, dwarf2_flush_pending_lines): New functions.
|
||||||
|
(dwarf2_gen_line_info, dwarf2_emit_label): Use them.
|
||||||
|
(dwarf2_consume_line_info): Call dwarf2_flush_pending_lines.
|
||||||
|
(dwarf2_directive_loc): Push previous .locs instead of generating
|
||||||
|
them immediately.
|
||||||
|
|
||||||
2011-08-26 Nick Clifton <nickc@redhat.com>
|
2011-08-26 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* po/es.po: Updated Spanish translation.
|
* po/es.po: Updated Spanish translation.
|
||||||
|
@ -207,6 +207,10 @@ static struct dwarf2_line_info current = {
|
|||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Lines that are at the same location as CURRENT, and which are waiting
|
||||||
|
for a label. */
|
||||||
|
static struct line_entry *pending_lines, **pending_lines_tail = &pending_lines;
|
||||||
|
|
||||||
/* The size of an address on the target. */
|
/* The size of an address on the target. */
|
||||||
static unsigned int sizeof_address;
|
static unsigned int sizeof_address;
|
||||||
|
|
||||||
@ -280,22 +284,47 @@ get_line_subseg (segT seg, subsegT subseg)
|
|||||||
return lss;
|
return lss;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Record an entry for LOC occurring at LABEL. */
|
/* Push LOC onto the pending lines list. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
|
dwarf2_push_line (struct dwarf2_line_info *loc)
|
||||||
{
|
{
|
||||||
struct line_subseg *lss;
|
|
||||||
struct line_entry *e;
|
struct line_entry *e;
|
||||||
|
|
||||||
e = (struct line_entry *) xmalloc (sizeof (*e));
|
e = (struct line_entry *) xmalloc (sizeof (*e));
|
||||||
e->next = NULL;
|
e->next = NULL;
|
||||||
e->label = label;
|
e->label = NULL;
|
||||||
e->loc = *loc;
|
e->loc = *loc;
|
||||||
|
|
||||||
|
*pending_lines_tail = e;
|
||||||
|
pending_lines_tail = &(*pending_lines_tail)->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Emit all pending line information. LABEL is the label with which the
|
||||||
|
lines should be associated, or null if they should be associated with
|
||||||
|
the current position. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
dwarf2_flush_pending_lines (symbolS *label)
|
||||||
|
{
|
||||||
|
if (pending_lines)
|
||||||
|
{
|
||||||
|
struct line_subseg *lss;
|
||||||
|
struct line_entry *e;
|
||||||
|
|
||||||
|
if (!label)
|
||||||
|
label = symbol_temp_new (now_seg, 0, frag_now);
|
||||||
|
|
||||||
|
for (e = pending_lines; e; e = e->next)
|
||||||
|
e->label = label;
|
||||||
|
|
||||||
lss = get_line_subseg (now_seg, now_subseg);
|
lss = get_line_subseg (now_seg, now_subseg);
|
||||||
*lss->ptail = e;
|
*lss->ptail = pending_lines;
|
||||||
lss->ptail = &e->next;
|
lss->ptail = pending_lines_tail;
|
||||||
|
|
||||||
|
pending_lines = NULL;
|
||||||
|
pending_lines_tail = &pending_lines;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Record an entry for LOC occurring at OFS within the current fragment. */
|
/* Record an entry for LOC occurring at OFS within the current fragment. */
|
||||||
@ -306,8 +335,6 @@ dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
|
|||||||
static unsigned int line = -1;
|
static unsigned int line = -1;
|
||||||
static unsigned int filenum = -1;
|
static unsigned int filenum = -1;
|
||||||
|
|
||||||
symbolS *sym;
|
|
||||||
|
|
||||||
/* Early out for as-yet incomplete location information. */
|
/* Early out for as-yet incomplete location information. */
|
||||||
if (loc->filenum == 0 || loc->line == 0)
|
if (loc->filenum == 0 || loc->line == 0)
|
||||||
return;
|
return;
|
||||||
@ -323,8 +350,8 @@ dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
|
|||||||
line = loc->line;
|
line = loc->line;
|
||||||
filenum = loc->filenum;
|
filenum = loc->filenum;
|
||||||
|
|
||||||
sym = symbol_temp_new (now_seg, ofs, frag_now);
|
dwarf2_push_line (loc);
|
||||||
dwarf2_gen_line_info_1 (sym, loc);
|
dwarf2_flush_pending_lines (symbol_temp_new (now_seg, ofs, frag_now));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns the current source information. If .file directives have
|
/* Returns the current source information. If .file directives have
|
||||||
@ -385,6 +412,11 @@ dwarf2_emit_insn (int size)
|
|||||||
void
|
void
|
||||||
dwarf2_consume_line_info (void)
|
dwarf2_consume_line_info (void)
|
||||||
{
|
{
|
||||||
|
/* If the consumer has stashed the current location away for later use,
|
||||||
|
assume that any earlier location information should be associated
|
||||||
|
with ".". */
|
||||||
|
dwarf2_flush_pending_lines (NULL);
|
||||||
|
|
||||||
/* Unless we generate DWARF2 debugging information for each
|
/* Unless we generate DWARF2 debugging information for each
|
||||||
assembler line, we only emit one line symbol for one LOC. */
|
assembler line, we only emit one line symbol for one LOC. */
|
||||||
dwarf2_loc_directive_seen = FALSE;
|
dwarf2_loc_directive_seen = FALSE;
|
||||||
@ -416,7 +448,8 @@ dwarf2_emit_label (symbolS *label)
|
|||||||
|
|
||||||
loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
|
loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
|
||||||
|
|
||||||
dwarf2_gen_line_info_1 (label, &loc);
|
dwarf2_push_line (&loc);
|
||||||
|
dwarf2_flush_pending_lines (label);
|
||||||
dwarf2_consume_line_info ();
|
dwarf2_consume_line_info ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -576,7 +609,7 @@ dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
|
|||||||
/* If we see two .loc directives in a row, force the first one to be
|
/* If we see two .loc directives in a row, force the first one to be
|
||||||
output now. */
|
output now. */
|
||||||
if (dwarf2_loc_directive_seen)
|
if (dwarf2_loc_directive_seen)
|
||||||
dwarf2_emit_insn (0);
|
dwarf2_push_line (¤t);
|
||||||
|
|
||||||
filenum = get_absolute_expression ();
|
filenum = get_absolute_expression ();
|
||||||
SKIP_WHITESPACE ();
|
SKIP_WHITESPACE ();
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2011-09-05 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
|
* gas/mips/loc-swap-2.s, gas/mips/loc-swap-2.d,
|
||||||
|
gas/mips/micromips@loc-swap-2.d,
|
||||||
|
gas/mips/mips16@loc-swap-2.d: New test.
|
||||||
|
* gas/mips/mips.exp: Run it.
|
||||||
|
|
||||||
2011-08-19 Sergey A. Guriev <sergeya.a.guriev@intel.com>
|
2011-08-19 Sergey A. Guriev <sergeya.a.guriev@intel.com>
|
||||||
|
|
||||||
* gas/i386/avx-gather-intel.d: Added missing vpgather tests.
|
* gas/i386/avx-gather-intel.d: Added missing vpgather tests.
|
||||||
|
49
gas/testsuite/gas/mips/loc-swap-2.d
Normal file
49
gas/testsuite/gas/mips/loc-swap-2.d
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#PROG: readelf
|
||||||
|
#readelf: -wl
|
||||||
|
#name: MIPS DWARF-2 location information with branch swapping (2)
|
||||||
|
#as: -32
|
||||||
|
#source: loc-swap-2.s
|
||||||
|
|
||||||
|
Raw dump of debug contents of section .debug_line:
|
||||||
|
|
||||||
|
Offset: 0x0
|
||||||
|
Length: 60
|
||||||
|
DWARF Version: 2
|
||||||
|
Prologue Length: 35
|
||||||
|
Minimum Instruction Length: 1
|
||||||
|
Initial value of 'is_stmt': 1
|
||||||
|
Line Base: -5
|
||||||
|
Line Range: 14
|
||||||
|
Opcode Base: 13
|
||||||
|
|
||||||
|
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
|
||||||
|
Opcode 10 has 0 args
|
||||||
|
Opcode 11 has 0 args
|
||||||
|
Opcode 12 has 1 args
|
||||||
|
|
||||||
|
The Directory Table is empty.
|
||||||
|
|
||||||
|
The File Name Table:
|
||||||
|
Entry Dir Time Size Name
|
||||||
|
1 0 0 0 loc-swap-2.s
|
||||||
|
|
||||||
|
Line Number Statements:
|
||||||
|
Extended opcode 2: set Address to 0x0
|
||||||
|
Special opcode 11: advance Address by 0 to 0x0 and Line by 6 to 7
|
||||||
|
Special opcode 7: advance Address by 0 to 0x0 and Line by 2 to 9
|
||||||
|
Special opcode 6: advance Address by 0 to 0x0 and Line by 1 to 10
|
||||||
|
Special opcode 120: advance Address by 8 to 0x8 and Line by 3 to 13
|
||||||
|
Special opcode 62: advance Address by 4 to 0xc and Line by 1 to 14
|
||||||
|
Special opcode 6: advance Address by 0 to 0xc and Line by 1 to 15
|
||||||
|
Special opcode 119: advance Address by 8 to 0x14 and Line by 2 to 17
|
||||||
|
Advance PC by 4 to 0x18
|
||||||
|
Extended opcode 1: End of Sequence
|
21
gas/testsuite/gas/mips/loc-swap-2.s
Normal file
21
gas/testsuite/gas/mips/loc-swap-2.s
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
.file 1 "loc-swap-2.s"
|
||||||
|
.cfi_startproc
|
||||||
|
.ent foo
|
||||||
|
.type foo,@function
|
||||||
|
foo:
|
||||||
|
.loc 1 7
|
||||||
|
move $5,$6
|
||||||
|
.loc 1 9
|
||||||
|
.loc 1 10
|
||||||
|
jr $4
|
||||||
|
|
||||||
|
.loc 1 13
|
||||||
|
move $4,$7
|
||||||
|
.loc 1 14
|
||||||
|
.loc 1 15
|
||||||
|
bnez $4,foo
|
||||||
|
|
||||||
|
.loc 1 17
|
||||||
|
li $5,1
|
||||||
|
.end foo
|
||||||
|
.cfi_endproc
|
49
gas/testsuite/gas/mips/micromips@loc-swap-2.d
Normal file
49
gas/testsuite/gas/mips/micromips@loc-swap-2.d
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#PROG: readelf
|
||||||
|
#readelf: -wl
|
||||||
|
#name: MIPS DWARF-2 location information with branch swapping (2)
|
||||||
|
#as: -32
|
||||||
|
#source: loc-swap-2.s
|
||||||
|
|
||||||
|
Raw dump of debug contents of section .debug_line:
|
||||||
|
|
||||||
|
Offset: 0x0
|
||||||
|
Length: 60
|
||||||
|
DWARF Version: 2
|
||||||
|
Prologue Length: 35
|
||||||
|
Minimum Instruction Length: 1
|
||||||
|
Initial value of 'is_stmt': 1
|
||||||
|
Line Base: -5
|
||||||
|
Line Range: 14
|
||||||
|
Opcode Base: 13
|
||||||
|
|
||||||
|
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
|
||||||
|
Opcode 10 has 0 args
|
||||||
|
Opcode 11 has 0 args
|
||||||
|
Opcode 12 has 1 args
|
||||||
|
|
||||||
|
The Directory Table is empty.
|
||||||
|
|
||||||
|
The File Name Table:
|
||||||
|
Entry Dir Time Size Name
|
||||||
|
1 0 0 0 loc-swap-2.s
|
||||||
|
|
||||||
|
Line Number Statements:
|
||||||
|
Extended opcode 2: set Address to 0x1
|
||||||
|
Special opcode 11: advance Address by 0 to 0x1 and Line by 6 to 7
|
||||||
|
Special opcode 35: advance Address by 2 to 0x3 and Line by 2 to 9
|
||||||
|
Special opcode 6: advance Address by 0 to 0x3 and Line by 1 to 10
|
||||||
|
Special opcode 64: advance Address by 4 to 0x7 and Line by 3 to 13
|
||||||
|
Special opcode 34: advance Address by 2 to 0x9 and Line by 1 to 14
|
||||||
|
Special opcode 6: advance Address by 0 to 0x9 and Line by 1 to 15
|
||||||
|
Special opcode 63: advance Address by 4 to 0xd and Line by 2 to 17
|
||||||
|
Advance PC by 1 to 0xe
|
||||||
|
Extended opcode 1: End of Sequence
|
@ -889,6 +889,7 @@ if { [istarget mips*-*-vxworks*] } {
|
|||||||
run_dump_test_arches "loc-swap" [mips_arch_list_all]
|
run_dump_test_arches "loc-swap" [mips_arch_list_all]
|
||||||
run_dump_test_arches "loc-swap-dis" \
|
run_dump_test_arches "loc-swap-dis" \
|
||||||
[mips_arch_list_all]
|
[mips_arch_list_all]
|
||||||
|
run_dump_test_arches "loc-swap-2" [mips_arch_list_all]
|
||||||
}
|
}
|
||||||
|
|
||||||
if $has_newabi {
|
if $has_newabi {
|
||||||
|
49
gas/testsuite/gas/mips/mips16@loc-swap-2.d
Normal file
49
gas/testsuite/gas/mips/mips16@loc-swap-2.d
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#PROG: readelf
|
||||||
|
#readelf: -wl
|
||||||
|
#name: MIPS DWARF-2 location information with branch swapping (2)
|
||||||
|
#as: -32
|
||||||
|
#source: loc-swap-2.s
|
||||||
|
|
||||||
|
Raw dump of debug contents of section .debug_line:
|
||||||
|
|
||||||
|
Offset: 0x0
|
||||||
|
Length: 60
|
||||||
|
DWARF Version: 2
|
||||||
|
Prologue Length: 35
|
||||||
|
Minimum Instruction Length: 1
|
||||||
|
Initial value of 'is_stmt': 1
|
||||||
|
Line Base: -5
|
||||||
|
Line Range: 14
|
||||||
|
Opcode Base: 13
|
||||||
|
|
||||||
|
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
|
||||||
|
Opcode 10 has 0 args
|
||||||
|
Opcode 11 has 0 args
|
||||||
|
Opcode 12 has 1 args
|
||||||
|
|
||||||
|
The Directory Table is empty.
|
||||||
|
|
||||||
|
The File Name Table:
|
||||||
|
Entry Dir Time Size Name
|
||||||
|
1 0 0 0 loc-swap-2.s
|
||||||
|
|
||||||
|
Line Number Statements:
|
||||||
|
Extended opcode 2: set Address to 0x1
|
||||||
|
Special opcode 11: advance Address by 0 to 0x1 and Line by 6 to 7
|
||||||
|
Special opcode 7: advance Address by 0 to 0x1 and Line by 2 to 9
|
||||||
|
Special opcode 6: advance Address by 0 to 0x1 and Line by 1 to 10
|
||||||
|
Special opcode 64: advance Address by 4 to 0x5 and Line by 3 to 13
|
||||||
|
Special opcode 34: advance Address by 2 to 0x7 and Line by 1 to 14
|
||||||
|
Special opcode 6: advance Address by 0 to 0x7 and Line by 1 to 15
|
||||||
|
Special opcode 35: advance Address by 2 to 0x9 and Line by 2 to 17
|
||||||
|
Advance PC by 1 to 0xa
|
||||||
|
Extended opcode 1: End of Sequence
|
Reference in New Issue
Block a user