aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Hughes <robert.hughes@arm.com>2019-11-27 14:27:11 +0000
committerDerek Lamberti <derek.lamberti@arm.com>2019-12-06 11:27:47 +0000
commit9934e4e0a458130466a83acc994597bce3bea07b (patch)
tree3da75c0fa1b08e3c056b0a4b68028baefbe808e0
parentfa9a5b757ea1b42ab120aae34699a664a0704b96 (diff)
downloadarmnn-9934e4e0a458130466a83acc994597bce3bea07b.tar.gz
Add asserts to check memcpy addresses
Change-Id: I0432539197b21e3f430970993276be2b8b99bda6 Signed-off-by: Robert Hughes <robert.hughes@arm.com>
-rw-r--r--src/backends/backendsCommon/WorkloadUtils.hpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/backends/backendsCommon/WorkloadUtils.hpp b/src/backends/backendsCommon/WorkloadUtils.hpp
index 6092c5fc90..6fe87071ac 100644
--- a/src/backends/backendsCommon/WorkloadUtils.hpp
+++ b/src/backends/backendsCommon/WorkloadUtils.hpp
@@ -53,8 +53,12 @@ void CopyTensorContentsGeneric(const ITensorHandle* srcTensor, ITensorHandle* ds
TensorShape srcStrides = srcTensor->GetStrides();
const TensorShape& srcShape = srcTensor->GetShape();
+ const auto srcSize = srcTensor->GetStrides()[0] * srcShape[0];
+ boost::ignore_unused(srcSize); // Only used for asserts
TensorShape dstStrides = dstTensor->GetStrides();
const TensorShape& dstShape = dstTensor->GetShape();
+ const auto dstSize = dstTensor->GetStrides()[0] * dstShape[0];
+ boost::ignore_unused(dstSize); // Only used for asserts
size_t srcDepth = 1;
size_t srcBatches = 1;
@@ -112,15 +116,15 @@ void CopyTensorContentsGeneric(const ITensorHandle* srcTensor, ITensorHandle* ds
dstBatchStride,
dstDepthStride);
- const unsigned char* srcData;
- unsigned char* dstData;
+ const unsigned char* srcDataStart;
+ unsigned char* dstDataStart;
{
ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Synchronize buffers");
- srcData = static_cast<const uint8_t*>(srcTensor->Map());
- dstData = static_cast<uint8_t*>(dstTensor->Map());
+ srcDataStart = static_cast<const uint8_t*>(srcTensor->Map());
+ dstDataStart = static_cast<uint8_t*>(dstTensor->Map());
}
- size_t copyLength = std::min(srcChannels*srcChannelStride, dstChannels*dstChannelStride);
+ size_t copyLength = std::min(srcChannels * srcChannelStride, dstChannels * dstChannelStride);
size_t copyWidth = std::min(srcWidth, dstWidth);
size_t copyHeight = std::min(srcHeight, dstHeight);
size_t copyBatches = std::min(srcBatches, dstBatches);
@@ -147,6 +151,8 @@ void CopyTensorContentsGeneric(const ITensorHandle* srcTensor, ITensorHandle* ds
}
}
+ const unsigned char* srcData = srcDataStart;
+ unsigned char* dstData = dstDataStart;
for (unsigned int d = 0; d < copyDepth; ++d)
{
auto srcPtrDepth = srcData;
@@ -161,6 +167,8 @@ void CopyTensorContentsGeneric(const ITensorHandle* srcTensor, ITensorHandle* ds
auto dstPtrChannel = dstData;
for (unsigned int w = 0; w < copyWidth; ++w)
{
+ BOOST_ASSERT(srcData >= srcDataStart && srcData + copyLength <= srcDataStart + srcSize);
+ BOOST_ASSERT(dstData >= dstDataStart && dstData + copyLength <= dstDataStart + dstSize);
copy(dstData, srcData, copyLength);
dstData += dstWidthStride;
srcData += srcWidthStride;