diff options
-rw-r--r-- | src/arch/arm/table_walker.cc | 9 | ||||
-rw-r--r-- | src/arch/arm/utility.hh | 5 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/arch/arm/table_walker.cc b/src/arch/arm/table_walker.cc index 428556b1a..3c79e43ac 100644 --- a/src/arch/arm/table_walker.cc +++ b/src/arch/arm/table_walker.cc @@ -1423,6 +1423,9 @@ TableWalker::doL1Descriptor() return; } + currState->l1Desc.data = htog(currState->l1Desc.data, + byteOrder(currState->tc)); + DPRINTF(TLB, "L1 descriptor for %#x is %#x\n", currState->vaddr_tainted, currState->l1Desc.data); TlbEntry te; @@ -1518,6 +1521,9 @@ TableWalker::doLongDescriptor() return; } + currState->longDesc.data = htog(currState->longDesc.data, + byteOrder(currState->tc)); + DPRINTF(TLB, "L%d descriptor for %#llx is %#llx (%s)\n", currState->longDesc.lookupLevel, currState->vaddr_tainted, currState->longDesc.data, @@ -1709,6 +1715,9 @@ TableWalker::doL2Descriptor() return; } + currState->l2Desc.data = htog(currState->l2Desc.data, + byteOrder(currState->tc)); + DPRINTF(TLB, "L2 descriptor for %#x is %#x\n", currState->vaddr_tainted, currState->l2Desc.data); TlbEntry te; diff --git a/src/arch/arm/utility.hh b/src/arch/arm/utility.hh index 8efe4ad10..796ded771 100644 --- a/src/arch/arm/utility.hh +++ b/src/arch/arm/utility.hh @@ -348,6 +348,11 @@ int decodePhysAddrRange64(uint8_t pa_enc); */ uint8_t encodePhysAddrRange64(int pa_size); +inline ByteOrder byteOrder(ThreadContext *tc) +{ + return isBigEndian64(tc) ? BigEndianByteOrder : LittleEndianByteOrder; +}; + } #endif |