From 9934e4e0a458130466a83acc994597bce3bea07b Mon Sep 17 00:00:00 2001 From: Rob Hughes Date: Wed, 27 Nov 2019 14:27:11 +0000 Subject: Add asserts to check memcpy addresses Change-Id: I0432539197b21e3f430970993276be2b8b99bda6 Signed-off-by: Robert Hughes --- src/backends/backendsCommon/WorkloadUtils.hpp | 18 +++++++++++++----- 1 file 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(srcTensor->Map()); - dstData = static_cast(dstTensor->Map()); + srcDataStart = static_cast(srcTensor->Map()); + dstDataStart = static_cast(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; -- cgit v1.2.1