|
|
@@ -28,6 +28,8 @@
|
|
|
#include <linux/hashtable.h>
|
|
|
#include <linux/kernel.h>
|
|
|
|
|
|
+#define FAKE_JUMP_OFFSET -1
|
|
|
+
|
|
|
struct alternative {
|
|
|
struct list_head list;
|
|
|
struct instruction *insn;
|
|
|
@@ -501,7 +503,7 @@ static int add_jump_destinations(struct objtool_file *file)
|
|
|
insn->type != INSN_JUMP_UNCONDITIONAL)
|
|
|
continue;
|
|
|
|
|
|
- if (insn->ignore)
|
|
|
+ if (insn->ignore || insn->offset == FAKE_JUMP_OFFSET)
|
|
|
continue;
|
|
|
|
|
|
rela = find_rela_by_dest_range(insn->sec, insn->offset,
|
|
|
@@ -670,10 +672,10 @@ static int handle_group_alt(struct objtool_file *file,
|
|
|
clear_insn_state(&fake_jump->state);
|
|
|
|
|
|
fake_jump->sec = special_alt->new_sec;
|
|
|
- fake_jump->offset = -1;
|
|
|
+ fake_jump->offset = FAKE_JUMP_OFFSET;
|
|
|
fake_jump->type = INSN_JUMP_UNCONDITIONAL;
|
|
|
fake_jump->jump_dest = list_next_entry(last_orig_insn, list);
|
|
|
- fake_jump->ignore = true;
|
|
|
+ fake_jump->func = orig_insn->func;
|
|
|
}
|
|
|
|
|
|
if (!special_alt->new_len) {
|