File tree Expand file tree Collapse file tree 2 files changed +5
-4
lines changed Expand file tree Collapse file tree 2 files changed +5
-4
lines changed Original file line number Diff line number Diff line change @@ -111,19 +111,20 @@ module Thumb(CT : Theory.Core) = struct
111
111
!! Insn. empty
112
112
113
113
114
- let lift_mem pc opcode insn =
114
+ let lift_mem addr opcode insn =
115
115
let module Mem = Thumb_mem. Make (CT ) in
116
116
let open Mem in
117
+ let pc = W32. (addr + int 4 ) in
117
118
match opcode, (MC.Insn. ops insn : Op.t array ) with
118
119
| `tLDRi , [|Reg rd; Reg rm; Imm i; Imm c; _|]
119
120
| `tLDRspi , [|Reg rd; Reg rm; Imm i; Imm c; _|] ->
120
121
ldri (reg rd) (reg rm) (imm i * 4 ) (cnd c)
121
122
| `tLDRr , [|Reg rd; Reg rm; Reg rn; Imm c; _|] ->
122
123
ldrr (reg rd) (reg rm) (reg rn) (cnd c)
123
124
| `tLDRpci , [|Reg rd; Imm i; Imm c; _|] ->
124
- ldrpci (reg rd) W32. (pc + int 2 ) (imm i) (cnd c)
125
+ ldrpci (reg rd) pc (imm i) (cnd c)
125
126
| `t2LDRpci , [|Reg rd; Imm i; Imm c; _|] ->
126
- ldrpci (reg rd) W32. (pc + int 4 ) (imm i) (cnd c)
127
+ ldrpci (reg rd) pc (imm i) (cnd c)
127
128
| `tLDRBi , [|Reg rd; Reg rm; Imm i; Imm c; _|] ->
128
129
ldrbi (reg rd) (reg rm) (imm i) (cnd c)
129
130
| `tLDRBr , [|Reg rd; Reg rm; Reg rn; Imm c; _|] ->
Original file line number Diff line number Diff line change @@ -49,7 +49,7 @@ module Make(CT : Theory.Core) = struct
49
49
rd < -? signed @@ load s16 (var rn + var rm)
50
50
51
51
let ldrpci rd pc off =
52
- rd < -? load s32 @@ bitv pc + const off
52
+ rd < -? load s32 @@ bitv W32. (pc land ~~ ( int 3 )) + const off
53
53
54
54
let ldm b regs cnd =
55
55
branch cnd [
You can’t perform that action at this time.
0 commit comments