All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad@kernel.org>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: sstabellini@kernel.org, keir@xen.org, andrew.cooper3@citrix.com,
	mpohlack@amazon.com, ross.lagerwall@citrix.com,
	julien.grall@arm.com, Jan Beulich <jbeulich@suse.com>,
	sasha.levin@oracle.com, xen-devel@lists.xenproject.org
Subject: Re: [PATCH v8.1 11/27] xsplice: Implement payload loading
Date: Thu, 21 Apr 2016 11:15:25 -0400	[thread overview]
Message-ID: <20160421151525.GA29709@localhost.localdomain> (raw)
In-Reply-To: <20160420155913.GA29455@localhost.localdomain>

On Wed, Apr 20, 2016 at 11:59:34AM -0400, Konrad Rzeszutek Wilk wrote:
> > >+void arch_xsplice_free_payload(void *va)
> > >+{
> > >+    vfree_xen(va);
> > >+}
> > 
> > What is the idea behind having this hook (instead of generic code just calling
> > vfree_xen() [or really just vfree()])?
> 
> To have an symmetry with the allocation one. I don't know enough about
> ARM to know whether this logic above can be hoisted in the common code
> and hence called (or compiled) on ARM.
> 
> Let me try.

That worked out nicely. vzalloc_xen and vfree and the
arch_xsplice_alloc_payload and arch_xsplice_free_payload are gone.

