arch-power: Make ELF interpreter read 64-bit LSB executables
authorSandipan Das <sandipan@linux.vnet.ibm.com>
Mon, 4 Jun 2018 16:21:23 +0000 (21:51 +0530)
committerSandipan Das <sandipan@linux.vnet.ibm.com>
Wed, 6 Jun 2018 18:08:45 +0000 (23:38 +0530)
This makes the ELF interpreter read 64-bit little endian (LSB)
PowerPC executables only. This drops support for the 32-bit big
endian (MSB) executables as the goal here is to enable a modern
64-bit execution environment for the Power ISA.

Change-Id: I0569f7e1d1e58ce874ec2d13291e7a758d56399f
Signed-off-by: Sandipan Das <sandipan@linux.vnet.ibm.com>
src/arch/power/isa_traits.hh
src/base/loader/elf_object.cc

index 9afe6803a1f99ae4f204dce66a1057ca5e0d499f..99f76ffadf4cdf5dba6ee26882a74146f3da1b8a 100644 (file)
 #include "base/types.hh"
 #include "cpu/static_inst_fwd.hh"
 
-namespace BigEndianGuest {}
+namespace LittleEndianGuest {}
 
 namespace PowerISA
 {
 
-using namespace BigEndianGuest;
+using namespace LittleEndianGuest;
 
 StaticInstPtr decodeInst(ExtMachInst);
 
index 60c79f8039cc54b7246a82ba42daf19f4115d3ab..8e1e065a549fb6813f8e610162545bb3a2ef5815 100644 (file)
@@ -115,16 +115,17 @@ ElfObject::tryFile(const std::string &fname, size_t len, uint8_t *data,
         arch = Riscv;
     } else if (ehdr.e_machine == EM_PPC &&
                ehdr.e_ident[EI_CLASS] == ELFCLASS32) {
+        fatal("The binary you're trying to load is compiled for 32-bit "
+              "Power.\ngem5 only supports 64-bit Power. Please "
+              "recompile your binary.\n");
+    } else if (ehdr.e_machine == EM_PPC64 &&
+               ehdr.e_ident[EI_CLASS] == ELFCLASS64) {
         arch = Power;
-        if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB) {
+        if (ehdr.e_ident[EI_DATA] != ELFDATA2LSB) {
             fatal("The binary you're trying to load is compiled for "
-                  "little endian Power.\ngem5 only supports big "
+                  "big endian Power.\ngem5 only supports little "
                   "endian Power. Please recompile your binary.\n");
         }
-    } else if (ehdr.e_machine == EM_PPC64) {
-        fatal("The binary you're trying to load is compiled for 64-bit "
-              "Power. M5\n only supports 32-bit Power. Please "
-              "recompile your binary.\n");
     } else if (ehdr.e_ident[EI_CLASS] == ELFCLASS64) {
         // Since we don't know how to check for alpha right now, we'll
         // just assume if it wasn't something else and it's 64 bit, that's