Re: [committed 0/2] CRIS: Fix compilation warnings that recent gcc treats as errors

Hans-Peter Nilsson <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
> Date: Thu, 21 Dec 2023 18:37:14 +0100
> From: Torbjorn SVENSSON <[email protected]>

> Hello Hans-Peter,

Hi.

> I finally had some time to go back to this topic.

I don't have time to dig into this just yet.  As I mentioned
before, I'll get back to you, please be patient.

I'll still answer your questions below even though I fear
they lead off into a tangent.  I'll get back to this and add
a proposed solution.  Until then:

> On 2023-12-15 05:24, Hans-Peter Nilsson wrote:
> >> Date: Wed, 6 Dec 2023 20:52:48 +0100
> >> From: Torbjorn SVENSSON <[email protected]>
> >> What problems are there with the _getentropy stubs that I've submitted?
> > 
> > I hope to get into details later, as indicated by the "film
> > at 11".  The problem is fairly visible with a standard
> > test-run for cris-elf (with simulator and baseboard
> > cris-sim): all libstdc++ tests fail with a linker warning,
> > as its configure tests detect a presence of _getentropy but
> > its reference trigs the stub warning (the .gnu.warning
> > thing).  I *think* it's also visible for a build with
> > arm-eabi+arm-sim which made me wonder how you configured and
> > tested (you may have stated, I haven't looked).  Adding a
> > patch to "prune" the stub-warning in libstdc++ prune.exp
> > only exposes runtime errors when _getentropy is actually
> > called.  Those errors are not present when _getentropy is
> > not detected (and not used).
> 
> 
> When I run the tests, I supply all the syscalls functions in my fixture 
> to avoid the stubs warnings. This is nothing new to the _getentropy 
> function though as the same problem is visible with for example _close.

Not sure I get you here.  If your "fixture" doesn't do that
for _close, you haven't implemented a proper syscall
function for _close.

But, you shouldn't have to add special machinery, it should
already be there in your dejagnu baseboard file.

Care to share it?  What simulator are you targetting?  The
arm-sim in the gdb project notoriously doesn't support
anything but the default GCC target, not -mcpu=cortex-m4, so
I think you don't test with 'make check
RUNTESTFLAGS=--target_board=arm-sim', i.e. not with the
arm-sim.exp provided by dejagnu, right?

To wit, if you use something that gives other results than
when configuring for --target=arm-eabi and testing with
RUNTESTFLAGS=--target_board=arm-sim then your gcc testing
isn't matching the expectations in libstdc++-v3 for a newlib
target (IOW "not correct").

Some outdated information which should still help you get a
working environment is in gcc.gnu.org/simtest-howto.html
(but I suggest build and install sim+binutils separately,
with just newlib and gcc combined).

> If I try to link the following minimal C application with the 
> arm-none-eabi target, I get the below warnings.
> 
> $ cat foo.c
> int main() {
>      return 0;
> }
> 
> 
> $ .../bin/arm-none-eabi-g++ -mcpu=cortex-m4 -mfloat-abi=soft -o foo.elf 
> foo.c --specs=nosys.specs
> .../bin/../lib/gcc/arm-none-eabi/14.0.0/../../../../arm-none-eabi/bin/ld: 
> .../bin/../lib/gcc/arm-none-eabi/14.0.0/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a(libc_a-closer.o): 
> in function `_close_r':
> (.text._close_r+0xc): warning: _close is not implemented and will always 
> fail
> .../bin/../lib/gcc/arm-none-eabi/14.0.0/../../../../arm-none-eabi/bin/ld: 
> .../bin/../lib/gcc/arm-none-eabi/14.0.0/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a(libc_a-lseekr.o): 
> in function `_lseek_r':
> (.text._lseek_r+0x10): warning: _lseek is not implemented and will 
> always fail
> .../bin/../lib/gcc/arm-none-eabi/14.0.0/../../../../arm-none-eabi/bin/ld: 
> .../bin/../lib/gcc/arm-none-eabi/14.0.0/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a(libc_a-readr.o): 
> in function `_read_r':
> (.text._read_r+0x10): warning: _read is not implemented and will always fail
> .../bin/../lib/gcc/arm-none-eabi/14.0.0/../../../../arm-none-eabi/bin/ld: 
> .../bin/../lib/gcc/arm-none-eabi/14.0.0/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a(libc_a-writer.o): 
> in function `_write_r':
> (.text._write_r+0x10): warning: _write is not implemented and will 
> always fail
> 
> 
> Do you mean that you do not get these stub warnings for the cris-elf target?

(When *configuring* libstdc++ I'd get those warnings, that's
why linking tests are disabled for newlib there.)

But, when called as part of the testsuite, *no*: not with a
proper syscall library, such as when "-sim3" is passed when
linking (see the libsyslinux.a stuff in libgloss/cris and
e.g. LIB_SPEC in gcc/config/cris/cris.h), as happens when
running with --target_board=cris-sim.

Don't arm-eabi+arm-sim get lots of libstdc++-v3 errors that
weren't there before your newlib _getentropy patch?

Can you share your full environment such that I can repeat
your observations?

> If you do get them, in what way is _getentropy different from for 
> example _close?

_close is implemented in libsyslinux.a, _getentropy not.
(No syscall for that so the stub warning is "correct".)

> (the above is produced using newlib 7a45daa, GCC d0603dfe9 and binutils 
> 80d2ef0c4)

Again, all my observations are repeatable by anyone:
- Install binutils for --target=cris-elf --prefix=<whatever>
- Ditto the cris simulator in gdb.
- Configure a "combined" tree with gcc and newlib.
- Build gcc+newlib using the same --target=cris-elf --prefix=<whatever>
- 'make check RUNTESTFLAGS=--target_board=cris-sim'.
- Observe the multitude of libstdc++-v3 tests failing that
weren't there before your _getentropy patch.

Please share your full testing environment such that I can
repeat your observations.

I'll get back with a proper solution, one where
arm-eabi+arm-sim, cris-elf+cris-sim and your own environment
all work (hopefully, or help you get a proper testing
environment), before next summer.

brgds, H-p
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.