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>
|
2008-12-10 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
PR middle-end/38271
|
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)
|
#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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
25
libcpp/pch.c
25
libcpp/pch.c
|
@ -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",
|
||||||
|
|
Loading…
Reference in New Issue