use gdbstub::arch::Arch;
pub mod reg;
#[derive(Debug)]
pub enum MipsBreakpointKind {
Mips16,
MicroMips16,
Mips32,
MicroMips32,
}
impl gdbstub::arch::BreakpointKind for MipsBreakpointKind {
fn from_usize(kind: usize) -> Option<Self> {
let kind = match kind {
2 => MipsBreakpointKind::Mips16,
3 => MipsBreakpointKind::MicroMips16,
4 => MipsBreakpointKind::Mips32,
5 => MipsBreakpointKind::MicroMips32,
_ => return None,
};
Some(kind)
}
}
pub enum Mips {}
pub enum MipsWithDsp {}
pub enum Mips64 {}
pub enum Mips64WithDsp {}
impl Arch for Mips {
type Usize = u32;
type Registers = reg::MipsCoreRegs<u32>;
type RegId = reg::id::MipsRegId<u32>;
type BreakpointKind = MipsBreakpointKind;
fn target_description_xml() -> Option<&'static str> {
Some(r#"<target version="1.0"><architecture>mips</architecture></target>"#)
}
}
impl Arch for MipsWithDsp {
type Usize = u32;
type Registers = reg::MipsCoreRegsWithDsp<u32>;
type RegId = reg::id::MipsRegId<u32>;
type BreakpointKind = MipsBreakpointKind;
fn target_description_xml() -> Option<&'static str> {
Some(
r#"<target version="1.0"><architecture>mips</architecture><feature name="org.gnu.gdb.mips.dsp"></feature></target>"#,
)
}
}
#[allow(deprecated)]
impl Arch for Mips64 {
type Usize = u64;
type Registers = reg::MipsCoreRegs<u64>;
type RegId = reg::id::MipsRegId<u64>;
type BreakpointKind = MipsBreakpointKind;
fn target_description_xml() -> Option<&'static str> {
None
}
}
#[allow(deprecated)]
impl Arch for Mips64WithDsp {
type Usize = u64;
type Registers = reg::MipsCoreRegsWithDsp<u64>;
type RegId = reg::id::MipsRegId<u64>;
type BreakpointKind = MipsBreakpointKind;
fn target_description_xml() -> Option<&'static str> {
None
}
}