Commit Graph

63 Commits

Author SHA1 Message Date
Jason Merrill
01eb7f9a1c except.c (call_get_eh_context): Don't take a parm.
* except.c (call_get_eh_context): Don't take a parm.
	Put the call at the top of the function.
	(emit_eh_context): Adjust.
	(get_eh_context): Replace with former use_eh_context.
	(get_eh_context_once, get_saved_pc_ref): Remove.
	(start_eh_unwinder, end_eh_unwinder, emit_unwinder): Remove.
	* except.h: Adjust.
	* integrate.c (expand_inline_function): Adjust.
	* toplev.c (rest_of_compilation): Don't call emit_unwinder.

tidy tidy tidy

From-SVN: r17065
1997-12-12 02:35:04 -05:00
Teemu Torma
154bba13a4 [multiple changes]
Thu Dec 11 20:42:18 1997  Teemu Torma  <tot@trema.com>

	Thread-safe EH support for pthreads, DCE threads and Solaris threads.

	* integrate.c (expand_inline_function): If the inline fn uses eh
	context, make sure that the current fn has one.
	* toplev.c (rest_of_compilation): Call emit_eh_context.
	* except.c (use_eh_context): New fn.
	(get_eh_context_once): New fn.
	(call_get_eh_context): New fn.
	(emit_eh_context): New fn.
	(get_eh_context): Call either get_eh_context_once or
	call_get_eh_context, depending on what we have.
	(get_dynamic_handler_chain): Call get_eh_context_once.
	* except.h: Prototypes for fns above.
	* optabs.c (get_eh_context_libfunc): Removed.
	(init_optabs): Don't initialize it.
	* expr.h (get_eh_context_libfunc): Removed.
	* rtl.h, rtl.c: New reg_note REG_EH_CONTEXT.
	* config/pa/pa.h (CPP_SPEC): Support for -threads.
	* config/pa/pa-hpux10.h (LIB_SPEC): Ditto.
	* config/pa/t-pa (MULTILIB_OPTIONS, MULTILIB_DIRNAMES):
	New multilib for -threads.
	* config/sparc/t-sol2: Added multilibs for -threads and
	made -pthreads alias to it.
	* config/sparc/sol2.h (CPP_SPEC, LIB_SPEC):
	Added -threads and -pthreads options.
	* libgcc-thr.h: New file.
	* libgcc2.c: (__get_cpp_eh_context): Removed.
	(struct cpp_eh_context): Removed.
	(struct eh_context): Replaced cpp_eh_context with generic language
	specific pointer.
	(__get_eh_info): New function.
	(__throw): Check eh_context::info.
	(__sjthrow): Ditto.
	* libgcc2.c: Include libgcc-thr.h.
	(new_eh_context, __get_eh_context,
	eh_pthread_initialize, eh_context_initialize, eh_context_static,
	eh_context_specific, eh_context_free): New functions.
	(get_eh_context, eh_context_key): New variables.
	(__sjthrow, __sjpopnthrow, __eh_pcnthrow, __throw): Use
	get_eh_context to get the context.
	(longjmp): Move the declaration inside
	#ifdef DONT_USE_BUILTIN_SETJMP.
	* frame.c: Include libgcc-thr.h.
	(object_mutex): Mutex to protect the object list.
	(find_fde, __register_frame, __register_frame_table,
	__deregister_frame): Hold the lock while accessing objects.
	* except.h (get_eh_context): Declare.
	* except.c (current_function_ehc): Define.
	(current_function_dhc, current_function_dcc): Removed.
	(get_eh_context): New function.
	(get_dynamic_handler_chain): Use get_eh_context.
	(get_saved_pc_ref): Ditto.
	(get_dynamic_cleanup_chain): Removed references to
	current_function_dcc.
	(save_eh_status, restore_eh_status): Save and restore
	current_function_ehc instead.
	* optabs.c (get_eh_context_libfunc): New variable.
	(init_optabs): Initialize it.
	* expr.h: Declare get_eh_context_libfunc.
	* function.h (struct function): Replaced dhc and dcc with ehc.
	* except.c (get_saved_pc_ref): New functions.
	(eh_saved_pc_rtx, eh_saved_pc): Deleted.
	(expand_internal_throw_indirect): Use get_saved_pc_ref() instead
	of eh_saved_pc.
	(end_eh_unwinder): Likewise.
	(init_eh): Remove initialization of eh_saved_pc.
	* optabs.c (get_saved_pc_libfunc): New variable.
	(init_optabs): Initialize it.
	* expr.h: Declare get_saved_pc_libfunc.
	* except.h (eh_saved_pc_rtx): Deleted.
	(get_saved_pc_ref): Declared.

	From Scott Snyder <snyder@d0sgif.fnal.gov>:
	* libgcc2.c (__get_saved_pc): New.
	(__eh_type, __eh_pc): Deleted.
	(__eh_pcnthrow): Use __get_saved_pc() instead of __eh_pc.
	(__get_dynamic_handler_chain): Move __dynamic_handler_chain inside
	this fcn.

