Jarkko Hietaniemi <[EMAIL PROTECTED]> wrote:
> I followed up on the perlbug thread on this but so far it hasn't
> showed up in p6i, so here's a manual resend.

I've checked is some changes in the meantime, comments below inline.

> (3a) Why is fetch_op_mixed() reading in 8 bytes at a time when the
> .pbc is saying the wordsize is 4

Changed to fetch_buf_le_4() now. Please note I didn't try to fix the
whole code, just to get Tru64 running.

> (3c) In PF_fetch_opcode() we have
>     o = (pf->fetch_op)(**stream);

I changed the signature to "unsigned char*" now.

> (3c3) *stream is increased by four, it then being X+4.
> (3c4) The next time around an attempt is made to call (pf->fetch_op)
> with the *stream pointing to an address aligned by four but not by eight.

This should be gone now...

> In general it is not portable across architectures to cast aligned
> (like opcode_t, or long) and "non-aligned" (char, void) pointers back
> and forth

... but there are still might be issues. Aligning the cursor to 16 bytes
in packfile.c comes to my mind. The PF_fetch_op() still gets an
opcode_t* cursor, which might be misaligned. *But* AFAIK this misaligned
thingy should never be dereferenced, so that a SIGBUS shouldn't get
triggered.

leo

Reply via email to