Add source information to -fverbose-asm
gcc/ChangeLog: * doc/invoke.texi (fverbose-asm): Note that source code lines are emitted, and provide an example. * final.c (asm_show_source): New function. (final_scan_insn): Call asm_show_source. From-SVN: r239604
This commit is contained in:
parent
f4e46e34a2
commit
82f7214696
@ -1,3 +1,10 @@
|
|||||||
|
2016-08-18 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
* doc/invoke.texi (fverbose-asm): Note that source code lines
|
||||||
|
are emitted, and provide an example.
|
||||||
|
* final.c (asm_show_source): New function.
|
||||||
|
(final_scan_insn): Call asm_show_source.
|
||||||
|
|
||||||
2016-08-18 David Malcolm <dmalcolm@redhat.com>
|
2016-08-18 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
* diagnostic-show-locus.c (colorizer::colorizer): Replace diagnostic
|
* diagnostic-show-locus.c (colorizer::colorizer): Replace diagnostic
|
||||||
|
@ -11426,6 +11426,89 @@ debugging the compiler itself).
|
|||||||
extra information to be omitted and is useful when comparing two assembler
|
extra information to be omitted and is useful when comparing two assembler
|
||||||
files.
|
files.
|
||||||
|
|
||||||
|
The added comments include:
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
|
||||||
|
@item
|
||||||
|
information on the compiler version and command-line options,
|
||||||
|
|
||||||
|
@item
|
||||||
|
the source code lines associated with the assembly instructions,
|
||||||
|
in the form FILENAME:LINENUMBER:CONTENT OF LINE,
|
||||||
|
|
||||||
|
@item
|
||||||
|
hints on which high-level expressions correspond to
|
||||||
|
the various assembly instruction operands.
|
||||||
|
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
For example, given this C source file:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
int test (int n)
|
||||||
|
@{
|
||||||
|
int i;
|
||||||
|
int total = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
total += i * i;
|
||||||
|
|
||||||
|
return total;
|
||||||
|
@}
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
compiling to (x86_64) assembly via @option{-S} and emitting the result
|
||||||
|
direct to stdout via @option{-o} @option{-}
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
gcc -S test.c -fverbose-asm -Os -o -
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
gives output similar to this:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
.file "test.c"
|
||||||
|
# GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
|
||||||
|
[...snip...]
|
||||||
|
# options passed:
|
||||||
|
[...snip...]
|
||||||
|
|
||||||
|
.text
|
||||||
|
.globl test
|
||||||
|
.type test, @@function
|
||||||
|
test:
|
||||||
|
.LFB0:
|
||||||
|
.cfi_startproc
|
||||||
|
# test.c:4: int total = 0;
|
||||||
|
xorl %eax, %eax # <retval>
|
||||||
|
# test.c:6: for (i = 0; i < n; i++)
|
||||||
|
xorl %edx, %edx # i
|
||||||
|
.L2:
|
||||||
|
# test.c:6: for (i = 0; i < n; i++)
|
||||||
|
cmpl %edi, %edx # n, i
|
||||||
|
jge .L5 #,
|
||||||
|
# test.c:7: total += i * i;
|
||||||
|
movl %edx, %ecx # i, tmp92
|
||||||
|
imull %edx, %ecx # i, tmp92
|
||||||
|
# test.c:6: for (i = 0; i < n; i++)
|
||||||
|
incl %edx # i
|
||||||
|
# test.c:7: total += i * i;
|
||||||
|
addl %ecx, %eax # tmp92, <retval>
|
||||||
|
jmp .L2 #
|
||||||
|
.L5:
|
||||||
|
# test.c:10: @}
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.LFE0:
|
||||||
|
.size test, .-test
|
||||||
|
.ident "GCC: (GNU) 7.0.0 20160809 (experimental)"
|
||||||
|
.section .note.GNU-stack,"",@@progbits
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
The comments are intended for humans rather than machines and hence the
|
||||||
|
precise format of the comments is subject to change.
|
||||||
|
|
||||||
@item -frecord-gcc-switches
|
@item -frecord-gcc-switches
|
||||||
@opindex frecord-gcc-switches
|
@opindex frecord-gcc-switches
|
||||||
This switch causes the command line used to invoke the
|
This switch causes the command line used to invoke the
|
||||||
|
28
gcc/final.c
28
gcc/final.c
@ -2140,6 +2140,26 @@ call_from_call_insn (rtx_call_insn *insn)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Print a comment into the asm showing FILENAME, LINENUM, and the
|
||||||
|
corresponding source line, if available. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
asm_show_source (const char *filename, int linenum)
|
||||||
|
{
|
||||||
|
if (!filename)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int line_size;
|
||||||
|
const char *line = location_get_source_line (filename, linenum, &line_size);
|
||||||
|
if (!line)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fprintf (asm_out_file, "%s %s:%i: ", ASM_COMMENT_START, filename, linenum);
|
||||||
|
/* "line" is not 0-terminated, so we must use line_size. */
|
||||||
|
fwrite (line, 1, line_size, asm_out_file);
|
||||||
|
fputc ('\n', asm_out_file);
|
||||||
|
}
|
||||||
|
|
||||||
/* The final scan for one insn, INSN.
|
/* The final scan for one insn, INSN.
|
||||||
Args are same as in `final', except that INSN
|
Args are same as in `final', except that INSN
|
||||||
is the insn being scanned.
|
is the insn being scanned.
|
||||||
@ -2563,8 +2583,12 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
|
|||||||
note in a row. */
|
note in a row. */
|
||||||
if (!DECL_IGNORED_P (current_function_decl)
|
if (!DECL_IGNORED_P (current_function_decl)
|
||||||
&& notice_source_line (insn, &is_stmt))
|
&& notice_source_line (insn, &is_stmt))
|
||||||
(*debug_hooks->source_line) (last_linenum, last_filename,
|
{
|
||||||
last_discriminator, is_stmt);
|
if (flag_verbose_asm)
|
||||||
|
asm_show_source (last_filename, last_linenum);
|
||||||
|
(*debug_hooks->source_line) (last_linenum, last_filename,
|
||||||
|
last_discriminator, is_stmt);
|
||||||
|
}
|
||||||
|
|
||||||
if (GET_CODE (body) == PARALLEL
|
if (GET_CODE (body) == PARALLEL
|
||||||
&& GET_CODE (XVECEXP (body, 0, 0)) == ASM_INPUT)
|
&& GET_CODE (XVECEXP (body, 0, 0)) == ASM_INPUT)
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2016-08-18 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
* gcc.dg/verbose-asm-2.c: New test case.
|
||||||
|
|
||||||
2016-08-18 David Malcolm <dmalcolm@redhat.com>
|
2016-08-18 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
|
* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
|
||||||
|
15
gcc/testsuite/gcc.dg/verbose-asm-2.c
Normal file
15
gcc/testsuite/gcc.dg/verbose-asm-2.c
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* Ensure that the -fverbose-asm leads to source code information in the generated asm. */
|
||||||
|
/* { dg-options "-fverbose-asm" } */
|
||||||
|
|
||||||
|
int test (int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int total = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
total += i * i;
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* { dg-final { scan-assembler "total = 0" } } */
|
Loading…
Reference in New Issue
Block a user