mbox series

[RFC,v4,00/18] objtool: Add support for arm64

Message ID 20190816122403.14994-1-raphael.gault@arm.com (mailing list archive)
Headers show
Series objtool: Add support for arm64 | expand

Message

Raphael Gault Aug. 16, 2019, 12:23 p.m. UTC
Hi,

Changes since RFC V3:
* Rebased on tip/master: Switch/jump table had been refactored
* Take Catalin Marinas comments into account regarding the asm macro for
  marking exceptions.

As of now, objtool only supports the x86_64 architecture but the
groundwork has already been done in order to add support for other
architectures without too much effort.

This series of patches adds support for the arm64 architecture
based on the Armv8.5 Architecture Reference Manual.

Objtool will be a valuable tool to progress and provide more guarentees
on live patching which is a work in progress for arm64.

Once we have the base of objtool working the next steps will be to
port Peter Z's uaccess validation for arm64.


Raphael Gault (18):
  objtool: Add abstraction for computation of symbols offsets
  objtool: orc: Refactor ORC API for other architectures to implement.
  objtool: Move registers and control flow to arch-dependent code
  objtool: arm64: Add required implementation for supporting the aarch64
    architecture in objtool.
  objtool: special: Adapt special section handling
  objtool: arm64: Adapt the stack frame checks for arm architecture
  objtool: Introduce INSN_UNKNOWN type
  objtool: Refactor switch-tables code to support other architectures
  gcc-plugins: objtool: Add plugin to detect switch table on arm64
  objtool: arm64: Implement functions to add switch tables alternatives
  arm64: alternative: Mark .altinstr_replacement as containing
    executable instructions
  arm64: assembler: Add macro to annotate asm function having non
    standard stack-frame.
  arm64: sleep: Prevent stack frame warnings from objtool
  arm64: kvm: Annotate non-standard stack frame functions
  arm64: kernel: Add exception on kuser32 to prevent stack analysis
  arm64: crypto: Add exceptions for crypto object to prevent stack
    analysis
  arm64: kernel: Annotate non-standard stack frame functions
  objtool: arm64: Enable stack validation for arm64

 arch/arm64/Kconfig                            |    1 +
 arch/arm64/crypto/Makefile                    |    3 +
 arch/arm64/include/asm/alternative.h          |    2 +-
 arch/arm64/kernel/Makefile                    |    3 +
 arch/arm64/kernel/hyp-stub.S                  |    3 +
 arch/arm64/kernel/sleep.S                     |    5 +
 arch/arm64/kvm/hyp-init.S                     |    3 +
 arch/arm64/kvm/hyp/entry.S                    |    3 +
 include/linux/frame.h                         |   19 +-
 scripts/Makefile.gcc-plugins                  |    2 +
 scripts/gcc-plugins/Kconfig                   |    9 +
 .../arm64_switch_table_detection_plugin.c     |   58 +
 tools/objtool/Build                           |    2 -
 tools/objtool/arch.h                          |   19 +
 tools/objtool/arch/arm64/Build                |    8 +
 tools/objtool/arch/arm64/arch_special.c       |  165 +
 tools/objtool/arch/arm64/bit_operations.c     |   67 +
 tools/objtool/arch/arm64/decode.c             | 2815 +++++++++++++++++
 .../objtool/arch/arm64/include/arch_special.h |   52 +
 .../arch/arm64/include/asm/orc_types.h        |   96 +
 .../arch/arm64/include/bit_operations.h       |   24 +
 tools/objtool/arch/arm64/include/cfi.h        |   74 +
 .../objtool/arch/arm64/include/insn_decode.h  |  210 ++
 tools/objtool/arch/arm64/orc_dump.c           |   26 +
 tools/objtool/arch/arm64/orc_gen.c            |   40 +
 tools/objtool/arch/x86/Build                  |    3 +
 tools/objtool/arch/x86/arch_special.c         |  107 +
 tools/objtool/arch/x86/decode.c               |   16 +
 tools/objtool/arch/x86/include/arch_special.h |   45 +
 tools/objtool/{ => arch/x86/include}/cfi.h    |    0
 tools/objtool/{ => arch/x86}/orc_dump.c       |    4 +-
 tools/objtool/{ => arch/x86}/orc_gen.c        |  104 +-
 tools/objtool/check.c                         |  309 +-
 tools/objtool/check.h                         |   10 +
 tools/objtool/elf.c                           |    3 +-
 tools/objtool/orc.h                           |    4 +-
 tools/objtool/special.c                       |   28 +-
 tools/objtool/special.h                       |   13 +-
 38 files changed, 4129 insertions(+), 226 deletions(-)
 create mode 100644 scripts/gcc-plugins/arm64_switch_table_detection_plugin.c
 create mode 100644 tools/objtool/arch/arm64/Build
 create mode 100644 tools/objtool/arch/arm64/arch_special.c
 create mode 100644 tools/objtool/arch/arm64/bit_operations.c
 create mode 100644 tools/objtool/arch/arm64/decode.c
 create mode 100644 tools/objtool/arch/arm64/include/arch_special.h
 create mode 100644 tools/objtool/arch/arm64/include/asm/orc_types.h
 create mode 100644 tools/objtool/arch/arm64/include/bit_operations.h
 create mode 100644 tools/objtool/arch/arm64/include/cfi.h
 create mode 100644 tools/objtool/arch/arm64/include/insn_decode.h
 create mode 100644 tools/objtool/arch/arm64/orc_dump.c
 create mode 100644 tools/objtool/arch/arm64/orc_gen.c
 create mode 100644 tools/objtool/arch/x86/arch_special.c
 create mode 100644 tools/objtool/arch/x86/include/arch_special.h
 rename tools/objtool/{ => arch/x86/include}/cfi.h (100%)
 rename tools/objtool/{ => arch/x86}/orc_dump.c (98%)
 rename tools/objtool/{ => arch/x86}/orc_gen.c (66%)

