From 32d225be6fb18e01f33546c64f3ba126fd3e9410 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Thu, 20 Aug 2009 14:17:19 +0000 Subject: main/uclibc++: import patches from openwrt https://dev.openwrt.org/browser/packages/libs/uclibc%2B%2B/patches --- main/uclibc++/001-path_to_make.patch | 30 +++ main/uclibc++/002-path_to_bash.patch | 12 ++ main/uclibc++/003-cp_command.patch | 19 ++ main/uclibc++/004-ccache_fixes.patch | 24 +++ main/uclibc++/005-wrapper.patch | 12 ++ main/uclibc++/006-eabi_fix.patch | 42 ++++ main/uclibc++/007-numeric_limits.patch | 66 ++++++ main/uclibc++/008-integer_width.patch | 314 ++++++++++++++++++++++++++++ main/uclibc++/900-dependent_exception.patch | 68 ++++++ main/uclibc++/APKBUILD | 20 +- 10 files changed, 606 insertions(+), 1 deletion(-) create mode 100644 main/uclibc++/001-path_to_make.patch create mode 100644 main/uclibc++/002-path_to_bash.patch create mode 100644 main/uclibc++/003-cp_command.patch create mode 100644 main/uclibc++/004-ccache_fixes.patch create mode 100644 main/uclibc++/005-wrapper.patch create mode 100644 main/uclibc++/006-eabi_fix.patch create mode 100644 main/uclibc++/007-numeric_limits.patch create mode 100644 main/uclibc++/008-integer_width.patch create mode 100644 main/uclibc++/900-dependent_exception.patch diff --git a/main/uclibc++/001-path_to_make.patch b/main/uclibc++/001-path_to_make.patch new file mode 100644 index 00000000..840dac32 --- /dev/null +++ b/main/uclibc++/001-path_to_make.patch @@ -0,0 +1,30 @@ +diff -ur old/Makefile dev/Makefile +--- old/Makefile Sat Oct 14 17:49:55 2006 ++++ dev/Makefile Sat Oct 14 17:50:18 2006 +@@ -1,4 +1,3 @@ +-MAKE = make + SUBDIRS = bin include src + + # User defines: +@@ -43,10 +42,10 @@ + #Menu configuration system + + extra/config/conf: +- make -C extra/config conf ++ $(MAKE) -C extra/config conf + + extra/config/mconf: +- make -C extra/config ncurses mconf ++ $(MAKE) -C extra/config ncurses mconf + + menuconfig: extra/config/mconf + @./extra/config/mconf extra/Configs/Config.in +@@ -71,7 +70,7 @@ + + include/system_configuration.h: .config + @if [ ! -x ./extra/config/conf ] ; then \ +- make -C extra/config conf; \ ++ $(MAKE) -C extra/config conf; \ + fi; + @./extra/config/conf -o extra/Configs/Config.in + diff --git a/main/uclibc++/002-path_to_bash.patch b/main/uclibc++/002-path_to_bash.patch new file mode 100644 index 00000000..46b793b6 --- /dev/null +++ b/main/uclibc++/002-path_to_bash.patch @@ -0,0 +1,12 @@ +diff -ur old/bin/Makefile dev/bin/Makefile +--- old/bin/Makefile Sat Oct 14 17:49:54 2006 ++++ dev/bin/Makefile Sat Oct 14 17:57:33 2006 +@@ -13,7 +13,7 @@ + $(INSTALL) -m 755 $(WRAPPER) $(PREFIX)$(UCLIBCXX_RUNTIME_BINDIR) + + $(WRAPPER): +- echo "#!/bin/bash" > $(WRAPPER) ++ echo "#!/usr/bin/env bash" > $(WRAPPER) + echo "" >> $(WRAPPER) + echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $(WRAPPER) + echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $(WRAPPER) diff --git a/main/uclibc++/003-cp_command.patch b/main/uclibc++/003-cp_command.patch new file mode 100644 index 00000000..53d0ed7a --- /dev/null +++ b/main/uclibc++/003-cp_command.patch @@ -0,0 +1,19 @@ +diff -ur old/src/Makefile dev/src/Makefile +--- old/src/Makefile Sat Oct 14 17:49:54 2006 ++++ dev/src/Makefile Sat Oct 14 18:02:30 2006 +@@ -25,12 +25,14 @@ + + all: libgcc_eh libsupc $(EXOBJS) $(ALLBIN) + ++CP = cp -fPR ++ + install: + $(INSTALL) -d $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR) + ifneq ($(BUILD_ONLY_STATIC_LIB),y) + $(INSTALL) -m 755 $(SHARED_FULLNAME) \ + $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR) +- cp -fa $(SHARED_MAJORNAME) $(LIBNAME).so $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR) ++ $(CP) $(SHARED_MAJORNAME) $(LIBNAME).so $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR) + endif + ifeq ($(BUILD_STATIC_LIB),y) + $(INSTALL) -m 644 $(LIBNAME).a $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR) diff --git a/main/uclibc++/004-ccache_fixes.patch b/main/uclibc++/004-ccache_fixes.patch new file mode 100644 index 00000000..10ceb792 --- /dev/null +++ b/main/uclibc++/004-ccache_fixes.patch @@ -0,0 +1,24 @@ +diff -ruN uClibc++-0.2.2-old/src/abi/libgcc_eh/Makefile uClibc++-0.2.2-new/src/abi/libgcc_eh/Makefile +--- uClibc++-0.2.2-old/src/abi/libgcc_eh/Makefile 2007-06-04 00:51:13.000000000 +0200 ++++ uClibc++-0.2.2-new/src/abi/libgcc_eh/Makefile 2007-09-03 21:51:07.000000000 +0200 +@@ -16,7 +16,7 @@ + # + #else + # echo Binary +- $(AR) x $(shell CC=$(CC) $(TOPDIR)/scripts/find_libgcc_eh.sh) ++ $(AR) x $(shell CC="$(CC)" $(TOPDIR)/scripts/find_libgcc_eh.sh) + #endif + #endif + +diff -ruN uClibc++-0.2.2-old/src/abi/libsupc/Makefile uClibc++-0.2.2-new/src/abi/libsupc/Makefile +--- uClibc++-0.2.2-old/src/abi/libsupc/Makefile 2007-06-04 00:51:13.000000000 +0200 ++++ uClibc++-0.2.2-new/src/abi/libsupc/Makefile 2007-09-03 21:51:17.000000000 +0200 +@@ -14,7 +14,7 @@ + # + #else + # echo Binary +- $(AR) x $(shell CC=$(CC) $(TOPDIR)/scripts/find_libsupc.sh) ++ $(AR) x $(shell CC="$(CC)" $(TOPDIR)/scripts/find_libsupc.sh) + $(RM) -f new_op*.o del_op*.o pure.o new_handler.o eh_alloc.o eh_globals.o + # + #endif diff --git a/main/uclibc++/005-wrapper.patch b/main/uclibc++/005-wrapper.patch new file mode 100644 index 00000000..b526a901 --- /dev/null +++ b/main/uclibc++/005-wrapper.patch @@ -0,0 +1,12 @@ +diff -ruN uClibc++-0.2.2-old/bin/Makefile uClibc++-0.2.2-new/bin/Makefile +--- uClibc++-0.2.2-old/bin/Makefile 2007-09-23 13:46:10.000000000 +0200 ++++ uClibc++-0.2.2-new/bin/Makefile 2007-09-23 13:47:03.000000000 +0200 +@@ -25,7 +25,7 @@ + echo 'while [ -n "$$1" ]' >> $(WRAPPER) + echo 'do' >> $(WRAPPER) + echo ' WRAPPER_OPTIONS="$$WRAPPER_OPTIONS $$1"' >> $(WRAPPER) +- echo ' if [ "$$1" = "-c" -o "$$1" = "-E" -o "$$1" = "-S" ]' >> $(WRAPPER) ++ echo ' if [ "$$1" = "-c" -o "$$1" = "-E" -o "$$1" = "-S" -o "$$1" = "-MF" ]' >> $(WRAPPER) + echo ' then' >> $(WRAPPER) + echo ' WRAPPER_INCLIB="N"' >> $(WRAPPER) + echo ' fi' >> $(WRAPPER) diff --git a/main/uclibc++/006-eabi_fix.patch b/main/uclibc++/006-eabi_fix.patch new file mode 100644 index 00000000..bc970a71 --- /dev/null +++ b/main/uclibc++/006-eabi_fix.patch @@ -0,0 +1,42 @@ +Index: uClibc++-0.2.2/include/typeinfo +=================================================================== +--- uClibc++-0.2.2.orig/include/typeinfo 2008-02-13 00:37:04.000000000 +0100 ++++ uClibc++-0.2.2/include/typeinfo 2008-02-13 00:37:34.000000000 +0100 +@@ -44,6 +44,7 @@ + class __class_type_info; + } // namespace __cxxabiv1 + ++#ifndef __GXX_MERGED_TYPEINFO_NAMES + #if !__GXX_WEAK__ + // If weak symbols are not supported, typeinfo names are not merged. + #define __GXX_MERGED_TYPEINFO_NAMES 0 +@@ -51,6 +52,7 @@ + // On platforms that support weak symbols, typeinfo names are merged. + #define __GXX_MERGED_TYPEINFO_NAMES 1 + #endif ++#endif + + namespace std + { +Index: uClibc++-0.2.2/include/unwind-cxx.h +=================================================================== +--- uClibc++-0.2.2.orig/include/unwind-cxx.h 2008-02-13 00:38:04.000000000 +0100 ++++ uClibc++-0.2.2/include/unwind-cxx.h 2008-02-13 00:40:32.000000000 +0100 +@@ -135,6 +135,7 @@ + + // This is the exception class we report -- "GNUCC++\0". + const _Unwind_Exception_Class __gxx_exception_class ++#ifndef __ARM_EABI_UNWINDER__ + = ((((((((_Unwind_Exception_Class) 'G' + << 8 | (_Unwind_Exception_Class) 'N') + << 8 | (_Unwind_Exception_Class) 'U') +@@ -143,6 +144,9 @@ + << 8 | (_Unwind_Exception_Class) '+') + << 8 | (_Unwind_Exception_Class) '+') + << 8 | (_Unwind_Exception_Class) '\0'); ++#else ++= "GNUC++"; ++#endif + + // GNU C++ personality routine, Version 0. + extern "C" _Unwind_Reason_Code __gxx_personality_v0 diff --git a/main/uclibc++/007-numeric_limits.patch b/main/uclibc++/007-numeric_limits.patch new file mode 100644 index 00000000..1ed7d6c6 --- /dev/null +++ b/main/uclibc++/007-numeric_limits.patch @@ -0,0 +1,66 @@ +Index: uClibc++-0.2.2/include/limits +=================================================================== +--- uClibc++-0.2.2/include/limits (revision 1877) ++++ uClibc++-0.2.2/include/limits (revision 1878) +@@ -143,6 +143,53 @@ + static T signaling_NaN(); + }; + ++template <> class numeric_limits { ++public: ++ typedef bool T; ++ // General -- meaningful for all specializations. ++ static const bool is_specialized = true; ++ static T min(){ ++ return false; ++ } ++ static T max(){ ++ return true; ++ } ++ static const int radix = 2; ++ static const int digits = 1; ++ static const int digits10 = 0; ++ static const bool is_signed = false; ++ static const bool is_integer = true; ++ static const bool is_exact = true; ++ static const bool traps = false; ++ static const bool is_modulo = false; ++ static const bool is_bounded = true; ++ ++ // Floating point specific. ++ ++ static T epsilon(){ ++ return 0; ++ } ++ static T round_error(){ ++ return 0; ++ } ++ static const int min_exponent10 = 0; ++ static const int max_exponent10 = 0; ++ static const int min_exponent = 0; ++ ++ static const int max_exponent = 0; ++ static const bool has_infinity = false; ++ static const bool has_quiet_NaN = false; ++ static const bool has_signaling_NaN = false; ++ static const bool is_iec559 = false; ++ static const bool has_denorm = false; ++ static const bool tinyness_before = false; ++ static const float_round_style round_style = round_indeterminate; ++ static T denorm_min(); ++ static T infinity(); ++ static T quiet_NaN(); ++ static T signaling_NaN(); ++}; ++ + template <> class numeric_limits { + public: + typedef unsigned char T; +@@ -567,6 +614,7 @@ + }; + + template <> class numeric_limits { ++public: + typedef double numeric_type; + + static const bool is_specialized = true; diff --git a/main/uclibc++/008-integer_width.patch b/main/uclibc++/008-integer_width.patch new file mode 100644 index 00000000..c467e601 --- /dev/null +++ b/main/uclibc++/008-integer_width.patch @@ -0,0 +1,314 @@ +Index: uClibc++-0.2.2/include/ostream +=================================================================== +--- uClibc++-0.2.2/include/ostream (revision 708) ++++ uClibc++-0.2.2/include/ostream (revision 709) +@@ -129,6 +129,18 @@ + return *this; + } + ++ _UCXXEXPORT void printout(const char_type* s, streamsize n) ++ { ++ int extra = ios::width() - n; ++ if ((ios::flags()&ios::adjustfield) == ios::right) ++ while (extra-- > 0) ++ put(ios::fill()); ++ write(s, n); ++ if ((ios::flags()&ios::adjustfield) == ios::left) ++ while (extra-- > 0) ++ put(ios::fill()); ++ } ++ + protected: + basic_ostream(const basic_ostream &){ } + basic_ostream & operator=(const basic_ostream &){ return *this; } +@@ -142,15 +154,15 @@ + sentry s(*this); + if( basic_ios::flags() & ios_base::boolalpha){ + if(n){ +- write("true", 4); ++ printout("true", 4); + }else{ +- write("false", 5); ++ printout("false", 5); + } + }else{ + if(n){ +- write("1", 1); ++ printout("1", 1); + }else{ +- write("0", 1); ++ printout("0", 1); + } + } + if(basic_ios::flags() & ios_base::unitbuf){ +@@ -219,7 +231,7 @@ + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(void* p){ + sentry s(*this); + char buffer[20]; +- write(buffer, snprintf(buffer, 20, "%p", p) ); ++ printout(buffer, snprintf(buffer, 20, "%p", p) ); + if(basic_ios::flags() & ios_base::unitbuf){ + flush(); + } +@@ -356,7 +368,7 @@ + operator<<(basic_ostream& out, const charT* c) + { + typename basic_ostream::sentry s(out); +- out.write(c, traits::length(c) ); ++ out.printout(c, traits::length(c) ); + return out; + } + +@@ -364,7 +376,7 @@ + operator<<(basic_ostream& out, const char* c) + { + typename basic_ostream::sentry s(out); +- out.write(c, char_traits::length(c) ); ++ out.printout(c, char_traits::length(c) ); + return out; + } + +@@ -373,7 +385,7 @@ + operator<<(basic_ostream& out, const char* c) + { + typename basic_ostream::sentry s(out); +- out.write(c, traits::length(c)); ++ out.printout(c, traits::length(c)); + return out; + } + +@@ -389,7 +401,7 @@ + temp[i] = out.widen(c[i]); + } + +- out.write(temp, numChars); ++ out.printout(temp, numChars); + return out; + } + #endif +@@ -399,7 +411,7 @@ + operator<<(basic_ostream& out, const signed char* c) + { + typename basic_ostream::sentry s(out); +- out.write(reinterpret_cast(c), traits::length( reinterpret_cast(c))); ++ out.printout(reinterpret_cast(c), traits::length( reinterpret_cast(c))); + return out; + } + +@@ -407,7 +419,7 @@ + operator<<(basic_ostream& out, const unsigned char* c) + { + typename basic_ostream::sentry s(out); +- out.write(reinterpret_cast(c), traits::length( reinterpret_cast(c))); ++ out.printout(reinterpret_cast(c), traits::length( reinterpret_cast(c))); + return out; + } + +Index: uClibc++-0.2.2/include/ostream_helpers +=================================================================== +--- uClibc++-0.2.2/include/ostream_helpers (revision 708) ++++ uClibc++-0.2.2/include/ostream_helpers (revision 709) +@@ -88,7 +88,7 @@ + } + } + +- stream.write(buffer, snprintf(buffer, 20, formatString, n) ); ++ stream.printout(buffer, snprintf(buffer, 20, formatString, n) ); + + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); +@@ -135,7 +135,7 @@ + } + } + +- stream.write(buffer, snprintf(buffer, 20, formatString, n)); ++ stream.printout(buffer, snprintf(buffer, 20, formatString, n)); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } +@@ -182,7 +182,7 @@ + } + } + +- stream.write(buffer, snprintf(buffer, 27, formatString, n) ); ++ stream.printout(buffer, snprintf(buffer, 27, formatString, n) ); + + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); +@@ -228,7 +228,7 @@ + } + } + +- stream.write(buffer, snprintf(buffer, 27, formatString, n) ); ++ stream.printout(buffer, snprintf(buffer, 27, formatString, n) ); + + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); +@@ -256,7 +256,7 @@ + } else { + length = snprintf(buffer, 32, "%*.*g",static_cast(stream.width()),static_cast(stream.precision()), f); + } +- stream.write(buffer, length); ++ stream.printout(buffer, length); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } +@@ -280,7 +280,7 @@ + } else { + length = snprintf(buffer, 32, "%*.*Lg", static_cast(stream.width()), static_cast(stream.precision()), f); + } +- stream.write(buffer, length); ++ stream.printout(buffer, length); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } +@@ -295,25 +295,25 @@ + { + wchar_t buffer[20]; + if( stream.flags() & ios_base::dec){ +- stream.write(buffer, swprintf(buffer, 20, L"%ld", n)); ++ stream.printout(buffer, swprintf(buffer, 20, L"%ld", n)); + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ +- stream.write(buffer, swprintf(buffer, 20, L"%#lo", n)); ++ stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n)); + }else{ +- stream.write(buffer, swprintf(buffer, 20, L"%lo", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) ); + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ +- stream.write(buffer, swprintf(buffer, 20, L"%#lX", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) ); + }else{ +- stream.write(buffer, swprintf(buffer, 20, L"%#lx", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) ); + } + }else{ + if(stream.flags() & ios_base::uppercase){ +- stream.write(buffer, swprintf(buffer, 20, L"%lX", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) ); + }else{ +- stream.write(buffer, swprintf(buffer, 20, L"%lx", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) ); + } + } + } +@@ -329,25 +329,25 @@ + { + wchar_t buffer[20]; + if( stream.flags() & ios_base::dec){ +- stream.write(buffer, swprintf(buffer, 20, L"%lu", n)); ++ stream.printout(buffer, swprintf(buffer, 20, L"%lu", n)); + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ +- stream.write(buffer, swprintf(buffer, 20, L"%#lo", n)); ++ stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n)); + }else{ +- stream.write(buffer, swprintf(buffer, 20, L"%lo", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) ); + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ +- stream.write(buffer, swprintf(buffer, 20, L"%#lX", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) ); + }else{ +- stream.write(buffer, swprintf(buffer, 20, L"%#lx", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) ); + } + }else{ + if(stream.flags() & ios_base::uppercase){ +- stream.write(buffer, swprintf(buffer, 20, L"%lX", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) ); + }else{ +- stream.write(buffer, swprintf(buffer, 20, L"%lx", n) ); ++ stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) ); + } + } + } +@@ -365,25 +365,25 @@ + { + wchar_t buffer[28]; + if( stream.flags() & ios_base::dec){ +- stream.write(buffer, swprintf(buffer, 27, L"%lld", n)); ++ stream.printout(buffer, swprintf(buffer, 27, L"%lld", n)); + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ +- stream.write(buffer, swprintf(buffer, 27, L"%#llo", n)); ++ stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n)); + }else{ +- stream.write(buffer, swprintf(buffer, 27, L"%llo", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) ); + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ +- stream.write(buffer, swprintf(buffer, 27, L"%#llX", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) ); + }else{ +- stream.write(buffer, swprintf(buffer, 27, L"%#llx", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) ); + } + }else{ + if(stream.flags() & ios_base::uppercase){ +- stream.write(buffer, swprintf(buffer, 27, L"%llX", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) ); + }else{ +- stream.write(buffer, swprintf(buffer, 27, L"%llx", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) ); + } + } + } +@@ -399,25 +399,25 @@ + { + wchar_t buffer[28]; + if( stream.flags() & ios_base::dec){ +- stream.write(buffer, swprintf(buffer, 27, L"%llu", n)); ++ stream.printout(buffer, swprintf(buffer, 27, L"%llu", n)); + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ +- stream.write(buffer, swprintf(buffer, 27, L"%#llo", n)); ++ stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n)); + }else{ +- stream.write(buffer, swprintf(buffer, 27, L"%llo", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) ); + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ +- stream.write(buffer, swprintf(buffer, 27, L"%#llX", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) ); + }else{ +- stream.write(buffer, swprintf(buffer, 27, L"%#llx", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) ); + } + }else{ + if(stream.flags() & ios_base::uppercase){ +- stream.write(buffer, swprintf(buffer, 27, L"%llX", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) ); + }else{ +- stream.write(buffer, swprintf(buffer, 27, L"%llx", n) ); ++ stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) ); + } + } + } +@@ -447,7 +447,7 @@ + } else { + swprintf(format_string, 32, L"%%%u.%ug", static_cast(stream.width()), static_cast(stream.precision())); + } +- stream.write(buffer, swprintf(buffer, 32, format_string, f) ); ++ stream.printout(buffer, swprintf(buffer, 32, format_string, f) ); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } +@@ -471,7 +471,7 @@ + } else { + swprintf(format_string, 32, L"%%%u.%uLg", static_cast(stream.width()), static_cast(stream.precision())); + } +- stream.write(buffer, swprintf(buffer, 32, format_string, f) ); ++ stream.printout(buffer, swprintf(buffer, 32, format_string, f) ); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } diff --git a/main/uclibc++/900-dependent_exception.patch b/main/uclibc++/900-dependent_exception.patch new file mode 100644 index 00000000..3a5cb7db --- /dev/null +++ b/main/uclibc++/900-dependent_exception.patch @@ -0,0 +1,68 @@ +--- a/src/eh_alloc.cpp 2007-06-03 23:51:13.000000000 +0100 ++++ b/src/eh_alloc.cpp 2009-07-13 09:42:39.000000000 +0100 +@@ -42,4 +42,21 @@ + free( (char *)(vptr) - sizeof(__cxa_exception) ); + } + ++#if __GNUC__ * 100 + __GNUC_MINOR__ >= 404 ++extern "C" __cxa_dependent_exception* __cxa_allocate_dependent_exception() throw(){ ++ __cxa_dependent_exception *retval; ++ ++ retval = static_cast<__cxa_dependent_exception*>(malloc(sizeof(__cxa_dependent_exception))); ++ if(0 == retval){ ++ std::terminate(); ++ } ++ memset (retval, 0, sizeof(__cxa_dependent_exception)); ++ return retval ; ++} ++ ++extern "C" void __cxa_free_dependent_exception(__cxa_dependent_exception *vptr) throw(){ ++ free( vptr ); ++} ++#endif ++ + } +--- a/include/unwind-cxx.h 2009-07-13 10:01:11.000000000 +0100 ++++ b/include/unwind-cxx.h 2009-07-13 10:14:08.000000000 +0100 +@@ -79,6 +79,41 @@ + _Unwind_Exception unwindHeader; + }; + ++#if __GNUC__ * 100 + __GNUC_MINOR__ >= 404 ++// A dependent C++ exception object consists of a wrapper around an unwind ++// object header with additional C++ specific information, containing a pointer ++// to a primary exception object. ++ ++struct __cxa_dependent_exception ++{ ++ // The primary exception this thing depends on. ++ void *primaryException; ++ ++ // The C++ standard has entertaining rules wrt calling set_terminate ++ // and set_unexpected in the middle of the exception cleanup process. ++ std::unexpected_handler unexpectedHandler; ++ std::terminate_handler terminateHandler; ++ ++ // The caught exception stack threads through here. ++ __cxa_exception *nextException; ++ ++ // How many nested handlers have caught this exception. A negated ++ // value is a signal that this object has been rethrown. ++ int handlerCount; ++ ++ // Cache parsed handler data from the personality routine Phase 1 ++ // for Phase 2 and __cxa_call_unexpected. ++ int handlerSwitchValue; ++ const unsigned char *actionRecord; ++ const unsigned char *languageSpecificData; ++ _Unwind_Ptr catchTemp; ++ void *adjustedPtr; ++ ++ // The generic exception header. Must be last. ++ _Unwind_Exception unwindHeader; ++}; ++ ++#endif + // Each thread in a C++ program has access to a __cxa_eh_globals object. + struct __cxa_eh_globals + { diff --git a/main/uclibc++/APKBUILD b/main/uclibc++/APKBUILD index e6545e48..d187f7cc 100644 --- a/main/uclibc++/APKBUILD +++ b/main/uclibc++/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa pkgname=uclibc++ pkgver=0.2.2 -pkgrel=3 +pkgrel=4 pkgdesc="Embedded C++ library" url="http://cxx.uclibc.org/" license='GPL-2' @@ -9,6 +9,15 @@ depends= makedepends= subpackages="$pkgname-dev" source="http://cxx.uclibc.org/src/uClibc++-$pkgver.tar.bz2 + 001-path_to_make.patch + 002-path_to_bash.patch + 003-cp_command.patch + 004-ccache_fixes.patch + 005-wrapper.patch + 006-eabi_fix.patch + 007-numeric_limits.patch + 008-integer_width.patch + 900-dependent_exception.patch associative_base.patch uclibc++-gcc-4.3.patch uclibc++config @@ -42,6 +51,15 @@ dev() { md5sums="1ceef3209cca88be8f1bd9de99735954 uClibc++-0.2.2.tar.bz2 +ce1016fb83c23c83486f35f4cd1b64ab 001-path_to_make.patch +42954542f9f3c5dd6febb73d2db7f1d0 002-path_to_bash.patch +8068b394de053ed94a742d1ed9657b99 003-cp_command.patch +363dc1cd86052f44212c2f3ac15926da 004-ccache_fixes.patch +3689f8d77984ca66554e14cacbeb796c 005-wrapper.patch +99e625748c0e6d5fc7cef8484cbac587 006-eabi_fix.patch +d335b8f1c9d4682a220a082a371277e4 007-numeric_limits.patch +2c431d4ad46a244f2f50baf40b85f7d2 008-integer_width.patch +4e9c416c2a107f7d814f938fa57901a5 900-dependent_exception.patch 5689baa3f3bf8488c0a5d27a690d30fa associative_base.patch 4c7b499e4697225378acef25f6364e9b uclibc++-gcc-4.3.patch 2f573c1e2a0c7a320ea4685cc3ce9e2a uclibc++config" -- cgit v1.2.3