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: