aboutsummaryrefslogtreecommitdiff
path: root/decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp
diff options
context:
space:
mode:
authorRuslan Bukin <br@FreeBSD.org>2019-10-10 13:19:21 +0000
committerRuslan Bukin <br@FreeBSD.org>2019-10-10 13:19:21 +0000
commitcf98ba14dc260458f757fa46419575cf69f45a44 (patch)
tree1cafc844f372337d2a95c8a416b915d46bf4daf8 /decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp
parenta6157d81121ac9559d806dafa346039199598442 (diff)
Notes
Diffstat (limited to 'decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp')
-rw-r--r--decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp33
1 files changed, 23 insertions, 10 deletions
diff --git a/decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp b/decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp
index 81ae82ba815c..4eeec732c15b 100644
--- a/decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp
+++ b/decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp
@@ -79,15 +79,19 @@ bool CreateDcdTreeFromSnapShot::createDecodeTree(const std::string &SourceName,
if(m_pReader->getTraceBufferSourceTree(SourceName, tree))
{
int numDecodersCreated = 0; // count how many we create - if none then give up.
+ uint32_t formatter_flags = OCSD_DFRMTR_FRAME_MEM_ALIGN;
/* make a note of the trace binary file name + path to ss directory */
m_BufferFileName = m_pReader->getSnapShotDir() + tree.buffer_info.dataFileName;
ocsd_dcd_tree_src_t src_format = tree.buffer_info.dataFormat == "source_data" ? OCSD_TRC_SRC_SINGLE : OCSD_TRC_SRC_FRAME_FORMATTED;
+ if (tree.buffer_info.dataFormat == "dstream_coresight")
+ formatter_flags = OCSD_DFRMTR_HAS_FSYNCS;
+
/* create the initial device tree */
// TBD: handle syncs / hsyncs data from TPIU
- m_pDecodeTree = DecodeTree::CreateDecodeTree(src_format,OCSD_DFRMTR_FRAME_MEM_ALIGN);
+ m_pDecodeTree = DecodeTree::CreateDecodeTree(src_format, formatter_flags);
if(m_pDecodeTree == 0)
{
LogError("Failed to create decode tree object\n");
@@ -507,15 +511,24 @@ void CreateDcdTreeFromSnapShot::processDumpfiles(std::vector<Parser::DumpDef> &d
while(it != dumps.end())
{
dumpFilePathName = m_pReader->getSnapShotDir() + it->path;
- if(!TrcMemAccessorFile::isExistingFileAccessor(dumpFilePathName))
- {
- ocsd_err_t err = m_pDecodeTree->addBinFileMemAcc(it->address,OCSD_MEM_SPACE_ANY,dumpFilePathName);
- if(err != OCSD_OK)
- {
- std::ostringstream oss;
- oss << "Failed to create memory accessor for file " << dumpFilePathName << ".";
- LogError(ocsdError(OCSD_ERR_SEV_ERROR,err,oss.str()));
- }
+ ocsd_file_mem_region_t region;
+ ocsd_err_t err = OCSD_OK;
+
+ region.start_address = it->address;
+ region.file_offset = it->offset;
+ region.region_size = it->length;
+
+ // ensure we respect optional length and offset parameter and
+ // allow multiple dump entries with same file name to define regions
+ if (!TrcMemAccessorFile::isExistingFileAccessor(dumpFilePathName))
+ err = m_pDecodeTree->addBinFileRegionMemAcc(&region, 1, OCSD_MEM_SPACE_ANY, dumpFilePathName);
+ else
+ err = m_pDecodeTree->updateBinFileRegionMemAcc(&region, 1, OCSD_MEM_SPACE_ANY, dumpFilePathName);
+ if(err != OCSD_OK)
+ {
+ std::ostringstream oss;
+ oss << "Failed to create memory accessor for file " << dumpFilePathName << ".";
+ LogError(ocsdError(OCSD_ERR_SEV_ERROR,err,oss.str()));
}
it++;
}