| 
sl@0
 | 
     1  | 
Exceptions library release 1.01.
  | 
| 
sl@0
 | 
     2  | 
  | 
| 
sl@0
 | 
     3  | 
This source code is intended to be compliant with release 1.0 of the EHABI. 
  | 
| 
sl@0
 | 
     4  | 
  | 
| 
sl@0
 | 
     5  | 
The following defects against the previous (1.0) release have been fixed:
  | 
| 
sl@0
 | 
     6  | 
  | 
| 
sl@0
 | 
     7  | 
1) The personality routines were checking handler table entry descriptor
  | 
| 
sl@0
 | 
     8  | 
ranges using virtual r14 not virtual r15. Consequently if the entry contained
  | 
| 
sl@0
 | 
     9  | 
two or more descriptors with matching ranges, and the first was a cleanup,
  | 
| 
sl@0
 | 
    10  | 
subsequent descriptors would incorrectly fail the range check because the
  | 
| 
sl@0
 | 
    11  | 
cleanup code legitimately corrupted r14 (and hence virtual r14; virtual r15
  | 
| 
sl@0
 | 
    12  | 
is preserved).
  | 
| 
sl@0
 | 
    13  | 
  | 
| 
sl@0
 | 
    14  | 
2) The runtime library would call abort() instead of terminate() under this
  | 
| 
sl@0
 | 
    15  | 
sequence of events:
  | 
| 
sl@0
 | 
    16  | 
i)   The program installs an unexpected exception handler (set_unexpected(...)).
  | 
| 
sl@0
 | 
    17  | 
ii)  A throw of type T violates a function exception specification, causing
  | 
| 
sl@0
 | 
    18  | 
     unexpected() to be called and the user's handler to be entered.
  | 
| 
sl@0
 | 
    19  | 
iii) The handler throws another exception of type T.
  | 
| 
sl@0
 | 
    20  | 
  | 
| 
sl@0
 | 
    21  | 
3) Type matching when throwing a NULL pointer to pointer to T (any type T)
  | 
| 
sl@0
 | 
    22  | 
could dereference down the "pointer" chain beginning at location 0 (=NULL),
  | 
| 
sl@0
 | 
    23  | 
hence possibly accessing any location in memory.  |