This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: output dwarf2 unwind info via asm directives
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: "Richard Henderson" <rth at twiddle dot net>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 5 Aug 2008 15:02:04 -0700
- Subject: Re: output dwarf2 unwind info via asm directives
- References: <20080805174514.GA25821@twiddle.net>
On Tue, Aug 5, 2008 at 10:45 AM, Richard Henderson <rth@twiddle.net> wrote:
> Having the compiler emit dwarf2 unwind info via assembler directives
> makes it possible to add those same directives to inline assembly,
> and have everything come out correct in the end.
>
> Tested on x86-64.
>
>
> r~
>
>
>
> * Makefile.in (c-cppbuiltin.o): Depend on debug.h.
> * c-cppbuiltin.c (c_cpp_builtins): Define __GCC_HAVE_DWARF2_CFI_ASM.
> * doc/cpp.texi (__GCC_HAVE_DWARF2_CFI_ASM): Document it.
> * common.opt (fdwarf2-cfi-asm): New.
> * configure.ac (HAVE_GAS_CFI_DIRECTIVE): New.
> * config.in, configure: Rebuild.
> * dwarf2asm.c (dw2_asm_output_data_raw): New.
> (dw2_asm_output_data_uleb128_raw, dw2_asm_output_data_sleb128_raw): New.
> (dw2_force_const_mem): Externalize.
> * dwarf2asm.h: Update.
> * dwarf2out.c (dwarf2out_cfi_label): If flag_dwarf2_cfi_asm, don't
> generate a real label.
> (output_cfi_directive): New.
> (add_fde_cfi): If flag_dwarf2_cfi_asm, use it.
> (output_call_frame_info): Do nothing if flag_dwarf2_cfi_asm.
> (dwarf2out_begin_prologue): Emit .cfi_startproc, .cfi_personality,
> and .cfi_lsda.
> (dwarf2out_end_epilogue): Emit .cfi_endproc.
> (output_loc_operands_raw, output_loc_sequence_raw): New.
> (output_cfa_loc_raw): New.
>
I think they caused some PCH failures on Linux/ia32:
http://gcc.gnu.org/ml/gcc-testresults/2008-08/msg00520.html
FAIL: gcc.dg/pch/save-temps-1.c -O0 -g -I. (test for excess errors)
FAIL: gcc.dg/pch/save-temps-1.c -O0 -g assembly comparison
FAIL: gcc.dg/pch/save-temps-1.c -O3 -g -I. (test for excess errors)
FAIL: gcc.dg/pch/save-temps-1.c -O3 -g assembly comparis
FAIL: gcc.dg/pch/valid-1b.c -O0 -g -I. (test for excess errors)
FAIL: gcc.dg/pch/valid-1b.c -O0 -g assembly comparison
FAIL: gcc.dg/pch/valid-1b.c -O0 -I. (test for excess errors)
FAIL: gcc.dg/pch/valid-1b.c -O0 assembly comparison
FAIL: gcc.dg/pch/valid-1b.c -O1 -I. (test for excess errors)
FAIL: gcc.dg/pch/valid-1b.c -O1 assembly comparison
FAIL: gcc.dg/pch/valid-1b.c -O2 -I. (test for excess errors)
FAIL: gcc.dg/pch/valid-1b.c -O2 assembly comparison
FAIL: gcc.dg/pch/valid-1b.c -O3 -fomit-frame-pointer -I. (test for
excess errors)
FAIL: gcc.dg/pch/valid-1b.c -O3 -fomit-frame-pointer assembly comparison
FAIL: gcc.dg/pch/valid-1b.c -O3 -g -I. (test for excess errors)
FAIL: gcc.dg/pch/valid-1b.c -O3 -g assembly comparison
FAIL: gcc.dg/pch/valid-1b.c -Os -I. (test for excess errors)
FAIL: gcc.dg/pch/valid-1b.c -Os assembly comparison
One message I saw is
Executing on host: /export/gnu/import/svn/gcc-test/bld/gcc/xgcc
-B/export/gnu/import/svn/gcc-test/bld/gcc/
/export/gnu/import/svn/gcc-test/src/gcc/testsuite/gcc.dg/pch/valid-1b.c
-O0 -g -I. -I. -Winvalid-pch -g0 -fno-show-column -S -m32 -o
valid-1b.s (timeout = 300)
/export/gnu/import/svn/gcc-test/src/gcc/testsuite/gcc.dg/pch/valid-1b.c:3:
warning: ./valid-1b.h.gch: not used because
`__GCC_HAVE_DWARF2_CFI_ASM' not defined^M
/export/gnu/import/svn/gcc-test/src/gcc/testsuite/gcc.dg/pch/valid-1b.c:3:
error: valid-1b.h: No such file or directory^M
/export/gnu/import/svn/gcc-test/src/gcc/testsuite/gcc.dg/pch/valid-1b.c:3:
error: one or more PCH files were found, but they were invalid^M
compiler exited with status 1
H.J.