Mercurial > hg > graal-jvmci-8
diff src/share/vm/oops/generateOopMap.cpp @ 3865:9f12ede5571a
Merge
author | jcoomes |
---|---|
date | Fri, 19 Aug 2011 14:08:18 -0700 |
parents | 6a991dcb52bb 52e4ba46751f |
children | 8150fa46d2ed |
line wrap: on
line diff
--- a/src/share/vm/oops/generateOopMap.cpp Fri Aug 19 08:55:53 2011 -0700 +++ b/src/share/vm/oops/generateOopMap.cpp Fri Aug 19 14:08:18 2011 -0700 @@ -963,10 +963,21 @@ // 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.