> > 
> > >@@ -29,6 +30,13 @@ struct payload {
> >      >uint32_t state;                      /* One of the XSPLICE_STATE_*. */
> >      >int32_t rc;                          /* 0 or -XEN_EXX. */
> >      >struct list_head list;               /* Linked to 'payload_list'. */
> > >+    void *text_addr;                     /* Virtual address of .text. */
> > >+    size_t text_size;                    /* .. and its size. */
> > >+    void *rw_addr;                       /* Virtual address of .data. */
> > >+    size_t rw_size;                      /* .. and its size (if any). */
> > >+    void *ro_addr;                       /* Virtual address of .rodata. */
> > >+    size_t ro_size;                      /* .. and its size (if any). */
> > 
> > And again the question: Do these pointers really need to be non-const?
> 
> I know I tried making them const and the compiler was not happy. I will
> follow up with the reasoning.

The big problem I ran in was that I had to do casting in
'modify_payload'. To lower the amount of casting I ended making

load_addr be void * (if it was const void * I would have to cast away
the constness in xsplice_elf.c):

 elf->sec[i].load_addr = (void *)buf + offset[i];

where 'buf' is:
  buf = payload->text_addr;

(and buf it also a const void *).
> > 
> > >+static void calc_section(struct xsplice_elf_sec *sec, size_t *size)
> > >+{
> > >+    Elf_Shdr *s = sec->sec;
> > >+    size_t align_size;
> > >+
> > >+    align_size = ROUNDUP(*size, s->sh_addralign);
> > >+    s->sh_entsize = align_size;
> > 
> > So this is one of the places (the only one?) where the section header gets
> > altered. Are you not expecting problems down the road resulting from
> > overwriting this field? After all it's used not just in control sections...
> 
> The 'man elf' tells me :
> "Some  sections  hold a table of fixed-sized entries, such as a symbol
> table.  For such a section, this member gives the size in bytes for each entry.
>  This member contains zero if the section does not hold  a  table  of 
> fixed-size entries."
> 
> We may have an value for an payload with one symbol but we don't depend
> on this value having any value and just re-use.
> 
> We could change the logic to save the aligned size (which would then alter
> the amount of pages to allocate along with the amount of bytes to copy)
> in some 'per-section' temporary variable (so adding an extra field in
> 'struct xsplice_elf_sec').
> 
> Let me prototype that.

And it worked out nicely.

.. snip..
> > >+int xsplice_elf_resolve_symbols(struct xsplice_elf *elf)
> .. snip..
> > >+        default:
.. snip..
> > >+            if ( !(elf->sec[idx].sec->sh_flags & SHF_ALLOC) )
> > >+                break;
> > 
> > If you really mean to check this, shouldn't this be done earlier, avoiding needless
> > errors on unsupported symbol kinds above?
> 

So I am coming back to this. The ones that this hits are:
Symbol's  section .note.GNU-stack is !SHF_ALLOC
Symbol's  section .comment is !SHF_ALLOC
Symbol's  section .debug_aranges is !SHF_ALLOC
Symbol's  section .debug_pubnames is !SHF_ALLOC
Symbol's  section .debug_info is !SHF_ALLOC
Symbol's  section .debug_abbrev is !SHF_ALLOC
Symbol's  section .debug_line is !SHF_ALLOC
Symbol's  section .debug_frame is !SHF_ALLOC
Symbol's  section .debug_str is !SHF_ALLOC
Symbol's  section .debug_loc is !SHF_ALLOC
Symbol's  section .debug_pubtypes is !SHF_ALLOC

I am not sure what to make out of it. As in the code ignores
these sections. I tried to ake the test code strip these out:

strip -d 

But that stripped out the relocation entries out to!
Doing just:

strip -R .comment

Did the same exact thing (ripped out .rela*).

Keep in mind that this code above does not set 'rc' at all - so
the rc is 0 by default and we just ignore this specific section.

I would rather keep it this way - otherwise I have to make the
test code go through an hand-rolled linker script -  I can't use
Xen's (xen.lds.S) as it has the ASSERTS that get triggered:

#ifdef CONFIG_KEXEC
ASSERT(kexec_reloc_size - kexec_reloc <= PAGE_SIZE, "kexec_reloc is too
large")
#endif

As the object file has none of these entries in it.

What's your preference? Leave it as is (so skip over those
sections), or be pedantic on them and require no !SHF_ALLOC sections?

And also bail out if any of the sections don't have an st_type that we
implement, such as .comment:

 [28] .comment          PROGBITS 0000000000000000  000002a4
       000000000000005a  0000000000000001  MS       0     0     1

Or let them be but not do anything to them (whcih is what we currently
do).

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  parent reply	other threads:[~2016-04-21 15:15 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-13 22:01 [PATCH v8.1] xSplice v1 design and implementation Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 01/27] Revert "libxc/libxl/python/xenstat/ocaml: Use new XEN_VERSION hypercall" Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 02/27] Revert "HYPERCALL_version_op. New hypercall mirroring XENVER_ but sane." Konrad Rzeszutek Wilk
2016-04-14 16:14   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 03/27] xsplice: Design document Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 04/27] xen/xsplice: Hypervisor implementation of XEN_XSPLICE_op Konrad Rzeszutek Wilk
2016-04-14 16:36   ` Jan Beulich
2016-04-15  2:28     ` Konrad Rzeszutek Wilk
2016-04-17  8:05       ` Jan Beulich
2016-04-18  7:48         ` Konrad Rzeszutek Wilk
2016-04-18 16:33           ` Jan Beulich
2016-04-19 10:14             ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 05/27] libxc: Implementation of XEN_XSPLICE_op in libxc Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 06/27] xen-xsplice: Tool to manipulate xsplice payloads Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 07/27] arm/x86: Use struct virtual_region to do bug, symbol, and (x86) exception tables lookup Konrad Rzeszutek Wilk
2016-04-14 16:50   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 08/27] arm/x86/vmap: Add vmalloc_xen, vfree_xen and vm_init_type Konrad Rzeszutek Wilk
2016-04-17 20:17   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 09/27] x86/mm: Introduce modify_xen_mappings() Konrad Rzeszutek Wilk
2016-04-14  4:07   ` Jan Beulich
2016-04-14 13:34     ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 10/27] xsplice: Add helper elf routines Konrad Rzeszutek Wilk
2016-04-17 20:55   ` Jan Beulich
2016-04-18  5:53     ` Konrad Rzeszutek Wilk
2016-04-18  6:23       ` Jan Beulich
2016-04-20 16:07         ` Konrad Rzeszutek Wilk
2016-04-20 16:59           ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 11/27] xsplice: Implement payload loading Konrad Rzeszutek Wilk
2016-04-18  6:16   ` Jan Beulich
2016-04-20 15:59     ` Konrad Rzeszutek Wilk
2016-04-20 17:05       ` Jan Beulich
2016-04-20 17:36         ` Konrad Rzeszutek Wilk
2016-04-21  6:41           ` Jan Beulich
2016-04-21 15:15       ` Konrad Rzeszutek Wilk [this message]
2016-04-21 15:36         ` Jan Beulich
2016-04-21 16:47           ` Konrad Rzeszutek Wilk
2016-04-22  7:40             ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 12/27] xsplice: Implement support for applying/reverting/replacing patches Konrad Rzeszutek Wilk
2016-04-19  6:27   ` Jan Beulich
2016-04-21  0:28     ` Konrad Rzeszutek Wilk
2016-04-21  6:44       ` Jan Beulich
2016-04-21 20:27         ` Konrad Rzeszutek Wilk
2016-04-22  7:44           ` Jan Beulich
2016-04-22 10:51             ` Konrad Rzeszutek Wilk
2016-04-22 17:26     ` Konrad Rzeszutek Wilk
2016-04-25  7:55       ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 13/27] x86/xen_hello_world.xsplice: Test payload for patching 'xen_extra_version' Konrad Rzeszutek Wilk
2016-04-19 17:40   ` Jan Beulich
2016-04-20 16:10     ` Konrad Rzeszutek Wilk
2016-04-20 17:06       ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 14/27] xsplice, symbols: Implement symbol name resolution on address Konrad Rzeszutek Wilk
2016-04-19 19:31   ` Jan Beulich
2016-04-20 12:55     ` Ross Lagerwall
2016-04-21  0:26     ` Konrad Rzeszutek Wilk
2016-04-21  6:46       ` Jan Beulich
     [not found]         ` <CACJDEmrucgYZpCDv3EAkDJUOtdcP9P2T=Vine1o2pzUmwJDY1w@mail.gmail.com>
     [not found]           ` <CACJDEmrzieYh6__MHJH_okoZPk+RA56PuQKv-oid0j1t1po1oQ@mail.gmail.com>
     [not found]             ` <CACJDEmrdi3sTZjGowkvGP67-_DH3+TLvArC8qZfArsyPb6fpuA@mail.gmail.com>
     [not found]               ` <CACJDEmrQ6onv-xqYOi3nekioCSASb4c1eZHJ-rzMxU3Wa7SXTQ@mail.gmail.com>
2016-04-21 13:56                 ` Konrad Rzeszutek Wilk
2016-04-21 14:25                   ` Jan Beulich
2016-04-22  7:17       ` Ross Lagerwall
2016-04-22  7:51         ` Jan Beulich
2016-04-22  8:45           ` Ross Lagerwall
2016-04-22 10:08             ` Jan Beulich
2016-04-22 10:28               ` Konrad Rzeszutek Wilk
2016-04-22 10:50                 ` Jan Beulich
2016-04-22 11:08                   ` Konrad Rzeszutek Wilk
2016-04-22 11:18                     ` Jan Beulich
2016-04-24 21:41                       ` Konrad Rzeszutek Wilk
2016-04-25  8:02                         ` Jan Beulich
2016-04-22 11:13               ` Ross Lagerwall
2016-04-22 11:24                 ` Jan Beulich
2016-04-22 21:10                   ` Konrad Rzeszutek Wilk
2016-04-25  6:41                     ` Ross Lagerwall
2016-04-25  8:15                       ` Jan Beulich
2016-04-22 14:17                 ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 15/27] xsplice, symbols: Implement fast symbol names -> virtual addresses lookup Konrad Rzeszutek Wilk
2016-04-19 19:52   ` Jan Beulich
2016-04-22 15:21     ` Konrad Rzeszutek Wilk
2016-04-25  8:38       ` Jan Beulich
2016-04-25 14:12         ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 16/27] x86, xsplice: Print payload's symbol name and payload name in backtraces Konrad Rzeszutek Wilk
2016-04-19 20:09   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 17/27] xsplice: Add support for bug frames Konrad Rzeszutek Wilk
2016-04-19 20:17   ` Jan Beulich
2016-04-21  0:29     ` Konrad Rzeszutek Wilk
2016-04-21  6:49       ` Jan Beulich
2016-04-22 10:10         ` Konrad Rzeszutek Wilk
2016-04-22 10:28           ` Jan Beulich
2016-04-22 10:54             ` Konrad Rzeszutek Wilk
2016-04-22 10:58               ` Jan Beulich
2016-04-22 11:10                 ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 18/27] xsplice: Add support for exception tables Konrad Rzeszutek Wilk
2016-04-19 20:31   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 19/27] xsplice: Add support for alternatives Konrad Rzeszutek Wilk
2016-04-20  6:28   ` Jan Beulich
2016-04-21  0:30     ` Konrad Rzeszutek Wilk
2016-04-21  6:55       ` Jan Beulich
2016-04-21  0:31     ` Konrad Rzeszutek Wilk
2016-04-21  6:56       ` Jan Beulich
2016-04-22 16:06     ` Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 20/27] build_id: Provide ld-embedded build-ids Konrad Rzeszutek Wilk
2016-04-20  7:14   ` Jan Beulich
2016-04-21  0:33     ` Konrad Rzeszutek Wilk
2016-04-21  6:59       ` Jan Beulich
2016-04-21 20:30         ` Konrad Rzeszutek Wilk
2016-04-22 16:16         ` Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 21/27] xsplice: Print build_id in keyhandler and on bootup Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 22/27] XENVER_build_id/libxc: Provide ld-embedded build-id Konrad Rzeszutek Wilk
2016-04-14 15:03   ` Wei Liu
2016-04-14 15:04   ` Daniel De Graaf
2016-04-20  7:19   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 23/27] libxl: info: Display build_id of the hypervisor Konrad Rzeszutek Wilk
2016-04-14 15:06   ` Wei Liu
2016-04-13 22:02 ` [PATCH v8.1 24/27] xsplice: Stacking build-id dependency checking Konrad Rzeszutek Wilk
2016-04-20  7:49   ` Jan Beulich
2016-04-22 10:46     ` Konrad Rzeszutek Wilk
2016-04-22 10:55       ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 25/27] xsplice/xen_replace_world: Test-case for XSPLICE_ACTION_REPLACE Konrad Rzeszutek Wilk
2016-04-20 11:12   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 26/27] xsplice: Prevent duplicate payloads from being loaded Konrad Rzeszutek Wilk
2016-04-20 11:16   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 27/27] MAINTAINERS/xsplice: Add myself and Ross as the maintainers Konrad Rzeszutek Wilk
2016-04-14 14:26 ` [PATCH v8.1] xSplice v1 design and implementation Konrad Rzeszutek Wilk
2016-04-14 14:29   ` Julien Grall
2016-04-14 15:12   ` Andrew Cooper
2016-04-14 15:17     ` Jan Beulich
2016-04-15  0:55       ` Konrad Rzeszutek Wilk
2016-04-17  8:00         ` Jan Beulich

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=20160421151525.GA29709@localhost.localdomain \
    --to=konrad@kernel.org \
    --cc=andrew.cooper3@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@arm.com \
    --cc=keir@xen.org \
    --cc=konrad.wilk@oracle.com \
    --cc=mpohlack@amazon.com \
    --cc=ross.lagerwall@citrix.com \
    --cc=sasha.levin@oracle.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.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.