From: Petr Mladek <pmladek@suse.com>
To: Miroslav Benes <mbenes@suse.cz>
Cc: Torsten Duwe <duwe@lst.de>, Steven Rostedt <rostedt@goodmis.org>,
Michael Ellerman <mpe@ellerman.id.au>,
Jiri Kosina <jkosina@suse.cz>,
linuxppc-dev@lists.ozlabs.org,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
live-patching@vger.kernel.org
Subject: Re: [PATCH v6 8/9] Implement kernel live patching for ppc64le (ABIv2)
Date: Tue, 2 Feb 2016 13:12:24 +0100 [thread overview]
Message-ID: <20160202121224.GS3305@pathway.suse.cz> (raw)
In-Reply-To: <20160126124853.GL3305@pathway.suse.cz>
On Tue 2016-01-26 13:48:53, Petr Mladek wrote:
> On Tue 2016-01-26 11:50:25, Miroslav Benes wrote:
> >
> > [ added Petr to CC list ]
> >
> > On Mon, 25 Jan 2016, Torsten Duwe wrote:
> >
> > > * create the appropriate files+functions
> > > arch/powerpc/include/asm/livepatch.h
> > > klp_check_compiler_support,
> > > klp_arch_set_pc
> > > arch/powerpc/kernel/livepatch.c with a stub for
> > > klp_write_module_reloc
> > > This is architecture-independent work in progress.
> > > * introduce a fixup in arch/powerpc/kernel/entry_64.S
> > > for local calls that are becoming global due to live patching.
> > > And of course do the main KLP thing: return to a maybe different
> > > address, possibly altered by the live patching ftrace op.
> > >
> > > Signed-off-by: Torsten Duwe <duwe@suse.de>
> >
> > Hi,
> >
> > I have a few questions...
> >
> > We still need Petr's patch from [1] to make livepatch work, right? Could
> > you, please, add it to this patch set to make it self-sufficient?
> >
> > Second, what is the situation with mcount prologue between gcc < 6 and
> > gcc-6? Are there only 12 bytes in gcc-6 prologue? If yes, we need to
> > change Petr's patch to make it more general and to be able to cope with
> > different prologues. This is unfortunate. Either way, please mention it
> > somewhere in a changelog.
>
> I am going to update the extra patch. There is an idea to detect the
> offset during build by scrips/recordmcount. This tool looks for the
> ftrace locations. The offset should always be a constant that depends
> on the used architecture, compiler, and compiler flags.
>
> The tool is called post build. We might need to pass the constant
> as a symbol added to the binary. The tool already adds some symbols.
Hmm, the size of the offset is not a constant. In particular, leaf
functions do not set TOC before the mcount location.
For example, the code generated for int_to_scsilun() looks like:
00000000000002d0 <int_to_scsilun>:
2d0: a6 02 08 7c mflr r0
2d4: 10 00 01 f8 std r0,16(r1)
2d8: 01 00 00 48 bl 2d8 <int_to_scsilun+0x8>
2d8: R_PPC64_REL24 _mcount
2dc: a6 02 08 7c mflr r0
2e0: 10 00 01 f8 std r0,16(r1)
2e4: e1 ff 21 f8 stdu r1,-32(r1)
2e8: 00 00 20 39 li r9,0
2ec: 00 00 24 f9 std r9,0(r4)
2f0: 04 00 20 39 li r9,4
2f4: a6 03 29 7d mtctr r9
2f8: 00 00 40 39 li r10,0
2fc: 02 c2 68 78 rldicl r8,r3,56,8
300: 78 23 89 7c mr r9,r4
304: ee 51 09 7d stbux r8,r9,r10
308: 02 00 4a 39 addi r10,r10,2
30c: 01 00 69 98 stb r3,1(r9)
310: 02 84 63 78 rldicl r3,r3,48,16
314: e8 ff 00 42 bdnz 2fc <int_to_scsilun+0x2c>
318: 20 00 21 38 addi r1,r1,32
31c: 10 00 01 e8 ld r0,16(r1)
320: a6 03 08 7c mtlr r0
324: 20 00 80 4e blr
328: 00 00 00 60 nop
32c: 00 00 42 60 ori r2,r2,0
Note that non-leaf functions starts with
0000000000000330 <scsi_set_sense_information>:
330: 00 00 4c 3c addis r2,r12,0
330: R_PPC64_REL16_HA .TOC.
334: 00 00 42 38 addi r2,r2,0
334: R_PPC64_REL16_LO .TOC.+0x4
338: a6 02 08 7c mflr r0
33c: 10 00 01 f8 std r0,16(r1)
340: 01 00 00 48 bl 340 <scsi_set_sense_information+0x10>
340: R_PPC64_REL24 _mcount
The above code is generated from kernel-4.5-rc1 sources 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.
But I get similar code also with
$> gcc-6 --version
gcc-6 (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.
The result is that kernel crashes when trying to trace leaf function
from modules. The mcount location is replaced with a call (branch)
that does not work without the TOC stuff.
By other words, it seems that the code generated with -mprofile-kernel
option has been buggy in all gcc versions.
I am curious that nobody found this earlier. Do I something wrong,
please?
Best Regards,
Petr
next prev parent reply other threads:[~2016-02-02 12:12 UTC|newest]
Thread overview: 44+ 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 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-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
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 [this message]
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=20160202121224.GS3305@pathway.suse.cz \
--to=pmladek@suse.com \
--cc=duwe@lst.de \
--cc=jkosina@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=mpe@ellerman.id.au \
--cc=rostedt@goodmis.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.