Package: cacao Version: 0.98-2 Tags: patch Cacao currently fails to build on mips and mipsel. The appended patch fixes it. The last hunk of the patch fixes the "undefined reference to __data_start" mentioned in #441122 for mips/mipsel, s390 may need a similiar fix.
Thiemo --- src/vm/jit/mips/linux/md-os.c.old 2007-11-03 21:17:03.000000000 +0000 +++ src/vm/jit/mips/linux/md-os.c 2007-11-03 21:21:16.000000000 +0000 @@ -119,7 +119,8 @@ void md_signal_handler_sigsegv(int sig, sp = (u1 *) (ptrint) _gregs[REG_SP]; ra = (u1 *) (ptrint) _gregs[REG_RA]; /* this is correct for leafs */ -#if !defined(__UCLIBC__) && ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 5)) +#if !defined(__UCLIBC__) +# if ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 5)) /* NOTE: We only need this for pre glibc-2.5. */ xpc = (u1 *) (ptrint) _mc->pc; @@ -142,6 +143,9 @@ void md_signal_handler_sigsegv(int sig, xpc = xpc - 4; break; } +# else + xpc = (u1 *) (ptrint) _mc->pc; +# endif #else xpc = (u1 *) (ptrint) _gregs[CTX_EPC]; #endif --- src/vm/jit/mips/asmpart.S.old 2007-11-03 21:26:58.000000000 +0000 +++ src/vm/jit/mips/asmpart.S 2007-11-03 21:30:03.000000000 +0000 @@ -219,7 +219,7 @@ L_asm_vm_call_method_compute_pv: ald a0,offvmargdata(t0) #endif #if !defined(ENABLE_SOFT_FLOAT) - ldc1 fa0,offvmargdata(t0) + l.d fa0,offvmargdata(t0) #endif aaddi s7,s7,-1 blez s7,calljava_argsloaded @@ -230,7 +230,7 @@ L_asm_vm_call_method_compute_pv: ald a1,offvmargdata+sizevmarg*1(t0) #endif #if !defined(ENABLE_SOFT_FLOAT) - ldc1 fa1,offvmargdata+sizevmarg*1(t0) + l.d fa1,offvmargdata+sizevmarg*1(t0) #endif aaddi s7,s7,-1 blez s7,calljava_argsloaded @@ -612,12 +612,12 @@ ex_int2: ldc1 fs3,-1*8(t1) #else /* SIZEOF_VOID_P == 8 */ # if !defined(ENABLE_SOFT_FLOAT) - ldc1 fs0,-4*8(t1) - ldc1 fs1,-3*8(t1) - ldc1 fs2,-2*8(t1) - ldc1 fs3,-1*8(t1) - ldc1 fs4,-1*8(t1) - ldc1 fs5,-1*8(t1) + l.d fs0,-4*8(t1) + l.d fs1,-3*8(t1) + l.d fs2,-2*8(t1) + l.d fs3,-1*8(t1) + l.d fs4,-1*8(t1) + l.d fs5,-1*8(t1) # endif /* !defined(ENABLE_SOFT_FLOAT) */ #endif /* SIZEOF_VOID_P == 8 */ @@ -861,22 +861,22 @@ asm_replacement_out: #else /* SIZEOF_VOID_P == 8 */ - sdc1 $f0 ,( 0*8+offes_fltregs)(sp) - sdc1 $f2 ,( 2*8+offes_fltregs)(sp) - sdc1 $f4 ,( 4*8+offes_fltregs)(sp) - sdc1 $f6 ,( 6*8+offes_fltregs)(sp) - sdc1 $f8 ,( 8*8+offes_fltregs)(sp) - sdc1 $f10,(10*8+offes_fltregs)(sp) - sdc1 $f12,(12*8+offes_fltregs)(sp) - sdc1 $f14,(14*8+offes_fltregs)(sp) - sdc1 $f16,(16*8+offes_fltregs)(sp) - sdc1 $f18,(18*8+offes_fltregs)(sp) - sdc1 $f20,(20*8+offes_fltregs)(sp) - sdc1 $f22,(22*8+offes_fltregs)(sp) - sdc1 $f24,(24*8+offes_fltregs)(sp) - sdc1 $f26,(26*8+offes_fltregs)(sp) - sdc1 $f28,(28*8+offes_fltregs)(sp) - sdc1 $f30,(30*8+offes_fltregs)(sp) + s.d $f0 ,( 0*8+offes_fltregs)(sp) + s.d $f2 ,( 2*8+offes_fltregs)(sp) + s.d $f4 ,( 4*8+offes_fltregs)(sp) + s.d $f6 ,( 6*8+offes_fltregs)(sp) + s.d $f8 ,( 8*8+offes_fltregs)(sp) + s.d $f10,(10*8+offes_fltregs)(sp) + s.d $f12,(12*8+offes_fltregs)(sp) + s.d $f14,(14*8+offes_fltregs)(sp) + s.d $f16,(16*8+offes_fltregs)(sp) + s.d $f18,(18*8+offes_fltregs)(sp) + s.d $f20,(20*8+offes_fltregs)(sp) + s.d $f22,(22*8+offes_fltregs)(sp) + s.d $f24,(24*8+offes_fltregs)(sp) + s.d $f26,(26*8+offes_fltregs)(sp) + s.d $f28,(28*8+offes_fltregs)(sp) + s.d $f30,(30*8+offes_fltregs)(sp) #endif /* SIZEOF_VOID_P == 8 */ @@ -989,22 +989,22 @@ asm_replacement_in: #else /* SIZEOF_VOID_P == 8 */ - ldc1 $f0 ,( 0*8+offes_fltregs)(a0) - ldc1 $f2 ,( 2*8+offes_fltregs)(a0) - ldc1 $f4 ,( 4*8+offes_fltregs)(a0) - ldc1 $f6 ,( 6*8+offes_fltregs)(a0) - ldc1 $f8 ,( 8*8+offes_fltregs)(a0) - ldc1 $f10,(10*8+offes_fltregs)(a0) - ldc1 $f12,(12*8+offes_fltregs)(a0) - ldc1 $f14,(14*8+offes_fltregs)(a0) - ldc1 $f16,(16*8+offes_fltregs)(a0) - ldc1 $f18,(18*8+offes_fltregs)(a0) - ldc1 $f20,(20*8+offes_fltregs)(a0) - ldc1 $f22,(22*8+offes_fltregs)(a0) - ldc1 $f24,(24*8+offes_fltregs)(a0) - ldc1 $f26,(26*8+offes_fltregs)(a0) - ldc1 $f28,(28*8+offes_fltregs)(a0) - ldc1 $f30,(30*8+offes_fltregs)(a0) + l.d $f0 ,( 0*8+offes_fltregs)(a0) + l.d $f2 ,( 2*8+offes_fltregs)(a0) + l.d $f4 ,( 4*8+offes_fltregs)(a0) + l.d $f6 ,( 6*8+offes_fltregs)(a0) + l.d $f8 ,( 8*8+offes_fltregs)(a0) + l.d $f10,(10*8+offes_fltregs)(a0) + l.d $f12,(12*8+offes_fltregs)(a0) + l.d $f14,(14*8+offes_fltregs)(a0) + l.d $f16,(16*8+offes_fltregs)(a0) + l.d $f18,(18*8+offes_fltregs)(a0) + l.d $f20,(20*8+offes_fltregs)(a0) + l.d $f22,(22*8+offes_fltregs)(a0) + l.d $f24,(24*8+offes_fltregs)(a0) + l.d $f26,(26*8+offes_fltregs)(a0) + l.d $f28,(28*8+offes_fltregs)(a0) + l.d $f30,(30*8+offes_fltregs)(a0) #endif /* SIZEOF_VOID_P == 8 */ @@ -1058,13 +1058,19 @@ asm_criticalsections: compare_and_swap: 1: + .set mips3 all v0,0(a0) + .set mips0 bne v0,a1,2f move t0,a2 + .set mips3 asc t0,0(a0) + .set mips0 beqz t0,1b 2: + .set mips2 sync + .set mips0 j ra .end compare_and_swap --- src/vm/jit/mips/md-asm.h.old 2007-11-03 21:32:21.000000000 +0000 +++ src/vm/jit/mips/md-asm.h 2007-11-03 21:35:08.000000000 +0000 @@ -336,12 +336,12 @@ #define SAVE_RETURN_REGISTERS(off) \ sw v0,(0+(off))*4(sp) ; \ sw v1,(1+(off))*4(sp) ; \ - sdc1 fv0,(2+(off))*4(sp) ; + s.d fv0,(2+(off))*4(sp) ; #define RESTORE_RETURN_REGISTERS(off) \ lw v0,(0+(off))*4(sp) ; \ lw v1,(1+(off))*4(sp) ; \ - ldc1 fv0,(2+(off))*4(sp) ; + l.d fv0,(2+(off))*4(sp) ; #define SAVE_ARGUMENT_REGISTERS(off) \ @@ -349,16 +349,16 @@ sw a1,(1+(off))*4(sp) ; \ sw a2,(2+(off))*4(sp) ; \ sw a3,(3+(off))*4(sp) ; \ - sdc1 fa0,(4+(off))*4(sp) ; \ - sdc1 fa1,(6+(off))*4(sp) ; + s.d fa0,(4+(off))*4(sp) ; \ + s.d fa1,(6+(off))*4(sp) ; #define RESTORE_ARGUMENT_REGISTERS(off) \ lw a0,(0+(off))*4(sp) ; \ lw a1,(1+(off))*4(sp) ; \ lw a2,(2+(off))*4(sp) ; \ lw a3,(3+(off))*4(sp) ; \ - ldc1 fa0,(4+(off))*4(sp) ; \ - ldc1 fa1,(6+(off))*4(sp) ; + l.d fa0,(4+(off))*4(sp) ; \ + l.d fa1,(6+(off))*4(sp) ; #define SAVE_TEMPORARY_REGISTERS(off) \ @@ -370,10 +370,10 @@ sw t5,(5+(off))*4(sp) ; \ sw t6,(6+(off))*4(sp) ; \ sw t7,(7+(off))*4(sp) ; \ - sdc1 ft0,(8+(off))*4(sp) ; \ - sdc1 ft1,(10+(off))*4(sp) ; \ - sdc1 ft2,(12+(off))*4(sp) ; \ - sdc1 ft3,(14+(off))*4(sp) ; + s.d ft0,(8+(off))*4(sp) ; \ + s.d ft1,(10+(off))*4(sp) ; \ + s.d ft2,(12+(off))*4(sp) ; \ + s.d ft3,(14+(off))*4(sp) ; #define RESTORE_TEMPORARY_REGISTERS(off) \ lw t0,(0+(off))*4(sp) ; \ @@ -384,10 +384,10 @@ lw t5,(5+(off))*4(sp) ; \ lw t6,(6+(off))*4(sp) ; \ lw t7,(7+(off))*4(sp) ; \ - ldc1 ft0,(8+(off))*4(sp) ; \ - ldc1 ft1,(10+(off))*4(sp) ; \ - ldc1 ft2,(12+(off))*4(sp) ; \ - ldc1 ft3,(14+(off))*4(sp) ; + l.d ft0,(8+(off))*4(sp) ; \ + l.d ft1,(10+(off))*4(sp) ; \ + l.d ft2,(12+(off))*4(sp) ; \ + l.d ft3,(14+(off))*4(sp) ; #endif /* SIZEOF_VOID_P == 8 */ --- src/mm/boehm-gc/include/private/gcconfig.h.old 2007-11-03 21:58:03.000000000 +0000 +++ src/mm/boehm-gc/include/private/gcconfig.h 2007-11-03 21:59:03.000000000 +0000 @@ -1373,8 +1373,7 @@ # define DYNAMIC_LOADING extern int _end[]; # define DATAEND (_end) - extern int __data_start[]; -# define DATASTART ((ptr_t)(__data_start)) +# define SEARCH_FOR_DATA_START # define ALIGNMENT 4 # define USE_GENERIC_PUSH_REGS # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2 || __GLIBC__ > 2 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]