RFR 8191278: MappedByteBuffer bulk access memory failures are not handled gracefully

Jamsheed jamsheed.c.m at oracle.com
Sat Jun 1 07:26:39 UTC 2019


Hi Dan,

i understand it is incorrect to assume bool(cpp compiler) implementation 
above byte level.

in that case i will just put an assert.

+  BasicType doing_unsafe_access_bt = T_BYTE;

+ assert(sizeof(bool) == 1, "not implemented");

Best regards,

Jamsheed

On 31/05/19 10:34 PM, Jamsheed wrote:
>> src/hotspot/share/opto/library_call.cpp
>>     In src/hotspot/share/runtime/thread.hpp:
>>     L1090:   volatile bool         _doing_unsafe_access;
>>
>>     L4220:   store_to_memory(control(), doing_unsafe_access_addr, 
>> intcon(1), T_BYTE, Compile::AliasIdxRaw, MemNode::unordered);
>>     L4230:   store_to_memory(control(), doing_unsafe_access_addr, 
>> intcon(0), T_BYTE, Compile::AliasIdxRaw, MemNode::unordered);
>>         Is T_BYTE a safe assumption (size wise) for writing to a C++ 
>> bool?
>
> Thanks for pointing this.
>
> hope [1] will work ?
[1]
+  BasicType doing_unsafe_access_bt = T_BYTE;
+  switch(sizeof(bool)) {
+    case 1: doing_unsafe_access_bt = T_BYTE;  break;
+    case 2: doing_unsafe_access_bt = T_SHORT; break;
+    case 4: doing_unsafe_access_bt = T_INT;   break;
+    case 8: doing_unsafe_access_bt = T_LONG;  break;
+    default: ShouldNotReachHere();
+  }

    // update volatile field
-  store_to_memory(control(), doing_unsafe_access_addr, intcon(1), 
T_BYTE, Compile::AliasIdxRaw, MemNode::unordered);
+  store_to_memory(control(), doing_unsafe_access_addr, intcon(1), 
doing_unsafe_access_bt, Compile::AliasIdxRaw, MemNode::unordered);

    // Call it.  Note that the length argument is not scaled.
    make_runtime_call(RC_LEAF|RC_NO_FP,
                      OptoRuntime::fast_arraycopy_Type(),
                      StubRoutines::unsafe_arraycopy(),
                      "unsafe_arraycopy",
                      TypeRawPtr::BOTTOM,
                      src, dst, size XTOP);

-  store_to_memory(control(), doing_unsafe_access_addr, intcon(0), 
T_BYTE, Compile::AliasIdxRaw, MemNode::unordered);
+  store_to_memory(control(), doing_unsafe_access_addr, intcon(0), 
doing_unsafe_access_bt, Compile::AliasIdxRaw, MemNode::unordered);


More information about the hotspot-dev mailing list