/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: 2011-11-04 13:48:15 UTC
  • Revision ID: edam@waxworlds.org-20111104134815-kj7qdhqfbxaj1tng
finished writing up electronics notes

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
}