cp/:
Thu Dec 11 20:43:33 1997  Teemu Torma  <tot@trema.com>

	* decl.c (ptr_ptr_type_node): Define.
	(init_decl_processing): Initialize it.
	* cp-tree.h: Declare it.
	* exception.cc (__cp_exception_info): Use __get_eh_info.
	(__cp_push_exception): Ditto.
	(__cp_pop_exception): Ditto.

	From Scott Snyder <snyder@d0sgif.fnal.gov>:
        * except.c (expand_builtin_throw): Use get_saved_pc_ref instead of
	saved_pc.
	(init_exception_processing): Removed saved_pc initialization.

From-SVN: r17052
1997-12-11 23:53:20 -05:00
Jeff Law
956d69504d Merge from gcc-2.8
From-SVN: r16987
1997-12-06 17:31:01 -07:00
Jason Merrill
e701eb4de0 ./: * libgcc2.c (__throw): Use __builtin_return_addr instead of __eh_pc.
* except.c: Lose outer_context_label_stack.
 	(expand_eh_region_end): Rethrow from outer_context here.
	(expand_fixup_region_end): Let expand_eh_region_end do the rethrow.
	(expand_internal_throw): Take no args.
	(expand_internal_throw_indirect): Lose.
	(expand_leftover_cleanups, expand_start_all_catch): Use expand_rethrow.
	(expand_start_all_catch): Start a rethrow region.
	(expand_end_all_catch): End it.
	(expand_rethrow): New fn.
	* except.h: Reflect above changes.

cp/:	* except.c (expand_end_catch_block): Lose rethrow region.
	(expand_start_catch_block): Likewise.
	(expand_end_catch_block): Don't expand_leftover_cleanups.

From-SVN: r16937
1997-12-04 04:41:38 -05:00
Jason Merrill
1418bb67a3 except.h: Add outer_context_label_stack.
* except.h: Add outer_context_label_stack.
	* except.c: Likewise.
	(expand_start_all_catch): Push the outer_context for the try block
 	onto outer_context_label_stack.
	(expand_end_all_catch): Use it and pop it.

From-SVN: r16645
1997-11-21 15:20:41 -05:00
Jeff Law
e9a25f70a0 Update mainline egcs to gcc2 snapshot 971021.
From-SVN: r16278
1997-11-02 14:19:36 -07:00
Jason Merrill
2f3ca9e7f4 c-decl.c (init_decl_processing): Add __builtin_dwarf_reg_size.
* c-decl.c (init_decl_processing): Add __builtin_dwarf_reg_size.
	* tree.h (built_in_function): Likewise.
	* expr.c (expand_builtin): Likewise.
	* except.h: Likewise.
	* dwarf2out.c (expand_builtin_dwarf_reg_size): New fn.
	* libgcc2.c (copy_reg): New fn.
	(__throw): Use it.

From-SVN: r15750
1997-09-27 14:16:15 -04:00
Jason Merrill
0021b564f4 dwarf2 EH support
From-SVN: r15255
1997-09-10 14:00:28 -04:00
Mike Stump
478b0752a1 except.c (push_eh_entry): Eliminate start of exception region label, as it isn't used.
* except.c (push_eh_entry): Eliminate start of exception region
	label, as it isn't used.  Rename end_label to outer_context.
	(expand_eh_region_start_for_decl): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_start_all_catch): Likewise.
	* except.h (eh_entry): Likewise.
	* except.c (expand_eh_region_end): Likewise.  Jump around the nop
	that we insert, so that we can optimize it away, if it is unused,
	also so that flow analysis can tell if we fall through to the end
	of a function or not so that it can know if a function that returns
	a value, in fact does or not.
Fixes g++.jason/return2.C when using -fno-sjlj-exceptions

From-SVN: r14135
1997-05-29 18:42:07 +00:00
Mike Stump
4c58124363 except.c (expand_eh_region_start_tree): Add DECL argument so we can better track why the region was made for error...
* except.c (expand_eh_region_start_tree): Add DECL argument so we
 	can better track why the region was made for error reporting.
	* except.h (expand_eh_region_start_tree): Likewise.
	* tree.h (expand_dhc_cleanup): Likewise.
	(expand_dcc_cleanup): Likewise.
	* except.c (expand_eh_region_start_for_decl): New routine.
	* except.h (expand_eh_region_start_for_decl): Likewise.
	* stmt.c (expand_decl_cleanup): Add DECL to call of
	expand_eh_region_start_tree.
	(expand_dcc_cleanup): Likewise.
	(expand_dhc_cleanup): Likewise.

	(expand_start_case): Switches introduce conditional contexts.
	(expand_start_case_dummy): Likewise.
	(expand_start_case_dummy): Likewise.
	(expand_end_case): Likewise.

From-SVN: r13990
1997-04-29 20:03:15 +00:00
Mike Stump
e976b8b277 Add setjmp/longjmp exception handling.
From-SVN: r13968
1997-04-23 20:04:25 +00:00
Richard Kenner
911fdd58bb mrs/manson:
Update documentation.

From-SVN: r12715
1996-09-14 20:44:58 -04:00
Mike Stump
4956d07c7e Initial revision
From-SVN: r12551
1996-07-23 20:20:04 +00:00