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-changelog

[Xen-changelog] [xen-unstable] stubdom: use host's gcc

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] stubdom: use host's gcc
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 04 Jul 2008 16:20:09 -0700
Delivery-date: Fri, 04 Jul 2008 16:20:21 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1215190031 -3600
# Node ID 433d1b26fd51ca901856f89121a54765980e4a2e
# Parent  a49673cd23d2548d57af716cc85fcaeef48b55fc
stubdom: use host's gcc

This makes stubdom use the host's gcc instead of downloading/compiling
binutils+gcc.  That requires a bunch of changes and even uncovered a
few bugs, but saves a lot of time.

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
---
 extras/mini-os/Config.mk                    |    8 +-
 extras/mini-os/arch/x86/mm.c                |    2 
 extras/mini-os/blkfront.c                   |   21 +++--
 extras/mini-os/events.c                     |    9 +-
 extras/mini-os/fbfront.c                    |   19 ++--
 extras/mini-os/hypervisor.c                 |    3 
 extras/mini-os/include/ctype.h              |    5 +
 extras/mini-os/include/errno.h              |    5 +
 extras/mini-os/include/ia64/arch_spinlock.h |    2 
 extras/mini-os/include/sys/lock.h           |   52 +++++++++++++
 extras/mini-os/include/types.h              |    9 +-
 extras/mini-os/include/wait.h               |   23 -----
 extras/mini-os/include/waittypes.h          |   26 ++++++
 extras/mini-os/include/x86/arch_spinlock.h  |    2 
 extras/mini-os/include/xmalloc.h            |    2 
 extras/mini-os/kernel.c                     |    2 
 extras/mini-os/lib/ctype.c                  |    2 
 extras/mini-os/lib/printf.c                 |    1 
 extras/mini-os/lib/xmalloc.c                |    4 -
 extras/mini-os/lock.c                       |  111 ++++++++++++++++++++++++++++
 extras/mini-os/lwip-net.c                   |   10 +-
 extras/mini-os/main.c                       |    2 
 extras/mini-os/minios.mk                    |    7 +
 extras/mini-os/mm.c                         |    2 
 extras/mini-os/netfront.c                   |   28 +++----
 extras/mini-os/pcifront.c                   |    6 -
 extras/mini-os/sched.c                      |    6 -
 extras/mini-os/xenbus/xenbus.c              |   53 ++++++++-----
 stubdom/Makefile                            |  101 ++++++++-----------------
 29 files changed, 348 insertions(+), 175 deletions(-)

diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/Config.mk
--- a/extras/mini-os/Config.mk  Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/Config.mk  Fri Jul 04 17:47:11 2008 +0100
@@ -38,15 +38,15 @@ EXTRA_INC = $(ARCH_INC)
 # This must be before include minios.mk!
 include $(MINI-OS_ROOT)/$(TARGET_ARCH_DIR)/arch.mk
 
-extra_incl := $(foreach dir,$(EXTRA_INC),-I$(MINI-OS_ROOT)/include/$(dir))
+extra_incl := $(foreach dir,$(EXTRA_INC),-I$(realpath 
$(MINI-OS_ROOT)/include/$(dir)))
 
-DEF_CPPFLAGS += -I$(MINI-OS_ROOT)/include
+DEF_CPPFLAGS += -I$(realpath $(MINI-OS_ROOT)/include)
 DEF_CPPFLAGS += -D__MINIOS__
 
 ifeq ($(libc),y)
 DEF_CPPFLAGS += -DHAVE_LIBC
