diff options
author | Andrew MacLeod <amacleod@cygnus.com> | 1998-06-23 10:51:47 +0000 |
---|---|---|
committer | Andrew Macleod <amacleod@gcc.gnu.org> | 1998-06-23 10:51:47 +0000 |
commit | 48b24bcdfac371ad5b71ec1bd0aa9d4f90614f9a (patch) | |
tree | af21d0438b598699c10f5dc4ab0887e3c57866b6 | |
parent | daf21dfd8018376476559ef65a4ffdf203839cc1 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/exception.cc | 4 | ||||
-rw-r--r-- | gcc/libgcc2.c | 19 |
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; } |