1169691Skan// Compatibility symbols for previous versions -*- C++ -*- 2169691Skan 3169691Skan// Copyright (C) 2005, 2006 4169691Skan// Free Software Foundation, Inc. 5169691Skan// 6169691Skan// This file is part of the GNU ISO C++ Library. This library is free 7169691Skan// software; you can redistribute it and/or modify it under the 8169691Skan// terms of the GNU General Public License as published by the 9169691Skan// Free Software Foundation; either version 2, or (at your option) 10169691Skan// any later version. 11169691Skan 12169691Skan// This library is distributed in the hope that it will be useful, 13169691Skan// but WITHOUT ANY WARRANTY; without even the implied warranty of 14169691Skan// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15169691Skan// GNU General Public License for more details. 16169691Skan 17169691Skan// You should have received a copy of the GNU General Public License along 18169691Skan// with this library; see the file COPYING. If not, write to the Free 19169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 20169691Skan// USA. 21169691Skan 22169691Skan// As a special exception, you may use this file as part of a free software 23169691Skan// library without restriction. Specifically, if other files instantiate 24169691Skan// templates or use macros or inline functions from this file, or you compile 25169691Skan// this file and link it with other files to produce an executable, this 26169691Skan// file does not by itself cause the resulting executable to be covered by 27169691Skan// the GNU General Public License. This exception does not however 28169691Skan// invalidate any other reasons why the executable file might be covered by 29169691Skan// the GNU General Public License. 30169691Skan 31169691Skan#include <bits/c++config.h> 32169691Skan 33169691Skan#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) 34169691Skan#define istreambuf_iterator istreambuf_iteratorXX 35169691Skan#define basic_fstream basic_fstreamXX 36169691Skan#define basic_ifstream basic_ifstreamXX 37169691Skan#define basic_ofstream basic_ofstreamXX 38169691Skan#define _M_copy(a, b, c) _M_copyXX(a, b, c) 39169691Skan#define _M_move(a, b, c) _M_moveXX(a, b, c) 40169691Skan#define _M_assign(a, b, c) _M_assignXX(a, b, c) 41169691Skan#define _M_disjunct(a) _M_disjunctXX(a) 42169691Skan#define _M_check_length(a, b, c) _M_check_lengthXX(a, b, c) 43169691Skan#define _M_set_length_and_sharable(a) _M_set_length_and_sharableXX(a) 44169691Skan#define ignore ignoreXX 45169691Skan#define eq eqXX 46169691Skan#define _List_node_base _List_node_baseXX 47169691Skan#endif 48169691Skan 49169691Skan#include <string> 50169691Skan#include <istream> 51169691Skan#include <fstream> 52169691Skan#include <sstream> 53169691Skan#include <cmath> 54169691Skan 55169691Skan_GLIBCXX_BEGIN_NAMESPACE(std) 56169691Skan 57169691Skan // std::istream ignore explicit specializations. 58169691Skan template<> 59169691Skan basic_istream<char>& 60169691Skan basic_istream<char>:: 61169691Skan ignore(streamsize __n) 62169691Skan { 63169691Skan if (__n == 1) 64169691Skan return ignore(); 65169691Skan 66169691Skan _M_gcount = 0; 67169691Skan sentry __cerb(*this, true); 68169691Skan if (__cerb && __n > 0) 69169691Skan { 70169691Skan ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); 71169691Skan try 72169691Skan { 73169691Skan const int_type __eof = traits_type::eof(); 74169691Skan __streambuf_type* __sb = this->rdbuf(); 75169691Skan int_type __c = __sb->sgetc(); 76169691Skan 77169691Skan // See comment in istream.tcc. 78169691Skan bool __large_ignore = false; 79169691Skan while (true) 80169691Skan { 81169691Skan while (_M_gcount < __n 82169691Skan && !traits_type::eq_int_type(__c, __eof)) 83169691Skan { 84169691Skan streamsize __size = std::min(streamsize(__sb->egptr() 85169691Skan - __sb->gptr()), 86169691Skan streamsize(__n - _M_gcount)); 87169691Skan if (__size > 1) 88169691Skan { 89169691Skan __sb->gbump(__size); 90169691Skan _M_gcount += __size; 91169691Skan __c = __sb->sgetc(); 92169691Skan } 93169691Skan else 94169691Skan { 95169691Skan ++_M_gcount; 96169691Skan __c = __sb->snextc(); 97169691Skan } 98169691Skan } 99169691Skan if (__n == numeric_limits<streamsize>::max() 100169691Skan && !traits_type::eq_int_type(__c, __eof)) 101169691Skan { 102169691Skan _M_gcount = numeric_limits<streamsize>::min(); 103169691Skan __large_ignore = true; 104169691Skan } 105169691Skan else 106169691Skan break; 107169691Skan } 108169691Skan 109169691Skan if (__large_ignore) 110169691Skan _M_gcount = numeric_limits<streamsize>::max(); 111169691Skan 112169691Skan if (traits_type::eq_int_type(__c, __eof)) 113169691Skan __err |= ios_base::eofbit; 114169691Skan } 115169691Skan catch(...) 116169691Skan { this->_M_setstate(ios_base::badbit); } 117169691Skan if (__err) 118169691Skan this->setstate(__err); 119169691Skan } 120169691Skan return *this; 121169691Skan } 122169691Skan 123169691Skan#ifdef _GLIBCXX_USE_WCHAR_T 124169691Skan template<> 125169691Skan basic_istream<wchar_t>& 126169691Skan basic_istream<wchar_t>:: 127169691Skan ignore(streamsize __n) 128169691Skan { 129169691Skan if (__n == 1) 130169691Skan return ignore(); 131169691Skan 132169691Skan _M_gcount = 0; 133169691Skan sentry __cerb(*this, true); 134169691Skan if (__cerb && __n > 0) 135169691Skan { 136169691Skan ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); 137169691Skan try 138169691Skan { 139169691Skan const int_type __eof = traits_type::eof(); 140169691Skan __streambuf_type* __sb = this->rdbuf(); 141169691Skan int_type __c = __sb->sgetc(); 142169691Skan 143169691Skan bool __large_ignore = false; 144169691Skan while (true) 145169691Skan { 146169691Skan while (_M_gcount < __n 147169691Skan && !traits_type::eq_int_type(__c, __eof)) 148169691Skan { 149169691Skan streamsize __size = std::min(streamsize(__sb->egptr() 150169691Skan - __sb->gptr()), 151169691Skan streamsize(__n - _M_gcount)); 152169691Skan if (__size > 1) 153169691Skan { 154169691Skan __sb->gbump(__size); 155169691Skan _M_gcount += __size; 156169691Skan __c = __sb->sgetc(); 157169691Skan } 158169691Skan else 159169691Skan { 160169691Skan ++_M_gcount; 161169691Skan __c = __sb->snextc(); 162169691Skan } 163169691Skan } 164169691Skan if (__n == numeric_limits<streamsize>::max() 165169691Skan && !traits_type::eq_int_type(__c, __eof)) 166169691Skan { 167169691Skan _M_gcount = numeric_limits<streamsize>::min(); 168169691Skan __large_ignore = true; 169169691Skan } 170169691Skan else 171169691Skan break; 172169691Skan } 173169691Skan 174169691Skan if (__large_ignore) 175169691Skan _M_gcount = numeric_limits<streamsize>::max(); 176169691Skan 177169691Skan if (traits_type::eq_int_type(__c, __eof)) 178169691Skan __err |= ios_base::eofbit; 179169691Skan } 180169691Skan catch(...) 181169691Skan { this->_M_setstate(ios_base::badbit); } 182169691Skan if (__err) 183169691Skan this->setstate(__err); 184169691Skan } 185169691Skan return *this; 186169691Skan } 187169691Skan#endif 188169691Skan 189169691Skan_GLIBCXX_END_NAMESPACE 190169691Skan 191169691Skan 192169691Skan// NB: These symbols renames should go into the shared library only, 193169691Skan// and only those shared libraries that support versioning. 194169691Skan#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) 195169691Skan 196169691Skan/* gcc-3.4.4 197169691Skan_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv 198169691Skan_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv 199169691Skan */ 200169691Skan 201169691Skan_GLIBCXX_BEGIN_NAMESPACE(std) 202169691Skan 203169691Skan template 204169691Skan istreambuf_iterator<char>& 205169691Skan istreambuf_iterator<char>::operator++(); 206169691Skan 207169691Skan#ifdef _GLIBCXX_USE_WCHAR_T 208169691Skan template 209169691Skan istreambuf_iterator<wchar_t>& 210169691Skan istreambuf_iterator<wchar_t>::operator++(); 211169691Skan#endif 212169691Skan 213169691Skan_GLIBCXX_END_NAMESPACE 214169691Skan 215169691Skan 216169691Skan/* gcc-4.0.0 217169691Skan_ZNSs4_Rep26_M_set_length_and_sharableEj 218169691Skan_ZNSs7_M_copyEPcPKcj 219169691Skan_ZNSs7_M_moveEPcPKcj 220169691Skan_ZNSs9_M_assignEPcjc 221169691Skan_ZNKSs11_M_disjunctEPKc 222169691Skan_ZNKSs15_M_check_lengthEjjPKc 223169691Skan_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj 224169691Skan_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj 225169691Skan_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj 226169691Skan_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw 227169691Skan_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw 228169691Skan_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc 229169691Skan 230169691Skan_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv 231169691Skan_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv 232169691Skan_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv 233169691Skan_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv 234169691Skan_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv 235169691Skan_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv 236169691Skan 237169691Skan_ZNSi6ignoreEi 238169691Skan_ZNSi6ignoreEv 239169691Skan_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi 240169691Skan_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv 241169691Skan 242169691Skan_ZNSt11char_traitsIcE2eqERKcS2_ 243169691Skan_ZNSt11char_traitsIwE2eqERKwS2_ 244169691Skan */ 245169691Skan_GLIBCXX_BEGIN_NAMESPACE(std) 246169691Skan 247169691Skan // std::char_traits is explicitly specialized 248169691Skan bool (* __p1)(const char&, const char&) = &char_traits<char>::eq; 249169691Skan 250169691Skan // std::string 251169691Skan template 252169691Skan void 253169691Skan basic_string<char>::_M_copy(char*, const char*, size_t); 254169691Skan 255169691Skan template 256169691Skan void 257169691Skan basic_string<char>::_M_move(char*, const char*, size_t); 258169691Skan 259169691Skan template 260169691Skan void 261169691Skan basic_string<char>::_M_assign(char*, size_t, char); 262169691Skan 263169691Skan template 264169691Skan bool 265169691Skan basic_string<char>::_M_disjunct(const char*) const; 266169691Skan 267169691Skan template 268169691Skan void 269169691Skan basic_string<char>::_M_check_length(size_t, size_t, const char*) const; 270169691Skan 271169691Skan template 272169691Skan void 273169691Skan basic_string<char>::_Rep::_M_set_length_and_sharable(size_t); 274169691Skan 275169691Skan 276169691Skan // std::istream 277169691Skan template 278169691Skan basic_istream<char>& 279169691Skan basic_istream<char>::ignore(); 280169691Skan 281169691Skan template 282169691Skan bool 283169691Skan basic_fstream<char>::is_open() const; 284169691Skan 285169691Skan template 286169691Skan bool 287169691Skan basic_ifstream<char>::is_open() const; 288169691Skan 289169691Skan template 290169691Skan bool 291169691Skan basic_ofstream<char>::is_open() const; 292169691Skan 293169691Skan#ifdef _GLIBCXX_USE_WCHAR_T 294169691Skan bool (* __p2)(const wchar_t&, const wchar_t&) = &char_traits<wchar_t>::eq; 295169691Skan 296169691Skan // std::wstring 297169691Skan template 298169691Skan void 299169691Skan basic_string<wchar_t>::_M_copy(wchar_t*, const wchar_t*, size_t); 300169691Skan 301169691Skan template 302169691Skan void 303169691Skan basic_string<wchar_t>::_M_move(wchar_t*, const wchar_t*, size_t); 304169691Skan 305169691Skan template 306169691Skan void 307169691Skan basic_string<wchar_t>::_M_assign(wchar_t*, size_t, wchar_t); 308169691Skan 309169691Skan template 310169691Skan bool 311169691Skan basic_string<wchar_t>::_M_disjunct(const wchar_t*) const; 312169691Skan 313169691Skan template 314169691Skan void 315169691Skan basic_string<wchar_t>::_M_check_length(size_t, size_t, 316169691Skan const char*) const; 317169691Skan 318169691Skan template 319169691Skan void 320169691Skan basic_string<wchar_t>::_Rep::_M_set_length_and_sharable(size_t); 321169691Skan 322169691Skan template 323169691Skan basic_istream<wchar_t>& 324169691Skan basic_istream<wchar_t>::ignore(); 325169691Skan 326169691Skan template 327169691Skan bool 328169691Skan basic_fstream<wchar_t>::is_open() const; 329169691Skan 330169691Skan template 331169691Skan bool 332169691Skan basic_ifstream<wchar_t>::is_open() const; 333169691Skan 334169691Skan template 335169691Skan bool 336169691Skan basic_ofstream<wchar_t>::is_open() const; 337169691Skan#endif 338169691Skan 339169691Skan_GLIBCXX_END_NAMESPACE 340169691Skan 341169691Skan// The rename syntax for default exported names is 342169691Skan// asm (".symver name1,exportedname@GLIBCXX_3.4") 343169691Skan// asm (".symver name2,exportedname@@GLIBCXX_3.4.5") 344169691Skan// In the future, GLIBCXX_ABI > 6 should remove all uses of 345169691Skan// _GLIBCXX_*_SYMVER macros in this file. 346169691Skan 347169691Skan#define _GLIBCXX_3_4_SYMVER(XXname, name) \ 348169691Skan extern "C" void \ 349169691Skan _X##name() \ 350169691Skan __attribute__ ((alias(#XXname))); \ 351169691Skan asm (".symver " "_X" #name "," #name "@GLIBCXX_3.4"); 352169691Skan 353169691Skan#define _GLIBCXX_3_4_5_SYMVER(XXname, name) \ 354169691Skan extern "C" void \ 355169691Skan _Y##name() \ 356169691Skan __attribute__ ((alias(#XXname))); \ 357169691Skan asm (".symver " "_Y" #name "," #name "@@GLIBCXX_3.4.5"); 358169691Skan 359169691Skan#define _GLIBCXX_ASM_SYMVER(cur, old, version) \ 360169691Skan asm (".symver " #cur "," #old "@@" #version); 361169691Skan 362169691Skan#define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_SYMVER 363169691Skan#include <bits/compatibility.h> 364169691Skan#undef _GLIBCXX_APPLY_SYMVER 365169691Skan 366169691Skan#define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_5_SYMVER 367169691Skan#include <bits/compatibility.h> 368169691Skan#undef _GLIBCXX_APPLY_SYMVER 369169691Skan 370169691Skan 371169691Skan/* gcc-3.4.0 372169691Skan_ZN10__gnu_norm15_List_node_base4hookEPS0_; 373169691Skan_ZN10__gnu_norm15_List_node_base4swapERS0_S1_; 374169691Skan_ZN10__gnu_norm15_List_node_base6unhookEv; 375169691Skan_ZN10__gnu_norm15_List_node_base7reverseEv; 376169691Skan_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_; 377169691Skan*/ 378169691Skan#include "list.cc" 379169691Skan_GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX4hookEPS_, \ 380169691Skan_ZN10__gnu_norm15_List_node_base4hookEPS0_, \ 381169691SkanGLIBCXX_3.4) 382169691Skan 383169691Skan_GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX4swapERS_S0_, \ 384169691Skan_ZN10__gnu_norm15_List_node_base4swapERS0_S1_, \ 385169691SkanGLIBCXX_3.4) 386169691Skan 387169691Skan_GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX6unhookEv, \ 388169691Skan_ZN10__gnu_norm15_List_node_base6unhookEv, \ 389169691SkanGLIBCXX_3.4) 390169691Skan 391169691Skan_GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX7reverseEv, \ 392169691Skan_ZN10__gnu_norm15_List_node_base7reverseEv, \ 393169691SkanGLIBCXX_3.4) 394169691Skan 395169691Skan_GLIBCXX_ASM_SYMVER(_ZNSt17_List_node_baseXX8transferEPS_S0_, \ 396169691Skan_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_, \ 397169691SkanGLIBCXX_3.4) 398169691Skan#undef _List_node_base 399169691Skan 400169691Skan// gcc-4.1.0 401169691Skan#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT 402169691Skan#define _GLIBCXX_MATHL_WRAPPER(name, argdecl, args, ver) \ 403169691Skanextern "C" double \ 404169691Skan__ ## name ## l_wrapper argdecl \ 405169691Skan{ \ 406169691Skan return name args; \ 407169691Skan} \ 408169691Skanasm (".symver __" #name "l_wrapper, " #name "l@" #ver) 409169691Skan 410169691Skan#define _GLIBCXX_MATHL_WRAPPER1(name, ver) \ 411169691Skan _GLIBCXX_MATHL_WRAPPER (name, (double x), (x), ver) 412169691Skan 413169691Skan#define _GLIBCXX_MATHL_WRAPPER2(name, ver) \ 414169691Skan _GLIBCXX_MATHL_WRAPPER (name, (double x, double y), (x, y), ver) 415169691Skan 416169691Skan#ifdef _GLIBCXX_HAVE_ACOSL 417169691Skan_GLIBCXX_MATHL_WRAPPER1 (acos, GLIBCXX_3.4.3); 418169691Skan#endif 419169691Skan#ifdef _GLIBCXX_HAVE_ASINL 420169691Skan_GLIBCXX_MATHL_WRAPPER1 (asin, GLIBCXX_3.4.3); 421169691Skan#endif 422169691Skan#ifdef _GLIBCXX_HAVE_ATAN2L 423169691Skan_GLIBCXX_MATHL_WRAPPER2 (atan2, GLIBCXX_3.4); 424169691Skan#endif 425169691Skan#ifdef _GLIBCXX_HAVE_ATANL 426169691Skan_GLIBCXX_MATHL_WRAPPER1 (atan, GLIBCXX_3.4.3); 427169691Skan#endif 428169691Skan#ifdef _GLIBCXX_HAVE_CEILL 429169691Skan_GLIBCXX_MATHL_WRAPPER1 (ceil, GLIBCXX_3.4.3); 430169691Skan#endif 431169691Skan#ifdef _GLIBCXX_HAVE_COSHL 432169691Skan_GLIBCXX_MATHL_WRAPPER1 (cosh, GLIBCXX_3.4); 433169691Skan#endif 434169691Skan#ifdef _GLIBCXX_HAVE_COSL 435169691Skan_GLIBCXX_MATHL_WRAPPER1 (cos, GLIBCXX_3.4); 436169691Skan#endif 437169691Skan#ifdef _GLIBCXX_HAVE_EXPL 438169691Skan_GLIBCXX_MATHL_WRAPPER1 (exp, GLIBCXX_3.4); 439169691Skan#endif 440169691Skan#ifdef _GLIBCXX_HAVE_FLOORL 441169691Skan_GLIBCXX_MATHL_WRAPPER1 (floor, GLIBCXX_3.4.3); 442169691Skan#endif 443169691Skan#ifdef _GLIBCXX_HAVE_FMODL 444169691Skan_GLIBCXX_MATHL_WRAPPER2 (fmod, GLIBCXX_3.4.3); 445169691Skan#endif 446169691Skan#ifdef _GLIBCXX_HAVE_FREXPL 447169691Skan_GLIBCXX_MATHL_WRAPPER (frexp, (double x, int *y), (x, y), GLIBCXX_3.4.3); 448169691Skan#endif 449169691Skan#ifdef _GLIBCXX_HAVE_HYPOTL 450169691Skan_GLIBCXX_MATHL_WRAPPER2 (hypot, GLIBCXX_3.4); 451169691Skan#endif 452169691Skan#ifdef _GLIBCXX_HAVE_LDEXPL 453169691Skan_GLIBCXX_MATHL_WRAPPER (ldexp, (double x, int y), (x, y), GLIBCXX_3.4.3); 454169691Skan#endif 455169691Skan#ifdef _GLIBCXX_HAVE_LOG10L 456169691Skan_GLIBCXX_MATHL_WRAPPER1 (log10, GLIBCXX_3.4); 457169691Skan#endif 458169691Skan#ifdef _GLIBCXX_HAVE_LOGL 459169691Skan_GLIBCXX_MATHL_WRAPPER1 (log, GLIBCXX_3.4); 460169691Skan#endif 461169691Skan#ifdef _GLIBCXX_HAVE_MODFL 462169691Skan_GLIBCXX_MATHL_WRAPPER (modf, (double x, double *y), (x, y), GLIBCXX_3.4.3); 463169691Skan#endif 464169691Skan#ifdef _GLIBCXX_HAVE_POWL 465169691Skan_GLIBCXX_MATHL_WRAPPER2 (pow, GLIBCXX_3.4); 466169691Skan#endif 467169691Skan#ifdef _GLIBCXX_HAVE_SINHL 468169691Skan_GLIBCXX_MATHL_WRAPPER1 (sinh, GLIBCXX_3.4); 469169691Skan#endif 470169691Skan#ifdef _GLIBCXX_HAVE_SINL 471169691Skan_GLIBCXX_MATHL_WRAPPER1 (sin, GLIBCXX_3.4); 472169691Skan#endif 473169691Skan#ifdef _GLIBCXX_HAVE_SQRTL 474169691Skan_GLIBCXX_MATHL_WRAPPER1 (sqrt, GLIBCXX_3.4); 475169691Skan#endif 476169691Skan#ifdef _GLIBCXX_HAVE_TANHL 477169691Skan_GLIBCXX_MATHL_WRAPPER1 (tanh, GLIBCXX_3.4); 478169691Skan#endif 479169691Skan#ifdef _GLIBCXX_HAVE_TANL 480169691Skan_GLIBCXX_MATHL_WRAPPER1 (tan, GLIBCXX_3.4); 481169691Skan#endif 482169691Skan#endif // _GLIBCXX_LONG_DOUBLE_COMPAT 483169691Skan 484169691Skan#endif 485169691Skan 486169691Skan#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT 487169691Skanextern void *_ZTVN10__cxxabiv123__fundamental_type_infoE[]; 488169691Skanextern void *_ZTVN10__cxxabiv119__pointer_type_infoE[]; 489169691Skanextern __attribute__((used, weak)) const char _ZTSe[2] = "e"; 490169691Skanextern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe"; 491169691Skanextern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe"; 492169691Skanextern __attribute__((used, weak)) const void *_ZTIe[2] 493169691Skan = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2], 494169691Skan (void *) _ZTSe }; 495169691Skanextern __attribute__((used, weak)) const void *_ZTIPe[4] 496169691Skan = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2], 497169691Skan (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe }; 498169691Skanextern __attribute__((used, weak)) const void *_ZTIPKe[4] 499169691Skan = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2], 500169691Skan (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe }; 501169691Skan#endif // _GLIBCXX_LONG_DOUBLE_COMPAT 502169691Skan 503169691Skan 504169691Skan 505169691Skan#ifdef _GLIBCXX_SYMVER_DARWIN 506169691Skan#if (defined(__ppc__) || defined(__ppc64__)) && defined(PIC) 507169691Skan/* __eprintf shouldn't have been made visible from libstdc++, or 508169691Skan anywhere, but on Mac OS X 10.4 it was defined in 509169691Skan libstdc++.6.0.3.dylib; so on that platform we have to keep defining 510169691Skan it to keep binary compatibility. We can't just put the libgcc 511169691Skan version in the export list, because that doesn't work; once a 512169691Skan symbol is marked as hidden, it stays that way. */ 513169691Skan 514169691Skan#include <cstdio> 515169691Skan#include <cstdlib> 516169691Skan 517169691Skanusing namespace std; 518169691Skan 519169691Skanextern "C" void 520169691Skan__eprintf(const char *string, const char *expression, 521169691Skan unsigned int line, const char *filename) 522169691Skan{ 523169691Skan fprintf(stderr, string, expression, line, filename); 524169691Skan fflush(stderr); 525169691Skan abort(); 526169691Skan} 527169691Skan#endif 528169691Skan#endif 529