Adding fenv support for ARM

Joel Sherrill joel at rtems.org
Sat May 16 14:39:00 UTC 2020


On Fri, May 15, 2020, 5:59 PM Eshan Dhawan <eshandhawan51 at gmail.com> wrote:

>
>
> On Fri, May 15, 2020 at 2:22 AM Eshan Dhawan <eshandhawan51 at gmail.com>
> wrote:
>
>>
>>
>> On Wed, May 13, 2020 at 7:40 PM Joel Sherrill <joel at rtems.org> wrote:
>>
>>> National free hint day!!!
>>>
>>> Look above the line that is reported. You will see __BEGIN_DECL. It
>>> isn't defined. It is intended to expand to the __cplusplus wrapper.
>>>
>>> After you fix this, you will sequentially find 2 other things to change
>>> in this file.
>>>
>>> I have made those changes when a new error occurs from the assembler in
>> arm thumb mode
>> There is no support for vfp instructions in arm thumb.
>>
>> http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/BABGHDBB.html
>> So in which file will the compiler instructions given in the page
>> <http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/BABGHDBB.html>
>> added?
>>
> FreeBSD has added file and architecture-specific flags in their
> makefile.inc
> https://github.com/freebsd/freebsd/blob/master/lib/msun/arm/Makefile.inc
> How will it be added in newlib
> I tried adding the flags -mfpu=vfp -mfloat-abi=softfp (used in FreeBSD) to
> makefile.in but no effect.
>

This isn't going to work with newlib. They don't specify CPU flags that way.

The fenv code is going to have to compile for every multilib variant built
by arm-rtems and arm-eabi. You will have to use conditionals based on the
flags gcc uses to indicate the various cpu features. This command should be
close to how you you dump them.

gcc -dM -E - </dev/null

Add a CPU flag and see how the setting change.

You can also look in rtems score cpu arm for examples since the core arm
code will be dealing with these.

--joel

