WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 2/2] Factor libxenbuild out of libxenctrl

To: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 2/2] Factor libxenbuild out of libxenctrl
From: Anthony Liguori <aliguori@xxxxxxxxxx>
Date: Wed, 24 Aug 2005 15:34:02 -0500
Delivery-date: Wed, 24 Aug 2005 20:32:46 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla Thunderbird 1.0.2 (X11/20050317)
This patch moves the building, save, and restore code to a seperate library (libxenbuild). This hasn't been done in a very clean way (since the header dependencies are pretty nightmarish in libxc right now) but this is something we can start from.

I haven't tested with IA64, hopefully that build doesn't break. This patch depends on the previous patch submitted.

Regards,

Anthony Liguori
# HG changeset patch
# User Anthony Liguori <aliguori@xxxxxxxxxx>
# Node ID e6db3830c47d620bac83feb9755eb14f5f57068c
# Parent  54370eeeb3311db2bcacfc797766a5993a079b4c
This patch breaks the building/save/restore code out into a separate library
libxenbuild.  It also updates the tools accordingly.

The build process isn't all that pretty right.

Signed-off-by: Anthony Liguori <aliguori@xxxxxxxxxx>

diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/Makefile
--- a/tools/libxc/Makefile      Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/Makefile      Wed Aug 24 20:39:38 2005
@@ -19,22 +19,24 @@
 SRCS     += xc_domain.c
 SRCS     += xc_evtchn.c
 SRCS     += xc_gnttab.c
-SRCS     += xc_load_bin.c
-SRCS     += xc_load_elf.c
-SRCS     += xc_linux_build.c
 SRCS     += xc_misc.c
 SRCS     += xc_physdev.c
 SRCS     += xc_private.c
+SRCS     += xc_ptrace.c
+SRCS     += xc_ptrace_core.c
+
 ifeq ($(XEN_TARGET_ARCH),ia64)
 SRCS     += xc_ia64_stubs.c
-else
-SRCS     += xc_load_aout9.c
-SRCS     += xc_linux_restore.c
-SRCS     += xc_linux_save.c
-SRCS     += xc_vmx_build.c
-SRCS     += xc_ptrace.c
-SRCS     += xc_ptrace_core.c
 endif
+
+BUILD_SRCS     := xc_load_aout9.c
+BUILD_SRCS     += xc_load_bin.c
+BUILD_SRCS     += xc_load_elf.c
+BUILD_SRCS     += xc_linux_build.c
+BUILD_SRCS     += xc_linux_restore.c
+BUILD_SRCS     += xc_linux_save.c
+BUILD_SRCS     += xc_vmx_build.c
+BUILD_SRCS     += xc_build_private.c
 
 CFLAGS   += -Wall
 CFLAGS   += -Werror
@@ -48,8 +50,14 @@
 LIB_OBJS := $(patsubst %.c,%.o,$(SRCS))
 PIC_OBJS := $(patsubst %.c,%.opic,$(SRCS))
 
-LIB      := libxenctrl.a libxenctrl-pic.a
+LIB_BUILD_OBJS := $(patsubst %.c,%.o,$(BUILD_SRCS))
+PIC_BUILD_OBJS := $(patsubst %.c,%.opic,$(BUILD_SRCS))
+
+LIB      := libxenctrl.a
 LIB      += libxenctrl.so libxenctrl.so.$(MAJOR) 
libxenctrl.so.$(MAJOR).$(MINOR)
+
+LIB      += libxenbuild.a
+LIB      += libxenbuild.so libxenbuild.so.$(MAJOR) 
libxenbuild.so.$(MAJOR).$(MINOR)
 
 all: build
 build: check-for-zlib mk-symlinks
@@ -83,6 +91,11 @@
        ln -sf libxenctrl.so.$(MAJOR) $(DESTDIR)/usr/$(LIBDIR)/libxenctrl.so
        $(INSTALL_DATA) xenctrl.h $(DESTDIR)/usr/include/xen
 
