Re: Unwanted freeing of generic types

Neale Ferguson <[email protected]> Fri, 18 Aug 2017 00:40:31 +0000
Newsgroups gmane.comp.gnome.mono.devel
Message-ID <[email protected]>
I was going to as I was going to push some other s390x specific enhancements but it appears I've been preempted. I'm going to look at some of the other areas identified in that PR. S390x has hardware support for decimal arithmetic.

Thanks for your help in keeping me on the right path when I'd convinced myself that I saw things that weren't there.


-------- Original message --------
From: Zoltan Varga <[email protected]>
Date: 8/17/17 20:25 (GMT-05:00)
To: Neale Ferguson <[email protected]>
Cc: Aleksey Kliger <[email protected]>, Mono-Devel <[email protected]>
Subject: Re: [Mono-dev] Unwanted freeing of generic types

Hi,

  Nine catch, could you submit a PR with the fix ?

            Zoltan

On Thu, Aug 17, 2017 at 4:54 PM, Neale Ferguson <[email protected]<mailto:[email protected]>> wrote:

In threads.c we defined SpecialStaticOffset:


typedef union {

        struct {

#if G_BYTE_ORDER != G_LITTLE_ENDIAN

                guint32 type : 1;

                guint32 offset : 25;

                guint32 index : 6;

#else

                guint32 index : 6;

                guint32 offset : 25;

                guint32 type : 1;

#endif

        } fields;

        guint32 raw;

} SpecialStaticOffset;


However, the MAKE_SPECIAL_STATIC_OFFSET macro assumes little endian:


#define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \

        ((SpecialStaticOffset) { .fields = { (type), (offset), (index) } }.raw)


Therefore the offset value that was being returned was incorrect and we'd choose the wrong bitset. To fix this:


#if G_BYTE_ORDER != G_LITTLE_ENDIAN

#define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \

        ((SpecialStaticOffset) { .fields = { (type), (offset), (index) } }.raw)

#else

#define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \

        ((SpecialStaticOffset) { .fields = { (index), (offset), (type) } }.raw)

#endif


Making this change results in the failing (crashing) test - generics-special2.2 - to work as it should.


Neale

_______________________________________________
Mono-devel-list mailing list
[email protected]<mailto:[email protected]>
http://lists.dot.net/mailman/listinfo/mono-devel-list

_______________________________________________
Mono-devel-list mailing list
[email protected]
http://lists.dot.net/mailman/listinfo/mono-devel-list