This commit is contained in:
John Coomes 2011-08-19 14:08:18 -07:00
commit af31d0cf27
16 changed files with 3381 additions and 1495 deletions

View file

@ -963,10 +963,21 @@ void GenerateOopMap::init_basic_blocks() {
// initialize the CellTypeState-related information.
init_state();
// We allocate space for all state-vectors for all basicblocks in one huge chuck.
// Then in the next part of the code, we set a pointer in each _basic_block that
// points to each piece.
CellTypeState *basicBlockState = NEW_RESOURCE_ARRAY(CellTypeState, bbNo * _state_len);
// We allocate space for all state-vectors for all basicblocks in one huge
// chunk. Then in the next part of the code, we set a pointer in each
// _basic_block that points to each piece.
// The product of bbNo and _state_len can get large if there are lots of
// basic blocks and stack/locals/monitors. Need to check to make sure
// we don't overflow the capacity of a pointer.
if ((unsigned)bbNo > UINTPTR_MAX / sizeof(CellTypeState) / _state_len) {
report_error("The amount of memory required to analyze this method "
"exceeds addressable range");
return;
}
CellTypeState *basicBlockState =
NEW_RESOURCE_ARRAY(CellTypeState, bbNo * _state_len);
memset(basicBlockState, 0, bbNo * _state_len * sizeof(CellTypeState));
// Make a pass over the basicblocks and assign their state vectors.