objtool: Change dead_end_function() to return boolean
authorJosh Poimboeuf <jpoimboe@redhat.com>
Thu, 18 Jul 2019 01:36:50 +0000 (20:36 -0500)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 18 Jul 2019 19:01:08 +0000 (21:01 +0200)
dead_end_function() can no longer return an error.  Simplify its
interface by making it return boolean.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Nick Desaulniers <ndesaulniers@google.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/9e6679610768fb6e6c51dca23f7d4d0c03b0c910.1563413318.git.jpoimboe@redhat.com
tools/objtool/check.c

index dece325..d9d1c9b 100644 (file)
@@ -105,14 +105,9 @@ static struct instruction *next_insn_same_func(struct objtool_file *file,
  *
  * For local functions, we have to detect them manually by simply looking for
  * the lack of a return instruction.
- *
- * Returns:
- *  -1: error
- *   0: no dead end
- *   1: dead end
  */
-static int __dead_end_function(struct objtool_file *file, struct symbol *func,
-                              int recursion)
+static bool __dead_end_function(struct objtool_file *file, struct symbol *func,
+                               int recursion)
 {
        int i;
        struct instruction *insn;
@@ -139,29 +134,29 @@ static int __dead_end_function(struct objtool_file *file, struct symbol *func,
        };
 
        if (func->bind == STB_WEAK)
-               return 0;
+               return false;
 
        if (func->bind == STB_GLOBAL)
                for (i = 0; i < ARRAY_SIZE(global_noreturns); i++)
                        if (!strcmp(func->name, global_noreturns[i]))
-                               return 1;
+                               return true;
 
        if (!func->len)
-               return 0;
+               return false;
 
        insn = find_insn(file, func->sec, func->offset);
        if (!insn->func)
-               return 0;
+               return false;
 
        func_for_each_insn_all(file, func, insn) {
                empty = false;
 
                if (insn->type == INSN_RETURN)
-                       return 0;
+                       return false;
        }
 
        if (empty)
-               return 0;
+               return false;
 
        /*
         * A function can have a sibling call instead of a return.  In that
@@ -174,7 +169,7 @@ static int __dead_end_function(struct objtool_file *file, struct symbol *func,
 
                        if (!dest)
                                /* sibling call to another file */
-                               return 0;
+                               return false;
 
                        if (dest->func && dest->func->pfunc != insn->func->pfunc) {
 
@@ -186,7 +181,7 @@ static int __dead_end_function(struct objtool_file *file, struct symbol *func,
                                         * This is a very rare case.  It means
                                         * they aren't dead ends.
                                         */
-                                       return 0;
+                                       return false;
                                }
 
                                return __dead_end_function(file, dest->func,
@@ -196,13 +191,13 @@ static int __dead_end_function(struct objtool_file *file, struct symbol *func,
 
                if (insn->type == INSN_JUMP_DYNAMIC && list_empty(&insn->alts))
                        /* sibling call */
-                       return 0;
+                       return false;
        }
 
-       return 1;
+       return true;
 }
 
-static int dead_end_function(struct objtool_file *file, struct symbol *func)
+static bool dead_end_function(struct objtool_file *file, struct symbol *func)
 {
        return __dead_end_function(file, func, 0);
 }
@@ -2080,11 +2075,8 @@ static int validate_branch(struct objtool_file *file, struct symbol *func,
                                if (is_fentry_call(insn))
                                        break;
 
-                               ret = dead_end_function(file, insn->call_dest);
-                               if (ret == 1)
+                               if (dead_end_function(file, insn->call_dest))
                                        return 0;
-                               if (ret == -1)
-                                       return 1;
                        }
 
                        if (!no_fp && func && !has_valid_stack_frame(&state)) {