diff options
Diffstat (limited to 'gcc/config/ia64/ia64.c')
-rw-r--r-- | gcc/config/ia64/ia64.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 7f5d929ce36..17b6a47b0db 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -247,6 +247,10 @@ static int ia64_sched_reorder (FILE *, int, rtx *, int *, int); static int ia64_sched_reorder2 (FILE *, int, rtx *, int *, int); static int ia64_variable_issue (FILE *, int, rtx, int); +static void ia64_asm_unwind_emit (FILE *, rtx); +static void ia64_asm_emit_except_personality (rtx); +static void ia64_asm_init_sections (void); + static struct bundle_state *get_free_bundle_state (void); static void free_bundle_state (struct bundle_state *); static void initiate_bundle_states (void); @@ -521,7 +525,11 @@ static const struct attribute_spec ia64_attribute_table[] = #define TARGET_GIMPLIFY_VA_ARG_EXPR ia64_gimplify_va_arg #undef TARGET_ASM_UNWIND_EMIT -#define TARGET_ASM_UNWIND_EMIT process_for_unwind_directive +#define TARGET_ASM_UNWIND_EMIT ia64_asm_unwind_emit +#undef TARGET_ASM_EMIT_EXCEPT_PERSONALITY +#define TARGET_ASM_EMIT_EXCEPT_PERSONALITY ia64_asm_emit_except_personality +#undef TARGET_ASM_INIT_SECTIONS +#define TARGET_ASM_INIT_SECTIONS ia64_asm_init_sections #undef TARGET_SCALAR_MODE_SUPPORTED_P #define TARGET_SCALAR_MODE_SUPPORTED_P ia64_scalar_mode_supported_p @@ -9845,8 +9853,8 @@ process_set (FILE *asm_out_file, rtx pat, rtx insn, bool unwind, bool frame) /* This function looks at a single insn and emits any directives required to unwind this insn. */ -void -process_for_unwind_directive (FILE *asm_out_file, rtx insn) +static void +ia64_asm_unwind_emit (FILE *asm_out_file, rtx insn) { bool unwind = (flag_unwind_tables || (flag_exceptions && !USING_SJLJ_EXCEPTIONS)); @@ -9909,6 +9917,24 @@ process_for_unwind_directive (FILE *asm_out_file, rtx insn) } } +/* Implement TARGET_ASM_EMIT_EXCEPT_PERSONALITY. */ + +static void +ia64_asm_emit_except_personality (rtx personality) +{ + fputs ("\t.personality\t", asm_out_file); + output_addr_const (asm_out_file, personality); + fputc ('\n', asm_out_file); +} + +/* Implement TARGET_ASM_INITIALIZE_SECTIONS. */ + +static void +ia64_asm_init_sections (void) +{ + exception_section = get_unnamed_section (0, output_section_asm_op, + "\t.handlerdata"); +} enum ia64_builtins { |