diff mbox series

libstdc++: testsuite: use -lbsd for net_ts on RTEMS

Message ID orczf1b798.fsf@lxoliva.fsfla.org
State New
Headers show
Series libstdc++: testsuite: use -lbsd for net_ts on RTEMS | expand

Commit Message

Alexandre Oliva June 22, 2022, 5:24 a.m. UTC
Networking functions that net_ts tests rely on are defined in libbsd
on RTEMS, so link with it.

Regstrapped on x86_64-linux-gnu, also tested with a cross to
aarch64-rtems6.  Ok to install?


for  libstdc++-v3/ChangeLog

	* testsuite/lib/dg-options.exp (add_options_for_net_ts): Add
	-lbsd for RTEMS targets.
---
 libstdc++-v3/testsuite/lib/dg-options.exp |    6 ++++++
 1 file changed, 6 insertions(+)

Comments

Jonathan Wakely June 22, 2022, 9:11 a.m. UTC | #1
On Wed, 22 Jun 2022 at 06:25, Alexandre Oliva via Libstdc++
<libstdc++@gcc.gnu.org> wrote:
>
>
> Networking functions that net_ts tests rely on are defined in libbsd
> on RTEMS, so link with it.
>
> Regstrapped on x86_64-linux-gnu, also tested with a cross to
> aarch64-rtems6.  Ok to install?

OK, thanks.
Sebastian Huber June 23, 2022, 9:01 a.m. UTC | #2
On 22/06/2022 07:24, Alexandre Oliva via Gcc-patches wrote:
> +    } elseif { [istarget *-*-rtems*] } {
> +	# Adding -Wl,--gc-sections would enable a few more tests to
> +	# link, but all of them fail at runtime anyway, because the
> +	# io_context ctor calls pipe(), which always fails, and thus
> +	# the ctor throws a system error.
> +	return "$flags -lbsd"

Using -Wl,--gc-sections is mandatory if you want to link against 
libbsd.a. In general, it is recommended for RTEMS applications.

For pipe() support in RTEMS, you currently need the

#define CONFIGURE_IMFS_ENABLE_MKFIFO

application configuration option.
Jonathan Wakely June 23, 2022, 9:06 a.m. UTC | #3
On Thu, 23 Jun 2022, 10:02 Sebastian Huber, <
sebastian.huber@embedded-brains.de> wrote:

> On 22/06/2022 07:24, Alexandre Oliva via Gcc-patches wrote:
> > +    } elseif { [istarget *-*-rtems*] } {
> > +     # Adding -Wl,--gc-sections would enable a few more tests to
> > +     # link, but all of them fail at runtime anyway, because the
> > +     # io_context ctor calls pipe(), which always fails, and thus
> > +     # the ctor throws a system error.
> > +     return "$flags -lbsd"
>
> Using -Wl,--gc-sections is mandatory if you want to link against
> libbsd.a. In general, it is recommended for RTEMS applications.
>
> For pipe() support in RTEMS, you currently need the
>
> #define CONFIGURE_IMFS_ENABLE_MKFIFO
>
> application configuration option.
>


It would also be fine to just xfail the networking tests for rtems. Our
implementation of the Networking TS is incomplete, buggy, and unlikely to
evolve much until the C++ committee makes progress on standardized
networking.

Anybody who wants to use the Networking TS model has to use Boost.Asio for
real work, our partial implementation isn't good enough. So making it work
and pass tests on rtems isn't important.
Alexandre Oliva June 23, 2022, 11:26 a.m. UTC | #4
On Jun 23, 2022, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:

> On Thu, 23 Jun 2022, 10:02 Sebastian Huber, <
> sebastian.huber@embedded-brains.de> wrote:

>> On 22/06/2022 07:24, Alexandre Oliva via Gcc-patches wrote:
>> > +    } elseif { [istarget *-*-rtems*] } {
>> > +     # Adding -Wl,--gc-sections would enable a few more tests to
>> > +     # link, but all of them fail at runtime anyway, because the
>> > +     # io_context ctor calls pipe(), which always fails, and thus
>> > +     # the ctor throws a system error.
>> > +     return "$flags -lbsd"
>> 
>> Using -Wl,--gc-sections is mandatory if you want to link against
>> libbsd.a.

Weirdly, it worked for all other testcases.

>> For pipe() support in RTEMS, you currently need the

>> #define CONFIGURE_IMFS_ENABLE_MKFIFO

Thanks, I'll reach out to the person in charge of our rtems
configuration for this project, and suggest enabling it on our end.


> It would also be fine to just xfail the networking tests for rtems.

I was using something like this internally.  Regstrapped on
x86_64-linux-gnu, also tested with a cross to aarch64-rtems6.  Ok to
install?


libstdc++: xfail io_context/pipe users on rtems

From: Alexandre Oliva <oliva@adacore.com>

A handful of tests fail on rtems because pipe() always returns -1, and
the io_context ctor throws a system error when pipe() fails.


for  libstdc++-v3/ChangeLog

	* testsuite/experimental/net/timer/waitable/cons.cc: xfail on
	RTEMS.
	* testsuite/experimental/net/timer/waitable/dest.cc: Likewise.
	* testsuite/experimental/net/timer/waitable/ops.cc: Likewise.
	* testsuite/experimental/net/internet/resolver/ops/lookup.cc:
	Likewise.
	* testsuite/experimental/net/internet/resolver/ops/reverse.cc:
	Likewise.

TN: V617-003
---
 .../net/internet/resolver/ops/lookup.cc            |    1 +
 .../net/internet/resolver/ops/reverse.cc           |    1 +
 .../experimental/net/timer/waitable/cons.cc        |    1 +
 .../experimental/net/timer/waitable/dest.cc        |    1 +
 .../experimental/net/timer/waitable/ops.cc         |    1 +
 5 files changed, 5 insertions(+)

diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
index eb411dea8369c..7684c21012dfb 100644
--- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
+++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
@@ -18,6 +18,7 @@
 // { dg-do run { target c++14 } }
 // { dg-require-effective-target net_ts_ip }
 // { dg-add-options net_ts }
+// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/internet>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
index 361df2676efc8..3ef51f9ebe848 100644
--- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
+++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
@@ -18,6 +18,7 @@
 // { dg-do run { target c++14 } }
 // { dg-require-effective-target net_ts_ip }
 // { dg-add-options net_ts }
+// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/internet>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
index 40ae5b965a2b0..4e055eadb20a0 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++14 } }
 // { dg-add-options libatomic }
+// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/timer>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
index f571f4a8d861a..2f2e425fa0b33 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++14 } }
 // { dg-add-options libatomic }
+// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/timer>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
index 97ab629b893a9..a52f3259193c4 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++14 } }
 // { dg-add-options libatomic }
+// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/timer>
 #include <testsuite_hooks.h>
Jonathan Wakely June 23, 2022, 11:40 a.m. UTC | #5
On Thu, 23 Jun 2022 at 12:26, Alexandre Oliva via Libstdc++
<libstdc++@gcc.gnu.org> wrote:
>
> On Jun 23, 2022, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
>
> > On Thu, 23 Jun 2022, 10:02 Sebastian Huber, <
> > sebastian.huber@embedded-brains.de> wrote:
>
> >> On 22/06/2022 07:24, Alexandre Oliva via Gcc-patches wrote:
> >> > +    } elseif { [istarget *-*-rtems*] } {
> >> > +     # Adding -Wl,--gc-sections would enable a few more tests to
> >> > +     # link, but all of them fail at runtime anyway, because the
> >> > +     # io_context ctor calls pipe(), which always fails, and thus
> >> > +     # the ctor throws a system error.
> >> > +     return "$flags -lbsd"
> >>
> >> Using -Wl,--gc-sections is mandatory if you want to link against
> >> libbsd.a.
>
> Weirdly, it worked for all other testcases.
>
> >> For pipe() support in RTEMS, you currently need the
>
> >> #define CONFIGURE_IMFS_ENABLE_MKFIFO
>
> Thanks, I'll reach out to the person in charge of our rtems
> configuration for this project, and suggest enabling it on our end.
>
>
> > It would also be fine to just xfail the networking tests for rtems.
>
> I was using something like this internally.  Regstrapped on
> x86_64-linux-gnu, also tested with a cross to aarch64-rtems6.  Ok to
> install?

OK, thanks.


>
>
> libstdc++: xfail io_context/pipe users on rtems
>
> From: Alexandre Oliva <oliva@adacore.com>
>
> A handful of tests fail on rtems because pipe() always returns -1, and
> the io_context ctor throws a system error when pipe() fails.
>
>
> for  libstdc++-v3/ChangeLog
>
>         * testsuite/experimental/net/timer/waitable/cons.cc: xfail on
>         RTEMS.
>         * testsuite/experimental/net/timer/waitable/dest.cc: Likewise.
>         * testsuite/experimental/net/timer/waitable/ops.cc: Likewise.
>         * testsuite/experimental/net/internet/resolver/ops/lookup.cc:
>         Likewise.
>         * testsuite/experimental/net/internet/resolver/ops/reverse.cc:
>         Likewise.
>
> TN: V617-003
> ---
>  .../net/internet/resolver/ops/lookup.cc            |    1 +
>  .../net/internet/resolver/ops/reverse.cc           |    1 +
>  .../experimental/net/timer/waitable/cons.cc        |    1 +
>  .../experimental/net/timer/waitable/dest.cc        |    1 +
>  .../experimental/net/timer/waitable/ops.cc         |    1 +
>  5 files changed, 5 insertions(+)
>
> diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
> index eb411dea8369c..7684c21012dfb 100644
> --- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
> +++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
> @@ -18,6 +18,7 @@
>  // { dg-do run { target c++14 } }
>  // { dg-require-effective-target net_ts_ip }
>  // { dg-add-options net_ts }
> +// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
>
>  #include <experimental/internet>
>  #include <testsuite_hooks.h>
> diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
> index 361df2676efc8..3ef51f9ebe848 100644
> --- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
> +++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
> @@ -18,6 +18,7 @@
>  // { dg-do run { target c++14 } }
>  // { dg-require-effective-target net_ts_ip }
>  // { dg-add-options net_ts }
> +// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
>
>  #include <experimental/internet>
>  #include <testsuite_hooks.h>
> diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
> index 40ae5b965a2b0..4e055eadb20a0 100644
> --- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
> +++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
> @@ -17,6 +17,7 @@
>
>  // { dg-do run { target c++14 } }
>  // { dg-add-options libatomic }
> +// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
>
>  #include <experimental/timer>
>  #include <testsuite_hooks.h>
> diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
> index f571f4a8d861a..2f2e425fa0b33 100644
> --- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
> +++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
> @@ -17,6 +17,7 @@
>
>  // { dg-do run { target c++14 } }
>  // { dg-add-options libatomic }
> +// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
>
>  #include <experimental/timer>
>  #include <testsuite_hooks.h>
> diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
> index 97ab629b893a9..a52f3259193c4 100644
> --- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
> +++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
> @@ -17,6 +17,7 @@
>
>  // { dg-do run { target c++14 } }
>  // { dg-add-options libatomic }
> +// { dg-xfail-if "io_context requires a working pipe" { *-*-rtems* } }
>
>  #include <experimental/timer>
>  #include <testsuite_hooks.h>
>
>
> --
> Alexandre Oliva, happy hacker                https://FSFLA.org/blogs/lxo/
>    Free Software Activist                       GNU Toolchain Engineer
> Disinformation flourishes because many people care deeply about injustice
> but very few check the facts.  Ask me about <https://stallmansupport.org>
>
Alexandre Oliva June 23, 2022, 12:39 p.m. UTC | #6
On Jun 23, 2022, Jonathan Wakely <jwakely@redhat.com> wrote:

> On Thu, 23 Jun 2022 at 12:26, Alexandre Oliva via Libstdc++
> <libstdc++@gcc.gnu.org> wrote:

>> I was using something like this internally.  Regstrapped on
>> x86_64-linux-gnu, also tested with a cross to aarch64-rtems6.  Ok to
>> install?

> OK, thanks.

Sorry, I goofed when testing this, and another internal xfail machinery
hid the bug: I had to use dg-xfail-run-if instead.

I caught that later, but it looks like I failed to refresh the xfail
patchfiles I posted :-(

I'm going ahead and check it in assuming this is what you meant to
approve, but only after catching some sleep, because it's been a long
day and I don't want any more goofs ;-)


libstdc++: xfail io_context/pipe users on rtems

From: Alexandre Oliva <oliva@adacore.com>

A handful of tests fail on rtems because pipe() always returns -1, and
the io_context ctor throws a system error when pipe() fails.


for  libstdc++-v3/ChangeLog

	* testsuite/experimental/net/timer/waitable/cons.cc: xfail on
	RTEMS.
	* testsuite/experimental/net/timer/waitable/dest.cc: Likewise.
	* testsuite/experimental/net/timer/waitable/ops.cc: Likewise.
	* testsuite/experimental/net/internet/resolver/ops/lookup.cc:
	Likewise.
	* testsuite/experimental/net/internet/resolver/ops/reverse.cc:
	Likewise.

TN: V617-003
---
 .../net/internet/resolver/ops/lookup.cc            |    1 +
 .../net/internet/resolver/ops/reverse.cc           |    1 +
 .../experimental/net/timer/waitable/cons.cc        |    1 +
 .../experimental/net/timer/waitable/dest.cc        |    1 +
 .../experimental/net/timer/waitable/ops.cc         |    1 +
 5 files changed, 5 insertions(+)

diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
index eb411dea8369c..0ac9cb3513d7e 100644
--- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
+++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
@@ -18,6 +18,7 @@
 // { dg-do run { target c++14 } }
 // { dg-require-effective-target net_ts_ip }
 // { dg-add-options net_ts }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/internet>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
index 361df2676efc8..dfdf855c68cd7 100644
--- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
+++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
@@ -18,6 +18,7 @@
 // { dg-do run { target c++14 } }
 // { dg-require-effective-target net_ts_ip }
 // { dg-add-options net_ts }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/internet>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
index 40ae5b965a2b0..f013278675d33 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++14 } }
 // { dg-add-options libatomic }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/timer>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