Comments

Josh Poimboeuf Aug. 22, 2019, 7:56 p.m. UTC | #1
On Fri, Aug 16, 2019 at 01:23:45PM +0100, Raphael Gault wrote:
> Hi,
> 
> Changes since RFC V3:
> * Rebased on tip/master: Switch/jump table had been refactored
> * Take Catalin Marinas comments into account regarding the asm macro for
>   marking exceptions.
> 
> As of now, objtool only supports the x86_64 architecture but the
> groundwork has already been done in order to add support for other
> architectures without too much effort.
> 
> This series of patches adds support for the arm64 architecture
> based on the Armv8.5 Architecture Reference Manual.
> 
> Objtool will be a valuable tool to progress and provide more guarentees
> on live patching which is a work in progress for arm64.
> 
> Once we have the base of objtool working the next steps will be to
> port Peter Z's uaccess validation for arm64.

Hi Raphael,

Sorry about the long delay.  I have some comments coming shortly.

One general comment: I noticed that several of the (mostly minor)
suggested changes I made for v1 haven't been fixed.

I'll try to suggest them again here for v4, so you don't need to go back
and find them.  But in the future please try to incorporate all the
comments from previous patch sets before posting new versions.  I'm sure
it wasn't intentional, as you did acknowledge and agree to most of the
changes.  But it does waste people's time and goodwill if you neglect to
incorporate their suggestions.  Thanks.
Raphael Gault Aug. 23, 2019, noon UTC | #2
Hi Josh,

On 8/22/19 8:56 PM, Josh Poimboeuf wrote:
> On Fri, Aug 16, 2019 at 01:23:45PM +0100, Raphael Gault wrote:
>> Hi,
>>
>> Changes since RFC V3:
>> * Rebased on tip/master: Switch/jump table had been refactored
>> * Take Catalin Marinas comments into account regarding the asm macro for
>>    marking exceptions.
>>
>> As of now, objtool only supports the x86_64 architecture but the
>> groundwork has already been done in order to add support for other
>> architectures without too much effort.
>>
>> This series of patches adds support for the arm64 architecture
>> based on the Armv8.5 Architecture Reference Manual.
>>
>> Objtool will be a valuable tool to progress and provide more guarentees
>> on live patching which is a work in progress for arm64.
>>
>> Once we have the base of objtool working the next steps will be to
>> port Peter Z's uaccess validation for arm64.
> 
> Hi Raphael,
> 
> Sorry about the long delay.  I have some comments coming shortly.
> 
> One general comment: I noticed that several of the (mostly minor)
> suggested changes I made for v1 haven't been fixed.
> 
> I'll try to suggest them again here for v4, so you don't need to go back
> and find them.  But in the future please try to incorporate all the
> comments from previous patch sets before posting new versions.  I'm sure
> it wasn't intentional, as you did acknowledge and agree to most of the
> changes.  But it does waste people's time and goodwill if you neglect to
> incorporate their suggestions.  Thanks.
> 

Indeed, sorry about that.

Thanks for you comments, I will do my best to address them shortly. 
However, I won't have access to my professional emails for a little 
while and probably won't be able to work on this before at least a week. 
I'll try to have a new soon though and use my personal email.

Thanks,
Julien Thierry Oct. 14, 2019, 8:37 a.m. UTC | #3
Hi,


On 8/16/19 1:23 PM, Raphael Gault wrote:
> Hi,
> 

[...]

> As of now, objtool only supports the x86_64 architecture but the
> groundwork has already been done in order to add support for other
> architectures without too much effort.
> 
> This series of patches adds support for the arm64 architecture
> based on the Armv8.5 Architecture Reference Manual.
> 

I was wondering about the current status of these patches. Is anyone 
actively working on this?

If not, I can pick that up and try to make this go forward.

Cheers,
Raphael Gault Oct. 14, 2019, 1:27 p.m. UTC | #4
Hi Julien,

On 10/14/19 9:37 AM, Julien Thierry wrote:
> On 8/16/19 1:23 PM, Raphael Gault wrote:
>> Hi,
>>
>
> [...]
>
>> As of now, objtool only supports the x86_64 architecture but the
>> groundwork has already been done in order to add support for other
>> architectures without too much effort.
>>
>> This series of patches adds support for the arm64 architecture
>> based on the Armv8.5 Architecture Reference Manual.
>>
>
> I was wondering about the current status of these patches. Is anyone
> actively working on this?
>
> If not, I can pick that up and try to make this go forward.
>

I am not working on these patches at the moment and I don't know when I
can get back at it so as far as I am concerned you can pick it up but
maybe wait a bit to see if someone else has an interest in this.

Thanks,
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.