Commit 7951d88a by Eric Botcazou Committed by Eric Botcazou

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
parent fde9c428
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
......
......@@ -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");
}
}
......
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.
......
......@@ -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)
......
......@@ -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
......
......@@ -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:
......
......@@ -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);
......
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