This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
re: long longlong in libffi (powerpc)
=?iso-8859-1?Q?Andreas=5FTobler?= writes:
>
>
> -- Original Message --
>
> >Please try to figure out if this is returning the wrong answer, and if
> >so why. It could be s shell bug.
>
> Well, in my first mail with this topic I stated:
>
> My system claims long as 4 byte and longlong as 8 bytes.
>
> >From the config.status of libffi.
> ${ac_dA}SIZEOF_LONG${ac_dB}SIZEOF_LONG${ac_dC}4${ac_dD}
> ${ac_dA}SIZEOF_LONG_LONG${ac_dB}SIZEOF_LONG_LONG${ac_dC}8${ac_dD}
>
> from fficonfig.h: (in objdir, the configured one)
> /* The number of bytes in a long. */
> #define SIZEOF_LONG 4
>
> /* The number of bytes in a long long. */
> #define SIZEOF_LONG_LONG 8
>
> So I assume this check should be ok.
>
> What I'm confused about is the fact that I override the definition of ulong
>
> if SIZEOF_LONG == 4
>
> #define UINT32 unsigned long
> #define SINT32 long
> #define ffi_type_ulong ffi_type_uint32
> #define ffi_type_slong ffi_type_sint32
>
> with this one:
> #if SIZEOF_LONG_LONG == 8
>
> #define UINT64 unsigned long long
> #define SINT64 long long
> #define ffi_type_ulong ffi_type_uint64
> #define ffi_type_slong ffi_type_sint64
>
> Now ffi_type_ulong is 64bit long?
>
> Anyway, I thought this would be the cause for my failure I'm investigating.
> But the longer I think the more I have the feeling that it isn't.
>
> On powerpc linux the InvokeReturn passes while on darwin it doesn't. So
> my 'theory' is no longer valid :(
Looks that way.
I'm a bit baffled that the data output by gcc looks like
LSFDE1:
.set L$set$1,LEFDE1-LASFDE1
.long L$set$1 ; FDE Length
LASFDE1:
.set L$set$2,LASFDE1-Lframe1
.long L$set$2 ; FDE CIE offset
.long LFB3-. ; FDE initial location
.set L$set$3,LFE3-LFB3
.long L$set$3 ; FDE address range
.byte 0x0 ; uleb128 0x0; Augmentation size
.byte 0x4 ; DW_CFA_advance_loc4
...
whereas yours looks like
LSFDE1:
.set L$set$1,LEFDE1-LASFDE1
.long L$set$1 ; FDE Length
LASFDE1:
.set L$set$2,LASFDE1-Lframe1
.long L$set$2 ; FDE CIE offset
.long LFB0-. ; FDE initial location
.set L$set$3,LFE1-LFB0
.long L$set$3 ; FDE address range
.byte 0x4 ; DW_CFA_advance_loc4
...
i.e. the Augmentation size is not present. I think it should be there
if the CIE Augmentation has a "z" in it.
Andrew.