Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8203030

Zero s390 31 bit size_t type conflicts in shared code

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 11
    • 8u172, 9.0.4, 10.0.1, 11
    • hotspot
    • b19
    • other
    • linux

        There are still places where s390 31 bit (ilp32) size_t conflicts occur.
        [ See
        http://mail.openjdk.java.net/pipermail/hotspot-dev/2014-June/014254.html
        https://bugs.openjdk.java.net/browse/JDK-8046938
        https://bugs.openjdk.java.net/browse/JDK-8074459
        for previous history ]

        The following are the patches as they have been made to
        the local (Red Hat) s390 31bit Zero build to present, along with a
        search on the variable that forces the need for the
        cast to size_t. I think many of the variables should be defined
        as size_t rather than cast, but it some places its hazy
        and any input regarding the best way to fix is appreciated.

        > patching file src/hotspot/share/code/codeCache.cpp
        --- a/src/hotspot/share/code/codeCache.cpp
        +++ b/src/hotspot/share/code/codeCache.cpp
        @@ -409,7 +409,7 @@
           add_heap(heap);
         
           // Reserve Space
        - size_t size_initial = MIN2(InitialCodeCacheSize, rs.size());
        + size_t size_initial = MIN2((size_t)InitialCodeCacheSize, rs.size());
           size_initial = align_up(size_initial, os::vm_page_size());
           if (!heap->reserve(rs, size_initial, CodeCacheSegmentSize)) {
             vm_exit_during_initialization(err_msg("Could not reserve enough space in %s (" SIZE_FORMAT "K)",

        Possible alternatives:
        *** src/hotspot/cpu/s390/c1_globals_s390.hpp:
        <global>[62] define_pd_global(uintx, InitialCodeCacheSize, 160*K);

        *** src/hotspot/cpu/s390/c2_globals_s390.hpp:
        <global>[74] define_pd_global(uintx, InitialCodeCacheSize, 2048*K);

        *** src/hotspot/share/runtime/globals.hpp:
        <global>[88] define_pd_global(uintx, InitialCodeCacheSize, 160*K);

        > patching file src/hotspot/share/gc/cms/parNewGeneration.cpp
        --- a/src/hotspot/share/gc/cms/parNewGeneration.cpp
        +++ b/src/hotspot/share/gc/cms/parNewGeneration.cpp
        @@ -201,7 +201,7 @@
           const size_t num_overflow_elems = of_stack->size();
           const size_t space_available = queue->max_elems() - queue->size();
           const size_t num_take_elems = MIN3(space_available / 4,
        - ParGCDesiredObjsFromOverflowList,
        + (size_t)ParGCDesiredObjsFromOverflowList,
                                              num_overflow_elems);
           // Transfer the most recent num_take_elems from the overflow
           // stack to our work queue.

        Finding symbol: ParGCDesiredObjsFromOverflowList

        Database directory: /local/openjdk/JDK-8203030/
        -------------------------------------------------------------------------------
        *** src/hotspot/share/gc/cms/cms_globals.hpp:
        GC_CMS_FLAGS[413] product(uintx, ParGCDesiredObjsFromOverflowList, 20, \

        *** src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp:
        get_work_from_overflow_stack[3198] (size_t)ParGCDesiredObjsFromOverflowList);
        do_work_steal[4628] (size_t)ParGCDesiredObjsFromOverflowList);
        do_work_steal[5088] (size_t)ParGCDesiredObjsFromOverflowList);
        take_from_overflow_list[8051] (size_t)ParGCDesiredObjsFromOverflowList);

        *** src/hotspot/share/gc/cms/parNewGeneration.cpp:
        take_from_overflow_stack[204] ParGCDesiredObjsFromOverflowList,
        take_from_overflow_list_work[1312] (size_t)ParGCDesiredObjsFromOverflowList);
        -------------------------------------------------------------------------------


        > patching file src/hotspot/share/gc/g1/g1ConcurrentMark.cpp
        --- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp
        +++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp
        @@ -2306,7 +2306,7 @@
           // of things to do) or totally (at the very end).
           size_t target_size;
           if (partially) {
        - target_size = MIN2((size_t)_task_queue->max_elems()/3, GCDrainStackTargetSize);
        + target_size = MIN2((size_t)_task_queue->max_elems()/3, (size_t)GCDrainStackTargetSize);
           } else {
             target_size = 0;
           }


        Finding symbol: GCDrainStackTargetSize

        Database directory: /local/openjdk/JDK-8203030/
        -------------------------------------------------------------------------------
        *** src/hotspot/share/gc/g1/g1Arguments.cpp:
        initialize[128] if (FLAG_IS_DEFAULT(GCDrainStackTargetSize)) {
        initialize[129] FLAG_SET_ERGO(uintx, GCDrainStackTargetSize, MIN2(GCDrainStackTargetSize, (uintx)TASKQUEUE_SIZE / 4));

        *** src/hotspot/share/gc/g1/g1ConcurrentMark.cpp:
        drain_local_queue[2347] target_size = MIN2((size_t)_task_queue->max_elems()/3, GCDrainStackTargetSize);

        *** src/hotspot/share/gc/shared/gc_globals.hpp:
        GC_FLAGS[772] product(uintx, GCDrainStackTargetSize, 64, \
        -------------------------------------------------------------------------------

        > patching file src/hotspot/share/gc/g1/g1ConcurrentMarkObjArrayProcessor.cpp
        --- a/src/hotspot/share/gc/g1/g1ConcurrentMarkObjArrayProcessor.cpp
        +++ b/src/hotspot/share/gc/g1/g1ConcurrentMarkObjArrayProcessor.cpp
        @@ -31,7 +31,7 @@
         }
         
         size_t G1CMObjArrayProcessor::process_array_slice(objArrayOop obj, HeapWord* start_from, size_t remaining) {
        - size_t words_to_scan = MIN2(remaining, ObjArrayMarkingStride);
        + size_t words_to_scan = MIN2(remaining, (size_t)ObjArrayMarkingStride);
         
           if (remaining > ObjArrayMarkingStride) {
             push_array_slice(start_from + ObjArrayMarkingStride);

        Finding symbol: ObjArrayMarkingStride

        Database directory: /local/openjdk/JDK-8203030/
        -------------------------------------------------------------------------------

        *** src/hotspot/share/gc/shared/gc_globals.hpp:
        GC_FLAGS[314] develop(uintx, ObjArrayMarkingStride, 2048, \
        -------------------------------------------------------------------------------

        > patching file src/hotspot/share/gc/g1/g1PageBasedVirtualSpace.cpp--- a/src/hotspot/share/gc/g1/g1PageBasedVirtualSpace.cpp
        +++ b/src/hotspot/share/gc/g1/g1PageBasedVirtualSpace.cpp
        @@ -100,7 +100,7 @@
           return reserved_size() - committed_size();
         }
         
        -size_t G1PageBasedVirtualSpace::addr_to_page_index(char* addr) const {
        +uintptr_t G1PageBasedVirtualSpace::addr_to_page_index(char* addr) const {
           return (addr - _low_boundary) / _page_size;
         }
         
        Finding symbol: addr_to_page_index

        Database directory: /local/openjdk/JDK-8203030/
        -------------------------------------------------------------------------------
        *** src/hotspot/share/gc/g1/g1PageBasedVirtualSpace.cpp:
        addr_to_page_index[103] size_t G1PageBasedVirtualSpace::addr_to_page_index(char * addr) const {

        *** src/hotspot/share/gc/g1/g1PageBasedVirtualSpace.hpp:
        addr_to_page_index[94] uintptr_t addr_to_page_index(char * addr) const;
        -------------------------------------------------------------------------------


        > patching file src/hotspot/share/gc/g1/g1StringDedupTable.cpp--- a/src/hotspot/share/gc/g1/g1StringDedupTable.cpp
        +++ b/src/hotspot/share/gc/g1/g1StringDedupTable.cpp
        @@ -617,7 +617,7 @@
                     G1_STRDEDUP_BYTES_PARAM(_table->_size * sizeof(G1StringDedupEntry*) + (_table->_entries + _entry_cache->size()) * sizeof(G1StringDedupEntry)));
           log.debug(" Size: " SIZE_FORMAT ", Min: " SIZE_FORMAT ", Max: " SIZE_FORMAT, _table->_size, _min_size, _max_size);
           log.debug(" Entries: " UINTX_FORMAT ", Load: " G1_STRDEDUP_PERCENT_FORMAT_NS ", Cached: " UINTX_FORMAT ", Added: " UINTX_FORMAT ", Removed: " UINTX_FORMAT,
        - _table->_entries, percent_of(_table->_entries, _table->_size), _entry_cache->size(), _entries_added, _entries_removed);
        + _table->_entries, percent_of( (size_t)(_table->_entries), _table->_size), _entry_cache->size(), _entries_added, _entries_removed);
           log.debug(" Resize Count: " UINTX_FORMAT ", Shrink Threshold: " UINTX_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT_NS "), Grow Threshold: " UINTX_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT_NS ")",
                     _resize_count, _table->_shrink_threshold, _shrink_load_factor * 100.0, _table->_grow_threshold, _grow_load_factor * 100.0);
           log.debug(" Rehash Count: " UINTX_FORMAT ", Rehash Threshold: " UINTX_FORMAT ", Hash Seed: 0x%x", _rehash_count, _rehash_threshold, _table->_hash_seed);


        Finding symbol: _entries

        Database directory: /local/openjdk/JDK-8203030/
        -------------------------------------------------------------------------------
        *** src/hotspot/share/gc/g1/g1StringDedupTable.hpp:
        <global>[125] uintx _entries;

        -------------------------------------------------

        > patching file src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp--- a/src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp
        +++ b/src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp
        @@ -118,7 +118,7 @@
           const size_t beg_index = size_t(index);
           assert(beg_index < len || len == 0, "index too large");
         
        - const size_t stride = MIN2(len - beg_index, ObjArrayMarkingStride);
        + const size_t stride = MIN2(len - beg_index, (size_t)ObjArrayMarkingStride);
           const size_t end_index = beg_index + stride;
           T* const base = (T*)obj->base_raw();
           T* const beg = base + beg_index;

        Finding symbol: ObjArrayMarkingStride

        Database directory: /local/openjdk/JDK-8203030/
        -------------------------------------------------------------------------------

        *** src/hotspot/share/gc/shared/gc_globals.hpp:
        GC_FLAGS[314] develop(uintx, ObjArrayMarkingStride, 2048, \
        -------------------------------------------------------------------------------

        > patching file src/hotspot/share/gc/parallel/psParallelCompact.cpp
        --- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp
        +++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp
        @@ -907,8 +907,8 @@
         void PSParallelCompact::initialize_dead_wood_limiter()
         {
           const size_t max = 100;
        - _dwl_mean = double(MIN2(ParallelOldDeadWoodLimiterMean, max)) / 100.0;
        - _dwl_std_dev = double(MIN2(ParallelOldDeadWoodLimiterStdDev, max)) / 100.0;
        + _dwl_mean = double(MIN2((size_t)ParallelOldDeadWoodLimiterMean, max)) / 100.0;
        + _dwl_std_dev = double(MIN2((size_t)ParallelOldDeadWoodLimiterStdDev, max)) / 100.0;
           _dwl_first_term = 1.0 / (sqrt(2.0 * M_PI) * _dwl_std_dev);
           DEBUG_ONLY(_dwl_initialized = true;)
           _dwl_adjustment = normal_distribution(1.0);

        Finding symbol: ParallelOldDeadWoodLimiterStdDev

        Database directory: /local/openjdk/JDK-8203030/
        -------------------------------------------------------------------------------
        *** src/hotspot/share/gc/parallel/parallel_globals.hpp:
        GC_PARALLEL_FLAGS[60] product(uintx, ParallelOldDeadWoodLimiterStdDev, 80, \
        -------------------------------------------------------------------------------

        > patching file src/hotspot/share/gc/shared/plab.cpp--- a/src/hotspot/share/gc/shared/plab.cpp
        +++ b/src/hotspot/share/gc/shared/plab.cpp
        @@ -32,7 +32,7 @@
         
         size_t PLAB::min_size() {
           // Make sure that we return something that is larger than AlignmentReserve
        - return align_object_size(MAX2(MinTLABSize / HeapWordSize, (uintx)oopDesc::header_size())) + AlignmentReserve;
        + return align_object_size(MAX2(MinTLABSize / HeapWordSize, (size_t)oopDesc::header_size())) + AlignmentReserve;
         }
         
         size_t PLAB::max_size() {

        This is probably best done as above.

        > patching file src/hotspot/share/prims/whitebox.cpp--- a/src/hotspot/share/prims/whitebox.cpp
        +++ b/src/hotspot/share/prims/whitebox.cpp
        @@ -1109,7 +1109,7 @@
         WB_END
         
         WB_ENTRY(jobject, WB_GetSizeTVMFlag(JNIEnv* env, jobject o, jstring name))
        - uintx result;
        + size_t result;
           if (GetVMFlag <size_t> (thread, env, name, &result, &JVMFlag::size_tAt)) {
             ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
             return longBox(thread, env, result);

        This is probably best done as above.

        > patching file src/hotspot/share/runtime/arguments.cpp--- a/src/hotspot/share/runtime/arguments.cpp
        +++ b/src/hotspot/share/runtime/arguments.cpp
        @@ -1615,7 +1615,7 @@
           // Increase the code cache size - tiered compiles a lot more.
           if (FLAG_IS_DEFAULT(ReservedCodeCacheSize)) {
             FLAG_SET_ERGO(uintx, ReservedCodeCacheSize,
        - MIN2(CODE_CACHE_DEFAULT_LIMIT, ReservedCodeCacheSize * 5));
        + MIN2(CODE_CACHE_DEFAULT_LIMIT, (size_t)(ReservedCodeCacheSize * 5)));
           }
           // Enable SegmentedCodeCache if TieredCompilation is enabled and ReservedCodeCacheSize >= 240M
           if (FLAG_IS_DEFAULT(SegmentedCodeCache) && ReservedCodeCacheSize >= 240*M) {

        Finding symbol: ReservedCodeCacheSize

        Database directory: /local/openjdk/JDK-8203030/

        *** src/hotspot/cpu/s390/c1_globals_s390.hpp:
        <global>[51] define_pd_global(uintx, ReservedCodeCacheSize, 32*M);

        *** src/hotspot/cpu/s390/c2_globals_s390.hpp:
        <global>[75] define_pd_global(uintx, ReservedCodeCacheSize, 48*M);

        *** src/hotspot/share/runtime/globals.hpp:
        <global>[89] define_pd_global(uintx, ReservedCodeCacheSize, 32*M);



        > patching file src/hotspot/share/runtime/arguments.hpp--- a/src/hotspot/share/runtime/arguments.hpp
        +++ b/src/hotspot/share/runtime/arguments.hpp
        @@ -332,7 +332,7 @@
           // Value of the conservative maximum heap alignment needed
           static size_t _conservative_max_heap_alignment;
         
        - static uintx _min_heap_size;
        + static size_t _min_heap_size;
         
           // -Xrun arguments
           static AgentLibraryList _libraryList;


              chrisphi Chris Phillips
              chrisphi Chris Phillips
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: