|
@@ -1935,13 +1935,19 @@ static bool ignore_unreachable_insn(struct instruction *insn)
|
|
|
if (is_kasan_insn(insn) || is_ubsan_insn(insn))
|
|
|
return true;
|
|
|
|
|
|
- if (insn->type == INSN_JUMP_UNCONDITIONAL && insn->jump_dest) {
|
|
|
- insn = insn->jump_dest;
|
|
|
- continue;
|
|
|
+ if (insn->type == INSN_JUMP_UNCONDITIONAL) {
|
|
|
+ if (insn->jump_dest &&
|
|
|
+ insn->jump_dest->func == insn->func) {
|
|
|
+ insn = insn->jump_dest;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
if (insn->offset + insn->len >= insn->func->offset + insn->func->len)
|
|
|
break;
|
|
|
+
|
|
|
insn = list_next_entry(insn, list);
|
|
|
}
|
|
|
|