cpu: Implement a CapstoneDisassembler
Capstone is an open source disassembler [1] already used by other projects (like QEMU). gem5 is already capable of disassembling instructions. Every StaticInst is supposed to define a generateDisassembly method which returns the instruction mnemonic (opcode + operand list) as a string. This "distributed" implementation of a disassembler relies on the developer to properly populate the metadata fields of the base instruction class. The growing complexity of the ISA code and the massive reuse of base classes beyond their intended use has led to a disassembling logic which contains several bugs. By allowing a tracer to rely on a third party disassembler, we fill the intruction trace with a more trustworthy instruction stream. This will make any trace parsing tool to work better and it will also allow us to spot/fix our own bugs by comparing instruction traces with native vs custom disassembler [1]: http://www.capstone-engine.org/ Change-Id: I3c4db5072c03d2731265d0398d3863c101dcb180 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# -*- mode:python -*-
|
||||
|
||||
# Copyright (c) 2020 ARM Limited
|
||||
# Copyright (c) 2020, 2023 Arm Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
@@ -115,6 +115,9 @@ Source('simple_thread.cc')
|
||||
Source('thread_context.cc')
|
||||
Source('thread_state.cc')
|
||||
Source('timing_expr.cc')
|
||||
SourceLib('capstone', tags='capstone')
|
||||
Source('capstone.cc', tags='capstone')
|
||||
SimObject('Capstone.py', sim_objects=['CapstoneDisassembler'], tags='capstone')
|
||||
|
||||
SimObject('DummyChecker.py', sim_objects=['DummyChecker'])
|
||||
Source('checker/cpu.cc')
|
||||
|
||||
Reference in New Issue
Block a user