index f571f4a8d861a..dc557d01a9136 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++14 } }
 // { dg-add-options libatomic }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/timer>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
index 97ab629b893a9..f7549def38925 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++14 } }
 // { dg-add-options libatomic }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/timer>
 #include <testsuite_hooks.h>
Alexandre Oliva June 27, 2022, 1:29 p.m. UTC | #7
On Jun 23, 2022, Alexandre Oliva <oliva@adacore.com> wrote:

> Sorry, I goofed when testing this, and another internal xfail machinery
> hid the bug: I had to use dg-xfail-run-if instead.

And then, having enabled pipe(), disabled the internal xfail machinery,
and added -Wl,--gc-sections after -lbsd as recommended, I found that
net/timer/waitable/cons.cc passed; that the other waitable tests failed
to link because of poll(), not pipes; and that the resolver tests failed
for other reasons.

So here's the adjusted patch I'm using now, and that I'll check in
shortly.


libstdc++: xfail experimental/net tests on rtems

Some net/timer/waitable tests fail on rtems because poll() is not
available.

The above, as well as net/internet/resolver/ops tests and
net/timer/waitable/cons.cc, will fail early at runtime unless mkfifo
is enabled in the RTEMS configuration, because the io_context ctor
throws when pipe() fails.

However, even enabling pipes and adjusting the net_ts link command to
use --gc-sections for -lbsd as recommended, both
net/internet/resolver/ops still fail at runtime.