+       $(INSTALL_PROG) libxenbuild.so.$(MAJOR).$(MINOR) 
$(DESTDIR)/usr/$(LIBDIR)
+       $(INSTALL_DATA) libxenbuild.a $(DESTDIR)/usr/$(LIBDIR)
+       ln -sf libxenbuild.so.$(MAJOR).$(MINOR) 
$(DESTDIR)/usr/$(LIBDIR)/libxenbuild.so.$(MAJOR)
+       ln -sf libxenbuild.so.$(MAJOR) $(DESTDIR)/usr/$(LIBDIR)/libxenbuild.so
+
 .PHONY: TAGS clean rpm install all
 
 TAGS:
@@ -100,10 +113,9 @@
        mv staging/i386/*.rpm .
        rm -rf staging
 
+# libxenctrl
+
 libxenctrl.a: $(LIB_OBJS)
-       $(AR) rc $@ $^
-
-libxenctrl-pic.a: $(PIC_OBJS)
        $(AR) rc $@ $^
 
 libxenctrl.so: libxenctrl.so.$(MAJOR)
@@ -112,6 +124,19 @@
        ln -sf $< $@
 
 libxenctrl.so.$(MAJOR).$(MINOR): $(PIC_OBJS)
-       $(CC) $(CFLAGS) $(LDFLAGS) -Wl,-soname -Wl,libxenctrl.so.$(MAJOR) 
-shared -o $@ $^ -lz
+       $(CC) $(CFLAGS) $(LDFLAGS) -Wl,-soname -Wl,libxenctrl.so.$(MAJOR) 
-shared -o $@ $^
+
+# libxenbuild
+
+libxenbuild.a: $(LIB_BUILD_OBJS)
+       $(AR) rc $@ $^
+
+libxenbuild.so: libxenbuild.so.$(MAJOR)
+       ln -sf $< $@
+libxenbuild.so.$(MAJOR): libxenbuild.so.$(MAJOR).$(MINOR)
+       ln -sf $< $@
+
+libxenbuild.so.$(MAJOR).$(MINOR): $(PIC_BUILD_OBJS)
+       $(CC) $(CFLAGS) $(LDFLAGS) -Wl,-soname -Wl,libxenbuild.so.$(MAJOR) 
-shared -o $@ $^ -lz -lxenctrl
 
 -include $(DEPS)
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c      Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xc_linux_build.c      Wed Aug 24 20:39:38 2005
@@ -2,7 +2,7 @@
  * xc_linux_build.c
  */
 
-#include "xc_private.h"
+#include "xc_build_private.h"
 
 #if defined(__i386__)
 #define ELFSIZE 32
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xc_linux_restore.c
--- a/tools/libxc/xc_linux_restore.c    Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xc_linux_restore.c    Wed Aug 24 20:39:38 2005
@@ -6,7 +6,7 @@
  * Copyright (c) 2003, K A Fraser.
  */
 
-#include "xc_private.h"
+#include "xc_build_private.h"
 #include <xen/linux/suspend.h>
 
 #define MAX_BATCH_SIZE 1024
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c       Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xc_linux_save.c       Wed Aug 24 20:39:38 2005
@@ -8,7 +8,7 @@
 
 #include <inttypes.h>
 #include <sys/time.h>
-#include "xc_private.h"
+#include "xc_build_private.h"
 #include <xen/linux/suspend.h>
 #include <xen/io/domain_controller.h>
 #include <time.h>
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xc_private.c
--- a/tools/libxc/xc_private.c  Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xc_private.c  Wed Aug 24 20:39:38 2005
@@ -332,53 +332,6 @@
     return sz;
 }
 
