[profile] Fix PR/27917

Skip the last (possibly) incomplete node from padding bytes.

llvm-svn: 271349
This commit is contained in:
Xinliang David Li 2016-05-31 23:12:13 +00:00
parent cceae7feda
commit 96dad78963
1 changed files with 4 additions and 3 deletions

View File

@ -111,7 +111,7 @@ static ValueProfNode *allocateOneNode(__llvm_profile_data *Data, uint32_t Index,
return (ValueProfNode *)calloc(1, sizeof(ValueProfNode));
/* Early check to avoid value wrapping around. */
if (CurrentVNode >= EndVNode) {
if (CurrentVNode + 1 > EndVNode) {
if (OutOfNodesWarnings++ < INSTR_PROF_MAX_VP_WARNS) {
PROF_WARN("Unable to track new values: %s. "
" Consider using option -mllvm -vp-counters-per-site=<n> to "
@ -122,7 +122,9 @@ static ValueProfNode *allocateOneNode(__llvm_profile_data *Data, uint32_t Index,
return 0;
}
Node = COMPILER_RT_PTR_FETCH_ADD(ValueProfNode, CurrentVNode, 1);
if (Node >= EndVNode)
/* Due to section padding, EndVNode point to a byte which is one pass
* an incomplete VNode, so we need to skip the last incomplete node. */
if (Node + 1 > EndVNode)
return 0;
return Node;
@ -201,7 +203,6 @@ __llvm_profile_instrument_target(uint64_t TargetValue, void *Data,
CurVNode = allocateOneNode(PData, CounterIndex, TargetValue);
if (!CurVNode)
return;
CurVNode->Value = TargetValue;
CurVNode->Count++;