[Mono-devel-list] Re: Alpha corlib mismatched sizes. (64-bit issues)

Paolo Molaro lupus at ximian.com
Wed Jul 2 07:35:33 EDT 2003


On 07/01/03 Laramie Leavitt wrote:
> Laramie Leavitt said:
> > One of the problems is verify.c, around line 2560
[...]
> > change to:
> > 			if( klass->valuetype )
> > 				struct_offset = 2 * sizeof( void * );

I used sizeof (MonoObject) for this change.

> 	gint32     *remote_stack_index;
> 	gint32      hresult;
> 	MonoString *source;
> } MonoException;
> 
> We see that for some reason the remote_stack_index appears to
> be only 4 bytes, and then 4 bytes for the hresult.

I think the '*' is a typo, removing it is the correct fix.

> And on to the other case:
> 
> typedef struct {
> 	MonoObject	obj;
> 	MonoImage  *image;
> 	MonoReflectionAssembly *assembly;
> 	MonoString *fqname;
> 	MonoString *name;
> 	MonoString *scopename;
> 	gboolean is_resource;

This should be MonoBoolean: I committed the fix, though I'm not sure
it solves your issue: MonoBoolean is 8 bits, gboolean is an int, so I
guess 32 bits on your alpha, but either way the structure should still
be padded to the next 8 bytes.
Are you using a current corlib (like from the 0.25 release)?
Check that the following command returns a line:
	monodis --fields corlib.dll |grep is_resource
If it return nothing you have an old corlib, if it returns a line I
guess the bug is in the field layout code (class.c).

On 07/01/03 Laramie Leavitt wrote:
> The verify.c change prints out all mismatched values instead of only the
> first one, which I find helpful.  Someone will probably want to use
> g_printf( ... ) there,
> though.

I made it use a GString and concat all the results. Thanks for the
patch.

lupus

-- 
-----------------------------------------------------------------
lupus at debian.org                                     debian/rules
lupus at ximian.com                             Monkeys do it better



More information about the Mono-devel-list mailing list