re: long longlong in libffi (powerpc)

Andrew Haley aph@redhat.com
Tue Jan 21 15:09:00 GMT 2003


=?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.



More information about the Java mailing list