Initial commit

This commit is contained in:
domenico
2025-06-24 15:51:28 +02:00
commit 22031d9dab
6862 changed files with 1462554 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
#
# Copyright (C) 2006-2012 OpenWrt.org
# Copyright (c) 2016 LEDE project
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=uclibc++
PKG_VERSION:=0.2.4
PKG_RELEASE:=3
PKG_SOURCE:=uClibc++-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://cxx.uclibc.org/src/
PKG_HASH:=be16fc6a6eb2e59df420ee41e7042f38e27ebaf5c2762d90e75803364a7b00db
PKG_BUILD_DIR:=$(BUILD_DIR)/uClibc++-$(PKG_VERSION)
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0
PKG_LICENSE:=LGPL-2.1+
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
define Package/uclibcxx
NAME:=uclibc++
SECTION:=libs
CATEGORY:=Libraries
TITLE:=C++ library for embedded systems
URL:=http://cxx.uclibc.org/src/
endef
UCLIBC_TARGET_ARCH:=$(shell echo $(ARCH) | sed -e s'/-.*//' \
-e 's/i.86/i386/' \
-e 's/sparc.*/sparc/' \
-e 's/m68k.*/m68k/' \
-e 's/ppc/powerpc/g' \
-e 's/v850.*/v850/g' \
-e 's/sh64/sh/' \
-e 's/sh[234].*/sh/' \
-e 's/mips.*/mips/' \
-e 's/mipsel.*/mips/' \
)
TARGET_CFLAGS += $(FPIC)
ifneq ($(CONFIG_CCACHE),)
TARGET_CXX=$(TARGET_CXX_NOCACHE)
endif
ifeq ($(CONFIG_USE_MUSL),y)
SSP_LIB=-lssp_nonshared
endif
MAKE_FLAGS:= \
TOPDIR="$(PKG_BUILD_DIR)/" \
$(TARGET_CONFIGURE_OPTS) \
CPU_CFLAGS="$(TARGET_CFLAGS)" \
CROSS="$(TARGET_CROSS)" \
LDFLAGS="-Wl,--warn-common -Wl,--warn-once -Wl,-z,combreloc -Wl,-z,defs $(TARGET_LDFLAGS)" \
CP="$(CP)" \
GEN_LIBS="-lc $(LIBGCC_S) $(SSP_LIB)" \
GEN_CFLAGS="-std=gnu++98 -nostdinc++" \
check_as_needed=
# check_as_needed overrides dependency on libgcc_s
define Build/Prepare
$(PKG_UNPACK)
$(SED) 's/\r$$$$//' $(PKG_BUILD_DIR)/include/unwind-cxx.h
$(Build/Patch)
endef
define Build/Configure
if [ -f ./files/config.$(UCLIBC_TARGET_ARCH) ]; then \
cp ./files/config.$(UCLIBC_TARGET_ARCH) $(PKG_BUILD_DIR)/.config; \
else \
cp ./files/config.default $(PKG_BUILD_DIR)/.config; \
fi
endef
define Build/InstallDev
$(INSTALL_DIR) $(2)/bin $(1)/usr/include/uClibc++ $(1)/usr/lib
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/
$(CP) $(PKG_INSTALL_DIR)/include/* $(1)/usr/include/uClibc++/
$(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++*.{a,so}* $(1)/usr/lib/
$(SED) 's!\(^\|[[:space:]]\)-[IL]$(TOOLCHAIN_DIR)/[^[:space:]]*!!g' $(TOOLCHAIN_DIR)/bin/g++-uc
$(SED) 's|-I/include/|-I$$$${STAGING_DIR:-$(STAGING_DIR)}/usr/include/uClibc++/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
$(SED) 's|-L/lib/|-L$$$${STAGING_DIR:-$(STAGING_DIR)}/lib/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
# add another wrapper which links against both uClibc++ and libstdc++
$(INSTALL_BIN) $(TOOLCHAIN_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/g++-uc+std
$(SED) 's|^WRAPPER_INCLUDEDIR=.*||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
$(SED) 's|-luClibc++|-Wl,-Bdynamic,-luClibc++,-Bstatic,-lstdc++,-Bdynamic|g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
$(SED) 's|-nostdinc++||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
endef
define Package/uclibcxx/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++.so.* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++-*.so $(1)/usr/lib/
endef
$(eval $(call BuildPackage,uclibcxx))

View File

@@ -0,0 +1,58 @@
#
# Automatically generated make config: don't edit
#
#
# Target Features and Options
#
UCLIBCXX_HAS_FLOATS=y
# UCLIBCXX_HAS_LONG_DOUBLE is not set
# UCLIBCXX_HAS_TLS is not set
WARNINGS="-Wall"
BUILD_EXTRA_LIBRARIES=""
HAVE_DOT_CONFIG=y
#
# String and I/O Stream Support
#
UCLIBCXX_HAS_WCHAR=y
UCLIBCXX_IOSTREAM_BUFSIZE=32
UCLIBCXX_HAS_LFS=y
UCLIBCXX_SUPPORT_CDIR=y
UCLIBCXX_SUPPORT_CIN=y
UCLIBCXX_SUPPORT_COUT=y
UCLIBCXX_SUPPORT_CERR=y
UCLIBCXX_SUPPORT_CLOG=y
UCLIBCXX_SUPPORT_WCIN=y
UCLIBCXX_SUPPORT_WCOUT=y
UCLIBCXX_SUPPORT_WCERR=y
UCLIBCXX_SUPPORT_WCLOG=y
#
# STL and Code Expansion
#
UCLIBCXX_STL_BUFFER_SIZE=32
UCLIBCXX_CODE_EXPANSION=y
UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS=y
UCLIBCXX_EXPAND_STRING_CHAR=y
UCLIBCXX_EXPAND_VECTOR_BASIC=y
UCLIBCXX_EXPAND_IOS_CHAR=y
UCLIBCXX_EXPAND_STREAMBUF_CHAR=y
UCLIBCXX_EXPAND_ISTREAM_CHAR=y
UCLIBCXX_EXPAND_OSTREAM_CHAR=y
UCLIBCXX_EXPAND_FSTREAM_CHAR=y
UCLIBCXX_EXPAND_SSTREAM_CHAR=y
#
# Library Installation Options
#
UCLIBCXX_RUNTIME_PREFIX=""
UCLIBCXX_RUNTIME_INCLUDE_SUBDIR="/include"
UCLIBCXX_RUNTIME_LIB_SUBDIR="/lib"
UCLIBCXX_RUNTIME_BIN_SUBDIR="/bin"
UCLIBCXX_EXCEPTION_SUPPORT=y
IMPORT_LIBSUP=y
# IMPORT_LIBGCC_EH is not set
BUILD_STATIC_LIB=y
# BUILD_ONLY_STATIC_LIB is not set
# DODEBUG is not set

View File

@@ -0,0 +1,11 @@
--- a/bin/Makefile
+++ b/bin/Makefile
@@ -13,7 +13,7 @@ install:
$(INSTALL) -m 755 $(WRAPPER) $(PREFIX)$(UCLIBCXX_RUNTIME_BINDIR)
$(WRAPPER): Makefile
- echo '#!/bin/sh' > $@
+ echo '#!/usr/bin/env bash' > $@
echo '' >> $@
echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $@
echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $@

View File

@@ -0,0 +1,38 @@
--- a/include/typeinfo
+++ b/include/typeinfo
@@ -44,6 +44,7 @@ namespace __cxxabiv1
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 @@ namespace __cxxabiv1
// On platforms that support weak symbols, typeinfo names are merged.
#define __GXX_MERGED_TYPEINFO_NAMES 1
#endif
+#endif
namespace std
{
--- a/include/unwind-cxx.h
+++ b/include/unwind-cxx.h
@@ -173,6 +173,7 @@ extern std::unexpected_handler __unexpec
// 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')
@@ -181,6 +182,9 @@ const _Unwind_Exception_Class __gxx_exce
<< 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

View File

@@ -0,0 +1,23 @@
--- a/src/Makefile
+++ b/src/Makefile
@@ -3,9 +3,9 @@ include $(TOPDIR)Rules.mak
WR_CXX := WRAPPER_INCLUDEDIR=-I$(TOPDIR)include $(TOPDIR)bin/g++-uc
-LDFLAGS += -nodefaultlibs -shared -Wl,-soname,$(SHARED_MAJORNAME) $(BUILD_EXTRA_LIBRARIES)
+EXTRA_LDFLAGS += -nodefaultlibs -shared -Wl,-soname,$(SHARED_MAJORNAME) $(BUILD_EXTRA_LIBRARIES)
ifneq ($(DODEBUG),y)
-LDFLAGS += -Wl,-s
+EXTRA_LDFLAGS += -Wl,-s
endif
SRCS = $(wildcard *.cpp)
@@ -60,7 +60,7 @@ $(LIBNAME).a: libgcc_eh libsupc $(EXOBJS
$(RANLIB) $@
$(SHARED_FULLNAME): libgcc_eh libsupc $(EXOBJS)
- $(CC) $(LDFLAGS) -o $@ $(EXOBJS) $(SUPOBJS) $(GCCOBJS) $(LIBS)
+ $(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) -o $@ $(EXOBJS) $(SUPOBJS) $(GCCOBJS) $(LIBS)
$(LN) $@ $(SHARED_MAJORNAME)
$(LN) $(SHARED_MAJORNAME) $(LIBNAME).so

View File

@@ -0,0 +1,22 @@
--- a/include/ostream
+++ b/include/ostream
@@ -294,7 +294,7 @@ namespace std {
#endif
#endif
- template <class charT,class traits = char_traits<charT> >
+ template <class charT,class traits>
class _UCXXEXPORT basic_ostream<charT,traits>::sentry
{
bool ok;
--- a/include/istream
+++ b/include/istream
@@ -340,7 +340,7 @@ namespace std{
};
- template <class charT,class traits = char_traits<charT> > class _UCXXEXPORT basic_istream<charT,traits>::sentry {
+ template <class charT,class traits> class _UCXXEXPORT basic_istream<charT,traits>::sentry {
bool ok;
public:
explicit _UCXXEXPORT sentry(basic_istream<charT,traits>& os, bool noskipws = false){

View File

@@ -0,0 +1,114 @@
From 1dc865b8bbb3911abc8ce53c7ae8a59dc90f6fc3 Mon Sep 17 00:00:00 2001
From: Ivan Kold <pixus.ru@gmail.com>
Date: Thu, 3 Mar 2016 12:56:30 -0800
Subject: [PATCH] Fix throw statement causing memory corruption
The __cxxabiv1::__cxa_throw in the GCC's libsupc++ expects
sizeof(__cxa_refcounted_exception) bytes be allocated before
exception object.
uClibc++ allocates only sizeof(__cxa_exception) before an
exception object.
The __cxxabiv1::__cxa_throw writes in memory before allocated:
// gcc-5.2.0/libstdc++-v3/libsupc++/eh_throw.cc:69
__cxa_refcounted_exception *header
= __get_refcounted_exception_header_from_obj (obj);
header->referenceCount = 1;
Signed-off-by: Ivan Kold <pixus.ru@gmail.com>
---
include/unwind-cxx.h | 34 +++++++++++++++++++++++++++++++++-
src/eh_alloc.cpp | 8 ++++----
2 files changed, 37 insertions(+), 5 deletions(-)
--- a/include/unwind-cxx.h
+++ b/include/unwind-cxx.h
@@ -1,5 +1,5 @@
// -*- C++ -*- Exception handling and frame unwind runtime interface routines.
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001-2015 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -13,6 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
// You should have received a copy of the GNU General Public License
// along with GCC; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330,
@@ -40,6 +44,12 @@
#include <cstddef>
#include "unwind.h"
+// Original unwind-cxx.h also includes bits/atomic_word.h which is CPU-specific,
+// but always defines _Atomic_word as typedef int .
+// Only thing that differs is memory-barrier macroses.
+typedef int _Atomic_word;
+
+
#pragma GCC visibility push(default)
namespace __cxxabiv1
@@ -79,6 +89,13 @@ struct __cxa_exception
_Unwind_Exception unwindHeader;
};
+struct __cxa_refcounted_exception
+{
+ // Manage this header.
+ _Atomic_word referenceCount;
+ // __cxa_exception must be last, and no padding can be after it.
+ __cxa_exception exc;
+};
// A dependent C++ exception object consists of a header, which is a wrapper
// around an unwind object header with additional C++ specific information,
@@ -210,6 +227,21 @@ __get_exception_header_from_ue (_Unwind_
return reinterpret_cast<__cxa_exception *>(exc + 1) - 1;
}
+// Acquire the C++ refcounted exception header from the C++ object.
+static inline __cxa_refcounted_exception *
+__get_refcounted_exception_header_from_obj (void *ptr)
+{
+ return reinterpret_cast<__cxa_refcounted_exception *>(ptr) - 1;
+}
+
+// Acquire the C++ refcounted exception header from the generic exception
+// header.
+static inline __cxa_refcounted_exception *
+__get_refcounted_exception_header_from_ue (_Unwind_Exception *exc)
+{
+ return reinterpret_cast<__cxa_refcounted_exception *>(exc + 1) - 1;
+}
+
} /* namespace __cxxabiv1 */
#pragma GCC visibility pop
--- a/src/eh_alloc.cpp
+++ b/src/eh_alloc.cpp
@@ -30,16 +30,16 @@ extern "C" void * __cxa_allocate_excepti
void *retval;
//The sizeof crap is required by Itanium ABI because we need to provide space for
//accounting information which is implementaion (gcc) specified
- retval = malloc (thrown_size + sizeof(__cxa_exception));
+ retval = malloc (thrown_size + sizeof(__cxa_refcounted_exception));
if (0 == retval){
std::terminate();
}
- memset (retval, 0, sizeof(__cxa_exception));
- return (void *)((unsigned char *)retval + sizeof(__cxa_exception));
+ memset (retval, 0, sizeof(__cxa_refcounted_exception));
+ return (void *)((unsigned char *)retval + sizeof(__cxa_refcounted_exception));
}
extern "C" void __cxa_free_exception(void *vptr) throw(){
- free( (char *)(vptr) - sizeof(__cxa_exception) );
+ free( (char *)(vptr) - sizeof(__cxa_refcounted_exception) );
}

