Kiyo Inaba wrote:
Dalibor wrote:
I've added the missing patch from Sascha for kernels >2.6.9 for the jit.

Thank you to commit the patch posted to the ML (your comit may be based
on http://www.kaffe.org/pipermail/kaffe/2006-October/104681.html).

That's the one, yeah. The first part is a patch for the kernel, afaict, so it doesn't apply to kaffe.


But, as a matter of fact, this patch does not solve my problem for
making arm/linux/jit works again. Or even, v1.3 of 'md.c' (not
using ARM_NR_cacheflush) does not solve it.

Since Sascha's report indicates (even he does not explicitly say so)
he tried to make his effort based on 1.1.7, I will try to check
whether this slightly old version works or not. If it works as
he reported, I have to step forward to the CVS head.

OK. I've also dug around in glibc-ports-2.5, but I don't have a suitable cross-compiler toolchain atm.

here's what's in glibc-ports-2.5 (suitably cut and paste from two files):

#define LOAD_ARGS_0()
#define ASM_ARGS_0
#define LOAD_ARGS_1(a1)                         \
  _a1 = (int) (a1);                             \
  LOAD_ARGS_0 ()
#define ASM_ARGS_1      ASM_ARGS_0, "r" (_a1)
#define LOAD_ARGS_2(a1, a2)                     \
  register int _a2 asm ("a2") = (int) (a2);     \
  LOAD_ARGS_1 (a1)
#define ASM_ARGS_2      ASM_ARGS_1, "r" (_a2)
#define LOAD_ARGS_3(a1, a2, a3)                 \
  register int _a3 asm ("a3") = (int) (a3);     \
  LOAD_ARGS_2 (a1, a2)
#define ASM_ARGS_3      ASM_ARGS_2, "r" (_a3)

#define INTERNAL_SYSCALL_RAW(name, err, nr, args...)            \
  ({ unsigned int _sys_result;                                  \
     {                                                          \
       register int _a1 asm ("a1");                             \
       LOAD_ARGS_##nr (args)                                    \
       asm volatile ("swi       %1      @ syscall " #name       \
                     : "=r" (_a1)                               \
                     : "i" (name) ASM_ARGS_##nr                 \
                     : "memory");                               \
       _sys_result = _a1;                                       \
     }                                                          \
     (int) _sys_result; })

#define INTERNAL_SYSCALL_ARM(name, err, nr, args...)            \
        INTERNAL_SYSCALL_RAW(__ARM_NR_##name, err, nr, args)

#define CLEAR_CACHE(BEG,END)                                           \
  INTERNAL_SYSCALL_ARM (cacheflush, , 3, (BEG), (END), 0)

does that build/work?

I've looked at this a bit in the parrot source, where I took the routine
from, and they are doing it the __sys_1 way. Otoh, there is a mail on
the binutils list about a change in ABIs on arm, complete with patches
for cache flushing in glibc, that turns up when searching for
sys_cacheflush. So I guess the best bet on Linux is to see what globc
does, and to copy that.

Yes, I know that cache flushing will be merged into glibc some day,
and this is the way to go as like as what happened on m68k/netbsd
several years ago (see 'm68k/netbsd1/jit-md.h' v1.5 and v1.7).

I wish it was, but so far ... no. And as Debian is stuck on glibc 2.3 for the next 2 years until the next release, there won't be much one can do, other than using libjit or llvm, and delegating the low level jit work to them.

cheers,
dalibor topic

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to