Boris Shingarov has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/40939 )
Change subject: base: Add byte order attribute for object files
..
base: Add byte order attribute for object files
This adds byte order as an attribute for object files by
introducing new members to the ObjectFile class. This is
populated by the looking at the ELF headers.
Change-Id: Ibe55699175cc0295e0c9d49bdbe02e580988bc4f
Signed-off-by: Sandipan Das
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/40939
Reviewed-by: Daniel Carvalho
Maintainer: Daniel Carvalho
Tested-by: kokoro
---
M src/base/loader/elf_object.cc
M src/base/loader/elf_object.hh
M src/base/loader/object_file.hh
3 files changed, 14 insertions(+), 0 deletions(-)
Approvals:
Daniel Carvalho: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass
diff --git a/src/base/loader/elf_object.cc b/src/base/loader/elf_object.cc
index 489a4c0..e7fba63 100644
--- a/src/base/loader/elf_object.cc
+++ b/src/base/loader/elf_object.cc
@@ -114,6 +114,7 @@
determineArch();
determineOpSys();
+determineByteOrder();
entry = ehdr.e_entry;
_programHeaderCount = ehdr.e_phnum;
@@ -326,6 +327,15 @@
}
void
+ElfObject::determineByteOrder()
+{
+auto edata = ehdr.e_ident[EI_DATA];
+if (edata == ELFDATANONE)
+panic("invalid ELF data encoding");
+byteOrder = (edata == ELFDATA2MSB) ? ByteOrder::big :
ByteOrder::little;
+}
+
+void
ElfObject::handleLoadableSegment(GElf_Phdr phdr, int seg_num)
{
auto name = std::to_string(seg_num);
diff --git a/src/base/loader/elf_object.hh b/src/base/loader/elf_object.hh
index 797ff1f..7e7b739 100644
--- a/src/base/loader/elf_object.hh
+++ b/src/base/loader/elf_object.hh
@@ -66,6 +66,7 @@
void determineArch();
void determineOpSys();
+void determineByteOrder();
void handleLoadableSegment(GElf_Phdr phdr, int seg_num);
// These values are provided to a linux process by the kernel, so we
diff --git a/src/base/loader/object_file.hh b/src/base/loader/object_file.hh
index 443dfb9..5e767de 100644
--- a/src/base/loader/object_file.hh
+++ b/src/base/loader/object_file.hh
@@ -38,6 +38,7 @@
#include "base/loader/symtab.hh"
#include "base/logging.hh"
#include "base/types.hh"
+#include "enums/ByteOrder.hh"
GEM5_DEPRECATED_NAMESPACE(Loader, loader);
namespace loader
@@ -80,6 +81,7 @@
protected:
Arch arch = UnknownArch;
OpSys opSys = UnknownOpSys;
+ByteOrder byteOrder = ByteOrder::little;
SymbolTable _symtab;
@@ -106,6 +108,7 @@
Arch getArch() const { return arch; }
OpSys getOpSys() const { return opSys; }
+ByteOrder getByteOrder() const { return byteOrder; }
const SymbolTable () const { return _symtab; }
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/40939
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ibe55699175cc0295e0c9d49bdbe02e580988bc4f
Gerrit-Change-Number: 40939
Gerrit-PatchSet: 10
Gerrit-Owner: Sandipan Das
Gerrit-Reviewer: Bobby R. Bruce
Gerrit-Reviewer: Boris Shingarov
Gerrit-Reviewer: Daniel Carvalho
Gerrit-Reviewer: kokoro
Gerrit-CC: Gabe Black
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s