Loading include/linux/objtool.h +4 −13 Original line number Diff line number Diff line Loading @@ -45,12 +45,6 @@ #define STACK_FRAME_NON_STANDARD_FP(func) #endif #define ANNOTATE_NOENDBR \ "986: \n\t" \ ".pushsection .discard.noendbr\n\t" \ ".long 986b\n\t" \ ".popsection\n\t" #define ASM_REACHABLE \ "998:\n\t" \ ".pushsection .discard.reachable\n\t" \ Loading @@ -64,6 +58,8 @@ ".long " __stringify(type) "\n\t" \ ".popsection\n\t" #define ANNOTATE_NOENDBR ASM_ANNOTATE(ANNOTYPE_NOENDBR) #else /* __ASSEMBLY__ */ /* Loading Loading @@ -122,13 +118,6 @@ #endif .endm .macro ANNOTATE_NOENDBR .Lhere_\@: .pushsection .discard.noendbr .long .Lhere_\@ .popsection .endm /* * Use objtool to validate the entry requirement that all code paths do * VALIDATE_UNRET_END before RET. Loading Loading @@ -161,6 +150,8 @@ .popsection .endm #define ANNOTATE_NOENDBR ANNOTATE type=ANNOTYPE_NOENDBR #endif /* __ASSEMBLY__ */ #else /* !CONFIG_OBJTOOL */ Loading include/linux/objtool_types.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,4 +54,9 @@ struct unwind_hint { #define UNWIND_HINT_TYPE_SAVE 6 #define UNWIND_HINT_TYPE_RESTORE 7 /* * Annotate types */ #define ANNOTYPE_NOENDBR 1 #endif /* _LINUX_OBJTOOL_TYPES_H */ tools/include/linux/objtool_types.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,4 +54,9 @@ struct unwind_hint { #define UNWIND_HINT_TYPE_SAVE 6 #define UNWIND_HINT_TYPE_RESTORE 7 /* * Annotate types */ #define ANNOTYPE_NOENDBR 1 #endif /* _LINUX_OBJTOOL_TYPES_H */ tools/objtool/check.c +5 −27 Original line number Diff line number Diff line Loading @@ -2412,34 +2412,14 @@ static int read_annotate(struct objtool_file *file, void (*func)(int type, struc return 0; } static void __annotate_nop(int type, struct instruction *insn) static void __annotate_noendbr(int type, struct instruction *insn) { } static int read_noendbr_hints(struct objtool_file *file) { struct instruction *insn; struct section *rsec; struct reloc *reloc; rsec = find_section_by_name(file->elf, ".rela.discard.noendbr"); if (!rsec) return 0; for_each_reloc(rsec, reloc) { insn = find_insn(file, reloc->sym->sec, reloc->sym->offset + reloc_addend(reloc)); if (!insn) { WARN("bad .discard.noendbr entry"); return -1; } if (type != ANNOTYPE_NOENDBR) return; insn->noendbr = 1; } return 0; } static int read_retpoline_hints(struct objtool_file *file) { struct section *rsec; Loading Loading @@ -2713,12 +2693,10 @@ static int decode_sections(struct objtool_file *file) if (ret) return ret; read_annotate(file, __annotate_nop); /* * Must be before read_unwind_hints() since that needs insn->noendbr. */ ret = read_noendbr_hints(file); ret = read_annotate(file, __annotate_noendbr); if (ret) return ret; Loading Loading
include/linux/objtool.h +4 −13 Original line number Diff line number Diff line Loading @@ -45,12 +45,6 @@ #define STACK_FRAME_NON_STANDARD_FP(func) #endif #define ANNOTATE_NOENDBR \ "986: \n\t" \ ".pushsection .discard.noendbr\n\t" \ ".long 986b\n\t" \ ".popsection\n\t" #define ASM_REACHABLE \ "998:\n\t" \ ".pushsection .discard.reachable\n\t" \ Loading @@ -64,6 +58,8 @@ ".long " __stringify(type) "\n\t" \ ".popsection\n\t" #define ANNOTATE_NOENDBR ASM_ANNOTATE(ANNOTYPE_NOENDBR) #else /* __ASSEMBLY__ */ /* Loading Loading @@ -122,13 +118,6 @@ #endif .endm .macro ANNOTATE_NOENDBR .Lhere_\@: .pushsection .discard.noendbr .long .Lhere_\@ .popsection .endm /* * Use objtool to validate the entry requirement that all code paths do * VALIDATE_UNRET_END before RET. Loading Loading @@ -161,6 +150,8 @@ .popsection .endm #define ANNOTATE_NOENDBR ANNOTATE type=ANNOTYPE_NOENDBR #endif /* __ASSEMBLY__ */ #else /* !CONFIG_OBJTOOL */ Loading
include/linux/objtool_types.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,4 +54,9 @@ struct unwind_hint { #define UNWIND_HINT_TYPE_SAVE 6 #define UNWIND_HINT_TYPE_RESTORE 7 /* * Annotate types */ #define ANNOTYPE_NOENDBR 1 #endif /* _LINUX_OBJTOOL_TYPES_H */
tools/include/linux/objtool_types.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,4 +54,9 @@ struct unwind_hint { #define UNWIND_HINT_TYPE_SAVE 6 #define UNWIND_HINT_TYPE_RESTORE 7 /* * Annotate types */ #define ANNOTYPE_NOENDBR 1 #endif /* _LINUX_OBJTOOL_TYPES_H */
tools/objtool/check.c +5 −27 Original line number Diff line number Diff line Loading @@ -2412,34 +2412,14 @@ static int read_annotate(struct objtool_file *file, void (*func)(int type, struc return 0; } static void __annotate_nop(int type, struct instruction *insn) static void __annotate_noendbr(int type, struct instruction *insn) { } static int read_noendbr_hints(struct objtool_file *file) { struct instruction *insn; struct section *rsec; struct reloc *reloc; rsec = find_section_by_name(file->elf, ".rela.discard.noendbr"); if (!rsec) return 0; for_each_reloc(rsec, reloc) { insn = find_insn(file, reloc->sym->sec, reloc->sym->offset + reloc_addend(reloc)); if (!insn) { WARN("bad .discard.noendbr entry"); return -1; } if (type != ANNOTYPE_NOENDBR) return; insn->noendbr = 1; } return 0; } static int read_retpoline_hints(struct objtool_file *file) { struct section *rsec; Loading Loading @@ -2713,12 +2693,10 @@ static int decode_sections(struct objtool_file *file) if (ret) return ret; read_annotate(file, __annotate_nop); /* * Must be before read_unwind_hints() since that needs insn->noendbr. */ ret = read_noendbr_hints(file); ret = read_annotate(file, __annotate_noendbr); if (ret) return ret; Loading