strncmp(sec->name, ".discard.", 9))
                        sec->text = true;
 
-               if (!strcmp(sec->name, ".noinstr.text"))
+               if (!strcmp(sec->name, ".noinstr.text") ||
+                   !strcmp(sec->name, ".entry.text"))
                        sec->noinstr = true;
 
                for (offset = 0; offset < sec->len; offset += insn->len) {
 static int validate_call(struct instruction *insn, struct insn_state *state)
 {
        if (state->noinstr && state->instr <= 0 &&
-           (!insn->call_dest || insn->call_dest->sec != insn->sec)) {
+           (!insn->call_dest || !insn->call_dest->sec->noinstr)) {
                WARN_FUNC("call to %s() leaves .noinstr.text section",
                                insn->sec, insn->offset, call_dest_name(insn));
                return 1;
        int warnings = 0;
 
        sec = find_section_by_name(file->elf, ".noinstr.text");
-       if (!sec)
-               return 0;
+       if (sec) {
+               warnings += validate_section(file, sec);
+               warnings += validate_unwind_hints(file, sec);
+       }
 
-       warnings += validate_section(file, sec);
-       warnings += validate_unwind_hints(file, sec);
+       sec = find_section_by_name(file->elf, ".entry.text");
+       if (sec) {
+               warnings += validate_section(file, sec);
+               warnings += validate_unwind_hints(file, sec);
+       }
 
        return warnings;
 }