[kaffe] Build failure for arm/linux

Kiyo Inaba inaba at src.ricoh.co.jp
Sat Apr 21 22:33:11 PDT 2007


I started to build on arm/linux with CVS head.
And I noticed, there should be a kernel version related problem.
According to the ML archive, this port was reported to work by Iliverez
(http://www.kaffe.org/pipermail/kaffe/2006-March/104166.html) but the
report does not mention kernel version.

I am now using 'Linux debian 2.6.18-4-versatile' running on QEMU, and
without modifying anything, compilation stops with
-----------------------------------------------------------------------
md.c: In function 'flush_dcache':
md.c:39: error: expected ':' or ')' before '__sys1'
md.c:35: warning: unused parameter 'start'
md.c:35: warning: unused parameter 'end'
make[2]: [libkaffevm_la-md.lo] Error 1 (ignored)
-----------------------------------------------------------------------

Since 'flush_dcache' is not needed for intrp engine, I temporally comment
out the function definition, and compilation is ok, and regression tests
report 5 errors.

Then I have to start to test the arm/linux port with jit engine, and
this means I really have to make the flush_dcache function. When I
check the definition '__sys1' in include file, I noticed this should
not be compiled.

According to the code segment in '/usr/include/asm/unistd.h'
-----------------------------------------------------------------------
#ifdef __KERNEL__
#include <linux/linkage.h>

#define __sys2(x) #x
#define __sys1(x) __sys2(x)
-----------------------------------------------------------------------
the __sys1 definition should not be invoked if SYMBOL '__KERNEL__'
is ont defined. (Of course, this ifdef is mainly used to determine
whether the source is now compiled to build kernel or not)

I have no idea to track back the change for this file, but this
may be introduced recently, and the kaffe build becomes fail.

When I enforce symbol '__KERNEL__' defined in 'md.c', the compilation
(only) works.

So, what is the best way to fix this compilation problem? I can think,
 1) Define '__KERNEL__' in md.c
 2) Copy __sys1(x) and several other defs needed from 'unistd.h'
 3) Revert the def for flush_dcache without using __sys1
as candidates.

Any suggestion?

Kiyo




More information about the kaffe mailing list