Problem compiling Kaffe-1.0.5 on a MIPS (Irix 6.5)
Sasikanth Avancha
savanc1 at cs.umbc.edu
Sat Mar 4 12:55:37 PST 2000
Hi,
I am facing the following problem while trying to compile Kaffe on a mips
system. I simply used the "make" command at the top level directory and
the gnu compiler, assembler, linker etc are all invoked appropriately.
Problem:
The following inline assembly code snippet is in
kaffe-1.0.5/config/mips/trampolines.c
=====================================================================
#if defined(TRAMPOLINE_FUNCTION) /*
* If we have an explit function defined then use that.
*/ TRAMPOLINE_FUNCTION()
#else /*
* Otherwise we'll try to construct one.
*/ #if !defined(START_ASM_FUNC)
#define START_ASM_FUNC() ".text\n\t.align 4\n\t.globl "
#endif
#if !defined(END_ASM_FUNC)
#define END_ASM_FUNC() ""
#endif
#if defined(HAVE_UNDERSCORED_C_NAMES)
#define C_FUNC_NAME(FUNC) "_" #FUNC
#else
#define C_FUNC_NAME(FUNC) #FUNC
#endif
asm("
.text \n
.align 4 \n
sw $31, 0($sp) \n
l1: .word " C_FUNC_NAME(soft_fixup_trampoline)" \n ***PROBLEM**
.globl mips_do_fixup_trampoline \n
.ent mips_do_fixup_trampoline \n mips_do_fixup_trampoline: \n
...
...
)"
===========================================================================
trampolines.c is "#include"d in kaffe/kaffevm/jit3/machine.c. When gcc
is compiling machine.c and finds the inline assembly code, it calls the
assembler "as" to assemble this code, "as" returns the following error:
as: Error: /var/tmp/cca01k2z.s, line 12173: Cannot use data-generating
directives in the .text section.: .word
as: Error: /var/tmp/cca01k2z.s,line 12173: Cannot use data-generating
directives
in the .text section.:.word
*** Error code 1 (bu21)
*** Error code 1 (bu21)
*** Error code 1 (bu21)
*** Error code 1 (bu21)
I tracked down the source of the error to the fourth line of assembly code
in the above snippet (which I've marked "PROBLEM"). I am unable to
understand how to fix this code. Looking at the same assembly code in
other architectures (sparc, i386 etc), I found that the function
soft_fixup_trampoline() is being called using the call opcode. So, I guess that
the ".word" directive in the above mips code is setting up to call the function,
but for some reason, the way it is being done is illegal.
I hope somebody can provide a solution to this problem.
Thanks for all help.
Sasikanth.
More information about the kaffe
mailing list