Re: [LTP] Realtime test failure

Garrett Cooper
2010-11-15T05:20:20Z

2010/11/14 Mitani <mitani@ryobi.co.jp>:
>> -----Original Message-----
>> From: Garrett Cooper [mailto:yanegomi@gmail.com]
>> Sent: Monday, November 15, 2010 12:03 PM
>> To: Mitani
>> Subject: Re: [LTP] Realtime test failure
>>
>> On Sun, Nov 14, 2010 at 6:54 PM, Mitani <mitani@ryobi.co.jp> wrote:
>> > Hi,
>> >
>> > "realtime" build failed in my system with git "ltp-f388d33.tar.gz":
>> > ------------<RHEL4.8 - x86>
>> > make[2]: Entering directory
>> `/home/LTP/ltp-dev-20101112/testcases/realtime'
>> > make -C lib -f
>> "/home/LTP/ltp-dev-20101112/testcases/realtime/lib/Makefile"
>> > all
>> > make[3]: Entering directory
>> > `/home/LTP/ltp-dev-20101112/testcases/realtime/lib'
>> > gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall -D_GNU_SOURCE
>> > -I/home/LTP/ltp-dev-20101112/testcases/realtime/lib/../include
>> > -I../../../include -I../../../include  -c -o librttest.o librttest.c
>> > In file included from librttest.c:43:
>> >
>> /home/LTP/ltp-dev-20101112/testcases/realtime/lib/../include/librtte
>> st.h: In
>> > function `atomic_add':
>> >
>> /home/LTP/ltp-dev-20101112/testcases/realtime/lib/../include/librtte
>> st.h:119
>> > : warning: implicit declaration of function `__sync_add_and_fetch'
>> > gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall -D_GNU_SOURCE
>> > -I/home/LTP/ltp-dev-20101112/testcases/realtime/lib/../include
>> > -I../../../include -I../../../include  -c -o libstats.o libstats.c
>> > In file included from libstats.c:47:
>> >
>> /home/LTP/ltp-dev-20101112/testcases/realtime/lib/../include/librtte
>> st.h: In
>> > function `atomic_add':
>> >
>> /home/LTP/ltp-dev-20101112/testcases/realtime/lib/../include/librtte
>> st.h:119
>> > : warning: implicit declaration of function `__sync_add_and_fetch'
>> > if [ -z "librttest.o libstats.o" ] ; then \
>> >        echo "Cowardly refusing to create empty archive"; \
>> >        exit 1; \
>> > fi
>> > ar -rc "librealtime.a" librttest.o libstats.o
>> > ranlib "librealtime.a"
>> > make[3]: Leaving directory
>> > `/home/LTP/ltp-dev-20101112/testcases/realtime/lib'
>> > make[3]: Entering directory
>> > `/home/LTP/ltp-dev-20101112/testcases/realtime/func'
>> > make[4]: Entering directory
>> > `/home/LTP/ltp-dev-20101112/testcases/realtime/func/async_handler'
>> > gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall -D_GNU_SOURCE
>> > -I/home/LTP/ltp-dev-20101112/testcases/realtime/include
>> > -I../../../../include -I../../../../include
>> > -L/home/LTP/ltp-dev-20101112/testcases/realtime/lib
>> -L../../../../lib
>> > async_handler.c   -lrealtime -lpthread -lrt -lm -o async_handler
>> > In file included from async_handler.c:42:
>> > /home/LTP/ltp-dev-20101112/testcases/realtime/include/librttest.h:
>> In
>> > function `atomic_add':
>> >
>> /home/LTP/ltp-dev-20101112/testcases/realtime/include/librttest.h:11
>> 9:
>> > warning: implicit declaration of function `__sync_add_and_fetch'
>> >
>> /home/LTP/ltp-dev-20101112/testcases/realtime/lib/librealtime.a(libr
>> ttest.o)
>> > (.text+0x1a7): In function `create_thread':
>> >
>> /home/LTP/ltp-dev-20101112/testcases/realtime/lib/../include/librtte
>> st.h:119
>> > : undefined reference to `__sync_add_and_fetch'
>> > collect2: ld returned 1 exit status
>> > make[4]: *** [async_handler] Error 1
>> > make[4]: Leaving directory
>> > `/home/LTP/ltp-dev-20101112/testcases/realtime/func/async_handler'
>> > make[3]: *** [all] Error 2
>> > make[3]: Leaving directory
>> > `/home/LTP/ltp-dev-20101112/testcases/realtime/func'
>> > make[2]: *** [all] Error 2
>> > make[2]: Leaving directory
>> `/home/LTP/ltp-dev-20101112/testcases/realtime'
>> > make[1]: *** [all] Error 2
>> > make[1]: Leaving directory `/home/LTP/ltp-dev-20101112/testcases'
>> > make: *** [testcases-all] Error 2
>> > ------------
>> >
>> > "realtime" build failed in:
>> > ------------
>> > RHEL4.8 -- x86, x86_64, ia64
>> > RHEL5.4 -- x86
>> > ------------
>> >
>> > "realtime" build succeeded in:
>> > ------------
>> > RHEL5.4 -- x86_64, ia64
>> > ------------
>> >
>> > It is caused by "__sync_add_and_fetch".
>> >
>> > In following URL, "__sync_add_and_fetch" is "built-in functions for
>> > atomic memory access". And It is provided in "gcc":
>> >   http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html
>> >
>> > There is "__sync_add_and_fetch" in gcc4.1.2 (It is the gcc of RHEL5.1
>> -
>> > RHEL5.4).
>> > And there is not "__sync_add_and_fetch" in gcc3.4.6 (It is the gcc of
>> > RHEL4.8)
>> >
>> > In addition, "__sync_add_and_fetch" is for 64 bit environment.
>> >
>> >
>> http://stackoverflow.com/questions/130740/link-error-when-compiling-
>> gcc-atom
>> > ic-operation-in-32-bit-mode
>> >
>> >   http://gcc.gnu.org/wiki/Atomic
>> >
>> > Perhaps, the judgment that "realtime" must be built or not depends on
>> > gcc's version (> 4.0) and 64 bits environment, I think.
>>
>> Could you please attach your testcases/realtime/config.log and
>> testcases/realtime/include/realtime_config.h ?
>> Thanks,
>> -Garrett
>
>
> I understood.
> Thank you and sorry for my insufficient information.
>
> I attach following files:
>   - config.log        (RHEL4.8-x86)
>   - realtime_config.h (RHEL4.8-x86)
>   - config.log        (RHEL5.5-x86)
>   - realtime_config.h (RHEL5.5-x86)

Could you please try compiling the following C sources in both scenarios?
Thanks,
-Garrett

#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdlib.h>
int main(void) {
char *c;
return __sync_add_and_fetch(c, 1);
}

------------------------------------------------------------------------------
Centralized Desktop Delivery: Dell and VMware Reference Architecture
Simplifying enterprise desktop deployment and management using
Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
client virtualization framework.