arm64 can have empty alternatives, which are effectively no-ops.  Ignore
them.  While at it, fix a memory leak.

Acked-by: Song Liu <[email protected]>
Signed-off-by: Josh Poimboeuf <[email protected]>
---
 tools/objtool/check.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 73451aef68029..e05dc7a93dc1e 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -1953,6 +1953,9 @@ static int add_special_section_alts(struct objtool_file 
*file)
 
        list_for_each_entry_safe(special_alt, tmp, &special_alts, list) {
 
+               if (special_alt->group && !special_alt->orig_len)
+                       goto next;
+
                orig_insn = find_insn(file, special_alt->orig_sec,
                                      special_alt->orig_off);
                if (!orig_insn) {
@@ -1973,10 +1976,6 @@ static int add_special_section_alts(struct objtool_file 
*file)
                }
 
                if (special_alt->group) {
-                       if (!special_alt->orig_len) {
-                               ERROR_INSN(orig_insn, "empty alternative 
entry");
-                               continue;
-                       }
 
                        if (handle_group_alt(file, special_alt, orig_insn, 
&new_insn))
                                return -1;
@@ -2014,6 +2013,7 @@ static int add_special_section_alts(struct objtool_file 
*file)
                        a->next = alt;
                }
 
+next:
                list_del(&special_alt->list);
                free(special_alt);
        }
-- 
2.53.0


Reply via email to