-DEF_CPPFLAGS += -I$(MINI-OS_ROOT)/include/posix
-DEF_CPPFLAGS += -I$(XEN_ROOT)/tools/xenstore
+DEF_CPPFLAGS += -I$(realpath $(MINI-OS_ROOT)/include/posix)
+DEF_CPPFLAGS += -I$(realpath $(XEN_ROOT)/tools/xenstore)
 endif
 
 ifneq ($(LWIPDIR),)
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/arch/x86/mm.c
--- a/extras/mini-os/arch/x86/mm.c      Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/arch/x86/mm.c      Fri Jul 04 17:47:11 2008 +0100
@@ -549,7 +549,7 @@ void arch_init_p2m(unsigned long max_pfn
 #define L2_P2M_MASK     (L2_P2M_ENTRIES - 1)    
 #define L3_P2M_MASK     (L3_P2M_ENTRIES - 1)    
     
-    unsigned long *l1_list, *l2_list, *l3_list;
+    unsigned long *l1_list = NULL, *l2_list = NULL, *l3_list;
     unsigned long pfn;
     
     l3_list = (unsigned long *)alloc_page(); 
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/blkfront.c
--- a/extras/mini-os/blkfront.c Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/blkfront.c Fri Jul 04 17:47:11 2008 +0100
@@ -84,7 +84,7 @@ static void free_blkfront(struct blkfron
     free(dev);
 }
 
-struct blkfront_dev *init_blkfront(char *nodename, struct blkfront_info *info)
+struct blkfront_dev *init_blkfront(char *_nodename, struct blkfront_info *info)
 {
     xenbus_transaction_t xbt;
     char* err;
@@ -93,11 +93,9 @@ struct blkfront_dev *init_blkfront(char 
     int retry=0;
     char* msg;
     char* c;
+    char* nodename = _nodename ? _nodename : "device/vbd/768";
 
     struct blkfront_dev *dev;
-
-    if (!nodename)
-        nodename = "device/vbd/768";
 
     char path[strlen(nodename) + 1 + 10 + 1];
 
@@ -342,13 +340,14 @@ void blkfront_io(struct blkfront_aiocb *
 void blkfront_io(struct blkfront_aiocb *aiocbp, int write)
 {
     unsigned long flags;
+    DEFINE_WAIT(w);
+
     ASSERT(!aiocbp->aio_cb);
     aiocbp->aio_cb = blkfront_aio_cb;
     blkfront_aio(aiocbp, write);
     aiocbp->data = NULL;
 
     local_irq_save(flags);
-    DEFINE_WAIT(w);
     while (1) {
        blkfront_aio_poll(aiocbp->aio_dev);
        if (aiocbp->data)
@@ -393,6 +392,7 @@ void blkfront_sync(struct blkfront_dev *
 void blkfront_sync(struct blkfront_dev *dev)
 {
     unsigned long flags;
+    DEFINE_WAIT(w);
 
     if (dev->info.mode == O_RDWR) {
         if (dev->info.barrier == 1)
@@ -404,7 +404,6 @@ void blkfront_sync(struct blkfront_dev *
 
     /* Note: This won't finish if another thread enqueues requests.  */
     local_irq_save(flags);
-    DEFINE_WAIT(w);
     while (1) {
        blkfront_aio_poll(dev);
        if (RING_FREE_REQUESTS(&dev->ring) == RING_SIZE(&dev->ring))
@@ -424,6 +423,7 @@ int blkfront_aio_poll(struct blkfront_de
     RING_IDX rp, cons;
     struct blkif_response *rsp;
     int more;
+    int nr_consumed;
 
 moretodo:
 #ifdef HAVE_LIBC
@@ -437,14 +437,17 @@ moretodo:
     rmb(); /* Ensure we see queued responses up to 'rp'. */
     cons = dev->ring.rsp_cons;
 
-    int nr_consumed = 0;
+    nr_consumed = 0;
     while ((cons != rp))
     {
+        struct blkfront_aiocb *aiocbp;
+        int status;
+
        rsp = RING_GET_RESPONSE(&dev->ring, cons);
        nr_consumed++;
 
-        struct blkfront_aiocb *aiocbp = (void*) (uintptr_t) rsp->id;
-        int status = rsp->status;
+        aiocbp = (void*) (uintptr_t) rsp->id;
+        status = rsp->status;
 
         if (status != BLKIF_RSP_OKAY)
             printk("block error %d for op %d\n", status, rsp->operation);
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/events.c
--- a/extras/mini-os/events.c   Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/events.c   Fri Jul 04 17:47:11 2008 +0100
@@ -207,10 +207,11 @@ int evtchn_alloc_unbound(domid_t pal, ev
 int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
                                                 void *data, evtchn_port_t 
*port)
 {
+    int err;
     evtchn_alloc_unbound_t op;
     op.dom = DOMID_SELF;
     op.remote_dom = pal;
-    int err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op);
+    err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op);
     if (err)
                return err;
     *port = bind_evtchn(op.port, handler, data);
@@ -224,13 +225,15 @@ int evtchn_bind_interdomain(domid_t pal,
                            evtchn_handler_t handler, void *data,
                            evtchn_port_t *local_port)
 {
+    int err;
+    evtchn_port_t port;
     evtchn_bind_interdomain_t op;
     op.remote_dom = pal;
     op.remote_port = remote_port;
-    int err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op);
+    err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op);
     if (err)
                return err;
-    evtchn_port_t port = op.local_port;
+    port = op.local_port;
     *local_port = bind_evtchn(port, handler, data);
     return err;
 }
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/fbfront.c
--- a/extras/mini-os/fbfront.c  Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/fbfront.c  Fri Jul 04 17:47:11 2008 +0100
@@ -64,7 +64,7 @@ static void free_kbdfront(struct kbdfron
     free(dev);
 }
 
-struct kbdfront_dev *init_kbdfront(char *nodename, int abs_pointer)
+struct kbdfront_dev *init_kbdfront(char *_nodename, int abs_pointer)
 {
     xenbus_transaction_t xbt;
     char* err;
@@ -72,11 +72,8 @@ struct kbdfront_dev *init_kbdfront(char 
     struct xenkbd_page *s;
     int retry=0;
     char* msg;
-
+    char* nodename = _nodename ? _nodename : "device/vkbd/0";
     struct kbdfront_dev *dev;
-
-    if (!nodename)
-        nodename = "device/vkbd/0";
 
     char path[strlen(nodename) + 1 + 10 + 1];
 
@@ -351,7 +348,7 @@ int fbfront_receive(struct fbfront_dev *
     return i;
 }
 
-struct fbfront_dev *init_fbfront(char *nodename, unsigned long *mfns, int 
width, int height, int depth, int stride, int n)
+struct fbfront_dev *init_fbfront(char *_nodename, unsigned long *mfns, int 
width, int height, int depth, int stride, int n)
 {
     xenbus_transaction_t xbt;
     char* err;
@@ -361,9 +358,9 @@ struct fbfront_dev *init_fbfront(char *n
     char* msg;
     int i, j;
     struct fbfront_dev *dev;
-
-    if (!nodename)
-        nodename = "device/vfb/0";
+    int max_pd;
+    unsigned long mapped;
+    char* nodename = _nodename ? _nodename : "device/vfb/0";
 
     char path[strlen(nodename) + 1 + 10 + 1];
 
@@ -392,8 +389,8 @@ struct fbfront_dev *init_fbfront(char *n
     dev->offset = 0;
     dev->events = NULL;
 
-    const int max_pd = sizeof(s->pd) / sizeof(s->pd[0]);
-    unsigned long mapped = 0;
+    max_pd = sizeof(s->pd) / sizeof(s->pd[0]);
+    mapped = 0;
 
     for (i = 0; mapped < n && i < max_pd; i++) {
         unsigned long *pd = (unsigned long *) alloc_page();
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/hypervisor.c
--- a/extras/mini-os/hypervisor.c       Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/hypervisor.c       Fri Jul 04 17:47:11 2008 +0100
@@ -72,9 +72,10 @@ void do_hypervisor_callback(struct pt_re
 
 void force_evtchn_callback(void)
 {
+    int save;
     vcpu_info_t *vcpu;
     vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()];
-    int save = vcpu->evtchn_upcall_mask;
+    save = vcpu->evtchn_upcall_mask;
 
     while (vcpu->evtchn_upcall_pending) {
         vcpu->evtchn_upcall_mask = 1;
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/ctype.h
--- a/extras/mini-os/include/ctype.h    Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/include/ctype.h    Fri Jul 04 17:47:11 2008 +0100
@@ -1,6 +1,9 @@
 #ifndef _CTYPE_H
 #define _CTYPE_H
 
+#ifdef HAVE_LIBC
+#include_next <ctype.h>
+#else
 /*
  * NOTE! This ctype does not handle EOF like the standard C
  * library is required to.
@@ -53,3 +56,5 @@ static inline unsigned char __toupper(un
 #define toupper(c) __toupper(c)
 
 #endif
+
+#endif
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/errno.h
--- a/extras/mini-os/include/errno.h    Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/include/errno.h    Fri Jul 04 17:47:11 2008 +0100
@@ -2,6 +2,8 @@
 #define _ERRNO_H
 
 #include <errno-base.h>
+
+typedef int error_t;
 
 #define        EDEADLK         35      /* Resource deadlock would occur */
 #define        ENAMETOOLONG    36      /* File name too long */
@@ -107,6 +109,9 @@
 #define        EOWNERDEAD      130     /* Owner died */
 #define        ENOTRECOVERABLE 131     /* State not recoverable */
 
+
+#define EFTYPE          132     /* Inappropriate file type or format */
+
 #ifdef HAVE_LIBC
 #include <sched.h>
 extern int errno;
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/ia64/arch_spinlock.h
--- a/extras/mini-os/include/ia64/arch_spinlock.h       Fri Jul 04 16:27:44 
2008 +0100
+++ b/extras/mini-os/include/ia64/arch_spinlock.h       Fri Jul 04 17:47:11 
2008 +0100
@@ -27,7 +27,7 @@
 
 #include "atomic.h"
 
-#define ARCH_SPIN_LOCK_UNLOCKED (spinlock_t) { 0 }
+#define ARCH_SPIN_LOCK_UNLOCKED { 0 }
 
 #define SPIN_LOCK_UNUSED       0
 #define SPIN_LOCK_USED         1
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/sys/lock.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/mini-os/include/sys/lock.h Fri Jul 04 17:47:11 2008 +0100
@@ -0,0 +1,52 @@
+#ifndef _MINIOS_SYS_LOCK_H_
+#define _MINIOS_SYS_LOCK_H_
+
+#ifdef HAVE_LIBC
+
+/* Due to inclusion loop, we can not include sched.h, so have to hide things */
+
+#include <waittypes.h>
+
+
+typedef struct {
+        int busy;
+        struct wait_queue_head wait;
+} _LOCK_T;
+
+#define __LOCK_INIT(class,lock) \
+    class _LOCK_T lock = { .wait = __WAIT_QUEUE_HEAD_INITIALIZER(lock.wait) }
+int ___lock_init(_LOCK_T *lock);
+int ___lock_acquire(_LOCK_T *lock);
+int ___lock_try_acquire(_LOCK_T *lock);
+int ___lock_release(_LOCK_T *lock);
+int ___lock_close(_LOCK_T *lock);
+#define __lock_init(__lock) ___lock_init(&__lock)
+#define __lock_acquire(__lock) ___lock_acquire(&__lock)
+#define __lock_release(__lock) ___lock_release(&__lock)
+#define __lock_try_acquire(__lock) ___lock_try_acquire(&__lock)
+#define __lock_close(__lock) 0
+
+
+typedef struct {
+    struct thread *owner;
+    int count;
+    struct wait_queue_head wait;
+} _LOCK_RECURSIVE_T;
+
+#define __LOCK_INIT_RECURSIVE(class, lock) \
+    class _LOCK_RECURSIVE_T lock = { .wait = 
__WAIT_QUEUE_HEAD_INITIALIZER((lock).wait) }
+
+int ___lock_init_recursive(_LOCK_RECURSIVE_T *lock);
+int ___lock_acquire_recursive(_LOCK_RECURSIVE_T *lock);
+int ___lock_try_acquire_recursive(_LOCK_RECURSIVE_T *lock);
+int ___lock_release_recursive(_LOCK_RECURSIVE_T *lock);
+int ___lock_close_recursive(_LOCK_RECURSIVE_T *lock);
+#define __lock_init_recursive(__lock) ___lock_init_recursive(&__lock)
+#define __lock_acquire_recursive(__lock) ___lock_acquire_recursive(&__lock)
+#define __lock_release_recursive(__lock) ___lock_release_recursive(&__lock)
+#define __lock_try_acquire_recursive(__lock) 
___lock_try_acquire_recursive(&__lock)
+#define __lock_close_recursive(__lock) 0
+
+#endif
+
+#endif /* _MINIOS_SYS_LOCK_H_ */
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/types.h
--- a/extras/mini-os/include/types.h    Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/include/types.h    Fri Jul 04 17:47:11 2008 +0100
@@ -36,9 +36,11 @@ typedef unsigned long       u64;
 #endif
 
 /* FreeBSD compat types */
+#ifndef HAVE_LIBC
 typedef unsigned char       u_char;
 typedef unsigned int        u_int;
 typedef unsigned long       u_long;
+#endif
 #ifdef __i386__
 typedef long long           quad_t;
 typedef unsigned long long  u_quad_t;
@@ -79,11 +81,14 @@ typedef u64 uint64_t, uintmax_t;
 typedef u64 uint64_t, uintmax_t;
 typedef s64 int64_t, intmax_t;
 typedef u64 off_t;
+#endif
 
+typedef intptr_t            ptrdiff_t;
 
-#define INT_MAX         ((int)(~0U>>1))
-#define UINT_MAX            (~0U)
 
+#ifndef HAVE_LIBC
 typedef long ssize_t;
 #endif
+typedef unsigned long size_t;
+
 #endif /* _TYPES_H_ */
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/wait.h
--- a/extras/mini-os/include/wait.h     Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/include/wait.h     Fri Jul 04 17:47:11 2008 +0100
@@ -2,29 +2,8 @@
 #define __WAIT_H__
 
 #include <sched.h>
-#include <list.h>
-#include <lib.h>
 #include <os.h>
-
-struct wait_queue
-{
-    struct thread *thread;
-    struct list_head thread_list;
-};
-
-struct wait_queue_head
-{
-    /* TODO - lock required? */
-    struct list_head thread_list;
-};
-
-#define DECLARE_WAIT_QUEUE_HEAD(name) \
-   struct wait_queue_head name =     \
-        { .thread_list = { &(name).thread_list, &(name).thread_list} }
-
-#define __WAIT_QUEUE_HEAD_INITIALIZER(name) {                           \
-    .thread_list      = { &(name).thread_list, &(name).thread_list } }
-
+#include <waittypes.h>
 
 #define DEFINE_WAIT(name)                               \
 struct wait_queue name = {                              \
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/waittypes.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/mini-os/include/waittypes.h        Fri Jul 04 17:47:11 2008 +0100
@@ -0,0 +1,26 @@
+#ifndef __WAITTYPE_H__
+#define __WAITTYPE_H__
+
+#include <list.h>
+
+struct thread;
+struct wait_queue
+{
+    struct thread *thread;
+    struct list_head thread_list;
+};
+
+struct wait_queue_head
+{
+    /* TODO - lock required? */
+    struct list_head thread_list;
+};
+
+#define DECLARE_WAIT_QUEUE_HEAD(name) \
+   struct wait_queue_head name =     \
+        { .thread_list = { &(name).thread_list, &(name).thread_list} }
+
+#define __WAIT_QUEUE_HEAD_INITIALIZER(name) {                           \
+    .thread_list      = { &(name).thread_list, &(name).thread_list } }
+
+#endif
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/x86/arch_spinlock.h
--- a/extras/mini-os/include/x86/arch_spinlock.h        Fri Jul 04 16:27:44 
2008 +0100
+++ b/extras/mini-os/include/x86/arch_spinlock.h        Fri Jul 04 17:47:11 
2008 +0100
@@ -7,7 +7,7 @@
 #include "os.h"
 
 
-#define ARCH_SPIN_LOCK_UNLOCKED (spinlock_t) { 1 }
+#define ARCH_SPIN_LOCK_UNLOCKED { 1 }
 
 /*
  * Simple spin lock operations.  There are two variants, one clears IRQ's
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/include/xmalloc.h
--- a/extras/mini-os/include/xmalloc.h  Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/include/xmalloc.h  Fri Jul 04 17:47:11 2008 +0100
@@ -10,6 +10,8 @@
 #define xfree(ptr) free(ptr)
 
 #else
+
+#include <limits.h>
 
 #define DEFAULT_ALIGN (sizeof(unsigned long))
 #define malloc(size) _xmalloc(size, DEFAULT_ALIGN)
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/kernel.c
--- a/extras/mini-os/kernel.c   Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/kernel.c   Fri Jul 04 17:47:11 2008 +0100
@@ -449,6 +449,8 @@ static void pcifront_thread(void *p)
     }
 
     pci_dev = init_pcifront(NULL);
+    if (!pci_dev)
+        return;
     printk("PCI devices:\n");
     pcifront_scan(pci_dev, print);
 }
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/lib/ctype.c
--- a/extras/mini-os/lib/ctype.c        Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/lib/ctype.c        Fri Jul 04 17:47:11 2008 +0100
@@ -1,3 +1,4 @@
+#ifndef HAVE_LIBC
 #include <ctype.h>
 
 unsigned char _ctype[] = {
@@ -25,3 +26,4 @@ _U,_U,_U,_U,_U,_U,_U,_P,_U,_U,_U,_U,_U,_
 _U,_U,_U,_U,_U,_U,_U,_P,_U,_U,_U,_U,_U,_U,_U,_L,       /* 208-223 */
 _L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,       /* 224-239 */
 _L,_L,_L,_L,_L,_L,_L,_P,_L,_L,_L,_L,_L,_L,_L,_L};      /* 240-255 */
+#endif
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/lib/printf.c
--- a/extras/mini-os/lib/printf.c       Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/lib/printf.c       Fri Jul 04 17:47:11 2008 +0100
@@ -62,6 +62,7 @@
 #include <lib.h>
 #include <mm.h>
 #include <ctype.h>
+#include <limits.h>
 
 /**
  * simple_strtoul - convert a string to an unsigned long
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/lib/xmalloc.c
--- a/extras/mini-os/lib/xmalloc.c      Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/lib/xmalloc.c      Fri Jul 04 17:47:11 2008 +0100
@@ -139,7 +139,7 @@ static void *xmalloc_whole_pages(size_t 
 
 void *_xmalloc(size_t size, size_t align)
 {
-    struct xmalloc_hdr *i, *hdr = NULL;
+    struct xmalloc_hdr *i, *tmp, *hdr = NULL;
     uintptr_t data_begin;
     size_t hdr_size;
     /* unsigned long flags; */
@@ -155,7 +155,7 @@ void *_xmalloc(size_t size, size_t align
 
     /* Search free list. */
     /* spin_lock_irqsave(&freelist_lock, flags); */
-    list_for_each_entry( i, &freelist, freelist )
+    list_for_each_entry_safe( i, tmp, &freelist, freelist )
     {
         data_begin = align_up((uintptr_t)i + hdr_size, align);
 
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/lock.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/mini-os/lock.c     Fri Jul 04 17:47:11 2008 +0100
@@ -0,0 +1,111 @@
+/*
+ * locks for newlib
+ *
+ * Samuel Thibault <Samuel.Thibault@xxxxxxxxxxxxx>, July 20008
+ */
+
+#ifdef HAVE_LIBC
+
+#include <sys/lock.h>
+#include <sched.h>
+#include <wait.h>
+
+int ___lock_init(_LOCK_T *lock)
+{
+    lock->busy = 0;
+    init_waitqueue_head(&lock->wait);
+    return 0;
+}
+
+int ___lock_acquire(_LOCK_T *lock)
+{
+    unsigned long flags;
+    while(1) {
+        wait_event(lock->wait, !lock->busy);
+        local_irq_save(flags);
+        if (!lock->busy)
+            break;
+        local_irq_restore(flags);
+    }
+    lock->busy = 1;
+    local_irq_restore(flags);
+    return 0;
+}
+
+int ___lock_try_acquire(_LOCK_T *lock)
+{
+    unsigned long flags;
+    int ret = -1;
+    local_irq_save(flags);
+    if (!lock->busy) {
+        lock->busy = 1;
+        ret = 0;
+    }
+    local_irq_restore(flags);
+    return ret;
+}
+
+int ___lock_release(_LOCK_T *lock)
+{
+    unsigned long flags;
+    local_irq_save(flags);
+    lock->busy = 0;
+    wake_up(&lock->wait);
+    local_irq_restore(flags);
+    return 0;
+}
+
+
+int ___lock_init_recursive(_LOCK_RECURSIVE_T *lock)
+{
+    lock->owner = NULL;
+    init_waitqueue_head(&lock->wait);
+    return 0;
+}
+
+int ___lock_acquire_recursive(_LOCK_RECURSIVE_T *lock)
+{
+    unsigned long flags;
+    if (lock->owner != get_current()) {
+        while (1) {
+            wait_event(lock->wait, lock->owner == NULL);
+            local_irq_save(flags);
+            if (lock->owner == NULL)
+                break;
+            local_irq_restore(flags);
+        }
+        lock->owner = get_current();
+        local_irq_restore(flags);
+    }
+    lock->count++;
+    return 0;
+}
+
+int ___lock_try_acquire_recursive(_LOCK_RECURSIVE_T *lock)
+{
+    unsigned long flags;
+    int ret = -1;
+    local_irq_save(flags);
+    if (!lock->owner) {
+        ret = 0;
+        lock->owner = get_current();
+        lock->count++;
+    }
+    local_irq_restore(flags);
+    return ret;
+}
+
+int ___lock_release_recursive(_LOCK_RECURSIVE_T *lock)
+{
+    unsigned long flags;
+    BUG_ON(lock->owner != get_current());
+    if (--lock->count)
+        return 0;
+    local_irq_save(flags);
+    lock->owner = NULL;
+    wake_up(&lock->wait);
+    local_irq_restore(flags);
+    return 0;
+}
+
+#endif
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/lwip-net.c
--- a/extras/mini-os/lwip-net.c Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/lwip-net.c Fri Jul 04 17:47:11 2008 +0100
@@ -93,6 +93,9 @@ static err_t
 static err_t
 low_level_output(struct netif *netif, struct pbuf *p)
 {
+  if (!dev)
+    return ERR_OK;
+
 #ifdef ETH_PAD_SIZE
   pbuf_header(p, -ETH_PAD_SIZE); /* drop the padding word */
 #endif
@@ -342,7 +345,7 @@ void start_networking(void)
   struct ip_addr ipaddr = { htonl(IF_IPADDR) };
   struct ip_addr netmask = { htonl(IF_NETMASK) };
   struct ip_addr gw = { 0 };
-  char *ip;
+  char *ip = NULL;
 
   tprintk("Waiting for network.\n");
 
@@ -380,5 +383,6 @@ void start_networking(void)
 /* Shut down the network */
 void stop_networking(void)
 {
-  shutdown_netfront(dev);
-}
+  if (dev)
+    shutdown_netfront(dev);
+}
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/main.c
--- a/extras/mini-os/main.c     Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/main.c     Fri Jul 04 17:47:11 2008 +0100
@@ -52,6 +52,7 @@ static void call_main(void *p)
 #ifdef CONFIG_QEMU
     char *vm;
     char path[128];
+    int domid;
 #endif
     int i;
 
@@ -74,7 +75,6 @@ static void call_main(void *p)
     }
 
     /* Fetch argc, argv from XenStore */
-    int domid;
     domid = xenbus_read_integer("target");
     if (domid == -1) {
         printk("Couldn't read target\n");
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/minios.mk
--- a/extras/mini-os/minios.mk  Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/minios.mk  Fri Jul 04 17:47:11 2008 +0100
@@ -6,13 +6,14 @@ debug = y
 
 # Define some default flags.
 # NB. '-Wcast-qual' is nasty, so I omitted it.
-DEF_CFLAGS += -fno-builtin -Wall -Werror -Wredundant-decls -Wno-format
+DEF_CFLAGS += -fno-builtin -Wall -Werror -Wredundant-decls -Wno-format 
-Wno-redundant-decls
 DEF_CFLAGS += $(call cc-option,$(CC),-fno-stack-protector,)
+DEF_CFLAGS += $(call cc-option,$(CC),-fgnu89-inline)
 DEF_CFLAGS += -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Winline
 DEF_CPPFLAGS += -D__XEN_INTERFACE_VERSION__=$(XEN_INTERFACE_VERSION)
 
-DEF_ASFLAGS = -D__ASSEMBLY__
-DEF_LDFLAGS =
+DEF_ASFLAGS += -D__ASSEMBLY__
+DEF_LDFLAGS +=
 
 ifeq ($(debug),y)
 DEF_CFLAGS += -g
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/mm.c
--- a/extras/mini-os/mm.c       Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/mm.c       Fri Jul 04 17:47:11 2008 +0100
@@ -361,6 +361,7 @@ void free_pages(void *pointer, int order
    
 }
 
+#ifndef __ia64__
 int free_physical_pages(xen_pfn_t *mfns, int n)
 {
     struct xen_memory_reservation reservation;
@@ -371,6 +372,7 @@ int free_physical_pages(xen_pfn_t *mfns,
     reservation.domid = DOMID_SELF;
     return HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation);
 }
+#endif
 
 #ifdef HAVE_LIBC
 void *sbrk(ptrdiff_t increment)
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/netfront.c
--- a/extras/mini-os/netfront.c Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/netfront.c Fri Jul 04 17:47:11 2008 +0100
@@ -95,8 +95,9 @@ static inline int xennet_rxidx(RING_IDX 
 
 void network_rx(struct netfront_dev *dev)
 {
-    RING_IDX rp,cons;
+    RING_IDX rp,cons,req_prod;
     struct netif_rx_response *rx;
+    int nr_consumed, some, more, i, notify;
 
 
 moretodo:
@@ -104,12 +105,13 @@ moretodo:
     rmb(); /* Ensure we see queued responses up to 'rp'. */
     cons = dev->rx.rsp_cons;
 
-    int nr_consumed=0;
-    int some = 0;
+    nr_consumed = 0;
+    some = 0;
     while ((cons != rp) && !some)
     {
         struct net_buffer* buf;
         unsigned char* page;
+        int id;
 
         rx = RING_GET_RESPONSE(&dev->rx, cons);
 
@@ -122,7 +124,7 @@ moretodo:
 
         if (rx->status == NETIF_RSP_NULL) continue;
 
-        int id = rx->id;
+        id = rx->id;
         BUG_ON(id >= NET_TX_RING_SIZE);
 
         buf = &dev->rx_buffers[id];
@@ -151,19 +153,15 @@ moretodo:
     }
     dev->rx.rsp_cons=cons;
 
-    int more;
     RING_FINAL_CHECK_FOR_RESPONSES(&dev->rx,more);
     if(more && !some) goto moretodo;
 
-    RING_IDX req_prod = dev->rx.req_prod_pvt;
-
-    int i;
-    netif_rx_request_t *req;
+    req_prod = dev->rx.req_prod_pvt;
 
     for(i=0; i<nr_consumed; i++)
     {
         int id = xennet_rxidx(req_prod + i);
-        req = RING_GET_REQUEST(&dev->rx, req_prod + i);
+        netif_rx_request_t *req = RING_GET_REQUEST(&dev->rx, req_prod + i);
         struct net_buffer* buf = &dev->rx_buffers[id];
         void* page = buf->page;
 
@@ -178,7 +176,6 @@ moretodo:
 
     dev->rx.req_prod_pvt = req_prod + i;
     
-    int notify;
     RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&dev->rx, notify);
     if (notify)
         notify_remote_via_evtchn(dev->evtchn);
@@ -199,6 +196,7 @@ void network_tx_buf_gc(struct netfront_d
         for (cons = dev->tx.rsp_cons; cons != prod; cons++) 
         {
             struct netif_tx_response *txrsp;
+            struct net_buffer *buf;
 
             txrsp = RING_GET_RESPONSE(&dev->tx, cons);
             if (txrsp->status == NETIF_RSP_NULL)
@@ -209,7 +207,7 @@ void network_tx_buf_gc(struct netfront_d
 
             id  = txrsp->id;
             BUG_ON(id >= NET_TX_RING_SIZE);
-            struct net_buffer* buf = &dev->tx_buffers[id];
+            buf = &dev->tx_buffers[id];
             gnttab_end_access(buf->gref);
             buf->gref=GRANT_INVALID_REF;
 
@@ -298,7 +296,7 @@ static void free_netfront(struct netfron
     free(dev);
 }
 
-struct netfront_dev *init_netfront(char *nodename, void 
(*thenetif_rx)(unsigned char* data, int len), unsigned char rawmac[6], char 
**ip)
+struct netfront_dev *init_netfront(char *_nodename, void 
(*thenetif_rx)(unsigned char* data, int len), unsigned char rawmac[6], char 
**ip)
 {
     xenbus_transaction_t xbt;
     char* err;
@@ -308,11 +306,9 @@ struct netfront_dev *init_netfront(char 
     int retry=0;
     int i;
     char* msg;
+    char* nodename = _nodename ? _nodename : "device/vif/0";
 
     struct netfront_dev *dev;
-
-    if (!nodename)
-       nodename = "device/vif/0";
 
     char path[strlen(nodename) + 1 + 10 + 1];
 
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/pcifront.c
--- a/extras/mini-os/pcifront.c Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/pcifront.c Fri Jul 04 17:47:11 2008 +0100
@@ -49,18 +49,16 @@ static void free_pcifront(struct pcifron
     free(dev);
 }
 
-struct pcifront_dev *init_pcifront(char *nodename)
+struct pcifront_dev *init_pcifront(char *_nodename)
 {
     xenbus_transaction_t xbt;
     char* err;
     char* message=NULL;
     int retry=0;
     char* msg;
+    char* nodename = _nodename ? _nodename : "device/pci/0";
 
     struct pcifront_dev *dev;
-
-    if (!nodename)
-        nodename = "device/pci/0";
 
     char path[strlen(nodename) + 1 + 10 + 1];
 
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/sched.c
--- a/extras/mini-os/sched.c    Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/sched.c    Fri Jul 04 17:47:11 2008 +0100
@@ -75,7 +75,7 @@ void schedule(void)
 void schedule(void)
 {
     struct thread *prev, *next, *thread;
-    struct list_head *iterator;
+    struct list_head *iterator, *next_iterator;
     unsigned long flags;
 
     prev = current;
@@ -97,7 +97,7 @@ void schedule(void)
         s_time_t now = NOW();
         s_time_t min_wakeup_time = now + SECONDS(10);
         next = NULL;   
-        list_for_each(iterator, &idle_thread->thread_list)
+        list_for_each_safe(iterator, next_iterator, &idle_thread->thread_list)
         {
             thread = list_entry(iterator, struct thread, thread_list);
             if (!is_runnable(thread) && thread->wakeup_time != 0LL)
@@ -128,7 +128,7 @@ void schedule(void)
        inturrupted at the return instruction. And therefore at safe point. */
     if(prev != next) switch_threads(prev, next);
 
-    list_for_each(iterator, &exited_threads)
+    list_for_each_safe(iterator, next_iterator, &exited_threads)
     {
         thread = list_entry(iterator, struct thread, thread_list);
         if(thread != prev)
diff -r a49673cd23d2 -r 433d1b26fd51 extras/mini-os/xenbus/xenbus.c
--- a/extras/mini-os/xenbus/xenbus.c    Fri Jul 04 16:27:44 2008 +0100
+++ b/extras/mini-os/xenbus/xenbus.c    Fri Jul 04 17:47:11 2008 +0100
@@ -78,9 +78,9 @@ char **xenbus_wait_for_watch_return(xenb
 char **xenbus_wait_for_watch_return(xenbus_event_queue *queue)
 {
     struct xenbus_event *event;
+    DEFINE_WAIT(w);
     if (!queue)
         queue = &xenbus_events;
-    DEFINE_WAIT(w);
     while (!(event = *queue)) {
         add_waiter(w, xenbus_watch_queue);
         schedule();
@@ -382,6 +382,7 @@ xenbus_msg_reply(int type,
 
 static char *errmsg(struct xsd_sockmsg *rep)
 {
+    char *res;
     if (!rep) {
        char msg[] = "No reply";
        size_t len = strlen(msg) + 1;
@@ -389,7 +390,7 @@ static char *errmsg(struct xsd_sockmsg *
     }
     if (rep->type != XS_ERROR)
        return NULL;
-    char *res = malloc(rep->len + 1);
+    res = malloc(rep->len + 1);
     memcpy(res, rep + 1, rep->len);
     res[rep->len] = 0;
     free(rep);
@@ -419,10 +420,10 @@ char *xenbus_ls(xenbus_transaction_t xbt
     struct xsd_sockmsg *reply, *repmsg;
     struct write_req req[] = { { pre, strlen(pre)+1 } };
     int nr_elems, x, i;
-    char **res;
+    char **res, *msg;
 
     repmsg = xenbus_msg_reply(XS_DIRECTORY, xbt, req, ARRAY_SIZE(req));
-    char *msg = errmsg(repmsg);
+    msg = errmsg(repmsg);
     if (msg) {
        *contents = NULL;
        return msg;
@@ -447,9 +448,9 @@ char *xenbus_read(xenbus_transaction_t x
 {
     struct write_req req[] = { {path, strlen(path) + 1} };
     struct xsd_sockmsg *rep;
-    char *res;
+    char *res, *msg;
     rep = xenbus_msg_reply(XS_READ, xbt, req, ARRAY_SIZE(req));
-    char *msg = errmsg(rep);
+    msg = errmsg(rep);
     if (msg) {
        *value = NULL;
        return msg;
@@ -469,8 +470,9 @@ char *xenbus_write(xenbus_transaction_t 
        {value, strlen(value)},
     };
     struct xsd_sockmsg *rep;
+    char *msg;
     rep = xenbus_msg_reply(XS_WRITE, xbt, req, ARRAY_SIZE(req));
-    char *msg = errmsg(rep);
+    msg = errmsg(rep);
     if (msg) return msg;
     free(rep);
     return NULL;
@@ -487,6 +489,8 @@ char* xenbus_watch_path_token( xenbus_tr
 
     struct watch *watch = malloc(sizeof(*watch));
 
+    char *msg;
+
     if (!events)
         events = &xenbus_events;
 
@@ -497,7 +501,7 @@ char* xenbus_watch_path_token( xenbus_tr
 
     rep = xenbus_msg_reply(XS_WATCH, xbt, req, ARRAY_SIZE(req));
 
-    char *msg = errmsg(rep);
+    msg = errmsg(rep);
     if (msg) return msg;
     free(rep);
 
@@ -515,9 +519,11 @@ char* xenbus_unwatch_path_token( xenbus_
 
     struct watch *watch, **prev;
 
+    char *msg;
+
     rep = xenbus_msg_reply(XS_UNWATCH, xbt, req, ARRAY_SIZE(req));
 
-    char *msg = errmsg(rep);
+    msg = errmsg(rep);
     if (msg) return msg;
     free(rep);
 
@@ -536,8 +542,9 @@ char *xenbus_rm(xenbus_transaction_t xbt
 {
     struct write_req req[] = { {path, strlen(path) + 1} };
     struct xsd_sockmsg *rep;
+    char *msg;
     rep = xenbus_msg_reply(XS_RM, xbt, req, ARRAY_SIZE(req));
-    char *msg = errmsg(rep);
+    msg = errmsg(rep);
     if (msg)
        return msg;
     free(rep);
@@ -548,9 +555,9 @@ char *xenbus_get_perms(xenbus_transactio
 {
     struct write_req req[] = { {path, strlen(path) + 1} };
     struct xsd_sockmsg *rep;
-    char *res;
+    char *res, *msg;
     rep = xenbus_msg_reply(XS_GET_PERMS, xbt, req, ARRAY_SIZE(req));
-    char *msg = errmsg(rep);
+    msg = errmsg(rep);
     if (msg) {
        *value = NULL;
        return msg;
@@ -567,14 +574,16 @@ char *xenbus_set_perms(xenbus_transactio
 char *xenbus_set_perms(xenbus_transaction_t xbt, const char *path, domid_t 
dom, char perm)
 {
     char value[PERM_MAX_SIZE];
-    snprintf(value, PERM_MAX_SIZE, "%c%hu", perm, dom);
     struct write_req req[] = { 
        {path, strlen(path) + 1},
-       {value, strlen(value) + 1},
+       {value, 0},
     };
     struct xsd_sockmsg *rep;
+    char *msg;
+    snprintf(value, PERM_MAX_SIZE, "%c%hu", perm, dom);
+    req[1].len = strlen(value) + 1;
     rep = xenbus_msg_reply(XS_SET_PERMS, xbt, req, ARRAY_SIZE(req));
-    char *msg = errmsg(rep);
+    msg = errmsg(rep);
     if (msg)
        return msg;
     free(rep);
@@ -659,11 +668,11 @@ char* xenbus_printf(xenbus_transaction_t
 
 static void do_ls_test(const char *pre)
 {
-    char **dirs;
+    char **dirs, *msg;
     int x;
 
     DEBUG("ls %s...\n", pre);
-    char *msg = xenbus_ls(XBT_NIL, pre, &dirs);
+    msg = xenbus_ls(XBT_NIL, pre, &dirs);
     if (msg) {
        DEBUG("Error in xenbus ls: %s\n", msg);
        free(msg);
@@ -679,9 +688,9 @@ static void do_ls_test(const char *pre)
 
 static void do_read_test(const char *path)
 {
-    char *res;
+    char *res, *msg;
     DEBUG("Read %s...\n", path);
-    char *msg = xenbus_read(XBT_NIL, path, &res);
+    msg = xenbus_read(XBT_NIL, path, &res);
     if (msg) {
        DEBUG("Error in xenbus read: %s\n", msg);
        free(msg);
@@ -693,8 +702,9 @@ static void do_read_test(const char *pat
 
 static void do_write_test(const char *path, const char *val)
 {
+    char *msg;
     DEBUG("Write %s to %s...\n", val, path);
-    char *msg = xenbus_write(XBT_NIL, path, val);
+    msg = xenbus_write(XBT_NIL, path, val);
     if (msg) {
        DEBUG("Result %s\n", msg);
        free(msg);
@@ -705,8 +715,9 @@ static void do_write_test(const char *pa
 
 static void do_rm_test(const char *path)
 {
+    char *msg;
     DEBUG("rm %s...\n", path);
-    char *msg = xenbus_rm(XBT_NIL, path);
+    msg = xenbus_rm(XBT_NIL, path);
     if (msg) {
        DEBUG("Result %s\n", msg);
        free(msg);
diff -r a49673cd23d2 -r 433d1b26fd51 stubdom/Makefile
--- a/stubdom/Makefile  Fri Jul 04 16:27:44 2008 +0100
+++ b/stubdom/Makefile  Fri Jul 04 17:47:11 2008 +0100
@@ -3,13 +3,11 @@ MINI_OS = $(XEN_ROOT)/extras/mini-os
 
 export XEN_OS=MiniOS
 
-include $(XEN_ROOT)/Config.mk
 export stubdom=y
 export debug=y
+include $(XEN_ROOT)/Config.mk
 
 IOEMU_OPTIONS=--disable-vnc-tls 
-BINUTILS_VERSION=2.18
-GCC_VERSION=4.2.2
 ZLIB_VERSION=1.2.3
 LIBPCI_VERSION=2.2.9
 NEWLIB_DATE=2008-01-01
@@ -37,56 +35,28 @@ endif
 
 CROSS_ROOT=cross-root-$(GNU_TARGET_ARCH)
 CROSS_PREFIX=$(CURDIR)/$(CROSS_ROOT)
-export CROSS_COMPILE=$(GNU_TARGET_ARCH)-xen-elf-
-export PATH:=$(CROSS_PREFIX)/bin:$(PATH)
+
+# Disable PIE/SSP if GCC supports them. They can break us.
+TARGET_CFLAGS += $(CFLAGS)
+TARGET_CPPFLAGS += $(CPPFLAGS)
+TARGET_CFLAGS += $(call cc-option,$(CC),-nopie,)
+TARGET_CFLAGS += $(call cc-option,$(CC),-fno-stack-protector,)
+TARGET_CFLAGS += $(call cc-option,$(CC),-fno-stack-protector-all,)
+
+# Do not use host headers and libs
+GCC_INSTALL = $(shell gcc -print-search-dirs | sed -n -e 's/install: 
\(.*\)/\1/p')
+TARGET_CPPFLAGS += -U __linux__ -U __FreeBSD__ -U __sun__
+TARGET_CFLAGS += -nostdinc
+TARGET_CPPFLAGS += -isystem $(realpath $(MINI_OS)/include/posix)
+TARGET_CPPFLAGS += -isystem $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include
+TARGET_CPPFLAGS += -isystem $(GCC_INSTALL)include
+
+TARGET_LDFLAGS += -nostdlib -L$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib
 
 TARGETS=ioemu c caml grub
 
 .PHONY: all
 all: ioemu-stubdom c-stubdom pv-grub
-
-################
-# Cross-binutils
-################
-
-binutils-$(BINUTILS_VERSION).tar.bz2:
-       $(WGET) http://ftp.gnu.org/gnu/binutils/$@
-binutils-$(BINUTILS_VERSION): binutils-$(BINUTILS_VERSION).tar.bz2
-       tar xjf $<
-       patch -d $@ -p1 < binutils.patch
-       touch $@
-
-BINUTILS_STAMPFILE=$(CROSS_ROOT)/bin/$(GNU_TARGET_ARCH)-xen-elf-ar
-.PHONY: cross-binutils
-cross-binutils: $(BINUTILS_STAMPFILE)
-$(BINUTILS_STAMPFILE): binutils-$(BINUTILS_VERSION)
-       mkdir -p binutils-build
-       ( cd binutils-build && \
-         ../binutils-$(BINUTILS_VERSION)/configure --prefix=$(CROSS_PREFIX) 
--verbose --target=$(GNU_TARGET_ARCH)-xen-elf && \
-         $(MAKE) && \
-         $(MAKE) check && \
-         $(MAKE) install )
-
-###########
-# Cross-gcc
-###########
-
-gcc-$(GCC_VERSION).tar.bz2:
-       $(WGET) 
http://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.bz2
-gcc-$(GCC_VERSION): gcc-$(GCC_VERSION).tar.bz2
-       tar xjf $<
-       patch -d $@ -p1 < gcc.patch
-       touch $@
-
-GCC_STAMPFILE=$(CROSS_ROOT)/bin/$(GNU_TARGET_ARCH)-xen-elf-gcc-$(GCC_VERSION)
-.PHONY: cross-gcc
-cross-gcc: $(GCC_STAMPFILE)
-$(GCC_STAMPFILE): gcc-$(GCC_VERSION) $(BINUTILS_STAMPFILE)
-       mkdir -p gcc-build
-       ( cd gcc-build && \
-         ../gcc-$(GCC_VERSION)/configure --prefix=$(CROSS_PREFIX) --verbose 
--target=$(GNU_TARGET_ARCH)-xen-elf --enable-languages=c --disable-libssp 
--with-gnu-as --with-gnu-ld && \
-         $(MAKE) GCC_FOR_TARGET='$$$$r/gcc/xgcc -B$$$$r/gcc/ 
'"$(TARGET_CFLAGS)"' $$(FLAGS_FOR_TARGET)' && \
-         $(MAKE) install )
 
 ##############
 # Cross-newlib
@@ -100,10 +70,10 @@ NEWLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TAR
 NEWLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libc.a
 .PHONY: cross-newlib
 cross-newlib: $(NEWLIB_STAMPFILE)
-$(NEWLIB_STAMPFILE): newlib-cvs $(GCC_STAMPFILE)
+$(NEWLIB_STAMPFILE): newlib-cvs
        mkdir -p newlib-build
        ( cd newlib-build && \
-         CC_FOR_TARGET="$(GNU_TARGET_ARCH)-xen-elf-gcc $(TARGET_CFLAGS) 
$(NEWLIB_CFLAGS)" ../newlib-cvs/configure --prefix=$(CROSS_PREFIX) --verbose 
--target=$(GNU_TARGET_ARCH)-xen-elf --enable-newlib-io-long-long && \
+         CC_FOR_TARGET="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) 
$(NEWLIB_CFLAGS)" AR_FOR_TARGET=$(AR) LD_FOR_TARGET=$(LD) 
RANLIB_FOR_TARGET=$(RANLIB) ../newlib-cvs/configure --prefix=$(CROSS_PREFIX) 
--verbose --target=$(GNU_TARGET_ARCH)-xen-elf --enable-newlib-io-long-long 
--disable-multilib && \
          $(MAKE) && \
          $(MAKE) install )
 
@@ -120,7 +90,7 @@ cross-zlib: $(ZLIB_STAMPFILE)
 $(ZLIB_STAMPFILE): zlib-$(ZLIB_VERSION).tar.gz $(NEWLIB_STAMPFILE)
        tar xzf $<
        ( cd zlib-$(ZLIB_VERSION) && \
-         CFLAGS="$(TARGET_CFLAGS)" CC=$(GNU_TARGET_ARCH)-xen-elf-gcc 
./configure --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf && \
+         CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" CC=$(CC) ./configure 
--prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf && \
          $(MAKE) libz.a && \
          $(MAKE) install )
 
@@ -144,7 +114,7 @@ cross-libpci: $(LIBPCI_STAMPFILE)
          cp ../libpci.config.h lib/config.h && \
          echo '#define PCILIB_VERSION "$(LIBPCI_VERSION)"' >> lib/config.h && \
          cp ../libpci.config.mak lib/config.mk && \
-         $(MAKE) CC="$(GNU_TARGET_ARCH)-xen-elf-gcc $(TARGET_CFLAGS) 
-I$(realpath $(MINI_OS)/include)" lib/libpci.a && \
+         $(MAKE) CC="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -I$(realpath 
$(MINI_OS)/include)" lib/libpci.a && \
          $(INSTALL_DATA) lib/libpci.a 
$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ && \
          $(INSTALL_DIR) $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/pci 
&& \
          $(INSTALL_DATA) lib/{config,header,pci,types}.h 
$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/pci/ \
@@ -198,7 +168,7 @@ TARGETS_MINIOS=$(addprefix mini-os-,$(TA
 .PHONY: libxc
 libxc: libxc/libxenctrl.a libxc/libxenguest.a
 libxc/libxenctrl.a libxc/libxenguest.a: cross-zlib mk-symlinks
-       $(MAKE) -C libxc
+       CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C libxc
 
 #######
 # ioemu
@@ -207,8 +177,9 @@ libxc/libxenctrl.a libxc/libxenguest.a: 
 .PHONY: ioemu
 ioemu: cross-zlib cross-libpci mk-symlinks libxc
        [ -f ioemu/config-host.mak ] || \
-         ( cd ioemu ; XEN_TARGET_ARCH=$(XEN_TARGET_ARCH) sh configure 
--prefix=/usr --enable-stubdom $(IOEMU_OPTIONS))
-       $(MAKE) -C ioemu LWIPDIR=$(CURDIR)/lwip-cvs
+         ( cd ioemu ; \
+          XEN_TARGET_ARCH=$(XEN_TARGET_ARCH) CFLAGS="$(TARGET_CFLAGS)" sh 
configure --prefix=/usr --enable-stubdom $(IOEMU_OPTIONS))
+       CPPFLAGS="$(TARGET_CPPFLAGS)" $(MAKE) -C ioemu 
LWIPDIR=$(CURDIR)/lwip-cvs
 
 ######
 # caml
@@ -216,7 +187,7 @@ ioemu: cross-zlib cross-libpci mk-symlin
 
 .PHONY: caml
 caml: cross-newlib mk-symlinks
-       $(MAKE) -C $@ LWIPDIR=$(CURDIR)/lwip-cvs 
+       CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@ 
LWIPDIR=$(CURDIR)/lwip-cvs 
 
 ###
 # C
@@ -224,7 +195,7 @@ caml: cross-newlib mk-symlinks
 
 .PHONY: c
 c: cross-newlib mk-symlinks
-       $(MAKE) -C $@ LWIPDIR=$(CURDIR)/lwip-cvs 
+       CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@ 
LWIPDIR=$(CURDIR)/lwip-cvs 
 
 ######
 # Grub
@@ -238,7 +209,7 @@ grub-cvs:
 
 .PHONY: grub
 grub: grub-cvs cross-newlib mk-symlinks
-       $(MAKE) -C $@
+       CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@
 
 ########
 # minios
@@ -246,20 +217,20 @@ grub: grub-cvs cross-newlib mk-symlinks
 
 .PHONY: ioemu-stubdom
 ioemu-stubdom: mini-os-ioemu lwip-cvs libxc ioemu
-       DEF_CFLAGS=-DCONFIG_QEMU $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< 
LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS="$(CURDIR)/ioemu/i386-dm-stubdom/qemu.a 
$(CURDIR)/ioemu/i386-dm-stubdom/libqemu.a"
+       DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="-DCONFIG_QEMU 
$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" $(MAKE) -C $(MINI_OS) 
OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-cvs 
APP_OBJS="$(CURDIR)/ioemu/i386-dm-stubdom/qemu.a 
$(CURDIR)/ioemu/i386-dm-stubdom/libqemu.a"
 
 CAMLLIB = $(shell ocamlc -where)
 .PHONY: caml-stubdom
 caml-stubdom: mini-os-caml lwip-cvs libxc caml
-       DEF_CFLAGS=-DCONFIG_CAML $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< 
LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS="$(CURDIR)/caml/main-caml.o 
$(CURDIR)/caml/caml.o $(CAMLLIB)/libasmrun.a"
+       DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="-DCONFIG_CAML 
$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" $(MAKE) -C $(MINI_OS) 
OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-cvs 
APP_OBJS="$(CURDIR)/caml/main-caml.o $(CURDIR)/caml/caml.o 
$(CAMLLIB)/libasmrun.a"
 
 .PHONY: c-stubdom
 c-stubdom: mini-os-c lwip-cvs libxc c
-       DEF_CFLAGS=-DCONFIG_C $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< 
LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS=$(CURDIR)/c/main.a
+       DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="-DCONFIG_C 
$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" $(MAKE) -C $(MINI_OS) 
OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS=$(CURDIR)/c/main.a
 
 .PHONY: pv-grub
 pv-grub: mini-os-grub libxc grub
-       DEF_CFLAGS=-DCONFIG_GRUB $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< 
APP_OBJS=$(CURDIR)/grub/main.a
+       DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="-DCONFIG_GRUB 
$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" $(MAKE) -C $(MINI_OS) 
OBJ_DIR=$(CURDIR)/$< APP_OBJS=$(CURDIR)/grub/main.a
 
 #########
 # install
@@ -294,14 +265,12 @@ clean:
 .PHONY: crossclean
 crossclean: clean
        rm -fr $(CROSS_ROOT)
-       rm -fr binutils-build gcc-build newlib-build
+       rm -fr newlib-build
        rm -fr zlib-$(ZLIB_VERSION) pciutils-$(LIBPCI_VERSION)
 
 # clean patched sources
 .PHONY: patchclean
 patchclean: crossclean
-       rm -fr binutils-$(BINUTILS_VERSION)
-       rm -fr gcc-$(GCC_VERSION)
        rm -fr newlib-cvs
        rm -fr lwip-cvs
        rm -fr grub-cvs
@@ -309,8 +278,6 @@ patchclean: crossclean
 # clean downloads
 .PHONY: downloadclean
 downloadclean: patchclean
-       rm -f binutils-$(BINUTILS_VERSION).tar.bz2
-       rm -f gcc-$(GCC_VERSION).tar.bz2
        rm -f zlib-$(ZLIB_VERSION).tar.gz
        rm -f pciutils-$(LIBPCI_VERSION).tar.bz2
 

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] stubdom: use host's gcc, Xen patchbot-unstable <=