RFR: 8213411: JDK-8209189 incorrect for Big Endian (JVM crashes)
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Nov 6 16:21:50 UTC 2018
Hi Erik,
It would be nice if you use enum for values, masks and shift (like for markOop). It will become more readable.
Thanks,
Vladimir
On 11/6/18 2:34 AM, Erik Österlund wrote:
> Hi,
>
> In my patch for 8209189 I assumed that the following struct containing a bit field using 3 bits, would be packed to one
> byte:
>
> struct IsUnloadingStruct {
> unsigned int _is_unloading:1;
> unsigned int _unloading_cycle:2;
> };
>
> Turns out though that the size of this 3 bit bitfield is typically 4 bytes, causing trouble on big endian machines. The
> compilers can be tamed to turn this to a byte (as expected) by using struct packing.
>
> So the two most obvious solutions are either
> 1) Make a struct packing macro, and trust the compilers won't mess up then.
> 2) Do manual bit fiddling because we do not trust compilers.
>
> Martin convinced me to go with #2.
>
> Bug:
> https://bugs.openjdk.java.net/browse/JDK-8213411
>
> Webrev:
> http://cr.openjdk.java.net/~eosterlund/8213411/webrev.00/
>
> Running a bunch of tests while waiting for review.
>
> Thanks,
> /Erik
More information about the hotspot-dev
mailing list