aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@cygnus.com>1998-06-23 10:51:47 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>1998-06-23 10:51:47 +0000
commit48b24bcdfac371ad5b71ec1bd0aa9d4f90614f9a (patch)
treeaf21d0438b598699c10f5dc4ab0887e3c57866b6
parentdaf21dfd8018376476559ef65a4ffdf203839cc1 (diff)
downloadgcc-48b24bcdfac371ad5b71ec1bd0aa9d4f90614f9a.zip
gcc-48b24bcdfac371ad5b71ec1bd0aa9d4f90614f9a.tar.gz
gcc-48b24bcdfac371ad5b71ec1bd0aa9d4f90614f9a.tar.bz2
libgcc2.c (__get_eh_table_version, [...]): New functions to return exception descriptor information.
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
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/exception.cc4
-rw-r--r--gcc/libgcc2.c19
4 files changed, 34 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8fc049f..56642f3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ddd56db7..dfb496d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/exception.cc b/gcc/cp/exception.cc
index cad7304..bb36a66 100644
--- a/gcc/cp/exception.cc
+++ b/gcc/cp/exception.cc
@@ -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)
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 4e17faf..30fa61a 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -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;
}