diff --git a/include/image.mk b/include/image.mk index d529f537c5..b3efd8af95 100644 --- a/include/image.mk +++ b/include/image.mk @@ -250,7 +250,7 @@ define Image/mkfs/squashfs "$(call mkfs_target_dir,$(1))" > $@.fakeroot-script echo "$(Image/mkfs/squashfs-common)" >> $@.fakeroot-script chmod +x $@.fakeroot-script - $(STAGING_DIR_HOST)/bin/fakeroot $@.fakeroot-script + $(FAKEROOT) "$@.fakeroot-script" endef else define Image/mkfs/squashfs diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk index 622cbf3223..0b7a561edc 100644 --- a/include/package-ipkg.mk +++ b/include/package-ipkg.mk @@ -9,10 +9,6 @@ ifndef DUMP include $(INCLUDE_DIR)/feeds.mk endif -# invoke ipkg-build with some default options -IPKG_BUILD:= \ - $(SCRIPT_DIR)/ipkg-build -c -o 0 -g 0 - IPKG_REMOVE:= \ $(SCRIPT_DIR)/ipkg-remove @@ -185,6 +181,7 @@ $$(call addfield,Depends,$$(Package/$(1)/DEPENDS) )$$(call addfield,LicenseFiles,$(LICENSE_FILES) )$$(call addfield,Section,$(SECTION) )$$(call addfield,Require-User,$(USERID) +)$$(call addfield,SourceDateEpoch,$(shell $(TOPDIR)/scripts/get_source_date_epoch.sh $(SOURCE)) )$(if $(PKG_CPE_ID),CPE-ID: $(PKG_CPE_ID) )$(if $(filter hold,$(PKG_FLAGS)),Status: unknown hold not-installed )$(if $(filter essential,$(PKG_FLAGS)),Essential: yes @@ -196,6 +193,7 @@ $(_endef) $$(IPKG_$(1)) : export CONTROL=$$(Package/$(1)/CONTROL) $$(IPKG_$(1)) : export DESCRIPTION=$$(Package/$(1)/description) $$(IPKG_$(1)) : export PATH=$$(TARGET_PATH_PKG) + $$(IPKG_$(1)) : export PKG_SOURCE_DATE_EPOCH=$(shell $(TOPDIR)/scripts/get_source_date_epoch.sh $(SOURCE)) $(PKG_INFO_DIR)/$(1).provides $$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk @rm -rf $$(IDIR_$(1)); \ $$(call remove_ipkg_files,$(1),$$(call opkg_package_files,$(call gen_ipkg_wildcard,$(1)))) @@ -262,7 +260,7 @@ $(_endef) endif $(INSTALL_DIR) $$(PDIR_$(1)) - $(IPKG_BUILD) $$(IDIR_$(1)) $$(PDIR_$(1)) + $(FAKEROOT) $(SCRIPT_DIR)/ipkg-build -m "$(PKG_FILE_MODES)" $$(IDIR_$(1)) $$(PDIR_$(1)) @[ -f $$(IPKG_$(1)) ] $(1)-clean: diff --git a/include/version.mk b/include/version.mk index 7d3c1ad640..b7f42e13bb 100644 --- a/include/version.mk +++ b/include/version.mk @@ -32,7 +32,7 @@ VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE)) VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION)) VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO)) -VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.openwrt.org/snapshots) +VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/snapshots) VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST)) VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt) diff --git a/package/Makefile b/package/Makefile index 58c1ba2bbf..f5373ee65d 100644 --- a/package/Makefile +++ b/package/Makefile @@ -84,7 +84,7 @@ $(curdir)/index: FORCE mkdir -p $$d; \ cd $$d || continue; \ $(SCRIPT_DIR)/ipkg-make-index.sh . 2>&1 > Packages.manifest; \ - grep -vE '^(Maintainer|LicenseFiles|Source|SourceName|Require)' Packages.manifest > Packages; \ + grep -vE '^(Maintainer|LicenseFiles|Source|SourceName|Require|SourceDateEpoch)' Packages.manifest > Packages; \ case "$$(((64 + $$(stat -L -c%s Packages)) % 128))" in 110|111) \ $(call ERROR_MESSAGE,WARNING: Applying padding in $$d/Packages to workaround usign SHA-512 bug!); \ { echo ""; echo ""; } >> Packages;; \ diff --git a/package/base-files/image-config.in b/package/base-files/image-config.in index 3432db525a..b5cd90f615 100644 --- a/package/base-files/image-config.in +++ b/package/base-files/image-config.in @@ -183,7 +183,7 @@ if VERSIONOPT config VERSION_REPO string prompt "Release repository" - default "http://downloads.openwrt.org/snapshots" + default "https://downloads.openwrt.org/snapshots" help This is the repository address embedded in the image, it defaults to the trunk snapshot repo; the url may contain the following placeholders: diff --git a/package/devel/strace/Makefile b/package/devel/strace/Makefile index cdf4067ad2..1a0c0f442f 100644 --- a/package/devel/strace/Makefile +++ b/package/devel/strace/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=strace -PKG_VERSION:=5.5 +PKG_VERSION:=5.8 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://strace.io/files/$(PKG_VERSION) -PKG_HASH:=9f58958c8e59ea62293d907d10572e352b582bd7948ed21aa28ebb47e5bf30ff +PKG_HASH:=df4a669f7fff9cc302784085bd4b72fab216a426a3f72c892b28a537b71e7aa9 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=LGPL-2.1-or-later @@ -32,10 +32,6 @@ include $(INCLUDE_DIR)/package.mk HOST_CFLAGS += -I$(LINUX_DIR)/user_headers/include -ifeq ($(ARCH),aarch64) - CONFIGURE_ARGS += --enable-mpers=check -endif - CONFIGURE_VARS+= \ LDFLAGS_FOR_BUILD="$(HOST_LDFLAGS)" \ CPPFLAGS_FOR_BUILD="$(HOST_CPPFLAGS)" \ @@ -73,7 +69,8 @@ endef CONFIGURE_ARGS += \ --with-libdw=$(if $(CONFIG_STRACE_LIBDW),yes,no) \ - --with-libunwind=$(if $(CONFIG_STRACE_LIBUNWIND),yes,no) + --with-libunwind=$(if $(CONFIG_STRACE_LIBUNWIND),yes,no) \ + --enable-mpers=no MAKE_FLAGS := \ CCOPT="$(TARGET_CFLAGS)" diff --git a/package/firmware/b43legacy-firmware/Makefile b/package/firmware/b43legacy-firmware/Makefile index 07c584f014..9b9c0070b2 100644 --- a/package/firmware/b43legacy-firmware/Makefile +++ b/package/firmware/b43legacy-firmware/Makefile @@ -12,7 +12,7 @@ PKG_VERSION:=3.130.20.0 PKG_RELEASE:=1 PKG_SOURCE:=wl_apsta-$(PKG_VERSION).o -PKG_SOURCE_URL:=http://downloads.openwrt.org/sources +PKG_SOURCE_URL:=https://downloads.openwrt.org/sources PKG_HASH:=7dba610b1d96dd14e901bcbce14cd6ecd1b1ac6f5c0035b0d6b6dc46a7c3ef90 include $(INCLUDE_DIR)/package.mk diff --git a/package/kernel/broadcom-wl/Makefile b/package/kernel/broadcom-wl/Makefile index 1e1447cde5..661c7f0589 100644 --- a/package/kernel/broadcom-wl/Makefile +++ b/package/kernel/broadcom-wl/Makefile @@ -13,7 +13,7 @@ PKG_VERSION:=5.10.56.27.3 PKG_RELEASE:=10 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(ARCH).tar.bz2 -PKG_SOURCE_URL:=http://downloads.openwrt.org/sources +PKG_SOURCE_URL:=https://downloads.openwrt.org/sources ifeq ($(ARCH),mipsel) PKG_HASH:=26a8c370f48fc129d0731cfd751c36cae1419b0bc8ca35781126744e60eae009 diff --git a/package/kernel/lantiq/ltq-vmmc/Makefile b/package/kernel/lantiq/ltq-vmmc/Makefile index def676b833..586d9f6c75 100644 --- a/package/kernel/lantiq/ltq-vmmc/Makefile +++ b/package/kernel/lantiq/ltq-vmmc/Makefile @@ -14,7 +14,7 @@ PKG_RELEASE:=4 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_HASH:=707f515eb727c032418c4da67d7e86884bb56cdc2a606e8f6ded6057d8767e57 -PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources +PKG_SOURCE_URL:=https://mirror2.openwrt.org/sources PKG_MAINTAINER:=John Crispin PKG_CHECK_FORMAT_SECURITY:=0 diff --git a/package/libs/libaudit/Makefile b/package/libs/libaudit/Makefile new file mode 100644 index 0000000000..f478ae5dd0 --- /dev/null +++ b/package/libs/libaudit/Makefile @@ -0,0 +1,93 @@ +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=libaudit +PKG_VERSION:=2.8.5 +PKG_RELEASE:=1 + +PKG_SOURCE_NAME:=audit +PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=http://people.redhat.com/sgrubb/audit +PKG_HASH:=0e5d4103646e00f8d1981e1cd2faea7a2ae28e854c31a803e907a383c5e2ecb7 +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_NAME)-$(PKG_VERSION) +PKG_MAINTAINER:=Thomas Petazzoni +PKG_LICENSE:=GPL-2.0 +PKG_LICENSE_FILES:=COPYING +PKG_CPE_ID:=cpe:/a:linux_audit_project:linux_audit + +PKG_FIXUP:=autoreconf + +PKG_USE_MIPS16:=0 +PKG_INSTALL:=1 + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk + +define Package/libaudit + CATEGORY:=Libraries + TITLE:=Linux Auditing Framework (shared library) + URL:=http://people.redhat.com/sgrubb/audit/ +endef + +define Package/libaudit/description + This package contains the audit shared library. +endef + +CONFIGURE_VARS += \ + LDFLAGS_FOR_BUILD="$(HOST_LDFLAGS)" \ + CPPFLAGS_FOR_BUILD="$(HOST_CPPFLAGS)" \ + CFLAGS_FOR_BUILD="$(HOST_CFLAGS)" \ + CC_FOR_BUILD="$(HOSTCC)" + +CONFIGURE_ARGS += \ + --without-libcap-ng \ + --disable-systemd \ + --without-python \ + --without-python3 \ + --disable-zos-remote + +HOST_CONFIGURE_ARGS += \ + --without-python \ + --without-python3 \ + --disable-zos-remote \ + --without-libcap-ng + +ifeq ($(ARCH),aarch64) +CONFIGURE_ARGS += --with-aarch64 +else ifeq ($(ARCH),arm) +CONFIGURE_ARGS += --with-arm +endif + +# We can't use the default, as the default passes $(MAKE_ARGS), which +# overrides CC, CFLAGS, etc. and defeats the *_FOR_BUILD definitions +# passed in CONFIGURE_VARS +define Build/Compile + $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib +endef + +define Build/Install + $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib $(MAKE_INSTALL_FLAGS) install + $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(MAKE_PATH)/init.d $(MAKE_INSTALL_FLAGS) install +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include + $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/ + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc $(1)/usr/lib/pkgconfig/ + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/ +endef + +define Package/libaudit/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so.* $(1)/usr/lib/ + $(INSTALL_DIR) $(1)/etc + $(CP) $(PKG_INSTALL_DIR)/etc/libaudit.conf $(1)/etc/ +endef + +$(eval $(call BuildPackage,libaudit)) diff --git a/package/libs/libaudit/patches/0001-Add-substitue-functions-for-strndupa-rawmemchr.patch b/package/libs/libaudit/patches/0001-Add-substitue-functions-for-strndupa-rawmemchr.patch new file mode 100644 index 0000000000..ac292c57d1 --- /dev/null +++ b/package/libs/libaudit/patches/0001-Add-substitue-functions-for-strndupa-rawmemchr.patch @@ -0,0 +1,133 @@ +From c39a071e7c021f6ff3554aca2758e97b47a9777c Mon Sep 17 00:00:00 2001 +From: Steve Grubb +Date: Tue, 26 Feb 2019 18:33:33 -0500 +Subject: [PATCH] Add substitue functions for strndupa & rawmemchr + +(cherry picked from commit d579a08bb1cde71f939c13ac6b2261052ae9f77e) +Signed-off-by: Thomas Petazzoni +--- + auparse/auparse.c | 12 +++++++++++- + auparse/interpret.c | 9 ++++++++- + configure.ac | 14 +++++++++++++- + src/ausearch-lol.c | 12 +++++++++++- + 4 files changed, 43 insertions(+), 4 deletions(-) + +diff --git a/auparse/auparse.c b/auparse/auparse.c +index 650db02..2e1c737 100644 +--- a/auparse/auparse.c ++++ b/auparse/auparse.c +@@ -1,5 +1,5 @@ + /* auparse.c -- +- * Copyright 2006-08,2012-17 Red Hat Inc., Durham, North Carolina. ++ * Copyright 2006-08,2012-19 Red Hat Inc., Durham, North Carolina. + * All Rights Reserved. + * + * This library is free software; you can redistribute it and/or +@@ -1118,6 +1118,16 @@ static int str2event(char *s, au_event_t *e) + return 0; + } + ++#ifndef HAVE_STRNDUPA ++static inline char *strndupa(const char *old, size_t n) ++{ ++ size_t len = strnlen(old, n); ++ char *tmp = alloca(len + 1); ++ tmp[len] = 0; ++ return memcpy(tmp, old, len); ++} ++#endif ++ + /* Returns 0 on success and 1 on error */ + static int extract_timestamp(const char *b, au_event_t *e) + { +diff --git a/auparse/interpret.c b/auparse/interpret.c +index 51c4a5e..67b7b77 100644 +--- a/auparse/interpret.c ++++ b/auparse/interpret.c +@@ -853,6 +853,13 @@ err_out: + return print_escaped(id->val); + } + ++// rawmemchr is faster. Let's use it if we have it. ++#ifdef HAVE_RAWMEMCHR ++#define STRCHR rawmemchr ++#else ++#define STRCHR strchr ++#endif ++ + static const char *print_proctitle(const char *val) + { + char *out = (char *)print_escaped(val); +@@ -863,7 +870,7 @@ static const char *print_proctitle(const char *val) + // Proctitle has arguments separated by NUL bytes + // We need to write over the NUL bytes with a space + // so that we can see the arguments +- while ((ptr = rawmemchr(ptr, '\0'))) { ++ while ((ptr = STRCHR(ptr, '\0'))) { + if (ptr >= end) + break; + *ptr = ' '; +diff --git a/configure.ac b/configure.ac +index 6e345f1..6f3007e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,7 +1,7 @@ + dnl + define([AC_INIT_NOTICE], + [### Generated automatically using autoconf version] AC_ACVERSION [ +-### Copyright 2005-18 Steve Grubb ++### Copyright 2005-19 Steve Grubb + ### + ### Permission is hereby granted, free of charge, to any person obtaining a + ### copy of this software and associated documentation files (the "Software"), +@@ -72,6 +72,18 @@ dnl; posix_fallocate is used in audisp-remote + AC_CHECK_FUNCS([posix_fallocate]) + dnl; signalfd is needed for libev + AC_CHECK_FUNC([signalfd], [], [ AC_MSG_ERROR([The signalfd system call is necessary for auditd]) ]) ++dnl; check if rawmemchr is available ++AC_CHECK_FUNCS([rawmemchr]) ++dnl; check if strndupa is available ++AC_LINK_IFELSE( ++ [AC_LANG_SOURCE( ++ [[ ++ #define _GNU_SOURCE ++ #include ++ int main() { (void) strndupa("test", 10); return 0; }]])], ++ [AC_DEFINE(HAVE_STRNDUPA, 1, [Let us know if we have it or not])], ++ [] ++) + + ALLWARNS="" + ALLDEBUG="-g" +diff --git a/src/ausearch-lol.c b/src/ausearch-lol.c +index 5d17a72..758c33e 100644 +--- a/src/ausearch-lol.c ++++ b/src/ausearch-lol.c +@@ -1,6 +1,6 @@ + /* + * ausearch-lol.c - linked list of linked lists library +-* Copyright (c) 2008,2010,2014,2016 Red Hat Inc., Durham, North Carolina. ++* Copyright (c) 2008,2010,2014,2016,2019 Red Hat Inc., Durham, North Carolina. + * All Rights Reserved. + * + * This software may be freely redistributed and/or modified under the +@@ -152,6 +152,16 @@ static int compare_event_time(event *e1, event *e2) + return 0; + } + ++#ifndef HAVE_STRNDUPA ++static inline char *strndupa(const char *old, size_t n) ++{ ++ size_t len = strnlen(old, n); ++ char *tmp = alloca(len + 1); ++ tmp[len] = 0; ++ return memcpy(tmp, old, len); ++} ++#endif ++ + /* + * This function will look at the line and pick out pieces of it. + */ +-- +2.21.0 + diff --git a/package/libs/libaudit/patches/0002-fix-gcc-10.patch b/package/libs/libaudit/patches/0002-fix-gcc-10.patch new file mode 100644 index 0000000000..5986cf0e42 --- /dev/null +++ b/package/libs/libaudit/patches/0002-fix-gcc-10.patch @@ -0,0 +1,26 @@ +From 017e6c6ab95df55f34e339d2139def83e5dada1f Mon Sep 17 00:00:00 2001 +From: Steve Grubb +Date: Fri, 10 Jan 2020 21:13:50 -0500 +Subject: [PATCH 01/30] Header definitions need to be external when building + with -fno-common (which is default in GCC 10) - Tony Jones + +--- + src/ausearch-common.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/ausearch-common.h b/src/ausearch-common.h +index 6669203..3040547 100644 +--- a/src/ausearch-common.h ++++ b/src/ausearch-common.h +@@ -50,7 +50,7 @@ extern pid_t event_pid; + extern int event_exact_match; + extern uid_t event_uid, event_euid, event_loginuid; + extern const char *event_tuid, *event_teuid, *event_tauid; +-slist *event_node_list; ++extern slist *event_node_list; + extern const char *event_comm; + extern const char *event_filename; + extern const char *event_hostname; +-- +2.26.2 + diff --git a/package/libs/libcxx/Makefile b/package/libs/libcxx/Makefile index 8343cbb427..3809bea651 100644 --- a/package/libs/libcxx/Makefile +++ b/package/libs/libcxx/Makefile @@ -7,19 +7,20 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libcxx -PKG_VERSION:=9.0.1 -PKG_RELEASE:=4 +PKG_VERSION:=10.0.0 +PKG_RELEASE:=1 -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://git.llvm.org/git/libcxx -PKG_SOURCE_VERSION:=2076f539f410805ef88692b9c0ce0a0b882a7680 -PKG_MIRROR_HASH:=d527880a18dec9109575c76717cf5288fb91c11381b9d261cae2e5bebcbdab2e +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).src.tar.xz +PKG_SOURCE_URL:=https://github.com/llvm/llvm-project/releases/download/llvmorg-$(PKG_VERSION) +PKG_HASH:=270f8a3f176f1981b0f6ab8aa556720988872ec2b48ed3b605d0ced8d09156c7 +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION).src PKG_MAINTAINER:=Rosen Penev PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE.txt PKG_BUILD_PARALLEL:=1 +PKG_BUILD_DEPENDS:=libcxxabi CMAKE_BINARY_SUBDIR:=build include $(INCLUDE_DIR)/package.mk @@ -34,12 +35,11 @@ define Package/libcxx endef define Package/libcxx/description - LLVM C++ library targeting C++11 and above + libc++ is an implementation of the C++ standard library, targeting C++11, C++14 and above. endef CMAKE_OPTIONS += \ - -DLIBCXX_CXX_ABI="libsupc++" \ - -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/include/c++/$(CONFIG_GCC_VERSION);$(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/include/c++/$(CONFIG_GCC_VERSION)/$(REAL_GNU_TARGET_NAME)" \ + -DLIBCXX_CXX_ABI="libcxxabi" \ -DLIBCXX_ENABLE_ASSERTIONS=OFF \ -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \ -DLIBCXX_INCLUDE_BENCHMARKS=OFF \ diff --git a/package/libs/libcxx/files/g++-libcxx b/package/libs/libcxx/files/g++-libcxx index 81ca46eb0e..88b3e7da01 100755 --- a/package/libs/libcxx/files/g++-libcxx +++ b/package/libs/libcxx/files/g++-libcxx @@ -13,7 +13,7 @@ do -static) [ "$WRAPPER_LIBS" != "-lc -lgcc_s -lssp_nonshared -lgcc_eh" ] && WRAPPER_LIBS="-lc -lgcc_s -lssp_nonshared -lgcc_eh" ;; esac done -[ "$WRAPPER_INCLIB" = "Y" ] && WRAPPER_OPTIONS="-nodefaultlibs $WRAPPER_LIBDIR -lc++ -lsupc++ $WRAPPER_LIBS" +[ "$WRAPPER_INCLIB" = "Y" ] && WRAPPER_OPTIONS="-nodefaultlibs $WRAPPER_LIBDIR -lc++ -lc++abi $WRAPPER_LIBS" -exec CXX -fno-builtin -nostdinc++ -DGCC_HASCLASSVISIBILITY "$WRAPPER_INCLUDEDIR" "$@" $WRAPPER_OPTIONS +exec CXX -nostdinc++ -DGCC_HASCLASSVISIBILITY "$WRAPPER_INCLUDEDIR" "$@" $WRAPPER_OPTIONS diff --git a/package/libs/libcxx/patches/010-cxx17.patch b/package/libs/libcxx/patches/010-cxx17.patch deleted file mode 100644 index dceec9d4f3..0000000000 --- a/package/libs/libcxx/patches/010-cxx17.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -524,9 +524,9 @@ remove_flags(-Wno-pedantic -pedantic-err - if (LIBCXX_HAS_MUSL_LIBC OR LIBCXX_TARGETING_CLANG_CL) - # musl's pthread implementations uses volatile types in their structs which is - # not a constexpr in C++11 but is in C++14, so we use C++14 with musl. -- set(LIBCXX_STANDARD_VER c++14 CACHE STRING "internal option to change build dialect") -+ set(LIBCXX_STANDARD_VER c++2a CACHE STRING "internal option to change build dialect") - else() -- set(LIBCXX_STANDARD_VER c++11 CACHE STRING "internal option to change build dialect") -+ set(LIBCXX_STANDARD_VER c++2a CACHE STRING "internal option to change build dialect") - endif() - add_compile_flags_if_supported(-std=${LIBCXX_STANDARD_VER}) - add_compile_flags_if_supported("/std:${LIBCXX_STANDARD_VER}") diff --git a/package/libs/libcxx/patches/010-ssp.patch b/package/libs/libcxx/patches/010-ssp.patch new file mode 100644 index 0000000000..f83c7b9b56 --- /dev/null +++ b/package/libs/libcxx/patches/010-ssp.patch @@ -0,0 +1,13 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -760,6 +760,10 @@ function(cxx_link_system_libraries targe + target_link_libraries(${target} PRIVATE atomic) + endif() + ++ if (LIBCXX_HAS_MUSL_LIBC) ++ target_link_libraries(${target} PRIVATE ssp_nonshared) ++ endif() ++ + if (MINGW) + target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}") + endif() diff --git a/package/libs/libcxx/patches/020-fixes.patch b/package/libs/libcxx/patches/020-fixes.patch deleted file mode 100644 index 22ac494c04..0000000000 --- a/package/libs/libcxx/patches/020-fixes.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- a/include/cmath -+++ b/include/cmath -@@ -615,7 +615,7 @@ _Fp __lerp(_Fp __a, _Fp __b, _Fp __t) no - - if (__t == 1) return __b; - const _Fp __x = __a + __t * (__b - __a); -- if (__t > 1 == __b > __a) -+ if ((__t > 1) == (__b > __a)) - return __b < __x ? __x : __b; - else - return __x < __b ? __x : __b; ---- a/include/memory -+++ b/include/memory -@@ -1696,7 +1696,7 @@ struct _LIBCPP_TEMPLATE_VIS allocator_tr - ptrdiff_t _Np = __end1 - __begin1; - __end2 -= _Np; - if (_Np > 0) -- _VSTD::memcpy(__end2, __begin1, _Np * sizeof(_Tp)); -+ __end2 = __begin1; - } - - private: ---- a/src/filesystem/filesystem_common.h -+++ b/src/filesystem/filesystem_common.h -@@ -197,8 +197,8 @@ private: - using chrono::duration; - using chrono::duration_cast; - --using TimeSpec = struct ::timespec; --using StatT = struct ::stat; -+using TimeSpec = struct timespec; -+using StatT = struct stat; - - template ::value> diff --git a/package/libs/libcxxabi/Makefile b/package/libs/libcxxabi/Makefile new file mode 100644 index 0000000000..90547561b2 --- /dev/null +++ b/package/libs/libcxxabi/Makefile @@ -0,0 +1,71 @@ + +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=libcxxabi +PKG_VERSION:=10.0.0 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).src.tar.xz +PKG_SOURCE_URL:=https://github.com/llvm/llvm-project/releases/download/llvmorg-$(PKG_VERSION) +PKG_HASH:=e71bac75a88c9dde455ad3f2a2b449bf745eafd41d2d8432253b2964e0ca14e1 +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION).src + +PKG_MAINTAINER:=Rosen Penev +PKG_LICENSE:=MIT +PKG_LICENSE_FILES:=LICENSE.txt + +PKG_BUILD_PARALLEL:=1 +CMAKE_BINARY_SUBDIR:=build + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +define Package/libcxxabi + SECTION:=libs + CATEGORY:=Libraries + TITLE:=LLVM lib++abi + URL:=https://libcxxabi.llvm.org/ + DEPENDS:=+libpthread + BUILDONLY:=1 +endef + +define Package/libcxxabi/description + libc++abi is a new implementation of low level support for a standard C++ library. +endef + +CMAKE_OPTIONS += \ + -DLIBCXXABI_ENABLE_EXCEPTIONS=ON \ + -DLIBCXXABI_ENABLE_PEDANTIC=OFF \ + -DLIBCXXABI_ENABLE_PIC=ON \ + -DLIBCXXABI_ENABLE_WERROR=OFF \ + -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \ + -DLIBCXXABI_USE_COMPILER_RT=OFF \ + -DLIBCXXABI_ENABLE_THREADS=ON \ + -DLIBCXXABI_HAS_PTHREAD_API=ON \ + -DLIBCXXABI_INCLUDE_TESTS=OFF \ + -DLIBCXXABI_LIBDIR_SUFFIX="" \ + -DLIBCXXABI_INSTALL_LIBRARY=ON \ + -DLIBCXXABI_ENABLE_SHARED=OFF \ + -DLIBCXXABI_LIBCXX_SRC_DIR=$(BUILD_DIR)/libcxx-$(PKG_VERSION).src \ + -DLIBCXXABI_LIBCXX_INCLUDES=$(BUILD_DIR)/libcxx-$(PKG_VERSION).src/include + +TARGET_CXXFLAGS += -flto +TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed + +define Build/Prepare + $(MAKE) -C $(TOPDIR)/package/libs/libcxx prepare + $(call Build/Prepare/Default) +endef + +define Build/InstallDev + $(call Build/InstallDev/cmake,$(1)) + $(INSTALL_DIR) $(1)/usr/include/ + $(INSTALL_DATA) $(PKG_BUILD_DIR)/include/*.h $(1)/usr/include/ +endef + +$(eval $(call BuildPackage,libcxxabi)) diff --git a/package/libs/libcxxabi/patches/010-arm.patch b/package/libs/libcxxabi/patches/010-arm.patch new file mode 100644 index 0000000000..b14609dc62 --- /dev/null +++ b/package/libs/libcxxabi/patches/010-arm.patch @@ -0,0 +1,27 @@ +--- a/src/cxa_exception.h ++++ b/src/cxa_exception.h +@@ -27,6 +27,13 @@ _LIBCXXABI_HIDDEN uint64_t __getExceptio + _LIBCXXABI_HIDDEN void __setExceptionClass ( _Unwind_Exception*, uint64_t); + _LIBCXXABI_HIDDEN bool __isOurExceptionClass(const _Unwind_Exception*); + ++#if defined(__arm__) && defined(__GNUC__) ++// missing values from _Unwind_Reason_Code enum ++#define _URC_FATAL_PHASE2_ERROR ((_Unwind_Reason_Code)2) ++#define _URC_FATAL_PHASE1_ERROR ((_Unwind_Reason_Code)3) ++#define _URC_NORMAL_STOP ((_Unwind_Reason_Code)4) ++#endif ++ + struct _LIBCXXABI_HIDDEN __cxa_exception { + #if defined(__LP64__) || defined(_WIN64) || defined(_LIBCXXABI_ARM_EHABI) + // Now _Unwind_Exception is marked with __attribute__((aligned)), +--- a/src/cxa_personality.cpp ++++ b/src/cxa_personality.cpp +@@ -1108,7 +1108,7 @@ __gxx_personality_v0(_Unwind_State state + + // Check the undocumented force unwinding behavior + bool is_force_unwinding = state & _US_FORCE_UNWIND; +- state &= ~_US_FORCE_UNWIND; ++ state = (_Unwind_State)(state & ~_US_FORCE_UNWIND); + + scan_results results; + switch (state) { diff --git a/package/libs/libsemanage/Makefile b/package/libs/libsemanage/Makefile new file mode 100644 index 0000000000..e9df128653 --- /dev/null +++ b/package/libs/libsemanage/Makefile @@ -0,0 +1,71 @@ +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=libsemanage +PKG_VERSION:=3.1 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/SELinuxProject/selinux/releases/download/20200710 +PKG_HASH:=22d6c75526e40d1781c30bcf29abf97171bdfe6780923f11c8e1c76a75a21ff8 +PKG_MAINTAINER:=Thomas Petazzoni +PKG_LICENSE:=LGPL-2.1 +PKG_LICENSE_FILES:=COPYING +PKG_CPE_ID:=cpe:/a:selinuxproject:libsemanage + + +HOST_BUILD_DEPENDS:=audit/host libselinux/host bzip2/host + + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk + +PKG_INSTALL:=1 + +define Package/libsemanage + SECTION:=libs + DEPENDS:=+libaudit +libselinux +libbz2 + CATEGORY:=Libraries + TITLE:=SELinux policy management library + URL:=http://selinuxproject.org/page/Main_Page +endef + +define Package/libsemanage/description + libsemanage is the policy management library. It uses + libsepol for binary policy manipulation and libselinux for + interacting with the SELinux system. It also exec's helper + programs for loading policy and for checking whether the + file_contexts configuration is valid (load_policy and + setfiles from policycoreutils) presently, although this may + change at least for the bootstrapping case (for rpm). +endef #' + + +HOST_MAKE_FLAGS += \ + DESTDIR=$(STAGING_DIR_HOSTPKG) \ + PREFIX="" + + +define Build/Configure +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include + $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/ + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libsemanage.pc $(1)/usr/lib/pkgconfig/ + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/ +endef + +define Package/libsemanage/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsemanage.so.* $(1)/usr/lib/ +endef + +$(eval $(call HostBuild)) +$(eval $(call BuildPackage,libsemanage)) diff --git a/package/libs/wolfssl/Config.in b/package/libs/wolfssl/Config.in index 4ac69f821a..c2f66589e6 100644 --- a/package/libs/wolfssl/Config.in +++ b/package/libs/wolfssl/Config.in @@ -16,6 +16,10 @@ config WOLFSSL_HAS_ARC4 bool "Include ARC4 support" default y +config WOLFSSL_HAS_CERTGEN + bool "Include certificate generation support" + default y + config WOLFSSL_HAS_TLSV10 bool "Include TLS 1.0 support" default y diff --git a/package/libs/wolfssl/Makefile b/package/libs/wolfssl/Makefile index eb77caee33..1fcca9fc5f 100644 --- a/package/libs/wolfssl/Makefile +++ b/package/libs/wolfssl/Makefile @@ -31,7 +31,7 @@ PKG_CONFIG_DEPENDS:=\ CONFIG_WOLFSSL_HAS_DH CONFIG_WOLFSSL_HAS_DTLS \ CONFIG_WOLFSSL_HAS_ECC25519 CONFIG_WOLFSSL_HAS_OCSP \ CONFIG_WOLFSSL_HAS_SESSION_TICKET CONFIG_WOLFSSL_HAS_TLSV10 \ - CONFIG_WOLFSSL_HAS_TLSV13 CONFIG_WOLFSSL_HAS_WPAS + CONFIG_WOLFSSL_HAS_TLSV13 CONFIG_WOLFSSL_HAS_WPAS CONFIG_WOLFSSL_HAS_CERTGEN include $(INCLUDE_DIR)/package.mk @@ -67,6 +67,7 @@ CONFIGURE_ARGS += \ --disable-jobserver \ --$(if $(CONFIG_IPV6),enable,disable)-ipv6 \ --$(if $(CONFIG_WOLFSSL_HAS_AES_CCM),enable,disable)-aesccm \ + --$(if $(CONFIG_WOLFSSL_HAS_CERTGEN),enable,disable)-certgen \ --$(if $(CONFIG_WOLFSSL_HAS_CHACHA_POLY),enable,disable)-chacha \ --$(if $(CONFIG_WOLFSSL_HAS_CHACHA_POLY),enable,disable)-poly1305 \ --$(if $(CONFIG_WOLFSSL_HAS_DH),enable,disable)-dh \ diff --git a/package/network/utils/bpftools/Makefile b/package/network/utils/bpftools/Makefile new file mode 100644 index 0000000000..156dc8a4fa --- /dev/null +++ b/package/network/utils/bpftools/Makefile @@ -0,0 +1,162 @@ +# +# Copyright (C) 2020 Tony Ambardar +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=bpftools +PKG_VERSION:=5.8.3 +PKG_RELEASE:=1 + +PKG_SOURCE:=linux-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=@KERNEL/linux/kernel/v5.x +PKG_HASH:=8ea27e1ed38981f772cc6d5f16ab8dbb8052c3800ba0494bd798fbb95dcc1779 + +PKG_MAINTAINER:=Tony Ambardar + +PKG_USE_MIPS16:=0 +PKG_BUILD_PARALLEL:=1 +PKG_INSTALL:=1 + +LINUX_VERSION:=$(PKG_VERSION) +LINUX_TLD:=linux-$(LINUX_VERSION) + +BPF_FILES:= \ + kernel/bpf scripts tools/Makefile tools/bpf tools/perf/perf-sys.h \ + tools/arch tools/build tools/include tools/lib tools/scripts +TAR_OPTIONS+= \ + --transform="s;$(LINUX_TLD)/;$(PKG_NAME)-$(PKG_VERSION)/;" \ + $(addprefix $(LINUX_TLD)/,$(BPF_FILES)) + +include $(INCLUDE_DIR)/package.mk + +define Package/bpftool/Default + SECTION:=net + CATEGORY:=Network + TITLE:=bpftool - eBPF subsystem utility + LICENSE:=GPL-2.0-only OR BSD-2-Clause + URL:=http://www.kernel.org + DEPENDS:=+libelf +endef + +define Package/bpftool-minimal + $(call Package/bpftool/Default) + TITLE+= (Minimal) + VARIANT:=minimal + DEFAULT_VARIANT:=1 + PROVIDES:=bpftool + ALTERNATIVES:=200:/usr/sbin/bpftool:/usr/libexec/bpftool-minimal +endef + +define Package/bpftool-full + $(call Package/bpftool/Default) + TITLE+= (Full) + VARIANT:=full + PROVIDES:=bpftool + ALTERNATIVES:=300:/usr/sbin/bpftool:/usr/libexec/bpftool-full + DEPENDS+= +libbfd +libopcodes +endef + +define Package/bpftool-minimal/description + A tool for inspection and simple manipulation of eBPF programs and maps. +endef + +define Package/bpftool-full/description + A tool for inspection and simple manipulation of eBPF programs and maps. + This full version uses libbfd and libopcodes to support disassembly of + eBPF programs and jited code. +endef + +define Package/libbpf + SECTION:=libs + CATEGORY:=Libraries + TITLE:=libbpf - eBPF helper library + VARIANT:=lib + LICENSE:=LGPL-2.1 OR BSD-2-Clause + ABI_VERSION:=0 + URL:=http://www.kernel.org + DEPENDS:=+libelf +endef + +define Package/libbpf/description + libbpf is a library for loading eBPF programs and reading and manipulating eBPF objects from user-space. +endef + + +# LTO not compatible with DSO using PIC +ifneq ($(BUILD_VARIANT),lib) + TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto + TARGET_LDFLAGS += -Wl,--gc-sections +endif + +MAKE_FLAGS += \ + EXTRA_CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + BPFTOOL_VERSION="$(LINUX_VERSION)" \ + FEATURES_DUMP="$(PKG_BUILD_DIR)/FEATURE-DUMP.openwrt" \ + OUTPUT="$(PKG_BUILD_DIR)/" \ + prefix="/usr" \ + $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') + +ifeq ($(BUILD_VARIANT),full) + HAVE_LIBBFD:=1 + HAVE_LIBCAP:=0 + HAVE_CLANG:=0 + MAKE_PATH:=tools/bpf/bpftool +else ifeq ($(BUILD_VARIANT),minimal) + HAVE_LIBBFD:=0 + HAVE_LIBCAP:=0 + HAVE_CLANG:=0 + MAKE_PATH:=tools/bpf/bpftool +else ifeq ($(BUILD_VARIANT),lib) + HAVE_LIBBFD:=0 + HAVE_LIBCAP:=0 + HAVE_CLANG:=0 + MAKE_PATH:=tools/lib/bpf +endif + +# Perform a "throw-away" make to create a FEATURE-DUMP.* file to edit later. +# The "//" in the make target is actually needed, very unPOSIXly. +define Build/Configure + +$(MAKE_VARS) $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/tools/bpf/bpftool \ + $(MAKE_FLAGS) FEATURES_DUMP= $(PKG_BUILD_DIR)//libbpf/libbpf.a + (cd $(PKG_BUILD_DIR); cat FEATURE-DUMP.bpftool libbpf/FEATURE-DUMP.libbpf \ + | sort | uniq > FEATURE-DUMP.openwrt) + $(SED) 's/feature-libbfd=[01]/feature-libbfd=$(HAVE_LIBBFD)/' \ + -e 's/feature-libcap=[01]/feature-libcap=$(HAVE_LIBCAP)/' \ + -e 's/feature-clang-bpf-global-var=[01]/feature-clang-bpf-global-var=$(HAVE_CLANG)/' \ + $(PKG_BUILD_DIR)/FEATURE-DUMP.openwrt +endef + +define Build/InstallDev/libbpf + $(INSTALL_DIR) $(1)/usr/include/bpf + $(CP) $(PKG_INSTALL_DIR)/usr/include/bpf/*.h $(1)/usr/include/bpf/ + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib$(LIB_SUFFIX)/libbpf.{a,so*} \ + $(1)/usr/lib/ + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + $(CP) $(PKG_INSTALL_DIR)/usr/lib$(LIB_SUFFIX)/pkgconfig/libbpf.pc \ + $(1)/usr/lib/pkgconfig/ +endef + +ifeq ($(BUILD_VARIANT),lib) + Build/InstallDev=$(Build/InstallDev/libbpf) +endif + +define Package/bpftool-$(BUILD_VARIANT)/install + $(INSTALL_DIR) $(1)/usr/libexec + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/bpftool \ + $(1)/usr/libexec/bpftool-$(BUILD_VARIANT) +endef + +define Package/libbpf/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib$(LIB_SUFFIX)/libbpf.so.* $(1)/usr/lib/ +endef + +$(eval $(call BuildPackage,bpftool-full)) +$(eval $(call BuildPackage,bpftool-minimal)) +$(eval $(call BuildPackage,libbpf)) diff --git a/package/network/utils/bpftools/patches/001-libbpf-ensure-no-local-symbols-counted-in-ABI-check.patch b/package/network/utils/bpftools/patches/001-libbpf-ensure-no-local-symbols-counted-in-ABI-check.patch new file mode 100644 index 0000000000..0b223644dc --- /dev/null +++ b/package/network/utils/bpftools/patches/001-libbpf-ensure-no-local-symbols-counted-in-ABI-check.patch @@ -0,0 +1,36 @@ +From fafb2e7eaec6d33ce16e28f481edf781219d5d27 Mon Sep 17 00:00:00 2001 +From: Tony Ambardar +Date: Fri, 24 Jul 2020 23:58:17 -0700 +Subject: [PATCH] tools/libbpf: ensure no local symbols counted in ABI check + +This avoids finding versioned local symbols such as _init and _fini in +the libbpf.so file. + +Signed-off-by: Tony Ambardar +--- + tools/lib/bpf/Makefile | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile +index bf8ed134cb8a..c820b0be9d63 100644 +--- a/tools/lib/bpf/Makefile ++++ b/tools/lib/bpf/Makefile +@@ -152,6 +152,7 @@ GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \ + awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ + sort -u | wc -l) + VERSIONED_SYM_COUNT = $(shell readelf --dyn-syms --wide $(OUTPUT)libbpf.so | \ ++ awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ + grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) + + CMD_TARGETS = $(LIB_TARGET) $(PC_FILE) +@@ -219,6 +220,7 @@ check_abi: $(OUTPUT)libbpf.so + awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ + sort -u > $(OUTPUT)libbpf_global_syms.tmp; \ + readelf --dyn-syms --wide $(OUTPUT)libbpf.so | \ ++ awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ + grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | \ + sort -u > $(OUTPUT)libbpf_versioned_syms.tmp; \ + diff -u $(OUTPUT)libbpf_global_syms.tmp \ +-- +2.25.1 + diff --git a/package/network/utils/bpftools/patches/002-libbpf-fix-build-failure-from-uninitialized-variable.patch b/package/network/utils/bpftools/patches/002-libbpf-fix-build-failure-from-uninitialized-variable.patch new file mode 100644 index 0000000000..a61d0930f8 --- /dev/null +++ b/package/network/utils/bpftools/patches/002-libbpf-fix-build-failure-from-uninitialized-variable.patch @@ -0,0 +1,46 @@ +From 74d0dcf7608b1bab116e297468ac51b57eb97ce0 Mon Sep 17 00:00:00 2001 +From: Tony Ambardar +Date: Thu, 20 Aug 2020 10:06:24 -0700 +Subject: [PATCH] libbpf: fix build failure from uninitialized variable warning + +While compiling libbpf, some GCC versions (at least 8.4.0) have difficulty +determining control flow and a emit warning for potentially uninitialized +usage of 'map', which results in a build error if using "-Werror": + +In file included from libbpf.c:56: +libbpf.c: In function '__bpf_object__open': +libbpf_internal.h:59:2: warning: 'map' may be used uninitialized in this function [-Wmaybe-uninitialized] + libbpf_print(level, "libbpf: " fmt, ##__VA_ARGS__); \ + ^~~~~~~~~~~~ +libbpf.c:5032:18: note: 'map' was declared here + struct bpf_map *map, *targ_map; + ^~~ + +The warning/error is false based on code inspection, so silence it with a +NULL initialization. + +Fixes: 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map support") +Ref: 063e68813391 ("libbpf: Fix false uninitialized variable warning") + +Signed-off-by: Tony Ambardar +--- + tools/lib/bpf/libbpf.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c +index 11e4725b8b1c..a72296797357 100644 +--- a/tools/lib/bpf/libbpf.c ++++ b/tools/lib/bpf/libbpf.c +@@ -5028,8 +5028,8 @@ static int bpf_object__collect_map_relos(struct bpf_object *obj, + int i, j, nrels, new_sz, ptr_sz = sizeof(void *); + const struct btf_var_secinfo *vi = NULL; + const struct btf_type *sec, *var, *def; ++ struct bpf_map *map = NULL, *targ_map; + const struct btf_member *member; +- struct bpf_map *map, *targ_map; + const char *name, *mname; + Elf_Data *symbols; + unsigned int moff; +-- +2.25.1 + diff --git a/package/network/utils/bpftools/patches/003-bpftool-allow-passing-BPFTOOL_VERSION-to-make.patch b/package/network/utils/bpftools/patches/003-bpftool-allow-passing-BPFTOOL_VERSION-to-make.patch new file mode 100644 index 0000000000..9423824ee8 --- /dev/null +++ b/package/network/utils/bpftools/patches/003-bpftool-allow-passing-BPFTOOL_VERSION-to-make.patch @@ -0,0 +1,26 @@ +From 668d1c2951e18512a27aec20b80dea627d01bf04 Mon Sep 17 00:00:00 2001 +From: Tony Ambardar +Date: Thu, 20 Aug 2020 16:05:48 -0700 +Subject: [PATCH] tools/bpftool: allow passing BPFTOOL_VERSION to make + +Signed-off-by: Tony Ambardar +--- + tools/bpf/bpftool/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile +index 9e85f101be85..d9d821736c31 100644 +--- a/tools/bpf/bpftool/Makefile ++++ b/tools/bpf/bpftool/Makefile +@@ -25,7 +25,7 @@ endif + + LIBBPF = $(LIBBPF_PATH)libbpf.a + +-BPFTOOL_VERSION := $(shell make -rR --no-print-directory -sC ../../.. kernelversion) ++BPFTOOL_VERSION ?= $(shell make -rR --no-print-directory -sC ../../.. kernelversion) + + $(LIBBPF): FORCE + $(if $(LIBBPF_OUTPUT),@mkdir -p $(LIBBPF_OUTPUT)) +-- +2.25.1 + diff --git a/package/network/utils/bpftools/patches/004-v5.9-bpftool-use-only-ftw-for-file-tree-parsing.patch b/package/network/utils/bpftools/patches/004-v5.9-bpftool-use-only-ftw-for-file-tree-parsing.patch new file mode 100644 index 0000000000..7767b5f595 --- /dev/null +++ b/package/network/utils/bpftools/patches/004-v5.9-bpftool-use-only-ftw-for-file-tree-parsing.patch @@ -0,0 +1,238 @@ +From 6edda7633e4fdf33b91c2e86c05cab805a0dabb3 Mon Sep 17 00:00:00 2001 +From: Tony Ambardar +Date: Mon, 20 Jul 2020 19:48:16 -0700 +Subject: [PATCH] bpftool: Use only nftw for file tree parsing + +The bpftool sources include code to walk file trees, but use multiple +frameworks to do so: nftw and fts. While nftw conforms to POSIX/SUSv3 and +is widely available, fts is not conformant and less common, especially on +non-glibc systems. The inconsistent framework usage hampers maintenance +and portability of bpftool, in particular for embedded systems. + +Standardize code usage by rewriting one fts-based function to use nftw and +clean up some related function warnings by extending use of "const char *" +arguments. This change helps in building bpftool against musl for OpenWrt. + +Also fix an unsafe call to dirname() by duplicating the string to pass, +since some implementations may directly alter it. The same approach is +used in libbpf.c. + +Signed-off-by: Tony Ambardar +Signed-off-by: Daniel Borkmann +Reviewed-by: Quentin Monnet +Link: https://lore.kernel.org/bpf/20200721024817.13701-1-Tony.Ambardar@gmail.com +--- + tools/bpf/bpftool/common.c | 137 ++++++++++++++++++++++--------------- + tools/bpf/bpftool/main.h | 4 +- + 2 files changed, 82 insertions(+), 59 deletions(-) + +diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c +index 88264abaa738..d8bb4dd18c8a 100644 +--- a/tools/bpf/bpftool/common.c ++++ b/tools/bpf/bpftool/common.c +@@ -1,10 +1,11 @@ + // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) + /* Copyright (C) 2017-2018 Netronome Systems, Inc. */ + ++#define _GNU_SOURCE + #include + #include + #include +-#include ++#include + #include + #include + #include +@@ -123,24 +124,35 @@ int mount_tracefs(const char *target) + return err; + } + +-int open_obj_pinned(char *path, bool quiet) ++int open_obj_pinned(const char *path, bool quiet) + { +- int fd; ++ char *pname; ++ int fd = -1; + +- fd = bpf_obj_get(path); ++ pname = strdup(path); ++ if (!pname) { ++ if (!quiet) ++ p_err("mem alloc failed"); ++ goto out_ret; ++ } ++ ++ fd = bpf_obj_get(pname); + if (fd < 0) { + if (!quiet) +- p_err("bpf obj get (%s): %s", path, +- errno == EACCES && !is_bpffs(dirname(path)) ? ++ p_err("bpf obj get (%s): %s", pname, ++ errno == EACCES && !is_bpffs(dirname(pname)) ? + "directory not in bpf file system (bpffs)" : + strerror(errno)); +- return -1; ++ goto out_free; + } + ++out_free: ++ free(pname); ++out_ret: + return fd; + } + +-int open_obj_pinned_any(char *path, enum bpf_obj_type exp_type) ++int open_obj_pinned_any(const char *path, enum bpf_obj_type exp_type) + { + enum bpf_obj_type type; + int fd; +@@ -353,71 +365,82 @@ void print_hex_data_json(uint8_t *data, size_t len) + jsonw_end_array(json_wtr); + } + ++/* extra params for nftw cb */ ++static struct pinned_obj_table *build_fn_table; ++static enum bpf_obj_type build_fn_type; ++ ++static int do_build_table_cb(const char *fpath, const struct stat *sb, ++ int typeflag, struct FTW *ftwbuf) ++{ ++ struct bpf_prog_info pinned_info; ++ __u32 len = sizeof(pinned_info); ++ struct pinned_obj *obj_node; ++ enum bpf_obj_type objtype; ++ int fd, err = 0; ++ ++ if (typeflag != FTW_F) ++ goto out_ret; ++ ++ fd = open_obj_pinned(fpath, true); ++ if (fd < 0) ++ goto out_ret; ++ ++ objtype = get_fd_type(fd); ++ if (objtype != build_fn_type) ++ goto out_close; ++ ++ memset(&pinned_info, 0, sizeof(pinned_info)); ++ if (bpf_obj_get_info_by_fd(fd, &pinned_info, &len)) ++ goto out_close; ++ ++ obj_node = calloc(1, sizeof(*obj_node)); ++ if (!obj_node) { ++ err = -1; ++ goto out_close; ++ } ++ ++ obj_node->id = pinned_info.id; ++ obj_node->path = strdup(fpath); ++ if (!obj_node->path) { ++ err = -1; ++ free(obj_node); ++ goto out_close; ++ } ++ ++ hash_add(build_fn_table->table, &obj_node->hash, obj_node->id); ++out_close: ++ close(fd); ++out_ret: ++ return err; ++} ++ + int build_pinned_obj_table(struct pinned_obj_table *tab, + enum bpf_obj_type type) + { +- struct bpf_prog_info pinned_info = {}; +- struct pinned_obj *obj_node = NULL; +- __u32 len = sizeof(pinned_info); + struct mntent *mntent = NULL; +- enum bpf_obj_type objtype; + FILE *mntfile = NULL; +- FTSENT *ftse = NULL; +- FTS *fts = NULL; +- int fd, err; ++ int flags = FTW_PHYS; ++ int nopenfd = 16; ++ int err = 0; + + mntfile = setmntent("/proc/mounts", "r"); + if (!mntfile) + return -1; + ++ build_fn_table = tab; ++ build_fn_type = type; ++ + while ((mntent = getmntent(mntfile))) { +- char *path[] = { mntent->mnt_dir, NULL }; ++ char *path = mntent->mnt_dir; + + if (strncmp(mntent->mnt_type, "bpf", 3) != 0) + continue; +- +- fts = fts_open(path, 0, NULL); +- if (!fts) +- continue; +- +- while ((ftse = fts_read(fts))) { +- if (!(ftse->fts_info & FTS_F)) +- continue; +- fd = open_obj_pinned(ftse->fts_path, true); +- if (fd < 0) +- continue; +- +- objtype = get_fd_type(fd); +- if (objtype != type) { +- close(fd); +- continue; +- } +- memset(&pinned_info, 0, sizeof(pinned_info)); +- err = bpf_obj_get_info_by_fd(fd, &pinned_info, &len); +- if (err) { +- close(fd); +- continue; +- } +- +- obj_node = malloc(sizeof(*obj_node)); +- if (!obj_node) { +- close(fd); +- fts_close(fts); +- fclose(mntfile); +- return -1; +- } +- +- memset(obj_node, 0, sizeof(*obj_node)); +- obj_node->id = pinned_info.id; +- obj_node->path = strdup(ftse->fts_path); +- hash_add(tab->table, &obj_node->hash, obj_node->id); +- +- close(fd); +- } +- fts_close(fts); ++ err = nftw(path, do_build_table_cb, nopenfd, flags); ++ if (err) ++ break; + } + fclose(mntfile); +- return 0; ++ return err; + } + + void delete_pinned_obj_table(struct pinned_obj_table *tab) +diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h +index af9ad56c303a..b02e763f1e9c 100644 +--- a/tools/bpf/bpftool/main.h ++++ b/tools/bpf/bpftool/main.h +@@ -140,8 +140,8 @@ int cmd_select(const struct cmd *cmds, int argc, char **argv, + int get_fd_type(int fd); + const char *get_fd_type_name(enum bpf_obj_type type); + char *get_fdinfo(int fd, const char *key); +-int open_obj_pinned(char *path, bool quiet); +-int open_obj_pinned_any(char *path, enum bpf_obj_type exp_type); ++int open_obj_pinned(const char *path, bool quiet); ++int open_obj_pinned_any(const char *path, enum bpf_obj_type exp_type); + int mount_bpffs_for_pin(const char *name); + int do_pin_any(int argc, char **argv, int (*get_fd_by_id)(__u32)); + int do_pin_fd(int fd, const char *name); +-- +2.17.1 + diff --git a/package/system/opkg/Makefile b/package/system/opkg/Makefile index 0bb0ed2750..05a99bde09 100644 --- a/package/system/opkg/Makefile +++ b/package/system/opkg/Makefile @@ -14,9 +14,9 @@ PKG_FLAGS:=essential PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://git.openwrt.org/project/opkg-lede.git -PKG_SOURCE_DATE:=2020-05-07 -PKG_SOURCE_VERSION:=f2166a89b7e96e2c60002959731eebc5f45fa318 -PKG_MIRROR_HASH:=67e55cd9fb93bb5b62e2c7b11946483b5570287bd1504aa2a3886d11f8b750b9 +PKG_SOURCE_DATE:=2020-08-31 +PKG_SOURCE_VERSION:=cf44c2feb606b60ba3f35392e102c281ef6ea0da +PKG_MIRROR_HASH:=0d7be9f8f86864e2a9999145210ecaa286fb85cfae131ec502609a6d1e435871 PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=COPYING diff --git a/package/system/opkg/files/opkg-key b/package/system/opkg/files/opkg-key index ae5e8a4591..51d1857ad5 100755 --- a/package/system/opkg/files/opkg-key +++ b/package/system/opkg/files/opkg-key @@ -1,5 +1,7 @@ #!/bin/sh +OPKG_KEYS="${OPKG_KEYS:-/etc/opkg/keys}" + usage() { cat < @@ -19,7 +21,7 @@ opkg_key_verify() { ( zcat "$msgfile" 2>/dev/null || cat "$msgfile" 2>/dev/null - ) | usign -V -P /etc/opkg/keys -q -x "$sigfile" -m - + ) | usign -V -P "$OPKG_KEYS" -q -x "$sigfile" -m - } opkg_key_add() { @@ -27,8 +29,8 @@ opkg_key_add() { [ -n "$key" ] || usage [ -f "$key" ] || echo "Cannot open file $1" local fingerprint="$(usign -F -p "$key")" - mkdir -p "/etc/opkg/keys" - cp "$key" "/etc/opkg/keys/$fingerprint" + mkdir -p "$OPKG_KEYS" + cp "$key" "$OPKG_KEYS/$fingerprint" } opkg_key_remove() { @@ -36,7 +38,7 @@ opkg_key_remove() { [ -n "$key" ] || usage [ -f "$key" ] || echo "Cannot open file $1" local fingerprint="$(usign -F -p "$key")" - rm -f "/etc/opkg/keys/$fingerprint" + rm -f "$OPKG_KEYS/$fingerprint" } case "$1" in diff --git a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile index 4d098ac4a8..f88e971c82 100644 --- a/package/utils/busybox/Makefile +++ b/package/utils/busybox/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=busybox PKG_VERSION:=1.31.1 -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_FLAGS:=essential PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 @@ -28,6 +28,10 @@ PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=LICENSE archival/libarchive/bz/LICENSE PKG_CPE_ID:=cpe:/a:busybox:busybox +ifneq ($(CONFIG_BUSYBOX_$(BUSYBOX_SYM)_FEATURE_SUID),) + PKG_FILE_MODES:=/bin/busybox:root:root:4755 +endif + include $(INCLUDE_DIR)/package.mk ifeq ($(DUMP),) @@ -140,9 +144,6 @@ endif ifneq ($(CONFIG_BUSYBOX_$(BUSYBOX_SYM)_NTPD),) $(INSTALL_BIN) ./files/sysntpd $(1)/etc/init.d/sysntpd $(INSTALL_BIN) ./files/ntpd-hotplug $(1)/usr/sbin/ntpd-hotplug -endif -ifneq ($(CONFIG_BUSYBOX_$(BUSYBOX_SYM)_FEATURE_SUID),) - $(INSTALL_SUID) $(PKG_INSTALL_DIR)/bin/busybox $(1)/bin/busybox endif -rm -rf $(1)/lib64 endef diff --git a/package/utils/checkpolicy/Makefile b/package/utils/checkpolicy/Makefile index 5e32bc5871..8def9ea65d 100644 --- a/package/utils/checkpolicy/Makefile +++ b/package/utils/checkpolicy/Makefile @@ -13,6 +13,7 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/SELinuxProject/selinux/releases/download/20200710 PKG_HASH:=dfc7707070520c93b14fbbdfdbe081364d806bf28e3e79e10318c2594c77bbb2 PKG_INSTALL:=1 +PKG_BUILD_DEPENDS:=libselinux HOST_BUILD_DEPENDS:=libselinux/host PKG_MAINTAINER:=Thomas Petazzoni diff --git a/package/utils/policycoreutils/Makefile b/package/utils/policycoreutils/Makefile index c82731b740..0cebec7ece 100644 --- a/package/utils/policycoreutils/Makefile +++ b/package/utils/policycoreutils/Makefile @@ -26,7 +26,7 @@ include $(INCLUDE_DIR)/package.mk define Package/policycoreutils SECTION:=utils CATEGORY:=Utilities - DEPENDS:= +libsemanage +libcap-ng +BUSYBOX_CONFIG_PAM:libpam + DEPENDS:= +libsemanage +libcap-ng +BUSYBOX_CONFIG_PAM:libpam $(INTL_DEPENDS) TITLE:=SELinux policy utilities URL:=http://selinuxproject.org/page/Main_Page ALTERNATIVES:=\ diff --git a/package/utils/px5g/Makefile b/package/utils/px5g-mbedtls/Makefile similarity index 96% rename from package/utils/px5g/Makefile rename to package/utils/px5g-mbedtls/Makefile index f4be6cb5ee..42ffd39ce3 100644 --- a/package/utils/px5g/Makefile +++ b/package/utils/px5g-mbedtls/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk -PKG_NAME:=px5g +PKG_NAME:=px5g-mbedtls PKG_RELEASE:=9 PKG_LICENSE:=LGPL-2.1 @@ -55,7 +55,7 @@ endif TARGET_CFLAGS += -Wl,--gc-sections -Wall -Werror define Build/Compile - $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/px5g px5g.c $(TARGET_LDFLAGS) + $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/px5g px5g-mbedtls.c $(TARGET_LDFLAGS) endef define Package/px5g-mbedtls/install diff --git a/package/utils/px5g/px5g.c b/package/utils/px5g-mbedtls/px5g-mbedtls.c similarity index 100% rename from package/utils/px5g/px5g.c rename to package/utils/px5g-mbedtls/px5g-mbedtls.c diff --git a/package/utils/px5g-wolfssl/Makefile b/package/utils/px5g-wolfssl/Makefile new file mode 100644 index 0000000000..be36f9f33d --- /dev/null +++ b/package/utils/px5g-wolfssl/Makefile @@ -0,0 +1,48 @@ +# Copyright (C) 2020 Paul Spooren +# +# SPDX-License-Identifier: GPL-2.0-or-later + +include $(TOPDIR)/rules.mk + +PKG_NAME:=px5g-wolfssl +PKG_RELEASE:=1 +PKG_LICENSE:=GPL-2.0-or-later + +PKG_USE_MIPS16:=0 + +PKG_MAINTAINER:=Paul Spooren + +include $(INCLUDE_DIR)/package.mk + +define Package/px5g-wolfssl + SECTION:=utils + CATEGORY:=Utilities + SUBMENU:=Encryption + TITLE:=X.509 certificate generator (using WolfSSL) + DEPENDS:=+libwolfssl + PROVIDES:=px5g + VARIANT:=wolfssl +endef + +define Package/px5g-wolfssl/description + Px5g is a tiny X.509 certificate generator. + It suitable to create key files and certificates in DER + and PEM format for use with stunnel, uhttpd and others. +endef + +TARGET_LDFLAGS += -lwolfssl + + +TARGET_CFLAGS += -Wl,--gc-sections + +define Build/Compile + $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) \ + -o $(PKG_BUILD_DIR)/px5g px5g-wolfssl.c $(TARGET_LDFLAGS) +endef + +define Package/px5g-wolfssl/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/px5g $(1)/usr/sbin/px5g +endef + +$(eval $(call BuildPackage,px5g-wolfssl)) diff --git a/package/utils/px5g-wolfssl/px5g-wolfssl.c b/package/utils/px5g-wolfssl/px5g-wolfssl.c new file mode 100644 index 0000000000..b937d220ca --- /dev/null +++ b/package/utils/px5g-wolfssl/px5g-wolfssl.c @@ -0,0 +1,354 @@ +// Copyright 2020 Paul Spooren +// +// SPDX-License-Identifier: GPL-2.0-or-later + +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define HEAP_HINT NULL +#define FOURK_SZ 4096 +#define WOLFSSL_MIN_RSA_BITS 2048 + +enum { + EC_KEY_TYPE = 0, + RSA_KEY_TYPE = 1, +}; + +int write_file(byte *buf, int bufSz, char *path) { + int ret; + FILE *file; + if (path) { + file = fopen(path, "wb"); + if (file == NULL) { + perror("Error opening file"); + exit(1); + } + } else { + file = stdout; + } + ret = (int)fwrite(buf, 1, bufSz, file); + if (path) { + fclose(file); + } + if (ret > 0) { + /* ret > 0 indicates a successful file write, set to zero for return */ + ret = 0; + } + return ret; +} + +int write_key(ecc_key *ecKey, RsaKey *rsaKey, int type, int keySz, char *fName, + bool write_pem) { + int ret; + byte der[FOURK_SZ] = {}; + byte pem[FOURK_SZ] = {}; + int derSz, pemSz; + if (type == EC_KEY_TYPE) { + ret = wc_EccKeyToDer(ecKey, der, sizeof(der)); + } else { + ret = wc_RsaKeyToDer(rsaKey, der, sizeof(der)); + } + if (ret <= 0) { + fprintf(stderr, "Key To DER failed: %d\n", ret); + } + derSz = ret; + + if (write_pem) { + if (type == EC_KEY_TYPE) { + ret = wc_DerToPem(der, derSz, pem, sizeof(pem), ECC_PRIVATEKEY_TYPE); + } else { + ret = wc_DerToPem(der, derSz, pem, sizeof(pem), PRIVATEKEY_TYPE); + } + if (ret <= 0) { + fprintf(stderr, "DER to PEM failed: %d\n", ret); + } + pemSz = ret; + ret = write_file(pem, pemSz, fName); + } else { + ret = write_file(der, derSz, fName); + } + return ret; +} + +int gen_key(WC_RNG *rng, ecc_key *ecKey, RsaKey *rsaKey, int type, int keySz, + long exp, int curve) { + int ret; + + if (type == EC_KEY_TYPE) { + ret = wc_ecc_init(ecKey); + (void)rsaKey; + } else { + ret = wc_InitRsaKey(rsaKey, NULL); + (void)ecKey; + } + if (ret != 0) { + fprintf(stderr, "Key initialization failed: %d\n", ret); + return ret; + } + + if (type == EC_KEY_TYPE) { + fprintf(stderr, "Generating EC private key\n"); + ret = wc_ecc_make_key_ex(rng, 32, ecKey, curve); + } else { + fprintf(stderr, "Generating RSA private key, %i bit long modulus\n", keySz); + ret = wc_MakeRsaKey(rsaKey, keySz, WC_RSA_EXPONENT, rng); + } + if (ret != 0) { + fprintf(stderr, "Key generation failed: %d\n", ret); + } + return ret; +} + +int selfsigned(WC_RNG *rng, char **arg) { + ecc_key ecKey; + RsaKey rsaKey; + int ret; + char *subject = ""; + int keySz = WOLFSSL_MIN_RSA_BITS; + int type = EC_KEY_TYPE; + int exp = WC_RSA_EXPONENT; + int curve = ECC_SECP256R1; + unsigned int days = 3653; // 10 years + char *keypath = NULL, *certpath = NULL; + char fstr[20], tstr[20]; + bool pem = true; + Cert newCert; +#ifdef __USE_TIME_BITS64 + time_t to, from = time(NULL); +#else + unsigned long to, from = time(NULL); +#endif + byte derBuf[FOURK_SZ] = {}; + byte pemBuf[FOURK_SZ] = {}; + int pemSz = -1; + int derSz = -1; + char *key, *val, *tmp; + + ret = wc_InitCert(&newCert); + if (ret != 0) { + fprintf(stderr, "Init Cert failed: %d\n", ret); + return ret; + } + newCert.isCA = 0; + + while (*arg && **arg == '-') { + if (!strncmp(*arg, "-der", 4)) { + pem = false; + } else if (!strncmp(*arg, "-newkey", 6) && arg[1]) { + if (!strncmp(arg[1], "rsa:", 4)) { + type = RSA_KEY_TYPE; + keySz = (unsigned int)atoi(arg[1] + 4); + } else if (!strncmp(arg[1], "ec", 2)) { + type = EC_KEY_TYPE; + } else { + fprintf(stderr, "error: invalid algorithm\n"); + return 1; + } + arg++; + } else if (!strncmp(*arg, "-days", 5) && arg[1]) { + days = (unsigned int)atoi(arg[1]); + arg++; + } else if (!strncmp(*arg, "-pkeyopt", 8) && arg[1]) { + if (strncmp(arg[1], "ec_paramgen_curve:", 18)) { + fprintf(stderr, "error: invalid pkey option: %s\n", arg[1]); + return 1; + } + if (!strncmp(arg[1] + 18, "P-256:", 5)) { + curve = ECC_SECP256R1; + } else if (!strncmp(arg[1] + 18, "P-384:", 5)) { + curve = ECC_SECP384R1; + } else if (!strncmp(arg[1] + 18, "P-521:", 5)) { + curve = ECC_SECP521R1; + } else { + fprintf(stderr, "error: invalid curve name: %s\n", arg[1] + 18); + return 1; + } + arg++; + } else if (!strncmp(*arg, "-keyout", 7) && arg[1]) { + keypath = arg[1]; + arg++; + } else if (!strncmp(*arg, "-out", 4) && arg[1]) { + certpath = arg[1]; + arg++; + } else if (!strcmp(*arg, "-subj") && arg[1]) { + subject = strdupa(arg[1]); + key = arg[1]; + do { + tmp = strchr(key, '/'); + if (tmp) + *tmp = '\0'; + + val = strchr(key, '='); + if (val) { + *val = '\0'; + ++val; + + if (!strcmp(key, "C")) + strncpy(newCert.subject.country, val, CTC_NAME_SIZE); + else if (!strcmp(key, "ST")) + strncpy(newCert.subject.state, val, CTC_NAME_SIZE); + else if (!strcmp(key, "L")) + strncpy(newCert.subject.locality, val, CTC_NAME_SIZE); + else if (!strcmp(key, "O")) + strncpy(newCert.subject.org, val, CTC_NAME_SIZE); + else if (!strcmp(key, "OU")) + strncpy(newCert.subject.unit, val, CTC_NAME_SIZE); + else if (!strcmp(key, "CN")) + strncpy(newCert.subject.commonName, val, CTC_NAME_SIZE); + else if (!strcmp(key, "EMAIL")) + strncpy(newCert.subject.email, val, CTC_NAME_SIZE); + else + printf("warning: unknown attribute %s=%s\n", key, val); + } + } while (tmp && (key = ++tmp)); + } + arg++; + } + newCert.daysValid = days; + + gen_key(rng, &ecKey, &rsaKey, type, keySz, exp, curve); + write_key(&ecKey, &rsaKey, type, keySz, keypath, pem); + + from = (from < 1000000000) ? 1000000000 : from; + strftime(fstr, sizeof(fstr), "%Y%m%d%H%M%S", gmtime(&from)); + to = from + 60 * 60 * 24 * days; + if (to < from) + to = INT_MAX; + strftime(tstr, sizeof(tstr), "%Y%m%d%H%M%S", gmtime(&to)); + + fprintf(stderr, + "Generating selfsigned certificate with subject '%s'" + " and validity %s-%s\n", + subject, fstr, tstr); + + if (type == EC_KEY_TYPE) { + ret = wc_MakeCert(&newCert, derBuf, sizeof(derBuf), NULL, &ecKey, rng); + } else { + ret = wc_MakeCert(&newCert, derBuf, sizeof(derBuf), &rsaKey, NULL, rng); + } + if (ret <= 0) { + fprintf(stderr, "Make Cert failed: %d\n", ret); + return ret; + } + + if (type == EC_KEY_TYPE) { + newCert.sigType = CTC_SHA256wECDSA; + ret = wc_SignCert(newCert.bodySz, newCert.sigType, derBuf, sizeof(derBuf), + NULL, &ecKey, rng); + } else { + newCert.sigType = CTC_SHA256wRSA; + ret = wc_SignCert(newCert.bodySz, newCert.sigType, derBuf, sizeof(derBuf), + &rsaKey, NULL, rng); + } + if (ret <= 0) { + fprintf(stderr, "Sign Cert failed: %d\n", ret); + return ret; + } + derSz = ret; + + ret = wc_DerToPem(derBuf, derSz, pemBuf, sizeof(pemBuf), CERT_TYPE); + if (ret <= 0) { + fprintf(stderr, "DER to PEM failed: %d\n", ret); + return ret; + } + pemSz = ret; + + ret = write_file(pemBuf, pemSz, certpath); + if (ret != 0) { + fprintf(stderr, "Write Cert failed: %d\n", ret); + return ret; + } + + if (type == EC_KEY_TYPE) { + wc_ecc_free(&ecKey); + } else { + wc_FreeRsaKey(&rsaKey); + } + return 0; +} + +int dokey(WC_RNG *rng, int type, char **arg) { + ecc_key ecKey; + RsaKey rsaKey; + int ret; + int curve = ECC_SECP256R1; + int keySz = WOLFSSL_MIN_RSA_BITS; + int exp = WC_RSA_EXPONENT; + char *path = NULL; + bool pem = true; + + while (*arg && **arg == '-') { + if (!strncmp(*arg, "-out", 4) && arg[1]) { + path = arg[1]; + arg++; + } else if (!strncmp(*arg, "-3", 2)) { + exp = 3; + } else if (!strncmp(*arg, "-der", 4)) { + pem = false; + } + arg++; + } + + if (*arg && type == RSA_KEY_TYPE) { + keySz = (unsigned int)atoi(*arg); + } else if (*arg) { + if (!strncmp(*arg, "P-256", 5)) { + curve = ECC_SECP256R1; + } else if (!strncmp(*arg, "P-384", 5)) { + curve = ECC_SECP384R1; + } else if (!strncmp(*arg, "P-521", 5)) { + curve = ECC_SECP521R1; + } else { + fprintf(stderr, "Invalid Curve Name: %s\n", *arg); + return 1; + } + } + + ret = gen_key(rng, &ecKey, &rsaKey, type, keySz, exp, curve); + if (ret != 0) + return ret; + + ret = write_key(&ecKey, &rsaKey, type, keySz, path, pem); + + if (type == EC_KEY_TYPE) { + wc_ecc_free(&ecKey); + } else { + wc_FreeRsaKey(&rsaKey); + } + return ret; +} + +int main(int argc, char *argv[]) { + int ret; + WC_RNG rng; + ret = wc_InitRng(&rng); + if (ret != 0) { + fprintf(stderr, "Init Rng failed: %d\n", ret); + return ret; + } + + if (argv[1]) { + if (!strncmp(argv[1], "eckey", 5)) + return dokey(&rng, EC_KEY_TYPE, argv + 2); + + if (!strncmp(argv[1], "rsakey", 5)) + return dokey(&rng, RSA_KEY_TYPE, argv + 2); + + if (!strncmp(argv[1], "selfsigned", 10)) + return selfsigned(&rng, argv + 2); + } + + fprintf(stderr, "PX5G X.509 Certificate Generator Utilit using WolfSSL\n\n"); + fprintf(stderr, "Usage: [eckey|rsakey|selfsigned]\n"); + return 1; +} diff --git a/package/utils/util-linux/Makefile b/package/utils/util-linux/Makefile index 3953d83238..0fc9819c58 100644 --- a/package/utils/util-linux/Makefile +++ b/package/utils/util-linux/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=util-linux -PKG_VERSION:=2.35.1 -PKG_RELEASE:=2 +PKG_VERSION:=2.36 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_SOURCE_URL:=@KERNEL/linux/utils/$(PKG_NAME)/v2.35 -PKG_HASH:=d9de3edd287366cd908e77677514b9387b22bc7b88f45b83e1922c3597f1d7f9 +PKG_SOURCE_URL:=@KERNEL/linux/utils/$(PKG_NAME)/v2.36 +PKG_HASH:=9e4b1c67eb13b9b67feb32ae1dc0d50e08ce9e5d82e1cccd0ee771ad2fa9e0b1 PKG_CPE_ID:=cpe:/a:kernel:util-linux PKG_LICENSE:=GPL-2.0 @@ -126,6 +126,7 @@ define Package/blkdiscard $(call Package/util-linux/Default) TITLE:=discard sectors on a device SUBMENU=Disc + DEPENDS:=libblkid endef define Package/blkdiscard/description diff --git a/package/utils/util-linux/patches/003-fix_pkgconfig_files.patch b/package/utils/util-linux/patches/003-fix_pkgconfig_files.patch index c4afdb1b6e..3f97eaf737 100644 --- a/package/utils/util-linux/patches/003-fix_pkgconfig_files.patch +++ b/package/utils/util-linux/patches/003-fix_pkgconfig_files.patch @@ -10,7 +10,7 @@ endif # BUILD_LIBUUID --- a/configure.ac +++ b/configure.ac -@@ -2496,18 +2496,23 @@ AC_CONFIG_HEADERS([config.h]) +@@ -2586,18 +2586,23 @@ AC_CONFIG_HEADERS([config.h]) # AC_CONFIG_FILES([ Makefile diff --git a/package/utils/util-linux/patches/200-musl-1.2.x.patch b/package/utils/util-linux/patches/200-musl-1.2.x.patch new file mode 100644 index 0000000000..658b3ead1d --- /dev/null +++ b/package/utils/util-linux/patches/200-musl-1.2.x.patch @@ -0,0 +1,26 @@ +From 69e4fbfbfd9c42af508954d9fb985c5c7b657784 Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Tue, 11 Aug 2020 11:02:31 +0200 +Subject: [PATCH] hwclock: add fallback if SYS_settimeofday does not exist + +It seems Musl-C removes SYS_settimeofday macro at all. + +Addresses: https://github.com/karelzak/util-linux/commit/9c6139a72017cecb9145e46102152cb4f456ada6#commitcomment-41290951 +Signed-off-by: Karel Zak +--- + sys-utils/hwclock.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/sys-utils/hwclock.c ++++ b/sys-utils/hwclock.c +@@ -675,6 +675,10 @@ display_time(struct timeval hwctime) + */ + #define __set_time(_tv) settimeofday(_tv, NULL) + ++#if !defined(SYS_settimeofday) && defined(__NR_settimeofday) ++# define SYS_settimeofday __NR_settimeofday ++#endif ++ + static inline int __set_timezone(const struct timezone *tz) + { + #ifdef SYS_settimeofday diff --git a/rules.mk b/rules.mk index 6d2cd5c4e2..dea414e739 100644 --- a/rules.mk +++ b/rules.mk @@ -266,7 +266,7 @@ endif BUILD_KEY=$(TOPDIR)/key-build -FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot +FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot -l $(STAGING_DIR_HOST)/lib/libfakeroot.so -f $(STAGING_DIR_HOST)/bin/faked TARGET_CC:=$(TARGET_CROSS)gcc TARGET_CXX:=$(TARGET_CROSS)g++ KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh diff --git a/scripts/get_source_date_epoch.sh b/scripts/get_source_date_epoch.sh index 84ba445454..d122acf385 100755 --- a/scripts/get_source_date_epoch.sh +++ b/scripts/get_source_date_epoch.sh @@ -1,28 +1,33 @@ #!/usr/bin/env bash export LANG=C export LC_ALL=C -[ -n "$TOPDIR" ] && cd $TOPDIR + +if [ -n "$TOPDIR" ]; then + cd "$TOPDIR" || exit 1 +fi + +SOURCE="${1:-.}" try_version() { - [ -f version.date ] || return 1 - SOURCE_DATE_EPOCH="$(cat version.date)" + [ -f "$SOURCE/version.date" ] || return 1 + SOURCE_DATE_EPOCH=$(cat "$SOURCE/version.date") [ -n "$SOURCE_DATE_EPOCH" ] } try_git() { - [ -e .git ] || return 1 - SOURCE_DATE_EPOCH="$(git log -1 --format=format:%ct)" + SOURCE_DATE_EPOCH=$(git -C "$SOURCE" log -1 --format=format:%ct \ + "$SOURCE" 2>/dev/null) [ -n "$SOURCE_DATE_EPOCH" ] } try_hg() { - [ -d .hg ] || return 1 - SOURCE_DATE_EPOCH="$(hg log --template '{date}' -l 1 | cut -d. -f1)" + SOURCE_DATE_EPOCH=$(hg --cwd "$SOURCE" log --template '{date}' -l 1 \ + "$SOURCE" 2>/dev/null | cut -d. -f1) [ -n "$SOURCE_DATE_EPOCH" ] } try_mtime() { - perl -e 'print((stat $ARGV[0])[9])' "$0" + SOURCE_DATE_EPOCH=$(perl -e 'print((stat $ARGV[0])[9])' "$0") [ -n "$SOURCE_DATE_EPOCH" ] } diff --git a/scripts/ipkg-build b/scripts/ipkg-build index 6e027bc546..e3a9a882cf 100755 --- a/scripts/ipkg-build +++ b/scripts/ipkg-build @@ -16,16 +16,10 @@ TAR="${TAR:-$(command -v tar)}" GZIP="$(command -v gzip)" # try to use fixed source epoch -if [ -n "$SOURCE_DATE_EPOCH" ]; then +if [ -n "$PKG_SOURCE_DATE_EPOCH" ]; then + TIMESTAMP=$(date --date="@$PKG_SOURCE_DATE_EPOCH") +elif [ -n "$SOURCE_DATE_EPOCH" ]; then TIMESTAMP=$(date --date="@$SOURCE_DATE_EPOCH") - -# look up date of last commit -elif [ -d "$TOPDIR/.git" ]; then - GIT="$(command -v git)" - TIMESTAMP=$(cd $TOPDIR; $GIT log -1 -s --format=%ci) -elif [ -d "$TOPDIR/.svn" ]; then - SVN="$(command -v svn)" - TIMESTAMP=$($SVN info "$TOPDIR" | sed -n "s/^Last Changed Date: \(.*\)/\1/p") else TIMESTAMP=$(date) fi @@ -77,23 +71,15 @@ pkg_appears_sane() { ### # ipkg-build "main" ### -ogargs="" -noclean=0 -usage="Usage: $0 [-c] [-C] [-o owner] [-g group] []" -while getopts "cg:ho:v" opt; do +file_modes="" +usage="Usage: $0 [-v] [-h] [-m] []" +while getopts "hvm:" opt; do case $opt in - o ) owner=$OPTARG - ogargs="--owner=$owner" - ;; - g ) group=$OPTARG - ogargs="$ogargs --group=$group" - ;; - c ) ;; - C ) noclean=1;; v ) echo $version exit 0 ;; h ) echo $usage >&2 ;; + m ) file_modes=$OPTARG ;; \? ) echo $usage >&2 esac done @@ -144,21 +130,38 @@ tmp_dir=$dest_dir/IPKG_BUILD.$$ mkdir $tmp_dir echo $CONTROL > $tmp_dir/tarX -# Preserve permissions (-p) when creating data.tar.gz as non-root user -( cd $pkg_dir && $TAR $ogargs -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz ) +cd $pkg_dir +for file_mode in $file_modes; do + case $file_mode in + /*:*:*:*) + ;; + *) + echo "ERROR: file modes must use absolute path and contain user:group:mode" + echo "$file_mode" + exit 1 + ;; + esac + path=$(echo "$file_mode" | cut -d ':' -f 1) + user_group=$(echo "$file_mode" | cut -d ':' -f 2-3) + mode=$(echo "$file_mode" | cut -d ':' -f 4) + + chown "$user_group" "$pkg_dir/$path" + chmod "$mode" "$pkg_dir/$path" +done +$TAR -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz installed_size=`stat -c "%s" $tmp_dir/data.tar.gz` sed -i -e "s/^Installed-Size: .*/Installed-Size: $installed_size/" \ $pkg_dir/$CONTROL/control -( cd $pkg_dir/$CONTROL && $TAR $ogargs --format=gnu --sort=name -cf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/control.tar.gz ) +( cd $pkg_dir/$CONTROL && $TAR --format=gnu --sort=name -cf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/control.tar.gz ) rm $tmp_dir/tarX echo "2.0" > $tmp_dir/debian-binary pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk rm -f $pkg_file -( cd $tmp_dir && $TAR $ogargs --format=gnu --sort=name -cf - --mtime="$TIMESTAMP" ./debian-binary ./data.tar.gz ./control.tar.gz | $GZIP -n - > $pkg_file ) +( cd $tmp_dir && $TAR --format=gnu --sort=name -cf - --mtime="$TIMESTAMP" ./debian-binary ./data.tar.gz ./control.tar.gz | $GZIP -n - > $pkg_file ) rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz rmdir $tmp_dir diff --git a/target/imagebuilder/files/Makefile b/target/imagebuilder/files/Makefile index 8aef0a3640..a5dc35f519 100644 --- a/target/imagebuilder/files/Makefile +++ b/target/imagebuilder/files/Makefile @@ -205,4 +205,12 @@ manifest: FORCE $(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER)") \ $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES)")) -.SILENT: help info image manifest +whatdepends: FORCE +ifeq ($(PACKAGE),) + @echo 'Variable `PACKAGE` is not set but required by `whatdepends`' + @exit 1 +endif + @$(MAKE) -s package_reload + @$(OPKG) whatdepends -A $(PACKAGE) + +.SILENT: help info image manifest whatdepends diff --git a/toolchain/binutils/Config.in b/toolchain/binutils/Config.in index 9d77137f4b..2303888f12 100644 --- a/toolchain/binutils/Config.in +++ b/toolchain/binutils/Config.in @@ -13,6 +13,10 @@ choice config BINUTILS_USE_VERSION_2_34 bool "Binutils 2.34" select BINUTILS_VERSION_2_34 + + config BINUTILS_USE_VERSION_2_35 + bool "Binutils 2.35" + select BINUTILS_VERSION_2_35 endchoice config EXTRA_BINUTILS_CONFIG_OPTIONS diff --git a/toolchain/binutils/Config.version b/toolchain/binutils/Config.version index 5350b546a6..9d43675f1a 100644 --- a/toolchain/binutils/Config.version +++ b/toolchain/binutils/Config.version @@ -5,7 +5,11 @@ config BINUTILS_VERSION_2_34 default y if !TOOLCHAINOPTS bool +config BINUTILS_VERSION_2_35 + bool + config BINUTILS_VERSION string default "2.32" if BINUTILS_VERSION_2_32 default "2.34" if BINUTILS_VERSION_2_34 + default "2.35" if BINUTILS_VERSION_2_35 diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile index b5e121a442..204ff3ffff 100644 --- a/toolchain/binutils/Makefile +++ b/toolchain/binutils/Makefile @@ -23,6 +23,10 @@ ifeq ($(PKG_VERSION),2.34) PKG_HASH:=f00b0e8803dc9bab1e2165bd568528135be734df3fabf8d0161828cd56028952 endif +ifeq ($(PKG_VERSION),2.35) + PKG_HASH:=1b11659fb49e20e18db460d44485f09442c8c56d5df165de9461eb09c8302f85 +endif + HOST_BUILD_PARALLEL:=1 PATCH_DIR:=./patches/$(PKG_VERSION) diff --git a/toolchain/binutils/patches/2.35/300-001_ld_makefile_patch.patch b/toolchain/binutils/patches/2.35/300-001_ld_makefile_patch.patch new file mode 100644 index 0000000000..21b2d1c280 --- /dev/null +++ b/toolchain/binutils/patches/2.35/300-001_ld_makefile_patch.patch @@ -0,0 +1,22 @@ +--- a/ld/Makefile.am ++++ b/ld/Makefile.am +@@ -50,7 +50,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) + # We put the scripts in the directory $(scriptdir)/ldscripts. + # We can't put the scripts in $(datadir) because the SEARCH_DIR + # directives need to be different for native and cross linkers. +-scriptdir = $(tooldir)/lib ++scriptdir = $(libdir) + + EMUL = @EMUL@ + EMULATION_OFILES = @EMULATION_OFILES@ +--- a/ld/Makefile.in ++++ b/ld/Makefile.in +@@ -555,7 +555,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) + # We put the scripts in the directory $(scriptdir)/ldscripts. + # We can't put the scripts in $(datadir) because the SEARCH_DIR + # directives need to be different for native and cross linkers. +-scriptdir = $(tooldir)/lib ++scriptdir = $(libdir) + BASEDIR = $(srcdir)/.. + BFDDIR = $(BASEDIR)/bfd + INCDIR = $(BASEDIR)/include diff --git a/toolchain/binutils/patches/2.35/400-mips_no_dynamic_linking_sym.patch b/toolchain/binutils/patches/2.35/400-mips_no_dynamic_linking_sym.patch new file mode 100644 index 0000000000..9dfc01e53d --- /dev/null +++ b/toolchain/binutils/patches/2.35/400-mips_no_dynamic_linking_sym.patch @@ -0,0 +1,18 @@ +--- a/bfd/elfxx-mips.c ++++ b/bfd/elfxx-mips.c +@@ -8075,6 +8075,7 @@ _bfd_mips_elf_create_dynamic_sections (b + + name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING"; + bh = NULL; ++ if (0) { + if (!(_bfd_generic_link_add_one_symbol + (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0, + NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) +@@ -8087,6 +8088,7 @@ _bfd_mips_elf_create_dynamic_sections (b + + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; ++ } + + if (! mips_elf_hash_table (info)->use_rld_obj_head) + { diff --git a/toolchain/binutils/patches/2.35/500-Change-default-emulation-for-mips64-linux.patch b/toolchain/binutils/patches/2.35/500-Change-default-emulation-for-mips64-linux.patch new file mode 100644 index 0000000000..5de5484fe4 --- /dev/null +++ b/toolchain/binutils/patches/2.35/500-Change-default-emulation-for-mips64-linux.patch @@ -0,0 +1,38 @@ +--- a/bfd/config.bfd ++++ b/bfd/config.bfd +@@ -894,12 +894,12 @@ case "${targ}" in + targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec" + ;; + mips64*el-*-linux*) +- targ_defvec=mips_elf32_ntrad_le_vec +- targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec" ++ targ_defvec=mips_elf64_trad_le_vec ++ targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_be_vec" + ;; + mips64*-*-linux*) +- targ_defvec=mips_elf32_ntrad_be_vec +- targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec" ++ targ_defvec=mips_elf64_trad_be_vec ++ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec" + ;; + mips*el-*-linux*) + targ_defvec=mips_elf32_trad_le_vec +--- a/ld/configure.tgt ++++ b/ld/configure.tgt +@@ -531,12 +531,12 @@ mips*-*-vxworks*) targ_emul=elf32ebmipvx + ;; + mips*-*-windiss) targ_emul=elf32mipswindiss + ;; +-mips64*el-*-linux-*) targ_emul=elf32ltsmipn32 +- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip" ++mips64*el-*-linux-*) targ_emul=elf64ltsmip ++ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip" + targ_extra_libpath=$targ_extra_emuls + ;; +-mips64*-*-linux-*) targ_emul=elf32btsmipn32 +- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip" ++mips64*-*-linux-*) targ_emul=elf64btsmip ++ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip" + targ_extra_libpath=$targ_extra_emuls + ;; + mips*el-*-linux-*) targ_emul=elf32ltsmip diff --git a/toolchain/gcc/Config.version b/toolchain/gcc/Config.version index ccc7b273fa..09deae3bf1 100644 --- a/toolchain/gcc/Config.version +++ b/toolchain/gcc/Config.version @@ -19,7 +19,7 @@ config GCC_VERSION default "5.5.0" if GCC_VERSION_5 default "7.5.0" if GCC_VERSION_7 default "9.3.0" if GCC_VERSION_9 - default "10.1.0" if GCC_VERSION_10 + default "10.2.0" if GCC_VERSION_10 default "8.4.0" config GCC_USE_IREMAP diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk index eb0ddbf2d9..ab312e5afd 100644 --- a/toolchain/gcc/common.mk +++ b/toolchain/gcc/common.mk @@ -44,8 +44,8 @@ ifeq ($(PKG_VERSION),9.3.0) PKG_HASH:=71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1 endif -ifeq ($(PKG_VERSION),10.1.0) - PKG_HASH:=b6898a23844b656f1b68691c5c012036c2e694ac4b53a8918d4712ad876e7ea2 +ifeq ($(PKG_VERSION),10.2.0) + PKG_HASH:=b8dd4368bb9c7f0b98188317ee0254dd8cc99d1e3a18d0ff146c855fe16c1d8c endif PATCH_DIR=../patches/$(GCC_VERSION) diff --git a/toolchain/gcc/patches/10.1.0/002-case_insensitive.patch b/toolchain/gcc/patches/10.2.0/002-case_insensitive.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/002-case_insensitive.patch rename to toolchain/gcc/patches/10.2.0/002-case_insensitive.patch diff --git a/toolchain/gcc/patches/10.1.0/010-documentation.patch b/toolchain/gcc/patches/10.2.0/010-documentation.patch similarity index 94% rename from toolchain/gcc/patches/10.1.0/010-documentation.patch rename to toolchain/gcc/patches/10.2.0/010-documentation.patch index 9783ff1ef0..85990e5acc 100644 --- a/toolchain/gcc/patches/10.1.0/010-documentation.patch +++ b/toolchain/gcc/patches/10.2.0/010-documentation.patch @@ -12,7 +12,7 @@ Date: Tue Feb 26 16:16:33 2013 +0000 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in -@@ -3283,18 +3283,10 @@ doc/gcc.info: $(TEXI_GCC_FILES) +@@ -3285,18 +3285,10 @@ doc/gcc.info: $(TEXI_GCC_FILES) doc/gccint.info: $(TEXI_GCCINT_FILES) doc/cppinternals.info: $(TEXI_CPPINT_FILES) diff --git a/toolchain/gcc/patches/10.1.0/110-Fix-MIPS-PR-84790.patch b/toolchain/gcc/patches/10.2.0/110-Fix-MIPS-PR-84790.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/110-Fix-MIPS-PR-84790.patch rename to toolchain/gcc/patches/10.2.0/110-Fix-MIPS-PR-84790.patch diff --git a/toolchain/gcc/patches/10.1.0/230-musl_libssp.patch b/toolchain/gcc/patches/10.2.0/230-musl_libssp.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/230-musl_libssp.patch rename to toolchain/gcc/patches/10.2.0/230-musl_libssp.patch diff --git a/toolchain/gcc/patches/10.1.0/300-mips_Os_cpu_rtx_cost_model.patch b/toolchain/gcc/patches/10.2.0/300-mips_Os_cpu_rtx_cost_model.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/300-mips_Os_cpu_rtx_cost_model.patch rename to toolchain/gcc/patches/10.2.0/300-mips_Os_cpu_rtx_cost_model.patch diff --git a/toolchain/gcc/patches/10.1.0/810-arm-softfloat-libgcc.patch b/toolchain/gcc/patches/10.2.0/810-arm-softfloat-libgcc.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/810-arm-softfloat-libgcc.patch rename to toolchain/gcc/patches/10.2.0/810-arm-softfloat-libgcc.patch diff --git a/toolchain/gcc/patches/10.1.0/820-libgcc_pic.patch b/toolchain/gcc/patches/10.2.0/820-libgcc_pic.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/820-libgcc_pic.patch rename to toolchain/gcc/patches/10.2.0/820-libgcc_pic.patch diff --git a/toolchain/gcc/patches/10.1.0/840-armv4_pass_fix-v4bx_to_ld.patch b/toolchain/gcc/patches/10.2.0/840-armv4_pass_fix-v4bx_to_ld.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/840-armv4_pass_fix-v4bx_to_ld.patch rename to toolchain/gcc/patches/10.2.0/840-armv4_pass_fix-v4bx_to_ld.patch diff --git a/toolchain/gcc/patches/10.1.0/850-use_shared_libgcc.patch b/toolchain/gcc/patches/10.2.0/850-use_shared_libgcc.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/850-use_shared_libgcc.patch rename to toolchain/gcc/patches/10.2.0/850-use_shared_libgcc.patch diff --git a/toolchain/gcc/patches/10.1.0/851-libgcc_no_compat.patch b/toolchain/gcc/patches/10.2.0/851-libgcc_no_compat.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/851-libgcc_no_compat.patch rename to toolchain/gcc/patches/10.2.0/851-libgcc_no_compat.patch diff --git a/toolchain/gcc/patches/10.1.0/870-ppc_no_crtsavres.patch b/toolchain/gcc/patches/10.2.0/870-ppc_no_crtsavres.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/870-ppc_no_crtsavres.patch rename to toolchain/gcc/patches/10.2.0/870-ppc_no_crtsavres.patch diff --git a/toolchain/gcc/patches/10.1.0/881-no_tm_section.patch b/toolchain/gcc/patches/10.2.0/881-no_tm_section.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/881-no_tm_section.patch rename to toolchain/gcc/patches/10.2.0/881-no_tm_section.patch diff --git a/toolchain/gcc/patches/10.1.0/900-bad-mips16-crt.patch b/toolchain/gcc/patches/10.2.0/900-bad-mips16-crt.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/900-bad-mips16-crt.patch rename to toolchain/gcc/patches/10.2.0/900-bad-mips16-crt.patch diff --git a/toolchain/gcc/patches/10.1.0/910-mbsd_multi.patch b/toolchain/gcc/patches/10.2.0/910-mbsd_multi.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/910-mbsd_multi.patch rename to toolchain/gcc/patches/10.2.0/910-mbsd_multi.patch diff --git a/toolchain/gcc/patches/10.1.0/920-specs_nonfatal_getenv.patch b/toolchain/gcc/patches/10.2.0/920-specs_nonfatal_getenv.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/920-specs_nonfatal_getenv.patch rename to toolchain/gcc/patches/10.2.0/920-specs_nonfatal_getenv.patch diff --git a/toolchain/gcc/patches/10.1.0/930-fix-mips-noexecstack.patch b/toolchain/gcc/patches/10.2.0/930-fix-mips-noexecstack.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/930-fix-mips-noexecstack.patch rename to toolchain/gcc/patches/10.2.0/930-fix-mips-noexecstack.patch diff --git a/toolchain/gcc/patches/10.1.0/931-libffi-fix-MIPS-softfloat-build-issue.patch b/toolchain/gcc/patches/10.2.0/931-libffi-fix-MIPS-softfloat-build-issue.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/931-libffi-fix-MIPS-softfloat-build-issue.patch rename to toolchain/gcc/patches/10.2.0/931-libffi-fix-MIPS-softfloat-build-issue.patch diff --git a/toolchain/gcc/patches/10.1.0/960-gotools-fix-compilation-when-making-cross-compiler.patch b/toolchain/gcc/patches/10.2.0/960-gotools-fix-compilation-when-making-cross-compiler.patch similarity index 100% rename from toolchain/gcc/patches/10.1.0/960-gotools-fix-compilation-when-making-cross-compiler.patch rename to toolchain/gcc/patches/10.2.0/960-gotools-fix-compilation-when-making-cross-compiler.patch diff --git a/toolchain/musl/common.mk b/toolchain/musl/common.mk index 6a59577108..8c8eddc855 100644 --- a/toolchain/musl/common.mk +++ b/toolchain/musl/common.mk @@ -9,7 +9,7 @@ include $(INCLUDE_DIR)/target.mk PKG_NAME:=musl PKG_VERSION:=1.1.24 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://musl.libc.org/releases/ diff --git a/toolchain/musl/patches/600-nftw-support-common-gnu-extension.patch b/toolchain/musl/patches/600-nftw-support-common-gnu-extension.patch new file mode 100644 index 0000000000..13914efcba --- /dev/null +++ b/toolchain/musl/patches/600-nftw-support-common-gnu-extension.patch @@ -0,0 +1,102 @@ +From 6f1143425a3afc4eb5086e9c90e7efb3affd7cb7 Mon Sep 17 00:00:00 2001 +From: Tony Ambardar +Date: Sat, 11 Jul 2020 06:35:46 -0700 +Subject: [PATCH 2/2] nftw: support common gnu extension + +Signed-off-by: Tony Ambardar +--- + include/ftw.h | 8 ++++++++ + src/misc/nftw.c | 35 ++++++++++++++++++++++++++++++----- + 2 files changed, 38 insertions(+), 5 deletions(-) + +diff --git a/include/ftw.h b/include/ftw.h +index b15c062a..ce85deac 100644 +--- a/include/ftw.h ++++ b/include/ftw.h +@@ -21,6 +21,14 @@ extern "C" { + #define FTW_CHDIR 4 + #define FTW_DEPTH 8 + ++#ifdef _GNU_SOURCE ++#define FTW_ACTIONRETVAL 16 ++#define FTW_CONTINUE 0 ++#define FTW_STOP 1 ++#define FTW_SKIP_SUBTREE 2 ++#define FTW_SKIP_SIBLINGS 3 ++#endif ++ + struct FTW { + int base; + int level; +diff --git a/src/misc/nftw.c b/src/misc/nftw.c +index 8dcff7fe..0bb7b601 100644 +--- a/src/misc/nftw.c ++++ b/src/misc/nftw.c +@@ -1,3 +1,4 @@ ++#define _GNU_SOURCE + #include + #include + #include +@@ -72,8 +73,20 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, + if (!fd_limit) close(dfd); + } + +- if (!(flags & FTW_DEPTH) && (r=fn(path, &st, type, &lev))) +- return r; ++ if (!(flags & FTW_DEPTH) && (r=fn(path, &st, type, &lev))) { ++ if (flags & FTW_ACTIONRETVAL) ++ switch (r) { ++ case FTW_SKIP_SUBTREE: ++ h = NULL; ++ case FTW_CONTINUE: ++ break; ++ case FTW_SKIP_SIBLINGS: ++ case FTW_STOP: ++ return r; ++ } ++ else ++ return r; ++ } + + for (; h; h = h->chain) + if (h->dev == st.st_dev && h->ino == st.st_ino) +@@ -101,7 +114,10 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, + strcpy(path+j+1, de->d_name); + if ((r=do_nftw(path, fn, fd_limit-1, flags, &new))) { + closedir(d); +- return r; ++ if ((flags & FTW_ACTIONRETVAL) && r == FTW_SKIP_SIBLINGS) ++ break; ++ else ++ return r; + } + } + closedir(d); +@@ -112,8 +128,16 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, + } + + path[l] = 0; +- if ((flags & FTW_DEPTH) && (r=fn(path, &st, type, &lev))) +- return r; ++ if ((flags & FTW_DEPTH) && (r=fn(path, &st, type, &lev))) { ++ if (flags & FTW_ACTIONRETVAL) ++ switch (r) { ++ case FTW_SKIP_SIBLINGS: ++ case FTW_STOP: ++ return r; ++ } ++ else ++ return r; ++ } + + return 0; + } +@@ -139,4 +163,5 @@ int nftw(const char *path, int (*fn)(const char *, const struct stat *, int, str + return r; + } + ++#undef nftw64 + weak_alias(nftw, nftw64); +-- +2.17.1 + diff --git a/tools/lzma-old/Makefile b/tools/lzma-old/Makefile index 5204127a80..4ccd336ed0 100644 --- a/tools/lzma-old/Makefile +++ b/tools/lzma-old/Makefile @@ -10,7 +10,7 @@ PKG_NAME:=lzma-old PKG_VERSION:=4.32 PKG_SOURCE:=lzma-$(PKG_VERSION).tar.bz2 -PKG_SOURCE_URL:=http://downloads.openwrt.org/sources/ +PKG_SOURCE_URL:=https://downloads.openwrt.org/sources PKG_HASH:=49053e4bb5e0646a841d250d9cb81f7714f5fff04a133216c4748163567acc3d HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/lzma-$(PKG_VERSION) diff --git a/tools/lzma/Makefile b/tools/lzma/Makefile index 7d2669e95f..04c427a3a9 100644 --- a/tools/lzma/Makefile +++ b/tools/lzma/Makefile @@ -10,7 +10,7 @@ PKG_NAME:=lzma PKG_VERSION:=4.65 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 -PKG_SOURCE_URL:=http://downloads.openwrt.org/sources/ +PKG_SOURCE_URL:=https://downloads.openwrt.org/sources PKG_HASH:=dcbdb5f4843eff638e4a5e8be0e2486a3c5483df73c70823618db8e66f609ec2 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_VERSION)