Regstrapped on x86_64-linux-gnu, also tested with a cross to
aarch64-rtems6.  Ok to install?


for  libstdc++-v3/ChangeLog

	* testsuite/lib/dg-options.exp (add_options_for_net_ts):
	Add -Wl,--gc-sections for RTEMS targets.
	* testsuite/experimental/net/timer/waitable/dest.cc: Link-time
	xfail on RTEMS.
	* testsuite/experimental/net/timer/waitable/ops.cc: Likewise.
	* testsuite/experimental/net/internet/resolver/ops/lookup.cc:
	Execution-time xfail on RTEMS.
	* testsuite/experimental/net/internet/resolver/ops/reverse.cc:
	Likewise.
---
 .../net/internet/resolver/ops/lookup.cc            |    1 +
 .../net/internet/resolver/ops/reverse.cc           |    1 +
 .../experimental/net/timer/waitable/dest.cc        |    1 +
 .../experimental/net/timer/waitable/ops.cc         |    1 +
 libstdc++-v3/testsuite/lib/dg-options.exp          |    6 +-----
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
index eb411dea8369c..0ac9cb3513d7e 100644
--- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
+++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
@@ -18,6 +18,7 @@
 // { dg-do run { target c++14 } }
 // { dg-require-effective-target net_ts_ip }
 // { dg-add-options net_ts }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/internet>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
index 361df2676efc8..dfdf855c68cd7 100644
--- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
+++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
@@ -18,6 +18,7 @@
 // { dg-do run { target c++14 } }
 // { dg-require-effective-target net_ts_ip }
 // { dg-add-options net_ts }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
 
 #include <experimental/internet>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
index f571f4a8d861a..384f768c2b56d 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++14 } }
 // { dg-add-options libatomic }
+// { dg-xfail-if "poll not available" { *-*-rtems* } }
 
 #include <experimental/timer>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
index 97ab629b893a9..815ad71578035 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++14 } }
 // { dg-add-options libatomic }
+// { dg-xfail-if "poll not available" { *-*-rtems* } }
 
 #include <experimental/timer>
 #include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index b61c4c0cb8fcd..cc312edc172e4 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -281,11 +281,7 @@ proc add_options_for_net_ts { flags } {
     if { [istarget *-*-solaris2*] } {
 	return "$flags -lsocket -lnsl"
     } elseif { [istarget *-*-rtems*] } {
-	# Adding -Wl,--gc-sections would enable a few more tests to
-	# link, but all of them fail at runtime anyway, because the
-	# io_context ctor calls pipe(), which always fails, and thus
-	# the ctor throws a system error.
-	return "$flags -lbsd"
+	return "$flags -lbsd -Wl,--gc-sections"
     }
     return $flags
 }
diff mbox series

Patch

diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index 203bb0dfed505..15f37da468a5b 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -253,6 +253,12 @@  proc add_options_for_net_ts { flags } {
     # libsocket and libnsl for networking applications.
     if { [istarget *-*-solaris2*] } {
 	return "$flags -lsocket -lnsl"
+    } elseif { [istarget *-*-rtems*] } {
+	# Adding -Wl,--gc-sections would enable a few more tests to
+	# link, but all of them fail at runtime anyway, because the
+	# io_context ctor calls pipe(), which always fails, and thus
+	# the ctor throws a system error.
+	return "$flags -lbsd"
     }
     return $flags
 }