日本語 English
 
Home >> Release Notes >> Release Notes: SH-Linux MMU v0801 Tool Chain
Release Notes: SH-Linux MMU v0801 Tool Chain

SH-Linux MMU v0702

July 02, 2008

KPIT Cummins Infosystems Limited is releasing SH-Linux MMU v0801, a cross compiler toolchain for Renesas SuperH series of microcontrollers with Memory Management Unit (MMU).

SALIENT FEATURES:

1.

SH-Linux MMU v0801 is based on gcc-4.2.2(released), binutils-2.18-r1 and glibc-2.7(released) using kernel headers-2.6.24.2

2.

SH-Linux MMU v0801 supports little endian SH4 and SH4A targets.

3.

The latest patches have been applied to the gcc, binutils and glibc sources.

4.

The toolchain is specifically built for Renesas SuperH devices with MMU.

5.

The toolchain supports Native POSIX Thread Library (NPTL).

6.

The toolchain has been tested for Linux kernel version 2.6.24.2.

7.

The SH-Linux MMU v0801 supports both x86/Linux Gentoo and Fedora Core version 5 platforms.

 

ABOUT SH-Linux MMU v0801:

Release version:

SH-Linux MMU v0801

Platforms Supported:

Gentoo Linux x86 distribution 2007.0 and Fedora Core version 5

Languages:

C, C++

SH Target supported:

SH4, SH4A

Endian supported:

Little endian support for SH4 and SH4A targets

Object File Formats:

ELF

Please register at http://www.kpitgnutools.com/ for free technical support.
Please contact http://www.kpitgnutools.com/feedback.php for any feedback or suggestions.

 

CHANGES IN THIS RELEASE:

This section describes the enhancements and the fixed problems in this release.

·         The SH-Linux MMU v0801 toolchain is built for x86/Linux Gentoo distribution.

·         The SH-Linux MMU v0801 toolchain can also be installed on x86/Linux Fedora Core system.

 

Please refer to the 'Getting Started- SH-Linux Tools' on www.kpitgnutools.com for installation details.

KNOWN PROBLEMS:

This section describes the known problems. We intend to fix the known problems in our future releases.

1. The following test case generates different output when compiled using optimization '-O2' and '-O0'.  Same behavior is observed when compiled with 'i686-pc-gnu-linux-gcc' v4.2 with '-O2' and   '-O0'.

             class TBase1 {
                public:
                    int a,b;
                    TBase1(int i= 1, int j = 2) : a(i),b(j){ };
                    int foo() { return a+b ;}
            };
            struct TBase2 {
                int c,d;
                TBase2(int i = 3, int j = 4) : c(i), d(j) { }
            };

            struct A_STRUCT : public virtual TBase1, virtual public TBase2 { };
            struct B_STRUCT :public A_STRUCT { };
            int compare(int a,int b,int tcase )
            {
                if (a == b) printf("\nCase %d : OK\n",tcase);
                else printf("\nCase %d : ERROR\n",tcase);
            }
            int main()
            {
                int tcase =1;
                B_STRUCT s;
                compare(s.A_STRUCT::a,1,tcase);
                ++s.TBase2::c;
                ((A_STRUCT &)s).TBase2::d--;
                tcase++;
                compare(((A_STRUCT &)s).TBase2::c, 4,tcase);
                tcase++;
                compare(s.d, 3,tcase);
            }

 Workaround: Please use the switch '-fno-strict-aliasing', while compiling the code.

2. The following test case generates compile time error.

     Same behavior is observed when compiled with 'i686-pc-gnu-linux-gcc' v4.2

           int f(int, int);

           int main(void)
           {
                int f(int, int = 23);
                int
f(int = 2, int);
           }

3. The following test case generates compilation error stating 'Segmentation fault (program cc1)' 

    when compiled using optimization '-O2'.

    Same behavior is observed when compiled with 'i686-pc-gnu-linux-gcc' v4.2 with '-O2'

            int x4, x5;
            main()
            {
                int i=(int)&x4+(int)&x5+200;
                if (i!=0){
                    i=(int)&x4-(int)&x5;
                    if (i!=0)
                        printf("O.K.\n");
                }
            }

 Workaround: Please use the switch '-fno-gcse', while compiling the code.

4The following test case generates segmentation fault on execution when compiled using

     optimization '-O2'. Same behaviour is observed when compiled with 'i686-pc-gnu-linux-gcc' 

     v4.2 with '-O2'

            typedef struct lp1{
                 union{
                     short ss;
                     long sl;
                     }u1;
                 union{
                     unsigned short us;
                     unsigned long ul;
                     }u2;
            }LPTEST;
            typedef struct arr{
                 int a[8];
                 }ARR;
            main()
            {
                 LPTEST l,l2;
                 ARR b[3];
                 l.u2.us=3;
                 l.u1.sl=0;
                 l2.u1.ss=8;
                 while (l.u1.sl<l.u2.us){
                     l.u2.ul=0;
                     while (l.u2.ul<l2.u1.ss){
                         b[l.u1.sl].a[l.u2.ul]=2;
                         ++l.u2.ul;
                     }
                     ++l.u1.sl;
                 }
                 check(&b, 2);
            }
            check(ARR *st,int val)
            {
                 int i;
                 for (i=0; i<3; ++i);
            }

5. The following test case generates different output when compiled using optimization '-O2' and       

   '-O0'. Same behavior is observed when compiled with 'i686-pc-gnu-linux-gcc' v4.2 with '-O2' 

    and '-O0'.

           #include<stdio.h>

         int main()

         {

                char cc=8;

                float IF = 16.0;

                printf("%d",(char) (cc * IF));

         }

 

6. The compilation of mplayer-1.0_rc2_p25993 package fails for 'm4a' target with optimization level 

    with 'O3' and  'O4'.

 Workaround: Please remove '-fomit-frame-pointer' switch while compiling 'libavcodec/dsputil.c' source

                   file.

 

7. The following test cases generate compilation error when compiled using 'sh4-unknown-linux-gcc'.

    This is  the expected behavior of the GNUSH Application Binary Interface (ABI).

 A.          void f1(int,...);
            main()
            {
                f1(3,11L,22,(char)33);
            }
            void f1(int n_ptrs, ...)
            {
                int reti;
                va_list ap;
                char *c;
                va_start(ap,n_ptrs);
                reti=va_arg(ap,int);
                c = (char*)ap+1;
                c = ap +1 ;
            }

B.          #include<stdio.h>
            #include <cstdarg>

            static va_list T;
            int main(void)
            {
                if( T == 0 ) printf("OK\n");
                else printf( "Type static va_list not set to zero\n" );
            }

C.         #include <stdarg.h>
            extern void f1(int,...);
            double f;
            main()
            {
                f=3.3e1;
                f1(2,f,f);
            }
            void f1(int n_ptrs,...)
            {
                va_list ap;
                int i;
                va_start(ap, n_ptrs);
                va_end(ap);
                vprintf("%E,%G",(char *)ap);
                printf(" %d i\n",i);
            }

 

 

 

Go Back

 

© 1998 - 2008 KPITカミンズ・インフォシステムズ・リミテッド.無断複写転載を禁じます. 個人情報管理方針 | 使用条件