aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2021-04-20 10:01:29 +0200
committerMartin Liska <mliska@suse.cz>2021-04-20 10:01:29 +0200
commitae420abed0fe342866cf2bdfaf0ec1134493b25e (patch)
tree72be65920c6ec1070a44f14a57fa11b20189f381
parenta78721691fb18b5b490c87e3e7464711e0381ca1 (diff)
parent67378cd63d62bf0c69e966d1d202a1e586550a68 (diff)
downloadgcc-ae420abed0fe342866cf2bdfaf0ec1134493b25e.zip
gcc-ae420abed0fe342866cf2bdfaf0ec1134493b25e.tar.gz
gcc-ae420abed0fe342866cf2bdfaf0ec1134493b25e.tar.bz2
Merge branch 'master' into devel/sphinx
-rw-r--r--gcc/ChangeLog38
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/c-family/ChangeLog4
-rw-r--r--gcc/c-family/c.opt13
-rw-r--r--gcc/config/arm/arm.c8
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c6
-rw-r--r--gcc/d/ChangeLog8
-rw-r--r--gcc/d/d-diagnostic.cc64
-rw-r--r--gcc/doc/invoke.texi24
-rw-r--r--gcc/fortran/ChangeLog4
-rw-r--r--gcc/fortran/lang.opt4
-rw-r--r--gcc/fortran/trans-decl.c3
-rw-r--r--gcc/gimple-range-cache.h2
-rw-r--r--gcc/gimple-range-gori.cc67
-rw-r--r--gcc/omp-oacc-kernels-decompose.cc2
-rw-r--r--gcc/params.opt18
-rw-r--r--gcc/testsuite/ChangeLog38
-rw-r--r--gcc/testsuite/c-c++-common/goacc/if-clause-2.c2
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c2
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c2
-rw-r--r--gcc/testsuite/g++.dg/concepts/diagnostic16.C45
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/pr72803.C5
-rw-r--r--gcc/testsuite/gcc.dg/pr100142.c8
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr100075.c1
-rw-r--r--gcc/testsuite/gdc.dg/pr98457.d9
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f952
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f952
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-tree.f952
-rw-r--r--gcc/testsuite/gfortran.dg/pdt_26.f034
-rw-r--r--gcc/testsuite/gfortran.dg/pdt_31.f0326
-rw-r--r--libcpp/ChangeLog6
-rw-r--r--libcpp/line-map.c2
-rw-r--r--libgomp/ChangeLog10
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/pr94358-1.f902
-rw-r--r--libphobos/ChangeLog66
-rwxr-xr-xlibphobos/configure26
-rw-r--r--libphobos/libdruntime/MERGE2
-rw-r--r--libphobos/libdruntime/Makefile.am29
-rw-r--r--libphobos/libdruntime/Makefile.in93
-rw-r--r--libphobos/libdruntime/config/common/threadasm.S2
-rw-r--r--libphobos/libdruntime/config/mingw/msvc.c169
-rw-r--r--libphobos/libdruntime/config/mingw/switchcontext.S12
-rw-r--r--libphobos/libdruntime/config/powerpc/switchcontext.S278
-rw-r--r--libphobos/libdruntime/config/x86/switchcontext.S159
-rw-r--r--libphobos/libdruntime/core/stdc/config.d39
-rw-r--r--libphobos/libdruntime/core/stdc/math.d295
-rw-r--r--libphobos/libdruntime/core/stdc/stdio.d82
-rw-r--r--libphobos/libdruntime/core/stdc/stdlib.d27
-rw-r--r--libphobos/libdruntime/core/stdc/tgmath.d7
-rw-r--r--libphobos/libdruntime/core/sys/darwin/config.d53
-rw-r--r--libphobos/libdruntime/core/sys/darwin/mach/thread_act.d66
-rw-r--r--libphobos/libdruntime/core/sys/openbsd/sys/link_elf.d5
-rw-r--r--libphobos/libdruntime/core/sys/posix/stdio.d50
-rw-r--r--libphobos/libdruntime/core/sys/windows/com.d4
-rw-r--r--libphobos/libdruntime/core/sys/windows/dbghelp.d2
-rw-r--r--libphobos/libdruntime/core/sys/windows/dll.d4
-rw-r--r--libphobos/libdruntime/core/sys/windows/threadaux.d4
-rw-r--r--libphobos/libdruntime/core/thread/fiber.d48
-rw-r--r--libphobos/libdruntime/core/thread/osthread.d138
-rw-r--r--libphobos/libdruntime/core/thread/threadbase.d4
-rw-r--r--libphobos/libdruntime/gcc/backtrace.d4
-rw-r--r--libphobos/libdruntime/gcc/deh.d31
-rw-r--r--libphobos/libdruntime/gcc/gthread.d6
-rw-r--r--libphobos/libdruntime/gcc/sections/elf.d54
-rw-r--r--libphobos/libdruntime/gcc/sections/package.d1
-rw-r--r--libphobos/libdruntime/gcc/unwind/generic.d2
-rw-r--r--libphobos/libdruntime/gcc/unwind/pe.d81
-rw-r--r--libphobos/libdruntime/rt/dmain2.d67
-rw-r--r--libphobos/m4/druntime/libraries.m44
-rw-r--r--libphobos/m4/druntime/os.m422
-rw-r--r--libphobos/src/MERGE2
-rw-r--r--libphobos/src/std/process.d51
-rw-r--r--libphobos/testsuite/libphobos.thread/fiber_guard_page.d6
-rw-r--r--libstdc++-v3/ChangeLog5
-rw-r--r--libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt102
81 files changed, 2042 insertions, 511 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bd1d682..015f9a3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,41 @@
+2021-04-19 Andrew MacLeod <amacleod@redhat.com>
+
+ PR tree-optimization/100081
+ * gimple-range-cache.h (ranger_cache): Inherit from gori_compute
+ rather than gori_compute_cache.
+ * gimple-range-gori.cc (is_gimple_logical_p): Move to top of file.
+ (range_def_chain::m_logical_depth): New member.
+ (range_def_chain::range_def_chain): Initialize m_logical_depth.
+ (range_def_chain::get_def_chain): Don't build defchains through more
+ than LOGICAL_LIMIT logical expressions.
+ * params.opt (param_ranger_logical_depth): New.
+
+2021-04-19 Richard Earnshaw <rearnsha@arm.com>
+
+ PR target/100067
+ * config/arm/arm.c (arm_configure_build_target): Do not strip
+ extended FPU/SIMD feature bits from the target ISA when -mfpu
+ is specified (partial revert of r11-8168).
+
+2021-04-19 Thomas Schwinge <thomas@codesourcery.com>
+
+ * params.opt (-param=openacc-kernels=): Add.
+ * omp-oacc-kernels-decompose.cc
+ (pass_omp_oacc_kernels_decompose::gate): Use it.
+ * doc/invoke.texi (-fopenacc-kernels=@var{mode}): Move...
+ (--param): ... here, 'openacc-kernels'.
+
+2021-04-19 Martin Liska <mliska@suse.cz>
+
+ PR c/100143
+ * gengtype.c (finish_root_table): Align function arguments
+ in between declaration and definition.
+
+2021-04-19 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/i386/winnt.c (i386_pe_seh_cold_init): Properly deal with
+ frames larger than the SEH maximum frame size.
+
2021-04-18 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/99927
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index fac6a1c..b392715 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20210419
+20210420
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 032a0ff..fb2c4b0 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,7 @@
+2021-04-19 Thomas Schwinge <thomas@codesourcery.com>
+
+ * c.opt (fopenacc-kernels=): Remove.
+
2021-04-08 Jakub Jelinek <jakub@redhat.com>
* c-warn.c (do_warn_double_promotion): Fix comment typo,
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index ed9a825..3f8b72c 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1873,19 +1873,6 @@ fopenacc-dim=
C ObjC C++ ObjC++ LTO Joined Var(flag_openacc_dims)
Specify default OpenACC compute dimensions.
-fopenacc-kernels=
-C ObjC C++ ObjC++ RejectNegative Joined Enum(openacc_kernels) Var(flag_openacc_kernels) Init(OPENACC_KERNELS_PARLOOPS)
--fopenacc-kernels=[decompose|parloops] Specify mode of OpenACC 'kernels' constructs handling.
-
-Enum
-Name(openacc_kernels) Type(enum openacc_kernels)
-
-EnumValue
-Enum(openacc_kernels) String(decompose) Value(OPENACC_KERNELS_DECOMPOSE)
-
-EnumValue
-Enum(openacc_kernels) String(parloops) Value(OPENACC_KERNELS_PARLOOPS)
-
fopenmp
C ObjC C++ ObjC++ LTO Var(flag_openmp)
Enable OpenMP (implies -frecursive in Fortran).
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 475fb0d..340f7c9 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -3396,9 +3396,11 @@ arm_configure_build_target (struct arm_build_target *target,
auto_sbitmap fpu_bits (isa_num_bits);
arm_initialize_isa (fpu_bits, arm_selected_fpu->isa_bits);
- /* Clear out ALL bits relating to the FPU/simd extensions, to avoid
- potentially invalid combinations later on that we can't match. */
- bitmap_and_compl (target->isa, target->isa, isa_all_fpbits);
+ /* This should clear out ALL bits relating to the FPU/simd
+ extensions, to avoid potentially invalid combinations later on
+ that we can't match. At present we only clear out those bits
+ that can be set by -mfpu. This should be fixed in GCC-12. */
+ bitmap_and_compl (target->isa, target->isa, isa_all_fpubits_internal);
bitmap_ior (target->isa, target->isa, fpu_bits);
}
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 69f1927..335018c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2021-04-19 Marek Polacek <polacek@redhat.com>
+
+ PR c++/97536
+ * decl.c (grokvardecl): Given an error when a concept is not defined
+ at namespace scope.
+
2021-04-16 Jakub Jelinek <jakub@redhat.com>
PR c++/100111
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 942eb31..b81de8e 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -10365,6 +10365,12 @@ grokvardecl (tree type,
"a non-template variable cannot be %<concept%>");
return NULL_TREE;
}
+ else if (!at_namespace_scope_p ())
+ {
+ error_at (declspecs->locations[ds_concept],
+ "concept must be defined at namespace scope");
+ return NULL_TREE;
+ }
else
DECL_DECLARED_CONCEPT_P (decl) = true;
if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog
index 1662e06..a4456bd 100644
--- a/gcc/d/ChangeLog
+++ b/gcc/d/ChangeLog
@@ -1,3 +1,11 @@
+2021-04-19 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/98457
+ * d-diagnostic.cc (expand_d_format): Handle escaped backticks.
+ (escape_d_format): New funtion.
+ (verror): Call escape_d_format on prefixing strings.
+ (vdeprecation): Likewise.
+
2021-04-17 Iain Buclaw <ibuclaw@gdcproject.org>
PR d/99914
diff --git a/gcc/d/d-diagnostic.cc b/gcc/d/d-diagnostic.cc
index 3bf5a53..7043abe 100644
--- a/gcc/d/d-diagnostic.cc
+++ b/gcc/d/d-diagnostic.cc
@@ -48,7 +48,7 @@ expand_d_format (const char *format)
for (const char *p = format; *p;)
{
- while (*p != '\0' && *p != '%' && *p != '`')
+ while (*p != '\0' && *p != '\\' && *p != '%' && *p != '`')
{
obstack_1grow (&buf, *p);
p++;
@@ -57,6 +57,21 @@ expand_d_format (const char *format)
if (*p == '\0')
break;
+ if (*p == '\\')
+ {
+ if (p[1] == '`')
+ {
+ /* Escaped backtick, don't expand it as a quoted string. */
+ obstack_1grow (&buf, '`');
+ p++;;
+ }
+ else
+ obstack_1grow (&buf, *p);
+
+ p++;
+ continue;
+ }
+
if (*p == '`')
{
/* Text enclosed by `...` are translated as a quoted string. */
@@ -114,6 +129,43 @@ expand_d_format (const char *format)
return (char *) obstack_finish (&buf);
}
+/* Rewrite the format string FORMAT to deal with any characters that require
+ escaping before expand_d_format expands it. */
+
+static char *
+escape_d_format (const char *format)
+{
+ obstack buf;
+
+ gcc_obstack_init (&buf);
+
+ for (const char *p = format; *p; p++)
+ {
+ switch (*p)
+ {
+ case '%':
+ /* Escape `%' characters so that pp_format does not confuse them
+ for actual format specifiers. */
+ obstack_1grow (&buf, '%');
+ break;
+
+ case '`':
+ /* Escape '`' characters so that expand_d_format does not confuse them
+ for a quoted string. */
+ obstack_1grow (&buf, '\\');
+ break;
+
+ default:
+ break;
+ }
+
+ obstack_1grow (&buf, *p);
+ }
+
+ obstack_1grow (&buf, '\0');
+ return (char *) obstack_finish (&buf);
+}
+
/* Helper routine for all error routines. Reports a diagnostic specified by
KIND at the explicit location LOC. The message FORMAT comes from the dmd
front-end, which does not get translated by the gcc diagnostic routines. */
@@ -177,9 +229,10 @@ verror (const Loc &loc, const char *format, va_list ap,
/* Build string and emit. */
if (prefix2 != NULL)
- xformat = xasprintf ("%s %s %s", prefix1, prefix2, format);
+ xformat = xasprintf ("%s %s %s", escape_d_format (prefix1),
+ escape_d_format (prefix2), format);
else if (prefix1 != NULL)
- xformat = xasprintf ("%s %s", prefix1, format);
+ xformat = xasprintf ("%s %s", escape_d_format (prefix1), format);
else
xformat = xasprintf ("%s", format);
@@ -289,9 +342,10 @@ vdeprecation (const Loc &loc, const char *format, va_list ap,
/* Build string and emit. */
if (prefix2 != NULL)
- xformat = xasprintf ("%s %s %s", prefix1, prefix2, format);
+ xformat = xasprintf ("%s %s %s", escape_d_format (prefix1),
+ escape_d_format (prefix2), format);
else if (prefix1 != NULL)
- xformat = xasprintf ("%s %s", prefix1, format);
+ xformat = xasprintf ("%s %s", escape_d_format (prefix1), format);
else
xformat = xasprintf ("%s", format);
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 23e155f..810cb86 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -202,7 +202,7 @@ in the following sections.
-aux-info @var{filename} -fallow-parameterless-variadic-functions @gol
-fno-asm -fno-builtin -fno-builtin-@var{function} -fgimple@gol
-fhosted -ffreestanding @gol
--fopenacc -fopenacc-dim=@var{geom} -fopenacc-kernels=@var{mode} @gol
+-fopenacc -fopenacc-dim=@var{geom} @gol
-fopenmp -fopenmp-simd @gol
-fms-extensions -fplan9-extensions -fsso-struct=@var{endianness} @gol
-fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol
@@ -2619,18 +2619,6 @@ not explicitly specify. The @var{geom} value is a triple of
':'-separated sizes, in order 'gang', 'worker' and, 'vector'. A size
can be omitted, to use a target-specific default value.
-@item -fopenacc-kernels=@var{mode}
-@opindex fopenacc-kernels
-@cindex OpenACC accelerator programming
-Specify mode of OpenACC `kernels' constructs handling.
-With @option{-fopenacc-kernels=decompose}, OpenACC `kernels'
-constructs are decomposed into parts, a sequence of compute
-constructs, each then handled individually.
-This is work in progress.
-With @option{-fopenacc-kernels=parloops}, OpenACC `kernels' constructs
-are handled by the @samp{parloops} pass, en bloc.
-This is the current default.
-
@item -fopenmp
@opindex fopenmp
@cindex OpenMP parallel
@@ -14376,6 +14364,16 @@ The parameter is used only in GIMPLE FE.
The maximum number of 'after supernode' exploded nodes within the analyzer
per supernode, before terminating analysis.
+@item openacc-kernels
+Specify mode of OpenACC `kernels' constructs handling.
+With @option{--param=openacc-kernels=decompose}, OpenACC `kernels'
+constructs are decomposed into parts, a sequence of compute
+constructs, each then handled individually.
+This is work in progress.
+With @option{--param=openacc-kernels=parloops}, OpenACC `kernels'
+constructs are handled by the @samp{parloops} pass, en bloc.
+This is the current default.
+
@end table
The following choices of @var{name} are available on AArch64 targets:
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 86ef778..2e61504 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,7 @@
+2021-04-19 Thomas Schwinge <thomas@codesourcery.com>
+
+ * lang.opt (fopenacc-kernels=): Remove.
+
2021-04-16 José Rui Faustino de Sousa <jrfsousa@gmail.com>
PR fortran/100094
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 2b1977c..388ef8c 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -691,10 +691,6 @@ fopenacc-dim=
Fortran LTO Joined Var(flag_openacc_dims)
; Documented in C
-fopenacc-kernels=
-Fortran RejectNegative Joined Enum(openacc_kernels) Var(flag_openacc_kernels) Init(OPENACC_KERNELS_PARLOOPS)
-; Documented in C
-
fopenmp
Fortran LTO
; Documented in C
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 34a0d49..cc9d855 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1548,7 +1548,8 @@ gfc_get_symbol_decl (gfc_symbol * sym)
declaration of the entity and memory allocated/deallocated. */
if ((sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
&& sym->param_list != NULL
- && !(sym->attr.host_assoc || sym->attr.use_assoc || sym->attr.dummy))
+ && gfc_current_ns == sym->ns
+ && !(sym->attr.use_assoc || sym->attr.dummy))
gfc_defer_symbol_init (sym);
/* Dummy PDT 'len' parameters should be checked when they are explicit. */
diff --git a/gcc/gimple-range-cache.h b/gcc/gimple-range-cache.h
index c98e987..2b36a02 100644
--- a/gcc/gimple-range-cache.h
+++ b/gcc/gimple-range-cache.h
@@ -87,7 +87,7 @@ private:
// them available for gori-computes to query so outgoing edges can be
// properly calculated.
-class ranger_cache : public gori_compute_cache
+class ranger_cache : public gori_compute
{
public:
ranger_cache (class gimple_ranger &q);
diff --git a/gcc/gimple-range-gori.cc b/gcc/gimple-range-gori.cc
index 7f7f3dc..420282d 100644
--- a/gcc/gimple-range-gori.cc
+++ b/gcc/gimple-range-gori.cc
@@ -29,6 +29,32 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-pretty-print.h"
#include "gimple-range.h"
+// Return TRUE if GS is a logical && or || expression.
+
+static inline bool
+is_gimple_logical_p (const gimple *gs)
+{
+ // Look for boolean and/or condition.
+ if (is_gimple_assign (gs))
+ switch (gimple_expr_code (gs))
+ {
+ case TRUTH_AND_EXPR:
+ case TRUTH_OR_EXPR:
+ return true;
+
+ case BIT_AND_EXPR:
+ case BIT_IOR_EXPR:
+ // Bitwise operations on single bits are logical too.
+ if (types_compatible_p (TREE_TYPE (gimple_assign_rhs1 (gs)),
+ boolean_type_node))
+ return true;
+ break;
+
+ default:
+ break;
+ }
+ return false;
+}
/* RANGE_DEF_CHAIN is used to determine what SSA names in a block can
have range information calculated for them, and what the
@@ -76,6 +102,7 @@ public:
private:
vec<bitmap> m_def_chain; // SSA_NAME : def chain components.
void build_def_chain (tree name, bitmap result, basic_block bb);
+ int m_logical_depth;
};
@@ -85,6 +112,7 @@ range_def_chain::range_def_chain ()
{
m_def_chain.create (0);
m_def_chain.safe_grow_cleared (num_ssa_names);
+ m_logical_depth = 0;
}
// Destruct a range_def_chain.
@@ -157,6 +185,7 @@ range_def_chain::get_def_chain (tree name)
{
tree ssa1, ssa2, ssa3;
unsigned v = SSA_NAME_VERSION (name);
+ bool is_logical = false;
// If it has already been processed, just return the cached value.
if (has_def_chain (name))
@@ -169,6 +198,15 @@ range_def_chain::get_def_chain (tree name)
gimple *stmt = SSA_NAME_DEF_STMT (name);
if (gimple_range_handler (stmt))
{
+ is_logical = is_gimple_logical_p (stmt);
+ // Terminate the def chains if we see too many cascading logical stmts.
+ if (is_logical)
+ {
+ if (m_logical_depth == param_ranger_logical_depth)
+ return NULL;
+ m_logical_depth++;
+ }
+
ssa1 = gimple_range_ssa_p (gimple_range_operand1 (stmt));
ssa2 = gimple_range_ssa_p (gimple_range_operand2 (stmt));
ssa3 = NULL_TREE;
@@ -195,6 +233,9 @@ range_def_chain::get_def_chain (tree name)
if (ssa3)
build_def_chain (ssa3, m_def_chain[v], bb);
+ if (is_logical)
+ m_logical_depth--;
+
// If we run into pathological cases where the defintion chains are
// huge (ie huge basic block fully unrolled) we might be able to limit
// this by deciding here that if some criteria is satisfied, we change the
@@ -562,32 +603,6 @@ gori_compute::compute_operand_range_switch (irange &r, gswitch *s,
return false;
}
-// Return TRUE if GS is a logical && or || expression.
-
-static inline bool
-is_gimple_logical_p (const gimple *gs)
-{
- // Look for boolean and/or condition.
- if (gimple_code (gs) == GIMPLE_ASSIGN)
- switch (gimple_expr_code (gs))
- {
- case TRUTH_AND_EXPR:
- case TRUTH_OR_EXPR:
- return true;
-
- case BIT_AND_EXPR:
- case BIT_IOR_EXPR:
- // Bitwise operations on single bits are logical too.
- if (types_compatible_p (TREE_TYPE (gimple_assign_rhs1 (gs)),
- boolean_type_node))
- return true;
- break;
-
- default:
- break;
- }
- return false;
-}
// Return an evaluation for NAME as it would appear in STMT when the
// statement's lhs evaluates to LHS. If successful, return TRUE and
diff --git a/gcc/omp-oacc-kernels-decompose.cc b/gcc/omp-oacc-kernels-decompose.cc
index c624e26..4ba5758 100644
--- a/gcc/omp-oacc-kernels-decompose.cc
+++ b/gcc/omp-oacc-kernels-decompose.cc
@@ -1527,7 +1527,7 @@ public:
virtual bool gate (function *)
{
return (flag_openacc
- && flag_openacc_kernels == OPENACC_KERNELS_DECOMPOSE);
+ && param_openacc_kernels == OPENACC_KERNELS_DECOMPOSE);
}
virtual unsigned int execute (function *)
{
diff --git a/gcc/params.opt b/gcc/params.opt
index 0dd9ac4..7c7aa78 100644
--- a/gcc/params.opt
+++ b/gcc/params.opt
@@ -157,6 +157,11 @@ Enum(evrp_mode) String(trace) Value(EVRP_MODE_TRACE)
EnumValue
Enum(evrp_mode) String(debug) Value(EVRP_MODE_DEBUG)
+-param=ranger-logical-depth=
+Common Joined UInteger Var(param_ranger_logical_depth) Init(6) IntegerRange(1, 999) Param Optimization
+Maximum depth of logical expression evaluation ranger will look through when
+evaluting outgoing edge ranges.
+
-param=fsm-maximum-phi-arguments=
Common Joined UInteger Var(param_fsm_maximum_phi_arguments) Init(100) IntegerRange(1, 999999) Param Optimization
Maximum number of arguments a PHI may have before the FSM threader will not try to thread through its block.
@@ -777,6 +782,19 @@ The minimum probability of reaching a source block for interblock speculative sc
Common Joined UInteger Var(param_min_vect_loop_bound) Param Optimization
If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization.
+-param=openacc-kernels=
+Common Joined Enum(openacc_kernels) Var(param_openacc_kernels) Init(OPENACC_KERNELS_PARLOOPS) Param
+--param=openacc-kernels=[decompose|parloops] Specify mode of OpenACC 'kernels' constructs handling.
+
+Enum
+Name(openacc_kernels) Type(enum openacc_kernels)
+
+EnumValue
+Enum(openacc_kernels) String(decompose) Value(OPENACC_KERNELS_DECOMPOSE)
+
+EnumValue
+Enum(openacc_kernels) String(parloops) Value(OPENACC_KERNELS_PARLOOPS)
+
-param=parloops-chunk-size=
Common Joined UInteger Var(param_parloops_chunk_size) Param Optimization
Chunk size of omp schedule for loops parallelized by parloops.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e71d5b7..29c90df 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,41 @@
+2021-04-19 Marek Polacek <polacek@redhat.com>
+
+ PR c++/97536
+ * g++.dg/concepts/diagnostic16.C: New test.
+
+2021-04-19 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/98457
+ * gdc.dg/pr98457.d: New test.
+
+2021-04-19 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/100075
+ * gcc.target/aarch64/pr100075.c: Add aarch64_little_endian
+ effective target.
+
+2021-04-19 Richard Biener <rguenther@suse.de>
+
+ PR preprocessor/100142
+ * gcc.dg/pr100142.c: New testcase.
+ * g++.dg/diagnostic/pr72803.C: Revert last change.
+
+2021-04-19 Thomas Schwinge <thomas@codesourcery.com>
+
+ * c-c++-common/goacc/if-clause-2.c: '-fopenacc-kernels=[...]' ->
+ '--param=openacc-kernels=[...]'.
+ * c-c++-common/goacc/kernels-decompose-1.c: Likewise.
+ * c-c++-common/goacc/kernels-decompose-2.c: Likewise.
+ * c-c++-common/goacc/kernels-decompose-ice-1.c: Likewise.
+ * c-c++-common/goacc/kernels-decompose-ice-2.c: Likewise.
+ * gfortran.dg/goacc/kernels-decompose-1.f95: Likewise.
+ * gfortran.dg/goacc/kernels-decompose-2.f95: Likewise.
+ * gfortran.dg/goacc/kernels-tree.f95: Likewise.
+
+2021-04-19 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/opt92.adb: New test.
+
2021-04-17 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com>
* c-c++-common/zero-scratch-regs-8.c: Enable on s390*.
diff --git a/gcc/testsuite/c-c++-common/goacc/if-clause-2.c b/gcc/testsuite/c-c++-common/goacc/if-clause-2.c
index 7bb1153..a480725 100644
--- a/gcc/testsuite/c-c++-common/goacc/if-clause-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/if-clause-2.c
@@ -1,5 +1,5 @@
/* { dg-additional-options "-fdump-tree-gimple" } */
-/* { dg-additional-options "-fopenacc-kernels=decompose" }
+/* { dg-additional-options "--param=openacc-kernels=decompose" }
{ dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" } */
void
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c
index e906443..87219c8 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c
@@ -2,7 +2,7 @@
/* { dg-additional-options "-fopt-info-omp-all" } */
/* { dg-additional-options "-fdump-tree-gimple" } */
-/* { dg-additional-options "-fopenacc-kernels=decompose" }
+/* { dg-additional-options "--param=openacc-kernels=decompose" }
{ dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" } */
/* See also '../../gfortran.dg/goacc/kernels-decompose-1.f95'. */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c
index ec0f75c..3781e75 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c
@@ -1,7 +1,7 @@
/* Test OpenACC 'kernels' construct decomposition. */
/* { dg-additional-options "-fopt-info-omp-all" } */
-/* { dg-additional-options "-fopenacc-kernels=decompose" }
+/* { dg-additional-options "--param=openacc-kernels=decompose" }
/* { dg-additional-options "-O2" } for 'parloops'. */
/* See also '../../gfortran.dg/goacc/kernels-decompose-2.f95'. */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c
index 82e7bd1..d770b91d 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c
@@ -1,7 +1,7 @@
/* Test OpenACC 'kernels' construct decomposition. */
/* { dg-additional-options "-fopt-info-omp-all" } */
-/* { dg-additional-options "-fopenacc-kernels=decompose" } */
+/* { dg-additional-options "--param=openacc-kernels=decompose" } */
/* { dg-ice "TODO" }
{ dg-prune-output "during GIMPLE pass: omplower" } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c
index 569f87a..ae059eb 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c
@@ -1,6 +1,6 @@
/* Test OpenACC 'kernels' construct decomposition. */
-/* { dg-additional-options "-fopenacc-kernels=decompose" } */
+/* { dg-additional-options "--param=openacc-kernels=decompose" } */
/* { dg-ice "TODO" }
{ dg-prune-output "during GIMPLE pass: omplower" } */
diff --git a/gcc/testsuite/g++.dg/concepts/diagnostic16.C b/gcc/testsuite/g++.dg/concepts/diagnostic16.C
new file mode 100644
index 0000000..fcba535
--- /dev/null
+++ b/gcc/testsuite/g++.dg/concepts/diagnostic16.C
@@ -0,0 +1,45 @@
+// PR c++/97536
+// { dg-do compile { target concepts } }
+
+template<typename>
+concept C1 = true;
+
+concept C2 = true; // { dg-error "non-template variable cannot be .concept." }
+// { dg-error "concept definition syntax is" "" { target *-*-* } .-1 }
+
+template<typename>
+void fn1 ()
+{
+ concept bar = true; // { dg-error "concept must be defined at namespace scope" }
+// { dg-error "concept definition syntax is" "" { target *-*-* } .-1 }
+}
+
+void fn2 ()
+{
+ concept bar = true; // { dg-error "non-template variable cannot be .concept." }
+// { dg-error "concept definition syntax is" "" { target *-*-* } .-1 }
+}
+
+template<typename>
+void fn3 ()
+{
+ template<typename> // { dg-error "template declaration cannot appear at block scope" }
+ concept bar = true;
+}
+
+void fn4 ()
+{
+ template<typename> // { dg-error "template declaration cannot appear at block scope" }
+ concept bar = true;
+}
+
+void fn5 ()
+{
+ C1 auto x = 42;
+}
+
+template<typename>
+void fn6 ()
+{
+ C1 auto x = 42;
+}
diff --git a/gcc/testsuite/g++.dg/diagnostic/pr72803.C b/gcc/testsuite/g++.dg/diagnostic/pr72803.C
index ca522b7..0a9a390 100644
--- a/gcc/testsuite/g++.dg/diagnostic/pr72803.C
+++ b/gcc/testsuite/g++.dg/diagnostic/pr72803.C
@@ -5,6 +5,5 @@ class test {
// The line directive appears to be necessary to trigger the ICE
// { dg-error "style of line directive is a GCC extension" "" { target *-*-* } .-2 }
-/* Verify that we get the best line and column for the diagnostic.
- 512 is not representable in the line-maps created for this test. */
-// { dg-error "511: expected .;. after class definition" "" { target *-*-* } 3 }
+/* Verify that we get the correct line and column for the diagnostic. */
+// { dg-error "512: expected .;. after class definition" "" { target *-*-* } 3 }
diff --git a/gcc/testsuite/gcc.dg/pr100142.c b/gcc/testsuite/gcc.dg/pr100142.c
new file mode 100644
index 0000000..aec146c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr100142.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-fpreprocessed" } */
+
+void
+foo (void)
+{
+ assert (1); /* { dg-warning "implicit" } */
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/pr100075.c b/gcc/testsuite/gcc.target/aarch64/pr100075.c
index 6bdaa2f..1ece5fd 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr100075.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr100075.c
@@ -1,5 +1,6 @@
/* PR target/100075 */
/* { dg-do compile } */
+/* { dg-require-effective-target aarch64_little_endian } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-not {\tsbfx\tx[0-9]+, x[0-9]+, 16, 16} } } */
/* { dg-final { scan-assembler {\tneg\tw[0-9]+, w[0-9]+, asr 16} } } */
diff --git a/gcc/testsuite/gdc.dg/pr98457.d b/gcc/testsuite/gdc.dg/pr98457.d
new file mode 100644
index 0000000..bc0d8af
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr98457.d
@@ -0,0 +1,9 @@
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98457
+// { dg-do compile }
+
+void main()
+{
+ writef!"%s"; // { dg-error "template instance writef!\"%s\" template .writef. is not defined" }
+ writef!"`%s"; // { dg-error "template instance writef!\"`%s\" template .writef. is not defined" }
+ writef!"%%s`"; // { dg-error "template instance writef!\"%%s`\" template .writef. is not defined" }
+}
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95
index 7e513f8..e252350 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95
@@ -2,7 +2,7 @@
! { dg-additional-options "-fopt-info-omp-all" }
! { dg-additional-options "-fdump-tree-gimple" }
-! { dg-additional-options "-fopenacc-kernels=decompose" }
+! { dg-additional-options "--param=openacc-kernels=decompose" }
! { dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" }
! See also '../../c-c++-common/goacc/kernels-decompose-1.c'.
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95
index 22f65e5..cc12b77 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95
@@ -1,7 +1,7 @@
! Test OpenACC 'kernels' construct decomposition.
! { dg-additional-options "-fopt-info-omp-all" }
-! { dg-additional-options "-fopenacc-kernels=decompose" }
+! { dg-additional-options "--param=openacc-kernels=decompose" }
! { dg-additional-options "-O2" } for 'parloops'.
! See also '../../c-c++-common/goacc/kernels-decompose-2.c'.
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
index d01eee2..63ef7e1 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
@@ -1,6 +1,6 @@
! { dg-do compile }
! { dg-additional-options "-fdump-tree-original" }
-! { dg-additional-options "-fopenacc-kernels=decompose" }
+! { dg-additional-options "--param=openacc-kernels=decompose" }
! { dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" }
program test
diff --git a/gcc/testsuite/gfortran.dg/pdt_26.f03 b/gcc/testsuite/gfortran.dg/pdt_26.f03
index bf12737..59ddcfb 100644
--- a/gcc/testsuite/gfortran.dg/pdt_26.f03
+++ b/gcc/testsuite/gfortran.dg/pdt_26.f03
@@ -2,7 +2,7 @@
! { dg-options "-fdump-tree-original" }
!
! Test the fix for PR83567 in which the parameterized component 'foo' was
-! being deallocated before return from 'addw', with consequent segfault in
+! being deallocated before return from 'addw', with consequent segfault in
! the main program.
!
! Contributed by Berke Durak <berke.durak@gmail.com>
@@ -43,4 +43,4 @@ program test_pdt
if (any (c(1)%foo .ne. [13,15,17])) STOP 2
end program test_pdt
! { dg-final { scan-tree-dump-times "__builtin_free" 8 "original" } }
-! { dg-final { scan-tree-dump-times "__builtin_malloc" 9 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_malloc" 8 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/pdt_31.f03 b/gcc/testsuite/gfortran.dg/pdt_31.f03
new file mode 100644
index 0000000..708c945
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pdt_31.f03
@@ -0,0 +1,26 @@
+! { dg-do run }
+!
+! Test the fix for PR100110, in which 'obj' was not being initialized.
+!
+! Contributed by Xiao Liu <xiao.liu@compiler-dev.com>
+!
+program p
+ implicit none
+ type t(n)
+ integer, len :: n
+ integer :: arr(n, n)
+ end type
+
+ type(t(2)) :: obj
+
+ obj%arr = reshape ([1,2,3,4],[2,2])
+ if (obj%n .ne. 2) stop 1
+ if (any (shape(obj%arr) .ne. [2,2])) stop 2
+ call test()
+contains
+ subroutine test()
+ if (obj%n .ne. 2) stop 3
+ if (any (shape(obj%arr) .ne. [2,2])) stop 4
+ if (any (reshape (obj%arr, [4]) .ne. [1,2,3,4])) stop 5
+ end subroutine
+end program
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 3402aa8..cc7c8a2 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,9 @@
+2021-04-19 Richard Biener <rguenther@suse.de>
+
+ PR preprocessor/100142
+ * line-map.c (linemap_position_for_loc_and_offset): Revert
+ unintended s/column_offset/column/ change.
+
2021-04-13 Nathan Sidwell <nathan@acm.org>
PR preprocessor/99446
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index 2f5e444..a03d676 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -982,7 +982,7 @@ linemap_position_for_loc_and_offset (line_maps *set,
the next line map of the set. Otherwise, we try to encode the
location in the next map. */
for (; map != LINEMAPS_LAST_ORDINARY_MAP (set)
- && (loc + (column << map->m_range_bits)
+ && (loc + (column_offset << map->m_range_bits)
>= MAP_START_LOCATION (map + 1)); map++)
/* If the next map is a different file, or starts in a higher line, we
cannot encode the location there. */
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index b268673..7b939ad 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,13 @@
+2021-04-19 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c:
+ '-fopenacc-kernels=[...]' -> '--param=openacc-kernels=[...]'.
+ * testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c:
+ Likewise.
+ * testsuite/libgomp.oacc-fortran/pr94358-1.f90: Likewise.
+
2021-04-15 Thomas Schwinge <thomas@codesourcery.com>
PR target/99555
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c
index c7eae12..0777b61 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-fopenacc-kernels=decompose" } */
+/* { dg-additional-options "--param=openacc-kernels=decompose" } */
/* Hopefully, this is the same issue as '../../../gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c'.
{ dg-ice "TODO" }
TODO { dg-prune-output "during GIMPLE pass: omplower" }
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c
index dd8a1c1..0369ae9 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-fopenacc-kernels=decompose" } */
+/* { dg-additional-options "--param=openacc-kernels=decompose" } */
/* See also 'declare-vla-kernels-decompose-ice-1.c'. */
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c
index e76e409..dd83557 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c
@@ -1,7 +1,7 @@
/* Test OpenACC 'kernels' construct decomposition. */
/* { dg-additional-options "-fopt-info-omp-all" } */
-/* { dg-additional-options "-fopenacc-kernels=decompose" } */
+/* { dg-additional-options "--param=openacc-kernels=decompose" } */
/* It's only with Tcl 8.5 (released in 2007) that "the variable 'varName'
passed to 'incr' may be unset, and in that case, it will be set to [...]",
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr94358-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr94358-1.f90
index 99a7041..cf1d0e5 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/pr94358-1.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/pr94358-1.f90
@@ -1,6 +1,6 @@
! { dg-do run }
! { dg-additional-options "-fopt-info-omp-all" }
-! { dg-additional-options "-fopenacc-kernels=decompose" }
+! { dg-additional-options "--param=openacc-kernels=decompose" }
! It's only with Tcl 8.5 (released in 2007) that "the variable 'varName'
! passed to 'incr' may be unset, and in that case, it will be set to [...]",
diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog
index b4431a4..56f7de5 100644
--- a/libphobos/ChangeLog
+++ b/libphobos/ChangeLog
@@ -1,3 +1,69 @@
+2021-04-19 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/98494
+ * libdruntime/MERGE: Merge upstream druntime 89f870b7.
+ * src/MERGE: Merge upstream phobos e6907ff3e.
+
+2021-04-19 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/98058
+ * configure: Regenerate.
+ * libdruntime/Makefile.am (DRUNTIME_DSOURCES_DARWIN): Add
+ core/sys/darwin/config.d
+ * libdruntime/Makefile.in: Regenerate.
+ * libdruntime/config/powerpc/switchcontext.S: Implement
+ fiber_switchContext for __MACH__.
+ * libdruntime/config/x86/switchcontext.S: Likewise.
+ * libdruntime/core/sys/darwin/config.d: New file.
+ * libdruntime/core/thread/fiber.d (Fiber.getThis): Mark noinline.
+ (UnsafeFiberMigration): Define for OSX/X86 and OSX/X86_64.
+ * libdruntime/core/thread/osthread.d (callWithStackShell): Add inline
+ assembler implementation for X86, X86_64, PPC, and PPC64.
+ * libdruntime/core/thread/threadbase.d (ThreadBase.getThis): Mark
+ noinline.
+ * libdruntime/gcc/deh.d (FuncTable): Remove definition.
+ * m4/druntime/os.m4 (DRUNTIME_OS_MINFO_BRACKETING): Check for right
+ bracket symbol on darwin* targets.
+ * testsuite/libphobos.thread/fiber_guard_page.d: Update test to
+ support ucontext-based Fibers.
+
+2021-04-19 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/99794
+ * libdruntime/Makefile.am (DRUNTIME_SOURCES_CONFIGURED): Add
+ config/mingw/msvc.c on DRUNTIME_OS_MINGW.
+ * libdruntime/Makefile.in: Regenerate.
+ * libdruntime/config/mingw/msvc.c: New file.
+ * libdruntime/config/mingw/switchcontext.S (fiber_switchContext): Fix
+ function definition.
+ * libdruntime/gcc/deh.d (__gdc_personality_seh0): Fix call to
+ _GCC_specific_handler.
+ * libdruntime/gcc/gthread.d (__gthread_once_t): Fix definition.
+ * libdruntime/gcc/unwind/generic.d (_GCC_specific_handler): Fix
+ declaration.
+ * libdruntime/rt/dmain2.d (rt_loadLibrary): Remove function.
+ (rt_loadLibraryW): Remove function.
+ (initLibrary): Remove function.
+ (rt_unloadLibrary): Remove function.
+
+2021-04-19 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/99691
+ * configure: Regenerate.
+ * libdruntime/config/common/threadasm.S: Add __OpenBSD__.
+ * libdruntime/gcc/backtrace.d: Import core.sys.openbsd.dlfcn on
+ OpenBSD platforms.
+ * libdruntime/gcc/sections/elf.d (SharedElf): Define on OpenBSD.
+ (linkMapForHandle): Implement for OpenBSD.
+ (exeLinkMap): Remove.
+ (getDependencies): Adjust dlpi_addr on OpenBSD.
+ (handleForName): Implement for OpenBSD.
+ (IterateManually): Define on OpenBSD.
+ * libdruntime/gcc/sections/package.d (SectionsElf): Define on OpenBSD.
+ * m4/druntime/libraries.m4 (DRUNTIME_LIBRARIES_ATOMIC): Test for
+ enable_libatomic.
+ (DRUNTIME_LIBRARIES_BACKTRACE): Test for enable_libbacktrace.
+
2021-04-10 Iain Buclaw <ibuclaw@gdcproject.org>
* Makefile.in: Regenerate.
diff --git a/libphobos/configure b/libphobos/configure
index fe7cd9c..b1c8ecb 100755
--- a/libphobos/configure
+++ b/libphobos/configure
@@ -14422,6 +14422,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -14430,17 +14432,29 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for minfo section bracketing" >&5
$as_echo_n "checking for minfo section bracketing... " >&6; }
+ case "$druntime_cv_target_os" in
+ darwin*)
+ section="__DATA,__minfodata"
+ start="section\$start\$__DATA\$__minfodata"
+ stop="section\$end\$__DATA\$__minfodata"
+ ;;
+ *)
+ section="minfo"
+ start="__start_minfo"
+ stop="__stop_minfo"
+ ;;
+ esac
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- void* module_info_ptr __attribute__((section ("minfo")));
- extern void* __start_minfo __attribute__((visibility ("hidden")));
- extern void* __stop_minfo __attribute__((visibility ("hidden")));
+ void* module_info_ptr __attribute__((section ("$section")));
+ extern void* start_minfo __asm__("$start") __attribute__((visibility ("hidden")));
+ extern void* stop_minfo __asm__("$stop") __attribute__((visibility ("hidden")));
int main()
{
// Never run, just to prevent compiler from optimizing access
- return &__start_minfo == &__stop_minfo;
+ return (int)(&stop_minfo - &start_minfo);
}
_ACEOF
@@ -14917,7 +14931,7 @@ fi
DCFG_HAVE_LIBATOMIC=false
LIBATOMIC=
- if test "x$with_libatomic" != "xno"; then :
+ if test "x$enable_libatomic" != "xno" && test "x$with_libatomic" != "xno"; then :
DCFG_HAVE_LIBATOMIC=true
LIBATOMIC=../../libatomic/libatomic_convenience.la
@@ -14953,7 +14967,7 @@ if test "${with_libbacktrace+set}" = set; then :
fi
- if test "x$with_libbacktrace" != "xno"; then :
+ if test "x$enable_libbacktrace" != "xno" && test "x$with_libbacktrace" != "xno"; then :
LIBBACKTRACE=../../libbacktrace/libbacktrace.la
diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE
index d839a08..25cbb95 100644
--- a/libphobos/libdruntime/MERGE
+++ b/libphobos/libdruntime/MERGE
@@ -1,4 +1,4 @@
-1134b71039881464e9bf021836d82796b3a1fcfc
+89f870b76710a4cfa96f711bb5b14a7439c5c2a7
The first line of this file holds the git revision number of the last
merge done from the dlang/druntime repository.
diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am
index 02a68b1..a2e2bff 100644
--- a/libphobos/libdruntime/Makefile.am
+++ b/libphobos/libdruntime/Makefile.am
@@ -69,7 +69,8 @@ if DRUNTIME_OS_LINUX
DRUNTIME_SOURCES_CONFIGURED += $(DRUNTIME_DSOURCES_LINUX)
endif
if DRUNTIME_OS_MINGW
- DRUNTIME_SOURCES_CONFIGURED += $(DRUNTIME_DSOURCES_WINDOWS)
+ DRUNTIME_SOURCES_CONFIGURED += $(DRUNTIME_DSOURCES_WINDOWS) \
+ config/mingw/msvc.c
endif
if DRUNTIME_OS_SOLARIS
DRUNTIME_SOURCES_CONFIGURED += $(DRUNTIME_DSOURCES_SOLARIS)
@@ -205,19 +206,19 @@ DRUNTIME_DSOURCES_BIONIC = core/sys/bionic/err.d \
core/sys/bionic/fcntl.d core/sys/bionic/stdlib.d \
core/sys/bionic/string.d core/sys/bionic/unistd.d
-DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/crt_externs.d \
- core/sys/darwin/dlfcn.d core/sys/darwin/err.d \
- core/sys/darwin/execinfo.d core/sys/darwin/fcntl.d \
- core/sys/darwin/ifaddrs.d core/sys/darwin/mach/dyld.d \
- core/sys/darwin/mach/getsect.d core/sys/darwin/mach/kern_return.d \
- core/sys/darwin/mach/loader.d core/sys/darwin/mach/nlist.d \
- core/sys/darwin/mach/port.d core/sys/darwin/mach/semaphore.d \
- core/sys/darwin/mach/stab.d core/sys/darwin/mach/thread_act.d \
- core/sys/darwin/netinet/in_.d core/sys/darwin/pthread.d \
- core/sys/darwin/stdlib.d core/sys/darwin/string.d \
- core/sys/darwin/sys/attr.d core/sys/darwin/sys/cdefs.d \
- core/sys/darwin/sys/event.d core/sys/darwin/sys/mman.d \
- core/sys/darwin/sys/sysctl.d
+DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/config.d \
+ core/sys/darwin/crt_externs.d core/sys/darwin/dlfcn.d \
+ core/sys/darwin/err.d core/sys/darwin/execinfo.d \
+ core/sys/darwin/fcntl.d core/sys/darwin/ifaddrs.d \
+ core/sys/darwin/mach/dyld.d core/sys/darwin/mach/getsect.d \
+ core/sys/darwin/mach/kern_return.d core/sys/darwin/mach/loader.d \
+ core/sys/darwin/mach/nlist.d core/sys/darwin/mach/port.d \
+ core/sys/darwin/mach/semaphore.d core/sys/darwin/mach/stab.d \
+ core/sys/darwin/mach/thread_act.d core/sys/darwin/netinet/in_.d \
+ core/sys/darwin/pthread.d core/sys/darwin/stdlib.d \
+ core/sys/darwin/string.d core/sys/darwin/sys/attr.d \
+ core/sys/darwin/sys/cdefs.d core/sys/darwin/sys/event.d \
+ core/sys/darwin/sys/mman.d core/sys/darwin/sys/sysctl.d
DRUNTIME_DSOURCES_DRAGONFLYBSD = core/sys/dragonflybsd/dlfcn.d \
core/sys/dragonflybsd/err.d core/sys/dragonflybsd/execinfo.d \
diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in
index 853a7fc..cb2e372 100644
--- a/libphobos/libdruntime/Makefile.in
+++ b/libphobos/libdruntime/Makefile.in
@@ -117,7 +117,9 @@ target_triplet = @target@
@DRUNTIME_OS_NETBSD_TRUE@am__append_6 = $(DRUNTIME_DSOURCES_NETBSD)
@DRUNTIME_OS_OPENBSD_TRUE@am__append_7 = $(DRUNTIME_DSOURCES_OPENBSD)
@DRUNTIME_OS_LINUX_TRUE@am__append_8 = $(DRUNTIME_DSOURCES_LINUX)
-@DRUNTIME_OS_MINGW_TRUE@am__append_9 = $(DRUNTIME_DSOURCES_WINDOWS)
+@DRUNTIME_OS_MINGW_TRUE@am__append_9 = $(DRUNTIME_DSOURCES_WINDOWS) \
+@DRUNTIME_OS_MINGW_TRUE@ config/mingw/msvc.c
+
@DRUNTIME_OS_SOLARIS_TRUE@am__append_10 = $(DRUNTIME_DSOURCES_SOLARIS)
# CPU specific sources
@DRUNTIME_CPU_AARCH64_TRUE@am__append_11 = config/aarch64/switchcontext.S
@@ -254,11 +256,11 @@ am__objects_3 = core/sys/posix/aio.lo core/sys/posix/arpa/inet.lo \
core/sys/posix/time.lo core/sys/posix/ucontext.lo \
core/sys/posix/unistd.lo core/sys/posix/utime.lo
@DRUNTIME_OS_POSIX_TRUE@am__objects_4 = $(am__objects_3)
-am__objects_5 = core/sys/darwin/crt_externs.lo \
- core/sys/darwin/dlfcn.lo core/sys/darwin/err.lo \
- core/sys/darwin/execinfo.lo core/sys/darwin/fcntl.lo \
- core/sys/darwin/ifaddrs.lo core/sys/darwin/mach/dyld.lo \
- core/sys/darwin/mach/getsect.lo \
+am__objects_5 = core/sys/darwin/config.lo \
+ core/sys/darwin/crt_externs.lo core/sys/darwin/dlfcn.lo \
+ core/sys/darwin/err.lo core/sys/darwin/execinfo.lo \
+ core/sys/darwin/fcntl.lo core/sys/darwin/ifaddrs.lo \
+ core/sys/darwin/mach/dyld.lo core/sys/darwin/mach/getsect.lo \
core/sys/darwin/mach/kern_return.lo \
core/sys/darwin/mach/loader.lo core/sys/darwin/mach/nlist.lo \
core/sys/darwin/mach/port.lo core/sys/darwin/mach/semaphore.lo \
@@ -428,7 +430,8 @@ am__objects_19 = core/sys/windows/accctrl.lo \
core/sys/windows/winsvc.lo core/sys/windows/winuser.lo \
core/sys/windows/winver.lo core/sys/windows/wtsapi32.lo \
core/sys/windows/wtypes.lo
-@DRUNTIME_OS_MINGW_TRUE@am__objects_20 = $(am__objects_19)
+@DRUNTIME_OS_MINGW_TRUE@am__objects_20 = $(am__objects_19) \
+@DRUNTIME_OS_MINGW_TRUE@ config/mingw/libgdruntime_la-msvc.lo
am__objects_21 = core/sys/solaris/dlfcn.lo core/sys/solaris/elf.lo \
core/sys/solaris/err.lo core/sys/solaris/execinfo.lo \
core/sys/solaris/libelf.lo core/sys/solaris/link.lo \
@@ -463,24 +466,26 @@ am_libgdruntime_la_OBJECTS = $(am__objects_33)
libgdruntime_la_OBJECTS = $(am_libgdruntime_la_OBJECTS)
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__objects_34 = core/stdc/libgdruntime_convenience_la-errno_.lo
-@DRUNTIME_CPU_AARCH64_TRUE@am__objects_35 = config/aarch64/libgdruntime_convenience_la-switchcontext.lo
-@DRUNTIME_CPU_ARM_TRUE@am__objects_36 = config/arm/libgdruntime_convenience_la-switchcontext.lo
-@DRUNTIME_CPU_MIPS_TRUE@am__objects_37 = config/mips/libgdruntime_convenience_la-switchcontext.lo
-@DRUNTIME_CPU_POWERPC_TRUE@am__objects_38 = config/powerpc/libgdruntime_convenience_la-switchcontext.lo
-@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_39 = config/mingw/libgdruntime_convenience_la-switchcontext.lo
-@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_40 = config/x86/libgdruntime_convenience_la-switchcontext.lo
-@DRUNTIME_CPU_SYSTEMZ_TRUE@am__objects_41 = config/systemz/libgdruntime_convenience_la-get_tls_offset.lo
-@DRUNTIME_CPU_S390_TRUE@am__objects_42 = config/s390/libgdruntime_convenience_la-get_tls_offset.lo
-am__objects_43 = $(am__objects_4) $(am__objects_6) $(am__objects_8) \
+@DRUNTIME_OS_MINGW_TRUE@am__objects_35 = $(am__objects_19) \
+@DRUNTIME_OS_MINGW_TRUE@ config/mingw/libgdruntime_convenience_la-msvc.lo
+@DRUNTIME_CPU_AARCH64_TRUE@am__objects_36 = config/aarch64/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_ARM_TRUE@am__objects_37 = config/arm/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_MIPS_TRUE@am__objects_38 = config/mips/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_POWERPC_TRUE@am__objects_39 = config/powerpc/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_40 = config/mingw/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_41 = config/x86/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_SYSTEMZ_TRUE@am__objects_42 = config/systemz/libgdruntime_convenience_la-get_tls_offset.lo
+@DRUNTIME_CPU_S390_TRUE@am__objects_43 = config/s390/libgdruntime_convenience_la-get_tls_offset.lo
+am__objects_44 = $(am__objects_4) $(am__objects_6) $(am__objects_8) \
$(am__objects_10) $(am__objects_12) $(am__objects_14) \
- $(am__objects_16) $(am__objects_18) $(am__objects_20) \
- $(am__objects_22) $(am__objects_35) $(am__objects_36) \
- $(am__objects_37) $(am__objects_38) $(am__objects_39) \
- $(am__objects_40) $(am__objects_41) $(am__objects_42)
-am__objects_44 = $(am__objects_1) $(am__objects_34) $(am__objects_43) \
+ $(am__objects_16) $(am__objects_18) $(am__objects_35) \
+ $(am__objects_22) $(am__objects_36) $(am__objects_37) \
+ $(am__objects_38) $(am__objects_39) $(am__objects_40) \
+ $(am__objects_41) $(am__objects_42) $(am__objects_43)
+am__objects_45 = $(am__objects_1) $(am__objects_34) $(am__objects_44) \
$(am__objects_32)
-am__objects_45 = $(am__objects_44)
-am_libgdruntime_convenience_la_OBJECTS = $(am__objects_45)
+am__objects_46 = $(am__objects_45)
+am_libgdruntime_convenience_la_OBJECTS = $(am__objects_46)
libgdruntime_convenience_la_OBJECTS = \
$(am_libgdruntime_convenience_la_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
@@ -838,19 +843,19 @@ DRUNTIME_DSOURCES_BIONIC = core/sys/bionic/err.d \
core/sys/bionic/fcntl.d core/sys/bionic/stdlib.d \
core/sys/bionic/string.d core/sys/bionic/unistd.d
-DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/crt_externs.d \
- core/sys/darwin/dlfcn.d core/sys/darwin/err.d \
- core/sys/darwin/execinfo.d core/sys/darwin/fcntl.d \
- core/sys/darwin/ifaddrs.d core/sys/darwin/mach/dyld.d \
- core/sys/darwin/mach/getsect.d core/sys/darwin/mach/kern_return.d \
- core/sys/darwin/mach/loader.d core/sys/darwin/mach/nlist.d \
- core/sys/darwin/mach/port.d core/sys/darwin/mach/semaphore.d \
- core/sys/darwin/mach/stab.d core/sys/darwin/mach/thread_act.d \
- core/sys/darwin/netinet/in_.d core/sys/darwin/pthread.d \
- core/sys/darwin/stdlib.d core/sys/darwin/string.d \
- core/sys/darwin/sys/attr.d core/sys/darwin/sys/cdefs.d \
- core/sys/darwin/sys/event.d core/sys/darwin/sys/mman.d \
- core/sys/darwin/sys/sysctl.d
+DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/config.d \
+ core/sys/darwin/crt_externs.d core/sys/darwin/dlfcn.d \
+ core/sys/darwin/err.d core/sys/darwin/execinfo.d \
+ core/sys/darwin/fcntl.d core/sys/darwin/ifaddrs.d \
+ core/sys/darwin/mach/dyld.d core/sys/darwin/mach/getsect.d \
+ core/sys/darwin/mach/kern_return.d core/sys/darwin/mach/loader.d \
+ core/sys/darwin/mach/nlist.d core/sys/darwin/mach/port.d \
+ core/sys/darwin/mach/semaphore.d core/sys/darwin/mach/stab.d \
+ core/sys/darwin/mach/thread_act.d core/sys/darwin/netinet/in_.d \
+ core/sys/darwin/pthread.d core/sys/darwin/stdlib.d \
+ core/sys/darwin/string.d core/sys/darwin/sys/attr.d \
+ core/sys/darwin/sys/cdefs.d core/sys/darwin/sys/event.d \
+ core/sys/darwin/sys/mman.d core/sys/darwin/sys/sysctl.d
DRUNTIME_DSOURCES_DRAGONFLYBSD = core/sys/dragonflybsd/dlfcn.d \
core/sys/dragonflybsd/err.d core/sys/dragonflybsd/execinfo.d \
@@ -1347,6 +1352,7 @@ core/sys/posix/utime.lo: core/sys/posix/$(am__dirstamp)
core/sys/darwin/$(am__dirstamp):
@$(MKDIR_P) core/sys/darwin
@: > core/sys/darwin/$(am__dirstamp)
+core/sys/darwin/config.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/crt_externs.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/dlfcn.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/err.lo: core/sys/darwin/$(am__dirstamp)
@@ -1732,6 +1738,10 @@ core/sys/windows/winuser.lo: core/sys/windows/$(am__dirstamp)
core/sys/windows/winver.lo: core/sys/windows/$(am__dirstamp)
core/sys/windows/wtsapi32.lo: core/sys/windows/$(am__dirstamp)
core/sys/windows/wtypes.lo: core/sys/windows/$(am__dirstamp)
+config/mingw/$(am__dirstamp):
+ @$(MKDIR_P) config/mingw
+ @: > config/mingw/$(am__dirstamp)
+config/mingw/libgdruntime_la-msvc.lo: config/mingw/$(am__dirstamp)
core/sys/solaris/$(am__dirstamp):
@$(MKDIR_P) core/sys/solaris
@: > core/sys/solaris/$(am__dirstamp)
@@ -1781,9 +1791,6 @@ config/powerpc/$(am__dirstamp):
@: > config/powerpc/$(am__dirstamp)
config/powerpc/libgdruntime_la-switchcontext.lo: \
config/powerpc/$(am__dirstamp)
-config/mingw/$(am__dirstamp):
- @$(MKDIR_P) config/mingw
- @: > config/mingw/$(am__dirstamp)
config/mingw/libgdruntime_la-switchcontext.lo: \
config/mingw/$(am__dirstamp)
config/x86/$(am__dirstamp):
@@ -1808,6 +1815,8 @@ libgdruntime.la: $(libgdruntime_la_OBJECTS) $(libgdruntime_la_DEPENDENCIES) $(EX
$(AM_V_GEN)$(libgdruntime_la_LINK) -rpath $(toolexeclibdir) $(libgdruntime_la_OBJECTS) $(libgdruntime_la_LIBADD) $(LIBS)
core/stdc/libgdruntime_convenience_la-errno_.lo: \
core/stdc/$(am__dirstamp)
+config/mingw/libgdruntime_convenience_la-msvc.lo: \
+ config/mingw/$(am__dirstamp)
config/aarch64/libgdruntime_convenience_la-switchcontext.lo: \
config/aarch64/$(am__dirstamp)
config/arm/libgdruntime_convenience_la-switchcontext.lo: \
@@ -2003,9 +2012,15 @@ config/s390/libgdruntime_convenience_la-get_tls_offset.lo: config/s390/get_tls_o
core/stdc/libgdruntime_la-errno_.lo: core/stdc/errno_.c
$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o core/stdc/libgdruntime_la-errno_.lo `test -f 'core/stdc/errno_.c' || echo '$(srcdir)/'`core/stdc/errno_.c
+config/mingw/libgdruntime_la-msvc.lo: config/mingw/msvc.c
+ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o config/mingw/libgdruntime_la-msvc.lo `test -f 'config/mingw/msvc.c' || echo '$(srcdir)/'`config/mingw/msvc.c
+
core/stdc/libgdruntime_convenience_la-errno_.lo: core/stdc/errno_.c
$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o core/stdc/libgdruntime_convenience_la-errno_.lo `test -f 'core/stdc/errno_.c' || echo '$(srcdir)/'`core/stdc/errno_.c
+config/mingw/libgdruntime_convenience_la-msvc.lo: config/mingw/msvc.c
+ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o config/mingw/libgdruntime_convenience_la-msvc.lo `test -f 'config/mingw/msvc.c' || echo '$(srcdir)/'`config/mingw/msvc.c
+
mostlyclean-libtool:
-rm -f *.lo
diff --git a/libphobos/libdruntime/config/common/threadasm.S b/libphobos/libdruntime/config/common/threadasm.S
index 1e9bc76..3546217 100644
--- a/libphobos/libdruntime/config/common/threadasm.S
+++ b/libphobos/libdruntime/config/common/threadasm.S
@@ -22,7 +22,7 @@ a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
-#if (__linux__ || __FreeBSD__ || __NetBSD__ || __DragonFly__) && __ELF__
+#if (__linux__ || __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__) && __ELF__
/*
* Mark the resulting object file as not requiring execution permissions on
* stack memory. The absence of this section would mark the whole resulting
diff --git a/libphobos/libdruntime/config/mingw/msvc.c b/libphobos/libdruntime/config/mingw/msvc.c
new file mode 100644
index 0000000..da40718
--- /dev/null
+++ b/libphobos/libdruntime/config/mingw/msvc.c
@@ -0,0 +1,169 @@
+/* Windows support code to wrap differences between different
+ versions of the Microsoft C libaries.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef __MINGW32__
+#include <_mingw.h>
+#endif
+#include <stdio.h>
+
+/* The D runtime library defines stdin, stdout, and stderr as extern(C) symbols
+ in the core.stdc.stdio module, and require initializing at start-up. */
+__attribute__((weakref ("stdin")))
+static FILE *core_stdc_stdin;
+
+__attribute__((weakref ("stdout")))
+static FILE *core_stdc_stdout;
+
+__attribute__((weakref ("stderr")))
+static FILE *core_stdc_stderr;
+
+/* Set to 1 if runtime is using libucrt.dll. */
+unsigned char msvcUsesUCRT;
+
+void
+init_msvc (void)
+{
+ core_stdc_stdin = stdin;
+ core_stdc_stdout = stdout;
+ core_stdc_stderr = stderr;
+
+#if __MSVCRT_VERSION__ >= 0xE00
+ msvcUsedUCRT = 1;
+#endif
+}
+
+/* Phobos std.stdio module assumes these functions are present at link time,
+ and not absent or macros. */
+#ifdef _fgetc_nolock
+#undef _fgetc_nolock
+
+int
+_fgetc_nolock (FILE *fp)
+{
+ fp->_cnt--;
+ if (fp->_cnt >= 0)
+ {
+ const int c = *fp->_ptr;
+ fp->_ptr++;
+ return c & 0xff;
+ }
+ else
+ return _filbuf (fp);
+}
+
+#endif /* _fgetc_nolock */
+
+#ifdef _fputc_nolock
+#undef _fputc_nolock
+
+int
+_fputc_nolock (int c, FILE *fp)
+{
+ fp->_cnt--;
+ if (fp->_cnt >= 0)
+ {
+ *fp->_ptr = (char) c;
+ fp->_ptr++;
+ return c & 0xff;
+ }
+ else
+ return _flsbuf (c, fp);
+}
+
+#endif /* _fputc_nolock */
+
+#ifdef rewind
+#undef rewind
+
+void
+rewind (FILE *fp)
+{
+ fseek (fp, 0, SEEK_SET);
+ fp->_flag &= ~_IOERR;
+}
+
+#endif /* rewind */
+
+#ifdef clearerr
+#undef clearerr
+
+void
+clearerr (FILE *fp)
+{
+ fp->_flag &= ~(_IOERR | _IOEOF);
+}
+
+#endif /* clearerr */
+
+#ifdef feof
+#undef feof
+
+int
+feof (FILE *fp)
+{
+ return fp->_flag & _IOEOF;
+}
+
+#endif /* feof */
+
+#ifdef ferror
+#undef ferror
+
+int
+ferror (FILE *fp)
+{
+ return fp->_flag & _IOERR;
+}
+
+#endif /* ferror */
+
+#ifdef fileno
+#undef fileno
+
+int
+fileno (FILE *fp)
+{
+ return fp->_file;
+}
+
+#endif /* fileno */
+
+/* Phobos std.stdio module has a dependency on the UCRT library, so provide
+ stubs that forward to the nearest equivalent. */
+#if __MSVCRT_VERSION__ < 0x800
+
+wint_t
+_fgetwc_nolock (FILE *fp)
+{
+ return fgetwc (fp);
+}
+
+wint_t
+_fputwc_nolock (wchar_t c, FILE *fp)
+{
+ return fputwc(c, fp);
+}
+
+#endif /* __MSVCRT_VERSION__ < 0x800*/
diff --git a/libphobos/libdruntime/config/mingw/switchcontext.S b/libphobos/libdruntime/config/mingw/switchcontext.S
index 6592ff6..0cb8b01 100644
--- a/libphobos/libdruntime/config/mingw/switchcontext.S
+++ b/libphobos/libdruntime/config/mingw/switchcontext.S
@@ -28,7 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
.text
.globl CSYM(fiber_switchContext)
- .type CSYM(fiber_switchContext), @function
+ .def CSYM(fiber_switchContext)
+ .scl 2
+ .type 32
+ .endef
.align 16
CSYM(fiber_switchContext):
.cfi_startproc
@@ -63,13 +66,15 @@ CSYM(fiber_switchContext):
popq %RCX;
jmp *%RCX;
.cfi_endproc
- .size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
#elif defined(_X86_)
.text
.globl CSYM(fiber_switchContext)
- .type CSYM(fiber_switchContext), @function
+ .def CSYM(fiber_switchContext)
+ .scl 2
+ .type 32
+ .endef
.align 16
CSYM(fiber_switchContext):
.cfi_startproc
@@ -104,6 +109,5 @@ CSYM(fiber_switchContext):
// 'return' to complete switch
ret;
.cfi_endproc
- .size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
#endif
diff --git a/libphobos/libdruntime/config/powerpc/switchcontext.S b/libphobos/libdruntime/config/powerpc/switchcontext.S
index d4ea577..74395b0 100644
--- a/libphobos/libdruntime/config/powerpc/switchcontext.S
+++ b/libphobos/libdruntime/config/powerpc/switchcontext.S
@@ -24,7 +24,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "../common/threadasm.S"
-#if !defined(__PPC64__)
+#if !defined(__PPC64__) && !defined(__MACH__)
/**
* Performs a context switch.
@@ -151,4 +151,278 @@ CSYM(fiber_switchContext):
.cfi_endproc
.size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
-#endif /* !defined(__PPC64__) */
+#elif defined(__MACH__)
+
+/* Implementation for Darwin/macOS preserving callee-saved regs.
+
+ FIXME : There is no unwind frame.
+ FIXME : not sure if we should save the vsave reg (perhaps using the slot we have
+ r11 in at present). */
+
+/* Darwin has a red zone (220 bytes for PPC 288 for PPC64) which we can write
+ to before the stack is updated without worrying about it being clobbered by
+ signals or hardware interrupts.
+
+ The stack will be 16byte aligned on entry with:
+ PPC PPC64
+ SP-> +---------------------------------------+
+ | back chain to caller | 0 0
+ +---------------------------------------+
+ | slot to save CR | 4 8
+ +---------------------------------------+
+ | slot to save LR | 8 16
+ +---------------------------------------+
+ | etc.. etc.. as per C calling conv. | */
+
+# if __PPC64__
+# define LD ld
+# define ST std
+# define STU stdu
+# define SZ 8
+# define MACHINE ppc64
+# define RED_ZONE 288
+# else
+# define LD lwz
+# define ST stw
+# define STU stwu
+# define SZ 4
+# define MACHINE ppc7400
+# define RED_ZONE 220
+# endif
+
+# define SAVE_VECTORS 0
+/**
+ * Performs a context switch.
+ *
+ * r3 - old context pointer
+ * r4 - new context pointer
+ *
+ */
+ .machine MACHINE
+ .text
+ .globl CSYM(fiber_switchContext)
+ .align 2
+CSYM(fiber_switchContext):
+LFB0:
+ /* Get the link reg. */
+ mflr r0
+ /* Get the callee-saved crs (well all of them, actually). */
+ mfcr r12
+
+ /* Save GPRs, we save the static chain here too although it is not clear if we need to. */
+ ST r31, ( -1 * SZ)(r1)
+ ST r30, ( -2 * SZ)(r1)
+ ST r29, ( -3 * SZ)(r1)
+ ST r28, ( -4 * SZ)(r1)
+ ST r27, ( -5 * SZ)(r1)
+ ST r26, ( -6 * SZ)(r1)
+ ST r25, ( -7 * SZ)(r1)
+ ST r24, ( -8 * SZ)(r1)
+ ST r23, ( -9 * SZ)(r1)
+ ST r22, (-10 * SZ)(r1)
+ ST r21, (-11 * SZ)(r1)
+ ST r20, (-12 * SZ)(r1)
+ ST r19, (-13 * SZ)(r1)
+ ST r18, (-14 * SZ)(r1)
+ ST r17, (-15 * SZ)(r1)
+ ST r16, (-16 * SZ)(r1)
+ ST r15, (-17 * SZ)(r1)
+ ST r14, (-18 * SZ)(r1)
+ ST r13, (-19 * SZ)(r1)
+
+ /* Save the lr and cr into the normal function linkage area. */
+ ST r0, 2*SZ(r1)
+ ST r12, SZ(r1)
+
+ /* We update the stack pointer here, since we do not want the GC to
+ scan the floating point registers. We are still 16-byte aligned. */
+ STU r11, (-20 * SZ)(r1)
+
+ /* Update the stack pointer in the old context as per comment above. */
+ ST r1, 0(r3)
+
+ /* Save FPRs - same for PPC and PPC64 */
+ stfd f14, (-18 * 8)(r1)
+ stfd f15, (-17 * 8)(r1)
+ stfd f16, (-16 * 8)(r1)
+ stfd f17, (-15 * 8)(r1)
+ stfd f18, (-14 * 8)(r1)
+ stfd f19, (-13 * 8)(r1)
+ stfd f20, (-12 * 8)(r1)
+ stfd f21, (-11 * 8)(r1)
+ stfd f22, (-10 * 8)(r1)
+ stfd f23, ( -9 * 8)(r1)
+ stfd f24, ( -8 * 8)(r1)
+ stfd f25, ( -7 * 8)(r1)
+ stfd f26, ( -6 * 8)(r1)
+ stfd f27, ( -5 * 8)(r1)
+ stfd f28, ( -4 * 8)(r1)
+ stfd f29, ( -3 * 8)(r1)
+ stfd f30, ( -2 * 8)(r1)
+ stfd f31, ( -1 * 8)(r1)
+
+#if SAVE_VECTORS
+ /* We are still 16byte aligned - so we are ok for vector saves.
+ but the combined size of the vectors (12 x 16) + the FPRs (144) exceeds the
+ red zone size so we need to adjust the stack again - note this means careful
+ ordering is needed on the restore. */
+
+ addi r1, r1, -(12*16+18*8)
+ li r11, 0
+ stvx v20,r11,r1
+ addi r11, r11, 16
+ stvx v21,r11,r1
+ addi r11, r11, 16
+ stvx v22,r11,r1
+ addi r11, r11, 16
+ stvx v23,r11,r1
+ addi r11, r11, 16
+ stvx v24,r11,r1
+ addi r11, r11, 16
+ stvx v25,r11,r1
+ addi r11, r11, 16
+ stvx v26,r11,r1
+ addi r11, r11, 16
+ stvx v27,r11,r1
+ addi r11, r11, 16
+ stvx v28,r11,r1
+ addi r11, r11, 16
+ stvx v29,r11,r1
+ addi r11, r11, 16
+ stvx v30,r11,r1
+ addi r11, r11, 16
+ stvx v31,r11,r1
+
+ /* Now do the same thing in reverse - starting with r4 pointing to
+ the block of GPRs - stage 1 point to the saved vectors and fprs. */
+
+ addi r1, r4, -(12*16+18*8)
+ li r11, 0
+ lvx v20,r11,r1
+ addi r11, r11, 16
+ lvx v21,r11,r1
+ addi r11, r11, 16
+ lvx v22,r11,r1
+ addi r11, r11, 16
+ lvx v23,r11,r1
+ addi r11, r11, 16
+ lvx v24,r11,r1
+ addi r11, r11, 16
+ lvx v25,r11,r1
+ addi r11, r11, 16
+ lvx v26,r11,r1
+ addi r11, r11, 16
+ lvx v27,r11,r1
+ addi r11, r11, 16
+ lvx v28,r11,r1
+ addi r11, r11, 16
+ lvx v29,r11,r1
+ addi r11, r11, 16
+ lvx v30,r11,r1
+ addi r11, r11, 16
+ lvx v31,r11,r1
+#endif
+
+ /* Now it is safe to update the stack pointer since the combined
+ size of the GPRs and FPRs will not exceed the red zone. */
+
+ addi r1, r4, 20 * SZ
+
+ /* Restore FPRs */
+ lfd f14, (-18 * 8)(r4)
+ lfd f15, (-17 * 8)(r4)
+ lfd f16, (-16 * 8)(r4)
+ lfd f17, (-15 * 8)(r4)
+ lfd f18, (-14 * 8)(r4)
+ lfd f19, (-13 * 8)(r4)
+ lfd f20, (-12 * 8)(r4)
+ lfd f21, (-11 * 8)(r4)
+ lfd f22, (-10 * 8)(r4)
+ lfd f23, ( -9 * 8)(r4)
+ lfd f24, ( -8 * 8)(r4)
+ lfd f25, ( -7 * 8)(r4)
+ lfd f26, ( -6 * 8)(r4)
+ lfd f27, ( -5 * 8)(r4)
+ lfd f28, ( -4 * 8)(r4)
+ lfd f29, ( -3 * 8)(r4)
+ lfd f30, ( -2 * 8)(r4)
+ lfd f31, ( -1 * 8)(r4)
+
+ /* Pick up lr and cr */
+ LD r0, 2*SZ(r1)
+ LD r12, SZ(r1)
+
+ /* Restore GPRs */
+ LD r11, (-20 * SZ)(r1)
+ LD r13, (-19 * SZ)(r1)
+ LD r14, (-18 * SZ)(r1)
+ LD r15, (-17 * SZ)(r1)
+ LD r16, (-16 * SZ)(r1)
+ LD r17, (-15 * SZ)(r1)
+ LD r18, (-14 * SZ)(r1)
+ LD r19, (-13 * SZ)(r1)
+ LD r20, (-12 * SZ)(r1)
+ LD r21, (-11 * SZ)(r1)
+ LD r22, (-10 * SZ)(r1)
+ LD r23, ( -9 * SZ)(r1)
+ LD r24, ( -8 * SZ)(r1)
+ LD r25, ( -7 * SZ)(r1)
+ LD r26, ( -6 * SZ)(r1)
+ LD r27, ( -5 * SZ)(r1)
+ LD r28, ( -4 * SZ)(r1)
+ LD r29, ( -3 * SZ)(r1)
+ LD r30, ( -2 * SZ)(r1)
+ LD r31, ( -1 * SZ)(r1)
+
+ /* Set cr and lr */
+ mtcr r12
+ mtlr r0
+
+ /* Return and switch context */
+ blr
+LFE0:
+
+/* Minimal CFI / FDE which does not describe the stacking of the GPRs - but only that
+ the routine has been entered/exited. */
+
+# if __PPC64__
+# define DATA_ALIGN 0x78
+# define ALIGN_SIZE 3
+# define ADDRD .quad
+# else
+# define DATA_ALIGN 0x7c
+# define ALIGN_SIZE 3
+# define ADDRD .long
+# endif
+
+ .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
+EH_frame1:
+ .set L$set$0,LECIE1-LSCIE1
+ .long L$set$0 ; Length of Common Information Entry
+LSCIE1:
+ .long 0 ; CIE Identifier Tag
+ .byte 0x3 ; CIE Version
+ .ascii "zR\0" ; CIE Augmentation
+ .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor
+ .byte DATA_ALIGN ; sleb128 -4/-8; CIE Data Alignment Factor
+ .byte 0x41 ; uleb128 0x41; CIE RA Column
+ .byte 0x1 ; uleb128 0x1; Augmentation size
+ .byte 0x10 ; FDE Encoding (pcrel)
+ .byte 0xc ; DW_CFA_def_cfa
+ .byte 0x1 ; uleb128 0x1
+ .byte 0 ; uleb128 0
+ .p2align ALIGN_SIZE,0
+LECIE1:
+LSFDE1:
+ .set L$set$1,LEFDE1-LASFDE1
+ .long L$set$1 ; FDE Length
+LASFDE1:
+ .long LASFDE1-EH_frame1 ; FDE CIE offset
+ ADDRD LFB0-. ; FDE initial location
+ .set L$set$2,LFE0-LFB0
+ ADDRD L$set$2 ; FDE address range
+ .byte 0 ; uleb128 0; Augmentation size
+ .p2align ALIGN_SIZE,0
+LEFDE1:
+
+#endif /* defined(__MACH__) */
diff --git a/libphobos/libdruntime/config/x86/switchcontext.S b/libphobos/libdruntime/config/x86/switchcontext.S
index 82420c6..9f4befd 100644
--- a/libphobos/libdruntime/config/x86/switchcontext.S
+++ b/libphobos/libdruntime/config/x86/switchcontext.S
@@ -29,7 +29,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
# include <cet.h>
#endif
-#if defined(__i386__) && !defined(__CET__)
+#if !defined(__CET__)
+
+# if defined(__ELF__)
+
+# if defined(__i386__)
.text
.globl CSYM(fiber_switchContext)
@@ -63,7 +67,9 @@ CSYM(fiber_switchContext):
.cfi_endproc
.size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
-#elif defined(__x86_64__) && !defined(__ILP32__) && !defined(__CET__)
+# endif /* defined(__ELF__) && defined(__i386__) */
+
+# if defined(__x86_64__) && !defined(__ILP32__)
.text
.globl CSYM(fiber_switchContext)
@@ -98,4 +104,151 @@ CSYM(fiber_switchContext):
.cfi_endproc
.size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
-#endif
+# endif /* defined(__ELF__) && defined(__x86_64__) && !defined(__ILP32__) */
+
+# endif /* defined(__ELF__) */
+
+# if defined(__MACH__)
+
+# if defined(__i386__)
+
+ .text
+ .globl CSYM(fiber_switchContext)
+ .p2align 4
+CSYM(fiber_switchContext):
+LFB0:
+ // save current stack state
+ push %ebp
+ mov %esp, %ebp
+ push %edi
+ push %esi
+ push %ebx
+ push %eax
+
+ // store oldp again with more accurate address
+ mov 8(%ebp), %eax
+ mov %esp, (%eax)
+ // load newp to begin context switch
+ mov 12(%ebp), %esp
+
+ // load saved state from new stack
+ pop %eax
+ pop %ebx
+ pop %esi
+ pop %edi
+ pop %ebp
+
+ // 'return' to complete switch
+ ret
+LFE0:
+
+/* CFI */
+ .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
+EH_frame1:
+ .set L$set$0,LECIE1-LSCIE1
+ .long L$set$0 # Length of Common Information Entry
+LSCIE1:
+ .long 0 # CIE Identifier Tag
+ .byte 0x1 # CIE Version
+ .ascii "zR\0" # CIE Augmentation
+ .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor
+ .byte 0x7c # sleb128 -4; CIE Data Alignment Factor
+ .byte 0x8 # CIE RA Column
+ .byte 0x1 # uleb128 0x1; Augmentation size
+ .byte 0x10 # FDE Encoding (pcrel)
+ .byte 0xc # DW_CFA_def_cfa
+ .byte 0x5 # uleb128 0x5
+ .byte 0x4 # uleb128 0x4
+ .byte 0x88 # DW_CFA_offset, column 0x8
+ .byte 0x1 # uleb128 0x1
+ .p2align 2,0
+LECIE1:
+
+/* minimal FDE - does not record the stack frame changes. */
+LSFDE1:
+ .set L$set$1,LEFDE1-LASFDE1
+ .long L$set$1 # FDE Length
+LASFDE1:
+ .long LASFDE1-EH_frame1 # FDE CIE offset
+ .long LFB0-. # FDE initial location
+ .set L$set$2,LFE0-LFB0
+ .long L$set$2 # FDE address range
+ .byte 0 # uleb128 0; Augmentation size
+ .p2align 2,0
+LEFDE1:
+
+# endif /* defined(__MACH__) && defined(__i386__) */
+
+# if defined(__x86_64__) && !defined(__ILP32__)
+
+ .text
+ .globl CSYM(fiber_switchContext)
+ .p2align 4
+CSYM(fiber_switchContext):
+LFB0:
+ // Save current stack state.save current stack state
+ push %rbp
+ mov %rsp, %rbp
+ push %r15
+ push %r14
+ push %r13
+ push %r12
+ push %rbx
+
+ // store oldp again with more accurate address
+ mov %rsp, (%rdi)
+ // load newp to begin context switch
+ mov %rsi, %rsp
+
+ // load saved state from new stack
+ pop %rbx
+ pop %r12
+ pop %r13
+ pop %r14
+ pop %r15
+ pop %rbp
+
+ // 'return' to complete switch
+ ret
+LFE0:
+
+/* CFI */
+ .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
+EH_frame1:
+ .set L$set$0,LECIE1-LSCIE1
+ .long L$set$0 # Length of Common Information Entry
+LSCIE1:
+ .long 0 # CIE Identifier Tag
+ .byte 0x1 # CIE Version
+ .ascii "zR\0" # CIE Augmentation
+ .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor
+ .byte 0x78 # sleb128 -8; CIE Data Alignment Factor
+ .byte 0x10 # CIE RA Column
+ .byte 0x1 # uleb128 0x1; Augmentation size
+ .byte 0x10 # FDE Encoding (pcrel)
+ .byte 0xc # DW_CFA_def_cfa
+ .byte 0x7 # uleb128 0x7
+ .byte 0x8 # uleb128 0x8
+ .byte 0x90 # DW_CFA_offset, column 0x10
+ .byte 0x1 # uleb128 0x1
+ .p2align 3,0
+LECIE1:
+
+/* minimal FDE - does not record the stack frame changes. */
+LSFDE1:
+ .set L$set$1,LEFDE1-LASFDE1
+ .long L$set$1 # FDE Length
+LASFDE1:
+ .long LASFDE1-EH_frame1 # FDE CIE offset
+ .quad LFB0-. # FDE initial location
+ .set L$set$2,LFE0-LFB0
+ .quad L$set$2 # FDE address range
+ .byte 0 # uleb128 0; Augmentation size
+ .p2align 3,0
+LEFDE1:
+
+# endif /* defined(__MACH__) && defined(__x86_64__) && !defined(__ILP32__) */
+
+# endif /* defined (__MACH__) */
+
+#endif /* !defined(__CET__) */
diff --git a/libphobos/libdruntime/core/stdc/config.d b/libphobos/libdruntime/core/stdc/config.d
index 802f5b6..44bb707 100644
--- a/libphobos/libdruntime/core/stdc/config.d
+++ b/libphobos/libdruntime/core/stdc/config.d
@@ -186,7 +186,18 @@ else version (Posix)
}
}
-version (CRuntime_Microsoft)
+version (GNU)
+ alias c_long_double = real;
+else version (LDC)
+ alias c_long_double = real; // 64-bit real for MSVC targets
+else version (SDC)
+{
+ version (X86)
+ alias c_long_double = real;
+ else version (X86_64)
+ alias c_long_double = real;
+}
+else version (CRuntime_Microsoft)
{
/* long double is 64 bits, not 80 bits, but is mangled differently
* than double. To distinguish double from long double, create a wrapper to represent
@@ -222,17 +233,6 @@ else version (DigitalMars)
alias real c_long_double;
}
}
-else version (GNU)
- alias real c_long_double;
-else version (LDC)
- alias real c_long_double;
-else version (SDC)
-{
- version (X86)
- alias real c_long_double;
- else version (X86_64)
- alias real c_long_double;
-}
static assert(is(c_long_double), "c_long_double needs to be declared for this platform/architecture.");
@@ -257,18 +257,9 @@ private struct _Complex(T)
T im;
}
-version (Posix)
-{
- align(float.alignof) enum __c_complex_float : _Complex!float;
- align(double.alignof) enum __c_complex_double : _Complex!double;
- align(real.alignof) enum __c_complex_real : _Complex!real;
-}
-else
-{
- align(float.sizeof * 2) enum __c_complex_float : _Complex!float;
- align(double.sizeof * 2) enum __c_complex_double : _Complex!double;
- align(real.alignof) enum __c_complex_real : _Complex!real;
-}
+enum __c_complex_float : _Complex!float;
+enum __c_complex_double : _Complex!double;
+enum __c_complex_real : _Complex!c_long_double;
alias c_complex_float = __c_complex_float;
alias c_complex_double = __c_complex_double;
diff --git a/libphobos/libdruntime/core/stdc/math.d b/libphobos/libdruntime/core/stdc/math.d
index fba78ee..2de6e57 100644
--- a/libphobos/libdruntime/core/stdc/math.d
+++ b/libphobos/libdruntime/core/stdc/math.d
@@ -424,92 +424,177 @@ else version (CRuntime_Microsoft) // fully supported since MSVCRT 12 (VS 2013) o
pure int _fpclass(double x);
}
+ version (MinGW)
+ {
enum
{
///
- FP_SUBNORMAL = -2,
+ FP_NAN = 0x0100,
///
- FP_NORMAL = -1,
+ FP_NORMAL = 0x0400,
///
- FP_ZERO = 0,
+ FP_INFINITE = FP_NAN | FP_NORMAL,
///
- FP_INFINITE = 1,
+ FP_ZERO = 0x0400,
///
- FP_NAN = 2,
+ FP_SUBNORMAL = FP_NORMAL | FP_ZERO
}
- extern(D)
- {
- //int fpclassify(real-floating x);
- ///
- extern(C) pragma(mangle, "_fdclass") pure int fpclassify(float x);
- ///
- extern(C) pragma(mangle, "_dclass") pure int fpclassify(double x);
- ///
- pure int fpclassify()(real x)
- {
- static if (real.sizeof == double.sizeof)
- return fpclassify(cast(double) x);
- else
- static assert(false, "fpclassify(real) not supported by MS C runtime");
- }
+ pure int __fpclassifyf(float x);
+ pure int __fpclassify(double x);
+ pure int __fpclassifyl(real x);
- //int isfinite(real-floating x);
- ///
- pure int isfinite()(float x) { return fpclassify(x) <= 0; }
- ///
- pure int isfinite()(double x) { return fpclassify(x) <= 0; }
- ///
- pure int isfinite()(real x) { return fpclassify(x) <= 0; }
+ pure int __isnanf(float x);
+ pure int __isnan(double x);
+ pure int __isnanl(real x);
- //int isinf(real-floating x);
- ///
- pure int isinf()(float x) { return fpclassify(x) == FP_INFINITE; }
- ///
- pure int isinf()(double x) { return fpclassify(x) == FP_INFINITE; }
- ///
- pure int isinf()(real x) { return fpclassify(x) == FP_INFINITE; }
+ pure int __signbitf(float x);
+ pure int __signbit(double x);
+ pure int __signbitl(real x);
- //int isnan(real-floating x);
- version (none) // requires MSVCRT 12+ (VS 2013)
+ extern (D)
{
+ //int fpclassify(real-floating x);
+ ///
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
+ ///
+ extern(C) pragma(mangle, "__fpclassify") pure int fpclassify(double x);
+ ///
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
+ pure int fpclassify(real x);
+
+ //int isfinite(real-floating x);
+ ///
+ pure int isfinite(float x) { return (fpclassify(x) & FP_NORMAL) == 0; }
///
- pure int isnan(float x) { return fpclassify(x) == FP_NAN; }
+ pure int isfinite(double x) { return (fpclassify(x) & FP_NORMAL) == 0; }
///
- pure int isnan(double x) { return fpclassify(x) == FP_NAN; }
+ pure int isfinite(real x) { return (fpclassify(x) & FP_NORMAL) == 0; }
+
+ //int isinf(real-floating x);
+ ///
+ pure int isinf(float x) { return fpclassify(x) == FP_INFINITE; }
+ ///
+ pure int isinf(double x) { return fpclassify(x) == FP_INFINITE; }
+ ///
+ pure int isinf(real x) { return fpclassify(x) == FP_INFINITE; }
+
+ //int isnan(real-floating x);
///
- pure int isnan(real x) { return fpclassify(x) == FP_NAN; }
+ extern(C) pragma(mangle, "__isnanf") pure int isnan(float x);
+ ///
+ extern(C) pragma(mangle, "__isnan") pure int isnan(double x);
+ ///
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
+ pure int isnan(real x);
+
+ //int isnormal(real-floating x);
+ ///
+ int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
+ ///
+ int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
+ ///
+ int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
+
+ //int signbit(real-floating x);
+ ///
+ extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
+ ///
+ extern(C) pragma(mangle, "__signbit") pure int signbit(double x);
+ ///
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
+ int signbit(real x);
}
- else // for backward compatibility with older runtimes
+ }
+ else
+ {
+ enum
{
///
- pure int isnan(float x) { version (Win64) return _isnanf(x); else return _isnan(cast(double) x); }
+ FP_SUBNORMAL = -2,
+ ///
+ FP_NORMAL = -1,
///
- extern(C) pragma(mangle, "_isnan") pure int isnan(double x);
+ FP_ZERO = 0,
///
- pure int isnan(real x) { return _isnan(cast(double) x); }
+ FP_INFINITE = 1,
+ ///
+ FP_NAN = 2,
}
- //int isnormal(real-floating x);
- ///
- pure int isnormal()(float x) { return fpclassify(x) == FP_NORMAL; }
- ///
- pure int isnormal()(double x) { return fpclassify(x) == FP_NORMAL; }
- ///
- pure int isnormal()(real x) { return fpclassify(x) == FP_NORMAL; }
-
- //int signbit(real-floating x);
- ///
- extern(C) pragma(mangle, "_fdsign") pure int signbit(float x);
- ///
- extern(C) pragma(mangle, "_dsign") pure int signbit(double x);
- ///
- pure int signbit()(real x)
+ extern(D)
{
- static if (real.sizeof == double.sizeof)
- return signbit(cast(double) x);
- else
- return (cast(short*)&(x))[4] & 0x8000;
+ //int fpclassify(real-floating x);
+ ///
+ extern(C) pragma(mangle, "_fdclass") pure int fpclassify(float x);
+ ///
+ extern(C) pragma(mangle, "_dclass") pure int fpclassify(double x);
+ ///
+ pure int fpclassify()(real x)
+ {
+ static if (real.sizeof == double.sizeof)
+ return fpclassify(cast(double) x);
+ else
+ static assert(false, "fpclassify(real) not supported by MS C runtime");
+ }
+
+ //int isfinite(real-floating x);
+ ///
+ pure int isfinite()(float x) { return fpclassify(x) <= 0; }
+ ///
+ pure int isfinite()(double x) { return fpclassify(x) <= 0; }
+ ///
+ pure int isfinite()(real x) { return fpclassify(x) <= 0; }
+
+ //int isinf(real-floating x);
+ ///
+ pure int isinf()(float x) { return fpclassify(x) == FP_INFINITE; }
+ ///
+ pure int isinf()(double x) { return fpclassify(x) == FP_INFINITE; }
+ ///
+ pure int isinf()(real x) { return fpclassify(x) == FP_INFINITE; }
+
+ //int isnan(real-floating x);
+ version (none) // requires MSVCRT 12+ (VS 2013)
+ {
+ ///
+ pure int isnan(float x) { return fpclassify(x) == FP_NAN; }
+ ///
+ pure int isnan(double x) { return fpclassify(x) == FP_NAN; }
+ ///
+ pure int isnan(real x) { return fpclassify(x) == FP_NAN; }
+ }
+ else // for backward compatibility with older runtimes
+ {
+ ///
+ pure int isnan(float x) { version (Win64) return _isnanf(x); else return _isnan(cast(double) x); }
+ ///
+ extern(C) pragma(mangle, "_isnan") pure int isnan(double x);
+ ///
+ pure int isnan(real x) { return _isnan(cast(double) x); }
+ }
+
+ //int isnormal(real-floating x);
+ ///
+ pure int isnormal()(float x) { return fpclassify(x) == FP_NORMAL; }
+ ///
+ pure int isnormal()(double x) { return fpclassify(x) == FP_NORMAL; }
+ ///
+ pure int isnormal()(real x) { return fpclassify(x) == FP_NORMAL; }
+
+ //int signbit(real-floating x);
+ ///
+ extern(C) pragma(mangle, "_fdsign") pure int signbit(float x);
+ ///
+ extern(C) pragma(mangle, "_dsign") pure int signbit(double x);
+ ///
+ pure int signbit()(real x)
+ {
+ static if (real.sizeof == double.sizeof)
+ return signbit(cast(double) x);
+ else
+ return (cast(short*)&(x))[4] & 0x8000;
+ }
}
}
}
@@ -835,88 +920,6 @@ else version (CRuntime_UClibc)
int signbit(real x);
}
}
-else version (MinGW)
-{
- enum
- {
- ///
- FP_NAN = 0x0100,
- ///
- FP_NORMAL = 0x0400,
- ///
- FP_INFINITE = FP_NAN | FP_NORMAL,
- ///
- FP_ZERO = 0x0400,
- ///
- FP_SUBNORMAL = FP_NORMAL | FP_ZERO
- }
-
- pure int __fpclassifyf(float x);
- pure int __fpclassify(double x);
- pure int __fpclassifyl(real x);
-
- pure int __isnanf(float x);
- pure int __isnan(double x);
- pure int __isnanl(real x);
-
- pure int __signbitf(float x);
- pure int __signbit(double x);
- pure int __signbitl(real x);
-
- extern (D)
- {
- //int fpclassify(real-floating x);
- ///
- extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
- ///
- extern(C) pragma(mangle, "__fpclassify") pure int fpclassify(double x);
- ///
- extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
- pure int fpclassify(real x);
-
- //int isfinite(real-floating x);
- ///
- pure int isfinite(float x) { return (fpclassify(x) & FP_NORMAL) == 0; }
- ///
- pure int isfinite(double x) { return (fpclassify(x) & FP_NORMAL) == 0; }
- ///
- pure int isfinite(real x) { return (fpclassify(x) & FP_NORMAL) == 0; }
-
- //int isinf(real-floating x);
- ///
- pure int isinf(float x) { return fpclassify(x) == FP_INFINITE; }
- ///
- pure int isinf(double x) { return fpclassify(x) == FP_INFINITE; }
- ///
- pure int isinf(real x) { return fpclassify(x) == FP_INFINITE; }
-
- //int isnan(real-floating x);
- ///
- extern(C) pragma(mangle, "__isnanf") pure int isnan(float x);
- ///
- extern(C) pragma(mangle, "__isnan") pure int isnan(double x);
- ///
- extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
- pure int isnan(real x);
-
- //int isnormal(real-floating x);
- ///
- int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
- ///
- int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
- ///
- int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
-
- //int signbit(real-floating x);
- ///
- extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
- ///
- extern(C) pragma(mangle, "__signbit") pure int signbit(double x);
- ///
- extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
- int signbit(real x);
- }
-}
else version (Darwin)
{
enum
@@ -1166,7 +1169,7 @@ else version (OpenBSD)
FP_FAST_FMAL = 1,
}
- pure int __fpclassifyd(double);
+ pure int __fpclassify(double);
pure int __fpclassifyf(float);
pure int __fpclassifyl(real);
pure int __isfinitef(float);
@@ -1188,7 +1191,7 @@ else version (OpenBSD)
///
extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
///
- extern(C) pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
+ extern(C) pragma(mangle, "__fpclassify") pure int fpclassify(double x);
///
extern(C) pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
diff --git a/libphobos/libdruntime/core/stdc/stdio.d b/libphobos/libdruntime/core/stdc/stdio.d
index 532a080..c76b922 100644
--- a/libphobos/libdruntime/core/stdc/stdio.d
+++ b/libphobos/libdruntime/core/stdc/stdio.d
@@ -1347,7 +1347,7 @@ version (CRuntime_DigitalMars)
///
pure int fileno()(FILE* stream) { return stream._file; }
}
- ///
+ ///
pragma(printf)
int _snprintf(scope char* s, size_t n, scope const char* fmt, scope const ...);
///
@@ -1358,6 +1358,26 @@ version (CRuntime_DigitalMars)
int _vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
///
alias _vsnprintf vsnprintf;
+
+ //
+ // Digital Mars under-the-hood C I/O functions. Uses _iobuf* for the
+ // unshared version of FILE*, usable when the FILE is locked.
+ //
+
+ ///
+ int _fputc_nlock(int c, _iobuf* fp);
+ ///
+ int _fputwc_nlock(int c, _iobuf* fp);
+ ///
+ int _fgetc_nlock(_iobuf* fp);
+ ///
+ int _fgetwc_nlock(_iobuf* fp);
+ ///
+ int __fp_lock(FILE* fp);
+ ///
+ void __fp_unlock(FILE* fp);
+ ///
+ int setmode(int fd, int mode);
}
else version (CRuntime_Microsoft)
{
@@ -1410,16 +1430,31 @@ else version (CRuntime_Microsoft)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
+ //
+ // Microsoft under-the-hood C I/O functions. Uses _iobuf* for the unshared
+ // version of FILE*, usable when the FILE is locked.
+ //
+ import core.stdc.stddef : wchar_t;
+ import core.stdc.wchar_ : wint_t;
+
///
- int _fputc_nolock(int c, FILE *fp);
+ int _fputc_nolock(int c, _iobuf* fp);
///
- int _fgetc_nolock(FILE *fp);
-
+ int _fgetc_nolock(_iobuf* fp);
///
- int _lock_file(FILE *fp);
+ wint_t _fputwc_nolock(wchar_t c, _iobuf* fp);
///
- int _unlock_file(FILE *fp);
-
+ wint_t _fgetwc_nolock(_iobuf* fp);
+ ///
+ void _lock_file(FILE* fp);
+ ///
+ void _unlock_file(FILE* fp);
+ ///
+ int _setmode(int fd, int mode);
+ ///
+ int _fseeki64(FILE* stream, long offset, int origin);
+ ///
+ long _ftelli64(FILE* stream);
///
intptr_t _get_osfhandle(int fd);
///
@@ -1448,6 +1483,23 @@ else version (CRuntime_Glibc)
///
pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
+
+ //
+ // Gnu under-the-hood C I/O functions. Uses _iobuf* for the unshared
+ // version of FILE*, usable when the FILE is locked.
+ // See http://gnu.org/software/libc/manual/html_node/I_002fO-on-Streams.html
+ //
+ import core.stdc.wchar_ : wint_t;
+ import core.stdc.stddef : wchar_t;
+
+ ///
+ int fputc_unlocked(int c, _iobuf* stream);
+ ///
+ int fgetc_unlocked(_iobuf* stream);
+ ///
+ wint_t fputwc_unlocked(wchar_t wc, _iobuf* stream);
+ ///
+ wint_t fgetwc_unlocked(_iobuf* stream);
}
else version (Darwin)
{
@@ -1907,6 +1959,22 @@ version (Windows)
O_TEXT = _O_TEXT, ///
_O_BINARY = 0x8000, ///
O_BINARY = _O_BINARY, ///
+ _O_WTEXT = 0x10000, ///
+ _O_U16TEXT = 0x20000, ///
+ _O_U8TEXT = 0x40000, ///
+ _O_ACCMODE = (_O_RDONLY|_O_WRONLY|_O_RDWR), ///
+ O_ACCMODE = _O_ACCMODE, ///
+ _O_RAW = _O_BINARY, ///
+ O_RAW = _O_BINARY, ///
+ _O_NOINHERIT = 0x0080, ///
+ O_NOINHERIT = _O_NOINHERIT, ///
+ _O_TEMPORARY = 0x0040, ///
+ O_TEMPORARY = _O_TEMPORARY, ///
+ _O_SHORT_LIVED = 0x1000, ///
+ _O_SEQUENTIAL = 0x0020, ///
+ O_SEQUENTIAL = _O_SEQUENTIAL, ///
+ _O_RANDOM = 0x0010, ///
+ O_RANDOM = _O_RANDOM, ///
}
enum
diff --git a/libphobos/libdruntime/core/stdc/stdlib.d b/libphobos/libdruntime/core/stdc/stdlib.d
index 5d69b88..35e81a2 100644
--- a/libphobos/libdruntime/core/stdc/stdlib.d
+++ b/libphobos/libdruntime/core/stdc/stdlib.d
@@ -121,19 +121,22 @@ ulong strtoull(scope inout(char)* nptr, scope inout(char)** endptr, int base);
version (CRuntime_Microsoft)
{
- // strtold exists starting from VS2013, so we give it D linkage to avoid link errors
- ///
- extern (D) real strtold(scope inout(char)* nptr, inout(char)** endptr)
- { // Fake it 'till we make it
- return strtod(nptr, endptr);
+ version (MinGW)
+ {
+ ///
+ real __mingw_strtold(scope inout(char)* nptr, scope inout(char)** endptr);
+ ///
+ alias __mingw_strtold strtold;
+ }
+ else
+ {
+ // strtold exists starting from VS2013, so we give it D linkage to avoid link errors
+ ///
+ extern (D) real strtold(scope inout(char)* nptr, inout(char)** endptr)
+ { // Fake it 'till we make it
+ return strtod(nptr, endptr);
+ }
}
-}
-else version (MinGW)
-{
- ///
- real __mingw_strtold(scope inout(char)* nptr, scope inout(char)** endptr);
- ///
- alias __mingw_strtold strtold;
}
else
{
diff --git a/libphobos/libdruntime/core/stdc/tgmath.d b/libphobos/libdruntime/core/stdc/tgmath.d
index 2ff1522..2d1a198 100644
--- a/libphobos/libdruntime/core/stdc/tgmath.d
+++ b/libphobos/libdruntime/core/stdc/tgmath.d
@@ -1285,6 +1285,13 @@ else
alias core.stdc.math.fabs fabs;
version (CRuntime_Microsoft)
{
+ version (MinGW)
+ {
+ ///
+ alias core.stdc.math.fabsf fabs;
+ ///
+ alias core.stdc.math.fabsl fabs;
+ }
}
else
{
diff --git a/libphobos/libdruntime/core/sys/darwin/config.d b/libphobos/libdruntime/core/sys/darwin/config.d
new file mode 100644
index 0000000..87f3fd4
--- /dev/null
+++ b/libphobos/libdruntime/core/sys/darwin/config.d
@@ -0,0 +1,53 @@
+/**
+ * D header file for Darwin.
+ *
+ * Copyright: Copyright (c) 2021 D Language Foundation
+ * Authors: Iain Buclaw
+ */
+module core.sys.darwin.config;
+
+version (OSX)
+ version = Darwin;
+else version (iOS)
+ version = Darwin;
+else version (TVOS)
+ version = Darwin;
+else version (WatchOS)
+ version = Darwin;
+
+version (Darwin):
+
+public import core.sys.posix.config;
+
+enum __MAC_10_0 = 100000;
+enum __MAC_10_1 = 100100;
+enum __MAC_10_2 = 100200;
+enum __MAC_10_3 = 100300;
+enum __MAC_10_4 = 100400;
+enum __MAC_10_5 = 100500;
+enum __MAC_10_6 = 100600;
+enum __MAC_10_7 = 100700;
+enum __MAC_10_8 = 100800;
+enum __MAC_10_9 = 100900;
+enum __MAC_10_10 = 101000;
+enum __MAC_10_10_2 = 101002;
+enum __MAC_10_10_3 = 101003;
+enum __MAC_10_11 = 101100;
+enum __MAC_10_11_2 = 101102;
+enum __MAC_10_11_3 = 101103;
+enum __MAC_10_11_4 = 101104;
+enum __MAC_10_12 = 101200;
+enum __MAC_10_12_1 = 101201;
+enum __MAC_10_12_2 = 101202;
+enum __MAC_10_12_4 = 101204;
+enum __MAC_10_13 = 101300;
+enum __MAC_10_13_1 = 101301;
+enum __MAC_10_13_2 = 101302;
+enum __MAC_10_13_4 = 101304;
+enum __MAC_10_14 = 101400;
+enum __MAC_10_14_1 = 101401;
+enum __MAC_10_14_4 = 101404;
+enum __MAC_10_15 = 101500;
+enum __MAC_10_15_1 = 101501;
+enum __MAC_10_16 = 101501;
+enum __MAC_11_0 = 110000;
diff --git a/libphobos/libdruntime/core/sys/darwin/mach/thread_act.d b/libphobos/libdruntime/core/sys/darwin/mach/thread_act.d
index b61673f..d455d1b 100644
--- a/libphobos/libdruntime/core/sys/darwin/mach/thread_act.d
+++ b/libphobos/libdruntime/core/sys/darwin/mach/thread_act.d
@@ -38,6 +38,10 @@ version (AArch64)
version = AnyARM;
version (ARM)
version = AnyARM;
+version (PPC)
+ version = AnyPPC;
+version (PPC64)
+ version = AnyPPC;
version (i386)
{
@@ -235,3 +239,65 @@ else version (AnyARM)
kern_return_t thread_resume(thread_act_t);
kern_return_t thread_get_state(thread_act_t, thread_state_flavor_t, thread_state_t*, mach_msg_type_number_t*);
}
+else version (AnyPPC)
+{
+ alias thread_act_t = mach_port_t;
+ alias thread_state_t = void;
+ alias thread_state_flavor_t = int;
+ alias mach_msg_type_number_t = natural_t;
+
+ enum
+ {
+ PPC_THREAD_STATE = 1,
+ PPC_FLOAT_STATE = 2,
+ PPC_EXCEPTION_STATE = 3,
+ PPC_VECTOR_STATE = 4,
+ PPC_THREAD_STATE64 = 5,
+ PPC_EXCEPTION_STATE64 = 6,
+ THREAD_STATE_NONE = 7
+ }
+
+ struct ppc_thread_state_t
+ {
+ uint srr0; /// Instruction address register (PC)
+ uint srr1; /// Machine state register (supervisor)
+ uint[32] r; /// General purpose register r0-r31
+ uint cr; /// Condition register
+ uint xer; /// User's integer exception register
+ uint lr; /// Link register
+ uint ctr; /// Count register
+ uint mq; /// MQ register (601 only)
+ uint vrsave; /// Vector save register
+ }
+
+ alias ppc_thread_state32_t = ppc_thread_state_t;
+
+ struct ppc_thread_state64_t
+ {
+ ulong srr0; /// Instruction address register (PC)
+ ulong srr1; /// Machine state register (supervisor)
+ ulong[32] r; /// General purpose register r0-r31
+ uint cr; /// Condition register
+ uint pad0;
+ ulong xer; /// User's integer exception register
+ ulong lr; /// Link register
+ ulong ctr; /// Count register
+ uint vrsave; /// Vector save register
+ uint pad1;
+ }
+
+ enum : mach_msg_type_number_t
+ {
+ PPC_THREAD_STATE_COUNT = cast(mach_msg_type_number_t) (ppc_thread_state_t.sizeof / uint.sizeof),
+ PPC_THREAD_STATE32_COUNT = cast(mach_msg_type_number_t) (ppc_thread_state32_t.sizeof / uint.sizeof),
+ PPC_THREAD_STATE64_COUNT = cast(mach_msg_type_number_t) (ppc_thread_state64_t.sizeof / uint.sizeof),
+ }
+
+ alias MACHINE_THREAD_STATE = PPC_THREAD_STATE;
+ alias MACHINE_THREAD_STATE_COUNT = PPC_THREAD_STATE_COUNT;
+
+ mach_port_t mach_thread_self();
+ kern_return_t thread_suspend(thread_act_t);
+ kern_return_t thread_resume(thread_act_t);
+ kern_return_t thread_get_state(thread_act_t, thread_state_flavor_t, thread_state_t*, mach_msg_type_number_t*);
+}
diff --git a/libphobos/libdruntime/core/sys/openbsd/sys/link_elf.d b/libphobos/libdruntime/core/sys/openbsd/sys/link_elf.d
index f88671a..55fc792 100644
--- a/libphobos/libdruntime/core/sys/openbsd/sys/link_elf.d
+++ b/libphobos/libdruntime/core/sys/openbsd/sys/link_elf.d
@@ -63,3 +63,8 @@ private alias int function(dl_phdr_info*, size_t, void *) @nogc dl_iterate_phdr_
int dl_iterate_phdr(dl_iterate_phdr_cb __callback, void*__data);
int dl_iterate_phdr(dl_iterate_phdr_cb_ngc __callback, void*__data) @nogc;
+
+int _rtld_addr_phdr(const void*, dl_phdr_info*) @nogc
+{
+ return 0;
+}
diff --git a/libphobos/libdruntime/core/sys/posix/stdio.d b/libphobos/libdruntime/core/sys/posix/stdio.d
index 031bcb7..41b52da 100644
--- a/libphobos/libdruntime/core/sys/posix/stdio.d
+++ b/libphobos/libdruntime/core/sys/posix/stdio.d
@@ -516,6 +516,46 @@ version (CRuntime_Glibc)
int putc_unlocked(int, FILE*);
int putchar_unlocked(int);
}
+else version (CRuntime_Musl)
+{
+ void flockfile(FILE*);
+ int ftrylockfile(FILE*);
+ void funlockfile(FILE*);
+ int getc_unlocked(FILE*);
+ int getchar_unlocked();
+ int putc_unlocked(int, FILE*);
+ int putchar_unlocked(int);
+}
+else version (Darwin)
+{
+ void flockfile(FILE*);
+ int ftrylockfile(FILE*);
+ void funlockfile(FILE*);
+ int getc_unlocked(FILE*);
+ int getchar_unlocked();
+ int putc_unlocked(int, FILE*);
+ int putchar_unlocked(int);
+}
+else version (FreeBSD)
+{
+ void flockfile(FILE*);
+ int ftrylockfile(FILE*);
+ void funlockfile(FILE*);
+ int getc_unlocked(FILE*);
+ int getchar_unlocked();
+ int putc_unlocked(int, FILE*);
+ int putchar_unlocked(int);
+}
+else version (NetBSD)
+{
+ void flockfile(FILE*);
+ int ftrylockfile(FILE*);
+ void funlockfile(FILE*);
+ int getc_unlocked(FILE*);
+ int getchar_unlocked();
+ int putc_unlocked(int, FILE*);
+ int putchar_unlocked(int);
+}
else version (OpenBSD)
{
void flockfile(FILE*);
@@ -526,6 +566,16 @@ else version (OpenBSD)
int putc_unlocked(int, FILE*);
int putchar_unlocked(int);
}
+else version (DragonFlyBSD)
+{
+ void flockfile(FILE*);
+ int ftrylockfile(FILE*);
+ void funlockfile(FILE*);
+ int getc_unlocked(FILE*);
+ int getchar_unlocked();
+ int putc_unlocked(int, FILE*);
+ int putchar_unlocked(int);
+}
else version (Solaris)
{
void flockfile(FILE*);
diff --git a/libphobos/libdruntime/core/sys/windows/com.d b/libphobos/libdruntime/core/sys/windows/com.d
index 88007ad..6935dd9 100644
--- a/libphobos/libdruntime/core/sys/windows/com.d
+++ b/libphobos/libdruntime/core/sys/windows/com.d
@@ -57,12 +57,12 @@ alias COINIT_SPEED_OVER_MEMORY = COINIT.COINIT_SPEED_OVER_MEMORY;
public import core.sys.windows.uuid;
-extern (System)
+extern (Windows)
{
class ComObject : IUnknown
{
-extern (System):
+extern (Windows):
HRESULT QueryInterface(const(IID)* riid, void** ppv)
{
if (*riid == IID_IUnknown)
diff --git a/libphobos/libdruntime/core/sys/windows/dbghelp.d b/libphobos/libdruntime/core/sys/windows/dbghelp.d
index 8c98270..9848fb9 100644
--- a/libphobos/libdruntime/core/sys/windows/dbghelp.d
+++ b/libphobos/libdruntime/core/sys/windows/dbghelp.d
@@ -18,7 +18,7 @@ import core.sys.windows.windef;
public import core.sys.windows.dbghelp_types;
-extern(System)
+extern(Windows)
{
alias BOOL function(HANDLE hProcess, DWORD64 lpBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead) ReadProcessMemoryProc64;
alias PVOID function(HANDLE hProcess, DWORD64 AddrBase) FunctionTableAccessProc64;
diff --git a/libphobos/libdruntime/core/sys/windows/dll.d b/libphobos/libdruntime/core/sys/windows/dll.d
index 3df0d7f..cc2422b 100644
--- a/libphobos/libdruntime/core/sys/windows/dll.d
+++ b/libphobos/libdruntime/core/sys/windows/dll.d
@@ -414,7 +414,7 @@ int dll_getRefCount( HINSTANCE hInstance ) nothrow @nogc
{
version (GNU_InlineAsm)
{
- asm pure nothrow @nogc { "movq %%gs:0x60, %0;" : "=r" peb; }
+ asm pure nothrow @nogc { "movq %%gs:0x60, %0;" : "=r" (peb); }
}
else
{
@@ -431,7 +431,7 @@ int dll_getRefCount( HINSTANCE hInstance ) nothrow @nogc
{
version (GNU_InlineAsm)
{
- asm pure nothrow @nogc { "movl %%fs:0x30, %0;" : "=r" peb; }
+ asm pure nothrow @nogc { "movl %%fs:0x30, %0;" : "=r" (peb); }
}
else
{
diff --git a/libphobos/libdruntime/core/sys/windows/threadaux.d b/libphobos/libdruntime/core/sys/windows/threadaux.d
index fb4d1ee..34fda65 100644
--- a/libphobos/libdruntime/core/sys/windows/threadaux.d
+++ b/libphobos/libdruntime/core/sys/windows/threadaux.d
@@ -172,7 +172,7 @@ struct thread_aux
version (GNU_InlineAsm)
{
void** teb;
- asm pure nothrow @nogc { "movl %%fs:0x18, %0;" : "=r" teb; }
+ asm pure nothrow @nogc { "movl %%fs:0x18, %0;" : "=r" (teb); }
return teb;
}
else
@@ -190,7 +190,7 @@ struct thread_aux
version (GNU_InlineAsm)
{
void** teb;
- asm pure nothrow @nogc { "movq %%gs:0x30, %0;" : "=r" teb; }
+ asm pure nothrow @nogc { "movq %%gs:0x30, %0;" : "=r" (teb); }
return teb;
}
else
diff --git a/libphobos/libdruntime/core/thread/fiber.d b/libphobos/libdruntime/core/thread/fiber.d
index 3270f2e..f4c04ce 100644
--- a/libphobos/libdruntime/core/thread/fiber.d
+++ b/libphobos/libdruntime/core/thread/fiber.d
@@ -82,6 +82,8 @@ private
version (MinGW)
version = GNU_AsmX86_Windows;
+ else version (OSX)
+ version = AsmX86_Posix;
else version (Posix)
version = AsmX86_Posix;
}
@@ -105,13 +107,21 @@ private
version (MinGW)
version = GNU_AsmX86_64_Windows;
+ else version (OSX)
+ version = AsmX86_64_Posix;
else version (Posix)
version = AsmX86_64_Posix;
}
}
else version (PPC)
{
- version (Posix)
+ version (OSX)
+ {
+ version = AsmPPC_Darwin;
+ version = AsmExternal;
+ version = AlignFiberStackTo16Byte;
+ }
+ else version (Posix)
{
version = AsmPPC_Posix;
version = AsmExternal;
@@ -119,7 +129,13 @@ private
}
else version (PPC64)
{
- version (Posix)
+ version (OSX)
+ {
+ version = AsmPPC_Darwin;
+ version = AsmExternal;
+ version = AlignFiberStackTo16Byte;
+ }
+ else version (Posix)
{
version = AlignFiberStackTo16Byte;
}
@@ -883,6 +899,7 @@ class Fiber
*/
static Fiber getThis() @safe nothrow @nogc
{
+ version (GNU) pragma(inline, false);
return sm_this;
}
@@ -1346,6 +1363,28 @@ private:
assert( (cast(size_t) pstack & 0x0f) == 0 );
}
+ else version (AsmPPC_Darwin)
+ {
+ version (StackGrowsDown) {}
+ else static assert(false, "PowerPC Darwin only supports decrementing stacks");
+
+ uint wsize = size_t.sizeof;
+
+ // linkage + regs + FPRs + VRs
+ uint space = 8 * wsize + 20 * wsize + 18 * 8 + 12 * 16;
+ (cast(ubyte*)pstack - space)[0 .. space] = 0;
+
+ pstack -= wsize * 6;
+ *cast(size_t*)pstack = cast(size_t) &fiber_entryPoint; // LR
+ pstack -= wsize * 22;
+
+ // On Darwin PPC64 pthread self is in R13 (which is reserved).
+ // At present, it is not safe to migrate fibers between threads, but if that
+ // changes, then updating the value of R13 will also need to be handled.
+ version (PPC64)
+ *cast(size_t*)(pstack + wsize) = cast(size_t) Thread.getThis().m_addr;
+ assert( (cast(size_t) pstack & 0x0f) == 0 );
+ }
else version (AsmMIPS_O32_Posix)
{
version (StackGrowsDown) {}
@@ -1731,6 +1770,11 @@ unittest
// Multiple threads running shared fibers
version (PPC) version = UnsafeFiberMigration;
version (PPC64) version = UnsafeFiberMigration;
+version (OSX)
+{
+ version (X86) version = UnsafeFiberMigration;
+ version (X86_64) version = UnsafeFiberMigration;
+}
version (UnsafeFiberMigration)
{
diff --git a/libphobos/libdruntime/core/thread/osthread.d b/libphobos/libdruntime/core/thread/osthread.d
index 880836e..31764e6 100644
--- a/libphobos/libdruntime/core/thread/osthread.d
+++ b/libphobos/libdruntime/core/thread/osthread.d
@@ -349,7 +349,8 @@ class Thread : ThreadBase
}
else version (Posix)
{
- pthread_detach( m_addr );
+ if (m_addr != m_addr.init)
+ pthread_detach( m_addr );
m_addr = m_addr.init;
}
version (Darwin)
@@ -420,6 +421,17 @@ class Thread : ThreadBase
{
uint[16] m_reg; // r0-r15
}
+ else version (PPC)
+ {
+ // Make the assumption that we only care about non-fp and non-vr regs.
+ // ??? : it seems plausible that a valid address can be copied into a VR.
+ uint[32] m_reg; // r0-31
+ }
+ else version (PPC64)
+ {
+ // As above.
+ ulong[32] m_reg; // r0-31
+ }
else
{
static assert(false, "Architecture not supported." );
@@ -578,7 +590,7 @@ class Thread : ThreadBase
{
version (Windows)
{
- if ( WaitForSingleObject( m_hndl, INFINITE ) != WAIT_OBJECT_0 )
+ if ( m_addr != m_addr.init && WaitForSingleObject( m_hndl, INFINITE ) != WAIT_OBJECT_0 )
throw new ThreadException( "Unable to join thread" );
// NOTE: m_addr must be cleared before m_hndl is closed to avoid
// a race condition with isRunning. The operation is done
@@ -589,7 +601,7 @@ class Thread : ThreadBase
}
else version (Posix)
{
- if ( pthread_join( m_addr, null ) != 0 )
+ if ( m_addr != m_addr.init && pthread_join( m_addr, null ) != 0 )
throw new ThreadException( "Unable to join thread" );
// NOTE: pthread_join acts as a substitute for pthread_detach,
// which is normally called by the dtor. Setting m_addr
@@ -1396,8 +1408,98 @@ in (fn)
void *sp = void;
version (GNU)
{
- __builtin_unwind_init();
- sp = &sp;
+ // The generic solution below using a call to __builtin_unwind_init ()
+ // followed by an assignment to sp has two issues:
+ // 1) On some archs it stores a huge amount of FP and Vector state which
+ // is not the subject of the scan - and, indeed might produce false
+ // hits.
+ // 2) Even on archs like X86, where there are no callee-saved FPRs/VRs there
+ // tend to be 'holes' in the frame allocations (to deal with alignment) which
+ // also will contain random data which could produce false positives.
+ // This solution stores only the integer callee-saved registers.
+ version (X86)
+ {
+ void*[3] regs = void;
+ asm pure nothrow @nogc
+ {
+ "movl %%ebx, %0" : "=m" (regs[0]);
+ "movl %%esi, %0" : "=m" (regs[1]);
+ "movl %%edi, %0" : "=m" (regs[2]);
+ }
+ sp = cast(void*)&regs[0];
+ }
+ else version (X86_64)
+ {
+ void*[5] regs = void;
+ asm pure nothrow @nogc
+ {
+ "movq %%rbx, %0" : "=m" (regs[0]);
+ "movq %%r12, %0" : "=m" (regs[1]);
+ "movq %%r13, %0" : "=m" (regs[2]);
+ "movq %%r14, %0" : "=m" (regs[3]);
+ "movq %%r15, %0" : "=m" (regs[4]);
+ }
+ sp = cast(void*)&regs[0];
+ }
+ else version (PPC)
+ {
+ void*[19] regs = void;
+ asm pure nothrow @nogc
+ {
+ "stw r13, %0" : "=m" (regs[ 0]);
+ "stw r14, %0" : "=m" (regs[ 1]);
+ "stw r15, %0" : "=m" (regs[ 2]);
+ "stw r16, %0" : "=m" (regs[ 3]);
+ "stw r17, %0" : "=m" (regs[ 4]);
+ "stw r18, %0" : "=m" (regs[ 5]);
+ "stw r19, %0" : "=m" (regs[ 6]);
+ "stw r20, %0" : "=m" (regs[ 7]);
+ "stw r21, %0" : "=m" (regs[ 9]);
+ "stw r22, %0" : "=m" (regs[ 9]);
+ "stw r23, %0" : "=m" (regs[10]);
+ "stw r24, %0" : "=m" (regs[11]);
+ "stw r25, %0" : "=m" (regs[12]);
+ "stw r26, %0" : "=m" (regs[13]);
+ "stw r27, %0" : "=m" (regs[14]);
+ "stw r28, %0" : "=m" (regs[15]);
+ "stw r29, %0" : "=m" (regs[16]);
+ "stw r30, %0" : "=m" (regs[17]);
+ "stw r31, %0" : "=m" (regs[18]);
+ }
+ sp = cast(void*)&regs[0];
+ }
+ else version (PPC64)
+ {
+ void*[19] regs = void;
+ asm pure nothrow @nogc
+ {
+ "std r13, %0" : "=m" (regs[ 0]);
+ "std r14, %0" : "=m" (regs[ 1]);
+ "std r15, %0" : "=m" (regs[ 2]);
+ "std r16, %0" : "=m" (regs[ 3]);
+ "std r17, %0" : "=m" (regs[ 4]);
+ "std r18, %0" : "=m" (regs[ 5]);
+ "std r19, %0" : "=m" (regs[ 6]);
+ "std r20, %0" : "=m" (regs[ 7]);
+ "std r21, %0" : "=m" (regs[ 8]);
+ "std r22, %0" : "=m" (regs[ 9]);
+ "std r23, %0" : "=m" (regs[10]);
+ "std r24, %0" : "=m" (regs[11]);
+ "std r25, %0" : "=m" (regs[12]);
+ "std r26, %0" : "=m" (regs[13]);
+ "std r27, %0" : "=m" (regs[14]);
+ "std r28, %0" : "=m" (regs[15]);
+ "std r29, %0" : "=m" (regs[16]);
+ "std r30, %0" : "=m" (regs[17]);
+ "std r31, %0" : "=m" (regs[18]);
+ }
+ sp = cast(void*)&regs[0];
+ }
+ else
+ {
+ __builtin_unwind_init();
+ sp = &sp;
+ }
}
else version (AsmX86_Posix)
{
@@ -1539,9 +1641,9 @@ package extern(D) void* getStackBottom() nothrow @nogc
void *bottom;
version (X86)
- asm pure nothrow @nogc { "movl %%fs:4, %0;" : "=r" bottom; }
+ asm pure nothrow @nogc { "movl %%fs:4, %0;" : "=r" (bottom); }
else version (X86_64)
- asm pure nothrow @nogc { "movq %%gs:8, %0;" : "=r" bottom; }
+ asm pure nothrow @nogc { "movq %%gs:8, %0;" : "=r" (bottom); }
else
static assert(false, "Platform not supported.");
@@ -1790,6 +1892,28 @@ private extern (D) bool suspend( Thread t ) nothrow @nogc
t.m_reg[14] = state.lr;
t.m_reg[15] = state.pc;
}
+ else version (PPC)
+ {
+ ppc_thread_state_t state = void;
+ mach_msg_type_number_t count = PPC_THREAD_STATE_COUNT;
+
+ if (thread_get_state(t.m_tmach, PPC_THREAD_STATE, &state, &count) != KERN_SUCCESS)
+ onThreadError("Unable to load thread state");
+ if (!t.m_lock)
+ t.m_curr.tstack = cast(void*) state.r[1];
+ t.m_reg[] = state.r[];
+ }
+ else version (PPC64)
+ {
+ ppc_thread_state64_t state = void;
+ mach_msg_type_number_t count = PPC_THREAD_STATE64_COUNT;
+
+ if (thread_get_state(t.m_tmach, PPC_THREAD_STATE64, &state, &count) != KERN_SUCCESS)
+ onThreadError("Unable to load thread state");
+ if (!t.m_lock)
+ t.m_curr.tstack = cast(void*) state.r[1];
+ t.m_reg[] = state.r[];
+ }
else
{
static assert(false, "Architecture not supported." );
diff --git a/libphobos/libdruntime/core/thread/threadbase.d b/libphobos/libdruntime/core/thread/threadbase.d
index c2c2333..0a8de10 100644
--- a/libphobos/libdruntime/core/thread/threadbase.d
+++ b/libphobos/libdruntime/core/thread/threadbase.d
@@ -10,6 +10,9 @@
* Source: $(DRUNTIMESRC core/thread/osthread.d)
*/
+/* NOTE: This file has been patched from the original DMD distribution to
+ * work with the GDC compiler.
+ */
module core.thread.threadbase;
import core.thread.context;
@@ -313,6 +316,7 @@ class ThreadBase
// NOTE: This function may not be called until thread_init has
// completed. See thread_suspendAll for more information
// on why this might occur.
+ version (GNU) pragma(inline, false);
return sm_this;
}
diff --git a/libphobos/libdruntime/gcc/backtrace.d b/libphobos/libdruntime/gcc/backtrace.d
index 45dd011..8f5582d 100644
--- a/libphobos/libdruntime/gcc/backtrace.d
+++ b/libphobos/libdruntime/gcc/backtrace.d
@@ -424,8 +424,10 @@ private:
import core.sys.freebsd.dlfcn;
else version (NetBSD)
import core.sys.netbsd.dlfcn;
+ else version (OpenBSD)
+ import core.sys.openbsd.dlfcn;
else version (Solaris)
- import core.sys.netbsd.dlfcn;
+ import core.sys.solaris.dlfcn;
else version (Posix)
import core.sys.posix.dlfcn;
diff --git a/libphobos/libdruntime/gcc/deh.d b/libphobos/libdruntime/gcc/deh.d
index 2e67932..eb83751c 100644
--- a/libphobos/libdruntime/gcc/deh.d
+++ b/libphobos/libdruntime/gcc/deh.d
@@ -34,11 +34,6 @@ extern(C)
{
int _d_isbaseof(ClassInfo, ClassInfo);
void _d_createTrace(Object, void*);
-
- // Not used in GDC but declaration required by rt/sections.d
- struct FuncTable
- {
- }
}
/**
@@ -552,7 +547,7 @@ _Unwind_Reason_Code scanLSDA(const(ubyte)* lsda, _Unwind_Exception_Class excepti
_Unwind_Ptr LPStart = 0;
if (LPStartEncoding != DW_EH_PE_omit)
- LPStart = read_encoded_value(context, LPStartEncoding, &p);
+ LPStart = read_encoded_value(context, LPStartEncoding, p);
else
LPStart = Start;
@@ -568,14 +563,14 @@ _Unwind_Reason_Code scanLSDA(const(ubyte)* lsda, _Unwind_Exception_Class excepti
// hardcoded OS-specific format.
TTypeEncoding = _TTYPE_ENCODING;
}
- auto TTbase = read_uleb128(&p);
+ auto TTbase = read_uleb128(p);
TType = p + TTbase;
}
// The encoding and length of the call-site table; the action table
// immediately follows.
ubyte CSEncoding = *p++;
- auto CSTableSize = read_uleb128(&p);
+ auto CSTableSize = read_uleb128(p);
const(ubyte)* actionTable = p + CSTableSize;
auto TTypeBase = base_of_encoded_value(TTypeEncoding, context);
@@ -613,8 +608,8 @@ _Unwind_Reason_Code scanLSDA(const(ubyte)* lsda, _Unwind_Exception_Class excepti
_uleb128_t CSLandingPad, CSAction;
do
{
- CSLandingPad = read_uleb128(&p);
- CSAction = read_uleb128(&p);
+ CSLandingPad = read_uleb128(p);
+ CSAction = read_uleb128(p);
}
while (--ip);
@@ -631,10 +626,10 @@ _Unwind_Reason_Code scanLSDA(const(ubyte)* lsda, _Unwind_Exception_Class excepti
while (p < actionTable)
{
// Note that all call-site encodings are "absolute" displacements.
- auto CSStart = read_encoded_value(null, CSEncoding, &p);
- auto CSLen = read_encoded_value(null, CSEncoding, &p);
- auto CSLandingPad = read_encoded_value(null, CSEncoding, &p);
- auto CSAction = read_uleb128(&p);
+ auto CSStart = read_encoded_value(null, CSEncoding, p);
+ auto CSLen = read_encoded_value(null, CSEncoding, p);
+ auto CSLandingPad = read_encoded_value(null, CSEncoding, p);
+ auto CSAction = read_uleb128(p);
// The table is sorted, so if we've passed the ip, stop.
if (ip < Start + CSStart)
@@ -708,9 +703,9 @@ int actionTableLookup(_Unwind_Action actions, _Unwind_Exception* unwindHeader,
while (1)
{
auto ap = actionRecord;
- auto ARFilter = read_sleb128(&ap);
+ auto ARFilter = read_sleb128(ap);
auto apn = ap;
- auto ARDisp = read_sleb128(&ap);
+ auto ARDisp = read_sleb128(ap);
if (ARFilter == 0)
{
@@ -730,7 +725,7 @@ int actionTableLookup(_Unwind_Action actions, _Unwind_Exception* unwindHeader,
// the ClassInfo is stored.
const(ubyte)* tp = TType - ARFilter * encodedSize;
- auto entry = read_encoded_value_with_base(TTypeEncoding, TTypeBase, &tp);
+ auto entry = read_encoded_value_with_base(TTypeEncoding, TTypeBase, tp);
ClassInfo ci = cast(ClassInfo)cast(void*)(entry);
// D does not have catch-all handlers, and so the following
@@ -805,7 +800,7 @@ version (GNU_SEH_Exceptions)
void* ms_orig_context, void* ms_disp)
{
return _GCC_specific_handler(ms_exc, this_frame, ms_orig_context,
- ms_disp, &__gdc_personality_imp);
+ ms_disp, &gdc_personality);
}
}
else version (GNU_SjLj_Exceptions)
diff --git a/libphobos/libdruntime/gcc/gthread.d b/libphobos/libdruntime/gcc/gthread.d
index ef35a3c27..5003637 100644
--- a/libphobos/libdruntime/gcc/gthread.d
+++ b/libphobos/libdruntime/gcc/gthread.d
@@ -86,10 +86,12 @@ else static if (GNU_Thread_Model == ThreadModel.Single)
}
else static if (GNU_Thread_Model == ThreadModel.Win32)
{
+ import core.stdc.config;
+
struct __gthread_once_t
{
- INT done;
- LONG started;
+ int done;
+ c_long started;
}
int __gthr_win32_key_create(__gthread_key_t* keyp, GthreadDestroyFn dtor);
diff --git a/libphobos/libdruntime/gcc/sections/elf.d b/libphobos/libdruntime/gcc/sections/elf.d
index 8450aec..3480fb9 100644
--- a/libphobos/libdruntime/gcc/sections/elf.d
+++ b/libphobos/libdruntime/gcc/sections/elf.d
@@ -33,6 +33,7 @@ version (CRuntime_Glibc) enum SharedELF = true;
else version (CRuntime_Musl) enum SharedELF = true;
else version (FreeBSD) enum SharedELF = true;
else version (NetBSD) enum SharedELF = true;
+else version (OpenBSD) enum SharedELF = true;
else version (DragonFlyBSD) enum SharedELF = true;
else version (CRuntime_UClibc) enum SharedELF = true;
else version (Solaris) enum SharedELF = true;
@@ -62,6 +63,12 @@ else version (NetBSD)
import core.sys.netbsd.sys.elf;
import core.sys.netbsd.sys.link_elf;
}
+else version (OpenBSD)
+{
+ import core.sys.openbsd.dlfcn;
+ import core.sys.openbsd.sys.elf;
+ import core.sys.openbsd.sys.link_elf;
+}
else version (DragonFlyBSD)
{
import core.sys.dragonflybsd.dlfcn;
@@ -688,20 +695,22 @@ version (Shared)
@nogc nothrow:
link_map* linkMapForHandle(void* handle)
{
- link_map* map;
- const success = dlinfo(handle, RTLD_DI_LINKMAP, &map) == 0;
- safeAssert(success, "Failed to get DSO info.");
- return map;
+ static if (__traits(compiles, RTLD_DI_LINKMAP))
+ {
+ link_map* map;
+ const success = dlinfo(handle, RTLD_DI_LINKMAP, &map) == 0;
+ safeAssert(success, "Failed to get DSO info.");
+ return map;
+ }
+ else version (OpenBSD)
+ {
+ safeAssert(handle !is null, "Failed to get DSO info.");
+ return cast(link_map*)handle;
+ }
+ else
+ static assert(0, "unimplemented");
}
- link_map* exeLinkMap(link_map* map)
- {
- safeAssert(map !is null, "Invalid link_map.");
- while (map.l_prev !is null)
- map = map.l_prev;
- return map;
- }
-
DSO* dsoForHandle(void* handle)
{
DSO* pdso;
@@ -766,6 +775,8 @@ version (Shared)
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
else version (NetBSD)
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
+ else version (OpenBSD)
+ strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
else version (DragonFlyBSD)
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
else version (Solaris)
@@ -795,9 +806,21 @@ version (Shared)
void* handleForName(const char* name)
{
- auto handle = .dlopen(name, RTLD_NOLOAD | RTLD_LAZY);
- version (Solaris) { }
- else if (handle !is null) .dlclose(handle); // drop reference count
+ version (Solaris) enum refCounted = false;
+ else version (OpenBSD) enum refCounted = false;
+ else enum refCounted = true;
+
+ static if (__traits(compiles, RTLD_NOLOAD))
+ enum flags = (RTLD_NOLOAD | RTLD_LAZY);
+ else
+ enum flags = RTLD_LAZY;
+
+ auto handle = .dlopen(name, flags);
+ static if (refCounted)
+ {
+ if (handle !is null)
+ .dlclose(handle); // drop reference count
+ }
return handle;
}
}
@@ -891,6 +914,7 @@ bool findDSOInfoForAddr(in void* addr, dl_phdr_info* result=null) nothrow @nogc
{
version (linux) enum IterateManually = true;
else version (NetBSD) enum IterateManually = true;
+ else version (OpenBSD) enum IterateManually = true;
else version (Solaris) enum IterateManually = true;
else enum IterateManually = false;
diff --git a/libphobos/libdruntime/gcc/sections/package.d b/libphobos/libdruntime/gcc/sections/package.d
index 4c2b542..1e887cd 100644
--- a/libphobos/libdruntime/gcc/sections/package.d
+++ b/libphobos/libdruntime/gcc/sections/package.d
@@ -27,6 +27,7 @@ version (CRuntime_Musl) version = SectionsElf;
version (CRuntime_UClibc) version = SectionsElf;
version (FreeBSD) version = SectionsElf;
version (NetBSD) version = SectionsElf;
+version (OpenBSD) version = SectionsElf;
version (DragonFlyBSD) version = SectionsElf;
version (Solaris) version = SectionsElf;
version (OSX) version = SectionsMacho;
diff --git a/libphobos/libdruntime/gcc/unwind/generic.d b/libphobos/libdruntime/gcc/unwind/generic.d
index 5315739..592b3af 100644
--- a/libphobos/libdruntime/gcc/unwind/generic.d
+++ b/libphobos/libdruntime/gcc/unwind/generic.d
@@ -269,6 +269,6 @@ version (GNU_SEH_Exceptions)
ExceptionCollidedUnwind
}
- extern(C) EXCEPTION_DISPOSITION _GCC_specific_handler(void*, void*, void*,
+ extern(C) EXCEPTION_DISPOSITION _GCC_specific_handler(void*, void*, void*, void*,
_Unwind_Personality_Fn);
}
diff --git a/libphobos/libdruntime/gcc/unwind/pe.d b/libphobos/libdruntime/gcc/unwind/pe.d
index 361ec12..b9b05cb 100644
--- a/libphobos/libdruntime/gcc/unwind/pe.d
+++ b/libphobos/libdruntime/gcc/unwind/pe.d
@@ -103,40 +103,37 @@ _Unwind_Ptr base_of_encoded_value(ubyte encoding, _Unwind_Context* context)
assert(0);
}
-// Read an unsigned leb128 value from P, *P is incremented past the value.
+// Read an unsigned leb128 value from P, P is incremented past the value.
// We assume that a word is large enough to hold any value so encoded;
// if it is smaller than a pointer on some target, pointers should not be
// leb128 encoded on that target.
-_uleb128_t read_uleb128(const(ubyte)** p)
+_uleb128_t read_uleb128(ref const(ubyte)* p)
{
- auto q = *p;
_uleb128_t result = 0;
uint shift = 0;
while (1)
{
- ubyte b = *q++;
+ ubyte b = *p++;
result |= cast(_uleb128_t)(b & 0x7F) << shift;
if ((b & 0x80) == 0)
break;
shift += 7;
}
- *p = q;
return result;
}
// Similar, but read a signed leb128 value.
-_sleb128_t read_sleb128(const(ubyte)** p)
+_sleb128_t read_sleb128(ref const(ubyte)* p)
{
- auto q = *p;
_sleb128_t result = 0;
uint shift = 0;
ubyte b = void;
while (1)
{
- b = *q++;
+ b = *p++;
result |= cast(_sleb128_t)(b & 0x7F) << shift;
shift += 7;
if ((b & 0x80) == 0)
@@ -147,69 +144,82 @@ _sleb128_t read_sleb128(const(ubyte)** p)
if (shift < result.sizeof * 8 && (b & 0x40))
result |= -(cast(_sleb128_t)1 << shift);
- *p = q;
return result;
}
-// Load an encoded value from memory at P. The value is returned in VAL;
-// The function returns P incremented past the value. BASE is as given
+// Similar, but read an unaligned value of type T.
+pragma(inline, true)
+private T read_unaligned(T)(ref const(ubyte)* p)
+{
+ version (X86) enum hasUnalignedLoads = true;
+ else version (X86_64) enum hasUnalignedLoads = true;
+ else enum hasUnalignedLoads = false;
+
+ static if (hasUnalignedLoads)
+ {
+ T result = *cast(T*)p;
+ }
+ else
+ {
+ import core.stdc.string : memcpy;
+ T result = void;
+ memcpy(&result, p, T.sizeof);
+ }
+ p += T.sizeof;
+ return result;
+}
+
+// Load an encoded value from memory at P. The function returns the
+// encoded value. P is incremented past the value. BASE is as given
// by base_of_encoded_value for this encoding in the appropriate context.
_Unwind_Ptr read_encoded_value_with_base(ubyte encoding, _Unwind_Ptr base,
- const(ubyte)** p)
+ ref const(ubyte)* p)
{
- auto q = *p;
+ auto psave = p;
_Unwind_Internal_Ptr result;
if (encoding == DW_EH_PE_aligned)
{
- _Unwind_Internal_Ptr a = cast(_Unwind_Internal_Ptr)q;
+ _Unwind_Internal_Ptr a = cast(_Unwind_Internal_Ptr)p;
a = cast(_Unwind_Internal_Ptr)((a + (void*).sizeof - 1) & - (void*).sizeof);
result = *cast(_Unwind_Internal_Ptr*)a;
- q = cast(ubyte*) cast(_Unwind_Internal_Ptr)(a + (void*).sizeof);
+ p = cast(ubyte*) cast(_Unwind_Internal_Ptr)(a + (void*).sizeof);
}
else
{
switch (encoding & 0x0f)
{
case DW_EH_PE_uleb128:
- result = cast(_Unwind_Internal_Ptr)read_uleb128(&q);
+ result = cast(_Unwind_Internal_Ptr)read_uleb128(p);
break;
case DW_EH_PE_sleb128:
- result = cast(_Unwind_Internal_Ptr)read_sleb128(&q);
+ result = cast(_Unwind_Internal_Ptr)read_sleb128(p);
break;
case DW_EH_PE_udata2:
- result = cast(_Unwind_Internal_Ptr) *cast(ushort*)q;
- q += 2;
+ result = cast(_Unwind_Internal_Ptr)read_unaligned!ushort(p);
break;
case DW_EH_PE_udata4:
- result = cast(_Unwind_Internal_Ptr) *cast(uint*)q;
- q += 4;
+ result = cast(_Unwind_Internal_Ptr)read_unaligned!uint(p);
break;
case DW_EH_PE_udata8:
- result = cast(_Unwind_Internal_Ptr) *cast(ulong*)q;
- q += 8;
+ result = cast(_Unwind_Internal_Ptr)read_unaligned!ulong(p);
break;
case DW_EH_PE_sdata2:
- result = cast(_Unwind_Internal_Ptr) *cast(short*)q;
- q += 2;
+ result = cast(_Unwind_Internal_Ptr)read_unaligned!short(p);
break;
case DW_EH_PE_sdata4:
- result = cast(_Unwind_Internal_Ptr) *cast(int*)q;
- q += 4;
+ result = cast(_Unwind_Internal_Ptr)read_unaligned!int(p);
break;
case DW_EH_PE_sdata8:
- result = cast(_Unwind_Internal_Ptr) *cast(long*)q;
- q += 8;
+ result = cast(_Unwind_Internal_Ptr)read_unaligned!long(p);
break;
case DW_EH_PE_absptr:
- if (size_t.sizeof == 8)
- goto case DW_EH_PE_udata8;
- else
- goto case DW_EH_PE_udata4;
+ result = cast(_Unwind_Internal_Ptr)read_unaligned!(size_t)(p);
+ break;
default:
__builtin_abort();
@@ -218,20 +228,19 @@ _Unwind_Ptr read_encoded_value_with_base(ubyte encoding, _Unwind_Ptr base,
if (result != 0)
{
result += ((encoding & 0x70) == DW_EH_PE_pcrel
- ? cast(_Unwind_Internal_Ptr)*p : base);
+ ? cast(_Unwind_Internal_Ptr)psave : base);
if (encoding & DW_EH_PE_indirect)
result = *cast(_Unwind_Internal_Ptr*)result;
}
}
- *p = q;
return result;
}
// Like read_encoded_value_with_base, but get the base from the context
// rather than providing it directly.
_Unwind_Ptr read_encoded_value(_Unwind_Context* context, ubyte encoding,
- const(ubyte)** p)
+ ref const(ubyte)* p)
{
auto base = base_of_encoded_value(encoding, context);
return read_encoded_value_with_base(encoding, base, p);
diff --git a/libphobos/libdruntime/rt/dmain2.d b/libphobos/libdruntime/rt/dmain2.d
index 3d5ba29..e6acbd5 100644
--- a/libphobos/libdruntime/rt/dmain2.d
+++ b/libphobos/libdruntime/rt/dmain2.d
@@ -9,6 +9,9 @@
* Source: $(DRUNTIMESRC src/rt/_dmain2.d)
*/
+/* NOTE: This file has been patched from the original DMD distribution to
+ * work with the GDC compiler.
+ */
module rt.dmain2;
private
@@ -70,70 +73,6 @@ version (CRuntime_Microsoft)
extern(C) void init_msvc();
}
-/***********************************
- * These are a temporary means of providing a GC hook for DLL use. They may be
- * replaced with some other similar functionality later.
- */
-extern (C)
-{
- void* gc_getProxy();
- void gc_setProxy(void* p);
- void gc_clrProxy();
-
- alias void* function() gcGetFn;
- alias void function(void*) gcSetFn;
- alias void function() gcClrFn;
-}
-
-version (Windows)
-{
- /*******************************************
- * Loads a DLL written in D with the name 'name'.
- * Returns:
- * opaque handle to the DLL if successfully loaded
- * null if failure
- */
- extern (C) void* rt_loadLibrary(const char* name)
- {
- return initLibrary(.LoadLibraryA(name));
- }
-
- extern (C) void* rt_loadLibraryW(const wchar_t* name)
- {
- return initLibrary(.LoadLibraryW(name));
- }
-
- void* initLibrary(void* mod)
- {
- // BUG: LoadLibrary() call calls rt_init(), which fails if proxy is not set!
- // (What? LoadLibrary() is a Windows API call, it shouldn't call rt_init().)
- if (mod is null)
- return mod;
- gcSetFn gcSet = cast(gcSetFn) GetProcAddress(mod, "gc_setProxy");
- if (gcSet !is null)
- { // BUG: Set proxy, but too late
- gcSet(gc_getProxy());
- }
- return mod;
- }
-
- /*************************************
- * Unloads DLL that was previously loaded by rt_loadLibrary().
- * Input:
- * ptr the handle returned by rt_loadLibrary()
- * Returns:
- * 1 succeeded
- * 0 some failure happened
- */
- extern (C) int rt_unloadLibrary(void* ptr)
- {
- gcClrFn gcClr = cast(gcClrFn) GetProcAddress(ptr, "gc_clrProxy");
- if (gcClr !is null)
- gcClr();
- return FreeLibrary(ptr) != 0;
- }
-}
-
/* To get out-of-band access to the args[] passed to main().
*/
diff --git a/libphobos/m4/druntime/libraries.m4 b/libphobos/m4/druntime/libraries.m4
index 743d3e3..45a56f6 100644
--- a/libphobos/m4/druntime/libraries.m4
+++ b/libphobos/m4/druntime/libraries.m4
@@ -116,7 +116,7 @@ AC_DEFUN([DRUNTIME_LIBRARIES_ATOMIC],
DCFG_HAVE_LIBATOMIC=false
LIBATOMIC=
- AS_IF([test "x$with_libatomic" != "xno"], [
+ AS_IF([test "x$enable_libatomic" != "xno" && test "x$with_libatomic" != "xno"], [
DCFG_HAVE_LIBATOMIC=true
LIBATOMIC=../../libatomic/libatomic_convenience.la
], [
@@ -145,7 +145,7 @@ AC_DEFUN([DRUNTIME_LIBRARIES_BACKTRACE],
AS_HELP_STRING([--without-libbacktrace],
[Do not use libbacktrace in core.runtime (default: auto)]))
- AS_IF([test "x$with_libbacktrace" != "xno"], [
+ AS_IF([test "x$enable_libbacktrace" != "xno" && test "x$with_libbacktrace" != "xno"], [
LIBBACKTRACE=../../libbacktrace/libbacktrace.la
gdc_save_CPPFLAGS=$CPPFLAGS
diff --git a/libphobos/m4/druntime/os.m4 b/libphobos/m4/druntime/os.m4
index ed93e30..351558d 100644
--- a/libphobos/m4/druntime/os.m4
+++ b/libphobos/m4/druntime/os.m4
@@ -149,17 +149,31 @@ AC_DEFUN([DRUNTIME_OS_ARM_EABI_UNWINDER],
# substitute DCFG_MINFO_BRACKETING.
AC_DEFUN([DRUNTIME_OS_MINFO_BRACKETING],
[
+ AC_REQUIRE([DRUNTIME_OS_DETECT])
+
AC_LANG_PUSH([C])
AC_MSG_CHECKING([for minfo section bracketing])
+ case "$druntime_cv_target_os" in
+ darwin*)
+ section="__DATA,__minfodata"
+ start="section\$start\$__DATA\$__minfodata"
+ stop="section\$end\$__DATA\$__minfodata"
+ ;;
+ *)
+ section="minfo"
+ start="__start_minfo"
+ stop="__stop_minfo"
+ ;;
+ esac
AC_LINK_IFELSE([AC_LANG_SOURCE([
- void* module_info_ptr __attribute__((section ("minfo")));
- extern void* __start_minfo __attribute__((visibility ("hidden")));
- extern void* __stop_minfo __attribute__((visibility ("hidden")));
+ void* module_info_ptr __attribute__((section ("$section")));
+ extern void* start_minfo __asm__("$start") __attribute__((visibility ("hidden")));
+ extern void* stop_minfo __asm__("$stop") __attribute__((visibility ("hidden")));
int main()
{
// Never run, just to prevent compiler from optimizing access
- return &__start_minfo == &__stop_minfo;
+ return (int)(&stop_minfo - &start_minfo);
}
])],
[AC_MSG_RESULT([yes])
diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE
index 4f6a168..6f97404 100644
--- a/libphobos/src/MERGE
+++ b/libphobos/src/MERGE
@@ -1,4 +1,4 @@
-f89dc217a680fa1a83f2999fea04b7c562f705ee
+e6907ff3e28d3c43469c46df4a0426726ecb8631
The first line of this file holds the git revision number of the last
merge done from the dlang/phobos repository.
diff --git a/libphobos/src/std/process.d b/libphobos/src/std/process.d
index b0310a8..9cbeca8e 100644
--- a/libphobos/src/std/process.d
+++ b/libphobos/src/std/process.d
@@ -1358,7 +1358,8 @@ version (Windows)
/**
-Flags that control the behaviour of $(LREF spawnProcess) and
+Flags that control the behaviour of process creation functions in this
+module. Most flags only apply to $(LREF spawnProcess) and
$(LREF spawnShell).
Use bitwise OR to combine flags.
@@ -1433,6 +1434,21 @@ enum Config
Calling $(LREF wait) or $(LREF kill) with the resulting $(D Pid) is invalid.
*/
detached = 64,
+
+ /**
+ By default, the $(LREF execute) and $(LREF executeShell) functions
+ will capture child processes' both stdout and stderr. This can be
+ undesirable if the standard output is to be processed or otherwise
+ used by the invoking program, as `execute`'s result would then
+ contain a mix of output and warning/error messages.
+
+ Specify this flag when calling `execute` or `executeShell` to
+ cause invoked processes' stderr stream to be sent to $(REF stderr,
+ std,stdio), and only capture and return standard output.
+
+ This flag has no effect on $(LREF spawnProcess) or $(LREF spawnShell).
+ */
+ stderrPassThrough = 128,
}
@@ -2487,7 +2503,11 @@ private auto executeImpl(alias pipeFunc, Cmd, ExtraPipeFuncArgs...)(
import std.array : appender;
import std.typecons : Tuple;
- auto p = pipeFunc(commandLine, Redirect.stdout | Redirect.stderrToStdout,
+ auto redirect = (config & Config.stderrPassThrough)
+ ? Redirect.stdout
+ : Redirect.stdout | Redirect.stderrToStdout;
+
+ auto p = pipeFunc(commandLine, redirect,
env, config, workDir, extraArgs);
auto a = appender!(ubyte[])();
@@ -2551,6 +2571,30 @@ private auto executeImpl(alias pipeFunc, Cmd, ExtraPipeFuncArgs...)(
assert(r3.output.empty);
}
+@system unittest
+{
+ // Temporarily disable output to stderr so as to not spam the build log.
+ import std.stdio : stderr;
+ import std.typecons : Tuple;
+ import std.file : readText;
+ import std.traits : ReturnType;
+
+ ReturnType!executeShell r;
+ auto tmpname = uniqueTempPath;
+ auto t = stderr;
+ // Open a new scope to minimize code ran with stderr redirected.
+ {
+ stderr.open(tmpname, "w");
+ scope(exit) stderr = t;
+ r = executeShell("echo D rox>&2", null, Config.stderrPassThrough);
+ }
+ assert(r.status == 0);
+ assert(r.output.empty);
+ auto witness = readText(tmpname);
+ import std.ascii : newline;
+ assert(witness == "D rox" ~ newline, "'" ~ witness ~ "'");
+}
+
@safe unittest
{
import std.typecons : Tuple;
@@ -2750,8 +2794,7 @@ private struct TestScript
string path;
}
-version (unittest)
-private string uniqueTempPath() @safe
+package(std) string uniqueTempPath() @safe
{
import std.file : tempDir;
import std.path : buildPath;
diff --git a/libphobos/testsuite/libphobos.thread/fiber_guard_page.d b/libphobos/testsuite/libphobos.thread/fiber_guard_page.d
index 9f754e1..ca54a19 100644
--- a/libphobos/testsuite/libphobos.thread/fiber_guard_page.d
+++ b/libphobos/testsuite/libphobos.thread/fiber_guard_page.d
@@ -1,13 +1,15 @@
// { dg-options "-O0" }
// { dg-shouldfail "segv or bus error" }
import core.thread;
+import core.sys.posix.signal;
import core.sys.posix.sys.mman;
// this should be true for most architectures
// (taken from core.thread)
-version = StackGrowsDown;
+version (GNU_StackGrowsDown)
+ version = StackGrowsDown;
-enum stackSize = 4096;
+enum stackSize = MINSIGSTKSZ;
// Simple method that causes a stack overflow
void stackMethod()
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index b860491..7edf117 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,8 @@
+2021-04-19 H.J. Lu <hjl.tools@gmail.com>
+
+ * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt:
+ Updated.
+
2021-04-17 Jakub Jelinek <jakub@redhat.com>
* config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Update.
diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
index 5a7518f..b00ab2c 100644
--- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
@@ -199,6 +199,14 @@ FUNC:_ZNK11__gnu_debug16_Error_formatter17_M_get_max_lengthEv@@GLIBCXX_3.4.10
FUNC:_ZNK11__gnu_debug16_Error_formatter8_M_errorEv@@GLIBCXX_3.4
FUNC:_ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv@@GLIBCXX_3.4
FUNC:_ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_@@GLIBCXX_3.4
+FUNC:_ZNKRSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@@GLIBCXX_3.4.5
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4
FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwj@@GLIBCXX_3.4
@@ -856,19 +864,29 @@ FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_
FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4.21
FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS2_EEv@@GLIBCXX_3.4.26
FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEixEj@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE13get_allocatorEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29
+FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE13get_allocatorEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21
FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21
FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21
FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21
FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21
FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29
FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21
FUNC:_ZNKSt7__cxx117collateIcE10_M_compareEPKcS3_@@GLIBCXX_3.4.21
FUNC:_ZNKSt7__cxx117collateIcE10do_compareEPKcS3_S3_S3_@@GLIBCXX_3.4.21
@@ -1300,6 +1318,14 @@ FUNC:_ZNKSt9type_info10__do_catchEPKS_PPvj@@GLIBCXX_3.4
FUNC:_ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv@@GLIBCXX_3.4
FUNC:_ZNKSt9type_info14__is_pointer_pEv@@GLIBCXX_3.4
FUNC:_ZNKSt9type_info15__is_function_pEv@@GLIBCXX_3.4
+FUNC:_ZNOSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNOSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNOSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNOSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNOSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNOSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNOSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNOSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
FUNC:_ZNSaIcEC1ERKS_@@GLIBCXX_3.4
FUNC:_ZNSaIcEC1Ev@@GLIBCXX_3.4
FUNC:_ZNSaIcEC2ERKS_@@GLIBCXX_3.4
@@ -1401,6 +1427,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEv@@GLIBCXX_3.4.29
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
@@ -1665,6 +1692,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
+FUNC:_ZNSs7reserveEv@@GLIBCXX_3.4.29
FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
@@ -2564,7 +2592,9 @@ FUNC:_ZNSt15_List_node_base7_M_hookEPS_@@GLIBCXX_3.4.14
FUNC:_ZNSt15_List_node_base7reverseEv@@GLIBCXX_3.4
FUNC:_ZNSt15_List_node_base8transferEPS_S0_@@GLIBCXX_3.4
FUNC:_ZNSt15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
+FUNC:_ZNSt15__exception_ptr13exception_ptr10_M_releaseEv@@CXXABI_1.3.13
FUNC:_ZNSt15__exception_ptr13exception_ptr4swapERS0_@@CXXABI_1.3.3
+FUNC:_ZNSt15__exception_ptr13exception_ptr9_M_addrefEv@@CXXABI_1.3.13
FUNC:_ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE@@CXXABI_1.3.3
FUNC:_ZNSt15__exception_ptr13exception_ptrC1EPv@@CXXABI_1.3.11
FUNC:_ZNSt15__exception_ptr13exception_ptrC1ERKS0_@@CXXABI_1.3.3
@@ -3000,6 +3030,7 @@ FUNC:_ZNSt25__codecvt_utf8_utf16_baseIwED1Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt25__codecvt_utf8_utf16_baseIwED2Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt28__atomic_futex_unsigned_base19_M_futex_notify_allEPj@@GLIBCXX_3.4.21
FUNC:_ZNSt28__atomic_futex_unsigned_base19_M_futex_wait_untilEPjjbNSt6chrono8durationIxSt5ratioILx1ELx1EEEENS2_IxS3_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.21
+FUNC:_ZNSt28__atomic_futex_unsigned_base26_M_futex_wait_until_steadyEPjjbNSt6chrono8durationIxSt5ratioILx1ELx1EEEENS2_IxS3_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.29
FUNC:_ZNSt3_V214error_categoryD0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt3_V214error_categoryD1Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt3_V214error_categoryD2Ev@@GLIBCXX_3.4.21
@@ -3245,6 +3276,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEjjRKS4_@@GLIB
FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEjjRKS4_jj@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEjjjc@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7reserveEj@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7reserveEv@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8_M_eraseEjj@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8pop_backEv@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcj@@GLIBCXX_3.4.21
@@ -3395,6 +3427,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEjjRKS4_@@GLIB
FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEjjRKS4_jj@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7reserveEv@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8_M_eraseEjj@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9_M_appendEPKwj@@GLIBCXX_3.4.21
@@ -3470,6 +3503,7 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE14__xfer_bufptrsD1E
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE14__xfer_bufptrsD2Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE15_M_update_egptrEv@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4.21
@@ -3481,15 +3515,25 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCX
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9underflowEv@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_RKS3_@@GLIBCXX_3.4.29
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_RKS3_@@GLIBCXX_3.4.29
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21
@@ -3501,6 +3545,7 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE14__xfer_bufptrsD1E
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE14__xfer_bufptrsD2Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE15_M_update_egptrEv@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4.21
@@ -3512,15 +3557,25 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCX
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9underflowEv@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_RKS3_@@GLIBCXX_3.4.29
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_RKS3_@@GLIBCXX_3.4.29
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21
@@ -3596,85 +3651,115 @@ FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EEC2ERKNS_12basic_stringIcSt11char_tra
FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED1Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED2Ev@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26
+FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26
+FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEaSEOS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26
+FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26
+FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEaSEOS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21
+FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21
FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21
@@ -4015,6 +4100,9 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4
FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4
FUNC:_ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.11
FUNC:_ZNVSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.11
+FUNC:_ZSt10from_charsPKcS0_RdSt12chars_format@@GLIBCXX_3.4.29
+FUNC:_ZSt10from_charsPKcS0_ReSt12chars_format@@GLIBCXX_3.4.29
+FUNC:_ZSt10from_charsPKcS0_RfSt12chars_format@@GLIBCXX_3.4.29
FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4
FUNC:_ZSt11_Hash_bytesPKvjj@@CXXABI_1.3.5
FUNC:_ZSt13get_terminatev@@GLIBCXX_3.4.20
@@ -4035,6 +4123,8 @@ FUNC:_ZSt16__throw_bad_castv@@GLIBCXX_3.4
FUNC:_ZSt16generic_categoryv@@GLIBCXX_3.4.11
FUNC:_ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.6
FUNC:_ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.6
+FUNC:_ZSt17__istream_extractIwSt11char_traitsIwEEvRSt13basic_istreamIT_T0_EPS3_i@@GLIBCXX_3.4.29
+FUNC:_ZSt17__istream_extractRSiPci@@GLIBCXX_3.4.29
FUNC:_ZSt17__throw_bad_allocv@@GLIBCXX_3.4
FUNC:_ZSt17__verify_groupingPKcjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21
FUNC:_ZSt17__verify_groupingPKcjRKSs@@GLIBCXX_3.4.10
@@ -4072,6 +4162,7 @@ FUNC:_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20
FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14
FUNC:_ZSt25notify_all_at_thread_exitRSt18condition_variableSt11unique_lockISt5mutexE@@GLIBCXX_3.4.21
FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4
+FUNC:_ZSt28__throw_bad_array_new_lengthv@@GLIBCXX_3.4.29
FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4
FUNC:_ZSt2wsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4
FUNC:_ZSt2wsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4
@@ -4089,6 +4180,15 @@ FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RNSt7__cx
FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EES4_@@GLIBCXX_3.4.21
FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCXX_3.4
FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@@GLIBCXX_3.4
+FUNC:_ZSt8to_charsPcS_d@@GLIBCXX_3.4.29
+FUNC:_ZSt8to_charsPcS_dSt12chars_format@@GLIBCXX_3.4.29
+FUNC:_ZSt8to_charsPcS_dSt12chars_formati@@GLIBCXX_3.4.29
+FUNC:_ZSt8to_charsPcS_e@@GLIBCXX_3.4.29
+FUNC:_ZSt8to_charsPcS_eSt12chars_format@@GLIBCXX_3.4.29
+FUNC:_ZSt8to_charsPcS_eSt12chars_formati@@GLIBCXX_3.4.29
+FUNC:_ZSt8to_charsPcS_f@@GLIBCXX_3.4.29
+FUNC:_ZSt8to_charsPcS_fSt12chars_format@@GLIBCXX_3.4.29
+FUNC:_ZSt8to_charsPcS_fSt12chars_formati@@GLIBCXX_3.4.29
FUNC:_ZSt9has_facetINSt7__cxx1110moneypunctIcLb0EEEEbRKSt6locale@@GLIBCXX_3.4.21
FUNC:_ZSt9has_facetINSt7__cxx1110moneypunctIwLb0EEEEbRKSt6locale@@GLIBCXX_3.4.21
FUNC:_ZSt9has_facetINSt7__cxx117collateIcEEEbRKSt6locale@@GLIBCXX_3.4.21
@@ -4388,6 +4488,7 @@ OBJECT:0:CXXABI_1.3.1
OBJECT:0:CXXABI_1.3.10
OBJECT:0:CXXABI_1.3.11
OBJECT:0:CXXABI_1.3.12
+OBJECT:0:CXXABI_1.3.13
OBJECT:0:CXXABI_1.3.2
OBJECT:0:CXXABI_1.3.3
OBJECT:0:CXXABI_1.3.4
@@ -4420,6 +4521,7 @@ OBJECT:0:GLIBCXX_3.4.25
OBJECT:0:GLIBCXX_3.4.26
OBJECT:0:GLIBCXX_3.4.27
OBJECT:0:GLIBCXX_3.4.28
+OBJECT:0:GLIBCXX_3.4.29
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
OBJECT:0:GLIBCXX_3.4.5