aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Leach <mike.leach@linaro.org>2023-11-23 15:30:06 +0000
committerMike Leach <mike.leach@linaro.org>2023-12-18 14:58:11 +0000
commit0eb514d153b7742daa41b689c3c0afa626a78482 (patch)
tree0d0c8a2384bebe28c278ecaa8501b163520c992a
parent48938567e0ac8a69415cc96333d9f5a14f652b1e (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.h1
-rw-r--r--decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp56
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(&region, 1, OCSD_MEM_SPACE_ANY, dumpFilePathName);
+ err = m_pDecodeTree->addBinFileRegionMemAcc(&region, 1, mem_space, dumpFilePathName);
else
- err = m_pDecodeTree->updateBinFileRegionMemAcc(&region, 1, OCSD_MEM_SPACE_ANY, dumpFilePathName);
+ err = m_pDecodeTree->updateBinFileRegionMemAcc(&region, 1, mem_space, dumpFilePathName);
if(err != OCSD_OK)
{
std::ostringstream oss;