re PR lto/44230 (Do not create need for multiple EH personalities)

PR lto/44230
	* dwarf2out.c (dwarf2out_begin_prologue): Fix nits in sorry message.
lto/
	* lto.h (lto_eh_personality): New prototype.
	* lto.c: Include debug.h.
	(first_personality_decl): New static variable.
	(lto_materialize_function): Set it to DECL_FUNCTION_PERSONALITY of the
	first function for which it is non-null.
	(lto_eh_personality_decl): New static variable.
	(lto_eh_personality): New function.
	* lto-lang.c (LANG_HOOKS_EH_PERSONALITY): Redefine to above function.
	* Make-lang.in (lto/lto.o): Add dependency on debug.h.

From-SVN: r159921
This commit is contained in:
Eric Botcazou 2010-05-27 14:11:35 +00:00 committed by Eric Botcazou
parent fde9c428ca
commit 7951d88a0c
7 changed files with 57 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2010-05-27 Eric Botcazou <ebotcazou@adacore.com>
PR lto/44230
* dwarf2out.c (dwarf2out_begin_prologue): Fix nits in sorry message.
2010-05-27 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44284

View File

@ -4009,12 +4009,11 @@ dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
current_unit_personality = personality;
/* We cannot keep a current personality per function as without CFI
asm at the point where we emit the CFI data there is no current
asm, at the point where we emit the CFI data, there is no current
function anymore. */
if (personality
&& current_unit_personality != personality)
sorry ("Multiple EH personalities are supported only with assemblers "
"supporting .cfi.personality directive.");
if (personality && current_unit_personality != personality)
sorry ("multiple EH personalities are supported only with assemblers "
"supporting .cfi_personality directive");
}
}

View File

@ -1,3 +1,16 @@
2010-05-27 Eric Botcazou <ebotcazou@adacore.com>
PR lto/44230
* lto.h (lto_eh_personality): New prototype.
* lto.c: Include debug.h.
(first_personality_decl): New static variable.
(lto_materialize_function): Set it to DECL_FUNCTION_PERSONALITY of the
first function for which it is non-null.
(lto_eh_personality_decl): New static variable.
(lto_eh_personality): New function.
* lto-lang.c (LANG_HOOKS_EH_PERSONALITY): Redefine to above function.
* Make-lang.in (lto/lto.o): Add dependency on debug.h.
2010-05-26 Steven Bosscher <steven@gcc.gnu.org>
* lto-lang.c: Do not include expr.h.

View File

@ -84,7 +84,7 @@ lto/lto.o: lto/lto.c $(CONFIG_H) $(SYSTEM_H) coretypes.h opts.h \
toplev.h $(TREE_H) $(DIAGNOSTIC_H) $(TM_H) $(LIBIBERTY_H) \
$(CGRAPH_H) $(GGC_H) tree-ssa-operands.h $(TREE_PASS_H) \
langhooks.h vec.h $(BITMAP_H) pointer-set.h $(IPA_PROP_H) \
$(COMMON_H) $(TIMEVAR_H) $(GIMPLE_H) $(LTO_H) $(LTO_TREE_H) \
$(COMMON_H) debug.h $(TIMEVAR_H) $(GIMPLE_H) $(LTO_H) $(LTO_TREE_H) \
$(LTO_TAGS_H) $(LTO_STREAMER_H) gt-lto-lto.h
lto/lto-elf.o: lto/lto-elf.c $(CONFIG_H) coretypes.h $(SYSTEM_H) \
toplev.h $(LTO_H) $(TM_H) $(LIBIBERTY_H) $(GGC_H) $(LTO_STREAMER_H)

View File

@ -1161,6 +1161,8 @@ static void lto_init_ts (void)
#define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS true
#undef LANG_HOOKS_TYPES_COMPATIBLE_P
#define LANG_HOOKS_TYPES_COMPATIBLE_P NULL
#undef LANG_HOOKS_EH_PERSONALITY
#define LANG_HOOKS_EH_PERSONALITY lto_eh_personality
/* Attribute hooks. */
#undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE

View File

@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see
#include "pointer-set.h"
#include "ipa-prop.h"
#include "common.h"
#include "debug.h"
#include "timevar.h"
#include "gimple.h"
#include "lto.h"
@ -61,6 +62,9 @@ along with GCC; see the file COPYING3. If not see
DEF_VEC_P(bitmap);
DEF_VEC_ALLOC_P(bitmap,heap);
static GTY(()) tree first_personality_decl;
/* Read the constructors and inits. */
static void
@ -75,7 +79,7 @@ lto_materialize_constructors_and_inits (struct lto_file_decl_data * file_data)
data, len);
}
/* Read the function body for the function associated with NODE if possible. */
/* Read the function body for the function associated with NODE. */
static void
lto_materialize_function (struct cgraph_node *node)
@ -113,9 +117,11 @@ lto_materialize_function (struct cgraph_node *node)
WPA mode, the body of the function is not needed. */
if (!flag_wpa)
{
allocate_struct_function (decl, false);
announce_function (node->decl);
allocate_struct_function (decl, false);
announce_function (decl);
lto_input_function_body (file_data, decl, data);
if (DECL_FUNCTION_PERSONALITY (decl) && !first_personality_decl)
first_personality_decl = DECL_FUNCTION_PERSONALITY (decl);
lto_stats.num_function_bodies++;
}
@ -1844,6 +1850,28 @@ do_whole_program_analysis (void)
}
static GTY(()) tree lto_eh_personality_decl;
/* Return the LTO personality function decl. */
tree
lto_eh_personality (void)
{
if (!lto_eh_personality_decl)
{
/* Use the first personality DECL for our personality if we don't
support multiple ones. This ensures that we don't artificially
create the need for them in a single-language program. */
if (first_personality_decl && !dwarf2out_do_cfi_asm ())
lto_eh_personality_decl = first_personality_decl;
else
lto_eh_personality_decl = lhd_gcc_personality ();
}
return lto_eh_personality_decl;
}
/* Main entry point for the GIMPLE front end. This front end has
three main personalities:

View File

@ -36,6 +36,7 @@ typedef struct lto_file_struct
extern const char *resolution_file_name;
/* In lto.c */
extern tree lto_eh_personality (void);
extern void lto_main (int);
extern void lto_read_all_file_options (void);