[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8.1 12/27] xsplice: Implement support for applying/reverting/replacing patches.
On Thu, Apr 21, 2016 at 12:44:41AM -0600, Jan Beulich wrote: > >>> On 21.04.16 at 02:28, <konrad.wilk@xxxxxxxxxx> wrote: > >> >+ ASSERT(sec); > >> >+ if ( sec->sec->sh_size % sizeof(*payload->funcs) ) > >> >+ { > >> >+ dprintk(XENLOG_ERR, XSPLICE "%s: Wrong size of > >> >.xsplice.funcs!\n", > >> >+ elf->name); > >> >+ return -EINVAL; > >> >+ } > >> >+ > >> >+ payload->funcs = sec->load_addr; > >> >+ payload->nfuncs = sec->sec->sh_size / sizeof(*payload->funcs); > >> > >> Following to our discussion yesterday - can't we (ab)use the section merge > >> flag here to report the structure size, along the lines of what relocation > >> sections do for their elements? > > > > > > In other words - the xsplice-tools.git and the test-cases (in > > arch/x86/xen/test) would modify the sec->sh_entsize to have the > > sizeof(xsplice_patch_func) aka 64 (0x40) ? > > > > [Note this could also extend to .xsplice.hooks.load and > > .xsplice.hooks.unload] > > > > The xsplice-tools.git could surely do it, but the built-in test-cases - > > not so much. I would need to do some in-place binary handrolling - unless > > you > > know of some tool or some __section modifiers? > > Well, that's why I suggest (ab) using the SHF_MERGE flag, i.e. to > see whether we can make gas do what we want. Fiddling with the > binary I would not recommend, i.e. if we can't get gas to do what > we want we should rather stay with what there is. This: diff --git a/xen/arch/x86/test/xen_hello_world.c b/xen/arch/x86/test/xen_hello_world.c index a3da85d..92f2e97 100644 --- a/xen/arch/x86/test/xen_hello_world.c +++ b/xen/arch/x86/test/xen_hello_world.c @@ -47,6 +47,13 @@ XSPLICE_UNLOAD_HOOK(hi_func); XSPLICE_UNLOAD_HOOK(Z_check_fnc); +#define XSPLICE_FUNC() \ + asm ( \ + ".pushsection .xsplice.funcs, \"awM\", @progbits, 64\n " \ + ".popsection") + +XSPLICE_FUNC(); + struct xsplice_patch_func __section(".xsplice.funcs") xsplice_xen_hello_world = { .version = XSPLICE_PAYLOAD_VERSION, .name = hello_world_patch_this_fnc, Makes the .xsplice.funcs have sh_entsize have the size of 64 bytes: [ 6] .xsplice.funcs PROGBITS 0000000000000000 000000a0 0000000000000040 0000000000000000 WA 0 0 32 vs [ 6] .xsplice.funcs PROGBITS 0000000000000000 000000a0 0000000000000040 0000000000000040 WAM 0 0 32 Unfortunatly the compilation throws this: FC-64 <konrad@build-external:~/xtt-x86_64/xen/xen> make -j4 tests 1>1 dnsdomainname: Name or service not known {standard input}: Assembler messages: {standard input}:184: Warning: ignoring changed section attributes for .xsplice.funcs This is with: binutils-2.20.51.0.2-15.fc13.x86_64 and with: binutils-2.25-9.fc22.x86_64 Ideas? I could try to wrap the definition of these struct xsplice_patch_func __section(".xsplice.funcs") xsplice_xen_hello_world using an macro - but that did not work very well (I couldn't manage it to take the value of say XSPLICE_PAYLOAD_VERSION). Perhaps skip this? > > Jan > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |