This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: struct eh_status breakup
- From: Richard Guenther <rguenther at suse dot de>
- To: Jan Hubicka <jh at suse dot cz>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 14 Apr 2008 10:32:10 +0200 (CEST)
- Subject: Re: struct eh_status breakup
- References: <20080413181341.GP1705@kam.mff.cuni.cz>
On Sun, 13 Apr 2008, Jan Hubicka wrote:
> Hi,
> this patch breaks out RTL specific bits of eh_status datastructure that is now
> pointed to by struct function. Since the structure becomes quite tiny, I think
> it will make sense to make lowered EH part of struct function or of CFG
> structure to avoid memory fragmentation. There are still few bits to push out
> (i.e. last_region_number is just size of region_array) and EH regions
> themselves still contain a lot of RTL specific bits that should go into separate
> array.
>
> The patch also converts call_site_record into vector, since gengtype is
> refusing length attribut on array and vector is fitting here better anyway. I
> also had to extend gengtype to accept param_is argument for hashtables
> contained in global roots.
>
> Finally the patch drops note_current_region_may_contain_throw that is noop ever
> since we converted to lowered EH at tree level and drops cfun argument from
> get_exception_pointer and get_exception_filter.
>
> Bootstrapped/regtested i686-linux, x86_64 and ppc in progress, OK?
Ok. Please wait for comments from other people though.
Thanks,
Richard.
>
> Honza
>
> * gengtype.c (write_root): Param_is argument is OK.
> * expr.c (expand_expr_real_1): Update call of get_exception_*.
> * function.h: Include varray.h
> (rtl_eh): New stucture based on except.c one.
> (call_site_record): New forward declaration and vector type.
> * calls.c (emit_call_1): Do not call note_current_region_may_contain_throw.
> * except.c (eh_status): Remove cur_region, try_region since they are unused.
> Move filter, exc_ptr, ttype_data, ehspec_data, action_record_data and
> exception_handler_label_map, ehr_stackadj, ehr_handler, ehr_label,
> sjlj_fc, sjlj_exit_after to rth_eh in function.h.
> Remove call_site_data_used, call_site_data_size.
> Turn call_site_record into vector in function.h.
> (note_current_region_may_contain_throw): Remove.
> (get_exception_pointer, get_exception_filter): Do not take struct
> function argument; update.
> (add_ehl_entry, find_exception_handler_labels, ehspec_filter_hash,
> add_ttypes_entry, add_ehspec_entry, assign_filter_values,
> build_post_landing_pads, dw2_build_landing_pads,
> sjlj_assign_call_site_values, sjlj_mark_call_sites,
> sjlj_emit_function_enter, sjlj_emit_function_enter,
> sjlj_emit_function_exit, sjlj_emit_dispatch_table,
> sjlj_build_landing_pads, finish_eh_generation,
> remove_exception_handler_label, remove_eh_handler,
> maybe_remove_eh_handler, add_reachable_handler,
> reachable_handlers, expand_builtin_eh_return,
> expand_eh_return, add_action_record, collect_one_action_chain,
> add_call_site, convert_to_eh_region_ranges, sjlj_size_of_call_site_table,
> sjlj_output_call_site_table, output_function_exception_table,
> * except.h (note_current_region_may_contain_throw): Remove
> (get_exception_pointer, get_exception_filter): Do not take struct function
> argument.
> * Makefile.in (GTFILES): Put varargs before struct function.
> Index: gengtype.c
> ===================================================================
> *** gengtype.c (revision 134239)
> --- gengtype.c (working copy)
> *************** write_root (outf_p f, pair_p v, type_p t
> *** 2980,2985 ****
> --- 2980,2987 ----
> skip_p = 1;
> else if (strcmp (o->name, "desc") == 0)
> desc = o->info;
> + else if (strcmp (o->name, "param_is") == 0)
> + ;
> else
> error_at_line (line,
> "field `%s' of global `%s' has unknown option `%s'",
> Index: expr.c
> ===================================================================
> *** expr.c (revision 134239)
> --- expr.c (working copy)
> *************** expand_expr_real_1 (tree exp, rtx target
> *** 9180,9189 ****
> return const0_rtx;
>
> case EXC_PTR_EXPR:
> ! return get_exception_pointer (cfun);
>
> case FILTER_EXPR:
> ! return get_exception_filter (cfun);
>
> case FDESC_EXPR:
> /* Function descriptors are not valid except for as
> --- 9180,9189 ----
> return const0_rtx;
>
> case EXC_PTR_EXPR:
> ! return get_exception_pointer ();
>
> case FILTER_EXPR:
> ! return get_exception_filter ();
>
> case FDESC_EXPR:
> /* Function descriptors are not valid except for as
> Index: function.h
> ===================================================================
> *** function.h (revision 134239)
> --- function.h (working copy)
> *************** along with GCC; see the file COPYING3.
> *** 24,29 ****
> --- 24,30 ----
>
> #include "tree.h"
> #include "hashtab.h"
> + #include "varray.h"
>
> /* Stack of pending (incomplete) sequences saved by `start_sequence'.
> Each element describes one pending sequence.
> *************** struct expr_status GTY(())
> *** 136,141 ****
> --- 137,170 ----
> rtx x_forced_labels;
> };
>
> + typedef struct call_site_record *call_site_record;
> + DEF_VEC_P(call_site_record);
> + DEF_VEC_ALLOC_P(call_site_record, gc);
> +
> + /* RTL representation of exception handling. */
> + struct rtl_eh GTY(())
> + {
> + rtx filter;
> + rtx exc_ptr;
> +
> + int built_landing_pads;
> +
> + rtx ehr_stackadj;
> + rtx ehr_handler;
> + rtx ehr_label;
> +
> + rtx sjlj_fc;
> + rtx sjlj_exit_after;
> +
> + htab_t GTY ((param_is (struct ehl_map_entry))) exception_handler_label_map;
> +
> + VEC(tree,gc) *ttype_data;
> + varray_type ehspec_data;
> + varray_type action_record_data;
> +
> + VEC(call_site_record,gc) *call_site_record;
> + };
> +
> #define pending_stack_adjust (crtl->expr.x_pending_stack_adjust)
> #define inhibit_defer_pop (crtl->expr.x_inhibit_defer_pop)
> #define saveregs_value (crtl->expr.x_saveregs_value)
> *************** struct expr_status GTY(())
> *** 146,151 ****
> --- 175,181 ----
> struct gimple_df;
> struct temp_slot;
> typedef struct temp_slot *temp_slot_p;
> + struct call_site_record;
>
> DEF_VEC_P(temp_slot_p);
> DEF_VEC_ALLOC_P(temp_slot_p,gc);
> *************** struct rtl_data GTY(())
> *** 227,232 ****
> --- 257,263 ----
> struct varasm_status varasm;
> struct incoming_args args;
> struct function_subsections subsections;
> + struct rtl_eh eh;
>
> /* For function.c */
>
> Index: calls.c
> ===================================================================
> *** calls.c (revision 134239)
> --- calls.c (working copy)
> *************** emit_call_1 (rtx funexp, tree fntree, tr
> *** 389,395 ****
> if (rn > 0)
> REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (rn),
> REG_NOTES (call_insn));
> - note_current_region_may_contain_throw ();
> }
>
> if (ecf_flags & ECF_NORETURN)
> --- 389,394 ----
> Index: except.c
> ===================================================================
> *** except.c (revision 134239)
> --- except.c (working copy)
> *************** along with GCC; see the file COPYING3.
> *** 84,90 ****
> #define EH_RETURN_DATA_REGNO(N) INVALID_REGNUM
> #endif
>
> -
> /* Protect cleanup actions with must-not-throw regions, with a call
> to the given failure handler. */
> tree (*lang_protect_cleanup_actions) (void);
> --- 84,89 ----
> *************** struct eh_status GTY(())
> *** 218,254 ****
>
> /* The same information as an indexable array. */
> VEC(eh_region,gc) *region_array;
> -
> - /* The most recently open region. */
> - struct eh_region *cur_region;
> -
> - /* This is the region for which we are processing catch blocks. */
> - struct eh_region *try_region;
> -
> - rtx filter;
> - rtx exc_ptr;
> -
> - int built_landing_pads;
> int last_region_number;
>
> - VEC(tree,gc) *ttype_data;
> - varray_type ehspec_data;
> - varray_type action_record_data;
> -
> - htab_t GTY ((param_is (struct ehl_map_entry))) exception_handler_label_map;
> -
> - struct call_site_record * GTY ((length ("%h.call_site_data_used")))
> - call_site_data;
> - int call_site_data_used;
> - int call_site_data_size;
> -
> - rtx ehr_stackadj;
> - rtx ehr_handler;
> - rtx ehr_label;
> -
> - rtx sjlj_fc;
> - rtx sjlj_exit_after;
> -
> htab_t GTY((param_is (struct throw_stmt_node))) throw_stmt_table;
> };
>
> --- 217,224 ----
> *************** note_eh_region_may_contain_throw (struct
> *** 587,627 ****
> }
> }
>
> - void
> - note_current_region_may_contain_throw (void)
> - {
> - note_eh_region_may_contain_throw (cfun->eh->cur_region);
> - }
> -
>
> /* Return an rtl expression for a pointer to the exception object
> within a handler. */
>
> rtx
> ! get_exception_pointer (struct function *fun)
> {
> ! rtx exc_ptr = fun->eh->exc_ptr;
> ! if (fun == cfun && ! exc_ptr)
> ! {
> ! exc_ptr = gen_reg_rtx (ptr_mode);
> ! fun->eh->exc_ptr = exc_ptr;
> ! }
> ! return exc_ptr;
> }
>
> /* Return an rtl expression for the exception dispatch filter
> within a handler. */
>
> rtx
> ! get_exception_filter (struct function *fun)
> {
> ! rtx filter = fun->eh->filter;
> ! if (fun == cfun && ! filter)
> ! {
> ! filter = gen_reg_rtx (targetm.eh_return_filter_mode ());
> ! fun->eh->filter = filter;
> ! }
> ! return filter;
> }
>
> /* This section is for the exception handling specific optimization pass. */
> --- 557,583 ----
> }
> }
>
>
> /* Return an rtl expression for a pointer to the exception object
> within a handler. */
>
> rtx
> ! get_exception_pointer (void)
> {
> ! if (! crtl->eh.exc_ptr)
> ! crtl->eh.exc_ptr = gen_reg_rtx (ptr_mode);
> ! return crtl->eh.exc_ptr;
> }
>
> /* Return an rtl expression for the exception dispatch filter
> within a handler. */
>
> rtx
> ! get_exception_filter (void)
> {
> ! if (! crtl->eh.filter)
> ! crtl->eh.filter = gen_reg_rtx (targetm.eh_return_filter_mode ());
> ! return crtl->eh.filter;
> }
>
> /* This section is for the exception handling specific optimization pass. */
> *************** add_ehl_entry (rtx label, struct eh_regi
> *** 783,795 ****
> entry->region = region;
>
> slot = (struct ehl_map_entry **)
> ! htab_find_slot (cfun->eh->exception_handler_label_map, entry, INSERT);
>
> /* Before landing pad creation, each exception handler has its own
> label. After landing pad creation, the exception handlers may
> share landing pads. This is ok, since maybe_remove_eh_handler
> only requires the 1-1 mapping before landing pad creation. */
> ! gcc_assert (!*slot || cfun->eh->built_landing_pads);
>
> *slot = entry;
> }
> --- 739,751 ----
> entry->region = region;
>
> slot = (struct ehl_map_entry **)
> ! htab_find_slot (crtl->eh.exception_handler_label_map, entry, INSERT);
>
> /* Before landing pad creation, each exception handler has its own
> label. After landing pad creation, the exception handlers may
> share landing pads. This is ok, since maybe_remove_eh_handler
> only requires the 1-1 mapping before landing pad creation. */
> ! gcc_assert (!*slot || crtl->eh.built_landing_pads);
>
> *slot = entry;
> }
> *************** find_exception_handler_labels (void)
> *** 799,811 ****
> {
> int i;
>
> ! if (cfun->eh->exception_handler_label_map)
> ! htab_empty (cfun->eh->exception_handler_label_map);
> else
> {
> /* ??? The expansion factor here (3/2) must be greater than the htab
> occupancy factor (4/3) to avoid unnecessary resizing. */
> ! cfun->eh->exception_handler_label_map
> = htab_create_ggc (cfun->eh->last_region_number * 3 / 2,
> ehl_hash, ehl_eq, NULL);
> }
> --- 755,767 ----
> {
> int i;
>
> ! if (crtl->eh.exception_handler_label_map)
> ! htab_empty (crtl->eh.exception_handler_label_map);
> else
> {
> /* ??? The expansion factor here (3/2) must be greater than the htab
> occupancy factor (4/3) to avoid unnecessary resizing. */
> ! crtl->eh.exception_handler_label_map
> = htab_create_ggc (cfun->eh->last_region_number * 3 / 2,
> ehl_hash, ehl_eq, NULL);
> }
> *************** find_exception_handler_labels (void)
> *** 821,827 ****
> region = VEC_index (eh_region, cfun->eh->region_array, i);
> if (! region || region->region_number != i)
> continue;
> ! if (cfun->eh->built_landing_pads)
> lab = region->landing_pad;
> else
> lab = region->label;
> --- 777,783 ----
> region = VEC_index (eh_region, cfun->eh->region_array, i);
> if (! region || region->region_number != i)
> continue;
> ! if (crtl->eh.built_landing_pads)
> lab = region->landing_pad;
> else
> lab = region->label;
> *************** find_exception_handler_labels (void)
> *** 832,838 ****
>
> /* For sjlj exceptions, need the return label to remain live until
> after landing pad generation. */
> ! if (USING_SJLJ_EXCEPTIONS && ! cfun->eh->built_landing_pads)
> add_ehl_entry (return_label, NULL);
> }
>
> --- 788,794 ----
>
> /* For sjlj exceptions, need the return label to remain live until
> after landing pad generation. */
> ! if (USING_SJLJ_EXCEPTIONS && ! crtl->eh.built_landing_pads)
> add_ehl_entry (return_label, NULL);
> }
>
> *************** ehspec_filter_hash (const void *pentry)
> *** 1227,1233 ****
> return h;
> }
>
> ! /* Add TYPE (which may be NULL) to cfun->eh->ttype_data, using TYPES_HASH
> to speed up the search. Return the filter value to be used. */
>
> static int
> --- 1183,1189 ----
> return h;
> }
>
> ! /* Add TYPE (which may be NULL) to crtl->eh.ttype_data, using TYPES_HASH
> to speed up the search. Return the filter value to be used. */
>
> static int
> *************** add_ttypes_entry (htab_t ttypes_hash, tr
> *** 1244,1259 ****
>
> n = XNEW (struct ttypes_filter);
> n->t = type;
> ! n->filter = VEC_length (tree, cfun->eh->ttype_data) + 1;
> *slot = n;
>
> ! VEC_safe_push (tree, gc, cfun->eh->ttype_data, type);
> }
>
> return n->filter;
> }
>
> ! /* Add LIST to cfun->eh->ehspec_data, using EHSPEC_HASH and TYPES_HASH
> to speed up the search. Return the filter value to be used. */
>
> static int
> --- 1200,1215 ----
>
> n = XNEW (struct ttypes_filter);
> n->t = type;
> ! n->filter = VEC_length (tree, crtl->eh.ttype_data) + 1;
> *slot = n;
>
> ! VEC_safe_push (tree, gc, crtl->eh.ttype_data, type);
> }
>
> return n->filter;
> }
>
> ! /* Add LIST to crtl->eh.ehspec_data, using EHSPEC_HASH and TYPES_HASH
> to speed up the search. Return the filter value to be used. */
>
> static int
> *************** add_ehspec_entry (htab_t ehspec_hash, ht
> *** 1272,1297 ****
>
> n = XNEW (struct ttypes_filter);
> n->t = list;
> ! n->filter = -(VARRAY_ACTIVE_SIZE (cfun->eh->ehspec_data) + 1);
> *slot = n;
>
> /* Generate a 0 terminated list of filter values. */
> for (; list ; list = TREE_CHAIN (list))
> {
> if (targetm.arm_eabi_unwinder)
> ! VARRAY_PUSH_TREE (cfun->eh->ehspec_data, TREE_VALUE (list));
> else
> {
> /* Look up each type in the list and encode its filter
> value as a uleb128. */
> ! push_uleb128 (&cfun->eh->ehspec_data,
> add_ttypes_entry (ttypes_hash, TREE_VALUE (list)));
> }
> }
> if (targetm.arm_eabi_unwinder)
> ! VARRAY_PUSH_TREE (cfun->eh->ehspec_data, NULL_TREE);
> else
> ! VARRAY_PUSH_UCHAR (cfun->eh->ehspec_data, 0);
> }
>
> return n->filter;
> --- 1228,1253 ----
>
> n = XNEW (struct ttypes_filter);
> n->t = list;
> ! n->filter = -(VARRAY_ACTIVE_SIZE (crtl->eh.ehspec_data) + 1);
> *slot = n;
>
> /* Generate a 0 terminated list of filter values. */
> for (; list ; list = TREE_CHAIN (list))
> {
> if (targetm.arm_eabi_unwinder)
> ! VARRAY_PUSH_TREE (crtl->eh.ehspec_data, TREE_VALUE (list));
> else
> {
> /* Look up each type in the list and encode its filter
> value as a uleb128. */
> ! push_uleb128 (&crtl->eh.ehspec_data,
> add_ttypes_entry (ttypes_hash, TREE_VALUE (list)));
> }
> }
> if (targetm.arm_eabi_unwinder)
> ! VARRAY_PUSH_TREE (crtl->eh.ehspec_data, NULL_TREE);
> else
> ! VARRAY_PUSH_UCHAR (crtl->eh.ehspec_data, 0);
> }
>
> return n->filter;
> *************** assign_filter_values (void)
> *** 1308,1318 ****
> int i;
> htab_t ttypes, ehspec;
>
> ! cfun->eh->ttype_data = VEC_alloc (tree, gc, 16);
> if (targetm.arm_eabi_unwinder)
> ! VARRAY_TREE_INIT (cfun->eh->ehspec_data, 64, "ehspec_data");
> else
> ! VARRAY_UCHAR_INIT (cfun->eh->ehspec_data, 64, "ehspec_data");
>
> ttypes = htab_create (31, ttypes_filter_hash, ttypes_filter_eq, free);
> ehspec = htab_create (31, ehspec_filter_hash, ehspec_filter_eq, free);
> --- 1264,1274 ----
> int i;
> htab_t ttypes, ehspec;
>
> ! crtl->eh.ttype_data = VEC_alloc (tree, gc, 16);
> if (targetm.arm_eabi_unwinder)
> ! VARRAY_TREE_INIT (crtl->eh.ehspec_data, 64, "ehspec_data");
> else
> ! VARRAY_UCHAR_INIT (crtl->eh.ehspec_data, 64, "ehspec_data");
>
> ttypes = htab_create (31, ttypes_filter_hash, ttypes_filter_eq, free);
> ehspec = htab_create (31, ehspec_filter_hash, ehspec_filter_eq, free);
> *************** build_post_landing_pads (void)
> *** 1457,1463 ****
> for (; tp_node; )
> {
> emit_cmp_and_jump_insns
> ! (cfun->eh->filter,
> GEN_INT (tree_low_cst (TREE_VALUE (flt_node), 0)),
> EQ, NULL_RTX,
> targetm.eh_return_filter_mode (), 0, c->label);
> --- 1413,1419 ----
> for (; tp_node; )
> {
> emit_cmp_and_jump_insns
> ! (crtl->eh.filter,
> GEN_INT (tree_low_cst (TREE_VALUE (flt_node), 0)),
> EQ, NULL_RTX,
> targetm.eh_return_filter_mode (), 0, c->label);
> *************** build_post_landing_pads (void)
> *** 1490,1496 ****
>
> emit_label (region->post_landing_pad);
>
> ! emit_cmp_and_jump_insns (cfun->eh->filter,
> GEN_INT (region->u.allowed.filter),
> EQ, NULL_RTX,
> targetm.eh_return_filter_mode (), 0, region->label);
> --- 1446,1452 ----
>
> emit_label (region->post_landing_pad);
>
> ! emit_cmp_and_jump_insns (crtl->eh.filter,
> GEN_INT (region->u.allowed.filter),
> EQ, NULL_RTX,
> targetm.eh_return_filter_mode (), 0, region->label);
> *************** connect_post_landing_pads (void)
> *** 1573,1579 ****
> else
> {
> emit_library_call (unwind_resume_libfunc, LCT_THROW,
> ! VOIDmode, 1, cfun->eh->exc_ptr, ptr_mode);
>
> /* What we just emitted was a throwing libcall, so it got a
> barrier automatically added after it. If the last insn in
> --- 1529,1535 ----
> else
> {
> emit_library_call (unwind_resume_libfunc, LCT_THROW,
> ! VOIDmode, 1, crtl->eh.exc_ptr, ptr_mode);
>
> /* What we just emitted was a throwing libcall, so it got a
> barrier automatically added after it. If the last insn in
> *************** dw2_build_landing_pads (void)
> *** 1643,1651 ****
> #endif
> { /* Nothing */ }
>
> ! emit_move_insn (cfun->eh->exc_ptr,
> gen_rtx_REG (ptr_mode, EH_RETURN_DATA_REGNO (0)));
> ! emit_move_insn (cfun->eh->filter,
> gen_rtx_REG (targetm.eh_return_filter_mode (),
> EH_RETURN_DATA_REGNO (1)));
>
> --- 1599,1607 ----
> #endif
> { /* Nothing */ }
>
> ! emit_move_insn (crtl->eh.exc_ptr,
> gen_rtx_REG (ptr_mode, EH_RETURN_DATA_REGNO (0)));
> ! emit_move_insn (crtl->eh.filter,
> gen_rtx_REG (targetm.eh_return_filter_mode (),
> EH_RETURN_DATA_REGNO (1)));
>
> *************** sjlj_assign_call_site_values (rtx dispat
> *** 1724,1730 ****
>
> /* First task: build the action table. */
>
> ! VARRAY_UCHAR_INIT (cfun->eh->action_record_data, 64, "action_record_data");
> ar_hash = htab_create (31, action_record_hash, action_record_eq, free);
>
> for (i = cfun->eh->last_region_number; i > 0; --i)
> --- 1680,1686 ----
>
> /* First task: build the action table. */
>
> ! VARRAY_UCHAR_INIT (crtl->eh.action_record_data, 64, "action_record_data");
> ar_hash = htab_create (31, action_record_hash, action_record_eq, free);
>
> for (i = cfun->eh->last_region_number; i > 0; --i)
> *************** sjlj_mark_call_sites (struct sjlj_lp_inf
> *** 1830,1836 ****
> before = find_first_parameter_load (insn, NULL_RTX);
>
> start_sequence ();
> ! mem = adjust_address (cfun->eh->sjlj_fc, TYPE_MODE (integer_type_node),
> sjlj_fc_call_site_ofs);
> emit_move_insn (mem, GEN_INT (this_call_site));
> p = get_insns ();
> --- 1786,1792 ----
> before = find_first_parameter_load (insn, NULL_RTX);
>
> start_sequence ();
> ! mem = adjust_address (crtl->eh.sjlj_fc, TYPE_MODE (integer_type_node),
> sjlj_fc_call_site_ofs);
> emit_move_insn (mem, GEN_INT (this_call_site));
> p = get_insns ();
> *************** sjlj_emit_function_enter (rtx dispatch_l
> *** 1849,1855 ****
> rtx fn_begin, fc, mem, seq;
> bool fn_begin_outside_block;
>
> ! fc = cfun->eh->sjlj_fc;
>
> start_sequence ();
>
> --- 1805,1811 ----
> rtx fn_begin, fc, mem, seq;
> bool fn_begin_outside_block;
>
> ! fc = crtl->eh.sjlj_fc;
>
> start_sequence ();
>
> *************** sjlj_emit_function_enter (rtx dispatch_l
> *** 1923,1929 ****
> void
> sjlj_emit_function_exit_after (rtx after)
> {
> ! cfun->eh->sjlj_exit_after = after;
> }
>
> static void
> --- 1879,1885 ----
> void
> sjlj_emit_function_exit_after (rtx after)
> {
> ! crtl->eh.sjlj_exit_after = after;
> }
>
> static void
> *************** sjlj_emit_function_exit (void)
> *** 1936,1942 ****
> start_sequence ();
>
> emit_library_call (unwind_sjlj_unregister_libfunc, LCT_NORMAL, VOIDmode,
> ! 1, XEXP (cfun->eh->sjlj_fc, 0), Pmode);
>
> seq = get_insns ();
> end_sequence ();
> --- 1892,1898 ----
> start_sequence ();
>
> emit_library_call (unwind_sjlj_unregister_libfunc, LCT_NORMAL, VOIDmode,
> ! 1, XEXP (crtl->eh.sjlj_fc, 0), Pmode);
>
> seq = get_insns ();
> end_sequence ();
> *************** sjlj_emit_function_exit (void)
> *** 1958,1964 ****
> gcc_assert (e->src->next_bb == EXIT_BLOCK_PTR);
> for (insn = BB_HEAD (e->src); ; insn = NEXT_INSN (insn))
> {
> ! if (insn == cfun->eh->sjlj_exit_after)
> {
> if (LABEL_P (insn))
> insn = NEXT_INSN (insn);
> --- 1914,1920 ----
> gcc_assert (e->src->next_bb == EXIT_BLOCK_PTR);
> for (insn = BB_HEAD (e->src); ; insn = NEXT_INSN (insn))
> {
> ! if (insn == crtl->eh.sjlj_exit_after)
> {
> if (LABEL_P (insn))
> insn = NEXT_INSN (insn);
> *************** sjlj_emit_dispatch_table (rtx dispatch_l
> *** 1981,1987 ****
> basic_block bb;
> edge e;
>
> ! fc = cfun->eh->sjlj_fc;
>
> start_sequence ();
>
> --- 1937,1943 ----
> basic_block bb;
> edge e;
>
> ! fc = crtl->eh.sjlj_fc;
>
> start_sequence ();
>
> *************** sjlj_emit_dispatch_table (rtx dispatch_l
> *** 2006,2015 ****
> mem = convert_to_mode (ptr_mode, mem, 0);
> #endif
> }
> ! emit_move_insn (cfun->eh->exc_ptr, mem);
>
> mem = adjust_address (fc, word_mode, sjlj_fc_data_ofs + UNITS_PER_WORD);
> ! emit_move_insn (cfun->eh->filter, mem);
>
> /* Jump to one of the directly reachable regions. */
> /* ??? This really ought to be using a switch statement. */
> --- 1962,1971 ----
> mem = convert_to_mode (ptr_mode, mem, 0);
> #endif
> }
> ! emit_move_insn (crtl->eh.exc_ptr, mem);
>
> mem = adjust_address (fc, word_mode, sjlj_fc_data_ofs + UNITS_PER_WORD);
> ! emit_move_insn (crtl->eh.filter, mem);
>
> /* Jump to one of the directly reachable regions. */
> /* ??? This really ought to be using a switch statement. */
> *************** sjlj_build_landing_pads (void)
> *** 2055,2061 ****
> {
> rtx dispatch_label = gen_label_rtx ();
>
> ! cfun->eh->sjlj_fc
> = assign_stack_local (TYPE_MODE (sjlj_fc_type_node),
> int_size_in_bytes (sjlj_fc_type_node),
> TYPE_ALIGN (sjlj_fc_type_node));
> --- 2011,2017 ----
> {
> rtx dispatch_label = gen_label_rtx ();
>
> ! crtl->eh.sjlj_fc
> = assign_stack_local (TYPE_MODE (sjlj_fc_type_node),
> int_size_in_bytes (sjlj_fc_type_node),
> TYPE_ALIGN (sjlj_fc_type_node));
> *************** finish_eh_generation (void)
> *** 2091,2098 ****
>
> /* These registers are used by the landing pads. Make sure they
> have been generated. */
> ! get_exception_pointer (cfun);
> ! get_exception_filter (cfun);
>
> /* Construct the landing pads. */
>
> --- 2047,2054 ----
>
> /* These registers are used by the landing pads. Make sure they
> have been generated. */
> ! get_exception_pointer ();
> ! get_exception_filter ();
>
> /* Construct the landing pads. */
>
> *************** finish_eh_generation (void)
> *** 2104,2110 ****
> else
> dw2_build_landing_pads ();
>
> ! cfun->eh->built_landing_pads = 1;
>
> /* We've totally changed the CFG. Start over. */
> find_exception_handler_labels ();
> --- 2060,2066 ----
> else
> dw2_build_landing_pads ();
>
> ! crtl->eh.built_landing_pads = 1;
>
> /* We've totally changed the CFG. Start over. */
> find_exception_handler_labels ();
> *************** remove_exception_handler_label (rtx labe
> *** 2166,2180 ****
>
> /* If exception_handler_label_map was not built yet,
> there is nothing to do. */
> ! if (cfun->eh->exception_handler_label_map == NULL)
> return;
>
> tmp.label = label;
> slot = (struct ehl_map_entry **)
> ! htab_find_slot (cfun->eh->exception_handler_label_map, &tmp, NO_INSERT);
> gcc_assert (slot);
>
> ! htab_clear_slot (cfun->eh->exception_handler_label_map, (void **) slot);
> }
>
> /* Splice REGION from the region tree etc. */
> --- 2122,2136 ----
>
> /* If exception_handler_label_map was not built yet,
> there is nothing to do. */
> ! if (crtl->eh.exception_handler_label_map == NULL)
> return;
>
> tmp.label = label;
> slot = (struct ehl_map_entry **)
> ! htab_find_slot (crtl->eh.exception_handler_label_map, &tmp, NO_INSERT);
> gcc_assert (slot);
>
> ! htab_clear_slot (crtl->eh.exception_handler_label_map, (void **) slot);
> }
>
> /* Splice REGION from the region tree etc. */
> *************** remove_eh_handler (struct eh_region *reg
> *** 2213,2219 ****
> bitmap_set_bit (outer->aka, region->region_number);
> }
>
> ! if (cfun->eh->built_landing_pads)
> lab = region->landing_pad;
> else
> lab = region->label;
> --- 2169,2175 ----
> bitmap_set_bit (outer->aka, region->region_number);
> }
>
> ! if (crtl->eh.built_landing_pads)
> lab = region->landing_pad;
> else
> lab = region->label;
> *************** maybe_remove_eh_handler (rtx label)
> *** 2281,2292 ****
> if the region data is completely unused. One must examine the
> landing pad and the post landing pad, and whether an inner try block
> is referencing the catch handlers directly. */
> ! if (cfun->eh->built_landing_pads)
> return;
>
> tmp.label = label;
> slot = (struct ehl_map_entry **)
> ! htab_find_slot (cfun->eh->exception_handler_label_map, &tmp, NO_INSERT);
> if (! slot)
> return;
> region = (*slot)->region;
> --- 2237,2248 ----
> if the region data is completely unused. One must examine the
> landing pad and the post landing pad, and whether an inner try block
> is referencing the catch handlers directly. */
> ! if (crtl->eh.built_landing_pads)
> return;
>
> tmp.label = label;
> slot = (struct ehl_map_entry **)
> ! htab_find_slot (crtl->eh.exception_handler_label_map, &tmp, NO_INSERT);
> if (! slot)
> return;
> region = (*slot)->region;
> *************** maybe_remove_eh_handler (rtx label)
> *** 2299,2305 ****
> are no more contained calls, which we don't see here. */
> if (region->type == ERT_MUST_NOT_THROW)
> {
> ! htab_clear_slot (cfun->eh->exception_handler_label_map, (void **) slot);
> region->label = NULL_RTX;
> }
> else
> --- 2255,2261 ----
> are no more contained calls, which we don't see here. */
> if (region->type == ERT_MUST_NOT_THROW)
> {
> ! htab_clear_slot (crtl->eh.exception_handler_label_map, (void **) slot);
> region->label = NULL_RTX;
> }
> else
> *************** maybe_remove_eh_handler (rtx label)
> *** 2312,2318 ****
> void
> for_each_eh_label (void (*callback) (rtx))
> {
> ! htab_traverse (cfun->eh->exception_handler_label_map, for_each_eh_label_1,
> (void *) &callback);
> }
>
> --- 2268,2274 ----
> void
> for_each_eh_label (void (*callback) (rtx))
> {
> ! htab_traverse (crtl->eh.exception_handler_label_map, for_each_eh_label_1,
> (void *) &callback);
> }
>
> *************** add_reachable_handler (struct reachable_
> *** 2396,2402 ****
>
> info->saw_any_handlers = true;
>
> ! if (cfun->eh->built_landing_pads)
> info->callback (lp_region, info->callback_data);
> else
> info->callback (region, info->callback_data);
> --- 2352,2358 ----
>
> info->saw_any_handlers = true;
>
> ! if (crtl->eh.built_landing_pads)
> info->callback (lp_region, info->callback_data);
> else
> info->callback (region, info->callback_data);
> *************** reachable_handlers (rtx insn)
> *** 2658,2664 ****
> }
>
> foreach_reachable_handler (region_number, is_resx,
> ! (cfun->eh->built_landing_pads
> ? arh_to_landing_pad
> : arh_to_label),
> &handlers);
> --- 2614,2620 ----
> }
>
> foreach_reachable_handler (region_number, is_resx,
> ! (crtl->eh.built_landing_pads
> ? arh_to_landing_pad
> : arh_to_label),
> &handlers);
> *************** expand_builtin_eh_return (tree stackadj_
> *** 2966,2991 ****
> rtx tmp;
>
> #ifdef EH_RETURN_STACKADJ_RTX
> ! tmp = expand_expr (stackadj_tree, cfun->eh->ehr_stackadj,
> VOIDmode, EXPAND_NORMAL);
> tmp = convert_memory_address (Pmode, tmp);
> ! if (!cfun->eh->ehr_stackadj)
> ! cfun->eh->ehr_stackadj = copy_to_reg (tmp);
> ! else if (tmp != cfun->eh->ehr_stackadj)
> ! emit_move_insn (cfun->eh->ehr_stackadj, tmp);
> #endif
>
> ! tmp = expand_expr (handler_tree, cfun->eh->ehr_handler,
> VOIDmode, EXPAND_NORMAL);
> tmp = convert_memory_address (Pmode, tmp);
> ! if (!cfun->eh->ehr_handler)
> ! cfun->eh->ehr_handler = copy_to_reg (tmp);
> ! else if (tmp != cfun->eh->ehr_handler)
> ! emit_move_insn (cfun->eh->ehr_handler, tmp);
> !
> ! if (!cfun->eh->ehr_label)
> ! cfun->eh->ehr_label = gen_label_rtx ();
> ! emit_jump (cfun->eh->ehr_label);
> }
>
> void
> --- 2922,2947 ----
> rtx tmp;
>
> #ifdef EH_RETURN_STACKADJ_RTX
> ! tmp = expand_expr (stackadj_tree, crtl->eh.ehr_stackadj,
> VOIDmode, EXPAND_NORMAL);
> tmp = convert_memory_address (Pmode, tmp);
> ! if (!crtl->eh.ehr_stackadj)
> ! crtl->eh.ehr_stackadj = copy_to_reg (tmp);
> ! else if (tmp != crtl->eh.ehr_stackadj)
> ! emit_move_insn (crtl->eh.ehr_stackadj, tmp);
> #endif
>
> ! tmp = expand_expr (handler_tree, crtl->eh.ehr_handler,
> VOIDmode, EXPAND_NORMAL);
> tmp = convert_memory_address (Pmode, tmp);
> ! if (!crtl->eh.ehr_handler)
> ! crtl->eh.ehr_handler = copy_to_reg (tmp);
> ! else if (tmp != crtl->eh.ehr_handler)
> ! emit_move_insn (crtl->eh.ehr_handler, tmp);
> !
> ! if (!crtl->eh.ehr_label)
> ! crtl->eh.ehr_label = gen_label_rtx ();
> ! emit_jump (crtl->eh.ehr_label);
> }
>
> void
> *************** expand_eh_return (void)
> *** 2993,2999 ****
> {
> rtx around_label;
>
> ! if (! cfun->eh->ehr_label)
> return;
>
> current_function_calls_eh_return = 1;
> --- 2949,2955 ----
> {
> rtx around_label;
>
> ! if (! crtl->eh.ehr_label)
> return;
>
> current_function_calls_eh_return = 1;
> *************** expand_eh_return (void)
> *** 3005,3025 ****
> around_label = gen_label_rtx ();
> emit_jump (around_label);
>
> ! emit_label (cfun->eh->ehr_label);
> clobber_return_register ();
>
> #ifdef EH_RETURN_STACKADJ_RTX
> ! emit_move_insn (EH_RETURN_STACKADJ_RTX, cfun->eh->ehr_stackadj);
> #endif
>
> #ifdef HAVE_eh_return
> if (HAVE_eh_return)
> ! emit_insn (gen_eh_return (cfun->eh->ehr_handler));
> else
> #endif
> {
> #ifdef EH_RETURN_HANDLER_RTX
> ! emit_move_insn (EH_RETURN_HANDLER_RTX, cfun->eh->ehr_handler);
> #else
> error ("__builtin_eh_return not supported on this target");
> #endif
> --- 2961,2981 ----
> around_label = gen_label_rtx ();
> emit_jump (around_label);
>
> ! emit_label (crtl->eh.ehr_label);
> clobber_return_register ();
>
> #ifdef EH_RETURN_STACKADJ_RTX
> ! emit_move_insn (EH_RETURN_STACKADJ_RTX, crtl->eh.ehr_stackadj);
> #endif
>
> #ifdef HAVE_eh_return
> if (HAVE_eh_return)
> ! emit_insn (gen_eh_return (crtl->eh.ehr_handler));
> else
> #endif
> {
> #ifdef EH_RETURN_HANDLER_RTX
> ! emit_move_insn (EH_RETURN_HANDLER_RTX, crtl->eh.ehr_handler);
> #else
> error ("__builtin_eh_return not supported on this target");
> #endif
> *************** add_action_record (htab_t ar_hash, int f
> *** 3093,3099 ****
> if ((new = *slot) == NULL)
> {
> new = xmalloc (sizeof (*new));
> ! new->offset = VARRAY_ACTIVE_SIZE (cfun->eh->action_record_data) + 1;
> new->filter = filter;
> new->next = next;
> *slot = new;
> --- 3049,3055 ----
> if ((new = *slot) == NULL)
> {
> new = xmalloc (sizeof (*new));
> ! new->offset = VARRAY_ACTIVE_SIZE (crtl->eh.action_record_data) + 1;
> new->filter = filter;
> new->next = next;
> *slot = new;
> *************** add_action_record (htab_t ar_hash, int f
> *** 3103,3112 ****
> that there is no next record. So convert the absolute 1 based
> indices we've been carrying around into a displacement. */
>
> ! push_sleb128 (&cfun->eh->action_record_data, filter);
> if (next)
> ! next -= VARRAY_ACTIVE_SIZE (cfun->eh->action_record_data) + 1;
> ! push_sleb128 (&cfun->eh->action_record_data, next);
> }
>
> return new->offset;
> --- 3059,3068 ----
> that there is no next record. So convert the absolute 1 based
> indices we've been carrying around into a displacement. */
>
> ! push_sleb128 (&crtl->eh.action_record_data, filter);
> if (next)
> ! next -= VARRAY_ACTIVE_SIZE (crtl->eh.action_record_data) + 1;
> ! push_sleb128 (&crtl->eh.action_record_data, next);
> }
>
> return new->offset;
> *************** collect_one_action_chain (htab_t ar_hash
> *** 3226,3249 ****
> static int
> add_call_site (rtx landing_pad, int action)
> {
> ! struct call_site_record *data = cfun->eh->call_site_data;
> ! int used = cfun->eh->call_site_data_used;
> ! int size = cfun->eh->call_site_data_size;
> !
> ! if (used >= size)
> ! {
> ! size = (size ? size * 2 : 64);
> ! data = ggc_realloc (data, sizeof (*data) * size);
> ! cfun->eh->call_site_data = data;
> ! cfun->eh->call_site_data_size = size;
> ! }
>
> ! data[used].landing_pad = landing_pad;
> ! data[used].action = action;
>
> ! cfun->eh->call_site_data_used = used + 1;
> !
> ! return used + call_site_base;
> }
>
> /* Turn REG_EH_REGION notes back into NOTE_INSN_EH_REGION notes.
> --- 3182,3196 ----
> static int
> add_call_site (rtx landing_pad, int action)
> {
> ! call_site_record record;
> !
> ! record = ggc_alloc (sizeof (struct call_site_record));
> ! record->landing_pad = landing_pad;
> ! record->action = action;
>
> ! VEC_safe_push (call_site_record, gc, crtl->eh.call_site_record, record);
>
> ! return call_site_base + VEC_length (call_site_record, crtl->eh.call_site_record) - 1;
> }
>
> /* Turn REG_EH_REGION notes back into NOTE_INSN_EH_REGION notes.
> *************** convert_to_eh_region_ranges (void)
> *** 3264,3270 ****
> if (USING_SJLJ_EXCEPTIONS || cfun->eh->region_tree == NULL)
> return 0;
>
> ! VARRAY_UCHAR_INIT (cfun->eh->action_record_data, 64, "action_record_data");
>
> ar_hash = htab_create (31, action_record_hash, action_record_eq, free);
>
> --- 3211,3217 ----
> if (USING_SJLJ_EXCEPTIONS || cfun->eh->region_tree == NULL)
> return 0;
>
> ! VARRAY_UCHAR_INIT (crtl->eh.action_record_data, 64, "action_record_data");
>
> ar_hash = htab_create (31, action_record_hash, action_record_eq, free);
>
> *************** sjlj_size_of_call_site_table (void)
> *** 3466,3477 ****
> static void
> dw2_output_call_site_table (void)
> {
> ! int n = cfun->eh->call_site_data_used;
> int i;
>
> for (i = 0; i < n; ++i)
> {
> ! struct call_site_record *cs = &cfun->eh->call_site_data[i];
> char reg_start_lab[32];
> char reg_end_lab[32];
> char landing_pad_lab[32];
> --- 3413,3424 ----
> static void
> dw2_output_call_site_table (void)
> {
> ! int n = VEC_length (call_site_record, crtl->eh.call_site_record);
> int i;
>
> for (i = 0; i < n; ++i)
> {
> ! struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
> char reg_start_lab[32];
> char reg_end_lab[32];
> char landing_pad_lab[32];
> *************** dw2_output_call_site_table (void)
> *** 3520,3531 ****
> static void
> sjlj_output_call_site_table (void)
> {
> ! int n = cfun->eh->call_site_data_used;
> int i;
>
> for (i = 0; i < n; ++i)
> {
> ! struct call_site_record *cs = &cfun->eh->call_site_data[i];
>
> dw2_asm_output_data_uleb128 (INTVAL (cs->landing_pad),
> "region %d landing pad", i);
> --- 3467,3478 ----
> static void
> sjlj_output_call_site_table (void)
> {
> ! int n = VEC_length (call_site_record, crtl->eh.call_site_record);
> int i;
>
> for (i = 0; i < n; ++i)
> {
> ! struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
>
> dw2_asm_output_data_uleb128 (INTVAL (cs->landing_pad),
> "region %d landing pad", i);
> *************** output_function_exception_table (const c
> *** 3672,3679 ****
> /* If the target wants a label to begin the table, emit it here. */
> targetm.asm_out.except_table_label (asm_out_file);
>
> ! have_tt_data = (VEC_length (tree, cfun->eh->ttype_data) > 0
> ! || VARRAY_ACTIVE_SIZE (cfun->eh->ehspec_data) > 0);
>
> /* Indicate the format of the @TType entries. */
> if (! have_tt_data)
> --- 3619,3626 ----
> /* If the target wants a label to begin the table, emit it here. */
> targetm.asm_out.except_table_label (asm_out_file);
>
> ! have_tt_data = (VEC_length (tree, crtl->eh.ttype_data) > 0
> ! || VARRAY_ACTIVE_SIZE (crtl->eh.ehspec_data) > 0);
>
> /* Indicate the format of the @TType entries. */
> if (! have_tt_data)
> *************** output_function_exception_table (const c
> *** 3734,3741 ****
> before_disp = 1 + 1;
> after_disp = (1 + size_of_uleb128 (call_site_len)
> + call_site_len
> ! + VARRAY_ACTIVE_SIZE (cfun->eh->action_record_data)
> ! + (VEC_length (tree, cfun->eh->ttype_data)
> * tt_format_size));
>
> disp = after_disp;
> --- 3681,3688 ----
> before_disp = 1 + 1;
> after_disp = (1 + size_of_uleb128 (call_site_len)
> + call_site_len
> ! + VARRAY_ACTIVE_SIZE (crtl->eh.action_record_data)
> ! + (VEC_length (tree, crtl->eh.ttype_data)
> * tt_format_size));
>
> disp = after_disp;
> *************** output_function_exception_table (const c
> *** 3789,3806 ****
> #endif
>
> /* ??? Decode and interpret the data for flag_debug_asm. */
> ! n = VARRAY_ACTIVE_SIZE (cfun->eh->action_record_data);
> for (i = 0; i < n; ++i)
> ! dw2_asm_output_data (1, VARRAY_UCHAR (cfun->eh->action_record_data, i),
> (i ? NULL : "Action record table"));
>
> if (have_tt_data)
> assemble_align (tt_format_size * BITS_PER_UNIT);
>
> ! i = VEC_length (tree, cfun->eh->ttype_data);
> while (i-- > 0)
> {
> ! tree type = VEC_index (tree, cfun->eh->ttype_data, i);
> output_ttype (type, tt_format, tt_format_size);
> }
>
> --- 3736,3753 ----
> #endif
>
> /* ??? Decode and interpret the data for flag_debug_asm. */
> ! n = VARRAY_ACTIVE_SIZE (crtl->eh.action_record_data);
> for (i = 0; i < n; ++i)
> ! dw2_asm_output_data (1, VARRAY_UCHAR (crtl->eh.action_record_data, i),
> (i ? NULL : "Action record table"));
>
> if (have_tt_data)
> assemble_align (tt_format_size * BITS_PER_UNIT);
>
> ! i = VEC_length (tree, crtl->eh.ttype_data);
> while (i-- > 0)
> {
> ! tree type = VEC_index (tree, crtl->eh.ttype_data, i);
> output_ttype (type, tt_format, tt_format_size);
> }
>
> *************** output_function_exception_table (const c
> *** 3810,3825 ****
> #endif
>
> /* ??? Decode and interpret the data for flag_debug_asm. */
> ! n = VARRAY_ACTIVE_SIZE (cfun->eh->ehspec_data);
> for (i = 0; i < n; ++i)
> {
> if (targetm.arm_eabi_unwinder)
> {
> ! tree type = VARRAY_TREE (cfun->eh->ehspec_data, i);
> output_ttype (type, tt_format, tt_format_size);
> }
> else
> ! dw2_asm_output_data (1, VARRAY_UCHAR (cfun->eh->ehspec_data, i),
> (i ? NULL : "Exception specification table"));
> }
>
> --- 3757,3772 ----
> #endif
>
> /* ??? Decode and interpret the data for flag_debug_asm. */
> ! n = VARRAY_ACTIVE_SIZE (crtl->eh.ehspec_data);
> for (i = 0; i < n; ++i)
> {
> if (targetm.arm_eabi_unwinder)
> {
> ! tree type = VARRAY_TREE (crtl->eh.ehspec_data, i);
> output_ttype (type, tt_format, tt_format_size);
> }
> else
> ! dw2_asm_output_data (1, VARRAY_UCHAR (crtl->eh.ehspec_data, i),
> (i ? NULL : "Exception specification table"));
> }
>
> Index: except.h
> ===================================================================
> *** except.h (revision 134239)
> --- except.h (working copy)
> *************** extern int doing_eh (int);
> *** 35,41 ****
> /* Note that the current EH region (if any) may contain a throw, or a
> call to a function which itself may contain a throw. */
> extern void note_eh_region_may_contain_throw (struct eh_region *);
> - extern void note_current_region_may_contain_throw (void);
>
> /* Invokes CALLBACK for every exception handler label. Only used by old
> loop hackery; should not be used by new code. */
> --- 35,40 ----
> *************** extern rtx expand_builtin_dwarf_sp_colum
> *** 78,85 ****
> extern void expand_builtin_eh_return (tree, tree);
> extern void expand_eh_return (void);
> extern rtx expand_builtin_extend_pointer (tree);
> ! extern rtx get_exception_pointer (struct function *);
> ! extern rtx get_exception_filter (struct function *);
> typedef tree (*duplicate_eh_regions_map) (tree, void *);
> extern int duplicate_eh_regions (struct function *, duplicate_eh_regions_map,
> void *, int, int);
> --- 77,84 ----
> extern void expand_builtin_eh_return (tree, tree);
> extern void expand_eh_return (void);
> extern rtx expand_builtin_extend_pointer (tree);
> ! extern rtx get_exception_pointer (void);
> ! extern rtx get_exception_filter (void);
> typedef tree (*duplicate_eh_regions_map) (tree, void *);
> extern int duplicate_eh_regions (struct function *, duplicate_eh_regions_map,
> void *, int, int);
> Index: Makefile.in
> ===================================================================
> *** Makefile.in (revision 134239)
> --- Makefile.in (working copy)
> *************** GTFILES = $(CPP_ID_DATA_H) $(srcdir)/inp
> *** 3107,3114 ****
> $(host_xm_file_list) \
> $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) $(srcdir)/bitmap.h \
> $(srcdir)/alias.h $(srcdir)/coverage.c $(srcdir)/rtl.h \
> ! $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/function.h $(srcdir)/libfuncs.h $(SYMTAB_H) \
> ! $(srcdir)/real.h $(srcdir)/varray.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \
> $(srcdir)/fixed-value.h \
> $(srcdir)/ipa-reference.h $(srcdir)/output.h $(srcdir)/cfgloop.h \
> $(srcdir)/cselib.h $(srcdir)/basic-block.h $(srcdir)/cgraph.h \
> --- 3107,3114 ----
> $(host_xm_file_list) \
> $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) $(srcdir)/bitmap.h \
> $(srcdir)/alias.h $(srcdir)/coverage.c $(srcdir)/rtl.h \
> ! $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/varray.h $(srcdir)/libfuncs.h $(SYMTAB_H) \
> ! $(srcdir)/real.h $(srcdir)/function.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \
> $(srcdir)/fixed-value.h \
> $(srcdir)/ipa-reference.h $(srcdir)/output.h $(srcdir)/cfgloop.h \
> $(srcdir)/cselib.h $(srcdir)/basic-block.h $(srcdir)/cgraph.h \
>
>
--
Richard Guenther <rguenther@suse.de>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex