diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..4cfa2dd91d063f78a4bdb5777d226c9884f10fea --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text diff --git a/.lfsconfig b/.lfsconfig new file mode 100644 index 0000000000000000000000000000000000000000..faa96ea39d86c2bbfa7ab79d397c85ad7b5a8489 --- /dev/null +++ b/.lfsconfig @@ -0,0 +1,2 @@ +[lfs] + url = https://artlfs.openeuler.openatom.cn/src-openEuler/boost diff --git a/boost-1.73.0-cmakedir.patch b/boost-1.73.0-cmakedir.patch new file mode 100644 index 0000000000000000000000000000000000000000..e47728f52128f7b78eb3fdf5fcda4920416d48f3 --- /dev/null +++ b/boost-1.73.0-cmakedir.patch @@ -0,0 +1,28 @@ +--- boost_1_73_0/tools/boost_install/boost-install.jam~ 2020-04-24 20:21:50.330267122 +0100 ++++ boost_1_73_0/tools/boost_install/boost-install.jam 2020-04-24 20:22:16.818360540 +0100 +@@ -652,25 +652,6 @@ + "get_filename_component(_BOOST_CMAKEDIR \"${CMAKE_CURRENT_LIST_DIR}/../\" REALPATH)" + : true ; + +- if [ path.is-rooted $(cmakedir) ] +- { +- local cmakedir-native = [ path-native-fwd $(cmakedir) ] ; +- +- print.text +- +- "" +- "# If the computed and the original directories are symlink-equivalent, use original" +- "if(EXISTS \"$(cmakedir-native)\")" +- " get_filename_component(_BOOST_CMAKEDIR_ORIGINAL \"$(cmakedir-native)\" REALPATH)" +- " if(_BOOST_CMAKEDIR STREQUAL _BOOST_CMAKEDIR_ORIGINAL)" +- " set(_BOOST_CMAKEDIR \"$(cmakedir-native)\")" +- " endif()" +- " unset(_BOOST_CMAKEDIR_ORIGINAL)" +- "endif()" +- "" +- : true ; +- } +- + get-dir "_BOOST_INCLUDEDIR" : $(includedir) ; + + if $(library-type) = INTERFACE diff --git a/boost-1.77-locale-remove-linking-with-boost-system.patch b/boost-1.77-locale-remove-linking-with-boost-system.patch deleted file mode 100644 index a3ecde136813ea2de9b272497df9c834eccb8083..0000000000000000000000000000000000000000 --- a/boost-1.77-locale-remove-linking-with-boost-system.patch +++ /dev/null @@ -1,355 +0,0 @@ -From aebac1401f9ddabb84c222481301d25beea1988d Mon Sep 17 00:00:00 2001 -From: Andrey Semashev -Date: Mon, 14 Jan 2019 21:08:25 +0300 -Subject: [PATCH 1/2] Remove linking with Boost.System. - -Since Boost.System is header-only now, no need to link with the library. ---- - build/Jamfile.v2 | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/libs/locale/build/Jamfile.v2 b/libs/locale/build/Jamfile.v2 -index 578e722e..43ab0014 100644 ---- a/libs/locale/build/Jamfile.v2 -+++ b/libs/locale/build/Jamfile.v2 -@@ -382,9 +382,6 @@ rule configure-full ( properties * : flags-only ) - result += util/gregorian.cpp ; - } - -- result += ../../system/build//boost_system ; -- -- - if "$(flags-only)" = "flags" - { - return $(flags-result) ; - -From b01aab1d28c9b32d107ae39c76c9af988420d476 Mon Sep 17 00:00:00 2001 -From: Andrey Semashev -Date: Mon, 14 Jan 2019 21:10:38 +0300 -Subject: [PATCH 2/2] Trim trailing spaces. - ---- - build/Jamfile.v2 | 119 +++++++++++++++++++++++------------------------ - 1 file changed, 59 insertions(+), 60 deletions(-) - -diff --git a/libs/locale/build/Jamfile.v2 b/libs/locale/build/Jamfile.v2 -index 43ab0014..97dd68c7 100644 ---- a/libs/locale/build/Jamfile.v2 -+++ b/libs/locale/build/Jamfile.v2 -@@ -1,6 +1,6 @@ - # copyright John Maddock 2003, Artyom Beilis 2010 --# Distributed under the Boost Software License, Version 1.0. --# (See accompanying file LICENSE_1_0.txt or copy at -+# Distributed under the Boost Software License, Version 1.0. -+# (See accompanying file LICENSE_1_0.txt or copy at - # http://www.boost.org/LICENSE_1_0.txt. - - -@@ -32,11 +32,11 @@ explicit has_iconv ; - - ICONV_PATH = [ modules.peek : ICONV_PATH ] ; - --lib iconv -- : -+lib iconv -+ : - : $(ICONV_PATH)/lib shared shared - : -- : $(ICONV_PATH)/include -+ : $(ICONV_PATH)/include - ; - - explicit iconv ; -@@ -45,8 +45,8 @@ obj has_iconv_libc_ext : ../build/has_iconv.cpp iconv ; - exe has_external_iconv : has_iconv_libc_ext iconv ; - explicit has_external_iconv ; - --exe accepts_shared_option : ../build/option.cpp -- : -shared-libstdc++ -+exe accepts_shared_option : ../build/option.cpp -+ : -shared-libstdc++ - -shared-libgcc - -shared-libstdc++ - -shared-libgcc -@@ -71,8 +71,8 @@ if $(ICU_LINK) - else - { - searched-lib icuuc : : icuuc -- $(ICU_PATH)/lib -- shared -+ $(ICU_PATH)/lib -+ shared - shared ; - - searched-lib icuuc : : msvc -@@ -120,9 +120,9 @@ else - - explicit icuuc icudt icuin ; - -- ICU_OPTS = $(ICU_PATH)/include -- icuuc/shared/shared -- icudt/shared/shared -+ ICU_OPTS = $(ICU_PATH)/include -+ icuuc/shared/shared -+ icudt/shared/shared - icuin/shared/shared - $(ICU_PATH)/bin - shared ; -@@ -130,8 +130,8 @@ else - - - searched-lib icuuc_64 : : icuuc -- $(ICU_PATH)/lib64 -- shared -+ $(ICU_PATH)/lib64 -+ shared - shared ; - - searched-lib icuuc_64 : : msvc -@@ -179,14 +179,14 @@ else - - explicit icuuc_64 icudt_64 icuin_64 ; - -- ICU64_OPTS = $(ICU_PATH)/include -- icuuc_64/shared/shared -- icudt_64/shared/shared -+ ICU64_OPTS = $(ICU_PATH)/include -+ icuuc_64/shared/shared -+ icudt_64/shared/shared - icuin_64/shared/shared - $(ICU_PATH)/bin64 - shared ; -- -- -+ -+ - } - - obj has_icu_obj : ../build/has_icu_test.cpp : $(ICU_OPTS) ; -@@ -206,11 +206,11 @@ rule configure-full ( properties * : flags-only ) - - local result ; - local flags-result ; -- -+ - local found-iconv ; -- -+ - if on in $(properties) -- || ! in $(properties:G) -+ || ! in $(properties:G) - && ! solaris in $(properties) - { - # See if iconv is bundled with standard library. -@@ -218,7 +218,7 @@ rule configure-full ( properties * : flags-only ) - { - found-iconv = true ; - } -- else -+ else - { - if [ configure.builds has_external_iconv : $(properties) : "iconv (separate)" ] - { -@@ -226,8 +226,8 @@ rule configure-full ( properties * : flags-only ) - result += iconv ; - } - } -- } -- if $(found-iconv) -+ } -+ if $(found-iconv) - { - flags-result += BOOST_LOCALE_WITH_ICONV=1 ; - } -@@ -249,7 +249,7 @@ rule configure-full ( properties * : flags-only ) - - if $(found-icu) - { -- ICU_SOURCES = -+ ICU_SOURCES = - boundary - codecvt - collator -@@ -260,20 +260,20 @@ rule configure-full ( properties * : flags-only ) - numeric - time_zone - ; -- -- result += icu/$(ICU_SOURCES).cpp -- ../../thread/build//boost_thread -+ -+ result += icu/$(ICU_SOURCES).cpp -+ ../../thread/build//boost_thread - ; - } - - } -- -- if ! $(found-iconv) && ! $(found-icu) && ! windows in $(properties) && ! cygwin in $(properties) -+ -+ if ! $(found-iconv) && ! $(found-icu) && ! windows in $(properties) && ! cygwin in $(properties) - { - ECHO "- Boost.Locale needs either iconv or ICU library to be built." ; - result += no ; - } -- -+ - if ! in $(properties:G) - { - if sun in $(properties) -@@ -283,9 +283,9 @@ rule configure-full ( properties * : flags-only ) - else - { - properties += on ; -- } -+ } - } -- -+ - if off in $(properties) - { - flags-result += BOOST_LOCALE_NO_STD_BACKEND=1 ; -@@ -301,38 +301,38 @@ rule configure-full ( properties * : flags-only ) - ; - result += std/$(STD_SOURCES).cpp ; - } -- -+ - if ! in $(properties:G) - { -- if windows in $(properties) -+ if windows in $(properties) - || cygwin in $(properties) - { - properties += on ; -- } -+ } - else - { - properties += off ; -- } -+ } - } -- if windows in $(properties) -- && gcc in $(properties) -+ if windows in $(properties) -+ && gcc in $(properties) - && shared in $(properties) - && [ configure.builds accepts_shared_option : $(properties) : "g++ -shared-* supported" ] - { -- flags-result += -shared-libstdc++ -+ flags-result += -shared-libstdc++ - -shared-libgcc - -shared-libstdc++ - -shared-libgcc - ; - } -- -+ - if off in $(properties) - { - flags-result += BOOST_LOCALE_NO_WINAPI_BACKEND=1 ; - } - else - { -- WINAPI_SOURCES = -+ WINAPI_SOURCES = - collate - converter - numeric -@@ -340,34 +340,34 @@ rule configure-full ( properties * : flags-only ) - ; - result += win32/$(WINAPI_SOURCES).cpp ; - } -- -+ - if ( ! off in $(properties) || ! off in $(properties) ) - && ( windows in $(properties) || cygwin in $(properties) ) - { - result += win32/lcid.cpp ; - } -- -+ - if ! in $(properties:G) - { -- if linux in $(properties) -- || darwin in $(properties) -+ if linux in $(properties) -+ || darwin in $(properties) - || ( freebsd in $(properties) && [ configure.builds has_xlocale : $(properties) : "xlocale supported" ] ) - { - properties += on ; - } - else - { -- properties += off ; -- } -+ properties += off ; -+ } - } -- -+ - if off in $(properties) - { -- flags-result += BOOST_LOCALE_NO_POSIX_BACKEND=1 ; -+ flags-result += BOOST_LOCALE_NO_POSIX_BACKEND=1 ; - } - else - { -- POSIX_SOURCES = -+ POSIX_SOURCES = - collate - converter - numeric -@@ -381,12 +381,13 @@ rule configure-full ( properties * : flags-only ) - { - result += util/gregorian.cpp ; - } -- -- if "$(flags-only)" = "flags" -+ -+ if "$(flags-only)" = "flags" - { - return $(flags-result) ; - } -- else { -+ else -+ { - result += $(flags-result) ; - return $(result) ; - } -@@ -396,7 +397,6 @@ rule configure ( properties * ) - { - local result = [ configure-full $(properties) : "all" ] ; - return $(result) ; -- - } - - rule configure-flags ( properties * ) -@@ -404,15 +404,14 @@ rule configure-flags ( properties * ) - local result ; - result = [ configure-full $(properties) : "flags" ] ; - return $(result) ; -- - } - - - alias build_options : : : : @configure ; - alias build_flags : : : : @configure-flags ; - --lib boost_locale -- : -+lib boost_locale -+ : - encoding/codepage.cpp - shared/date_time.cpp - shared/format.cpp -@@ -425,7 +424,7 @@ lib boost_locale - util/codecvt_converter.cpp - util/default_locale.cpp - util/info.cpp -- util/locale_data.cpp -+ util/locale_data.cpp - : - # Don't link explicitly, not required - BOOST_THREAD_NO_LIB=1 diff --git a/boost-1.77-type_erasure-remove-boost-system-linkage.patch b/boost-1.77-type_erasure-remove-boost-system-linkage.patch deleted file mode 100644 index 2236d5654edebeb1d37c6733655d073fa22e98c1..0000000000000000000000000000000000000000 --- a/boost-1.77-type_erasure-remove-boost-system-linkage.patch +++ /dev/null @@ -1,24 +0,0 @@ -From d96af5c5060f02d35a70f57d971b539258279634 Mon Sep 17 00:00:00 2001 -From: sdlzx -Date: Tue, 5 Oct 2021 17:14:02 +0800 -Subject: [PATCH] Remove boost.system linkage - ---- - libs/type_erasure/build/Jamfile.v2 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libs/type_erasure/build/Jamfile.v2 b/libs/type_erasure/build/Jamfile.v2 -index 2408e6bd8..3a77b5e57 100644 ---- a/libs/type_erasure/build/Jamfile.v2 -+++ b/libs/type_erasure/build/Jamfile.v2 -@@ -12,6 +12,6 @@ project /boost/type_erasure - : usage-requirements shared:BOOST_TYPE_ERASURE_DYN_LINK - ; - --lib boost_type_erasure : dynamic_binding.cpp /boost//thread /boost//system ; -+lib boost_type_erasure : dynamic_binding.cpp /boost//thread ; - - boost-install boost_type_erasure ; --- -2.31.1 - diff --git a/boost-1.78-add-boost-context-support-for-loongarch64.patch b/boost-1.78-add-boost-context-support-for-loongarch64.patch deleted file mode 100644 index 7bd4eb6744cbb66a4b29c009d52789dc4a0793b9..0000000000000000000000000000000000000000 --- a/boost-1.78-add-boost-context-support-for-loongarch64.patch +++ /dev/null @@ -1,664 +0,0 @@ -From 217e51b9101fb4779c8dc00a562f77c0c9a70afe Mon Sep 17 00:00:00 2001 -From: Wenlong Zhang -Date: Wed, 11 Jan 2023 17:28:18 +0800 -Subject: [PATCH] add boost context support for loongarch64 new - ---- - boost/predef/architecture.h | 1 + - boost/predef/architecture/loongarch.h | 39 ++++++ - boost/predef/other/endian.h | 1 + - boostcpp.jam | 5 +- - libs/config/checks/architecture/Jamfile.jam | 1 + - libs/config/checks/architecture/loongarch.cpp | 11 ++ - libs/context/CMakeLists.txt | 4 +- - libs/context/build/Jamfile.v2 | 13 ++ - libs/context/build/architecture.jam | 4 + - libs/context/doc/architectures.qbk | 1 + - libs/context/doc/context.xml | 27 ++++ - .../doc/html/context/architectures.html | 27 ++++ - .../src/asm/jump_loongarch64_sysv_elf_gas.S | 121 ++++++++++++++++++ - .../src/asm/make_loongarch64_sysv_elf_gas.S | 72 +++++++++++ - .../src/asm/ontop_loongarch64_sysv_elf_gas.S | 118 +++++++++++++++++ - tools/build/src/engine/jam.h | 4 + - .../tools/features/architecture-feature.jam | 3 + - 17 files changed, 448 insertions(+), 4 deletions(-) - create mode 100644 boost/predef/architecture/loongarch.h - create mode 100644 libs/config/checks/architecture/loongarch.cpp - create mode 100644 libs/context/src/asm/jump_loongarch64_sysv_elf_gas.S - create mode 100644 libs/context/src/asm/make_loongarch64_sysv_elf_gas.S - create mode 100644 libs/context/src/asm/ontop_loongarch64_sysv_elf_gas.S - -diff --git a/boost/predef/architecture.h b/boost/predef/architecture.h -index 471c263..55d036f 100644 ---- a/boost/predef/architecture.h -+++ b/boost/predef/architecture.h -@@ -17,6 +17,7 @@ http://www.boost.org/LICENSE_1_0.txt) - #include - #include - #include -+#include - #include - #include - #include -diff --git a/boost/predef/architecture/loongarch.h b/boost/predef/architecture/loongarch.h -new file mode 100644 -index 0000000..17015d8 ---- /dev/null -+++ b/boost/predef/architecture/loongarch.h -@@ -0,0 +1,39 @@ -+/* -+Copyright Zhang Na 2022 -+Distributed under the Boost Software License, Version 1.0. -+(See accompanying file LICENSE_1_0.txt or copy at -+http://www.boost.org/LICENSE_1_0.txt) -+*/ -+ -+#ifndef BOOST_PREDEF_ARCHITECTURE_LOONGARCH_H -+#define BOOST_PREDEF_ARCHITECTURE_LOONGARCH_H -+ -+#include -+#include -+ -+/* tag::reference[] -+= `BOOST_ARCH_LOONGARCH` -+[options="header"] -+|=== -+| {predef_symbol} | {predef_version} -+| `+__loongarch__+` | {predef_detection} -+|=== -+*/ // end::reference[] -+ -+#define BOOST_ARCH_LOONGARCH BOOST_VERSION_NUMBER_NOT_AVAILABLE -+ -+#if defined(__loongarch__) -+# undef BOOST_ARCH_LOONGARCH -+# define BOOST_ARCH_LOONGARCH BOOST_VERSION_NUMBER_AVAILABLE -+#endif -+ -+#if BOOST_ARCH_LOONGARCH -+# define BOOST_ARCH_LOONGARCH_AVAILABLE -+#endif -+ -+#define BOOST_ARCH_LOONGARCH_NAME "LoongArch" -+ -+#endif -+ -+#include -+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_LOONGARCH,BOOST_ARCH_LOONGARCH_NAME) -diff --git a/boost/predef/other/endian.h b/boost/predef/other/endian.h -index d8ec63f..b712673 100644 ---- a/boost/predef/other/endian.h -+++ b/boost/predef/other/endian.h -@@ -121,6 +121,7 @@ information and acquired knowledge: - defined(__ARMEL__) || \ - defined(__THUMBEL__) || \ - defined(__AARCH64EL__) || \ -+ defined(__loongarch__) || \ - defined(_MIPSEL) || \ - defined(__MIPSEL) || \ - defined(__MIPSEL__) || \ -diff --git a/boostcpp.jam b/boostcpp.jam -index f60e85c..c938b72 100644 ---- a/boostcpp.jam -+++ b/boostcpp.jam -@@ -634,7 +634,7 @@ rule address-model ( ) - return @boostcpp.deduce-address-model ; - } - --local deducable-architectures = sw_64 arm mips1 power riscv s390x sparc x86 combined ; -+local deducable-architectures = sw_64 arm loongarch mips1 power riscv s390x sparc x86 combined ; - feature.feature deduced-architecture : $(deducable-architectures) : propagated optional composite hidden ; - for a in $(deducable-architectures) - { -@@ -645,10 +645,11 @@ rule deduce-architecture ( properties * ) - { - local result ; - local filtered = [ toolset-properties $(properties) ] ; -- local names = arm sw_64 mips1 power riscv s390x sparc x86 combined ; -+ local names = arm sw_64 loongarch mips1 power riscv s390x sparc x86 combined ; - local idx = [ configure.find-builds "default architecture" : $(filtered) - : /boost/architecture//arm - : /boost/architecture//sw_64 -+ : /boost/architecture//loongarch - : /boost/architecture//mips1 - : /boost/architecture//power - : /boost/architecture//riscv -diff --git a/libs/config/checks/architecture/Jamfile.jam b/libs/config/checks/architecture/Jamfile.jam -index f86c732..ee260ff 100644 ---- a/libs/config/checks/architecture/Jamfile.jam -+++ b/libs/config/checks/architecture/Jamfile.jam -@@ -19,6 +19,7 @@ obj 64 : 64.cpp ; - obj arm : arm.cpp ; - obj sw_64 : sw_64.cpp ; - obj combined : combined.cpp ; -+obj loongarch : loongarch.cpp ; - obj mips1 : mips1.cpp ; - obj power : power.cpp ; - obj riscv : riscv.cpp ; -diff --git a/libs/config/checks/architecture/loongarch.cpp b/libs/config/checks/architecture/loongarch.cpp -new file mode 100644 -index 0000000..5be8cb0 ---- /dev/null -+++ b/libs/config/checks/architecture/loongarch.cpp -@@ -0,0 +1,11 @@ -+// loongarch.cpp -+// -+// Copyright (c) 2012 Steven Watanabe -+// -+// Distributed under the Boost Software License Version 1.0. (See -+// accompanying file LICENSE_1_0.txt or copy at -+// http://www.boost.org/LICENSE_1_0.txt) -+ -+#if !defined(__loongarch__) -+#error "Not LoongArch" -+#endif -diff --git a/libs/context/CMakeLists.txt b/libs/context/CMakeLists.txt -index 99c11b2..f301143 100644 ---- a/libs/context/CMakeLists.txt -+++ b/libs/context/CMakeLists.txt -@@ -48,7 +48,7 @@ unset(_default_abi) - - ## Arch-and-model - --set(_all_archs arm arm64 sw_64 mips32 mips64 ppc32 ppc64 riscv64 s390x i386 x86_64 combined) -+set(_all_archs arm arm64 loongarch64 sw_64 mips32 mips64 ppc32 ppc64 riscv64 s390x i386 x86_64 combined) - - # Try at start to auto determine arch from CMake. - if(CMAKE_SYSTEM_PROCESSOR IN_LIST _all_archs) -@@ -74,7 +74,7 @@ else() - endif() - endif() - --set(BOOST_CONTEXT_ARCHITECTURE "${_default_arch}" CACHE STRING "Boost.Context architecture (arm, arm64, mips32, sw_64, mips64, ppc32, ppc64, riscv64, s390x, i386, x86_64, combined)") -+set(BOOST_CONTEXT_ARCHITECTURE "${_default_arch}" CACHE STRING "Boost.Context architecture (arm, arm64, loongarch64, mips32, sw_64, mips64, ppc32, ppc64, riscv64, s390x, i386, x86_64, combined)") - set_property(CACHE BOOST_CONTEXT_ARCHITECTURE PROPERTY STRINGS ${_all_archs}) - - unset(_all_archs) -diff --git a/libs/context/build/Jamfile.v2 b/libs/context/build/Jamfile.v2 -index 30e9598..6238510 100644 ---- a/libs/context/build/Jamfile.v2 -+++ b/libs/context/build/Jamfile.v2 -@@ -254,6 +254,19 @@ alias asm_sources - darwin - ; - -+# LOONGARCH64 -+# LOONGARCH64/SYSV/ELF -+alias asm_sources -+ : asm/make_loongarch64_sysv_elf_gas.S -+ asm/jump_loongarch64_sysv_elf_gas.S -+ asm/ontop_loongarch64_sysv_elf_gas.S -+ : sysv -+ 64 -+ loongarch -+ elf -+ gcc -+ ; -+ - # MIPS - # MIPS32/O32/ELF - alias asm_sources -diff --git a/libs/context/build/architecture.jam b/libs/context/build/architecture.jam -index 4c7d211..78820cd 100644 ---- a/libs/context/build/architecture.jam -+++ b/libs/context/build/architecture.jam -@@ -59,6 +59,10 @@ rule deduce-architecture ( properties * ) - { - return sw_64 ; - } -+ else if [ configure.builds /boost/architecture//loongarch : $(properties) : loongarch ] -+ { -+ return loongarch ; -+ } - else if [ configure.builds /boost/architecture//mips : $(properties) : mips ] - { - return mips ; -diff --git a/libs/context/doc/architectures.qbk b/libs/context/doc/architectures.qbk -index 4be823c..76d6d58 100644 ---- a/libs/context/doc/architectures.qbk -+++ b/libs/context/doc/architectures.qbk -@@ -15,6 +15,7 @@ architectures: - [[arm (aarch32)] [AAPCS|ELF] [AAPCS|PE] [-] [AAPCS|MACH-O]] - [[arm (aarch64)] [AAPCS|ELF] [-] [AAPCS|MACH-O] [AAPCS|MACH-O]] - [[i386] [SYSV|ELF] [MS|PE] [SYSV|MACH-O] [-]] -+ [[loongarch64] [SYSV|ELF] [-] [-] [-]] - [[mips] [O32|N64|ELF] [-] [-] [-]] - [[ppc32] [SYSV|ELF|XCOFF] [-] [SYSV|MACH-O] [-]] - [[ppc64] [SYSV|ELF|XCOFF] [-] [SYSV|MACH-O] [-]] -diff --git a/libs/context/doc/context.xml b/libs/context/doc/context.xml -index d83439d..ef920cd 100644 ---- a/libs/context/doc/context.xml -+++ b/libs/context/doc/context.xml -@@ -3379,6 +3379,33 @@ - - - -+ -+ -+ -+ loongarch64 -+ -+ -+ -+ -+ SYSV|ELF -+ -+ -+ -+ -+ - -+ -+ -+ -+ -+ - -+ -+ -+ -+ -+ - -+ -+ -+ - - - -diff --git a/libs/context/doc/html/context/architectures.html b/libs/context/doc/html/context/architectures.html -index 416627d..29bd803 100644 ---- a/libs/context/doc/html/context/architectures.html -+++ b/libs/context/doc/html/context/architectures.html -@@ -151,6 +151,33 @@ - - - -+ -+

-+ loongarch64 -+

-+ -+ -+

-+ SYSV|ELF -+

-+ -+ -+

-+ - -+

-+ -+ -+

-+ - -+

-+ -+ -+

-+ - -+

-+ -+ -+ - -

- mips -diff --git a/libs/context/src/asm/jump_loongarch64_sysv_elf_gas.S b/libs/context/src/asm/jump_loongarch64_sysv_elf_gas.S -new file mode 100644 -index 0000000..74c081e ---- /dev/null -+++ b/libs/context/src/asm/jump_loongarch64_sysv_elf_gas.S -@@ -0,0 +1,121 @@ -+/******************************************************* -+ * * -+ * ------------------------------------------------- * -+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -+ * ------------------------------------------------- * -+ * | 0 | 8 | 16 | 24 | * -+ * ------------------------------------------------- * -+ * | FS0 | FS1 | FS2 | FS3 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -+ * ------------------------------------------------- * -+ * | 32 | 40 | 48 | 56 | * -+ * ------------------------------------------------- * -+ * | FS4 | FS5 | FS6 | FS7 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -+ * ------------------------------------------------- * -+ * | 64 | 72 | 80 | 88 | * -+ * ------------------------------------------------- * -+ * | S0 | S1 | S2 | S3 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -+ * ------------------------------------------------- * -+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * -+ * ------------------------------------------------- * -+ * | S4 | S5 | S6 | S7 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * -+ * ------------------------------------------------- * -+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * -+ * ------------------------------------------------- * -+ * | S8 | FP | RA | PC | * -+ * ------------------------------------------------- * -+ * * -+ * *****************************************************/ -+ -+.file "jump_loongarch64_sysv_elf_gas.S" -+.text -+.globl jump_fcontext -+.align 2 -+.type jump_fcontext,@function -+jump_fcontext: -+ # reserve space on stack -+ addi.d $sp, $sp, -160 -+ -+ # save fs0 - fs7 -+ fst.d $fs0, $sp, 0 -+ fst.d $fs1, $sp, 8 -+ fst.d $fs2, $sp, 16 -+ fst.d $fs3, $sp, 24 -+ fst.d $fs4, $sp, 32 -+ fst.d $fs5, $sp, 40 -+ fst.d $fs6, $sp, 48 -+ fst.d $fs7, $sp, 56 -+ -+ # save s0 - s8, fp, ra -+ st.d $s0, $sp, 64 -+ st.d $s1, $sp, 72 -+ st.d $s2, $sp, 80 -+ st.d $s3, $sp, 88 -+ st.d $s4, $sp, 96 -+ st.d $s5, $sp, 104 -+ st.d $s6, $sp, 112 -+ st.d $s7, $sp, 120 -+ st.d $s8, $sp, 128 -+ st.d $fp, $sp, 136 -+ st.d $ra, $sp, 144 -+ -+ # save RA as PC -+ st.d $ra, $sp, 152 -+ -+ # store SP (pointing to context-data) in A2 -+ move $a2, $sp -+ -+ # restore SP (pointing to context-data) from A0 -+ move $sp, $a0 -+ -+ # load fs0 - fs7 -+ fld.d $fs0, $sp, 0 -+ fld.d $fs1, $sp, 8 -+ fld.d $fs2, $sp, 16 -+ fld.d $fs3, $sp, 24 -+ fld.d $fs4, $sp, 32 -+ fld.d $fs5, $sp, 40 -+ fld.d $fs6, $sp, 48 -+ fld.d $fs7, $sp, 56 -+ -+ #load s0 - s7 -+ ld.d $s0, $sp, 64 -+ ld.d $s1, $sp, 72 -+ ld.d $s2, $sp, 80 -+ ld.d $s3, $sp, 88 -+ ld.d $s4, $sp, 96 -+ ld.d $s5, $sp, 104 -+ ld.d $s6, $sp, 112 -+ ld.d $s7, $sp, 120 -+ ld.d $s8, $sp, 128 -+ ld.d $fp, $sp, 136 -+ ld.d $ra, $sp, 144 -+ -+ # return transfer_t from jump -+ # pass transfer_t as first arg in context function -+ # a0 == FCTX, a1 == DATA -+ move $a0, $a2 -+ -+ # load PC -+ ld.d $a2, $sp, 152 -+ -+ # restore stack -+ addi.d $sp, $sp, 160 -+ -+ # jump to context -+ jr $a2 -+.size jump_fcontext, .-jump_fcontext -+ -+/* Mark that we don't need executable stack. */ -+.section .note.GNU-stack,"",%progbits -diff --git a/libs/context/src/asm/make_loongarch64_sysv_elf_gas.S b/libs/context/src/asm/make_loongarch64_sysv_elf_gas.S -new file mode 100644 -index 0000000..5506270 ---- /dev/null -+++ b/libs/context/src/asm/make_loongarch64_sysv_elf_gas.S -@@ -0,0 +1,72 @@ -+/******************************************************* -+ * * -+ * ------------------------------------------------- * -+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -+ * ------------------------------------------------- * -+ * | 0 | 8 | 16 | 24 | * -+ * ------------------------------------------------- * -+ * | FS0 | FS1 | FS2 | FS3 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -+ * ------------------------------------------------- * -+ * | 32 | 40 | 48 | 56 | * -+ * ------------------------------------------------- * -+ * | FS4 | FS5 | FS6 | FS7 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -+ * ------------------------------------------------- * -+ * | 64 | 72 | 80 | 88 | * -+ * ------------------------------------------------- * -+ * | S0 | S1 | S2 | S3 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -+ * ------------------------------------------------- * -+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * -+ * ------------------------------------------------- * -+ * | S4 | S5 | S6 | S7 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * -+ * ------------------------------------------------- * -+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * -+ * ------------------------------------------------- * -+ * | S8 | FP | RA | PC | * -+ * ------------------------------------------------- * -+ * * -+ * *****************************************************/ -+ -+.file "make_loongarch64_sysv_elf_gas.S" -+.text -+.globl make_fcontext -+.align 2 -+.type make_fcontext,@function -+make_fcontext: -+ # shift address in A0 to lower 16 byte boundary -+ bstrins.d $a0, $zero, 3, 0 -+ -+ # reserve space for context-data on context-stack -+ addi.d $a0, $a0, -160 -+ -+ # third arg of make_fcontext() == address of context-function -+ st.d $a2, $a0, 152 -+ -+ # save address of finish as return-address for context-function -+ # will be entered after context-function returns -+ la.local $a4, finish -+ st.d $a4, $a0, 144 -+ -+ # return pointer to context-data -+ jr $ra -+ -+finish: -+ # exit code is zero -+ li.d $a0, 0 -+ # call _exit(0) -+ b %plt(_exit) -+ -+.size make_fcontext, .-make_fcontext -+/* Mark that we don't need executable stack. */ -+.section .note.GNU-stack,"",%progbits -diff --git a/libs/context/src/asm/ontop_loongarch64_sysv_elf_gas.S b/libs/context/src/asm/ontop_loongarch64_sysv_elf_gas.S -new file mode 100644 -index 0000000..c6ea044 ---- /dev/null -+++ b/libs/context/src/asm/ontop_loongarch64_sysv_elf_gas.S -@@ -0,0 +1,118 @@ -+/******************************************************* -+ * * -+ * ------------------------------------------------- * -+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -+ * ------------------------------------------------- * -+ * | 0 | 8 | 16 | 24 | * -+ * ------------------------------------------------- * -+ * | FS0 | FS1 | FS2 | FS3 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -+ * ------------------------------------------------- * -+ * | 32 | 40 | 48 | 56 | * -+ * ------------------------------------------------- * -+ * | FS4 | FS5 | FS6 | FS7 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -+ * ------------------------------------------------- * -+ * | 64 | 72 | 80 | 88 | * -+ * ------------------------------------------------- * -+ * | S0 | S1 | S2 | S3 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -+ * ------------------------------------------------- * -+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * -+ * ------------------------------------------------- * -+ * | S4 | S5 | S6 | S7 | * -+ * ------------------------------------------------- * -+ * ------------------------------------------------- * -+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * -+ * ------------------------------------------------- * -+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * -+ * ------------------------------------------------- * -+ * | S8 | FP | RA | PC | * -+ * ------------------------------------------------- * -+ * * -+ * *****************************************************/ -+ -+.file "ontop_loongarch64_sysv_elf_gas.S" -+.text -+.globl ontop_fcontext -+.align 2 -+.type ontop_fcontext,@function -+ontop_fcontext: -+ # reserve space on stack -+ addi.d $sp, $sp, -160 -+ -+ # save fs0 - fs7 -+ fst.d $fs0, $sp, 0 -+ fst.d $fs1, $sp, 8 -+ fst.d $fs2, $sp, 16 -+ fst.d $fs3, $sp, 24 -+ fst.d $fs4, $sp, 32 -+ fst.d $fs5, $sp, 40 -+ fst.d $fs6, $sp, 48 -+ fst.d $fs7, $sp, 56 -+ -+ # save s0 - s8, fp, ra -+ st.d $s0, $sp, 64 -+ st.d $s1, $sp, 72 -+ st.d $s2, $sp, 80 -+ st.d $s3, $sp, 88 -+ st.d $s4, $sp, 96 -+ st.d $s5, $sp, 104 -+ st.d $s6, $sp, 112 -+ st.d $s7, $sp, 120 -+ st.d $s8, $sp, 128 -+ st.d $fp, $sp, 136 -+ st.d $ra, $sp, 144 -+ -+ # save RA as PC -+ st.d $ra, $sp, 152 -+ -+ # store SP (pointing to context-data) in A3 -+ move $a3, $sp -+ -+ # restore SP (pointing to context-data) from A0 -+ move $sp, $a0 -+ -+ # load fs0 - fs11 -+ fld.d $fs0, $sp, 0 -+ fld.d $fs1, $sp, 8 -+ fld.d $fs2, $sp, 16 -+ fld.d $fs3, $sp, 24 -+ fld.d $fs4, $sp, 32 -+ fld.d $fs5, $sp, 40 -+ fld.d $fs6, $sp, 48 -+ fld.d $fs7, $sp, 56 -+ -+ #load s0 - s11, fp, ra -+ ld.d $s0, $sp, 64 -+ ld.d $s1, $sp, 72 -+ ld.d $s2, $sp, 80 -+ ld.d $s3, $sp, 88 -+ ld.d $s4, $sp, 96 -+ ld.d $s5, $sp, 104 -+ ld.d $s6, $sp, 112 -+ ld.d $s7, $sp, 120 -+ ld.d $s8, $sp, 128 -+ ld.d $fp, $sp, 136 -+ ld.d $ra, $sp, 144 -+ -+ # return transfer_t from jump -+ # pass transfer_t as first arg in context function -+ # a0 == FCTX, a1 == DATA -+ move $a0, $a3 -+ -+ # adjust stack -+ addi.d $sp, $sp, 160 -+ -+ # jump to context -+ jr $a2 -+.size ontop_fcontext, .-ontop_fcontext -+ -+/* Mark that we don't need executable stack. */ -+.section .note.GNU-stack,"",%progbits -diff --git a/tools/build/src/engine/jam.h b/tools/build/src/engine/jam.h -index 59e5f82..76a7869 100644 ---- a/tools/build/src/engine/jam.h -+++ b/tools/build/src/engine/jam.h -@@ -446,6 +446,10 @@ - #define OSPLAT "OSPLAT=PARISC" - #endif - -+#ifdef __loongarch64 -+ #define OSPLAT "OSPLAT=LOONGARCH64" -+#endif -+ - #ifndef OSPLAT - #define OSPLAT "" - #endif -diff --git a/tools/build/src/tools/features/architecture-feature.jam b/tools/build/src/tools/features/architecture-feature.jam -index e320307..124b4be 100644 ---- a/tools/build/src/tools/features/architecture-feature.jam -+++ b/tools/build/src/tools/features/architecture-feature.jam -@@ -45,6 +45,9 @@ feature.feature architecture - # RISC-V - riscv - -+ # loongarch -+ loongarch -+ - # z Systems (aka s390x) - s390x - : --- -2.33.0 - diff --git a/boost-1.78-build-Don-t-skip-install-targets-if-there-s-build-no-in-ureqs.patch b/boost-1.78-build-Don-t-skip-install-targets-if-there-s-build-no-in-ureqs.patch deleted file mode 100644 index ca4e6ba95e141670f50cf34f223ac35ce18857ab..0000000000000000000000000000000000000000 --- a/boost-1.78-build-Don-t-skip-install-targets-if-there-s-build-no-in-ureqs.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 62e7321669f66a90e2a90c8f31af34f59ebc5d7a Mon Sep 17 00:00:00 2001 -From: Dmitry Arkhipov -Date: Thu, 9 Dec 2021 08:11:57 +0300 -Subject: [PATCH] Don't skip install targets if there's no in ureqs - ---- - tools/build/src/tools/stage.jam | 4 ++++ - tools/build/test/install_build_no.py | 26 ++++++++++++++++++++++++++ - tools/build/test/test_all.py | 1 + - 3 files changed, 31 insertions(+) - create mode 100755 test/install_build_no.py - -diff --git a/tools/build/src/tools/stage.jam b/tools/build/src/tools/stage.jam -index c5f02e3ba4..325129dc81 100644 ---- a/tools/build/src/tools/stage.jam -+++ b/tools/build/src/tools/stage.jam -@@ -478,6 +478,10 @@ class install-target-class : basic-target - return [ sequence.unique $(result2) ] ; - } - -+ rule skip-from-usage-requirements ( ) -+ { -+ } -+ - # Returns true iff 'type' is subtype of some element of 'types-to-include'. - # - local rule include-type ( type : types-to-include * ) -diff --git a/tools/build/test/install_build_no.py b/tools/build/test/install_build_no.py -new file mode 100755 -index 0000000000..0ccf3c5cc6 ---- /dev/null -+++ b/tools/build/test/install_build_no.py -@@ -0,0 +1,26 @@ -+#!/usr/bin/python -+ -+# Copyright 2021 Dmitry Arkhipov (grisumbras@gmail.com) -+# Distributed under the Boost Software License, Version 1.0. -+# (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt) -+ -+# Check that no in usage-requirements of dependencies does not affect -+# install rule, i.e. a skipped installed target does not affect insallation of -+# other targets. -+ -+import BoostBuild -+ -+t = BoostBuild.Tester() -+ -+t.write("a.cpp", "int main() {}\n") -+ -+t.write("jamroot.jam", """ -+make x : : maker : no ; -+exe a : a.cpp ; -+install install : x a ; -+""") -+ -+t.run_build_system() -+t.expect_addition("install/a.exe") -+ -+t.cleanup() -diff --git a/tools/build/test/test_all.py b/tools/build/test/test_all.py -index b7ef5ad701..9ed729d017 100644 ---- a/tools/build/test/test_all.py -+++ b/tools/build/test/test_all.py -@@ -250,6 +250,7 @@ def reorder_tests(tests, first_test): - "inherit_toolset", - "inherited_dependency", - "inline", -+ "install_build_no", - "libjpeg", - "liblzma", - "libpng", diff --git a/boost-1.78-filesystem-Added-protection-for-CVE-2022-21658.patch b/boost-1.78-filesystem-Added-protection-for-CVE-2022-21658.patch deleted file mode 100644 index b306a5c385b32d30840acad146c12d47211a5c03..0000000000000000000000000000000000000000 --- a/boost-1.78-filesystem-Added-protection-for-CVE-2022-21658.patch +++ /dev/null @@ -1,330 +0,0 @@ -From 41d076ace558cfae01e233f9746dc955dcf78dba Mon Sep 17 00:00:00 2001 -From: Andrey Semashev -Date: Sun, 30 Jan 2022 23:41:06 +0300 -Subject: [PATCH] Added protection for CVE-2022-21658 in remove_all on POSIX - systems. - -Another process could replace the directory being processed by remove_all -with a symlink after remove_all called symlink_status but before -it creates a directory iterator. As a result, remove_all would remove -the linked directory contents instead of removing the symlink. - -On POSIX systems that support fdopendir and O_NOFOLLOW flag for open(2), -this can be prevented by opening the directory with O_NOFOLLOW before -iterating. This will fail if the directory was replaced with a symlink. - -No protection on other systems. - -Reported in https://github.com/boostorg/filesystem/issues/224. ---- - libs/filesystem/CMakeLists.txt | 4 ++ - libs/filesystem/build/Jamfile.v2 | 1 + - libs/filesystem/config/Jamfile.v2 | 2 + - libs/filesystem/config/has_fdopendir_nofollow.cpp | 20 ++++++ - boost/filesystem/directory.hpp | 3 +- - libs/filesystem/src/directory.cpp | 53 ++++++++++++++-- - libs/filesystem/src/operations.cpp | 86 ++++++++++++++++---------- - 7 files changed, 131 insertions(+), 38 deletions(-) - create mode 100644 config/has_fdopendir_nofollow.cpp - -diff --git a/libs/filesystem/CMakeLists.txt b/libs/filesystem/CMakeLists.txt -index 5a8678309..37ef7e161 100644 ---- a/libs/filesystem/CMakeLists.txt -+++ b/libs/filesystem/CMakeLists.txt -@@ -59,6 +59,7 @@ if(NOT BOOST_FILESYSTEM_DISABLE_STATX) - check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_statx_syscall.cpp>" BOOST_FILESYSTEM_HAS_STATX_SYSCALL) - endif() - endif() -+check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_fdopendir_nofollow.cpp>" BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) - if(WIN32 AND NOT BOOST_FILESYSTEM_DISABLE_BCRYPT) - set(CMAKE_REQUIRED_LIBRARIES bcrypt) - check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_bcrypt.cpp>" BOOST_FILESYSTEM_HAS_BCRYPT) -@@ -170,6 +171,9 @@ endif() - if(BOOST_FILESYSTEM_HAS_STATX_SYSCALL) - target_compile_definitions(boost_filesystem PRIVATE BOOST_FILESYSTEM_HAS_STATX_SYSCALL) - endif() -+if(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) -+ target_compile_definitions(boost_filesystem PRIVATE BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) -+endif() - - target_link_libraries(boost_filesystem - PUBLIC -diff --git a/libs/filesystem/build/Jamfile.v2 b/libs/filesystem/build/Jamfile.v2 -index 6ab58ddb8..02e3b8971 100644 ---- a/libs/filesystem/build/Jamfile.v2 -+++ b/libs/filesystem/build/Jamfile.v2 -@@ -112,6 +112,7 @@ project boost/filesystem - [ check-target-builds ../config//has_stat_st_birthtim "has stat::st_birthtim" : BOOST_FILESYSTEM_HAS_STAT_ST_BIRTHTIM ] - [ check-target-builds ../config//has_stat_st_birthtimensec "has stat::st_birthtimensec" : BOOST_FILESYSTEM_HAS_STAT_ST_BIRTHTIMENSEC ] - [ check-target-builds ../config//has_stat_st_birthtimespec "has stat::st_birthtimespec" : BOOST_FILESYSTEM_HAS_STAT_ST_BIRTHTIMESPEC ] -+ [ check-target-builds ../config//has_fdopendir_nofollow "has fdopendir(O_NOFOLLOW)" : BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW ] - @check-statx - @select-windows-crypto-api - @check-cxx20-atomic-ref -diff --git a/libs/filesystem/config/Jamfile.v2 b/libs/filesystem/config/Jamfile.v2 -index 2e9ee4bd6..5ea7dc6c7 100644 ---- a/libs/filesystem/config/Jamfile.v2 -+++ b/libs/filesystem/config/Jamfile.v2 -@@ -27,6 +27,8 @@ obj has_stat_st_birthtimensec : has_stat_st_birthtimensec.cpp : ../src - explicit has_stat_st_birthtimensec ; - obj has_stat_st_birthtimespec : has_stat_st_birthtimespec.cpp : ../src ; - explicit has_stat_st_birthtimespec ; -+obj has_fdopendir_nofollow : has_fdopendir_nofollow.cpp : ../src ; -+explicit has_fdopendir_nofollow ; - - lib bcrypt ; - explicit bcrypt ; -diff --git a/libs/filesystem/config/has_fdopendir_nofollow.cpp b/libs/filesystem/config/has_fdopendir_nofollow.cpp -new file mode 100644 -index 000000000..009a73084 ---- /dev/null -+++ b/libs/filesystem/config/has_fdopendir_nofollow.cpp -@@ -0,0 +1,20 @@ -+// Copyright 2022 Andrey Semashev -+ -+// Distributed under the Boost Software License, Version 1.0. -+// See http://www.boost.org/LICENSE_1_0.txt -+ -+// See library home page at http://www.boost.org/libs/filesystem -+ -+#include "platform_config.hpp" -+ -+#include -+#include -+#include -+#include -+ -+int main() -+{ -+ int fd = open(".", O_DIRECTORY | O_RDONLY | O_NOFOLLOW); -+ DIR* dir = fdopendir(fd); -+ return dir != 0; -+} -diff --git a/boost/filesystem/directory.hpp b/boost/filesystem/directory.hpp -index f487633fc..fa1e69be5 100644 ---- a/boost/filesystem/directory.hpp -+++ b/boost/filesystem/directory.hpp -@@ -247,7 +247,8 @@ BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(directory_options, unsigned int) - skip_dangling_symlinks = 1u << 2, // non-standard extension for recursive_directory_iterator: don't follow dangling directory symlinks, - pop_on_error = 1u << 3, // non-standard extension for recursive_directory_iterator: instead of producing an end iterator on errors, - // repeatedly invoke pop() until it succeeds or the iterator becomes equal to end iterator -- _detail_no_push = 1u << 4 // internal use only -+ _detail_no_follow = 1u << 4, // internal use only -+ _detail_no_push = 1u << 5 // internal use only - } - BOOST_SCOPED_ENUM_DECLARE_END(directory_options) - -diff --git a/libs/filesystem/src/directory.cpp b/libs/filesystem/src/directory.cpp -index 554277580..8b41ae5e1 100644 ---- a/libs/filesystem/src/directory.cpp -+++ b/libs/filesystem/src/directory.cpp -@@ -2,7 +2,7 @@ - - // Copyright 2002-2009, 2014 Beman Dawes - // Copyright 2001 Dietmar Kuehl --// Copyright 2019 Andrey Semashev -+// Copyright 2019, 2022 Andrey Semashev - - // Distributed under the Boost Software License, Version 1.0. - // See http://www.boost.org/LICENSE_1_0.txt -@@ -33,6 +33,8 @@ - - #ifdef BOOST_POSIX_API - -+#include -+#include - #include - #include - #include -@@ -47,6 +49,14 @@ - #define BOOST_FILESYSTEM_USE_READDIR_R - #endif - -+// At least Mac OS X 10.6 and older doesn't support O_CLOEXEC -+#ifndef O_CLOEXEC -+#define O_CLOEXEC 0 -+#define BOOST_FILESYSTEM_NO_O_CLOEXEC -+#endif -+ -+#include "posix_tools.hpp" -+ - #else // BOOST_WINDOWS_API - - #include -@@ -206,13 +216,46 @@ inline std::size_t path_max() - - #endif // BOOST_FILESYSTEM_USE_READDIR_R - --error_code dir_itr_first(void*& handle, void*& buffer, const char* dir, std::string& target, fs::file_status&, fs::file_status&) -+error_code dir_itr_first(void*& handle, void*& buffer, const char* dir, std::string& target, unsigned int opts, fs::file_status&, fs::file_status&) - { -- if ((handle = ::opendir(dir)) == 0) -+#if defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) -+ int flags = O_DIRECTORY | O_RDONLY | O_NDELAY | O_CLOEXEC; -+ if ((opts & static_cast< unsigned int >(directory_options::_detail_no_follow)) != 0u) -+ flags |= O_NOFOLLOW; -+ -+ int fd = ::open(dir, flags); -+ if (BOOST_UNLIKELY(fd < 0)) -+ { -+ const int err = errno; -+ return error_code(err, system_category()); -+ } -+ -+#if defined(BOOST_FILESYSTEM_NO_O_CLOEXEC) && defined(FD_CLOEXEC) -+ int res = ::fcntl(fd, F_SETFD, FD_CLOEXEC); -+ if (BOOST_UNLIKELY(res < 0)) -+ { -+ const int err = errno; -+ close_fd(fd); -+ return error_code(err, system_category()); -+ } -+#endif -+ -+ handle = ::fdopendir(fd); -+ if (BOOST_UNLIKELY(!handle)) - { - const int err = errno; -+ close_fd(fd); - return error_code(err, system_category()); - } -+#else // defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) -+ handle = ::opendir(dir); -+ if (BOOST_UNLIKELY(!handle)) -+ { -+ const int err = errno; -+ return error_code(err, system_category()); -+ } -+#endif // defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) -+ - target.assign("."); // string was static but caused trouble - // when iteration called from dtor, after - // static had already been destroyed -@@ -342,7 +385,7 @@ error_code dir_itr_increment(void*& handle, void*& buffer, std::string& target, - - #else // BOOST_WINDOWS_API - --error_code dir_itr_first(void*& handle, fs::path const& dir, std::wstring& target, fs::file_status& sf, fs::file_status& symlink_sf) -+error_code dir_itr_first(void*& handle, fs::path const& dir, std::wstring& target, unsigned int opts, fs::file_status& sf, fs::file_status& symlink_sf) - // Note: an empty root directory has no "." or ".." entries, so this - // causes a ERROR_FILE_NOT_FOUND error which we do not considered an - // error. It is treated as eof instead. -@@ -512,7 +555,7 @@ void directory_iterator_construct(directory_iterator& it, path const& p, unsigne - #if defined(BOOST_POSIX_API) - imp->buffer, - #endif -- p.c_str(), filename, file_stat, symlink_file_stat); -+ p.c_str(), filename, opts, file_stat, symlink_file_stat); - - if (result) - { -diff --git a/libs/filesystem/src/operations.cpp b/libs/filesystem/src/operations.cpp -index e14b598b7..bf42105b9 100644 ---- a/libs/filesystem/src/operations.cpp -+++ b/libs/filesystem/src/operations.cpp -@@ -945,51 +945,73 @@ inline bool remove_impl(path const& p, error_code* ec) - //! remove_all() implementation - uintmax_t remove_all_impl(path const& p, error_code* ec) - { -- fs::file_type type; -+ for (unsigned int attempt = 0u; attempt < 5u; ++attempt) - { -- error_code local_ec; -- type = fs::detail::symlink_status(p, &local_ec).type(); -+ fs::file_type type; -+ { -+ error_code local_ec; -+ type = fs::detail::symlink_status(p, &local_ec).type(); - -- if (type == fs::file_not_found) -- return 0u; -+ if (type == fs::file_not_found) -+ return 0u; - -- if (BOOST_UNLIKELY(type == fs::status_error)) -- { -- if (!ec) -- BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::remove_all", p, local_ec)); -+ if (BOOST_UNLIKELY(type == fs::status_error)) -+ { -+ if (!ec) -+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::remove_all", p, local_ec)); - -- *ec = local_ec; -- return static_cast< uintmax_t >(-1); -+ *ec = local_ec; -+ return static_cast< uintmax_t >(-1); -+ } - } -- } - -- uintmax_t count = 0u; -+ uintmax_t count = 0u; - -- if (type == fs::directory_file) // but not a directory symlink -- { -- fs::directory_iterator itr; -- fs::detail::directory_iterator_construct(itr, p, static_cast< unsigned int >(directory_options::none), ec); -- if (ec && *ec) -- return static_cast< uintmax_t >(-1); -- -- const fs::directory_iterator end_dit; -- while (itr != end_dit) -+ if (type == fs::directory_file) // but not a directory symlink - { -- count += fs::detail::remove_all_impl(itr->path(), ec); -- if (ec && *ec) -- return static_cast< uintmax_t >(-1); -+ fs::directory_iterator itr; -+ error_code local_ec; -+ fs::detail::directory_iterator_construct(itr, p, static_cast< unsigned int >(directory_options::_detail_no_follow), &local_ec); -+ if (BOOST_UNLIKELY(!!local_ec)) -+ { -+#if defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) -+ // If open(2) with O_NOFOLLOW fails with ELOOP, this means that either the path contains a loop -+ // of symbolic links, or the last element of the path is a symbolic link. Given that lstat(2) above -+ // did not fail, most likely it is the latter case. I.e. between the lstat above and this open call -+ // the filesystem was modified so that the path no longer refers to a directory file (as opposed to a symlink). -+ if (local_ec == error_code(ELOOP, system_category())) -+ continue; -+#endif // defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) - -- fs::detail::directory_iterator_increment(itr, ec); -- if (ec && *ec) -+ if (!ec) -+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::remove_all", p, local_ec)); -+ -+ *ec = local_ec; - return static_cast< uintmax_t >(-1); -+ } -+ -+ const fs::directory_iterator end_dit; -+ while (itr != end_dit) -+ { -+ count += fs::detail::remove_all_impl(itr->path(), ec); -+ if (ec && *ec) -+ return static_cast< uintmax_t >(-1); -+ -+ fs::detail::directory_iterator_increment(itr, ec); -+ if (ec && *ec) -+ return static_cast< uintmax_t >(-1); -+ } - } -- } - -- count += fs::detail::remove_impl(p, type, ec); -- if (ec && *ec) -- return static_cast< uintmax_t >(-1); -+ count += fs::detail::remove_impl(p, type, ec); -+ if (ec && *ec) -+ return static_cast< uintmax_t >(-1); - -- return count; -+ return count; -+ } -+ -+ emit_error(ELOOP, p, ec, "boost::filesystem::remove_all: path cannot be opened as a directory"); -+ return static_cast< uintmax_t >(-1); - } - - #else // defined(BOOST_POSIX_API) diff --git a/boost-1.78-filesystem-Use-O_NONBLOCK-instead-of-O_NDELAY.patch b/boost-1.78-filesystem-Use-O_NONBLOCK-instead-of-O_NDELAY.patch deleted file mode 100644 index f722b154326249ee0ac0c566e584f8c6977c7daa..0000000000000000000000000000000000000000 --- a/boost-1.78-filesystem-Use-O_NONBLOCK-instead-of-O_NDELAY.patch +++ /dev/null @@ -1,23 +0,0 @@ -From dbec3baaadf7d899e66aa90843d285e749e88b2d Mon Sep 17 00:00:00 2001 -From: Andrey Semashev -Date: Thu, 3 Feb 2022 20:58:42 +0300 -Subject: [PATCH] Use O_NONBLOCK instead of O_NDELAY as it is the flag defined - by POSIX. - ---- - libs/filesystem/src/directory.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libs/filesystem/src/directory.cpp b/libs/filesystem/src/directory.cpp -index 8b41ae5e1..dd2f9413b 100644 ---- a/libs/filesystem/src/directory.cpp -+++ b/libs/filesystem/src/directory.cpp -@@ -219,7 +219,7 @@ inline std::size_t path_max() - error_code dir_itr_first(void*& handle, void*& buffer, const char* dir, std::string& target, unsigned int opts, fs::file_status&, fs::file_status&) - { - #if defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) -- int flags = O_DIRECTORY | O_RDONLY | O_NDELAY | O_CLOEXEC; -+ int flags = O_DIRECTORY | O_RDONLY | O_NONBLOCK | O_CLOEXEC; - if ((opts & static_cast< unsigned int >(directory_options::_detail_no_follow)) != 0u) - flags |= O_NOFOLLOW; - diff --git a/boost-1.78-icl-Avoid-gcc-bugs.patch b/boost-1.78-icl-Avoid-gcc-bugs.patch deleted file mode 100644 index a9ba455d413bb2bd824dd6613b96894e0279e11c..0000000000000000000000000000000000000000 --- a/boost-1.78-icl-Avoid-gcc-bugs.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 1d176e542576e7e584eccd3e2badca33231768c1 Mon Sep 17 00:00:00 2001 -From: Liu Zixian -Date: Mon, 12 Dec 2022 20:12:26 +0800 -Subject: [PATCH] Avoid gcc bugs - -This testcase triggers a gcc optimization bug. -See https://gitee.com/src-openeuler/gcc/issues/I65UF9 - -Signed-off-by: Liu Zixian ---- - libs/icl/test/fix_tickets_/fix_tickets.cpp | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/libs/icl/test/fix_tickets_/fix_tickets.cpp b/libs/icl/test/fix_tickets_/fix_tickets.cpp -index 0232c3194..fc207e3f0 100644 ---- a/libs/icl/test/fix_tickets_/fix_tickets.cpp -+++ b/libs/icl/test/fix_tickets_/fix_tickets.cpp -@@ -74,6 +74,7 @@ BOOST_AUTO_TEST_CASE(ticket_6095_Marvin_Sielenkemper_isEmptyTest) - BOOST_CHECK( icl::is_empty(Interval::open(max, max))); - } - -+#ifndef __GNUC__ - BOOST_AUTO_TEST_CASE(ticket_6095_Marvin_Sielenkemper_totalRangeTest) - { - typedef int Value; -@@ -90,6 +91,7 @@ BOOST_AUTO_TEST_CASE(ticket_6095_Marvin_Sielenkemper_totalRangeTest) - - BOOST_CHECK_EQUAL(intervals.iterative_size(), 3); - } -+#endif - - BOOST_AUTO_TEST_CASE(test_ticket_7871) - { --- -2.36.1 - diff --git a/boost-1.78-locale-Fix-access-to-first-element-of-empty-vector.patch b/boost-1.78-locale-Fix-access-to-first-element-of-empty-vector.patch deleted file mode 100644 index 50e08a471154ca22c986c951997690e01e117e7b..0000000000000000000000000000000000000000 --- a/boost-1.78-locale-Fix-access-to-first-element-of-empty-vector.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 1ff0ead837b32b9415dc840dfef6549e8754b98d Mon Sep 17 00:00:00 2001 -From: Alexander Grund -Date: Fri, 10 Dec 2021 17:53:01 +0100 -Subject: [PATCH] Fix access to first element of empty vector - -Trying to access tmp[0] causes a crash on Fedora when assertion on STL -are enabled. - -/usr/include/c++/10/bits/stl_vector.h:1045: std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](std::vector<_Tp, _Alloc>::size_type) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::reference = unsigned char&; std::vector<_Tp, _Alloc>::size_type = long unsigned int]: Assertion '__builtin_expect(__n < this->size(), true)' failed. - -Fix is to never have an empty vector as ICU sort keys include the NULL -terminator, hence we need at least `length + 1` bytes which means the -vector has at least 1 element: The NULL terminator ---- - src/icu/collator.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/libs/locale/src/icu/collator.cpp b/libs/locale/src/icu/collator.cpp -index 7f1ea6ae..79668aa6 100644 ---- a/libs/locale/src/icu/collator.cpp -+++ b/libs/locale/src/icu/collator.cpp -@@ -91,9 +91,9 @@ namespace boost { - { - icu::UnicodeString str=cvt_.icu(b,e); - std::vector tmp; -- tmp.resize(str.length()); -+ tmp.resize(str.length() + 1u); - icu::Collator *collate = get_collator(level); -- int len = collate->getSortKey(str,&tmp[0],tmp.size()); -+ const int len = collate->getSortKey(str,&tmp[0],tmp.size()); - if(len > int(tmp.size())) { - tmp.resize(len); - collate->getSortKey(str,&tmp[0],tmp.size()); diff --git a/boost-1.78-pool-fix-integer-overflows-in-pool-ordered_malloc.patch b/boost-1.78-pool-fix-integer-overflows-in-pool-ordered_malloc.patch deleted file mode 100644 index 191fa0dbc39d7d5e36b2337bc144774936bd1ba9..0000000000000000000000000000000000000000 --- a/boost-1.78-pool-fix-integer-overflows-in-pool-ordered_malloc.patch +++ /dev/null @@ -1,179 +0,0 @@ -From acb849a8a16499907c554a3c00da201486388459 Mon Sep 17 00:00:00 2001 -From: Orgad Shaneh -Date: Thu, 4 Nov 2021 03:39:23 +0200 -Subject: [PATCH] fix integer overflows in pool::ordered_malloc (#42) - -Fixes trac #6701 (https://svn.boost.org/trac10/ticket/6701). - -Originally-by: Jonathan Wakely ---- - boost/pool/pool.hpp | 31 ++++++++++++++++++++++--------- - libs/pool/test/Jamfile.v2 | 1 + - libs/pool/test/suppressions.txt | 7 +++++++ - libs/pool/test/test_bug_6701.cpp | 27 +++++++++++++++++++++++++++ - 4 files changed, 57 insertions(+), 9 deletions(-) - create mode 100644 libs/pool/test/suppressions.txt - create mode 100644 libs/pool/test/test_bug_6701.cpp - -diff --git a/boost/pool/pool.hpp b/boost/pool/pool.hpp -index c47b11faf..12728a7ae 100644 ---- a/boost/pool/pool.hpp -+++ b/boost/pool/pool.hpp -@@ -26,6 +26,8 @@ - - #include - -+// std::numeric_limits -+#include - // boost::integer::static_lcm - #include - // boost::simple_segregated_storage -@@ -355,6 +357,12 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t - return s; - } - -+ size_type max_chunks() const -+ { //! Calculated maximum number of memory chunks that can be allocated in a single call by this Pool. -+ size_type POD_size = integer::static_lcm::value + sizeof(size_type); -+ return (std::numeric_limits::max() - POD_size) / alloc_size(); -+ } -+ - static void * & nextof(void * const ptr) - { //! \returns Pointer dereferenced. - //! (Provided and used for the sake of code readability :) -@@ -375,6 +383,8 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t - //! the first time that object needs to allocate system memory. - //! The default is 32. This parameter may not be 0. - //! \param nmax_size is the maximum number of chunks to allocate in one block. -+ set_next_size(nnext_size); -+ set_max_size(nmax_size); - } - - ~pool() -@@ -398,8 +408,8 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t - } - void set_next_size(const size_type nnext_size) - { //! Set number of chunks to request from the system the next time that object needs to allocate system memory. This value should never be set to 0. -- //! \returns nnext_size. -- next_size = start_size = nnext_size; -+ BOOST_USING_STD_MIN(); -+ next_size = start_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(nnext_size, max_chunks()); - } - size_type get_max_size() const - { //! \returns max_size. -@@ -407,7 +417,8 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t - } - void set_max_size(const size_type nmax_size) - { //! Set max_size. -- max_size = nmax_size; -+ BOOST_USING_STD_MIN(); -+ max_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(nmax_size, max_chunks()); - } - size_type get_requested_size() const - { //! \returns the requested size passed into the constructor. -@@ -708,9 +719,9 @@ void * pool::malloc_need_resize() - - BOOST_USING_STD_MIN(); - if(!max_size) -- next_size <<= 1; -+ set_next_size(next_size << 1); - else if( next_size*partition_size/requested_size < max_size) -- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size); -+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size)); - - // initialize it, - store().add_block(node.begin(), node.element_size(), partition_size); -@@ -748,9 +759,9 @@ void * pool::ordered_malloc_need_resize() - - BOOST_USING_STD_MIN(); - if(!max_size) -- next_size <<= 1; -+ set_next_size(next_size << 1); - else if( next_size*partition_size/requested_size < max_size) -- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size); -+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size)); - - // initialize it, - // (we can use "add_block" here because we know that -@@ -792,6 +803,8 @@ void * pool::ordered_malloc(const size_type n) - { //! Gets address of a chunk n, allocating new memory if not already available. - //! \returns Address of chunk n if allocated ok. - //! \returns 0 if not enough memory for n chunks. -+ if (n > max_chunks()) -+ return 0; - - const size_type partition_size = alloc_size(); - const size_type total_req_size = n * requested_size; -@@ -840,9 +853,9 @@ void * pool::ordered_malloc(const size_type n) - - BOOST_USING_STD_MIN(); - if(!max_size) -- next_size <<= 1; -+ set_next_size(next_size << 1); - else if( next_size*partition_size/requested_size < max_size) -- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size); -+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size)); - - // insert it into the list, - // handle border case. -diff --git a/libs/pool/test/Jamfile.v2 b/libs/pool/test/Jamfile.v2 -index 9e96abcbd..133879a93 100644 ---- a/libs/pool/test/Jamfile.v2 -+++ b/libs/pool/test/Jamfile.v2 -@@ -34,6 +34,7 @@ test-suite pool : - pathscale:-Wno-long-long ] - [ run test_bug_2696.cpp ] - [ run test_bug_5526.cpp ] -+ [ run test_bug_6701.cpp ] - [ run test_threading.cpp : : : multi /boost/thread//boost_thread ] - [ compile test_poisoned_macros.cpp ] - ; -diff --git a/libs/pool/test/suppressions.txt b/libs/pool/test/suppressions.txt -new file mode 100644 -index 000000000..e30fb813c ---- /dev/null -+++ b/libs/pool/test/suppressions.txt -@@ -0,0 +1,7 @@ -+{ -+ no_fishy_value -+ Memcheck:FishyValue -+ __builtin_vec_new(size) -+ fun:_ZnamRKSt9nothrow_t -+ ... -+} -diff --git a/libs/pool/test/test_bug_6701.cpp b/libs/pool/test/test_bug_6701.cpp -new file mode 100644 -index 000000000..e484d3c7e ---- /dev/null -+++ b/libs/pool/test/test_bug_6701.cpp -@@ -0,0 +1,27 @@ -+/* Copyright (C) 2012 Étienne Dupuis -+* -+* Use, modification and distribution is subject to the -+* Boost Software License, Version 1.0. (See accompanying -+* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) -+*/ -+ -+// Test of bug #6701 (https://svn.boost.org/trac/boost/ticket/6701) -+ -+#include -+#include -+ -+int main() -+{ -+ boost::pool<> p(1024, std::numeric_limits::max() / 768); -+ -+ void *x = p.malloc(); -+ BOOST_ASSERT(!x); -+ -+ BOOST_ASSERT(std::numeric_limits::max() / 1024 >= p.get_next_size()); -+ BOOST_ASSERT(std::numeric_limits::max() / 1024 >= p.get_max_size()); -+ -+ void *y = p.ordered_malloc(std::numeric_limits::max() / 768); -+ BOOST_ASSERT(!y); -+ -+ return 0; -+} --- -2.33.1 - diff --git a/boost-1.78-python-Update-call_method-hpp.patch b/boost-1.78-python-Update-call_method-hpp.patch deleted file mode 100644 index 39cb9620ab98da2400bd1e1423bce8ec14faec1b..0000000000000000000000000000000000000000 --- a/boost-1.78-python-Update-call_method-hpp.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 1dc6d74f2d673b7b82dd02ff8cdaf04b60fb5ff8 Mon Sep 17 00:00:00 2001 -From: Denis Arnaud -Date: Sun, 15 Aug 2021 17:05:31 +0200 -Subject: [PATCH] Update call_method.hpp - -Was missing from https://github.com/boostorg/python/pull/320 -I've tested it on one of my projects with (that patch on) Boost.Python/Boost 1.76.0 and it works well. Without that patch, there is a deprecation error. ---- - boost/python/call_method.hpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/boost/python/call_method.hpp b/boost/python/call_method.hpp -index 424077eab4..2f360791d7 100644 ---- a/boost/python/call_method.hpp -+++ b/boost/python/call_method.hpp -@@ -59,7 +59,7 @@ call_method(PyObject* self, char const* name - ) - { - PyObject* const result = -- PyEval_CallMethod( -+ PyObject_CallMethod( - self - , const_cast(name) - , const_cast("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")") diff --git a/boost-1.78-graph-Skip-performance-test.patch b/boost-1.81-graph-Dont-run-performance-test-in-CI.patch similarity index 33% rename from boost-1.78-graph-Skip-performance-test.patch rename to boost-1.81-graph-Dont-run-performance-test-in-CI.patch index e66402bc53455a08b76b0c9da1c5cadf010cb23e..1a24b3f1d85a411dc334984a98585ad1d3baf027 100644 --- a/boost-1.78-graph-Skip-performance-test.patch +++ b/boost-1.81-graph-Dont-run-performance-test-in-CI.patch @@ -1,40 +1,25 @@ -From d65e2888de8097f28453b92fdd1770805c0f4063 Mon Sep 17 00:00:00 2001 +From f58f3df2bf54fd820bd2c043e5000a7c90144804 Mon Sep 17 00:00:00 2001 From: Liu Zixian -Date: Mon, 12 Dec 2022 12:36:42 +0800 -Subject: [PATCH] Skip performance test +Date: Thu, 15 Dec 2022 21:31:43 -0500 +Subject: [PATCH] Don't run performance test in CI -Performance test in CI does not make sense. - -On x86-64, this test caused a float point exception, -for the test data is too weak to generate an execution time -larger than the timer precision. - -[ 298s] ====== BEGIN OUTPUT ====== -[ 298s] Generating graph...10000 vertices, 100000 edges. -[ 298s] Running Dijkstra's with binary heap... 0.003279s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%) -[ 298s] seconds. -[ 298s] Running Dijkstra's with d-ary heap (d=4)... -[ 298s] EXIT STATUS: 136 -[ 298s] ====== END OUTPUT ====== - -Signed-off-by: Liu Zixian --- - libs/graph/test/Jamfile.v2 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + libs/graph/test/Jamfile.v2 | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/graph/test/Jamfile.v2 b/libs/graph/test/Jamfile.v2 -index a0c15ca7b..a6273b659 100644 +index a0c15ca7b..c882916a7 100644 --- a/libs/graph/test/Jamfile.v2 +++ b/libs/graph/test/Jamfile.v2 -@@ -47,7 +47,7 @@ alias graph_test_regular : +@@ -47,7 +47,10 @@ alias graph_test_regular : [ run undirected_dfs.cpp ] [ compile dfs_cc.cpp ] [ compile dijkstra_cc.cpp ] - [ run dijkstra_heap_performance.cpp /boost/timer//boost_timer : 10000 ] -+ # [ run dijkstra_heap_performance.cpp /boost/timer//boost_timer : 10000 ] ++ ++ # Performance benchmark ++ #[ run dijkstra_heap_performance.cpp /boost/timer//boost_timer : 10000 ] ++ [ run dijkstra_no_color_map_compare.cpp : 10000 ] [ run disjoint_set_test.cpp ] [ run dominator_tree_test.cpp ] --- -2.33.0 - diff --git a/boost-1.81-phoenix-Update-avoid-placeholders-uarg1.10-ODR-violates.patch b/boost-1.81-phoenix-Update-avoid-placeholders-uarg1.10-ODR-violates.patch new file mode 100644 index 0000000000000000000000000000000000000000..da21d4102d652598c282428b72f91fc8f870aed8 --- /dev/null +++ b/boost-1.81-phoenix-Update-avoid-placeholders-uarg1.10-ODR-violates.patch @@ -0,0 +1,27 @@ +From 50973dc10ea16931245ea61a00b2ce9041acc5ba Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Wed, 4 Jan 2023 17:33:31 +0100 +Subject: [PATCH] Avoid boost::phoenix::placeholders::uarg1..10 ODR violations + +Those variables, defined in an include file, had external linkage, causing ODR +violations. Make them const to implicitly give them internal linkage. +--- + boost/phoenix/stl/tuple.hpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/boost/phoenix/stl/tuple.hpp b/boost/phoenix/stl/tuple.hpp +index a83014a..7f61a40 100644 +--- a/boost/phoenix/stl/tuple.hpp ++++ b/boost/phoenix/stl/tuple.hpp +@@ -110,7 +110,7 @@ namespace boost { namespace phoenix { + namespace placeholders { + #define BOOST_PP_LOCAL_LIMITS (1, BOOST_PHOENIX_ARG_LIMIT) + #define BOOST_PP_LOCAL_MACRO(N) \ +- auto uarg##N = \ ++ auto const uarg##N = \ + boost::phoenix::get_<(N)-1>(boost::phoenix::placeholders::arg1); + #include BOOST_PP_LOCAL_ITERATE() + } +-- +2.27.0 + diff --git a/boost-1.81-random-Update-multiprecision_float_test.cpp-to-not-overflow.patch b/boost-1.81-random-Update-multiprecision_float_test.cpp-to-not-overflow.patch new file mode 100644 index 0000000000000000000000000000000000000000..cba902bd17722303083690c062bd544ef814b3d0 --- /dev/null +++ b/boost-1.81-random-Update-multiprecision_float_test.cpp-to-not-overflow.patch @@ -0,0 +1,30 @@ +From 4239d93dad32a11e4c3829050f8070d456266133 Mon Sep 17 00:00:00 2001 +From: jzmaddock +Date: Wed, 1 Jun 2022 19:35:36 +0100 +Subject: [PATCH] Update multiprecision_float_test.cpp to not overflow type + double. Previously the max value for uint1024_t could just squeeze into a + double because truncation occurred during the conversion, now that cpp_int + performs correctly rounded conversions, overflow occurs, and the computation + fails. Changed the problem distribution to use a multiprecision weight type, + rather than double. + +--- + libs/random/test/multiprecision_float_test.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libs/random/test/multiprecision_float_test.cpp b/libs/random/test/multiprecision_float_test.cpp +index bc2a936..2b53483 100644 +--- a/libs/random/test/multiprecision_float_test.cpp ++++ b/libs/random/test/multiprecision_float_test.cpp +@@ -77,7 +77,7 @@ typedef boost::mpl::list < + boost::random::lognormal_distribution, + boost::random::normal_distribution, + #ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +- boost::random::piecewise_constant_distribution, ++ boost::random::piecewise_constant_distribution, + boost::random::piecewise_linear_distribution, + #endif + boost::random::student_t_distribution, +-- +2.33.0 + diff --git a/boost-1.81-random-Update-multiprecision_int_test.cpp-to-not-accidental.patch b/boost-1.81-random-Update-multiprecision_int_test.cpp-to-not-accidental.patch new file mode 100644 index 0000000000000000000000000000000000000000..d42af6ca78e5b5f5fba298b622d55d5da56ea7e6 --- /dev/null +++ b/boost-1.81-random-Update-multiprecision_int_test.cpp-to-not-accidental.patch @@ -0,0 +1,34 @@ +From 7561690135c67ecf88c2133bad7680ebd2665c36 Mon Sep 17 00:00:00 2001 +From: jzmaddock +Date: Wed, 1 Jun 2022 19:32:55 +0100 +Subject: [PATCH] Update multiprecision_int_test.cpp to not accidentality + overflow type double. Multiprecision now performs correct rounding when + converting to double - previously the max value for uint1024_t would just fit + in a double if it was truncated. But now that it's correctly rounded it + overflows and breaks the calculation. + +--- + libs/random/test/multiprecision_int_test.cpp | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/libs/random/test/multiprecision_int_test.cpp b/libs/random/test/multiprecision_int_test.cpp +index 41ec229..a861cca 100644 +--- a/libs/random/test/multiprecision_int_test.cpp ++++ b/libs/random/test/multiprecision_int_test.cpp +@@ -215,8 +215,11 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(discrete_distributions, distribution_type, other_d + distribution_type d2; + ss >> d2; + BOOST_CHECK(d == d2); +- +- boost::random::independent_bits_engine::digits, boost::multiprecision::uint1024_t > big_random; ++ // ++ // The number of digits in the independent_bits_engine must be low enough that we don't overflow ++ // when converting to a double (see other_distributions declared above). ++ // ++ boost::random::independent_bits_engine::digits - 2, boost::multiprecision::uint1024_t > big_random; + for(unsigned i = 0; i < 200; ++i) + { + result_type r = d(big_random); +-- +2.33.0 + diff --git a/boost-1.81-random-test-Add-missing-includes.patch b/boost-1.81-random-test-Add-missing-includes.patch new file mode 100644 index 0000000000000000000000000000000000000000..2d623be74bbac148912adccd57291f79844fe8ab --- /dev/null +++ b/boost-1.81-random-test-Add-missing-includes.patch @@ -0,0 +1,37 @@ +From c3ada7a1b2b54f4b27585f72308a76984f8489b4 Mon Sep 17 00:00:00 2001 +From: jzmaddock +Date: Tue, 16 Mar 2021 10:47:16 +0000 +Subject: [PATCH] Add missing #includes. + +--- + test/multiprecision_float_test.cpp | 1 + + test/multiprecision_int_test.cpp | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/libs/random/test/multiprecision_float_test.cpp b/libs/random/test/multiprecision_float_test.cpp +index 904c59d..bc2a936 100644 +--- a/libs/random/test/multiprecision_float_test.cpp ++++ b/libs/random/test/multiprecision_float_test.cpp +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + + +diff --git a/libs/random/test/multiprecision_int_test.cpp b/libs/random/test/multiprecision_int_test.cpp +index 577e52a..41ec229 100644 +--- a/libs/random/test/multiprecision_int_test.cpp ++++ b/libs/random/test/multiprecision_int_test.cpp +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + #include + + typedef boost::mpl::list < +-- +2.33.0 + diff --git a/boost.spec b/boost.spec index 2ebf6a30aa813e02bbc87234b3d77bcf98f0c524..f41b470203a6bf1924cb925820590203644823f2 100644 --- a/boost.spec +++ b/boost.spec @@ -1,36 +1,25 @@ -%global version_enc 1_78_0 +%define version_enc %(echo "%{version}"|tr \. _) Name: boost -Version: 1.78.0 -Release: 18 +Version: 1.83.0 +Release: 1 Summary: The free peer-reviewed portable C++ source libraries -License: Boost Software License 1.0 -URL: http://www.boost.org -Source0: https://boostorg.jfrog.io/ui/native/main/release/%{version}/source/%{name}_%{version_enc}.tar.gz +License: BSL-1.0 +URL: https://www.boost.org +Source0: https://archives.boost.io/release/%{version}/source/boost_%{version_enc}.tar.bz2 # These following patches have been merged into boost develop branch # Remove them at the next release -# https://github.com/boostorg/pool/pull/42 -Patch0: boost-1.78-pool-fix-integer-overflows-in-pool-ordered_malloc.patch -# https://github.com/boostorg/locale/pull/72 -Patch1: boost-1.78-locale-Fix-access-to-first-element-of-empty-vector.patch -# https://github.com/boostorg/locale/pull/38 -Patch2: boost-1.77-locale-remove-linking-with-boost-system.patch -# https://github.com/boostorg/type_erasure/pull/19 -Patch3: boost-1.77-type_erasure-remove-boost-system-linkage.patch -# https://github.com/bfgroup/b2/pull/113 -Patch4: boost-1.78-build-Don-t-skip-install-targets-if-there-s-build-no-in-ureqs.patch -# https://github.com/boostorg/filesystem/commit/41d076ace558cfae01e233f9746dc955dcf78dba -Patch5: boost-1.78-filesystem-Added-protection-for-CVE-2022-21658.patch -# https://github.com/boostorg/filesystem/commit/dbec3baaadf7d899e66aa90843d285e749e88b2d -Patch6: boost-1.78-filesystem-Use-O_NONBLOCK-instead-of-O_NDELAY.patch -# These patches have not been merged yet. -# https://github.com/boostorg/python/pull/373 -Patch9000: boost-1.78-python-Update-call_method-hpp.patch -Patch9001: boost_1_78_0-sw.patch -Patch9002: boost-1.78-graph-Skip-performance-test.patch -Patch9003: boost-1.78-icl-Avoid-gcc-bugs.patch -Patch9004: boost-1.78-add-boost-context-support-for-loongarch64.patch +# https://github.com/boostorg/graph/pull/318 +Patch1: boost-1.81-graph-Dont-run-performance-test-in-CI.patch +# https://github.com/boostorg/random/pull/83 +Patch2: boost-1.81-random-Update-multiprecision_float_test.cpp-to-not-overflow.patch +Patch3: boost-1.81-random-Update-multiprecision_int_test.cpp-to-not-accidental.patch +Patch4: boost-1.81-random-test-Add-missing-includes.patch +# https://github.com/boostorg/phoenix/pull/116 +Patch5: boost-1.81-phoenix-Update-avoid-placeholders-uarg1.10-ODR-violates.patch +# https://lists.boost.org/Archives/boost/2020/04/248812.php +Patch6: boost-1.73.0-cmakedir.patch Requires: %{name}-atomic%{?_isa} = %{version}-%{release} Requires: %{name}-chrono%{?_isa} = %{version}-%{release} @@ -59,6 +48,7 @@ Requires: %{name}-test%{?_isa} = %{version}-%{release} Requires: %{name}-thread%{?_isa} = %{version}-%{release} Requires: %{name}-timer%{?_isa} = %{version}-%{release} Requires: %{name}-type_erasure%{?_isa} = %{version}-%{release} +Requires: %{name}-url%{?_isa} = %{version}-%{release} Requires: %{name}-wave%{?_isa} = %{version}-%{release} BuildRequires: gcc-c++ @@ -68,15 +58,15 @@ BuildRequires: python3-devel python3-unversioned-command BuildRequires: openssl-devel # optional libraries for iostreams BuildRequires: bzip2-devel libzstd-devel xz-devel zlib-devel +%ifnarch loongarch64 riscv64 sw_64 mips64el # optional library for multiprecision BuildRequires: libquadmath-devel libquadmath-static +%endif # optional library for python3 BuildRequires: python3-numpy # optional library for regex BuildRequires: libicu-devel -%ifarch riscv64 -BuildRequires: libatomic -%endif +BuildRequires: cmake-rpm-macros Obsoletes: boost-signals < 1.69.0 @@ -255,6 +245,12 @@ Requires: boost-chrono%{?_isa} = %{version}-%{release} %description type_erasure Runtime polymorphism based on concepts. +%package url +Summary: Run-time component for boost url. + +%description url +A library for parsing, modifying, and printing URLs using only C++11. + %package wave Summary: Run-time component for boost wave. Requires: boost-chrono%{?_isa} = %{version}-%{release} @@ -267,8 +263,6 @@ An implementation of the mandated C99/C++ preprocessor functionality. %package devel Summary: The Boost C++ headers, shared and static development libraries Requires: boost%{?_isa} = %{version}-%{release} -Requires: libicu-devel%{?_isa} -Requires: libquadmath-devel%{?_isa} Provides: boost-static Obsoletes: boost-static < %{version} @@ -290,8 +284,8 @@ as that on the Boost web page (http://www.boost.org/doc/libs/%{version_enc}). %autosetup -p1 -n %{name}_%{version_enc} %build -./bootstrap.sh -%define opt_build -d+2 -q %{?_smp_mflags} --no-cmake-config +./bootstrap.sh --with-toolset=%{__cc} +%define opt_build -d+2 -q %{?_smp_mflags} %define opt_feature release debug-symbols=on pch=off %define opt_libs --without-mpi --without-graph_parallel %define b2_options %{opt_build} %{opt_feature} %{opt_libs} @@ -299,19 +293,9 @@ as that on the Boost web page (http://www.boost.org/doc/libs/%{version_enc}). ./b2 %{b2_options} cxxflags="$RPM_OPT_FLAGS" %{boost_macros} %check -cd status -../b2 %{?_smp_mflags} --check-libs-only -../b2 %{?_smp_mflags} %{opt_feature} cxxflags="$RPM_OPT_FLAGS" %{boost_macros} \ - --include-tests=algorithm,graph,intrusive,dynamic_bitset,property_map,crc,lexical_cast,range \ - --exclude-tests=mpi,graph_parallel -%ifarch riscv64 -LINKFLAGS='linkflags="-Wl,-latomic"' -%else -LINKFLAGS= -%endif -../b2 %{?_smp_mflags} %{opt_feature} cxxflags="$RPM_OPT_FLAGS" $LINKFLAGS %{boost_macros} \ - --include-tests=bimap,circular_buffer,container,heap,icl,lockfree,logic,multi_array,multi_index,poly_collection,property_tree,ptr_container,sort \ - --exclude-tests=container_hash +(cd status + ../b2 %{?_smp_mflags} --check-libs-only +) %install ./b2 %{b2_options} \ @@ -319,9 +303,12 @@ LINKFLAGS= --libdir=$RPM_BUILD_ROOT%{_libdir} \ install +# Remove buildroot definition from cmake files +sed -i -e 's,%{buildroot},,g' $(find %{buildroot}%{_libdir}/cmake -name "*.cmake") + mkdir boost-doc boost-example -find libs doc more -regex '.*\.\(html?\|css\|png\|gif\)' -exec cp {} boost-doc --parents \; -cp index.html boost.png rst.css boost.css boost-doc +cp -r index.html boost.png rst.css boost.css doc more boost-doc +find libs -name doc -exec cp {} boost-doc --parents -r \; find libs -name example -exec cp {} boost-example --parents -r \; %files @@ -450,6 +437,10 @@ find libs -name example -exec cp {} boost-example --parents -r \; %license LICENSE_1_0.txt %{_libdir}/libboost_type_erasure.so.%{version} +%files url +%license LICENSE_1_0.txt +%{_libdir}/libboost_url.so.%{version} + %files wave %license LICENSE_1_0.txt %{_libdir}/libboost_wave.so.%{version} @@ -463,8 +454,12 @@ find libs -name example -exec cp {} boost-example --parents -r \; %{_includedir}/%{name} %{_libdir}/*.so %{_libdir}/*.a +%{_libdir}/cmake/* %changelog +* Mon Apr 7 2025 fuanan - 1.83.0-1 +- Update version to 1.83.0 + * Tue Jun 18 2024 hefq343 - 1.78.0-18 - Init support for ppc64le diff --git a/boost_1_78_0-sw.patch b/boost_1_78_0-sw.patch deleted file mode 100755 index 6d1a8203490050e57b0ac172a09894efb1232a7e..0000000000000000000000000000000000000000 --- a/boost_1_78_0-sw.patch +++ /dev/null @@ -1,1940 +0,0 @@ -diff -Naur boost_1_78_0.org/boost/atomic/detail/caps_arch_gcc_sw_64.hpp boost_1_78_0.sw/boost/atomic/detail/caps_arch_gcc_sw_64.hpp ---- boost_1_78_0.org/boost/atomic/detail/caps_arch_gcc_sw_64.hpp 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/boost/atomic/detail/caps_arch_gcc_sw_64.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -0,0 +1,34 @@ -+/* -+ * Distributed under the Boost Software License, Version 1.0. -+ * (See accompanying file LICENSE_1_0.txt or copy at -+ * http://www.boost.org/LICENSE_1_0.txt) -+ * -+ * Copyright (c) 2009 Helge Bahmann -+ * Copyright (c) 2013 Tim Blechmann -+ * Copyright (c) 2014 Andrey Semashev -+ */ -+/*! -+ * \file atomic/detail/caps_arch_gcc_sw_64.hpp -+ * -+ * This header defines feature capabilities macros -+ */ -+ -+#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_SW_64_HPP_INCLUDED_ -+#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_SW_64_HPP_INCLUDED_ -+ -+#include -+ -+#ifdef BOOST_HAS_PRAGMA_ONCE -+#pragma once -+#endif -+ -+#define BOOST_ATOMIC_INT8_LOCK_FREE 2 -+#define BOOST_ATOMIC_INT16_LOCK_FREE 2 -+#define BOOST_ATOMIC_INT32_LOCK_FREE 2 -+#define BOOST_ATOMIC_INT64_LOCK_FREE 2 -+#define BOOST_ATOMIC_POINTER_LOCK_FREE 2 -+ -+#define BOOST_ATOMIC_THREAD_FENCE 2 -+#define BOOST_ATOMIC_SIGNAL_FENCE 2 -+ -+#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_SW_64_HPP_INCLUDED_ -diff -Naur boost_1_78_0.org/boost/atomic/detail/core_arch_ops_gcc_sw_64.hpp boost_1_78_0.sw/boost/atomic/detail/core_arch_ops_gcc_sw_64.hpp ---- boost_1_78_0.org/boost/atomic/detail/core_arch_ops_gcc_sw_64.hpp 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/boost/atomic/detail/core_arch_ops_gcc_sw_64.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -0,0 +1,1030 @@ -+/* -+ * Distributed under the Boost Software License, Version 1.0. -+ * (See accompanying file LICENSE_1_0.txt or copy at -+ * http://www.boost.org/LICENSE_1_0.txt) -+ * -+ * Copyright (c) 2009 Helge Bahmann -+ * Copyright (c) 2013 Tim Blechmann -+ * Copyright (c) 2014 Andrey Semashev -+ */ -+/*! -+ * \file atomic/detail/core_arch_ops_gcc_sw_64.hpp -+ * -+ * This header contains implementation of the \c core_arch_operations template. -+ */ -+ -+#ifndef BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_SW_64_HPP_INCLUDED_ -+#define BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_SW_64_HPP_INCLUDED_ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#ifdef BOOST_HAS_PRAGMA_ONCE -+#pragma once -+#endif -+ -+namespace boost { -+namespace atomics { -+namespace detail { -+ -+/* -+ Refer to http://h71000.www7.hp.com/doc/82final/5601/5601pro_004.html -+ (HP OpenVMS systems documentation) and the Sw_64 Architecture Reference Manual. -+ */ -+ -+/* -+ NB: The most natural thing would be to write the increment/decrement -+ operators along the following lines: -+ -+ __asm__ __volatile__ -+ ( -+ "1: ldl_l %0,%1 \n" -+ "addl %0,1,%0 \n" -+ "stl_c %0,%1 \n" -+ "beq %0,1b\n" -+ : "=&b" (tmp) -+ : "m" (value) -+ : "cc" -+ ); -+ -+ However according to the comments on the HP website and matching -+ comments in the Linux kernel sources this defies branch prediction, -+ as the cpu assumes that backward branches are always taken; so -+ instead copy the trick from the Linux kernel, introduce a forward -+ branch and back again. -+ -+ I have, however, had a hard time measuring the difference between -+ the two versions in microbenchmarks -- I am leaving it in nevertheless -+ as it apparently does not hurt either. -+*/ -+ -+struct core_arch_operations_gcc_sw_64_base -+{ -+ static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; -+ static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; -+ -+ static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT -+ { -+ if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) -+ __asm__ __volatile__ ("memb" ::: "memory"); -+ } -+ -+ static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT -+ { -+ if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) -+ __asm__ __volatile__ ("memb" ::: "memory"); -+ } -+ -+ static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT -+ { -+ if (order == memory_order_seq_cst) -+ __asm__ __volatile__ ("memb" ::: "memory"); -+ } -+}; -+ -+ -+template< bool Signed, bool Interprocess > -+struct core_arch_operations< 4u, Signed, Interprocess > : -+ public core_arch_operations_gcc_sw_64_base -+{ -+ typedef typename storage_traits< 4u >::type storage_type; -+ -+ static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u; -+ static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 4u; -+ static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; -+ static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess; -+ -+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ fence_before(order); -+ storage = v; -+ fence_after_store(order); -+ } -+ -+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type v = storage; -+ fence_after(order); -+ return v; -+ } -+ -+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, tmp; -+ storage_type tmp1, tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n\t" -+ "ldi %2,%4\n\t" -+ "ldi %3,1\n\t" -+ "mov %5, %1\n\t" -+ "lldw %0, 0(%2)\n\t" -+ "wr_f %3\n\t" -+ "lstw %1, 0(%2)\n\t" -+ "rd_f %1\n\t" -+ "beq %1, 2f\n\t" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (tmp), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE bool compare_exchange_weak( -+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT -+ { -+ fence_before(success_order); -+ int success; -+ storage_type current; -+ storage_type tmp1,tmp2; -+ __asm__ __volatile__ -+ ( -+ "1:\n\t" -+ "ldi %4,%6\n\t" -+ "lldw %2, 0(%4)\n\t" // current = *(&storage) -+ "cmpeq %2, %0, %5\n\t" // success = current == expected -+ "wr_f %5\n\t" // success = current == expected -+ "mov %2, %0\n\t" // expected = current -+ "lstw %1, 0(%4)\n\t" // storage = desired; desired = store succeeded -+ "rd_f %1\n\t" // storage = desired; desired = store succeeded -+ "beq %5, 2f\n\t" // if (success == 0) goto end -+ "mov %1, %3\n\t" // success = desired -+ "2:\n\t" -+ : "+r" (expected), // %0 -+ "+r" (desired), // %1 -+ "=&r" (current), // %2 -+ "=&r" (success), // %3 -+ "=&r" (tmp1), // %4 -+ "=&r" (tmp2) // %5 -+ : "m" (storage) // %6 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ if (success) -+ fence_after(success_order); -+ else -+ fence_after(failure_order); -+ return !!success; -+ } -+ -+ static BOOST_FORCEINLINE bool compare_exchange_strong( -+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT -+ { -+ int success; -+ storage_type current, tmp; -+ storage_type tmp1,tmp2; -+ fence_before(success_order); -+ __asm__ __volatile__ -+ ( -+ "1:\n\t" -+ "ldi %4,%6\n\t" -+ "mov %7, %1\n\t" // tmp = desired -+ "lldw %2, 0(%4)\n\t" // current = *(&storage) -+ "cmpeq %2, %0, %5\n\t" // success = current == expected -+ "wr_f %5\n\t" // success = current == expected -+ "mov %2, %0\n\t" // expected = current -+ "lstw %1, 0(%4)\n\t" // storage = tmp; tmp = store succeeded -+ "rd_f %1\n\t" // storage = tmp; tmp = store succeeded -+ "beq %5, 2f\n\t" // if (success == 0) goto end -+ "beq %1, 3f\n\t" // if (tmp == 0) goto retry -+ "mov %1, %3\n\t" // success = tmp -+ "2:\n\t" -+ -+ ".subsection 2\n\t" -+ "3: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "+r" (expected), // %0 -+ "=&r" (tmp), // %1 -+ "=&r" (current), // %2 -+ "=&r" (success), // %3 -+ "=&r" (tmp1), // %4 -+ "=&r" (tmp2) // %5 -+ : "m" (storage), // %6 -+ "r" (desired) // %7 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ if (success) -+ fence_after(success_order); -+ else -+ fence_after(failure_order); -+ return !!success; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1, tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n\t" -+ "ldi %2,%4\n\t" -+ "ldi %3,1\n\t" -+ "lldw %0, 0(%2)\n\t" -+ "wr_f %3\n\t" -+ "addw %0, %5, %1\n\t" -+ "lstw %1, 0(%2)\n\t" -+ "rd_f %1\n\t" -+ "beq %1, 2f\n\t" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1, tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n\t" -+ "ldi %2,%4\n\t" -+ "ldi %3,1\n\t" -+ "lldw %0, 0(%2)\n\t" -+ "wr_f %3\n\t" -+ "subw %0, %5, %1\n\t" -+ "lstw %1, 0(%2)\n\t" -+ "rd_f %1\n\t" -+ "beq %1, 2f\n\t" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n\t" -+ "ldi %2,%4\n\t" -+ "ldi %3,1\n\t" -+ "lldw %0, 0(%2)\n\t" -+ "wr_f %3\n\t" -+ "and %0, %5, %1\n\t" -+ "lstw %1, 0(%2)\n\t" -+ "rd_f %1\n\t" -+ "beq %1, 2f\n\t" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %? \n" -+ "bis %0, %5, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1, tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "xor %0, %5, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT -+ { -+ return !!exchange(storage, (storage_type)1, order); -+ } -+ -+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT -+ { -+ store(storage, 0, order); -+ } -+}; -+ -+ -+template< bool Interprocess > -+struct core_arch_operations< 1u, false, Interprocess > : -+ public core_arch_operations< 4u, false, Interprocess > -+{ -+ typedef core_arch_operations< 4u, false, Interprocess > base_type; -+ typedef typename base_type::storage_type storage_type; -+ -+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1, tmp2; -+ base_type::fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "addw %0, %5, %1\n" -+ "zapnot %1, #1, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ base_type::fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1, tmp2; -+ base_type::fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "subw %0, %5, %1\n" -+ "zapnot %1, #1, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ base_type::fence_after(order); -+ return original; -+ } -+}; -+ -+template< bool Interprocess > -+struct core_arch_operations< 1u, true, Interprocess > : -+ public core_arch_operations< 4u, true, Interprocess > -+{ -+ typedef core_arch_operations< 4u, true, Interprocess > base_type; -+ typedef typename base_type::storage_type storage_type; -+ -+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ base_type::fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "addw %0, %5, %1\n" -+ "sextb %1, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ base_type::fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ base_type::fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "subw %0, %5, %1\n" -+ "sextb %1, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ base_type::fence_after(order); -+ return original; -+ } -+}; -+ -+ -+template< bool Interprocess > -+struct core_arch_operations< 2u, false, Interprocess > : -+ public core_arch_operations< 4u, false, Interprocess > -+{ -+ typedef core_arch_operations< 4u, false, Interprocess > base_type; -+ typedef typename base_type::storage_type storage_type; -+ -+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ base_type::fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "addw %0, %5, %1\n" -+ "zapnot %1, #3, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ base_type::fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ base_type::fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "subw %0, %5, %1\n" -+ "zapnot %1, #3, %1\n" -+ "lstw %1, %2\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ base_type::fence_after(order); -+ return original; -+ } -+}; -+ -+template< bool Interprocess > -+struct core_arch_operations< 2u, true, Interprocess > : -+ public core_arch_operations< 4u, true, Interprocess > -+{ -+ typedef core_arch_operations< 4u, true, Interprocess > base_type; -+ typedef typename base_type::storage_type storage_type; -+ -+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ base_type::fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "addw %0, %5, %1\n" -+ "sexth %1, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ base_type::fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ base_type::fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldw %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "subw %0, %5, %1\n" -+ "sexth %1, %1\n" -+ "lstw %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ base_type::fence_after(order); -+ return original; -+ } -+}; -+ -+ -+template< bool Signed, bool Interprocess > -+struct core_arch_operations< 8u, Signed, Interprocess > : -+ public core_arch_operations_gcc_sw_64_base -+{ -+ typedef typename storage_traits< 8u >::type storage_type; -+ -+ static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; -+ static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 8u; -+ static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; -+ static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess; -+ -+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ fence_before(order); -+ storage = v; -+ fence_after_store(order); -+ } -+ -+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type v = storage; -+ fence_after(order); -+ return v; -+ } -+ -+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, tmp; -+ storage_type tmp1,tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "mov %5, %1\n" -+ "lldl %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "lstl %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (tmp), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE bool compare_exchange_weak( -+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT -+ { -+ fence_before(success_order); -+ int success; -+ storage_type current; -+ storage_type tmp1,tmp2; -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %4,%6\n" -+ "lldl %2, 0(%4)\n" // current = *(&storage) -+ "cmpeq %2, %0, %5\n" // success = current == expected -+ "wr_f %5 \n" -+ "mov %2, %0\n" // expected = current -+ "lstl %1, 0(%4)\n" // storage = desired; desired = store succeeded -+ "rd_f %1 \n" -+ "beq %5, 2f\n" // if (success == 0) goto end -+ "mov %1, %3\n" // success = desired -+ "2:\n\t" -+ : "+r" (expected), // %0 -+ "+r" (desired), // %1 -+ "=&r" (current), // %2 -+ "=&r" (success), // %3 -+ "=&r" (tmp1), // %4 -+ "=&r" (tmp2) // %5 -+ : "m" (storage) // %6 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ if (success) -+ fence_after(success_order); -+ else -+ fence_after(failure_order); -+ return !!success; -+ } -+ -+ static BOOST_FORCEINLINE bool compare_exchange_strong( -+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT -+ { -+ int success; -+ storage_type current, tmp; -+ storage_type tmp1,tmp2; -+ fence_before(success_order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %4,%6\n" -+ "mov %7, %1\n" // tmp = desired -+ "lldl %2, 0(%4)\n" // current = *(&storage) -+ "cmpeq %2, %0, %5\n" // success = current == expected -+ "wr_f %5 \n" -+ "mov %2, %0\n" // expected = current -+ "lstl %1, 0(%4)\n" // storage = tmp; tmp = store succeeded -+ "rd_f %1 \n" -+ "beq %5, 2f\n" // if (success == 0) goto end -+ "beq %1, 3f\n" // if (tmp == 0) goto retry -+ "mov %1, %3\n" // success = tmp -+ "2:\n\t" -+ -+ ".subsection 2\n\t" -+ "3: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "+r" (expected), // %0 -+ "=&r" (tmp), // %1 -+ "=&r" (current), // %2 -+ "=&r" (success), // %3 -+ "=&r" (tmp1), // %4 -+ "=&r" (tmp2) // %5 -+ : "m" (storage), // %6 -+ "r" (desired) // %7 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ if (success) -+ fence_after(success_order); -+ else -+ fence_after(failure_order); -+ return !!success; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1, tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldl %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "addl %0, %5, %1\n" -+ "lstl %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldl %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "subl %0, %5, %1\n" -+ "lstl %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldl %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "and %0, %5, %1\n" -+ "lstl %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldl %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "bis %0, %5, %1\n" -+ "lstl %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT -+ { -+ storage_type original, modified; -+ storage_type tmp1,tmp2; -+ fence_before(order); -+ __asm__ __volatile__ -+ ( -+ "1:\n" -+ "ldi %2,%4\n" -+ "ldi %3,1\n" -+ "lldl %0, 0(%2)\n" -+ "wr_f %3 \n" -+ "xor %0, %5, %1\n" -+ "lstl %1, 0(%2)\n" -+ "rd_f %1 \n" -+ "beq %1, 2f\n" -+ -+ ".subsection 2\n\t" -+ "2: br 1b\n\t" -+ ".previous\n\t" -+ -+ : "=&r" (original), // %0 -+ "=&r" (modified), // %1 -+ "=&r" (tmp1), // %2 -+ "=&r" (tmp2) // %3 -+ : "m" (storage), // %4 -+ "r" (v) // %5 -+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC -+ ); -+ fence_after(order); -+ return original; -+ } -+ -+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT -+ { -+ return !!exchange(storage, (storage_type)1, order); -+ } -+ -+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT -+ { -+ store(storage, (storage_type)0, order); -+ } -+}; -+ -+} // namespace detail -+} // namespace atomics -+} // namespace boost -+ -+#include -+ -+#endif // BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_SW_64_HPP_INCLUDED_ -diff -Naur boost_1_78_0.org/boost/atomic/detail/fence_arch_ops_gcc_sw_64.hpp boost_1_78_0.sw/boost/atomic/detail/fence_arch_ops_gcc_sw_64.hpp ---- boost_1_78_0.org/boost/atomic/detail/fence_arch_ops_gcc_sw_64.hpp 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/boost/atomic/detail/fence_arch_ops_gcc_sw_64.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -0,0 +1,53 @@ -+/* -+ * Distributed under the Boost Software License, Version 1.0. -+ * (See accompanying file LICENSE_1_0.txt or copy at -+ * http://www.boost.org/LICENSE_1_0.txt) -+ * -+ * Copyright (c) 2020 Andrey Semashev -+ */ -+/*! -+ * \file atomic/detail/fence_arch_ops_gcc_sw_64.hpp -+ * -+ * This header contains implementation of the \c fence_arch_operations struct. -+ */ -+ -+#ifndef BOOST_ATOMIC_DETAIL_FENCE_ARCH_OPS_GCC_SW_64_HPP_INCLUDED_ -+#define BOOST_ATOMIC_DETAIL_FENCE_ARCH_OPS_GCC_SW_64_HPP_INCLUDED_ -+ -+#include -+#include -+#include -+ -+#ifdef BOOST_HAS_PRAGMA_ONCE -+#pragma once -+#endif -+ -+namespace boost { -+namespace atomics { -+namespace detail { -+ -+//! Fence operations for Sw_64 -+struct fence_arch_operations_gcc_sw_64 -+{ -+ static BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT -+ { -+ if (order != memory_order_relaxed) -+ __asm__ __volatile__ ("memb" ::: "memory"); -+ } -+ -+ static BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT -+ { -+ if (order != memory_order_relaxed) -+ __asm__ __volatile__ ("" ::: "memory"); -+ } -+}; -+ -+typedef fence_arch_operations_gcc_sw_64 fence_arch_operations; -+ -+} // namespace detail -+} // namespace atomics -+} // namespace boost -+ -+#include -+ -+#endif // BOOST_ATOMIC_DETAIL_FENCE_ARCH_OPS_GCC_SW_64_HPP_INCLUDED_ -diff -Naur boost_1_78_0.org/boost/atomic/detail/platform.hpp boost_1_78_0.sw/boost/atomic/detail/platform.hpp ---- boost_1_78_0.org/boost/atomic/detail/platform.hpp 2021-12-02 14:47:30.000000000 +0800 -+++ boost_1_78_0.sw/boost/atomic/detail/platform.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -78,6 +78,10 @@ - - #define BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND gcc_sparc - -+#elif defined(__GNUC__) && defined(__sw_64__) -+ -+#define BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND gcc_sw_64 -+ - #elif defined(__GNUC__) && defined(__alpha__) - - #define BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND gcc_alpha -diff -Naur boost_1_78_0.org/boost/numeric/interval/detail/sw_64_rounding_control.hpp boost_1_78_0.sw/boost/numeric/interval/detail/sw_64_rounding_control.hpp ---- boost_1_78_0.org/boost/numeric/interval/detail/sw_64_rounding_control.hpp 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/boost/numeric/interval/detail/sw_64_rounding_control.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -0,0 +1,113 @@ -+/* Boost interval/detail/sw_64_rounding_control.hpp file -+ * -+ * Copyright 2005 Felix Höfling, Guillaume Melquiond -+ * -+ * Distributed under the Boost Software License, Version 1.0. -+ * (See accompanying file LICENSE_1_0.txt or -+ * copy at http://www.boost.org/LICENSE_1_0.txt) -+ */ -+ -+#ifndef BOOST_NUMERIC_INTERVAL_DETAIL_SW_64_ROUNDING_CONTROL_HPP -+#define BOOST_NUMERIC_INTERVAL_DETAIL_SW_64_ROUNDING_CONTROL_HPP -+ -+#if !defined(sw_64) && !defined(__sw_64__) -+#error This header only works on Sw_64 CPUs. -+#endif -+ -+#if defined(__GNUC__) || defined(__digital__) || defined(__DECCXX) -+ -+#include // write_rnd() and read_rnd() -+ -+namespace boost { -+namespace numeric { -+namespace interval_lib { -+ -+namespace detail { -+#if defined(__GNUC__ ) -+ typedef union { -+ ::boost::long_long_type imode; -+ double dmode; -+ } rounding_mode_struct; -+ -+ // set bits 59-58 (DYN), -+ // clear all exception bits and disable overflow (51) and inexact exceptions (62) -+ static const rounding_mode_struct mode_upward = { 0x4C08000000000000LL }; -+ static const rounding_mode_struct mode_downward = { 0x4408000000000000LL }; -+ static const rounding_mode_struct mode_to_nearest = { 0x4808000000000000LL }; -+ static const rounding_mode_struct mode_toward_zero = { 0x4008000000000000LL }; -+ -+ struct sw_64_rounding_control -+ { -+ typedef double rounding_mode; -+ -+ static void set_rounding_mode(const rounding_mode mode) -+ { __asm__ __volatile__ ("wfpcr %0" : : "f"(mode)); } -+ -+ static void get_rounding_mode(rounding_mode& mode) -+ { __asm__ __volatile__ ("rfpcr %0" : "=f"(mode)); } -+ -+ static void downward() { set_rounding_mode(mode_downward.dmode); } -+ static void upward() { set_rounding_mode(mode_upward.dmode); } -+ static void to_nearest() { set_rounding_mode(mode_to_nearest.dmode); } -+ static void toward_zero() { set_rounding_mode(mode_toward_zero.dmode); } -+ }; -+#elif defined(__digital__) || defined(__DECCXX) -+ -+#if defined(__DECCXX) && !(defined(__FLT_ROUNDS) && __FLT_ROUNDS == -1) -+#error Dynamic rounding mode not enabled. See cxx man page for details. -+#endif -+ -+ struct sw_64_rounding_control -+ { -+ typedef unsigned int rounding_mode; -+ -+ static void set_rounding_mode(const rounding_mode& mode) { write_rnd(mode); } -+ static void get_rounding_mode(rounding_mode& mode) { mode = read_rnd(); } -+ -+ static void downward() { set_rounding_mode(FP_RND_RM); } -+ static void upward() { set_rounding_mode(FP_RND_RP); } -+ static void to_nearest() { set_rounding_mode(FP_RND_RN); } -+ static void toward_zero() { set_rounding_mode(FP_RND_RZ); } -+ }; -+#endif -+} // namespace detail -+ -+extern "C" { -+ float rintf(float); -+ double rint(double); -+ long double rintl(long double); -+} -+ -+template<> -+struct rounding_control: -+ detail::sw_64_rounding_control -+{ -+ static float force_rounding(const float r) -+ { volatile float _r = r; return _r; } -+ static float to_int(const float& x) { return rintf(x); } -+}; -+ -+template<> -+struct rounding_control: -+ detail::sw_64_rounding_control -+{ -+ static const double & force_rounding(const double& r) { return r; } -+ static double to_int(const double& r) { return rint(r); } -+}; -+ -+template<> -+struct rounding_control: -+ detail::sw_64_rounding_control -+{ -+ static const long double & force_rounding(const long double& r) { return r; } -+ static long double to_int(const long double& r) { return rintl(r); } -+}; -+ -+} // namespace interval_lib -+} // namespace numeric -+} // namespace boost -+ -+#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE -+#endif -+ -+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_SW_64_ROUNDING_CONTROL_HPP */ -diff -Naur boost_1_78_0.org/boost/numeric/interval/hw_rounding.hpp boost_1_78_0.sw/boost/numeric/interval/hw_rounding.hpp ---- boost_1_78_0.org/boost/numeric/interval/hw_rounding.hpp 2021-12-02 14:47:35.000000000 +0800 -+++ boost_1_78_0.sw/boost/numeric/interval/hw_rounding.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -28,6 +28,8 @@ - # include - #elif defined(sparc) || defined(__sparc__) - # include -+#elif defined(sw_64) || defined(__sw_64__) -+# include - #elif defined(alpha) || defined(__alpha__) - # include - #elif defined(ia64) || defined(__ia64) || defined(__ia64__) -diff -Naur boost_1_78_0.org/boost/predef/architecture/sw_64.h boost_1_78_0.sw/boost/predef/architecture/sw_64.h ---- boost_1_78_0.org/boost/predef/architecture/sw_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/boost/predef/architecture/sw_64.h 2022-05-09 13:54:56.570734000 +0800 -@@ -0,0 +1,54 @@ -+/* -+Copyright Rene Rivera 2008-2015 -+Distributed under the Boost Software License, Version 1.0. -+(See accompanying file LICENSE_1_0.txt or copy at -+http://www.boost.org/LICENSE_1_0.txt) -+*/ -+ -+#ifndef BOOST_PREDEF_ARCHITECTURE_SW_64_H -+#define BOOST_PREDEF_ARCHITECTURE_SW_64_H -+ -+#include -+#include -+ -+/* tag::reference[] -+= `BOOST_ARCH_SW_64` -+ -+http://en.wikipedia.org/wiki/DEC_Sw_64[DEC Sw_64] architecture. -+ -+[options="header"] -+|=== -+| {predef_symbol} | {predef_version} -+| `+__sw_64__+` | {predef_detection} -+| `+__sw_64+` | {predef_detection} -+| `+_M_SW_64+` | {predef_detection} -+ -+| `+__sw_64_ev6__+` | 6.0.0 -+|=== -+*/ // end::reference[] -+ -+#define BOOST_ARCH_SW_64 BOOST_VERSION_NUMBER_NOT_AVAILABLE -+ -+#if defined(__sw_64__) || defined(__sw_64) || \ -+ defined(_M_SW_64) -+# undef BOOST_ARCH_SW_64 -+# if !defined(BOOST_ARCH_SW_64) && defined(__sw_64_sw6b__) -+# define BOOST_ARCH_SW_64 BOOST_VERSION_NUMBER(6,0,0) -+# endif -+#endif -+ -+#if BOOST_ARCH_SW_64 -+# define BOOST_ARCH_SW_64_AVAILABLE -+#endif -+ -+#if BOOST_ARCH_SW_64 -+# undef BOOST_ARCH_WORD_BITS_64 -+# define BOOST_ARCH_WORD_BITS_64 BOOST_VERSION_NUMBER_AVAILABLE -+#endif -+ -+#define BOOST_ARCH_SW_64_NAME "DEC Sw_64" -+ -+#endif -+ -+#include -+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SW_64,BOOST_ARCH_SW_64_NAME) -diff -Naur boost_1_78_0.org/boost/predef/architecture.h boost_1_78_0.sw/boost/predef/architecture.h ---- boost_1_78_0.org/boost/predef/architecture.h 2021-12-02 14:47:36.000000000 +0800 -+++ boost_1_78_0.sw/boost/predef/architecture.h 2022-05-09 13:54:56.570734000 +0800 -@@ -11,6 +11,7 @@ - #endif - - #include -+#include - #include - #include - #include -diff -Naur boost_1_78_0.org/boost/units/systems/si/codata/atomic-nuclear_constants.hpp boost_1_78_0.sw/boost/units/systems/si/codata/atomic-nuclear_constants.hpp ---- boost_1_78_0.org/boost/units/systems/si/codata/atomic-nuclear_constants.hpp 2021-12-02 14:47:38.000000000 +0800 -+++ boost_1_78_0.sw/boost/units/systems/si/codata/atomic-nuclear_constants.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -12,6 +12,7 @@ - #define BOOST_UNITS_CODATA_ATOMIC_AND_NUCLEAR_CONSTANTS_HPP - - #include -+#include - #include - #include - #include -diff -Naur boost_1_78_0.org/boost/units/systems/si/codata/sw_64_constants.hpp boost_1_78_0.sw/boost/units/systems/si/codata/sw_64_constants.hpp ---- boost_1_78_0.org/boost/units/systems/si/codata/sw_64_constants.hpp 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/boost/units/systems/si/codata/sw_64_constants.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -0,0 +1,66 @@ -+// Boost.Units - A C++ library for zero-overhead dimensional analysis and -+// unit/quantity manipulation and conversion -+// -+// Copyright (C) 2003-2008 Matthias Christian Schabel -+// Copyright (C) 2008 Steven Watanabe -+// -+// Distributed under the Boost Software License, Version 1.0. (See -+// accompanying file LICENSE_1_0.txt or copy at -+// http://www.boost.org/LICENSE_1_0.txt) -+ -+#ifndef BOOST_UNITS_CODATA_SW_64_CONSTANTS_HPP -+#define BOOST_UNITS_CODATA_SW_64_CONSTANTS_HPP -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+/// \file -+/// CODATA recommended values of fundamental atomic and nuclear constants -+/// CODATA 2006 values as of 2007/03/30 -+ -+namespace boost { -+ -+namespace units { -+ -+namespace si { -+ -+namespace constants { -+ -+namespace codata { -+ -+/// CODATA recommended values of the fundamental physical constants: NIST SP 961 -+ -+/// sw_64 particle mass -+BOOST_UNITS_PHYSICAL_CONSTANT(m_sw_64,quantity,6.64465620e-27*kilograms,3.3e-34*kilograms); -+/// sw_64-electron mass ratio -+BOOST_UNITS_PHYSICAL_CONSTANT(m_sw_64_over_m_e,quantity,7294.2995365*dimensionless(),3.1e-6*dimensionless()); -+/// sw_64-proton mass ratio -+BOOST_UNITS_PHYSICAL_CONSTANT(m_sw_64_over_m_p,quantity,3.97259968951*dimensionless(),4.1e-10*dimensionless()); -+/// sw_64 molar mass -+BOOST_UNITS_PHYSICAL_CONSTANT(M_sw_64,quantity,4.001506179127e-3*kilograms/mole,6.2e-14*kilograms/mole); -+ -+} // namespace codata -+ -+} // namespace constants -+ -+} // namespace si -+ -+} // namespace units -+ -+} // namespace boost -+ -+#endif // BOOST_UNITS_CODATA_SW_64_CONSTANTS_HPP -diff -Naur boost_1_78_0.org/boost/wave/wave_config.hpp boost_1_78_0.sw/boost/wave/wave_config.hpp ---- boost_1_78_0.org/boost/wave/wave_config.hpp 2021-12-02 14:47:38.000000000 +0800 -+++ boost_1_78_0.sw/boost/wave/wave_config.hpp 2022-05-09 13:54:56.570734000 +0800 -@@ -253,7 +253,7 @@ - // CW up to 8.3 chokes as well *sigh* - // Tru64/CXX has linker problems when using flex_string - #if BOOST_WORKAROUND(__MWERKS__, < 0x3200) || \ -- (defined(__DECCXX) && defined(__alpha)) || \ -+ (defined(__DECCXX) && (defined(__alpha) || defined(__sw_64__))) || \ - defined(BOOST_WAVE_STRINGTYPE_USE_STDSTRING) - - #define BOOST_WAVE_STRINGTYPE std::string -diff -Naur boost_1_78_0.org/boostcpp.jam boost_1_78_0.sw/boostcpp.jam ---- boost_1_78_0.org/boostcpp.jam 2021-12-02 14:45:35.000000000 +0800 -+++ boost_1_78_0.sw/boostcpp.jam 2022-05-09 13:54:56.580734000 +0800 -@@ -634,7 +634,7 @@ - return @boostcpp.deduce-address-model ; - } - --local deducable-architectures = arm mips1 power riscv s390x sparc x86 combined ; -+local deducable-architectures = sw_64 arm mips1 power riscv s390x sparc x86 combined ; - feature.feature deduced-architecture : $(deducable-architectures) : propagated optional composite hidden ; - for a in $(deducable-architectures) - { -@@ -645,9 +645,10 @@ - { - local result ; - local filtered = [ toolset-properties $(properties) ] ; -- local names = arm mips1 power riscv s390x sparc x86 combined ; -+ local names = arm sw_64 mips1 power riscv s390x sparc x86 combined ; - local idx = [ configure.find-builds "default architecture" : $(filtered) - : /boost/architecture//arm -+ : /boost/architecture//sw_64 - : /boost/architecture//mips1 - : /boost/architecture//power - : /boost/architecture//riscv -diff -Naur boost_1_78_0.org/libs/atomic/test/lockfree.cpp boost_1_78_0.sw/libs/atomic/test/lockfree.cpp ---- boost_1_78_0.org/libs/atomic/test/lockfree.cpp 2021-12-02 14:47:30.000000000 +0800 -+++ boost_1_78_0.sw/libs/atomic/test/lockfree.cpp 2022-05-09 13:54:56.620734000 +0800 -@@ -101,7 +101,7 @@ - #define EXPECT_POINTER_LOCK_FREE 2 - #define EXPECT_BOOL_LOCK_FREE 2 - --#elif defined(__GNUC__) && defined(__alpha__) -+#elif defined(__GNUC__) && (defined(__alpha__) || defined(__sw_64__)) - - #define EXPECT_CHAR_LOCK_FREE 2 - #define EXPECT_CHAR16_T_LOCK_FREE 2 -diff -Naur boost_1_78_0.org/libs/config/checks/architecture/Jamfile.jam boost_1_78_0.sw/libs/config/checks/architecture/Jamfile.jam ---- boost_1_78_0.org/libs/config/checks/architecture/Jamfile.jam 2021-12-02 14:47:31.000000000 +0800 -+++ boost_1_78_0.sw/libs/config/checks/architecture/Jamfile.jam 2022-05-09 13:54:56.620734000 +0800 -@@ -17,6 +17,7 @@ - obj 64 : 64.cpp ; - - obj arm : arm.cpp ; -+obj sw_64 : sw_64.cpp ; - obj combined : combined.cpp ; - obj mips1 : mips1.cpp ; - obj power : power.cpp ; -diff -Naur boost_1_78_0.org/libs/config/checks/architecture/sw_64.cpp boost_1_78_0.sw/libs/config/checks/architecture/sw_64.cpp ---- boost_1_78_0.org/libs/config/checks/architecture/sw_64.cpp 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/libs/config/checks/architecture/sw_64.cpp 2022-05-09 13:54:56.620734000 +0800 -@@ -0,0 +1,15 @@ -+// sw_64.cpp -+// -+// Copyright (c) 2012 Steven Watanabe -+// -+// Distributed under the Boost Software License Version 1.0. (See -+// accompanying file LICENSE_1_0.txt or copy at -+// http://www.boost.org/LICENSE_1_0.txt) -+ -+#if !defined(__sw_64__) && !defined(__thumb__) && \ -+ !defined(__TARGET_ARCH_SW_64) && !defined(__TARGET_ARCH_THUMB) && \ -+ !defined(_SW_64) && !defined(_M_SW_64) && \ -+ !defined(__aarch64__) -+#error "Not SW_64" -+#endif -+ -diff -Naur boost_1_78_0.org/libs/config/test/config_info.cpp boost_1_78_0.sw/libs/config/test/config_info.cpp ---- boost_1_78_0.org/libs/config/test/config_info.cpp 2021-12-02 14:47:31.000000000 +0800 -+++ boost_1_78_0.sw/libs/config/test/config_info.cpp 2022-05-09 13:54:56.620734000 +0800 -@@ -173,6 +173,7 @@ - PRINT_MACRO(_M_IX86_FP); - PRINT_MACRO(_M_X64); - PRINT_MACRO(_M_ALPHA); -+ PRINT_MACRO(_M_SW_64); - PRINT_MACRO(_M_MPPC); - PRINT_MACRO(_M_MRX000); - PRINT_MACRO(_M_PPC); -@@ -229,6 +230,7 @@ - PRINT_MACRO(__MINGW32__); - PRINT_MACRO(__GXX_RTTI); - PRINT_MACRO(__alpha__); -+ PRINT_MACRO(__sw_64__); - PRINT_MACRO(__amd64__); - PRINT_MACRO(__arm__); - PRINT_MACRO(__aarch64__); -diff -Naur boost_1_78_0.org/libs/context/CMakeLists.txt boost_1_78_0.sw/libs/context/CMakeLists.txt ---- boost_1_78_0.org/libs/context/CMakeLists.txt 2021-12-02 14:47:31.000000000 +0800 -+++ boost_1_78_0.sw/libs/context/CMakeLists.txt 2022-05-09 13:54:56.620734000 +0800 -@@ -29,7 +29,7 @@ - - if(WIN32) - set(_default_abi ms) --elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") -+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^sw_64") - set(_default_abi aapcs) - elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") - if(_bits EQUAL 32) -@@ -48,7 +48,7 @@ - - ## Arch-and-model - --set(_all_archs arm arm64 mips32 mips64 ppc32 ppc64 riscv64 s390x i386 x86_64 combined) -+set(_all_archs arm arm64 sw_64 mips32 mips64 ppc32 ppc64 riscv64 s390x i386 x86_64 combined) - - # Try at start to auto determine arch from CMake. - if(CMAKE_SYSTEM_PROCESSOR IN_LIST _all_archs) -@@ -65,6 +65,8 @@ - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR - CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") # armv8 - set(_default_arch arm64) -+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^sw_64") -+ set(_default_arch sw_64) - elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") - set(_default_arch mips64) - else() -@@ -72,7 +74,7 @@ - endif() - endif() - --set(BOOST_CONTEXT_ARCHITECTURE "${_default_arch}" CACHE STRING "Boost.Context architecture (arm, arm64, mips32, mips64, ppc32, ppc64, riscv64, s390x, i386, x86_64, combined)") -+set(BOOST_CONTEXT_ARCHITECTURE "${_default_arch}" CACHE STRING "Boost.Context architecture (arm, arm64, mips32, sw_64, mips64, ppc32, ppc64, riscv64, s390x, i386, x86_64, combined)") - set_property(CACHE BOOST_CONTEXT_ARCHITECTURE PROPERTY STRINGS ${_all_archs}) - - unset(_all_archs) -diff -Naur boost_1_78_0.org/libs/context/build/Jamfile.v2 boost_1_78_0.sw/libs/context/build/Jamfile.v2 ---- boost_1_78_0.org/libs/context/build/Jamfile.v2 2021-12-02 14:47:31.000000000 +0800 -+++ boost_1_78_0.sw/libs/context/build/Jamfile.v2 2022-05-09 13:54:56.620734000 +0800 -@@ -80,6 +80,7 @@ - if [ os.name ] = "NT" { tmp = ms ; } - else if [ os.name ] = "CYGWIN" { tmp = ms ; } - else if [ os.platform ] = "ARM" { tmp = aapcs ; } -+ else if [ os.platform ] = "SW_64" { tmp = aapcs ; } - else if [ os.platform ] = "MIPS32" { tmp = o32 ; } - else if [ os.platform ] = "MIPS64" { tmp = n64 ; } - return $(tmp) ; -@@ -182,6 +183,30 @@ - msvc - ; - -+# SW_64 -+# SW_64/AAPCS/ELF -+alias asm_sources -+ : asm/make_sw_64_aapcs_elf_gas.S -+ asm/jump_sw_64_aapcs_elf_gas.S -+ asm/ontop_sw_64_aapcs_elf_gas.S -+ : aapcs -+ 64 -+ sw_64 -+ elf -+ clang -+ ; -+ -+alias asm_sources -+ : asm/make_sw_64_aapcs_elf_gas.S -+ asm/jump_sw_64_aapcs_elf_gas.S -+ asm/ontop_sw_64_aapcs_elf_gas.S -+ : aapcs -+ 64 -+ sw_64 -+ elf -+ gcc -+ ; -+ - # ARM64 - # ARM64/AAPCS/ELF - alias asm_sources -diff -Naur boost_1_78_0.org/libs/context/build/architecture.jam boost_1_78_0.sw/libs/context/build/architecture.jam ---- boost_1_78_0.org/libs/context/build/architecture.jam 2021-12-02 14:47:31.000000000 +0800 -+++ boost_1_78_0.sw/libs/context/build/architecture.jam 2022-05-09 13:54:56.620734000 +0800 -@@ -55,6 +55,10 @@ - { - return arm ; - } -+ else if [ configure.builds /boost/architecture//sw_64 : $(properties) : sw_64 ] -+ { -+ return sw_64 ; -+ } - else if [ configure.builds /boost/architecture//mips : $(properties) : mips ] - { - return mips ; -diff -Naur boost_1_78_0.org/libs/context/doc/architectures.qbk boost_1_78_0.sw/libs/context/doc/architectures.qbk ---- boost_1_78_0.org/libs/context/doc/architectures.qbk 2021-12-02 14:47:31.000000000 +0800 -+++ boost_1_78_0.sw/libs/context/doc/architectures.qbk 2022-05-09 13:54:56.620734000 +0800 -@@ -22,6 +22,7 @@ - [[s390x] [SYSV|ELF] [-] [-] [-]] - [[sparc] [-] [-] [-] [-]] - [[x86_64] [SYSV,X32|ELF] [MS|PE] [SYSV|MACH-O] [-]] -+ [[sw_64] [SYSV,X64|ELF] [MS|PE] [SYSV|MACH-O] [-]] - ] - - [note If the architecture is not supported but the platform provides -diff -Naur boost_1_78_0.org/libs/context/src/asm/jump_sw_64_aapcs_elf_gas.S boost_1_78_0.sw/libs/context/src/asm/jump_sw_64_aapcs_elf_gas.S ---- boost_1_78_0.org/libs/context/src/asm/jump_sw_64_aapcs_elf_gas.S 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/libs/context/src/asm/jump_sw_64_aapcs_elf_gas.S 2022-05-09 13:54:56.620734000 +0800 -@@ -0,0 +1,86 @@ -+.text -+.align 2 -+.global jump_fcontext -+.type jump_fcontext, %function -+jump_fcontext: -+ # prepare stack for GP + FPU -+ #ldih $29,0($27) -+ #ldi $29,0($29) -+ subl $sp, 0x98, $sp -+ -+ # save $f2-$f9 -+ fstd $f2, 0x00($sp) -+ fstd $f3, 0x08($sp) -+ fstd $f4, 0x10($sp) -+ fstd $f5, 0x18($sp) -+ fstd $f6, 0x20($sp) -+ fstd $f7, 0x28($sp) -+ fstd $f8, 0x30($sp) -+ fstd $f9, 0x38($sp) -+ -+ # save $9-$15, fp,$26 -+ stl $9, 0x40($sp) -+ stl $10, 0x48($sp) -+ stl $11, 0x50($sp) -+ stl $12, 0x58($sp) -+ stl $13, 0x60($sp) -+ stl $14, 0x68($sp) -+ stl $15, 0x70($sp) -+ stl $fp, 0x78($sp) -+ stl $16, 0x80($sp) #save jump_fcontext return address -+ stl $26, 0x88($sp) -+ -+ # save LR as PC -+ stl $26, 0x90($sp) -+ -+ # store RSP (pointing to context-data) in $16 -+ mov $sp, $20 -+ -+ -+ # restore RSP (pointing to context-data) from $17 -+ mov $17, $sp -+ -+ # load $f2-$f9 -+ fldd $f2, 0x00($sp) -+ fldd $f3, 0x08($sp) -+ fldd $f4, 0x10($sp) -+ fldd $f5, 0x18($sp) -+ fldd $f6, 0x20($sp) -+ fldd $f7, 0x28($sp) -+ fldd $f8, 0x30($sp) -+ fldd $f9, 0x38($sp) -+ -+ # load $9-$15, fp,$26 -+ ldl $9, 0x40($sp) -+ ldl $10, 0x48($sp) -+ ldl $11, 0x50($sp) -+ ldl $12, 0x58($sp) -+ ldl $13, 0x60($sp) -+ ldl $14, 0x68($sp) -+ ldl $15, 0x70($sp) -+ ldl $fp, 0x78($sp) -+ ldl $26, 0x88($sp) -+ -+ # pass transfer_t as first arg in context function -+ # to store $1,$2 to $16 address -+ ldl $16, 0x80($sp) #load $16, store return struct do return address -+ stl $20,0($16) -+ stl $18,8($16) -+ -+ # pass transfer_t as first arg in context function,such as f1,f2,f3 -+ # $16 == FCTX, $17 == DATA -+ mov $20,$16 #$16 $17 as first and second arg -+ mov $18,$17 -+ -+ -+ # load pc -+ ldl $27, 0x90($sp) -+ -+ -+ # restore stack from GP + FPU -+ addl $sp, 0x98, $sp -+ -+ ret $31,($27),0x1 //jmp $31, ($27) //ret ($27) -+.size jump_fcontext,.-jump_fcontext -+# Mark that we don't need executable stack. -+.section .note.GNU-stack,"",%progbits -diff -Naur boost_1_78_0.org/libs/context/src/asm/make_sw_64_aapcs_elf_gas.S boost_1_78_0.sw/libs/context/src/asm/make_sw_64_aapcs_elf_gas.S ---- boost_1_78_0.org/libs/context/src/asm/make_sw_64_aapcs_elf_gas.S 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/libs/context/src/asm/make_sw_64_aapcs_elf_gas.S 2022-05-09 13:54:56.620734000 +0800 -@@ -0,0 +1,37 @@ -+.text -+.align 2 -+.global make_fcontext -+.type make_fcontext, %function -+make_fcontext: -+ #ldih $29,0($27) -+ #ldi $29,0($29) -+ # shift address in $16 (allocated stack) to lower 16 byte boundary -+ bic $16, 0xf,$16 -+ -+ # reserve space for context-data on context-stack -+ subl $16, 0x98,$16 -+ -+ # third arg of make_fcontext() == address of context-function -+ # store address as a PC to jump in -+ stl $18, 0x90($16) -+ -+ # save address of finish as return-address for context-function -+ # will be entered after context-function returns (LR register) -+ ldi $17, finish -+ stl $17, 0x88($16) -+ -+ stl $16, 0x80($16) -+ -+ mov $16, $0 -+ -+ ret $31,($26),1 //jump ($26) // return pointer to context-data ($16) -+ -+finish: -+ # exit code is zero -+ mov 0, $0 -+ # exit application -+ call _exit #ldi $27,_exit #jmp ($27) -+ -+.size make_fcontext,.-make_fcontext -+# Mark that we don't need executable stack. -+.section .note.GNU-stack,"",%progbits -diff -Naur boost_1_78_0.org/libs/context/src/asm/ontop_sw_64_aapcs_elf_gas.S boost_1_78_0.sw/libs/context/src/asm/ontop_sw_64_aapcs_elf_gas.S ---- boost_1_78_0.org/libs/context/src/asm/ontop_sw_64_aapcs_elf_gas.S 1970-01-01 08:00:00.000000000 +0800 -+++ boost_1_78_0.sw/libs/context/src/asm/ontop_sw_64_aapcs_elf_gas.S 2022-05-09 13:56:40.360734000 +0800 -@@ -0,0 +1,85 @@ -+.text -+.align 2 -+.global ontop_fcontext -+.type ontop_fcontext, %function -+ontop_fcontext: -+ # prepare stack for GP + FPU -+ #ldih $29,0($27) -+ #ldi $29,0($29) -+ subl $sp, 0x98, $sp -+ -+ # save $f2-$f9 -+ fstd $f2, 0x00($sp) -+ fstd $f3, 0x08($sp) -+ fstd $f4, 0x10($sp) -+ fstd $f5, 0x18($sp) -+ fstd $f6, 0x20($sp) -+ fstd $f7, 0x28($sp) -+ fstd $f8, 0x30($sp) -+ fstd $f9, 0x38($sp) -+ -+ # save $9-$15, fp,$26 -+ stl $9, 0x40($sp) -+ stl $10, 0x48($sp) -+ stl $11, 0x50($sp) -+ stl $12, 0x58($sp) -+ stl $13, 0x60($sp) -+ stl $14, 0x68($sp) -+ stl $15, 0x70($sp) -+ stl $fp, 0x78($sp) -+ stl $16, 0x80($sp) #save ontop_fcontext return address -+ stl $26, 0x88($sp) -+ -+ # save LR as PC -+ stl $26, 0x90($sp) -+ -+ # store RSP (pointing to context-data) in $16 -+ mov $sp, $20 -+ -+ -+ # restore RSP (pointing to context-data) from $17 -+ mov $17, $sp -+ -+ # load $f2-$f9 -+ fldd $f2, 0x00($sp) -+ fldd $f3, 0x08($sp) -+ fldd $f4, 0x10($sp) -+ fldd $f5, 0x18($sp) -+ fldd $f6, 0x20($sp) -+ fldd $f7, 0x28($sp) -+ fldd $f8, 0x30($sp) -+ fldd $f9, 0x38($sp) -+ -+ # load $9-$15, fp,$26 -+ ldl $9, 0x40($sp) -+ ldl $10, 0x48($sp) -+ ldl $11, 0x50($sp) -+ ldl $12, 0x58($sp) -+ ldl $13, 0x60($sp) -+ ldl $14, 0x68($sp) -+ ldl $15, 0x70($sp) -+ ldl $fp, 0x78($sp) -+ ldl $26, 0x88($sp) -+ -+ # pass transfer_t as first arg in context function -+ # to store $1,$2 to $16 address -+ ldl $16, 0x80($sp) #load $16, store return struct do return address -+ stl $20,0($16) -+ stl $18,8($16) -+ -+ # pass transfer_t as first arg in context function,such as f1,f2,f3 -+ # $16 == FCTX, $17 == DATA -+ mov $20,$17 #$16 $17 $18 as first and second arg -+ -+ -+ # skip pc -+ mov $19, $27 -+ -+ -+ # restore stack from GP + FPU -+ addl $sp, 0x98, $sp -+ -+ ret $31,($27),0x1 //jmp $31, ($27) //ret ($27) -+.size ontop_fcontext,.-ontop_fcontext -+# Mark that we don't need executable stack. -+.section .note.GNU-stack,"",%progbits -diff -Naur boost_1_78_0.org/libs/log/build/log-arch-config.jam boost_1_78_0.sw/libs/log/build/log-arch-config.jam ---- boost_1_78_0.org/libs/log/build/log-arch-config.jam 2021-12-02 14:47:33.000000000 +0800 -+++ boost_1_78_0.sw/libs/log/build/log-arch-config.jam 2022-05-09 13:54:56.620734000 +0800 -@@ -56,6 +56,10 @@ - { - return arm ; - } -+ else if [ configure.builds /boost/architecture//sw_64 : $(properties) : sw_64 ] -+ { -+ return sw_64 ; -+ } - else if [ configure.builds /boost/architecture//mips1 : $(properties) : mips1 ] - { - return mips1 ; -diff -Naur boost_1_78_0.org/tools/build/src/engine/jam.h boost_1_78_0.sw/tools/build/src/engine/jam.h ---- boost_1_78_0.org/tools/build/src/engine/jam.h 2021-12-02 14:47:38.000000000 +0800 -+++ boost_1_78_0.sw/tools/build/src/engine/jam.h 2022-05-09 13:54:56.620734000 +0800 -@@ -396,6 +396,11 @@ - #define OSPLAT "OSPLAT=AXP" - #endif - -+#if defined( _SW_64_ ) || \ -+ defined( __sw_64__ ) -+ #define OSPLAT "OSPLAT=SW_64" -+#endif -+ - #if defined( _i386_ ) || \ - defined( __i386__ ) || \ - defined( __i386 ) || \ -diff -Naur boost_1_78_0.org/tools/build/src/tools/builtin.py boost_1_78_0.sw/tools/build/src/tools/builtin.py ---- boost_1_78_0.org/tools/build/src/tools/builtin.py 2021-12-02 14:47:38.000000000 +0800 -+++ boost_1_78_0.sw/tools/build/src/tools/builtin.py 2022-05-09 13:54:56.620734000 +0800 -@@ -252,6 +252,9 @@ - # x86 and x86-64 - 'x86', - -+ # SW_64 -+ 'sw_64', -+ - # ia64 - 'ia64', - -@@ -331,6 +334,9 @@ - 'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv4t', 'armv5', - 'armv5t', 'armv5te', 'armv6', 'armv6j', 'iwmmxt', 'ep9312', - -+ # SW_64 -+ 'sw_64', -+ - # z Systems (aka s390x) - 'z196', 'zEC12', 'z13', 'z13', 'z14', 'z15'], - -diff -Naur boost_1_78_0.org/tools/build/src/tools/doxproc.py boost_1_78_0.sw/tools/build/src/tools/doxproc.py ---- boost_1_78_0.org/tools/build/src/tools/doxproc.py 2021-12-02 14:47:38.000000000 +0800 -+++ boost_1_78_0.sw/tools/build/src/tools/doxproc.py 2022-05-09 13:54:56.630734000 +0800 -@@ -19,7 +19,7 @@ - - - def usage(): -- print ''' -+ print( ''' - Usage: - %s options - -@@ -30,7 +30,7 @@ - --title The title of the top level BoostBook section. - --enable-index Generate additional index sections for classes and - types. --''' % ( sys.argv[0] ) -+''' % ( sys.argv[0] )) - - - def get_args( argv = sys.argv[1:] ): -diff -Naur boost_1_78_0.org/tools/build/src/tools/features/architecture-feature.jam boost_1_78_0.sw/tools/build/src/tools/features/architecture-feature.jam ---- boost_1_78_0.org/tools/build/src/tools/features/architecture-feature.jam 2021-12-02 14:47:38.000000000 +0800 -+++ boost_1_78_0.sw/tools/build/src/tools/features/architecture-feature.jam 2022-05-09 13:54:56.630734000 +0800 -@@ -9,7 +9,7 @@ - - [[bbv2.builtin.features.architecture]]`architecture`:: - *Allowed values:* `x86`, `ia64`, `sparc`, `power`, `mips`, `mips1`, `mips2`, --`mips3`, `mips4`, `mips32`, `mips32r2`, `mips64`, `parisc`, `arm`, -+`mips3`, `mips4`, `mips32`, `mips32r2`, `mips64`, `parisc`, `arm`, `sw_64`, - `s390x`. - + - Specifies the general processor family to generate code for. -@@ -39,6 +39,9 @@ - # Advanced RISC Machines - arm - -+ # SW_64 -+ sw_64 -+ - # RISC-V - riscv - diff --git a/boost_1_78_0.tar.gz b/boost_1_78_0.tar.gz deleted file mode 100644 index 190dc53c072f2cac18dee9d1fc1c171a7582668e..0000000000000000000000000000000000000000 Binary files a/boost_1_78_0.tar.gz and /dev/null differ diff --git a/boost_1_83_0.tar.bz2 b/boost_1_83_0.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..269b90fefe83803e5a480d84ba6e78e17149e881 --- /dev/null +++ b/boost_1_83_0.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6478edfe2f3305127cffe8caf73ea0176c53769f4bf1585be237eb30798c3b8e +size 122892751