mirror of git://gcc.gnu.org/git/gcc.git
re PR target/37033 (Revision 138733 breaks -g vs -g0 for PCH)
gcc/ChangeLog: PR target/37033 * dwarf2out.c (saved_do_cfi_asm): New. (dwarf2out_do_frame): Take it into account. (dwarf2out_d_cfi_asm): Likewise. Set it when appropriate. libcpp/ChangeLog: PR target/37033 * pch.c (cpp_valid_state): Improve message for poisoned symbols. Allow for differences in __GCC_HAVE_DWARF2_CFI_ASM. From-SVN: r142652
This commit is contained in:
parent
aee91ff0bd
commit
db89a3be51
|
@ -1,3 +1,10 @@
|
|||
2008-12-10 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR target/37033
|
||||
* dwarf2out.c (saved_do_cfi_asm): New.
|
||||
(dwarf2out_do_frame): Take it into account.
|
||||
(dwarf2out_d_cfi_asm): Likewise. Set it when appropriate.
|
||||
|
||||
2008-12-10 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR middle-end/38271
|
||||
|
|
|
@ -110,6 +110,9 @@ static void dwarf2out_source_line (unsigned int, const char *);
|
|||
#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
|
||||
#endif
|
||||
|
||||
/* Save the result of dwarf2out_do_frame across PCH. */
|
||||
static GTY(()) bool saved_do_cfi_asm = 0;
|
||||
|
||||
/* Decide whether we want to emit frame unwind information for the current
|
||||
translation unit. */
|
||||
|
||||
|
@ -121,7 +124,7 @@ dwarf2out_do_frame (void)
|
|||
we're not going to output frame or unwind info. */
|
||||
return (write_symbols == DWARF2_DEBUG
|
||||
|| write_symbols == VMS_AND_DWARF2_DEBUG
|
||||
|| DWARF2_FRAME_INFO
|
||||
|| DWARF2_FRAME_INFO || saved_do_cfi_asm
|
||||
#ifdef DWARF2_UNWIND_INFO
|
||||
|| (DWARF2_UNWIND_INFO
|
||||
&& (flag_unwind_tables
|
||||
|
@ -142,7 +145,7 @@ dwarf2out_do_cfi_asm (void)
|
|||
#endif
|
||||
if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
|
||||
return false;
|
||||
if (!eh_personality_libfunc)
|
||||
if (saved_do_cfi_asm || !eh_personality_libfunc)
|
||||
return true;
|
||||
if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
|
||||
return false;
|
||||
|
@ -156,6 +159,7 @@ dwarf2out_do_cfi_asm (void)
|
|||
if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
|
||||
return false;
|
||||
|
||||
saved_do_cfi_asm = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2008-12-10 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR target/37033
|
||||
* pch.c (cpp_valid_state): Improve message for poisoned symbols.
|
||||
Allow for differences in __GCC_HAVE_DWARF2_CFI_ASM.
|
||||
|
||||
2008-11-29 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* lex.c (cpp_token_len): Use 6 as default length.
|
||||
|
|
25
libcpp/pch.c
25
libcpp/pch.c
|
@ -1,5 +1,5 @@
|
|||
/* Part of CPP library. (Precompiled header reading/writing.)
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2008
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
|
@ -477,9 +477,30 @@ cpp_valid_state (cpp_reader *r, const char *name, int fd)
|
|||
|
||||
h = cpp_lookup (r, namebuf, m.name_length);
|
||||
if (m.flags & NODE_POISONED
|
||||
|| h->type != NT_MACRO
|
||||
|| h->flags & NODE_POISONED)
|
||||
{
|
||||
if (CPP_OPTION (r, warn_invalid_pch))
|
||||
cpp_error (r, CPP_DL_WARNING_SYSHDR,
|
||||
"%s: not used because `%.*s' is poisoned",
|
||||
name, m.name_length, namebuf);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (h->type != NT_MACRO)
|
||||
{
|
||||
/* It's ok if __GCC_HAVE_DWARF2_CFI_ASM becomes undefined,
|
||||
as in, when the PCH file is created with -g and we're
|
||||
attempting to use it without -g. Restoring the PCH file
|
||||
is supposed to bring in this definition *and* enable the
|
||||
generation of call frame information, so that precompiled
|
||||
definitions that take this macro into accout, to decide
|
||||
what asm to emit, won't issue .cfi directives when the
|
||||
compiler doesn't. */
|
||||
if (!(h->flags & NODE_USED)
|
||||
&& m.name_length == sizeof ("__GCC_HAVE_DWARF2_CFI_ASM") - 1
|
||||
&& !memcmp (namebuf, "__GCC_HAVE_DWARF2_CFI_ASM", m.name_length))
|
||||
continue;
|
||||
|
||||
if (CPP_OPTION (r, warn_invalid_pch))
|
||||
cpp_error (r, CPP_DL_WARNING_SYSHDR,
|
||||
"%s: not used because `%.*s' not defined",
|
||||
|
|
Loading…
Reference in New Issue