diff options
| author | Ruslan Bukin <br@FreeBSD.org> | 2019-10-10 13:19:21 +0000 |
|---|---|---|
| committer | Ruslan Bukin <br@FreeBSD.org> | 2019-10-10 13:19:21 +0000 |
| commit | cf98ba14dc260458f757fa46419575cf69f45a44 (patch) | |
| tree | 1cafc844f372337d2a95c8a416b915d46bf4daf8 /decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp | |
| parent | a6157d81121ac9559d806dafa346039199598442 (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.cpp | 33 |
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(®ion, 1, OCSD_MEM_SPACE_ANY, dumpFilePathName); + else + err = m_pDecodeTree->updateBinFileRegionMemAcc(®ion, 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++; } |
