[aarch64-port-dev ] RFR (XS) 8221725: AArch64 build failures after JDK-8221408 (Windows 32bit build build errors/warnings in hotspot)
Dmitry Samersoff
dms at samersoff.net
Wed Apr 3 13:54:35 UTC 2019
Thomas,
Just curiosity -
did hotspot team consider to start using C++11 sometimes?
e.g. (for this case)
enum lock_mask_constants : uintptr_t { ... };
-Dmitry
On 01.04.2019 7:30, Thomas Stüfe wrote:
> Hi Alexey,
>
> Sorry for breaking aarch64.
>
> Kim and me had discussions about this particular fix, see original rfr
> thread for 8221408.
>
> A better solution than adding the cast like you did might be to pull the
> offending enum value out and make it a uintx constant too. Or, I could
> revert my change and make it windows only. Or add a dummy value to the enum
> and cast that to uintptr, to force its size up.
>
> I think a good solution would be one that prevents such errors for other
> enum values and for other platforms as well.
>
> Your patch is fine, if you just want to fix your build now.
>
> ..thomas
>
> On Sun 31. Mar 2019 at 23:36, Aleksey Shipilev <shade at redhat.com> wrote:
>
>> Bug:
>> https://bugs.openjdk.java.net/browse/JDK-8221725
>>
>> Fix:
>>
>> diff -r f062188117ad src/hotspot/cpu/aarch64/aarch64.ad
>> --- a/src/hotspot/cpu/aarch64/aarch64.ad Sat Mar 30 21:29:37 2019
>> +0100
>> +++ b/src/hotspot/cpu/aarch64/aarch64.ad Sun Mar 31 23:30:41 2019
>> +0200
>> @@ -3443,11 +3443,11 @@
>> // Check if the owner is self by comparing the value in the
>> // markOop of object (disp_hdr) with the stack pointer.
>> __ mov(rscratch1, sp);
>> __ sub(disp_hdr, disp_hdr, rscratch1);
>> - __ mov(tmp, (address) (~(os::vm_page_size()-1) |
>> markOopDesc::lock_mask_in_place));
>> + __ mov(tmp, (address) (~(os::vm_page_size()-1) |
>> (uintptr_t)markOopDesc::lock_mask_in_place));
>> // If condition is true we are cont and hence we can store 0 as the
>> // displaced header in the box, which indicates that it is a
>> recursive lock.
>> __ ands(tmp/*==0?*/, disp_hdr, tmp); // Sets flags for result
>>
>> The offending change pulled some enum constants out, which apparently made
>> enum representation much
>> smaller. Not sure if putting the constants back does not break Win32 build
>> again. So, instead, fix
>> it up in one place that blows up with build warning-as-error. The fix has
>> some level of ewwness, but
>> it seems to be the same as what bytecodeInterpreter.cpp is doing. The
>> alternative is to cast to
>> uintx, as macroAssembler_arm.cpp is doing.
>>
>> Testing: Linux aarch64 fastdebug build, ad-hoc tests
>>
>> --
>> Thanks,
>> -Aleksey
>>
>>
>>
More information about the aarch64-port-dev
mailing list