]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
objtool/powerpc: Add --mcount specific implementation
authorSathvika Vasireddy <sv@linux.ibm.com>
Mon, 14 Nov 2022 17:57:54 +0000 (23:27 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 18 Nov 2022 08:00:16 +0000 (19:00 +1100)
This patch enables objtool --mcount on powerpc, and adds implementation
specific to powerpc.

Tested-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Reviewed-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Sathvika Vasireddy <sv@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20221114175754.1131267-17-sv@linux.ibm.com
arch/powerpc/Kconfig
tools/objtool/arch/powerpc/decode.c
tools/objtool/arch/powerpc/include/arch/elf.h

index 12e6c16be54e8a4f5c451a3315d42a31453107ee..9c07068ba5e5db3caa58992539b566331c8ecd46 100644 (file)
@@ -239,6 +239,7 @@ config PPC
        select HAVE_NMI                         if PERF_EVENTS || (PPC64 && PPC_BOOK3S)
        select HAVE_OPTPROBES
        select HAVE_OBJTOOL                     if PPC32 || MPROFILE_KERNEL
+       select HAVE_OBJTOOL_MCOUNT              if HAVE_OBJTOOL
        select HAVE_PERF_EVENTS
        select HAVE_PERF_EVENTS_NMI             if PPC64
        select HAVE_PERF_REGS
index dcd0975cad6ba81b929d2d28573065f013aa673c..01cade98b49e857507068416970a9ad817adad67 100644 (file)
@@ -9,6 +9,11 @@
 #include <objtool/builtin.h>
 #include <objtool/endianness.h>
 
+int arch_ftrace_match(char *name)
+{
+       return !strcmp(name, "_mcount");
+}
+
 unsigned long arch_dest_reloc_offset(int addend)
 {
        return addend;
@@ -50,6 +55,17 @@ int arch_decode_instruction(struct objtool_file *file, const struct section *sec
        typ = INSN_OTHER;
        imm = 0;
 
+       switch (opcode) {
+       case 18: /* b[l][a] */
+               if ((insn & 3) == 1) /* bl */
+                       typ = INSN_CALL;
+
+               imm = insn & 0x3fffffc;
+               if (imm & 0x2000000)
+                       imm -= 0x4000000;
+               break;
+       }
+
        if (opcode == 1)
                *len = 8;
        else
index 3c8ebb7d2a6bb83f06328638f1b0b4d540d44f62..73f9ae172fe551f4d9ddf3dda931dddc327de32e 100644 (file)
@@ -4,5 +4,7 @@
 #define _OBJTOOL_ARCH_ELF
 
 #define R_NONE R_PPC_NONE
+#define R_ABS64 R_PPC64_ADDR64
+#define R_ABS32 R_PPC_ADDR32
 
 #endif /* _OBJTOOL_ARCH_ELF */