On Oct 18, 2010, at 10:12 PM, lina.zhao wrote:

> now endianness has been checked! see the patch
>> On Sun, Oct 17, 2010 at 7:13 PM, lina.zhao <[email protected]> wrote:
>>  
>>> Hi,
>>> 
>>> arm use __NR_sync_file_range2 not __NR_sync_file_range for system call.
>>> the test casecheck __NR_sync_file_range for arm,
>>> So test react "System doesn't support" for arm.
>>> but actually arm use __NR_sync_file_range2 to support the system call.
>>> 
>>> powerpc is big endian, arm is small endian, so the parameter dealing is
>>> different.
>>>    
>> 
>>    Not true. ARM can be biendian, just like MIPS...
>>    A better test needs to be derived for endianness than this.
>> -Garrett
>> 
>>  
> 
> From cc07d890ae71837512731a0bf31006db8d717f8a Mon Sep 17 00:00:00 2001
> From: Lina Zhao <[email protected]>
> Date: Tue, 19 Oct 2010 10:44:39 +0800
> Subject: [PATCH] sync_file_rang01.c changed for arm
> 
> ---
> .../syscalls/sync_file_range/sync_file_range01.c   |   36 ++++++++++++++------
> 1 files changed, 25 insertions(+), 11 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c 
> b/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c
> index 53619b5..a66ce85 100644
> --- a/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c
> +++ b/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c
> @@ -96,12 +96,13 @@
> #include "usctest.h"
> #include "linux_syscall_numbers.h"
> 
> -#if defined(__powerpc__) || defined(__powerpc64__)
> +#if defined(__powerpc__) || defined(__powerpc64__)|| defined(__arm__)
> #ifndef __NR_sync_file_range2
> #define __NR_sync_file_range2 -1      //DUMMY VALUE
> int arch_support = 0;         //Architecure is not supported
> #else
> int arch_support = 1;         //Architecture is supported
> +char call_num = 1;           //Use __NR_sync_file_range2 as syscall
> #endif
> #else
> #ifndef __NR_sync_file_range
> @@ -109,6 +110,7 @@ int arch_support = 1;             //Architecture is 
> supported
> int arch_support = 0;
> #else
> int arch_support = 1;
> +char call_num = 0;
> #endif
> #endif
> 
> @@ -139,7 +141,7 @@ struct test_data_t {
>       int error;
> } test_data[] = {
>       {
>       &bfd, 0, 1, SYNC_FILE_RANGE_WRITE, EBADF}, {
>       &sfd, 0, 1, SYNC_FILE_RANGE_WAIT_AFTER, ESPIPE}, {
>       &filed, -1, 1, SYNC_FILE_RANGE_WAIT_BEFORE, EINVAL}, {
>       &filed, 0, -1, SYNC_FILE_RANGE_WRITE, EINVAL}, {
> @@ -238,22 +240,33 @@ static inline long syncfilerange(int fd, off64_t 
> offset, off64_t nbytes,
>                                unsigned int flags)
> {
> 
> -#if (defined(__powerpc64__) || defined(__powerpc__)) && (__WORDSIZE==32)
> +     if (call_num){
> +#if (__WORDSIZE==64)
> 
> -     return syscall(__NR_sync_file_range2, fd, flags, (int)(offset >> 32),
> -                    (int)offset, (int)(nbytes >> 32), (int)nbytes);
> +     return syscall(__NR_sync_file_range2, fd, flags, offset, nbytes);
> 
> -#elif (defined(__powerpc64__) || defined(__powerpc__)) && (__WORDSIZE==64)
> +#elif (__WORDSIZE==32)
> 
> -     return syscall(__NR_sync_file_range2, fd, flags, offset, nbytes);
> -#else
> +     if (check_endian())     //little_endian 
> +             return syscall(__NR_sync_file_range2, fd, flags,(int)offset,
> +                     (int)(offset >> 32),(int)nbytes,(int)(nbytes >> 32));
> +     else                    //big_endian
> +             return syscall(__NR_sync_file_range2, fd, flags, (int)(offset 
> >> 32),
> +                     (int)offset, (int)(nbytes >> 32), (int)nbytes);
> +#endif
> +     else
> 
>       return syscall(__NR_sync_file_range, fd, offset, nbytes, flags);
> -#endif
> 
> -     return 0;
> }
> 
> +static int check_endian( void )
> +{
> +     int x = 1;
> +     return ((char)(x) == x);
> +}
> +
> +
> /******************************************************************************/
> /*                                                                            
> */
> /* Function:    main                                                          
> */
> @@ -294,7 +307,8 @@ int main(int ac,          /* number of command line 
> parameters                      */
>       }
> #else
>       /* For other archs, need kernel version > 2.6.16 */
> -
> +     if (arch_support)printf("arch supported!\n");
> +     if (tst_kvercmp(2, 6, 17) < 0)printf("kernel cmp fail\n");
>       if (!arch_support || (tst_kvercmp(2, 6, 17) < 0)) {
>               tst_resm(TCONF, "System doesn't support execution of the test");
>               tst_exit();

        Close... here's one solution I've seen:

http://c-faq.com/misc/endiantest.html

        And FWIW this should be available as a generalized function / macro in 
include / lib .
Cheers,
-Garrett
------------------------------------------------------------------------------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly 
Flex(R) Builder(TM)) enable the development of rich applications that run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to