[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ocaml build failure on ia64 with gcc4



On Wed, Aug 10, 2005 at 07:13:13PM +0200, Julien Cristau wrote:
> Hi,
> 
> the ocaml debian package fails to build on ia64 with the new gcc, with
> errors in byterun/interp.c:
> gcc -DCAML_NAME_SPACE -O -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT   -c -o interp.o interp.c
> interp.c: In function 'caml_interprete':
> interp.c:297: error: invalid lvalue in increment
> interp.c:299: error: invalid lvalue in increment
> interp.c:301: error: invalid lvalue in increment
> interp.c:303: error: invalid lvalue in increment
> ...
> 
> (A full build log is available at
> http://buildd.debian.org/fetch.php?&pkg=ocaml&ver=3.08.3-6&arch=ia64&stamp=1123386582&file=log&as=raw)
> 
> The problem seems to be the "Next" macro, which is different on ia64
> than on other archs:
> #  ifdef DEBUG
> #    define Next goto next_instr
> #  else

by sumply erasing these three lines :

> #    ifdef __ia64__
> #      define Next goto *(void *)(jumptbl_base + *((uint32 *) pc)++)
> #    else


> #      define Next goto *(void *)(jumptbl_base + *pc++)

as well as this one obviously :)

> #    endif
> #  endif

The package builds without problem on one of debian's ia64 boxes (merulo
inside the sid chroot), so this should solve it for sid. Not sure about
pre-gcc 4.0 and older backports though.

> I believe that using the following on ia64 instead should work, but
> since I am no expert, I'd like to get the caml team's advice :)
> (I don't really understand why this cast is there, and why it's there
> only on ia64, but it has been added in 2000, as part of the ia64 port)
> #define Next goto *(void*)(jumptbl_base + (uint32)*pc++)

Just remove the cast, pc is code_t which is defined as uint32, so ...

> Alternately, I wonder if opcode_t could be defined as uint32 instead of
> int32, which would probably solve this problem (assuming it doesn't need
> to be signed).

Heu, maybe i misread the code then. you sure it is not uint32 ?

Friendly,

Sven Luther



Reply to: