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

Sathvika Vasireddy posted 16 patches 3 years, 2 months ago
There is a newer version of this series
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
[PATCH v4 00/16] objtool: Enable and implement --mcount option on powerpc
Posted by Sathvika Vasireddy 3 years, 2 months ago
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
Re: [PATCH v4 00/16] objtool: Enable and implement --mcount option on powerpc
Posted by Naveen N. Rao 3 years, 2 months ago
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/20220809105425.424045-1-naveen.n.rao@linux.vnet.ibm.com

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 <naveen.n.rao@linux.vnet.ibm.com>
Tested-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>


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


- Naveen