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)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 24 Jan 2021 03:13:55 +0000 (03:13 +0000)
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 4cf0c44301d76daf2d5522669d67eea6d71e5e1b..2d90895c7757d1bbf17cb2ef7ef30af981dafdd0 100644 (file)
 #define __ARCH_POWER_ISA_TRAITS_HH__
 
 #include "base/types.hh"
+#include "cpu/static_inst_fwd.hh"
+
+namespace LittleEndianGuest {}
 
 namespace PowerISA
 {
 
-const ByteOrder GuestByteOrder = ByteOrder::big;
+const ByteOrder GuestByteOrder = ByteOrder::little;
+using namespace LittleEndianGuest;
+
+StaticInstPtr decodeInst(ExtMachInst);
 
 const Addr PageShift = 12;
 const Addr PageBytes = ULL(1) << PageShift;
index 49fbd6dd7b0195981a54b6c3eeb36c0003ec5b22..124d983b3ba0e47bdf0be85e29477beff479594a 100644 (file)
@@ -245,16 +245,16 @@ ElfObject::determineArch()
     } else if (emach == EM_RISCV) {
         arch = (eclass == ELFCLASS64) ? Riscv64 : Riscv32;
     } else if (emach == EM_PPC && eclass == 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 (emach == EM_PPC64 && eclass == ELFCLASS64) {
         arch = Power;
-        if (edata != ELFDATA2MSB) {
+        if (edata != 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 (emach == 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 {
         warn("Unknown architecture: %d\n", emach);
     }