-DFTRACE_PATCHABLE_FUNCTION_SIZE=$(NOP_COUNT)
 
 CC_FLAGS_FTRACE := -fpatchable-function-entry=$(NOP_COUNT),$(shell echo $$(($(NOP_COUNT)-1)))
-KBUILD_LDS_MODULE += $(srctree)/arch/parisc/kernel/module.lds
 endif
 
 OBJCOPY_FLAGS =-O binary -R .note -R .comment -S
 
 #include <linux/elf.h>
 #include <linux/vmalloc.h>
 #include <linux/fs.h>
+#include <linux/ftrace.h>
 #include <linux/string.h>
 #include <linux/kernel.h>
 #include <linux/bug.h>
        const char *strtab = NULL;
        const Elf_Shdr *s;
        char *secstrings;
-       int err, symindex = -1;
+       int symindex = -1;
        Elf_Sym *newptr, *oldptr;
        Elf_Shdr *symhdr = NULL;
 #ifdef DEBUG
                        /* patch .altinstructions */
                        apply_alternatives(aseg, aseg + s->sh_size, me->name);
 
+#ifdef CONFIG_DYNAMIC_FTRACE
                /* For 32 bit kernels we're compiling modules with
                 * -ffunction-sections so we must relocate the addresses in the
-                *__mcount_loc section.
+                *  ftrace callsite section.
                 */
-               if (symindex != -1 && !strcmp(secname, "__mcount_loc")) {
+               if (symindex != -1 && !strcmp(secname, FTRACE_CALLSITE_SECTION)) {
+                       int err;
                        if (s->sh_type == SHT_REL)
                                err = apply_relocate((Elf_Shdr *)sechdrs,
                                                        strtab, symindex,
                        if (err)
                                return err;
                }
+#endif
        }
        return 0;
 }
 
+++ /dev/null
-/* SPDX-License-Identifier: GPL-2.0 */
-
-SECTIONS {
-       __mcount_loc : {
-               *(__patchable_function_entries)
-       }
-}
 
 #endif
 
 #ifdef CONFIG_FTRACE_MCOUNT_RECORD
-#ifdef CC_USING_PATCHABLE_FUNCTION_ENTRY
-#define MCOUNT_REC()   . = ALIGN(8);                           \
-                       __start_mcount_loc = .;                 \
-                       KEEP(*(__patchable_function_entries))   \
-                       __stop_mcount_loc = .;
-#else
+/*
+ * The ftrace call sites are logged to a section whose name depends on the
+ * compiler option used. A given kernel image will only use one, AKA
+ * FTRACE_CALLSITE_SECTION. We capture all of them here to avoid header
+ * dependencies for FTRACE_CALLSITE_SECTION's definition.
+ */
 #define MCOUNT_REC()   . = ALIGN(8);                           \
                        __start_mcount_loc = .;                 \
                        KEEP(*(__mcount_loc))                   \
+                       KEEP(*(__patchable_function_entries))   \
                        __stop_mcount_loc = .;
-#endif
 #else
 #define MCOUNT_REC()
 #endif
 
 
 #ifdef CONFIG_FTRACE_MCOUNT_RECORD
 extern void ftrace_init(void);
+#ifdef CC_USING_PATCHABLE_FUNCTION_ENTRY
+#define FTRACE_CALLSITE_SECTION        "__patchable_function_entries"
+#else
+#define FTRACE_CALLSITE_SECTION        "__mcount_loc"
+#endif
 #else
 static inline void ftrace_init(void) { }
 #endif
 
 #endif
 #ifdef CONFIG_FTRACE_MCOUNT_RECORD
        /* sechdrs[0].sh_size is always zero */
-       mod->ftrace_callsites = section_objs(info, "__mcount_loc",
+       mod->ftrace_callsites = section_objs(info, FTRACE_CALLSITE_SECTION,
                                             sizeof(*mod->ftrace_callsites),
                                             &mod->num_ftrace_callsites);
 #endif