Commit db89a3be by Alexandre Oliva Committed by Alexandre Oliva

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
parent aee91ff0
2008-12-10 Alexandre Oliva <aoliva@redhat.com> 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 PR middle-end/38271
* tree-sra.c (sra_build_bf_assignment): Avoid warnings for * tree-sra.c (sra_build_bf_assignment): Avoid warnings for
variables initialized from SRAed bit fields. variables initialized from SRAed bit fields.
...@@ -110,6 +110,9 @@ static void dwarf2out_source_line (unsigned int, const char *); ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
} }
......
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.
......
/* 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,11 +477,32 @@ cpp_valid_state (cpp_reader *r, const char *name, int fd) ...@@ -477,11 +477,32 @@ 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)) 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' 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", "%s: not used because `%.*s' not defined",
name, m.name_length, namebuf); name, m.name_length, namebuf);
goto fail; goto fail;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment