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:
Alexandre Oliva 2008-12-10 17:31:07 +00:00 committed by Alexandre Oliva
parent aee91ff0bd
commit db89a3be51
4 changed files with 42 additions and 4 deletions

View File

@ -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> 2008-12-10 Alexandre Oliva <aoliva@redhat.com>
PR middle-end/38271 PR middle-end/38271

View File

@ -110,6 +110,9 @@ static void dwarf2out_source_line (unsigned int, const char *);
#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO) #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
#endif #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 /* Decide whether we want to emit frame unwind information for the current
translation unit. */ translation unit. */
@ -121,7 +124,7 @@ dwarf2out_do_frame (void)
we're not going to output frame or unwind info. */ we're not going to output frame or unwind info. */
return (write_symbols == DWARF2_DEBUG return (write_symbols == DWARF2_DEBUG
|| write_symbols == VMS_AND_DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG
|| DWARF2_FRAME_INFO || DWARF2_FRAME_INFO || saved_do_cfi_asm
#ifdef DWARF2_UNWIND_INFO #ifdef DWARF2_UNWIND_INFO
|| (DWARF2_UNWIND_INFO || (DWARF2_UNWIND_INFO
&& (flag_unwind_tables && (flag_unwind_tables
@ -142,7 +145,7 @@ dwarf2out_do_cfi_asm (void)
#endif #endif
if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ()) if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
return false; return false;
if (!eh_personality_libfunc) if (saved_do_cfi_asm || !eh_personality_libfunc)
return true; return true;
if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE) if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
return false; return false;
@ -156,6 +159,7 @@ dwarf2out_do_cfi_asm (void)
if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel) if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
return false; return false;
saved_do_cfi_asm = true;
return true; return true;
} }

View File

@ -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> 2008-11-29 Joseph Myers <joseph@codesourcery.com>
* lex.c (cpp_token_len): Use 6 as default length. * lex.c (cpp_token_len): Use 6 as default length.

View File

@ -1,5 +1,5 @@
/* Part of CPP library. (Precompiled header reading/writing.) /* 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. Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it 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); h = cpp_lookup (r, namebuf, m.name_length);
if (m.flags & NODE_POISONED if (m.flags & NODE_POISONED
|| h->type != NT_MACRO
|| h->flags & NODE_POISONED) || 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)) if (CPP_OPTION (r, warn_invalid_pch))
cpp_error (r, CPP_DL_WARNING_SYSHDR, cpp_error (r, CPP_DL_WARNING_SYSHDR,
"%s: not used because `%.*s' not defined", "%s: not used because `%.*s' not defined",