* dwarf2dbg.c (dwarf2_emit_insn): Simplify test before dwarf2_where
call. Delete out of date comment. (dwarf2_consume_line_info): Always clear dwarf2_loc_directive_seen. (dwarf2_emit_label): Don't emit unless there has been a previous .file or we are outputting assembler generated debug. dwarf2_consume_line_info after emitting line info, not before. (out_debug_info): Simplify files_in_use test.
This commit is contained in:
parent
16aef3def7
commit
7fd3924aef
2 changed files with 31 additions and 32 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
2008-04-08 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* dwarf2dbg.c (dwarf2_emit_insn): Simplify test before dwarf2_where
|
||||||
|
call. Delete out of date comment.
|
||||||
|
(dwarf2_consume_line_info): Always clear dwarf2_loc_directive_seen.
|
||||||
|
(dwarf2_emit_label): Don't emit unless there has been a previous
|
||||||
|
.file or we are outputting assembler generated debug.
|
||||||
|
dwarf2_consume_line_info after emitting line info, not before.
|
||||||
|
(out_debug_info): Simplify files_in_use test.
|
||||||
|
|
||||||
2008-04-07 H.J. Lu <hongjiu.lu@intel.com>
|
2008-04-07 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* config/tc-i386.c (parse_real_register): Return AVX register
|
* config/tc-i386.c (parse_real_register): Return AVX register
|
||||||
|
|
|
@ -57,8 +57,8 @@
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (offset > 1 \
|
if (offset > 1 \
|
||||||
&& string[0] != 0 \
|
&& string[0] != 0 \
|
||||||
&& string[1] == ':') \
|
&& string[1] == ':') \
|
||||||
string [offset] = '\\'; \
|
string [offset] = '\\'; \
|
||||||
else \
|
else \
|
||||||
string [offset] = '/'; \
|
string [offset] = '/'; \
|
||||||
|
@ -346,7 +346,7 @@ dwarf2_where (struct dwarf2_line_info *line)
|
||||||
*line = current;
|
*line = current;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A hook to allow the target backend to inform the line number state
|
/* A hook to allow the target backend to inform the line number state
|
||||||
machine of isa changes when assembler debug info is enabled. */
|
machine of isa changes when assembler debug info is enabled. */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -365,19 +365,10 @@ dwarf2_emit_insn (int size)
|
||||||
{
|
{
|
||||||
struct dwarf2_line_info loc;
|
struct dwarf2_line_info loc;
|
||||||
|
|
||||||
if (dwarf2_loc_directive_seen)
|
if (!dwarf2_loc_directive_seen && debug_type != DEBUG_DWARF2)
|
||||||
{
|
|
||||||
/* Use the last location established by a .loc directive, not
|
|
||||||
the value returned by dwarf2_where(). That calls as_where()
|
|
||||||
which will return either the logical input file name (foo.c)
|
|
||||||
or the physical input file name (foo.s) and not the file name
|
|
||||||
specified in the most recent .loc directive (eg foo.h). */
|
|
||||||
loc = current;
|
|
||||||
}
|
|
||||||
else if (debug_type != DEBUG_DWARF2)
|
|
||||||
return;
|
return;
|
||||||
else
|
|
||||||
dwarf2_where (&loc);
|
dwarf2_where (&loc);
|
||||||
|
|
||||||
dwarf2_gen_line_info (frag_now_fix () - size, &loc);
|
dwarf2_gen_line_info (frag_now_fix () - size, &loc);
|
||||||
dwarf2_consume_line_info ();
|
dwarf2_consume_line_info ();
|
||||||
|
@ -393,8 +384,7 @@ dwarf2_consume_line_info (void)
|
||||||
{
|
{
|
||||||
/* 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. */
|
||||||
if (debug_type != DEBUG_DWARF2)
|
dwarf2_loc_directive_seen = FALSE;
|
||||||
dwarf2_loc_directive_seen = FALSE;
|
|
||||||
|
|
||||||
current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
|
current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
|
||||||
| DWARF2_FLAG_PROLOGUE_END
|
| DWARF2_FLAG_PROLOGUE_END
|
||||||
|
@ -415,16 +405,15 @@ dwarf2_emit_label (symbolS *label)
|
||||||
return;
|
return;
|
||||||
if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
|
if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
|
||||||
return;
|
return;
|
||||||
|
if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
|
||||||
if (debug_type == DEBUG_DWARF2)
|
return;
|
||||||
dwarf2_where (&loc);
|
|
||||||
else
|
dwarf2_where (&loc);
|
||||||
loc = current;
|
|
||||||
|
|
||||||
loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
|
loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
|
||||||
|
|
||||||
dwarf2_consume_line_info ();
|
|
||||||
dwarf2_gen_line_info_1 (label, &loc);
|
dwarf2_gen_line_info_1 (label, &loc);
|
||||||
|
dwarf2_consume_line_info ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get a .debug_line file number for FILENAME. If NUM is nonzero,
|
/* Get a .debug_line file number for FILENAME. If NUM is nonzero,
|
||||||
|
@ -664,7 +653,7 @@ dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
|
||||||
}
|
}
|
||||||
else if (strcmp (p, "isa") == 0)
|
else if (strcmp (p, "isa") == 0)
|
||||||
{
|
{
|
||||||
*input_line_pointer = c;
|
*input_line_pointer = c;
|
||||||
value = get_absolute_expression ();
|
value = get_absolute_expression ();
|
||||||
if (value >= 0)
|
if (value >= 0)
|
||||||
current.isa = value;
|
current.isa = value;
|
||||||
|
@ -677,7 +666,7 @@ dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
as_bad (_("unknown .loc sub-directive `%s'"), p);
|
as_bad (_("unknown .loc sub-directive `%s'"), p);
|
||||||
*input_line_pointer = c;
|
*input_line_pointer = c;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1432,9 +1421,9 @@ out_debug_ranges (segT ranges_seg)
|
||||||
subseg_set (ranges_seg, 0);
|
subseg_set (ranges_seg, 0);
|
||||||
|
|
||||||
/* Base Address Entry. */
|
/* Base Address Entry. */
|
||||||
for (i = 0; i < addr_size; i++)
|
for (i = 0; i < addr_size; i++)
|
||||||
out_byte (0xff);
|
out_byte (0xff);
|
||||||
for (i = 0; i < addr_size; i++)
|
for (i = 0; i < addr_size; i++)
|
||||||
out_byte (0);
|
out_byte (0);
|
||||||
|
|
||||||
/* Range List Entry. */
|
/* Range List Entry. */
|
||||||
|
@ -1463,9 +1452,9 @@ out_debug_ranges (segT ranges_seg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* End of Range Entry. */
|
/* End of Range Entry. */
|
||||||
for (i = 0; i < addr_size; i++)
|
for (i = 0; i < addr_size; i++)
|
||||||
out_byte (0);
|
out_byte (0);
|
||||||
for (i = 0; i < addr_size; i++)
|
for (i = 0; i < addr_size; i++)
|
||||||
out_byte (0);
|
out_byte (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1671,7 +1660,7 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg)
|
||||||
on the command line, so assume files[1] is the main input file.
|
on the command line, so assume files[1] is the main input file.
|
||||||
We're not supposed to get called unless at least one line number
|
We're not supposed to get called unless at least one line number
|
||||||
entry was emitted, so this should always be defined. */
|
entry was emitted, so this should always be defined. */
|
||||||
if (!files || files_in_use < 1)
|
if (files_in_use == 0)
|
||||||
abort ();
|
abort ();
|
||||||
if (files[1].dir)
|
if (files[1].dir)
|
||||||
{
|
{
|
||||||
|
@ -1760,7 +1749,7 @@ dwarf2_finish (void)
|
||||||
segT ranges_seg;
|
segT ranges_seg;
|
||||||
|
|
||||||
assert (all_segs);
|
assert (all_segs);
|
||||||
|
|
||||||
info_seg = subseg_new (".debug_info", 0);
|
info_seg = subseg_new (".debug_info", 0);
|
||||||
abbrev_seg = subseg_new (".debug_abbrev", 0);
|
abbrev_seg = subseg_new (".debug_abbrev", 0);
|
||||||
aranges_seg = subseg_new (".debug_aranges", 0);
|
aranges_seg = subseg_new (".debug_aranges", 0);
|
||||||
|
@ -1779,7 +1768,7 @@ dwarf2_finish (void)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ranges_seg = subseg_new (".debug_ranges", 0);
|
ranges_seg = subseg_new (".debug_ranges", 0);
|
||||||
bfd_set_section_flags (stdoutput, ranges_seg,
|
bfd_set_section_flags (stdoutput, ranges_seg,
|
||||||
SEC_READONLY | SEC_DEBUGGING);
|
SEC_READONLY | SEC_DEBUGGING);
|
||||||
record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
|
record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
|
||||||
out_debug_ranges (ranges_seg);
|
out_debug_ranges (ranges_seg);
|
||||||
|
|
Loading…
Reference in a new issue