September 26th, 2006
KPIT Cummins Infosystems Limited is now
releasing GNUSH4eb Linux v0601, a cross compiler tool chain for Renesas SH series of microcontrollers.
SALIENT
FEATURES:
| 1. |
GNUSH4eb Linux v0601 is based on
gcc-3.4.6, binutils-2.16.1 and glibc-2.3.6 using kernel
headers-2.6.17. |
| 2. |
The latest patches have been
applied to the gcc, binutils and glibc sources. |
| 3. |
The default target for the
toolchain is sh-4 Big Endian. |
ABOUT
GNUSH4eb Linux v0601:
| Release version: |
GNUSH4eb Linux v0601 |
| Platforms Supported: |
Red Hat GNU/Linux v6.0 or
later (or compatible distribution) (RedHat9, Fedora Core 2, Fedora
Core 3, Fedora Core 4 and Fedora Core 5) |
| Languages: |
C, C++ |
| SH Series: |
SH-3, SH-3 +
FPU, SH-3-DSP, SH-4, SH-4A, SH-4A without
FPU/DSP, SH-4AL-DSP |
| 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. |
Known
problems:
We intend to fix the known problems in our future releases. We
also release Maintenance Packs for critical bugs fixed in between releases.
sh4eb-linux-gcc:
| 1. The following test case generates incorrect assembly code when compiled
using optimization '-O2' with 'sh4eb-linux-gcc
-m4 -O2 -fomit-frame-pointer -S testcode.c -o a.s' command. int func
(void)
{
int
error;
if (foo3 ())
{
foo4(0, 1, 2, "abc", 310,
foo1());
return
(990);
}
if ((error = foo2 ()))
{
return
error;
}
foo4(0, 1, 2, "abc", 352,
foo1());
return
(990);
}
For workaround, use switches
'-fno-if-conversion2' or '-fno-crossjumping', while compiling the code.
|
| 2. The following test case generates compile time error.
int
f(int, int);
int main(void)
{
int f(int, int = 23);
int f(int = 2, int);
}
|
| 3. The code which accesses thread libraries generates
incompatible library error at compilation time.
For workaround,
a. Static linking: Use switch
'--static -lpthread' while compiling the code.
OR
b. Dynamic linking: Specify the
absolute path of the thread library while compiling the code.
E.g.: $ sh4eb-linux-gcc
testcode.C /usr/share/gnush4eb_linux_v0601-1/sh4eb-linux/lib/libpthread.so.0
|
4. Following code causes Internal Compiler Error,
const int i = 1;
void foo ()
{
char a[][i] = {""};
}
|
5. Following code causes Internal Compiler Error,
int main(int ac, char** av)
{
int
to[6] = (int[6]){-1,-1,-1,-1,-1,-1};
return 0;
}
|
6. Following code causes Internal Compiler Error when compiled
using optimization option '-O1' and above,
typedef float V2SF __attribute__ ((vector_size (8)));
int test0 (V2SF, V2SF);
int
main (void)
{
V2SF a = (V2SF) {1.0f/0.0f - 1.0f/0.0f, 1.0f/0.0f -
1.0f/0.0f};
V2SF b = (V2SF) {567.345, 1984.0};
int i;
i = test0 (a, b);
return i;
}
|
7. Following code causes Internal Compiler Error when compiled
using with or without optimization option,
typedef float floatvect2 __attribute__((mode(V2SF)));
typedef union
{
floatvect2 vector;
float f[2];
}resfloatvect2;
void tempf(float *x, float *y)
{
floatvect2 temp={x[0],x[1]};
floatvect2 temp1={y[0],y[1]};
resfloatvect2 temp2;
temp2.vector=temp+temp1;
x[0]=temp2.f[0];
x[1]=temp2.f[1];
}
|
| 8. Source code using TRAMPOLINES gives error "undefined
reference to `__ic_invalidate' " when compiled for target "m4-nofpu",
E.g.:
#ifndef NO_TRAMPOLINES
int f0(int (*fn)(int *), int *p)
{
return (*fn) (p);
}
int f1(void)
{
int i = 0;
int f2(int *p)
{
i = 1;
return *p + 1;
}
return f0(f2, &i);
}
#endif
int main()
{
#ifndef NO_TRAMPOLINES
if (f1() != 2)
abort ();
#endif
return 0;
}
|
|