except.c (setjmp_fn): New global variable.
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 9 Oct 2017 22:32:01 +0000 (22:32 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 9 Oct 2017 22:32:01 +0000 (22:32 +0000)
* 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.

From-SVN: r253569

gcc/ChangeLog
gcc/except.c

index 871166a0bd3ae037307eb12d04200143053bdb0c..5ba4c6c1ff555a8eaf7e81fba3d8ce7ffab0407f 100644 (file)
@@ -1,3 +1,10 @@
+2017-10-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * 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  <segher@kernel.crashing.org>
 
        * target.def (insn_cost): New hook.
index 4991e7bb01bd1f0b70bae6b3a1e71b60b922af19..041f89a55e5bbce5b4c12f63d4a9db0962ff5b0a 100644 (file)
@@ -147,7 +147,9 @@ along with GCC; see the file COPYING3.  If not see
 
 static GTY(()) int call_site_base;
 
-static GTY (()) hash_map<tree_hash, tree> *type_to_runtime_map;
+static GTY(()) hash_map<tree_hash, tree> *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,