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
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(inti= 1, int j =
2) : a(i),b(j){ };
int foo() { return a+b ;}
}; struct TBase2 {
int c,d;
TBase2(inti = 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,intb,inttcase )
{
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.
4. The 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'
typedefstruct lp1{
union{
short ss;
long sl;
}u1;
union{
unsigned short us;
unsigned long ul;
}u2;
}LPTEST; typedefstructarr{
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,intval)
{
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(intn_ptrs, ...)
{
int reti; va_listap;
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" );
}