-char *xc_read_kernel_image(const char *filename, unsigned long *size)
-{
-    int kernel_fd = -1;
-    gzFile kernel_gfd = NULL;
-    char *image = NULL;
-    unsigned int bytes;
-
-    if ( (kernel_fd = open(filename, O_RDONLY)) < 0 )
-    {
-        PERROR("Could not open kernel image");
-        goto out;
-    }
-
-    if ( (*size = xc_get_filesz(kernel_fd)) == 0 )
-    {
-        PERROR("Could not read kernel image");
-        goto out;
-    }
-
-    if ( (kernel_gfd = gzdopen(kernel_fd, "rb")) == NULL )
-    {
-        PERROR("Could not allocate decompression state for state file");
-        goto out;
-    }
-
-    if ( (image = malloc(*size)) == NULL )
-    {
-        PERROR("Could not allocate memory for kernel image");
-        goto out;
-    }
-
-    if ( (bytes = gzread(kernel_gfd, image, *size)) != *size )
-    {
-        PERROR("Error reading kernel image, could not"
-               " read the whole image (%d != %ld).", bytes, *size);
-        free(image);
-        image = NULL;
-    }
-
- out:
-    if ( kernel_gfd != NULL )
-        gzclose(kernel_gfd);
-    else if ( kernel_fd >= 0 )
-        close(kernel_fd);
-    return image;
-}
-
 void xc_map_memcpy(unsigned long dst, char *src, unsigned long size,
                    int xch, u32 dom, unsigned long *parray,
                    unsigned long vstart)
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xc_private.h
--- a/tools/libxc/xc_private.h  Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xc_private.h  Wed Aug 24 20:39:38 2005
@@ -1,6 +1,6 @@
 
-#ifndef __XC_PRIVATE_H__
-#define __XC_PRIVATE_H__
+#ifndef XC_PRIVATE_H
+#define XC_PRIVATE_H
 
 #include <unistd.h>
 #include <stdio.h>
@@ -15,6 +15,7 @@
 #include <string.h>
 
 #include "xenctrl.h"
+#include "xenbuild.h"
 
 #include <xen/linux/privcmd.h>
 
@@ -316,8 +317,6 @@
 
 unsigned long xc_get_filesz(int fd);
 
-char *xc_read_kernel_image(const char *filename, unsigned long *size);
-
 void xc_map_memcpy(unsigned long dst, char *src, unsigned long size,
                    int xch, u32 dom, unsigned long *parray,
                    unsigned long vstart);
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xc_vmx_build.c
--- a/tools/libxc/xc_vmx_build.c        Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xc_vmx_build.c        Wed Aug 24 20:39:38 2005
@@ -3,7 +3,7 @@
  */
 
 #include <stddef.h>
-#include "xc_private.h"
+#include "xc_build_private.h"
 #define ELFSIZE 32
 #include "xc_elf.h"
 #include <stdlib.h>
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xenctrl.h     Wed Aug 24 20:39:38 2005
@@ -6,8 +6,8 @@
  * Copyright (c) 2003-2004, K A Fraser.
  */
 
-#ifndef __XC_H__
-#define __XC_H__
+#ifndef XENCTRL_H
+#define XENCTRL_H
 
 #include <stdint.h>
 
@@ -254,63 +254,6 @@
                       unsigned long pages,
                       xc_shadow_control_stats_t *stats);
 
-
-#define XCFLAGS_VERBOSE   1
-#define XCFLAGS_LIVE      2
-#define XCFLAGS_DEBUG     4
-#define XCFLAGS_CONFIGURE 8
-
-struct XcIOContext;
-
-/**
- * This function will save a domain running Linux.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm fd the file descriptor to save a domain to
- * @parm dom the id of the domain
- * @return 0 on success, -1 on failure
- */
-int xc_linux_save(int xc_handle, int fd, u32 dom);
-
-/**
- * This function will restore a saved domain running Linux.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm fd the file descriptor to restore a domain from
- * @parm dom the id of the domain
- * @parm nr_pfns the number of pages
- * @parm store_evtchn the store event channel for this domain to use
- * @parm store_mfn returned with the mfn of the store page
- * @return 0 on success, -1 on failure
- */
-int xc_linux_restore(int xc_handle, int io_fd, u32 dom, unsigned long nr_pfns,
-                    unsigned int store_evtchn, unsigned long *store_mfn);
-
-int xc_linux_build(int xc_handle,
-                   u32 domid,
-                   const char *image_name,
-                   const char *ramdisk_name,
-                   const char *cmdline,
-                   unsigned int control_evtchn,
-                   unsigned long flags,
-                   unsigned int vcpus,
-                   unsigned int store_evtchn,
-                   unsigned long *store_mfn);
-
-struct mem_map;
-int xc_vmx_build(int xc_handle,
-                 u32 domid,
-                 int memsize,
-                 const char *image_name,
-                 struct mem_map *memmap,
-                 const char *ramdisk_name,
-                 const char *cmdline,
-                 unsigned int control_evtchn,
-                 unsigned long flags,
-                 unsigned int vcpus,
-                 unsigned int store_evtchn,
-                 unsigned long *store_mfn);
-
 int xc_bvtsched_global_set(int xc_handle,
                            unsigned long ctx_allow);
 
