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