View File

@@ -0,0 +1,20 @@
--- a/src/del_op.cpp
+++ b/src/del_op.cpp
@@ -24,3 +24,7 @@
_UCXXEXPORT void operator delete(void* ptr) throw(){
free(ptr);
}
+
+_UCXXEXPORT void operator delete(void* ptr, size_t size) throw(){
+ free(ptr);
+}
--- a/src/del_opv.cpp
+++ b/src/del_opv.cpp
@@ -24,3 +24,7 @@
_UCXXEXPORT void operator delete[](void * ptr) throw(){
free(ptr);
}
+
+_UCXXEXPORT void operator delete[](void * ptr, size_t size) throw(){
+ free(ptr);
+}

View File

@@ -0,0 +1,40 @@
From 946b29e62927eadfc4e87f27b8d30e5974b78c4c Mon Sep 17 00:00:00 2001
From: Ben Kelly <ben@benjii.net>
Date: Mon, 6 Feb 2017 13:08:25 +0200
Subject: [PATCH] Bugfix erase() on derived __base_associative
When calling erase() on a containers derived from __base_associative
(e.g. multimap) and providing a pair of iterators a segfault will
occur.
Example code to reproduce:
typedef std::multimap<int, int> testmap;
testmap t;
t.insert(std::pair<int, int>(1, 1));
t.insert(std::pair<int, int>(2, 1));
t.insert(std::pair<int, int>(3, 1));
t.erase(t.begin(), t.end());
Signed-off-by: Ben Kelly <ben@benjii.net>
---
include/associative_base | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/include/associative_base b/include/associative_base
index 27ae0ef..be8b27f 100644
--- a/include/associative_base
+++ b/include/associative_base
@@ -200,8 +200,7 @@ public:
}
void erase(iterator first, iterator last){
while(first != last){
- backing.erase(first.base_iterator());
- ++first;
+ first = backing.erase(first.base_iterator());
}
}
--
2.7.4