Skip to content

Commit

Permalink
Merge pull request #9981 from bragaigor/DDR_issue_9971
Browse files Browse the repository at this point in the history
Update DDR code to comply with arrays not having NULL pointers
  • Loading branch information
keithc-ca committed Jun 25, 2020
2 parents 337bc1c + 6548260 commit a20f794
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 7 deletions.
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 1991, 2019 IBM Corp. and others
* Copyright (c) 1991, 2020 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -45,8 +45,11 @@ public static GCArrayObjectModel from() throws CorruptDataException
AlgorithmVersion version = AlgorithmVersion.getVersionOf(AlgorithmVersion.GC_ARRAYLET_OBJECT_MODEL_VERSION);
switch (version.getAlgorithmVersion()) {
// Add case statements to handle new algorithm versions
default:
case 0:
case 1:
return new GCArrayletObjectModel_V1();
default:
return new GCArrayletObjectModel_V2();
}
}

Expand Down
Expand Up @@ -44,7 +44,7 @@
import com.ibm.j9ddr.vm29.types.U32;
import com.ibm.j9ddr.vm29.types.UDATA;

public abstract class GCArrayletObjectModelBase_V1 extends GCArrayObjectModel
public abstract class GCArrayletObjectModelBase extends GCArrayObjectModel
{
protected GC_ArrayletObjectModelPointer arrayletObjectModel;
protected VoidPointer arrayletRangeBase;
Expand All @@ -54,7 +54,7 @@ public abstract class GCArrayletObjectModelBase_V1 extends GCArrayObjectModel
protected UDATA arrayletLeafLogSize;
protected UDATA arrayletLeafSizeMask;

public GCArrayletObjectModelBase_V1() throws CorruptDataException
public GCArrayletObjectModelBase() throws CorruptDataException
{
arrayletObjectModel = GC_ArrayletObjectModelPointer.cast(GCBase.getExtensions().indexableObjectModel());
arrayletRangeBase = arrayletObjectModel._arrayletRangeBase();
Expand Down
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 1991, 2018 IBM Corp. and others
* Copyright (c) 1991, 2020 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -28,7 +28,7 @@
import com.ibm.j9ddr.vm29.pointer.generated.J9IndexableObjectPointer;
import com.ibm.j9ddr.vm29.types.UDATA;

class GCArrayletObjectModel_V1 extends GCArrayletObjectModelBase_V1
class GCArrayletObjectModel_V1 extends GCArrayletObjectModelBase
{

public GCArrayletObjectModel_V1() throws CorruptDataException
Expand Down
@@ -0,0 +1,70 @@
/*******************************************************************************
* Copyright (c) 1991, 2020 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
* or the Apache License, Version 2.0 which accompanies this distribution and
* is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* This Source Code may also be made available under the following
* Secondary Licenses when the conditions for such availability set
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
* General Public License, version 2 with the GNU Classpath
* Exception [1] and GNU General Public License, version 2 with the
* OpenJDK Assembly Exception [2].
*
* [1] https://www.gnu.org/software/classpath/license.html
* [2] http://openjdk.java.net/legal/assembly-exception.html
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception
*******************************************************************************/
package com.ibm.j9ddr.vm29.j9.gc;

import com.ibm.j9ddr.CorruptDataException;
import com.ibm.j9ddr.vm29.pointer.generated.J9IndexableObjectPointer;
import com.ibm.j9ddr.vm29.types.UDATA;

class GCArrayletObjectModel_V2 extends GCArrayletObjectModelBase
{

public GCArrayletObjectModel_V2() throws CorruptDataException
{
}

@Override
public UDATA getSizeInBytesWithHeader(J9IndexableObjectPointer array) throws CorruptDataException
{
return super.getSpineSize(array);
}

/**
* Return the total number of arraylets for an indexable object with a size of dataInSizeByte, including a (possibly empty) leaf in the spine.
* @param dataSizeInBytes size of an array in bytes (not elements)
* @return the number of arraylets used for an array of dataSizeInBytes bytes
*/
@Override
protected UDATA numArraylets(UDATA dataSizeInBytes) throws CorruptDataException
{
UDATA numberOfArraylets = new UDATA(1);
if (!UDATA.MAX.eq(arrayletLeafSize)) {
/* CMVC 135307 : following logic for calculating the leaf count would not overflow dataSizeInBytes.
* the assumption is leaf size is order of 2. It's identical to:
* if (dataSizeInBytes % leafSize) is 0
* leaf count = dataSizeInBytes >> leafLogSize
* else
* leaf count = (dataSizeInBytes >> leafLogSize) + 1
*/
numberOfArraylets = dataSizeInBytes.rightShift(arrayletLeafLogSize).add(dataSizeInBytes.bitAnd(arrayletLeafSizeMask).add(arrayletLeafSizeMask).rightShift(arrayletLeafLogSize));
}
return numberOfArraylets;
}

@Override
public UDATA getTotalFootprintInBytesWithHeader(J9IndexableObjectPointer arrayPtr) throws CorruptDataException {
UDATA spineSize = getSizeInBytesWithHeader(arrayPtr);
UDATA externalArrayletSize = externalArrayletsSize(arrayPtr);
UDATA totalFootprint = spineSize.add(externalArrayletSize);
return totalFootprint;
}
}
2 changes: 1 addition & 1 deletion runtime/ddr/algorithm_versions.c
Expand Up @@ -30,7 +30,7 @@
#define VM_LINE_NUMBER_TABLE_VERSION 1
#define VM_LOCAL_VARIABLE_TABLE_VERSION 1
#define VM_CAN_ACCESS_LOCALS_VERSION 1
#define ALG_GC_ARRAYLET_OBJECT_MODEL_VERSION 1
#define ALG_GC_ARRAYLET_OBJECT_MODEL_VERSION 2
#define VM_HASHTABLE_VERSION 1
#define ALG_VM_J9CLASS_VERSION 1
#define ALG_GC_OBJECT_HEAP_ITERATOR_SEGREGATED_ORDERED_LIST_VERSION 1
Expand Down

0 comments on commit a20f794

Please sign in to comment.