From ee045acdc8eac2c212ef5000faae3e3238f74b25 Mon Sep 17 00:00:00 2001 From: Maschell Date: Sun, 17 May 2020 13:13:24 +0200 Subject: [PATCH] Save information about sections of a module --- source/module/ModuleData.h | 15 +++++++ source/module/ModuleDataFactory.cpp | 5 +++ source/module/SectionInfo.h | 61 +++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 source/module/SectionInfo.h diff --git a/source/module/ModuleData.h b/source/module/ModuleData.h index 00897c6..2ded0f4 100644 --- a/source/module/ModuleData.h +++ b/source/module/ModuleData.h @@ -61,6 +61,21 @@ public: return relocation_data_list; } + void addSectionInfo(const SectionInfo §ionInfo) { + section_info_list[sectionInfo.getName()] = sectionInfo; + } + + const std::map &getSectionInfoList() const { + return section_info_list; + } + + std::optional getSectionInfo(const std::string §ionName) const { + if (getSectionInfoList().count(sectionName) > 0) { + return section_info_list.at(sectionName); + } + return std::nullopt; + } + uint32_t getBSSAddr() const { return bssAddr; } diff --git a/source/module/ModuleDataFactory.cpp b/source/module/ModuleDataFactory.cpp index 45f124e..4d1319b 100644 --- a/source/module/ModuleDataFactory.cpp +++ b/source/module/ModuleDataFactory.cpp @@ -100,6 +100,11 @@ std::optional ModuleDataFactory::load(std::string path, uint32_t des moduleData.setSBSSLocation(destination, sectionSize); DEBUG_FUNCTION_LINE("Saved %s section info. Location: %08X size: %08X", psec->get_name().c_str(), destination, sectionSize); } + + moduleData.addSectionInfo(SectionInfo(psec->get_name(), destination, sectionSize)); + DEBUG_FUNCTION_LINE("Saved %s section info. Location: %08X size: %08X", psec->get_name().c_str(), destination, sectionSize); + + totalSize += sectionSize; if(endAddress < destination + sectionSize){ diff --git a/source/module/SectionInfo.h b/source/module/SectionInfo.h new file mode 100644 index 0000000..c7ea72b --- /dev/null +++ b/source/module/SectionInfo.h @@ -0,0 +1,61 @@ +/**************************************************************************** + * Copyright (C) 2019 Maschell + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + ****************************************************************************/ + +#pragma once + +#include + +class SectionInfo { + +public: + SectionInfo(std::string name, uint32_t address, uint32_t sectionSize) : + name(name), + address(address), + sectionSize(sectionSize) { + } + + SectionInfo() { + } + + SectionInfo(const SectionInfo &o2) : + name(o2.name), + address(o2.address), + sectionSize(o2.sectionSize) { + } + + + virtual ~SectionInfo() { + + } + + const std::string &getName() const { + return name; + } + + const uint32_t getAddress() const { + return address; + } + + const uint32_t getSize() const { + return sectionSize; + } + +private: + std::string name; + uint32_t address; + uint32_t sectionSize; +};