objtool/powerpc: Add --mcount specific implementation
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
This commit is contained in:
committed by
Michael Ellerman
parent
e52ec98c5a
commit
c984aef8c8
@@ -239,6 +239,7 @@ config PPC
|
|||||||
select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S)
|
select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S)
|
||||||
select HAVE_OPTPROBES
|
select HAVE_OPTPROBES
|
||||||
select HAVE_OBJTOOL if PPC32 || MPROFILE_KERNEL
|
select HAVE_OBJTOOL if PPC32 || MPROFILE_KERNEL
|
||||||
|
select HAVE_OBJTOOL_MCOUNT if HAVE_OBJTOOL
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HAVE_PERF_EVENTS_NMI if PPC64
|
select HAVE_PERF_EVENTS_NMI if PPC64
|
||||||
select HAVE_PERF_REGS
|
select HAVE_PERF_REGS
|
||||||
|
|||||||
@@ -9,6 +9,11 @@
|
|||||||
#include <objtool/builtin.h>
|
#include <objtool/builtin.h>
|
||||||
#include <objtool/endianness.h>
|
#include <objtool/endianness.h>
|
||||||
|
|
||||||
|
int arch_ftrace_match(char *name)
|
||||||
|
{
|
||||||
|
return !strcmp(name, "_mcount");
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long arch_dest_reloc_offset(int addend)
|
unsigned long arch_dest_reloc_offset(int addend)
|
||||||
{
|
{
|
||||||
return addend;
|
return addend;
|
||||||
@@ -50,6 +55,17 @@ int arch_decode_instruction(struct objtool_file *file, const struct section *sec
|
|||||||
typ = INSN_OTHER;
|
typ = INSN_OTHER;
|
||||||
imm = 0;
|
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)
|
if (opcode == 1)
|
||||||
*len = 8;
|
*len = 8;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -4,5 +4,7 @@
|
|||||||
#define _OBJTOOL_ARCH_ELF
|
#define _OBJTOOL_ARCH_ELF
|
||||||
|
|
||||||
#define R_NONE R_PPC_NONE
|
#define R_NONE R_PPC_NONE
|
||||||
|
#define R_ABS64 R_PPC64_ADDR64
|
||||||
|
#define R_ABS32 R_PPC_ADDR32
|
||||||
|
|
||||||
#endif /* _OBJTOOL_ARCH_ELF */
|
#endif /* _OBJTOOL_ARCH_ELF */
|
||||||
|
|||||||
Reference in New Issue
Block a user