/elec/propeller-clock

To get this branch, use:
bzr branch http://bzr.ed.am/elec/propeller-clock

« back to all changes in this revision

Viewing changes to src/utility/eh_alloc.cpp

  • Committer: edam
  • Date: 2012-02-25 01:31:43 UTC
  • Revision ID: tim@ed.am-20120225013143-9fet2y2d3fjlrwez
added ulibc

Show diffs side-by-side

added added

removed removed

 
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
extern "C" void * __cxa_allocate_exception(std::size_t thrown_size) throw(){
 
30
        void *retval;
 
31
        //The sizeof crap is required by Itanium ABI because we need to provide space for
 
32
        //accounting information which is implementaion (gcc) specified
 
33
        retval = malloc (thrown_size + sizeof(__cxa_exception));
 
34
        if (0 == retval){
 
35
                std::terminate();
 
36
        }
 
37
        memset (retval, 0, sizeof(__cxa_exception));
 
38
        return (void *)((unsigned char *)retval + sizeof(__cxa_exception));
 
39
}
 
40
 
 
41
extern "C" void __cxa_free_exception(void *vptr) throw(){
 
42
        free( (char *)(vptr) - sizeof(__cxa_exception) );
 
43
}
 
44
 
 
45
 
 
46
extern "C" __cxa_dependent_exception * __cxa_allocate_dependent_exception() throw(){
 
47
        __cxa_dependent_exception *retval;
 
48
        //The sizeof crap is required by Itanium ABI because we need to provide space for
 
49
        //accounting information which is implementaion (gcc) specified
 
50
        retval = static_cast<__cxa_dependent_exception*>(malloc (sizeof(__cxa_dependent_exception)));
 
51
        if (0 == retval){
 
52
                std::terminate();
 
53
        }
 
54
        memset (retval, 0, sizeof(__cxa_dependent_exception));
 
55
        return retval;
 
56
}
 
57
 
 
58
extern "C" void __cxa_free_dependent_exception(__cxa_dependent_exception *vptr) throw(){
 
59
        free( (char *)(vptr) );
 
60
}
 
61
}