1 | /*␉Copyright (C) 2006 Garrett A. Kajmowicz␊ |
2 | ␊ |
3 | ␉This file is part of the uClibc++ Library.␊ |
4 | ␊ |
5 | ␉This library is free software; you can redistribute it and/or␊ |
6 | ␉modify it under the terms of the GNU Lesser General Public␊ |
7 | ␉License as published by the Free Software Foundation, version 2.1␊ |
8 | ␉of the License.␊ |
9 | ␊ |
10 | ␉This library is distributed in the hope that it will be useful,␊ |
11 | ␉but WITHOUT ANY WARRANTY; without even the implied warranty of␊ |
12 | ␉MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU␊ |
13 | ␉Lesser General Public License for more details.␊ |
14 | ␊ |
15 | ␉You should have received a copy of the GNU Lesser General Public␊ |
16 | ␉License along with this library; if not, write to the Free Software␊ |
17 | ␉Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA␊ |
18 | */␊ |
19 | ␊ |
20 | #include <cstdlib>␊ |
21 | #include <cstring>␊ |
22 | #include <func_exception>␊ |
23 | ␊ |
24 | //This is a system-specific header which does all of the error-handling management␊ |
25 | #include <unwind-cxx.h>␊ |
26 | ␊ |
27 | namespace __cxxabiv1{␊ |
28 | ␉␊ |
29 | #ifdef __UCLIBCXX_EXCEPTION_SUPPORT__␊ |
30 | extern "C" void * __cxa_allocate_exception(std::size_t thrown_size) throw(){␊ |
31 | ␉void *retval;␊ |
32 | ␉//The sizeof crap is required by Itanium ABI because we need to provide space for ␊ |
33 | ␉//accounting information which is implementaion (gcc) specified␊ |
34 | ␉retval = malloc (thrown_size + sizeof(__cxa_exception));␊ |
35 | ␉if(0 == retval){␊ |
36 | ␉␉std::terminate();␊ |
37 | ␉}␊ |
38 | ␉memset (retval, 0, sizeof(__cxa_exception));␊ |
39 | ␉return (void *)((unsigned char *)retval + sizeof(__cxa_exception));␊ |
40 | }␊ |
41 | ␊ |
42 | extern "C" void __cxa_free_exception(void *vptr) throw(){␊ |
43 | ␉free( (char *)(vptr) - sizeof(__cxa_exception) );␊ |
44 | }␊ |
45 | #endif␊ |
46 | }␊ |
47 | |