From: Balbir Singh <bsingharora@gmail.com>
To: Petr Mladek <pmladek@suse.com>
Cc: AKASHI Takahiro <takahiro.akashi@linaro.org>,
Jiri Kosina <jikos@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Steven Rostedt <rostedt@goodmis.org>, Torsten Duwe <duwe@lst.de>,
live-patching@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v6 1/9] ppc64 (le): prepare for -mprofile-kernel
Date: Fri, 5 Feb 2016 15:40:27 +1100 [thread overview]
Message-ID: <CAKTCnznB8WQGbuJkek7nhnXW6FSBR+Mk__jeNfpgfpTf8G9MMA@mail.gmail.com> (raw)
In-Reply-To: <20160204110224.GD731@pathway.suse.cz>
On Thu, Feb 4, 2016 at 10:02 PM, Petr Mladek <pmladek@suse.com> wrote:
> On Thu 2016-02-04 18:31:40, AKASHI Takahiro wrote:
>> Jiri, Torsten
>>
>> Thank you for your explanation.
>>
>> On 02/03/2016 08:24 PM, Torsten Duwe wrote:
>> >On Wed, Feb 03, 2016 at 09:55:11AM +0100, Jiri Kosina wrote:
>> >>On Wed, 3 Feb 2016, AKASHI Takahiro wrote:
>> >>>those efforts, we are proposing[1] a new *generic* gcc option, -fprolog-add=N.
>> >>>This option will insert N nop instructions at the beginning of each function.
>> >
>> >>The interesting part of the story with ppc64 is that you indeed want to
>> >>create the callsite before the *most* of the prologue, but not really :)
>> >
>> >I was silently assuming that GCC would do this right on ppc64le; add the NOPs
>> >right after the TOC load. Or after TOC load and LR save? ...
>>
>> On arm/arm64, link register must be saved before any function call. So anyhow
>> we will have to add something, 3 instructions at the minimum, like:
>> save lr
>> branch _mcount
>> restore lr
>> <prologue>
>> ...
>> <body>
>> ...
>
> So, it is similar to PPC that has to handle LR as well.
>
>
>> >>The part of the prologue where TOC pointer is saved needs to happen before
>> >>the fentry/profiling call.
>> >
>> >Yes, any call, to any profiler/tracer/live patcher is potentially global
>> >and needs the _new_ TOC value.
>
> The code below is generated for PPC64LE with -mprofile-kernel using:
>
> $> gcc --version
> gcc (SUSE Linux) 6.0.0 20160121 (experimental) [trunk revision 232670]
> Copyright (C) 2016 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
>
> 0000000000000050 <cmdline_proc_show>:
> 50: 00 00 4c 3c addis r2,r12,0
> 50: R_PPC64_REL16_HA .TOC.
> 54: 00 00 42 38 addi r2,r2,0
> 54: R_PPC64_REL16_LO .TOC.+0x4
> 58: a6 02 08 7c mflr r0
> 5c: 01 00 00 48 bl 5c <cmdline_proc_show+0xc>
> 5c: R_PPC64_REL24 _mcount
> 60: a6 02 08 7c mflr r0
> 64: 10 00 01 f8 std r0,16(r1)
> 68: a1 ff 21 f8 stdu r1,-96(r1)
> 6c: 00 00 22 3d addis r9,r2,0
> 6c: R_PPC64_TOC16_HA .toc
> 70: 00 00 82 3c addis r4,r2,0
> 70: R_PPC64_TOC16_HA .rodata.str1.8
> 74: 00 00 29 e9 ld r9,0(r9)
> 74: R_PPC64_TOC16_LO_DS .toc
> 78: 00 00 84 38 addi r4,r4,0
> 78: R_PPC64_TOC16_LO .rodata.str1.8
> 7c: 00 00 a9 e8 ld r5,0(r9)
> 80: 01 00 00 48 bl 80 <cmdline_proc_show+0x30>
> 80: R_PPC64_REL24 seq_printf
> 84: 00 00 00 60 nop
> 88: 00 00 60 38 li r3,0
> 8c: 60 00 21 38 addi r1,r1,96
> 90: 10 00 01 e8 ld r0,16(r1)
> 94: a6 03 08 7c mtlr r0
> 98: 20 00 80 4e blr
>
>
> And the same function compiled using:
>
> $> gcc --version
> gcc (SUSE Linux) 4.8.5
> Copyright (C) 2015 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
>
> 0000000000000050 <cmdline_proc_show>:
> 50: 00 00 4c 3c addis r2,r12,0
> 50: R_PPC64_REL16_HA .TOC.
> 54: 00 00 42 38 addi r2,r2,0
> 54: R_PPC64_REL16_LO .TOC.+0x4
> 58: a6 02 08 7c mflr r0
> 5c: 10 00 01 f8 std r0,16(r1)
> 60: 01 00 00 48 bl 60 <cmdline_proc_show+0x10>
> 60: R_PPC64_REL24 _mcount
> 64: a6 02 08 7c mflr r0
> 68: 10 00 01 f8 std r0,16(r1)
> 6c: a1 ff 21 f8 stdu r1,-96(r1)
> 70: 00 00 42 3d addis r10,r2,0
> 70: R_PPC64_TOC16_HA .toc
> 74: 00 00 82 3c addis r4,r2,0
> 74: R_PPC64_TOC16_HA .rodata.str1.8
> 78: 00 00 2a e9 ld r9,0(r10)
> 78: R_PPC64_TOC16_LO_DS .toc
> 7c: 00 00 84 38 addi r4,r4,0
> 7c: R_PPC64_TOC16_LO .rodata.str1.8
> 80: 00 00 a9 e8 ld r5,0(r9)
> 84: 01 00 00 48 bl 84 <cmdline_proc_show+0x34>
> 84: R_PPC64_REL24 seq_printf
> 88: 00 00 00 60 nop
> 8c: 00 00 60 38 li r3,0
> 90: 60 00 21 38 addi r1,r1,96
> 94: 10 00 01 e8 ld r0,16(r1)
> 98: a6 03 08 7c mtlr r0
> 9c: 20 00 80 4e blr
>
>
> Please, note that are used either 3 or 4 instructions before the
> mcount location depending on the compiler version.
Thanks Petr
For big endian builds I saw
Dump of assembler code for function alloc_pages_current:
0xc000000000256f00 <+0>: mflr r0
0xc000000000256f04 <+4>: std r0,16(r1)
0xc000000000256f08 <+8>: bl 0xc000000000009e5c <.mcount>
0xc000000000256f0c <+12>: mflr r0
The offset is 8 bytes. Your earlier patch handled this by adding 16, I
suspect it needs revisiting
Balbir
next prev parent reply other threads:[~2016-02-05 4:40 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-25 15:38 [PATCH v6 0/9] ftrace with regs + live patching for ppc64 LE (ABI v2) Torsten Duwe
2016-01-25 15:26 ` [PATCH v6 1/9] ppc64 (le): prepare for -mprofile-kernel Torsten Duwe
2016-01-27 10:19 ` Michael Ellerman
2016-01-27 10:44 ` Torsten Duwe
2016-01-28 4:26 ` Michael Ellerman
2016-01-28 11:50 ` Torsten Duwe
2016-01-27 12:58 ` Alan Modra
2016-01-27 13:45 ` Torsten Duwe
2016-01-28 3:39 ` Michael Ellerman
2016-02-03 7:23 ` AKASHI Takahiro
2016-02-03 8:55 ` Jiri Kosina
2016-02-03 11:24 ` Torsten Duwe
2016-02-04 9:31 ` AKASHI Takahiro
2016-02-04 11:02 ` Petr Mladek
2016-02-05 4:40 ` Balbir Singh [this message]
2016-02-05 10:22 ` Petr Mladek
2016-02-04 21:47 ` Jiri Kosina
2016-01-25 15:27 ` [PATCH v6 2/9] ppc64le FTRACE_WITH_REGS implementation Torsten Duwe
2016-01-25 15:29 ` [PATCH v6 3/9] ppc use ftrace_modify_all_code default Torsten Duwe
2016-01-25 15:29 ` [PATCH v6 4/9] ppc64 ftrace_with_regs configuration variables Torsten Duwe
2016-01-25 15:30 ` [PATCH v6 5/9] ppc64 ftrace_with_regs: spare early boot and low level Torsten Duwe
2016-01-25 15:31 ` [PATCH v6 6/9] ppc64 ftrace: disable profiling for some functions Torsten Duwe
2016-01-25 15:31 ` [PATCH v6 7/9] ppc64 ftrace: disable profiling for some files Torsten Duwe
2016-01-25 15:33 ` [PATCH v6 8/9] Implement kernel live patching for ppc64le (ABIv2) Torsten Duwe
2016-01-26 10:50 ` Miroslav Benes
2016-01-26 12:48 ` Petr Mladek
2016-01-26 13:56 ` Torsten Duwe
2016-02-02 12:12 ` Petr Mladek
2016-02-02 15:45 ` Torsten Duwe
2016-02-02 16:47 ` Petr Mladek
2016-02-02 20:39 ` Jiri Kosina
2016-01-26 14:00 ` Torsten Duwe
2016-01-26 14:14 ` Miroslav Benes
2016-01-27 1:53 ` Jessica Yu
2016-02-02 13:46 ` [PATCH v6 8/9] " Denis Kirjanov
2016-02-10 18:03 ` Torsten Duwe
2016-01-25 15:33 ` [PATCH v6 9/9] Enable LIVEPATCH to be configured on ppc64le and add livepatch.o if it is selected Torsten Duwe
2016-01-27 10:51 ` [PATCH v6 0/9] ftrace with regs + live patching for ppc64 LE (ABI v2) Balbir Singh
2016-01-27 12:19 ` Torsten Duwe
2016-01-28 2:41 ` Balbir Singh
2016-01-28 3:31 ` Michael Ellerman
2016-01-28 11:19 ` Torsten Duwe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAKTCnznB8WQGbuJkek7nhnXW6FSBR+Mk__jeNfpgfpTf8G9MMA@mail.gmail.com \
--to=bsingharora@gmail.com \
--cc=duwe@lst.de \
--cc=jikos@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=live-patching@vger.kernel.org \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=takahiro.akashi@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).