aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_dom_elfloader.c
diff options
context:
space:
mode:
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>2012-01-23 09:42:12 +0000
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>2012-01-23 09:42:12 +0000
commit079ff2d32c3db5a45cdbc8fb05be279544bdc111 (patch)
tree8670aba405b6fd42651dcf6f17f42164945f2e62 /tools/libxc/xc_dom_elfloader.c
parent7b8c36701d267971f189b435362bce8ff2266e79 (diff)
downloadxen-079ff2d32c3db5a45cdbc8fb05be279544bdc111.tar.gz
xen-079ff2d32c3db5a45cdbc8fb05be279544bdc111.tar.bz2
xen-079ff2d32c3db5a45cdbc8fb05be279544bdc111.zip
libelf-loader: introduce elf_load_image
Implement a new function, called elf_load_image, to perform the actually copy of the elf image and clearing the padding. The function is implemented as memcpy and memset when the library is built as part of the tools, but it is implemented as raw_copy_to_guest and raw_clear_guest when built as part of Xen, so that it can be safely called with an HVM style dom0. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com> Committed-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'tools/libxc/xc_dom_elfloader.c')
-rw-r--r--tools/libxc/xc_dom_elfloader.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
index 4d7b8e0a4d..2e695599b1 100644
--- a/tools/libxc/xc_dom_elfloader.c
+++ b/tools/libxc/xc_dom_elfloader.c
@@ -310,9 +310,15 @@ static int xc_dom_parse_elf_kernel(struct xc_dom_image *dom)
static int xc_dom_load_elf_kernel(struct xc_dom_image *dom)
{
struct elf_binary *elf = dom->private_loader;
+ int rc;
elf->dest = xc_dom_seg_to_ptr(dom, &dom->kernel_seg);
- elf_load_binary(elf);
+ rc = elf_load_binary(elf);
+ if ( rc < 0 )
+ {
+ DOMPRINTF("%s: failed to load elf binary", __FUNCTION__);
+ return rc;
+ }
if ( dom->parms.bsd_symtab )
xc_dom_load_elf_symtab(dom, elf, 1);
return 0;