Skip to content

PowerPC: PPC_INS_BDZLA behaves like a relative branch #968

Closed
@PeterMatula

Description

@PeterMatula

According to PowerPC specification, bdzla (PPC_INS_BDZLA) is a bcla variant -- absolute branch. But it looks like Capstone (next branch) takes it as a relative branch -- PPC_OP_IMM operand value is address + imm instead of just imm.

The output of my Capstone dumper utility program (dumps everything capstone knows about an instruction) should be pretty self-explanatory:

$ capstone-dumper -a ppc -m 32 -e big -b 0x1000 -t "bdzla 0x1234"

Keystone input : bdzla 0x1234
Keystone output: 42 40 12 37 

Capstone version: 1024 (major: 4, minor: 0)

#0
        General info:
                id     :  34 (bdzla)
                addr   :  1000
                size   :  4
                bytes  :  42 40 12 37 
                mnem   :  bdzla
                op str :  0x2234
        Detail info:
                R regs :  2
                        10 (ctr)
                        205 (rm)
                W regs :  1
                        10 (ctr)
                groups :  0
        Architecture-dependent info:
                branch code :  PPC_BC_INVALID
                branch hint :  PPC_BH_INVALID
                update cr0  :  false
                op count    :  1

                        type   :  PPC_OP_IMM
                        imm    :  0x2234

Instruction is at 0x1000 and ASM operand is 0x1234, but Capstone operand is 0x2234. I think it should be 0x1234.

The same thing for bdnzla (PPC_INS_BDNZLA) seems to be ok (operand is 0x1234):

$ capstone-dumper -a ppc -m 32 -e big -b 0x1000 -t "bdnzla 0x1234"

Keystone input : bdnzla 0x1234
Keystone output: 42 00 12 37 

Capstone version: 1024 (major: 4, minor: 0)

#0
        General info:
                id     :  28 (bdnzla)
                addr   :  1000
                size   :  4
                bytes  :  42 00 12 37 
                mnem   :  bdnzla
                op str :  0x1234
        Detail info:
                R regs :  2
                        10 (ctr)
                        205 (rm)
                W regs :  1
                        10 (ctr)
                groups :  0
        Architecture-dependent info:
                branch code :  PPC_BC_INVALID
                branch hint :  PPC_BH_INVALID
                update cr0  :  false
                op count    :  1

                        type   :  PPC_OP_IMM
                        imm    :  0x1234

Metadata

Metadata

Assignees

No one assigned

    Labels

    PowerPCArchbugSomething is not working as it should

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions