All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: xen-devel <xen-devel@lists.xensource.com>,
	Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Subject: [PATCH 2/2] Factor libxenbuild out of libxenctrl
Date: Wed, 24 Aug 2005 15:34:02 -0500	[thread overview]
Message-ID: <430CD9BA.5070003@us.ibm.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 398 bytes --]

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

[-- Attachment #2: 6384-libxenbuild.diff --]
[-- Type: text/x-patch, Size: 15806 bytes --]

# HG changeset patch
# User Anthony Liguori <aliguori@us.ibm.com>
# 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@us.ibm.com>

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

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

             reply	other threads:[~2005-08-24 20:34 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-08-24 20:34 Anthony Liguori [this message]
2005-08-25  0:54 ` [PATCH 2/2] Factor libxenbuild out of libxenctrl Christian Limpach
2005-08-25  2:05   ` Anthony Liguori

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=430CD9BA.5070003@us.ibm.com \
    --to=aliguori@us.ibm.com \
    --cc=Christian.Limpach@cl.cam.ac.uk \
    --cc=xen-devel@lists.xensource.com \
    /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.