csky: kprobe: Fixup code in simulate without 'long'

The type of 'val' is 'unsigned long' in simulate_blz32, so 'val < 0'
can't be true.

Cast 'val' to 'long' here to determine branch token or not,

Fixup instructions: bnezad32, bhsz32, bhz32, blsz32, blz32

Link: https://lore.kernel.org/linux-csky/CAJF2gTQjKXR9gpo06WAWG1aquiT87mATiMGorXs6ChxOxoe90Q@mail.gmail.com/T/#t
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Co-developed-by: Menglong Dong <dong.menglong@zte.com.cn>
Signed-off-by: Menglong Dong <dong.menglong@zte.com.cn>

Guo Ren 8dcbc611 af94002b

+7 -15
+7 -15
arch/csky/kernel/probes/simulate-insn.c
··· 274 simulate_bnezad32(u32 opcode, long addr, struct pt_regs *regs) 275 { 276 unsigned long tmp = opcode & 0x1f; 277 - unsigned long val; 278 279 - csky_insn_reg_get_val(regs, tmp, &val); 280 281 val -= 1; 282 ··· 286 } else 287 instruction_pointer_set(regs, addr + 4); 288 289 - csky_insn_reg_set_val(regs, tmp, val); 290 } 291 292 void __kprobes ··· 297 298 csky_insn_reg_get_val(regs, tmp, &val); 299 300 - if (val >= 0) { 301 instruction_pointer_set(regs, 302 addr + sign_extend32((opcode & 0xffff0000) >> 15, 15)); 303 } else 304 instruction_pointer_set(regs, addr + 4); 305 - 306 - csky_insn_reg_set_val(regs, tmp, val); 307 } 308 309 void __kprobes ··· 312 313 csky_insn_reg_get_val(regs, tmp, &val); 314 315 - if (val > 0) { 316 instruction_pointer_set(regs, 317 addr + sign_extend32((opcode & 0xffff0000) >> 15, 15)); 318 } else 319 instruction_pointer_set(regs, addr + 4); 320 - 321 - csky_insn_reg_set_val(regs, tmp, val); 322 } 323 324 void __kprobes ··· 327 328 csky_insn_reg_get_val(regs, tmp, &val); 329 330 - if (val <= 0) { 331 instruction_pointer_set(regs, 332 addr + sign_extend32((opcode & 0xffff0000) >> 15, 15)); 333 } else 334 instruction_pointer_set(regs, addr + 4); 335 - 336 - csky_insn_reg_set_val(regs, tmp, val); 337 } 338 339 void __kprobes ··· 342 343 csky_insn_reg_get_val(regs, tmp, &val); 344 345 - if (val < 0) { 346 instruction_pointer_set(regs, 347 addr + sign_extend32((opcode & 0xffff0000) >> 15, 15)); 348 } else 349 instruction_pointer_set(regs, addr + 4); 350 - 351 - csky_insn_reg_set_val(regs, tmp, val); 352 } 353 354 void __kprobes
··· 274 simulate_bnezad32(u32 opcode, long addr, struct pt_regs *regs) 275 { 276 unsigned long tmp = opcode & 0x1f; 277 + long val; 278 279 + csky_insn_reg_get_val(regs, tmp, (unsigned long *)&val); 280 281 val -= 1; 282 ··· 286 } else 287 instruction_pointer_set(regs, addr + 4); 288 289 + csky_insn_reg_set_val(regs, tmp, (unsigned long)val); 290 } 291 292 void __kprobes ··· 297 298 csky_insn_reg_get_val(regs, tmp, &val); 299 300 + if ((long) val >= 0) { 301 instruction_pointer_set(regs, 302 addr + sign_extend32((opcode & 0xffff0000) >> 15, 15)); 303 } else 304 instruction_pointer_set(regs, addr + 4); 305 } 306 307 void __kprobes ··· 314 315 csky_insn_reg_get_val(regs, tmp, &val); 316 317 + if ((long) val > 0) { 318 instruction_pointer_set(regs, 319 addr + sign_extend32((opcode & 0xffff0000) >> 15, 15)); 320 } else 321 instruction_pointer_set(regs, addr + 4); 322 } 323 324 void __kprobes ··· 331 332 csky_insn_reg_get_val(regs, tmp, &val); 333 334 + if ((long) val <= 0) { 335 instruction_pointer_set(regs, 336 addr + sign_extend32((opcode & 0xffff0000) >> 15, 15)); 337 } else 338 instruction_pointer_set(regs, addr + 4); 339 } 340 341 void __kprobes ··· 348 349 csky_insn_reg_get_val(regs, tmp, &val); 350 351 + if ((long) val < 0) { 352 instruction_pointer_set(regs, 353 addr + sign_extend32((opcode & 0xffff0000) >> 15, 15)); 354 } else 355 instruction_pointer_set(regs, addr + 4); 356 } 357 358 void __kprobes