Brandon Potter has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/23145 )
Change subject: base: add features to MemoryImage::Segment
......................................................................
base: add features to MemoryImage::Segment
This changeset adds some helper methods to Segment to allow
usage of standard algorithms in a subsequent changeset. The
following changeset needs to be able to sort and partition
the segments.
Change-Id: I8a481c69b5ec142ee36b6884c009f32d12b411e0
---
M src/base/loader/elf_object.cc
M src/base/loader/memory_image.hh
2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/src/base/loader/elf_object.cc b/src/base/loader/elf_object.cc
index bbaa27b..69038a3 100644
--- a/src/base/loader/elf_object.cc
+++ b/src/base/loader/elf_object.cc
@@ -258,7 +258,7 @@
auto name = std::to_string(seg_num);
image.addSegment({ name, phdr.p_paddr, imageData,
- phdr.p_offset, phdr.p_filesz });
+ phdr.p_offset, phdr.p_filesz, phdr.p_flags });
Addr uninitialized = phdr.p_memsz - phdr.p_filesz;
if (uninitialized) {
// There may be parts of a segment which aren't included in the
@@ -266,7 +266,8 @@
// data to take up the extra space. This should be zeroed when
// loaded into memory.
image.addSegment({ name + "(uninitialized)",
- phdr.p_paddr + phdr.p_filesz, uninitialized });
+ phdr.p_paddr + phdr.p_filesz, uninitialized,
+ phdr.p_flags});
}
const Addr file_start = phdr.p_offset;
diff --git a/src/base/loader/memory_image.hh
b/src/base/loader/memory_image.hh
index a10daba..ce91e94 100644
--- a/src/base/loader/memory_image.hh
+++ b/src/base/loader/memory_image.hh
@@ -51,17 +51,19 @@
struct Segment
{
Segment(const std::string &_name, Addr _base,
- const uint8_t *_data, size_t _size) :
- name(_name), base(_base), data(_data), size(_size)
+ const uint8_t *_data, size_t _size, unsigned _flags = 0) :
+ name(_name), base(_base), data(_data), size(_size),
flags(_flags)
{}
- Segment(const std::string &_name, Addr _base, size_t _size) :
- name(_name), base(_base), size(_size)
+ Segment(const std::string &_name, Addr _base, size_t _size,
+ unsigned _flags = 0) :
+ name(_name), base(_base), size(_size), flags(_flags)
{}
Segment(const std::string &_name, Addr _base,
- const ImageFileDataPtr &_ifd, Addr offset, size_t _size) :
- ifd(_ifd), name(_name), base(_base), size(_size)
+ const ImageFileDataPtr &_ifd, Addr offset, size_t _size,
+ unsigned _flags = 0) :
+ ifd(_ifd), name(_name), base(_base), size(_size), flags(_flags)
{
panic_if(offset + size > ifd->len(),
"Segment outside the bounds of the image data");
@@ -72,11 +74,15 @@
Segment(_name, 0, _ifd, 0, _ifd->len())
{}
+ bool executable() const { return flags & 0x1; }
+ bool operator <(const Segment& o) const { return base < o.base; }
+
ImageFileDataPtr ifd;
std::string name;
Addr base = 0;
const uint8_t *data = nullptr;
size_t size = 0;
+ unsigned flags;
};
MemoryImage() {}
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/23145
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I8a481c69b5ec142ee36b6884c009f32d12b411e0
Gerrit-Change-Number: 23145
Gerrit-PatchSet: 1
Gerrit-Owner: Brandon Potter <brandon.pot...@amd.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev