2022-10-02 11:29:22

by Sathvika Vasireddy

[permalink] [raw]
Subject: [PATCH v4 00/16] objtool: Enable and implement --mcount option on powerpc

This patchset enables and implements objtool --mcount
option on powerpc. This applies atop powerpc/merge branch.

Changelog:

----
v4:

* Patch 11/16 - Introduce a new config option
CONFIG_HAVE_OBJTOOL_NOP_MCOUNT as a means for
architectures to enable nop'ing ftrace locations.

- Remove Acked-by tag from Peter Zijlstra (Intel),
and Reviewed-by tag from Christophe Leroy.
[This is done because I reworked the patch to add
a new config option to objtool. Please let me know
if you want me to retain the tags. Thanks!]

* Patch 16/16 - Rework the patch to handle only 'bl' instruction
decoding.

----
v3:

* Patch 01/16 - Rework patch subject.
- Rework changelog.
- Add Reviewed-by tag from Christophe Leroy.

* Patch 02/16 - Rework changelog to update details based on feedback
from Nicholas Piggin and Michael Ellerman.
- Use quotes instead of __stringify macro, based on
suggestion from Christophe Leroy.

* Patch 03/16 - Add Reviewed-by tag from Christophe Leroy.
- Based on Christophe's suggestion, keep all <linux/...>
before <asm/...>.
- Rework changelog.

* Patch 04/16 - Add Reviewed-by tag from Christophe Leroy.

* Patch 05/16 - Add Reviewed-by tag from Christophe Leroy.

* Patch 06/16 - No change.

* Patch 07/16 - Add Reviewed-by tag from Christophe Leroy.

* Patch 08/16 - Add Acked-by tag from Peter Zijlstra.

* Patch 09/16 - Add Acked-by tag from Peter Zijlstra.

* Patch 10/16 - Reorder local variable declarations to use reverse
xmas tree format.
- Add Signed-off-by tag from Sathvika Vasireddy indicating
changes done.
- Add Acked-by tag from Peter Zijlstra.

* Patch 11/16 - Update changelog to indicate that powerpc kernel does
not support nop'ed out ftrace locations.
- Add Acked-by tag from Peter Zijlstra.
- Add Reviewed-by tag from Christophe Leroy.

* Patch 12/16 - Per Christophe's comment, rework changelog.

* Patch 13/16 - Add Acked-by tag from Peter Zijlstra.
- Add Reviewed-by tag from Christophe Leroy.

* Patch 14/16 - Simplify arch_ftrace_match() function, based on
Christophe's suggestion.
- Add Reviewed-by tag from Christophe Leroy.

* Patch 15/16 - Include code from Christophe Leroy to use local vars for
type and imm, and to adapt len for prefixed
instructions.

* Patch 16/16 - Based on suggestion from Christophe Leroy, setup
immediate value calculation outside the check for
specific instruction under case 18.
- Set instruction type to INSN_CALL for 'bla'
instruction as well.

----
v2:

* Change subject of patch 01/16
* As suggested by Christophe Leroy, add barrier_before_unreachable()
before __builtin_unreachable() to work around a gcc problem.
* Fix issues reported by Kernel Test Robot.
* Include suggestions from Christophe Leroy, and change commit
messages for patches 01/16, 02/16, 03/16, 05/16.

----

Christophe Leroy (4):
objtool: Fix SEGFAULT
objtool: Use target file endianness instead of a compiled constant
objtool: Use target file class size instead of a compiled constant
powerpc: Fix objtool unannotated intra-function call warnings on PPC32

Sathvika Vasireddy (12):
powerpc: Fix __WARN_FLAGS() for use with Objtool
powerpc: Override __ALIGN and __ALIGN_STR macros
powerpc: Fix objtool unannotated intra-function call warnings
powerpc: Curb objtool unannotated intra-function warnings
powerpc: Skip objtool from running on drivers/crypto/vmx/aesp8-ppc.o
powerpc: Skip objtool from running on VDSO files
objtool: Add --mnop as an option to --mcount
objtool: Read special sections with alts only when specific options are selected
objtool: Use macros to define arch specific reloc types
objtool: Add arch specific function arch_ftrace_match()
objtool/powerpc: Enable objtool to be built on ppc
objtool/powerpc: Add --mcount specific implementation


Makefile | 4 +-
arch/powerpc/Kconfig | 2 +
arch/powerpc/include/asm/asm.h | 7 ++
arch/powerpc/include/asm/bug.h | 3 +-
arch/powerpc/include/asm/linkage.h | 3 +
arch/powerpc/kernel/cpu_setup_6xx.S | 26 +++--
arch/powerpc/kernel/cpu_setup_fsl_booke.S | 8 +-
arch/powerpc/kernel/entry_32.S | 9 +-
arch/powerpc/kernel/entry_64.S | 2 +
arch/powerpc/kernel/exceptions-64s.S | 7 +-
arch/powerpc/kernel/head_40x.S | 5 +-
arch/powerpc/kernel/head_64.S | 7 +-
arch/powerpc/kernel/head_8xx.S | 5 +-
arch/powerpc/kernel/head_book3s_32.S | 29 +++--
arch/powerpc/kernel/head_fsl_booke.S | 5 +-
arch/powerpc/kernel/misc_64.S | 4 +-
arch/powerpc/kernel/swsusp_32.S | 5 +-
arch/powerpc/kernel/vdso/Makefile | 2 +
arch/powerpc/kernel/vector.S | 4 +-
arch/powerpc/kvm/book3s_hv_interrupts.S | 4 +-
arch/powerpc/kvm/book3s_hv_rmhandlers.S | 25 +++--
arch/powerpc/kvm/fpu.S | 17 ++-
arch/powerpc/platforms/52xx/lite5200_sleep.S | 15 ++-
arch/x86/Kconfig | 1 +
drivers/crypto/vmx/Makefile | 2 +
kernel/trace/Kconfig | 7 ++
scripts/Makefile.lib | 1 +
tools/objtool/arch/powerpc/Build | 2 +
tools/objtool/arch/powerpc/decode.c | 101 ++++++++++++++++++
.../arch/powerpc/include/arch/cfi_regs.h | 11 ++
tools/objtool/arch/powerpc/include/arch/elf.h | 10 ++
.../arch/powerpc/include/arch/special.h | 21 ++++
tools/objtool/arch/powerpc/special.c | 19 ++++
tools/objtool/arch/x86/decode.c | 5 +
tools/objtool/arch/x86/include/arch/elf.h | 2 +
.../arch/x86/include/arch/endianness.h | 9 --
tools/objtool/builtin-check.c | 14 +++
tools/objtool/check.c | 53 ++++-----
tools/objtool/elf.c | 8 +-
tools/objtool/include/objtool/arch.h | 2 +
tools/objtool/include/objtool/builtin.h | 1 +
tools/objtool/include/objtool/elf.h | 8 ++
tools/objtool/include/objtool/endianness.h | 32 +++---
tools/objtool/orc_dump.c | 11 +-
tools/objtool/orc_gen.c | 4 +-
tools/objtool/special.c | 3 +-
46 files changed, 418 insertions(+), 107 deletions(-)
create mode 100644 arch/powerpc/include/asm/asm.h
create mode 100644 tools/objtool/arch/powerpc/Build
create mode 100644 tools/objtool/arch/powerpc/decode.c
create mode 100644 tools/objtool/arch/powerpc/include/arch/cfi_regs.h
create mode 100644 tools/objtool/arch/powerpc/include/arch/elf.h
create mode 100644 tools/objtool/arch/powerpc/include/arch/special.h
create mode 100644 tools/objtool/arch/powerpc/special.c
delete mode 100644 tools/objtool/arch/x86/include/arch/endianness.h

--
2.31.1


2022-10-02 12:29:45

by Sathvika Vasireddy

[permalink] [raw]
Subject: [PATCH v4 16/16] objtool/powerpc: Add --mcount specific implementation

This patch enables objtool --mcount on powerpc, and adds implementation
specific to powerpc.

Signed-off-by: Sathvika Vasireddy <[email protected]>
---
arch/powerpc/Kconfig | 1 +
tools/objtool/arch/powerpc/decode.c | 16 ++++++++++++++++
tools/objtool/arch/powerpc/include/arch/elf.h | 2 ++
3 files changed, 19 insertions(+)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index dc05cd23c233..6be2e68fa9eb 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -238,6 +238,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
diff --git a/tools/objtool/arch/powerpc/decode.c b/tools/objtool/arch/powerpc/decode.c
index dcd0975cad6b..01cade98b49e 100644
--- a/tools/objtool/arch/powerpc/decode.c
+++ b/tools/objtool/arch/powerpc/decode.c
@@ -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
diff --git a/tools/objtool/arch/powerpc/include/arch/elf.h b/tools/objtool/arch/powerpc/include/arch/elf.h
index 3c8ebb7d2a6b..73f9ae172fe5 100644
--- a/tools/objtool/arch/powerpc/include/arch/elf.h
+++ b/tools/objtool/arch/powerpc/include/arch/elf.h
@@ -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 */
--
2.31.1

2022-10-02 12:29:54

by Sathvika Vasireddy

[permalink] [raw]
Subject: [PATCH v4 14/16] objtool: Add arch specific function arch_ftrace_match()

Add architecture specific function to look for relocation records
pointing to architecture specific symbols.

Suggested-by: Christophe Leroy <[email protected]>
Reviewed-by: Christophe Leroy <[email protected]>
Signed-off-by: Sathvika Vasireddy <[email protected]>
---
tools/objtool/arch/x86/decode.c | 5 +++++
tools/objtool/check.c | 2 +-
tools/objtool/include/objtool/arch.h | 2 ++
3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c
index c260006106be..28263e231c58 100644
--- a/tools/objtool/arch/x86/decode.c
+++ b/tools/objtool/arch/x86/decode.c
@@ -23,6 +23,11 @@
#include <objtool/builtin.h>
#include <arch/elf.h>

+int arch_ftrace_match(char *name)
+{
+ return !strcmp(name, "__fentry__");
+}
+
static int is_x86_64(const struct elf *elf)
{
switch (elf->ehdr.e_machine) {
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 35bcd4f90acd..856ea80b1cfc 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -2296,7 +2296,7 @@ static int classify_symbols(struct objtool_file *file)
if (arch_is_rethunk(func))
func->return_thunk = true;

- if (!strcmp(func->name, "__fentry__"))
+ if (arch_ftrace_match(func->name))
func->fentry = true;

if (is_profiling_func(func->name))
diff --git a/tools/objtool/include/objtool/arch.h b/tools/objtool/include/objtool/arch.h
index beb2f3aa94ff..5149330f400f 100644
--- a/tools/objtool/include/objtool/arch.h
+++ b/tools/objtool/include/objtool/arch.h
@@ -69,6 +69,8 @@ struct stack_op {

struct instruction;

+int arch_ftrace_match(char *name);
+
void arch_initial_func_cfi_state(struct cfi_init_state *state);

int arch_decode_instruction(struct objtool_file *file, const struct section *sec,
--
2.31.1

2022-10-02 17:56:42

by Christophe Leroy

[permalink] [raw]
Subject: Re: [PATCH v4 16/16] objtool/powerpc: Add --mcount specific implementation



Le 02/10/2022 à 12:42, Sathvika Vasireddy a écrit :
> This patch enables objtool --mcount on powerpc, and adds implementation
> specific to powerpc.
>
> Signed-off-by: Sathvika Vasireddy <[email protected]>

Reviewed-by: Christophe Leroy <[email protected]>

> ---
> arch/powerpc/Kconfig | 1 +
> tools/objtool/arch/powerpc/decode.c | 16 ++++++++++++++++
> tools/objtool/arch/powerpc/include/arch/elf.h | 2 ++
> 3 files changed, 19 insertions(+)
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index dc05cd23c233..6be2e68fa9eb 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -238,6 +238,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
> diff --git a/tools/objtool/arch/powerpc/decode.c b/tools/objtool/arch/powerpc/decode.c
> index dcd0975cad6b..01cade98b49e 100644
> --- a/tools/objtool/arch/powerpc/decode.c
> +++ b/tools/objtool/arch/powerpc/decode.c
> @@ -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
> diff --git a/tools/objtool/arch/powerpc/include/arch/elf.h b/tools/objtool/arch/powerpc/include/arch/elf.h
> index 3c8ebb7d2a6b..73f9ae172fe5 100644
> --- a/tools/objtool/arch/powerpc/include/arch/elf.h
> +++ b/tools/objtool/arch/powerpc/include/arch/elf.h
> @@ -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 */

2022-10-10 12:50:36

by Naveen N. Rao

[permalink] [raw]
Subject: Re: [PATCH v4 00/16] objtool: Enable and implement --mcount option on powerpc

Sathvika Vasireddy wrote:
> This patchset enables and implements objtool --mcount
> option on powerpc. This applies atop powerpc/merge branch.
>
> Changelog:
>
> ----
> v4:
>
> * Patch 11/16 - Introduce a new config option
> CONFIG_HAVE_OBJTOOL_NOP_MCOUNT as a means for
> architectures to enable nop'ing ftrace locations.
>
> - Remove Acked-by tag from Peter Zijlstra (Intel),
> and Reviewed-by tag from Christophe Leroy.
> [This is done because I reworked the patch to add
> a new config option to objtool. Please let me know
> if you want me to retain the tags. Thanks!]
>
> * Patch 16/16 - Rework the patch to handle only 'bl' instruction
> decoding.

With changes to the two patches in this series that I have described,
and with my patch to have ftrace ignore weak symbols (*) applied, I
built a ppc64le config.

(*) http://lkml.kernel.org/r/[email protected]

I then used the below diff to disable objtool and to build with
recordmcount:

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 7e28a8fd4c24fa..81c9f895d69012 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -238,8 +238,6 @@ config PPC
select HAVE_MOD_ARCH_SPECIFIC
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

Comparing available_filter_functions across the two builds showed the
below differences:
$ diff ftrace_funcs_recordmcount_20221010.sort.out ftrace_funcs_objtool_20221010.sort.out
6799d6798
< __dev_alloc_name
6800a6800
> dev_alloc_name_ns
11680d11679
< find_zone.isra.0
22396a22396
> ns_capable_common.part.0

All the above changes are down to compiler optimizations and shuffling
due to CONFIG_OBJTOOL being enabled and changing annotate_unreachable().

As such, for this series:
Reviewed-by: Naveen N. Rao <[email protected]>
Tested-by: Naveen N. Rao <[email protected]>


Josh,
Are you ok if this series is taken in through the powerpc tree?


- Naveen

2022-10-13 00:18:41

by Josh Poimboeuf

[permalink] [raw]
Subject: Re: [PATCH v4 00/16] objtool: Enable and implement --mcount option on powerpc

On Tue, Oct 11, 2022 at 01:20:02PM -0700, Josh Poimboeuf wrote:
> On Mon, Oct 10, 2022 at 05:19:02PM +0530, Naveen N. Rao wrote:
> > All the above changes are down to compiler optimizations and shuffling due
> > to CONFIG_OBJTOOL being enabled and changing annotate_unreachable().
> >
> > As such, for this series:
> > Reviewed-by: Naveen N. Rao <[email protected]>
> > Tested-by: Naveen N. Rao <[email protected]>
> >
> >
> > Josh,
> > Are you ok if this series is taken in through the powerpc tree?
>
> Yes, it looks ok to me. Let me run it through a round of testing.

The testing looked good, so:

Acked-by: Josh Poimboeuf <[email protected]>

--
Josh

2022-10-13 04:07:02

by Naveen N. Rao

[permalink] [raw]
Subject: Re: [PATCH v4 00/16] objtool: Enable and implement --mcount option on powerpc

Josh Poimboeuf wrote:
> On Tue, Oct 11, 2022 at 01:20:02PM -0700, Josh Poimboeuf wrote:
>> On Mon, Oct 10, 2022 at 05:19:02PM +0530, Naveen N. Rao wrote:
>> > All the above changes are down to compiler optimizations and shuffling due
>> > to CONFIG_OBJTOOL being enabled and changing annotate_unreachable().
>> >
>> > As such, for this series:
>> > Reviewed-by: Naveen N. Rao <[email protected]>
>> > Tested-by: Naveen N. Rao <[email protected]>
>> >
>> >
>> > Josh,
>> > Are you ok if this series is taken in through the powerpc tree?
>>
>> Yes, it looks ok to me. Let me run it through a round of testing.
>
> The testing looked good, so:
>
> Acked-by: Josh Poimboeuf <[email protected]>

Thanks!

FYI: your previous reply (that you would be testing it) didn't hit my
inbox and it doesn't seem to have hit the list either.


- Naveen