[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v1 5/5] xsplice: Use ld-embedded build-ids



On 16/09/2015 22:01, Konrad Rzeszutek Wilk wrote:
> From: Martin Pohlack <mpohlack@xxxxxxxxx>
>
> The mechanism to get this is via the XSPLICE_OP and
> we add a new subsequent hypercall to retrieve the
> binary build-id. The hypercall allows an arbirarty
> size (the buffer is provided to the hypervisor) - however
> by default the toolstack will allocate it up to 128
> bytes.
>
> We also add two places for the build-id to be printed:
>  - xsplice keyhandler. We cannot use 'hh' in the hypervisor
>    snprintf handler (as it is not implemented) so instead
>    we use an simpler way to print it.
>  - In the 'xen-xsplice' tool add an extra parameter - build-id
>    to print this as an human readable value.
>
> Note that one can also retrieve the value by 'readelf -h xen-syms'.
>
> Signed-off-by: Martin Pohlack <mpohlack@xxxxxxxxx>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> ---
>  tools/libxc/include/xenctrl.h |  1 +
>  tools/libxc/xc_misc.c         | 26 +++++++++++++
>  tools/misc/xen-xsplice.c      | 39 ++++++++++++++++++++
>  xen/arch/x86/Makefile         |  4 +-
>  xen/arch/x86/xen.lds.S        |  5 +++
>  xen/common/xsplice.c          | 86 
> +++++++++++++++++++++++++++++++++++++++++++
>  xen/include/public/sysctl.h   | 18 +++++++++
>  xen/include/xen/version.h     |  1 +
>  8 files changed, 178 insertions(+), 2 deletions(-)
>
> diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
> index 2cd982d..946ddc0 100644
> --- a/tools/libxc/include/xenctrl.h
> +++ b/tools/libxc/include/xenctrl.h
> @@ -2860,6 +2860,7 @@ int xc_xsplice_apply(xc_interface *xch, char *id);
>  int xc_xsplice_revert(xc_interface *xch, char *id);
>  int xc_xsplice_unload(xc_interface *xch, char *id);
>  int xc_xsplice_check(xc_interface *xch, char *id);
> +int xc_xsplice_build_id(xc_interface *xch, char *build_id, unsigned int max);

The build id of the current running hypervisor should belong in the
xeninfo hypercall.  It is not specific to xsplice.

> diff --git a/xen/common/xsplice.c b/xen/common/xsplice.c
> index d330efe..5728c4b 100644
> --- a/xen/common/xsplice.c
> +++ b/xen/common/xsplice.c
> @@ -14,6 +14,8 @@
>  #include <xen/sched.h>
>  #include <xen/lib.h>
>  #include <xen/xsplice.h>
> +#include <xen/elf.h>
> +#include <xen/types.h>
>  #include <public/sysctl.h>
>  
>  #include <asm/event.h>
> @@ -44,6 +46,36 @@ struct payload {
>      struct tasklet tasklet;
>  };
>  
> +#ifdef CONFIG_ARM
> +static int build_id(char **p, unsigned int *len)
> +{
> +    return 0;
> +}
> +#else
> +#define NT_GNU_BUILD_ID 3
> +
> +extern char * __note_gnu_build_id_start;  /* defined in linker script */

This is liable to cause you to deference the first 8 bytes of the note,
as the symbol is not a char*.

Use extern Elf_Note __note_gnu_build_id_start[]; instead.

Also, it is probably worth having an _end symbol as well and check for
end > start to confirm that the linker has actually put something in there.

~Andrew

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.