// Memory accesses cannot be unaligned
const bool HasUnalignedMemAcc = false;
+
+ // These otherwise unused bits of the PC are used to select a mode
+ // like the J and T bits of the CPSR.
+ static const Addr PcJBitShift = 33;
+ static const Addr PcTBitShift = 34;
+ static const Addr PcModeMask = (ULL(1) << PcJBitShift) |
+ (ULL(1) << PcTBitShift);
};
using namespace ArmISA;
// integer register to allow renaming.
static const uint32_t CondCodesMask = 0xF80F0000;
- // These otherwise unused bits of the PC are used to select a mode
- // like the J and T bits of the CPSR.
- static const Addr PcJBitShift = 33;
- static const Addr PcTBitShift = 34;
- static const Addr PcModeMask = (ULL(1) << PcJBitShift) |
- (ULL(1) << PcTBitShift);
-
BitUnion32(SCTLR)
Bitfield<30> te; // Thumb Exception Enable
Bitfield<29> afe; // Access flag enable
#include <iomanip>
+#include "arch/isa_traits.hh"
#include "base/loader/symtab.hh"
#include "cpu/base.hh"
#include "cpu/exetrace.hh"
std::string sym_str;
Addr sym_addr;
+ Addr cur_pc = PC;
+#if THE_ISA == ARM_ISA
+ cur_pc &= ~PcModeMask;
+#endif
if (debugSymbolTable
&& IsOn(ExecSymbol)
#if FULL_SYSTEM
&& !inUserMode(thread)
#endif
- && debugSymbolTable->findNearestSymbol(PC, sym_str, sym_addr)) {
- if (PC != sym_addr)
- sym_str += csprintf("+%d", PC - sym_addr);
+ && debugSymbolTable->findNearestSymbol(cur_pc, sym_str, sym_addr)) {
+ if (cur_pc != sym_addr)
+ sym_str += csprintf("+%d",cur_pc - sym_addr);
outs << "@" << sym_str;
}
else {
- outs << "0x" << hex << PC;
+ outs << "0x" << hex << cur_pc;
}
if (inst->isMicroop()) {
//
outs << setw(26) << left;
- outs << inst->disassemble(PC, debugSymbolTable);
+ outs << inst->disassemble(cur_pc, debugSymbolTable);
if (ran) {
outs << " : ";