@@ -555,4 +498,4 @@
  */
 long xc_init_store(int xc_handle, int remote_port);
 
-#endif /* __XC_H__ */
+#endif
diff -r 54370eeeb331 -r e6db3830c47d tools/python/setup.py
--- a/tools/python/setup.py     Wed Aug 24 20:38:03 2005
+++ b/tools/python/setup.py     Wed Aug 24 20:39:38 2005
@@ -17,7 +17,7 @@
                  XEN_ROOT + "/tools/xenstore",
                  ]
 
-libraries = [ "xenctrl", "xenstore" ]
+libraries = [ "xenctrl", "xenbuild", "xenstore" ]
 
 xc = Extension("xc",
                extra_compile_args = extra_compile_args,
diff -r 54370eeeb331 -r e6db3830c47d tools/xcutils/Makefile
--- a/tools/xcutils/Makefile    Wed Aug 24 20:38:03 2005
+++ b/tools/xcutils/Makefile    Wed Aug 24 20:39:38 2005
@@ -30,7 +30,7 @@
 
 PROGRAMS               = xc_restore xc_save
 
-LDLIBS                 = -L$(XEN_LIBXC) -lxenctrl
+LDLIBS                 = -L$(XEN_LIBXC) -lxenbuild
 
 .PHONY: all
 all: build
diff -r 54370eeeb331 -r e6db3830c47d tools/xcutils/xc_restore.c
--- a/tools/xcutils/xc_restore.c        Wed Aug 24 20:38:03 2005
+++ b/tools/xcutils/xc_restore.c        Wed Aug 24 20:39:38 2005
@@ -11,7 +11,7 @@
 #include <stdio.h>
 #include <err.h>
 
-#include <xenctrl.h>
+#include <xenbuild.h>
 
 int
 main(int argc, char **argv)
diff -r 54370eeeb331 -r e6db3830c47d tools/xcutils/xc_save.c
--- a/tools/xcutils/xc_save.c   Wed Aug 24 20:38:03 2005
+++ b/tools/xcutils/xc_save.c   Wed Aug 24 20:39:38 2005
@@ -11,7 +11,7 @@
 #include <stdio.h>
 #include <err.h>
 
-#include <xenctrl.h>
+#include <xenbuild.h>
 
 int
 main(int argc, char **argv)
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xc_build_private.c
--- /dev/null   Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xc_build_private.c    Wed Aug 24 20:39:38 2005
@@ -0,0 +1,56 @@
+/******************************************************************************
+ * xc_build_private.c
+ * 
+ * Helper functions for the rest of the library.
+ */
+
+#include <zlib.h>
+#include "xc_build_private.h"
+
+char *xc_read_kernel_image(const char *filename, unsigned long *size)
+{
+    int kernel_fd = -1;
+    gzFile kernel_gfd = NULL;
+    char *image = NULL;
+    unsigned int bytes;
+
+    if ( (kernel_fd = open(filename, O_RDONLY)) < 0 )
+    {
+        PERROR("Could not open kernel image");
+        goto out;
+    }
+
+    if ( (*size = xc_get_filesz(kernel_fd)) == 0 )
+    {
+        PERROR("Could not read kernel image");
+        goto out;
+    }
+
+    if ( (kernel_gfd = gzdopen(kernel_fd, "rb")) == NULL )
+    {
+        PERROR("Could not allocate decompression state for state file");
+        goto out;
+    }
+
+    if ( (image = malloc(*size)) == NULL )
+    {
+        PERROR("Could not allocate memory for kernel image");
+        goto out;
+    }
+
+    if ( (bytes = gzread(kernel_gfd, image, *size)) != *size )
+    {
+        PERROR("Error reading kernel image, could not"
+               " read the whole image (%d != %ld).", bytes, *size);
+        free(image);
+        image = NULL;
+    }
+
+ out:
+    if ( kernel_gfd != NULL )
+        gzclose(kernel_gfd);
+    else if ( kernel_fd >= 0 )
+        close(kernel_fd);
+    return image;
+}
+
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xc_build_private.h
--- /dev/null   Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xc_build_private.h    Wed Aug 24 20:39:38 2005
@@ -0,0 +1,9 @@
+#ifndef XC_BUILD_PRIVATE_H
+#define XC_BUILD_PRIVATE_H
+
+#include "xc_private.h"
+
+char *xc_read_kernel_image(const char *filename, unsigned long *size);
+
+#endif
+
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xenbuild.c
--- /dev/null   Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xenbuild.c    Wed Aug 24 20:39:38 2005
@@ -0,0 +1,11 @@
+/******************************************************************************
+ * xenctrl.h
+ * 
+ * A library for low-level access to the Xen control interfaces.
+ * 
+ * Copyright (c) 2003-2004, K A Fraser.
+ */
+
+#ifndef __XC_H__
+#define __XC_H__
+
diff -r 54370eeeb331 -r e6db3830c47d tools/libxc/xenbuild.h
--- /dev/null   Wed Aug 24 20:38:03 2005
+++ b/tools/libxc/xenbuild.h    Wed Aug 24 20:39:38 2005
@@ -0,0 +1,69 @@
+/******************************************************************************
+ * xenctrl.h
+ * 
+ * A library for low-level access to the Xen control interfaces.
+ * 
+ * Copyright (c) 2003-2004, K A Fraser.
+ */
+
+#ifndef XENBUILD_H
+#define XENBUILD_H
+
+#include "xenctrl.h"
+
+
+#define XCFLAGS_VERBOSE   1
+#define XCFLAGS_LIVE      2
+#define XCFLAGS_DEBUG     4
+#define XCFLAGS_CONFIGURE 8
+
+/**
+ * This function will save a domain running Linux.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm fd the file descriptor to save a domain to
+ * @parm dom the id of the domain
+ * @return 0 on success, -1 on failure
+ */
+int xc_linux_save(int xc_handle, int fd, u32 dom);
+
+/**
+ * This function will restore a saved domain running Linux.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm fd the file descriptor to restore a domain from
+ * @parm dom the id of the domain
+ * @parm nr_pfns the number of pages
+ * @parm store_evtchn the store event channel for this domain to use
+ * @parm store_mfn returned with the mfn of the store page
+ * @return 0 on success, -1 on failure
+ */
+int xc_linux_restore(int xc_handle, int io_fd, u32 dom, unsigned long nr_pfns,
+                    unsigned int store_evtchn, unsigned long *store_mfn);
+
+int xc_linux_build(int xc_handle,
+                   u32 domid,
+                   const char *image_name,
+                   const char *ramdisk_name,
+                   const char *cmdline,
+                   unsigned int control_evtchn,
+                   unsigned long flags,
+                   unsigned int vcpus,
+                   unsigned int store_evtchn,
+                   unsigned long *store_mfn);
+
+struct mem_map;
+int xc_vmx_build(int xc_handle,
+                 u32 domid,
+                 int memsize,
+                 const char *image_name,
+                 struct mem_map *memmap,
+                 const char *ramdisk_name,
+                 const char *cmdline,
+                 unsigned int control_evtchn,
+                 unsigned long flags,
+                 unsigned int vcpus,
+                 unsigned int store_evtchn,
+                 unsigned long *store_mfn);
+
+#endif
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>