[PATCH] libtests/dl06: Add -lm

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Nov 10 07:32:46 UTC 2020


On 09/11/2020 23:42, Chris Johns wrote:

> On 9/11/20 6:24 pm, Sebastian Huber wrote:
>> On 09/11/2020 02:23, Chris Johns wrote:
>>
>>> On 3/11/20 3:39 am, Sebastian Huber wrote:
>>>> There is probably something wrong with this test program.  If it is compiled
>>>> without function/data sections, no optimization, and no linker garbage
>>>> collection, then there is an undefined reference to atan2() and tan().
>>> These symbols are referenced in the loaded module ...
>>>
>>> https://git.rtems.org/rtems/tree/testsuites/libtests/dl06/dl06-o2.c
>>>
>>> This test gets rtems-ld with the RAP format to collect the atan1 and tan code
>>> into the loaded module. They should not be present in the base image. The libm
>>> library is used because it is_not_  part of the standard libraries linked and is
>>> available everywhere.
>>>
>>>> Fix this issue by adding -lm.
>>> Is the error linking the base kernel image or the RAP loadable module?
>>>
>>> If it is the loadable module and this is how you add the libraries to be
>>> searched to the rtems-ld command then the fix is needed and there is no problem.
>>> If the error was in the base kernel image then I suggest something else is wrong
>>> because those symbols should not be present in the base image. If the build
>>> system can support options for just rtems-ld then adding it there would be good.
>> The error is in this command:
>>
>>
>> [4044/4050] Processing link:
>> build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-o1.o
>> build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-o2.o
>> build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-tar.o
>> build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/init.o
>> build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl-load.o
>> build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-sym.o ->
>> build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06.exe
>> 08:21:03 runner ['/build/rtems/6/bin/arm-rtems6-gcc', '-qnolinkcmds', '-T',
>> 'linkcmds.realview_pbx_a9_qemu',
>> '/home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-o1.o',
>> '/home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-o2.o',
> These should not be linked into the base image. They are in the RAP image in
> dl06-tar.o.
What shouldn't be linked in? The entire object files or only some 
functions in it?
>
>> '/home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-tar.o',
>> '/home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/init.o',
>> '/home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl-load.o',
>> '/home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-sym.o',
>> '-o/home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06.exe',
>> '-Wl,--wrap=printf', '-Wl,--wrap=puts', '-L.', '-lrtemscpu', '-lrtemsbsp',
>> '-lrtemstest', '-qrtems', '-march=armv7-a', '-mthumb', '-mfpu=neon',
>> '-mfloat-abi=hard', '-mtune=cortex-a9',
>> '-L/home/EB/sebastian_h/git-rtems-6/bsps/arm/shared/start',
>> '-L/home/EB/sebastian_h/git-rtems-6/bsps/arm/realview-pbx-a9/start']
>> /build/rtems/6/lib/gcc/arm-rtems6/10.2.1/../../../../arm-rtems6/bin/ld:
>> /home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-o2.o:
>> in function `dl_o2_func2':
>> /home/EB/sebastian_h/git-rtems-6/testsuites/libtests/dl06/dl06-o2.c:31:
>> undefined reference to `atan2'
>> /build/rtems/6/lib/gcc/arm-rtems6/10.2.1/../../../../arm-rtems6/bin/ld:
>> /home/EB/sebastian_h/git-rtems-6/build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl06/dl06-o2.o:
>> in function `dl_o2_func3':
>>
>> /home/EB/sebastian_h/git-rtems-6/testsuites/libtests/dl06/dl06-o2.c:37:
>> undefined reference to `tan'
>>
>> I used the following config.ini:
>>
>> [arm/realview_pbx_a9_qemu]
>> BUILD_LIBTESTS = True
>> OPTIMIZATION_FLAGS = -O0 -g
>> LDFLAGS =
>>
>>> More of a concern is no error. I wonder if the code is being inlined when there
>>> is FPU support. Maybe the test needs to create a library linking to it to be
>>> more robust?
>> Using these functions without -fno-builtin is not really robust.
> Would adding a pragma for this option to dl06-o1.c and dl06-o2.c be acceptable
> as a solution?
I am not sure if a pragma works for these options. We can add 
-fno-builtin=tan -fno-builtin=atan2. We can use also some global 
volatile variables which seems to work for the math tests.

-- 
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: https://embedded-brains.de/datenschutzerklaerung/



More information about the devel mailing list