libgcc2.c (__throw): New routine.
authorMike Stump <mrs@gcc.gnu.org>
Fri, 16 Aug 1996 00:52:06 +0000 (00:52 +0000)
committerMike Stump <mrs@gcc.gnu.org>
Fri, 16 Aug 1996 00:52:06 +0000 (00:52 +0000)
        * libgcc2.c (__throw): New routine.
        (__eh_pc): New data object for exception handling.

        * except.c (eh_saved_pc): New object so we can call
        assemble_external.
        (expand_internal_throw_indirect): Call assemble_external for
        __eh_pc.
        (end_eh_unwinder): Ditto.
        (init_eh): Initialize eh_saved_pc.
fixes eh6.C on rs6000 and alpha

From-SVN: r12646

gcc/except.c
gcc/libgcc2.c

index b7753e7639d039e7a3fc2fa0b0e3eddfa8fc7c91..48b635b5ad225ecc915df0a2de3bc979c512e404 100644 (file)
@@ -165,9 +165,10 @@ struct label_node *caught_return_label_stack = NULL;
 
 struct label_node *false_label_stack = NULL;
 
-/* The rtx for the saved PC value.  */
+/* The rtx and the tree for the saved PC value.  */
 
 rtx eh_saved_pc_rtx;
+tree eh_saved_pc;
 
 rtx expand_builtin_return_addr PROTO((enum built_in_function, int, rtx));
 \f
@@ -450,6 +451,7 @@ void
 expand_internal_throw_indirect (context)
      rtx context;
 {
+  assemble_external (eh_saved_pc);
   emit_move_insn (eh_saved_pc_rtx, context);
   emit_throw ();
 }
@@ -759,6 +761,8 @@ end_eh_unwinder ()
     return;
 #endif
 
+  assemble_external (eh_saved_pc);
+
   expr = make_node (RTL_EXPR);
   TREE_TYPE (expr) = void_type_node;
   RTL_EXPR_RTL (expr) = const0_rtx;
@@ -955,8 +959,13 @@ check_exception_handler_labels ()
 void
 init_eh ()
 {
-  eh_saved_pc_rtx = gen_rtx (MEM, ptr_mode,
-                            gen_rtx (SYMBOL_REF, Pmode, "__eh_pc"));
+  tree type = build_pointer_type (make_node (VOID_TYPE));
+
+  eh_saved_pc = build_decl (VAR_DECL, get_identifier ("__eh_pc"), type);
+  DECL_EXTERNAL (eh_saved_pc) = 1;
+  TREE_PUBLIC (eh_saved_pc) = 1;
+  make_decl_rtl (eh_saved_pc, NULL_PTR, 1);
+  eh_saved_pc_rtx = DECL_RTL (eh_saved_pc);
 }
 
 /* Initialize various EH things.  */
index 41801fa73b0619273ca0f0ee8a2685047b35d70f..1b1ecf48916eaf1229e3df8f6b247579e28dcc07 100644 (file)
@@ -3149,6 +3149,21 @@ __throw_type_match (void *catch_type, void *throw_type, void *obj)
  return 0;
 }
 
+/* Throw stub routine.
+
+   This is work in progress, but not completed yet.  */
+
+void
+__throw ()
+{
+  abort ();
+}
+
+/* This value identifies the place from which an exception is being
+   thrown.  */
+
+void *__eh_pc;
+
 void
 __empty ()
 {