1 // -*- C++ -*- 2 // Copyright (C) 2000, 2001, 2009, 2011 Free Software Foundation 3 // 4 // This file is part of GCC. 5 // 6 // GCC is free software; you can redistribute it and/or modify 7 // it under the terms of the GNU General Public License as published by 8 // the Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 // 11 // GCC is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 // 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 #include <bits/c++config.h> 26 #include <cxxabi.h> 27 #include "unwind-cxx.h" 28 29 #if _GLIBCXX_HOSTED 30 #ifdef _GLIBCXX_HAVE_UNISTD_H 31 # include <unistd.h> 32 # define writestr(str) write(2, str, sizeof(str) - 1) 33 # ifdef __GNU_LIBRARY__ 34 /* Avoid forcing the library's meaning of `write' on the user program 35 by using the "internal" name (for use within the library). */ 36 /*# define write(fd, buf, n) __write((fd), (buf), (n))*/ 37 # endif 38 #else 39 # include <cstdio> 40 # define writestr(str) std::fputs(str, stderr) 41 #endif 42 #else 43 # define writestr(str) /* Empty */ 44 #endif 45 46 extern "C" void 47 __cxxabiv1::__cxa_pure_virtual (void) 48 { 49 writestr ("pure virtual method called\n"); 50 std::terminate (); 51 } 52 53 extern "C" void 54 __cxxabiv1::__cxa_deleted_virtual (void) 55 { 56 writestr ("deleted virtual method called\n"); 57 std::terminate (); 58 } 59