From 624f465964d093d4fa02af53de89f74a9a7d55b0 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Mon, 9 Oct 2017 22:32:01 +0000 Subject: [PATCH] * except.c (setjmp_fn): New global variable. (init_eh): Initialize it if DONT_USE_BUILTIN_SETJMP is defined. (sjlj_emit_function_enter): Call it instead of BUILTIN_SETJMP if DONT_USE_BUILTIN_SETJMP is defined. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@253569 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/except.c | 17 ++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 871166a0bd3..5ba4c6c1ff5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-10-09 Eric Botcazou + + * except.c (setjmp_fn): New global variable. + (init_eh): Initialize it if DONT_USE_BUILTIN_SETJMP is defined. + (sjlj_emit_function_enter): Call it instead of BUILTIN_SETJMP + if DONT_USE_BUILTIN_SETJMP is defined. + 2017-10-09 Segher Boessenkool * target.def (insn_cost): New hook. diff --git a/gcc/except.c b/gcc/except.c index 4991e7bb01b..041f89a55e5 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -147,7 +147,9 @@ along with GCC; see the file COPYING3. If not see static GTY(()) int call_site_base; -static GTY (()) hash_map *type_to_runtime_map; +static GTY(()) hash_map *type_to_runtime_map; + +static GTY(()) tree setjmp_fn; /* Describe the SjLj_Function_Context structure. */ static GTY(()) tree sjlj_fc_type_node; @@ -331,6 +333,16 @@ init_eh (void) sjlj_fc_jbuf_ofs = (tree_to_uhwi (DECL_FIELD_OFFSET (f_jbuf)) + tree_to_uhwi (DECL_FIELD_BIT_OFFSET (f_jbuf)) / BITS_PER_UNIT); + +#ifdef DONT_USE_BUILTIN_SETJMP + tmp = build_function_type_list (integer_type_node, TREE_TYPE (f_jbuf), + NULL); + setjmp_fn = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, + get_identifier ("setjmp"), tmp); + TREE_PUBLIC (setjmp_fn) = 1; + DECL_EXTERNAL (setjmp_fn) = 1; + DECL_ASSEMBLER_NAME (setjmp_fn); +#endif } } @@ -1176,8 +1188,7 @@ sjlj_emit_function_enter (rtx_code_label *dispatch_label) addr = convert_memory_address (ptr_mode, addr); tree addr_tree = make_tree (ptr_type_node, addr); - tree fn = builtin_decl_implicit (BUILT_IN_SETJMP); - tree call_expr = build_call_expr (fn, 1, addr_tree); + tree call_expr = build_call_expr (setjmp_fn, 1, addr_tree); rtx x = expand_call (call_expr, NULL_RTX, false); emit_cmp_and_jump_insns (x, const0_rtx, NE, 0, -- 2.11.4.GIT