Chameleon

Chameleon Svn Source Tree

Root/branches/ErmaC/Trunk/i386/modules/uClibcxx/eh_alloc.cpp

1/*Copyright (C) 2006 Garrett A. Kajmowicz
2
3This file is part of the uClibc++ Library.
4
5This library is free software; you can redistribute it and/or
6modify it under the terms of the GNU Lesser General Public
7License as published by the Free Software Foundation, version 2.1
8of the License.
9
10This library is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13Lesser General Public License for more details.
14
15You should have received a copy of the GNU Lesser General Public
16License along with this library; if not, write to the Free Software
17Foundation, 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
27namespace __cxxabiv1{
28
29#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__
30extern "C" void * __cxa_allocate_exception(std::size_t thrown_size) throw(){
31void *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
34retval = malloc (thrown_size + sizeof(__cxa_exception));
35if(0 == retval){
36std::terminate();
37}
38memset (retval, 0, sizeof(__cxa_exception));
39return (void *)((unsigned char *)retval + sizeof(__cxa_exception));
40}
41
42extern "C" void __cxa_free_exception(void *vptr) throw(){
43free( (char *)(vptr) - sizeof(__cxa_exception) );
44}
45#endif
46}
47

Archive Download this file

Revision: 1622