arch/arm32/arch_arm

Define a set predicates to abstract from ARM specific instruction set and characteristics

long_operation(operation:symbol)

WARNING: Predicate not present in compiled Datalog program (Dead Code)

pc_relative_disp(EA:address, Disp:number)

PC stores the address of the current instruction plus 8 (two ARM instructions) in ARM state, and the current instruction plus 4 (two Thumb instructions) in Thumb state. This is used for computing PC-relative addresses.

NOTE: More specifically, in Thumb state, for B, BL, CBNZ, and CBZ instructions, the value of the PC is the address of the current instruction plus 4 bytes. For all other instructions that use labels, the value of the PC is the address of the current instruction plus 4 bytes, with bit[1] of the result cleared to 0 to make it word-aligned. The word-alignment needs to be handled where this is used.

WARNING: Predicate not present in compiled Datalog program (Dead Code)

dangling_thumb_instr(EA:address)

E.g., 0: movs r0, #0 4: pop { r1, pc} The upper 2-bytes of the mov instruction happens to be a valid Thumb instruction: ITETE in this case.

it_conditional(EA:address, IT:address)

IT: The IT (If-Then) instruction makes up to four following instructions (the IT block) conditional.

ITxyz x,y,z: specifies the condition switch for the second, third, and fourth instruction in the IT block, respectively.

The condition switch in the IT block can be either: T (Then) or E (Else).

This predicate determines if EA is a IT block instruction.

library_string_arg(Func:symbol, Reg:register)

The function Func receives a string argument at register Reg.