diff options
author | Mike Leach <mike.leach@linaro.org> | 2023-11-23 15:30:06 +0000 |
---|---|---|
committer | Mike Leach <mike.leach@linaro.org> | 2023-12-18 14:58:11 +0000 |
commit | 0eb514d153b7742daa41b689c3c0afa626a78482 (patch) | |
tree | 0d0c8a2384bebe28c278ecaa8501b163520c992a | |
parent | 48938567e0ac8a69415cc96333d9f5a14f652b1e (diff) |
tests: Update snapshot reader "dump" section handling
The snapshot reader is updated to use the 'space' key in the [dump] section
of the snapshot files. This sets the memory space used when registering the
memory dump file with the decoder.
Signed-off-by: Mike Leach <mike.leach@linaro.org>
-rw-r--r-- | decoder/tests/snapshot_parser_lib/include/ss_to_dcdtree.h | 1 | ||||
-rw-r--r-- | decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp | 56 |
2 files changed, 55 insertions, 2 deletions
diff --git a/decoder/tests/snapshot_parser_lib/include/ss_to_dcdtree.h b/decoder/tests/snapshot_parser_lib/include/ss_to_dcdtree.h index 3c85f9d152da..bfd558750dda 100644 --- a/decoder/tests/snapshot_parser_lib/include/ss_to_dcdtree.h +++ b/decoder/tests/snapshot_parser_lib/include/ss_to_dcdtree.h @@ -89,6 +89,7 @@ private: void LogError(const std::string &msg); void LogError(const ocsdError &err); + ocsd_mem_space_acc_t getMemSpaceFromString(const std::string& memspace); void processDumpfiles(std::vector<Parser::DumpDef> &dumps); 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 902ce566f44e..c3782a2d39c5 100644 --- a/decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp +++ b/decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp @@ -555,10 +555,61 @@ bool CreateDcdTreeFromSnapShot::getCoreProfile(const std::string &coreName, ocsd return profileOK; } +typedef struct mem_space_keys { + const char* key_name; + ocsd_mem_space_acc_t memspace; +} mem_space_keys_t; + +static mem_space_keys_t space_map[] = { + /* single spaces */ + { "EL1S", OCSD_MEM_SPACE_EL1S }, + { "EL1N", OCSD_MEM_SPACE_EL1N }, + { "EL1R", OCSD_MEM_SPACE_EL1R }, + { "EL2S", OCSD_MEM_SPACE_EL2S }, + { "EL2" , OCSD_MEM_SPACE_EL2 }, /* old EL2 NS name - prior to EL2S existing */ + { "EL2N", OCSD_MEM_SPACE_EL2 }, + { "EL2R", OCSD_MEM_SPACE_EL2R }, + { "EL3" , OCSD_MEM_SPACE_EL3 }, + { "ROOT", OCSD_MEM_SPACE_ROOT }, + /* multiple memory spaces */ + { "S" , OCSD_MEM_SPACE_S}, + { "N" , OCSD_MEM_SPACE_N}, + { "R" , OCSD_MEM_SPACE_R}, + { "ANY" , OCSD_MEM_SPACE_ANY}, + /* older names - from spec but not expected to be used in future. */ + { "H" , OCSD_MEM_SPACE_EL2 }, /* hypervisor - EL2 NS */ + { "P" , OCSD_MEM_SPACE_EL1N }, /* privileged - EL1 NS */ + { "NP" , OCSD_MEM_SPACE_EL1N }, /* non secure privileged - EL1 NS */ + { "SP" , OCSD_MEM_SPACE_EL1S }, /* secure privileged - EL1 S */ + /* table terminator */ + { "", OCSD_MEM_SPACE_NONE}, +}; + +/* get mem space from input string */ +ocsd_mem_space_acc_t CreateDcdTreeFromSnapShot::getMemSpaceFromString(const std::string& memspace) +{ + + + ocsd_mem_space_acc_t mem_space = OCSD_MEM_SPACE_ANY; + if (memspace.length() > 0) { + int i = 0; + + while (space_map[i].memspace != OCSD_MEM_SPACE_NONE) { + if (space_map[i].key_name == memspace) { + mem_space = space_map[i].memspace; + break; + } + i++; + } + } + return mem_space; +} + void CreateDcdTreeFromSnapShot::processDumpfiles(std::vector<Parser::DumpDef> &dumps) { std::string dumpFilePathName; std::vector<Parser::DumpDef>::const_iterator it; + ocsd_mem_space_acc_t mem_space; it = dumps.begin(); while(it != dumps.end()) @@ -570,13 +621,14 @@ void CreateDcdTreeFromSnapShot::processDumpfiles(std::vector<Parser::DumpDef> &d region.start_address = it->address; region.file_offset = it->offset; region.region_size = it->length; + mem_space = getMemSpaceFromString(it->space); // 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); + err = m_pDecodeTree->addBinFileRegionMemAcc(®ion, 1, mem_space, dumpFilePathName); else - err = m_pDecodeTree->updateBinFileRegionMemAcc(®ion, 1, OCSD_MEM_SPACE_ANY, dumpFilePathName); + err = m_pDecodeTree->updateBinFileRegionMemAcc(®ion, 1, mem_space, dumpFilePathName); if(err != OCSD_OK) { std::ostringstream oss; |