>
> thanks
> -Eshan
>
>> Errors :
>>
>> make[9]: Entering directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib/libm/machine/arm'
>> arm-rtems5-gcc
>> -B/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib/
>> -isystem
>> /home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib/targ-include
>> -isystem /home/eshan/development/newlib/newlib-cygwin/newlib/libc/include
>>  -mthumb -DPACKAGE_NAME=\"newlib\" -DPACKAGE_TARNAME=\"newlib\"
>> -DPACKAGE_VERSION=\"3.3.0\" -DPACKAGE_STRING=\"newlib\ 3.3.0\"
>> -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I.
>> -I../../../../../../../newlib-cygwin/newlib/libm/machine/arm -I
>> ../../../../../../../newlib-cygwin/newlib/libm/machine/arm/../../../../newlib/libm/common
>> -fno-builtin -mfpu=vfpv2 -ffunction-sections -fdata-sections
>>  -D_COMPILING_NEWLIB -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVIDED
>> -DSIGNAL_PROVIDED -DGETREENT_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED
>> -DHAVE_NANOSLEEP -DHAVE_BLKSIZE -DHAVE_FCNTL -DHAVE_ASSERT_FUNC
>> -D_NO_GETLOGIN -D_NO_GETPWENT -D_NO_GETUT -D_NO_GETPASS -D_NO_SIGSET
>> -D_NO_WORDEXP -D_NO_POPEN -D_NO_POSIX_SPAWN -DHAVE_INIT_FINI      -g -O2
>>  -mthumb -c -o lib_a-fenv-vfp.o `test -f 'fenv-vfp.c' || echo
>> '../../../../../../../newlib-cygwin/newlib/libm/machine/arm/'`fenv-vfp.c
>> /tmp/ccEHiFws.s: Assembler messages:
>> /tmp/ccEHiFws.s:37: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:48: Error: selected processor does not support `vmsr
>> fpscr,r3' in Thumb mode
>> /tmp/ccEHiFws.s:81: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:119: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:134: Error: selected processor does not support `vmsr
>> fpscr,r3' in Thumb mode
>> /tmp/ccEHiFws.s:169: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:182: Error: selected processor does not support `vmsr
>> fpscr,r3' in Thumb mode
>> /tmp/ccEHiFws.s:217: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:251: Error: selected processor does not support `vmrs
>> r0,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:288: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:303: Error: selected processor does not support `vmsr
>> fpscr,r0' in Thumb mode
>> /tmp/ccEHiFws.s:340: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:374: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:390: Error: selected processor does not support `vmsr
>> fpscr,r3' in Thumb mode
>> /tmp/ccEHiFws.s:424: Error: selected processor does not support `vmsr
>> fpscr,r3' in Thumb mode
>> /tmp/ccEHiFws.s:457: Error: selected processor does not support `vmrs
>> r1,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:466: Error: selected processor does not support `vmsr
>> fpscr,r3' in Thumb mode
>> /tmp/ccEHiFws.s:478: Error: selected processor does not support `vmrs
>> r2,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:503: Error: selected processor does not support `vmsr
>> fpscr,r3' in Thumb mode
>> /tmp/ccEHiFws.s:543: Error: selected processor does not support `vmrs
>> r0,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:559: Error: selected processor does not support `vmsr
>> fpscr,r3' in Thumb mode
>> /tmp/ccEHiFws.s:595: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> /tmp/ccEHiFws.s:612: Error: selected processor does not support `vmsr
>> fpscr,r2' in Thumb mode
>> /tmp/ccEHiFws.s:647: Error: selected processor does not support `vmrs
>> r3,fpscr' in Thumb mode
>> Makefile:476: recipe for target 'lib_a-fenv-vfp.o' failed
>> make[9]: *** [lib_a-fenv-vfp.o] Error 1
>> make[9]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib/libm/machine/arm'
>> Makefile:324: recipe for target 'all-recursive' failed
>> make[8]: *** [all-recursive] Error 1
>> make[8]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib/libm/machine'
>> Makefile:553: recipe for target 'all-recursive' failed
>> make[7]: *** [all-recursive] Error 1
>> make[7]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib/libm'
>> Makefile:641: recipe for target 'all-recursive' failed
>> make[6]: *** [all-recursive] Error 1
>> make[6]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib'
>> Makefile:452: recipe for target 'all' failed
>> make[5]: *** [all] Error 2
>> make[5]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib'
>> Makefile:1260: recipe for target 'multi-do' failed
>> make[4]: *** [multi-do] Error 1
>> make[4]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/newlib'
>> Makefile:1176: recipe for target 'all-multi' failed
>> make[3]: *** [all-multi] Error 2
>> make[3]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/newlib'
>> Makefile:452: recipe for target 'all' failed
>> make[2]: *** [all] Error 2
>> make[2]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/newlib'
>> Makefile:8491: recipe for target 'all-target-newlib' failed
>> make[1]: *** [all-target-newlib] Error 2
>> make[1]: Leaving directory
>> '/home/eshan/development/newlib/c-arm-rtems5-newlib'
>> Makefile:878: recipe for target 'all' failed
>> make: *** [all] Error 2
>>
>> -Eshan
>>
>>> Then we need to make a decision whether the static inline versions of
>>> the methods in sys/fenv.h are appropriate for newlib or not.
>>>
>>> --joel
>>>
>>> On Tue, May 12, 2020 at 5:20 PM Joel Sherrill <joel at rtems.org> wrote:
>>>
>>>> Gedare is right but one more piece of information is needed. When
>>>> newlib is being built, it lays target dependent files on top of generic
>>>> ones. So the default sys/fenv.h is replaced with something like
>>>> libc/machine/arm/sys/fenv.h. Make sure that
>>>> /home/eshan/development/newlib/newlib-cygwin/newlib/libc/include/fenv.h is
>>>> in fact the file you think it should be.
>>>>
>>>> Also look at what is supposed to be in the generic fenv.h and
>>>> <sys/fenv.h>. You will probably have to tweak it some.
>>>>
>>>> Check out what is in x86_64/fenv.h and riscv/fenv.h with respect to the
>>>> default environment variable. It looks to be declared differently in the
>>>> other ports so you may have to make it match.
>>>>
>>>> But more output does help.
>>>>
>>>> --joel
>>>>
>>>>
>>>>
>>>> On Tue, May 12, 2020 at 4:53 PM Gedare Bloom <gedare at rtems.org> wrote:
>>>>
>>>>> Take the first error reported, and show what is being compiled. You've
>>>>> trimmed off too much preceding this to know what is being compiled and
>>>>> how this might be influencing your error.
>>>>>
>>>>> The specific error you're getting is often due to some syntax errors
>>>>> preceding the line shown.
>>>>>
>>>>> On Tue, May 12, 2020 at 2:59 PM Eshan Dhawan <eshandhawan51 at gmail.com>
>>>>> wrote:
>>>>> >
>>>>> > Hello everyone,
>>>>> > After adding the files and compiling. I am
>>>>> > getting a few errors which I am not able to rectify.
>>>>> > If you could take a look and tell how to sort them.
>>>>> >
>>>>> > link to newlib's git repo:
>>>>> https://github.com/eshandhawan51/newlib-cygwin/tree/add_fenv_support
>>>>> >
>>>>> > errors :
>>>>> >
>>>>> > In file included from
>>>>> /home/eshan/development/newlib/newlib-cygwin/newlib/libc/include/fenv.h:15:0,
>>>>> >                  from
>>>>> ../../../../../../newlib-cygwin/newlib/libm/fenv/feclearexcept.c:57:
>>>>> >
>>>>> /home/eshan/development/newlib/c-arm-rtems5-newlib/arm-rtems5/thumb/newlib/targ-include/sys/fenv.h:82:1:
>>>>> error: expected '=', ',', ';', 'asm' or '__attribute__' before 'extern'
>>>>> >  extern const fenv_t *_fe_dfl_env;
>>>>> >  ^~~~~~
>>>>> > In file included from
>>>>> ../../../../../../newlib-cygwin/newlib/libm/fenv/feclearexcept.c:57:0:
>>>>> >
>>>>> /home/eshan/development/newlib/newlib-cygwin/newlib/libc/include/fenv.h:22:1:
>>>>> error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
>>>>> >  int feclearexcept(int excepts);
>>>>> >  ^~~
>>>>> >
>>>>> > thanks
>>>>> > -Eshan
>>>>> > On Sat, May 9, 2020 at 2:53 AM Joel Sherrill <joel at rtems.org> wrote:
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> On Thu, May 7, 2020 at 1:33 PM Eshan Dhawan <
>>>>> eshandhawan51 at gmail.com> wrote:
>>>>> >>>
>>>>> >>> Hello everyone,
>>>>> >>> This the tread to discuss adding fenv support for ARM architecture
>>>>> in newlib.
>>>>> >>>
>>>>> >>> Link to previous thread:
>>>>> https://lists.rtems.org/pipermail/devel/2020-March/058473.html
>>>>> >>>
>>>>> >>> ---FreeBSD Source
>>>>> >>> # https://github.com/freebsd/freebsd/tree/master/lib/msun/arm
>>>>> >>> #
>>>>> https://github.com/freebsd/freebsd/blob/master/sys/arm/include/ieeefp.h
>>>>> >>> ---NetBSD Source
>>>>> >>> # https://github.com/NetBSD/src/tree/trunk/lib/libm/arch/arm
>>>>> >>>
>>>>> >>> --- Musl has no implementation for fenv support for ARM  in it
>>>>> >>>
>>>>> >>> After going through the implementations both FreeBSD and NetBSD
>>>>> have a stub implementation.
>>>>> >>> But then FreeBSD implementation seems to be more portable compared
>>>>> to that in NetBSD.
>>>>> >>>
>>>>> >>> Should I start porting it from FreeBSD?
>>>>> >>> And which ARM BSP should I use for testing the changes?
>>>>> >>> Currently, I have xilinx_zynq_a9_qemu build
>>>>> >>
>>>>> >>
>>>>> >> I think the FreeBSD implementation is the one to use. It looks to
>>>>> support hard and soft floating point implementations.
>>>>> >>
>>>>> >> I think the fenv.h file there will have to be worked on so some of
>>>>> the contents go into sys or machine/fenv.h. There is a portable fenv.h.
>>>>> >>
>>>>> >>>
>>>>> >>>
>>>>> >>> There would also be a requirement to discuss where to place the
>>>>> files in Newlib.
>>>>> >>
>>>>> >>
>>>>> >> Not much to discuss. It should go into
>>>>> newlib-cygwin/newlib/libm/machine/arm.
>>>>> >>>
>>>>> >>>
>>>>> >>> Thanks
>>>>> >>> -Eshan
>>>>> >>>
>>>>> > _______________________________________________
>>>>> > devel mailing list
>>>>> > devel at rtems.org
>>>>> > http://lists.rtems.org/mailman/listinfo/devel
>>>>>
>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200516/30a4f6da/attachment-0001.html>


More information about the devel mailing list