libgcc2.c (__get_eh_table_version, [...]): New functions to return exception descript...
authorAndrew MacLeod <amacleod@cygnus.com>
Tue, 23 Jun 1998 10:51:47 +0000 (10:51 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Tue, 23 Jun 1998 10:51:47 +0000 (10:51 +0000)
Tue Jun 23 13:38:18 EDT 1998  Andrew MacLeod  <amacleod@cygnus.com>
* libgcc2.c (__get_eh_table_version, __get_eh_table_language): New
functions to return exception descriptor information.
(find_exception_handler): Pass match_info field to runtime matcher,
not a descriptor table entry.
* exception.cc (__cplus_type_matcher): Get a match_info pointer
instead of an exception table entry as a parameter.

From-SVN: r20673

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/exception.cc
gcc/libgcc2.c

index 8fc049fc1bbb92092203695315c7049388d5bf27..56642f343ad15b10bcf6ca8bae53e8b05f7ff405 100644 (file)
@@ -1,9 +1,16 @@
+Tue Jun 23 13:38:18 EDT 1998  Andrew MacLeod  <amacleod@cygnus.com>
+
+       * libgcc2.c (__get_eh_table_version, __get_eh_table_language): New
+       functions to return exception descriptor information.
+       (find_exception_handler): Pass match_info field to runtime matcher,
+       not a descriptor table entry.
+
 Tue Jun 23 09:30:58 1998  Dave Love  <d.love@dl.ac.uk>
 
        * cpp.texi, gcc.texi: Add @dircategory, @direntry meant to
        accompany previous Makefile.in (install-info) change.
 
-Tue Jun 23 10:06:07 EDT 1998  Andrew MacLeod  (amacleod@cygnus.com)
+Tue Jun 23 10:06:07 EDT 1998  Andrew MacLeod  <amacleod@cygnus.com>
 
        * eh-common.h (struct __eh_info): Remove coerced value field.
        * libgcc2.c (find_exception_handler): Don't set coerced_value field.
index ddd56db73370bf7ec08a881c12378dd5a1093985..dfb496d830792d32e9c7432b23d7a59aa7ea107b 100644 (file)
@@ -1,4 +1,9 @@
-1998-06-23  Andrew MacLeod  (amacleod@cygnus.com)
+1998-06-23  Andrew MacLeod  <amacleod@cygnus.com>
+
+       * exception.cc (__cplus_type_matcher): Get a match_info pointer
+       instead of an exception table entry as a parameter.
+
+1998-06-23  Andrew MacLeod  <amacleod@cygnus.com>
 
        * parse.y (function_try_block): Don't call start_catch_handler.
        * except.c (call_eh_info): Remove coerced field from declaration.
index cad73046462b8793e4d4a8d239a35937c2c335b2..bb36a66962170ba8113ad59ff36809785462c916 100644 (file)
@@ -152,7 +152,7 @@ __eh_free (void *p)
 typedef void * (* rtimetype) (void);
 
 extern "C" void *
-__cplus_type_matcher (cp_eh_info *info, exception_table *matching_info, 
+__cplus_type_matcher (cp_eh_info *info, rtimetype match_info, 
                                  exception_descriptor *exception_table)
 {
   void *ret;
@@ -162,7 +162,7 @@ __cplus_type_matcher (cp_eh_info *info, exception_table *matching_info,
 
   /* we don't worry about version info yet, there is only one version! */
   
-  void *match_type = ((rtimetype) (matching_info->match_info)) ();
+  void *match_type = match_info ();
   ret = __throw_type_match_rtti (match_type, info->type, info->original_value);
   /* change value of exception */
   if (ret)
index 4e17faf491948370704d50ab5dbf9209600efe41..30fa61a03e8b445850bbe565e3da22c6e44463fa 100644 (file)
@@ -3358,6 +3358,23 @@ EH_TABLE_LOOKUP
 
 #ifdef DWARF2_UNWIND_INFO
 
+
+/* Return the table version of an exception descriptor */
+
+short 
+__get_eh_table_version (exception_descriptor *table) 
+{
+  return table->lang.version;
+}
+
+/* Return the originating table language of an exception descriptor */
+
+short 
+__get_eh_table_language (exception_descriptor *table)
+{
+  return table->lang.language;
+}
+
 /* This routine takes a PC and a pointer to the exception region TABLE for
    its translation unit, and returns the address of the exception handler
    associated with the closest exception table handler entry associated
@@ -3424,7 +3441,7 @@ find_exception_handler (void *pc, exception_descriptor *table, void *eh_info)
                   /* match info but no matcher is NOT a match */
                   if (matcher) 
                     {
-                      ret = (*matcher)(eh_info, &tab[pos], table);
+                      ret = (*matcher)(eh_info, tab[pos].match_info, table);
                       if (ret)
                         return tab[pos].exception_handler;
                     }