[PATCH v3 26/26] objtool: Add STT_NOTYPE noinstr validation

From: Peter Zijlstra
Date: Tue Mar 24 2020 - 12:12:36 EST


Make sure to also check STT_NOTYPE symbols for noinstr violations.

Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
---
tools/objtool/check.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)

--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -2563,7 +2563,7 @@ static int validate_symbol(struct objtoo
return 1;
}

- if (sym->pfunc != sym || sym->alias != sym)
+ if ((sym->type == STT_FUNC && sym->pfunc != sym) || sym->alias != sym)
return 0;

insn = find_insn(file, sec, sym->offset);
@@ -2610,6 +2610,23 @@ static int validate_section(struct objto
warnings += validate_symbol(file, sec, func, &state);
}

+ if (state.noinstr) {
+ /*
+ * In vmlinux mode we will not run validate_unwind_hints() by
+ * default which means we'll not otherwise visit STT_NOTYPE
+ * symbols.
+ *
+ * In case of --duplicate mode, insn->visited will avoid actual
+ * duplicate work being done.
+ */
+ list_for_each_entry(func, &sec->symbol_list, list) {
+ if (func->type != STT_NOTYPE)
+ continue;
+
+ warnings += validate_symbol(file, sec, func, &state);
+ }
+ }
+
return warnings;
}