This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Reduce code bloat caused by demangler (was: Don't accessfpos_t.__state on uClibc w/o wchar support)


Pétur Runólfsson schrieb:
Bernardo Innocenti wrote:

Actually, there are bigger outstanding problems in 3.4: the new
demangler gets linked in as soon as the program uses exceptions,
bringing 200KB worth of code with it.


Does the following patch help? This doesn't remove the dependency
of the demangler on std::string; instead it breaks the dependency
of std::string on ios_base by moving ios_base::failure into a
separate source file.

Warning! This patch uncovers a latent bug in locale::classic().
It seems that locale::classic() depends on ios_base::Init::Init()
always being called at the beginning of the program. If there is
enough interest, I'll try to find a fix.

Petur


Index: include/stdc++.h
===================================================================
RCS file: /home/petur/cvsroot/gcc/libstdc++-v3/include/stdc++.h,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 stdc++.h
*** include/stdc++.h 19 Mar 2003 23:03:34 -0000 1.1.1.1
--- include/stdc++.h 26 Sep 2003 22:33:34 -0000
***************
*** 58,64 ****
#include <iomanip>
#include <ios>
#include <iosfwd>
- #include <iostream>
#include <istream>
#include <iterator>
#include <limits>
--- 58,63 ----
Index: include/bits/ios_base.h
===================================================================
RCS file: /home/petur/cvsroot/gcc/libstdc++-v3/include/bits/ios_base.h,v
retrieving revision 1.1.1.9
diff -c -3 -p -r1.1.1.9 ios_base.h
*** include/bits/ios_base.h 19 Jul 2003 21:05:25 -0000 1.1.1.9
--- include/bits/ios_base.h 27 Sep 2003 08:50:05 -0000
***************
*** 29,35 ****
// the GNU General Public License.
//
! // ISO C++ 14882: 27.8 File-based streams
//
/** @file ios_base.h
--- 29,35 ----
// the GNU General Public License.
//
! // ISO C++ 14882: 27.4 Iostreams base classes
//
/** @file ios_base.h
*************** namespace std
*** 167,173 ****
#ifdef _GLIBCXX_RESOLVE_LIB_DEFECTS
//48. Use of non-existent exception constructor
explicit ! failure(const string& __str) throw();
// This declaration is not useless:
// http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
--- 167,173 ----
#ifdef _GLIBCXX_RESOLVE_LIB_DEFECTS
//48. Use of non-existent exception constructor
explicit ! failure(const string& __arg) throw();
// This declaration is not useless:
// http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
*************** namespace std
*** 178,185 ****
what() const throw();
private:
! enum { _S_bufsize = 256 };
! char _M_name[_S_bufsize];
#endif
};
--- 178,184 ----
what() const throw();
private:
! string _M_msg;
#endif
};
Index: src/Makefile.am
===================================================================
RCS file: /home/petur/cvsroot/gcc/libstdc++-v3/src/Makefile.am,v
retrieving revision 1.1.1.10
diff -c -3 -p -r1.1.1.10 Makefile.am
*** src/Makefile.am 26 Sep 2003 15:29:49 -0000 1.1.1.10
--- src/Makefile.am 27 Sep 2003 08:50:27 -0000
*************** sources = \
*** 103,108 ****
--- 103,109 ----
globals.cc \
io-inst.cc \
ios.cc \
+ ios_failure.cc \
istream-inst.cc \
limits.cc \
locale.cc \
Index: src/Makefile.in
===================================================================
RCS file: /home/petur/cvsroot/gcc/libstdc++-v3/src/Makefile.in,v
retrieving revision 1.1.1.11
diff -c -3 -p -r1.1.1.11 Makefile.in
*** src/Makefile.in 26 Sep 2003 15:29:49 -0000 1.1.1.11
--- src/Makefile.in 27 Sep 2003 08:51:19 -0000
*************** sources = \
*** 262,267 ****
--- 262,268 ----
globals.cc \
io-inst.cc \
ios.cc \
+ ios_failure.cc \
istream-inst.cc \
limits.cc \
locale.cc \
*************** am__objects_2 = basic_file.lo c++locale.
*** 357,363 ****
am__objects_3 = allocator-inst.lo codecvt.lo complex_io.lo \
concept-inst.lo ctype.lo demangle.lo ext-inst.lo \
fstream-inst.lo functexcept.lo globals.lo io-inst.lo ios.lo \
! istream-inst.lo limits.lo locale.lo locale-inst.lo \
localename.lo misc-inst.lo ostream-inst.lo sstream-inst.lo \
stdexcept.lo stl_tree.lo streambuf-inst.lo string-inst.lo \
strstream.lo valarray-inst.lo wstring-inst.lo $(am__objects_1) \
--- 358,364 ----
am__objects_3 = allocator-inst.lo codecvt.lo complex_io.lo \
concept-inst.lo ctype.lo demangle.lo ext-inst.lo \
fstream-inst.lo functexcept.lo globals.lo io-inst.lo ios.lo \
! ios_failure.lo istream-inst.lo limits.lo locale.lo locale-inst.lo \
localename.lo misc-inst.lo ostream-inst.lo sstream-inst.lo \
stdexcept.lo stl_tree.lo streambuf-inst.lo string-inst.lo \
strstream.lo valarray-inst.lo wstring-inst.lo $(am__objects_1) \
Index: src/io-inst.cc
===================================================================
RCS file: /home/petur/cvsroot/gcc/libstdc++-v3/src/io-inst.cc,v
retrieving revision 1.1.1.2
diff -c -3 -p -r1.1.1.2 io-inst.cc
*** src/io-inst.cc 6 Jul 2003 20:51:58 -0000 1.1.1.2
--- src/io-inst.cc 26 Sep 2003 22:29:30 -0000
***************
*** 1,6 ****
// Explicit instantiation file.
! // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
--- 1,6 ----
// Explicit instantiation file.
! // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
***************
*** 34,40 ****
#include <ios>
#include <iomanip>
! #include <iostream>
namespace std
{
--- 34,40 ----
#include <ios>
#include <iomanip>
! #include <istream>
namespace std
{
Index: src/ios.cc
===================================================================
RCS file: /home/petur/cvsroot/gcc/libstdc++-v3/src/ios.cc,v
retrieving revision 1.1.1.11
diff -c -3 -p -r1.1.1.11 ios.cc
*** src/ios.cc 17 Sep 2003 13:13:32 -0000 1.1.1.11
--- src/ios.cc 27 Sep 2003 08:44:15 -0000
*************** namespace std *** 149,167 ****
int ios_base::Init::_S_ios_base_init = 0;
bool ios_base::Init::_S_synced_with_stdio = true;
- ios_base::failure::failure(const string& __str) throw()
- {
- strncpy(_M_name, __str.c_str(), _S_bufsize);
- _M_name[_S_bufsize - 1] = '\0';
- }
- - ios_base::failure::~failure() throw()
- { }
- - const char*
- ios_base::failure::what() const throw()
- { return _M_name; }
- ios_base::Init::Init()
{
if (_S_ios_base_init == 0)
--- 149,154 ----
Index: src/ios_failure.cc
===================================================================
RCS file: src/ios_failure.cc
diff -N src/ios_failure.cc
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- src/ios_failure.cc 27 Sep 2003 08:44:13 -0000
***************
*** 0 ****
--- 1,48 ----
+ // Iostreams base classes -*- C++ -*-
+ + // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+ + // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ // GNU General Public License for more details.
+ + // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING. If not, write to the Free
+ // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ // USA.
+ + // As a special exception, you may use this file as part of a free software
+ // library without restriction. Specifically, if other files instantiate
+ // templates or use macros or inline functions from this file, or you compile
+ // this file and link it with other files to produce an executable, this
+ // file does not by itself cause the resulting executable to be covered by
+ // the GNU General Public License. This exception does not however
+ // invalidate any other reasons why the executable file might be covered by
+ // the GNU General Public License.
+ + //
+ // ISO C++ 14882: 27.4.2.1.1 Class ios_base::failure
+ //
+ + #include <ios>
+ + namespace std
+ {
+ ios_base::failure::failure(const string& __arg) throw()
+ : _M_msg(__arg) { }
+ + ios_base::failure::~failure() throw()
+ { }
+ + const char*
+ ios_base::failure::what() const throw()
+ { return _M_msg.c_str(); }
+ } // namespace std







Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]