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

Re: [Xen-devel] [PATCH v2] mini-os: Fix stubdom build failures on gcc 4.8



xenmail43267@xxxxxxxxx, le Wed 22 Jan 2014 11:41:11 -0600, a écrit :
> From: Mike Neilsen <mneilsen@xxxxxxx>
> 
> This is a fix for bug 35:
> http://bugs.xenproject.org/xen/bug/35
> 
> This bug report describes several format string mismatches which prevent
> building the stubdom target in Xen 4.3 and Xen 4.4-rc2 on gcc 4.8.  This is a
> copy of Alex Sharp's original patch with the following modifications:
> 
> * Andrew Cooper's recommendation applied to extras/mini-os/xenbus/xenbus.c to
>   avoid stack corruption
> * Samuel Thibault's recommendation to make "fun" an unsigned int rather than 
> an
>   unsigned long in pcifront_physical_to_virtual and related functions
>   (extras/mini-os/include/pcifront.h and extras/mini-os/pcifront.c)
> 
> Tested on x86_64 gcc Ubuntu/Linaro 4.8.1-10ubuntu9.
> 
> Signed-off-by: Mike Neilsen <mneilsen@xxxxxxx>

Acked-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>

> ---
> Changed since v1:
> * Change "fun" arguments into unsigned ints
> ---
>  extras/mini-os/fbfront.c          |  4 ++--
>  extras/mini-os/include/pcifront.h | 12 ++++++------
>  extras/mini-os/pcifront.c         | 14 +++++++-------
>  extras/mini-os/xenbus/xenbus.c    |  5 +++--
>  4 files changed, 18 insertions(+), 17 deletions(-)
> 
> diff --git a/extras/mini-os/fbfront.c b/extras/mini-os/fbfront.c
> index 1e01513..9cc07b4 100644
> --- a/extras/mini-os/fbfront.c
> +++ b/extras/mini-os/fbfront.c
> @@ -105,7 +105,7 @@ again:
>          free(err);
>      }
>  
> -    err = xenbus_printf(xbt, nodename, "page-ref","%u", virt_to_mfn(s));
> +    err = xenbus_printf(xbt, nodename, "page-ref","%lu", virt_to_mfn(s));
>      if (err) {
>          message = "writing page-ref";
>          goto abort_transaction;
> @@ -468,7 +468,7 @@ again:
>          free(err);
>      }
>  
> -    err = xenbus_printf(xbt, nodename, "page-ref","%u", virt_to_mfn(s));
> +    err = xenbus_printf(xbt, nodename, "page-ref","%lu", virt_to_mfn(s));
>      if (err) {
>          message = "writing page-ref";
>          goto abort_transaction;
> diff --git a/extras/mini-os/include/pcifront.h 
> b/extras/mini-os/include/pcifront.h
> index 0a6be8e..1b05963 100644
> --- a/extras/mini-os/include/pcifront.h
> +++ b/extras/mini-os/include/pcifront.h
> @@ -7,23 +7,23 @@ void pcifront_op(struct pcifront_dev *dev, struct 
> xen_pci_op *op);
>  void pcifront_scan(struct pcifront_dev *dev, void (*fun)(unsigned int 
> domain, unsigned int bus, unsigned slot, unsigned int fun));
>  int pcifront_conf_read(struct pcifront_dev *dev,
>                         unsigned int dom,
> -                       unsigned int bus, unsigned int slot, unsigned long 
> fun,
> +                       unsigned int bus, unsigned int slot, unsigned int fun,
>                         unsigned int off, unsigned int size, unsigned int 
> *val);
>  int pcifront_conf_write(struct pcifront_dev *dev,
>                          unsigned int dom,
> -                        unsigned int bus, unsigned int slot, unsigned long 
> fun,
> +                        unsigned int bus, unsigned int slot, unsigned int 
> fun,
>                          unsigned int off, unsigned int size, unsigned int 
> val);
>  int pcifront_enable_msi(struct pcifront_dev *dev,
>                          unsigned int dom,
> -                        unsigned int bus, unsigned int slot, unsigned long 
> fun);
> +                        unsigned int bus, unsigned int slot, unsigned int 
> fun);
>  int pcifront_disable_msi(struct pcifront_dev *dev,
>                           unsigned int dom,
> -                         unsigned int bus, unsigned int slot, unsigned long 
> fun);
> +                         unsigned int bus, unsigned int slot, unsigned int 
> fun);
>  int pcifront_enable_msix(struct pcifront_dev *dev,
>                           unsigned int dom,
> -                         unsigned int bus, unsigned int slot, unsigned long 
> fun,
> +                         unsigned int bus, unsigned int slot, unsigned int 
> fun,
>                           struct xen_msix_entry *entries, int n);
>  int pcifront_disable_msix(struct pcifront_dev *dev,
>                            unsigned int dom,
> -                          unsigned int bus, unsigned int slot, unsigned long 
> fun);
> +                          unsigned int bus, unsigned int slot, unsigned int 
> fun);
>  void shutdown_pcifront(struct pcifront_dev *dev);
> diff --git a/extras/mini-os/pcifront.c b/extras/mini-os/pcifront.c
> index 16a4b49..0fc5b30 100644
> --- a/extras/mini-os/pcifront.c
> +++ b/extras/mini-os/pcifront.c
> @@ -384,7 +384,7 @@ int pcifront_physical_to_virtual (struct pcifront_dev 
> *dev,
>                                    unsigned int *dom,
>                                    unsigned int *bus,
>                                    unsigned int *slot,
> -                                  unsigned long *fun)
> +                                  unsigned int *fun)
>  {
>      /* FIXME: the buffer sizing is a little lazy here. 10 extra bytes
>         should be enough to hold the paths we need to construct, even
> @@ -456,7 +456,7 @@ void pcifront_op(struct pcifront_dev *dev, struct 
> xen_pci_op *op)
>  
>  int pcifront_conf_read(struct pcifront_dev *dev,
>                         unsigned int dom,
> -                       unsigned int bus, unsigned int slot, unsigned long 
> fun,
> +                       unsigned int bus, unsigned int slot, unsigned int fun,
>                         unsigned int off, unsigned int size, unsigned int 
> *val)
>  {
>      struct xen_pci_op op;
> @@ -486,7 +486,7 @@ int pcifront_conf_read(struct pcifront_dev *dev,
>  
>  int pcifront_conf_write(struct pcifront_dev *dev,
>                          unsigned int dom,
> -                        unsigned int bus, unsigned int slot, unsigned long 
> fun,
> +                        unsigned int bus, unsigned int slot, unsigned int 
> fun,
>                          unsigned int off, unsigned int size, unsigned int 
> val)
>  {
>      struct xen_pci_op op;
> @@ -513,7 +513,7 @@ int pcifront_conf_write(struct pcifront_dev *dev,
>  
>  int pcifront_enable_msi(struct pcifront_dev *dev,
>                          unsigned int dom,
> -                        unsigned int bus, unsigned int slot, unsigned long 
> fun)
> +                        unsigned int bus, unsigned int slot, unsigned int 
> fun)
>  {
>      struct xen_pci_op op;
>  
> @@ -538,7 +538,7 @@ int pcifront_enable_msi(struct pcifront_dev *dev,
>  
>  int pcifront_disable_msi(struct pcifront_dev *dev,
>                           unsigned int dom,
> -                         unsigned int bus, unsigned int slot, unsigned long 
> fun)
> +                         unsigned int bus, unsigned int slot, unsigned int 
> fun)
>  {
>      struct xen_pci_op op;
>  
> @@ -560,7 +560,7 @@ int pcifront_disable_msi(struct pcifront_dev *dev,
>  
>  int pcifront_enable_msix(struct pcifront_dev *dev,
>                           unsigned int dom,
> -                         unsigned int bus, unsigned int slot, unsigned long 
> fun,
> +                         unsigned int bus, unsigned int slot, unsigned int 
> fun,
>                           struct xen_msix_entry *entries, int n)
>  {
>      struct xen_pci_op op;
> @@ -595,7 +595,7 @@ int pcifront_enable_msix(struct pcifront_dev *dev,
>  
>  int pcifront_disable_msix(struct pcifront_dev *dev,
>                            unsigned int dom,
> -                          unsigned int bus, unsigned int slot, unsigned long 
> fun)
> +                          unsigned int bus, unsigned int slot, unsigned int 
> fun)
>  {
>      struct xen_pci_op op;
>  
> diff --git a/extras/mini-os/xenbus/xenbus.c b/extras/mini-os/xenbus/xenbus.c
> index ee1691b..c5d9b02 100644
> --- a/extras/mini-os/xenbus/xenbus.c
> +++ b/extras/mini-os/xenbus/xenbus.c
> @@ -15,6 +15,7 @@
>   *
>   ****************************************************************************
>   **/
> +#include <inttypes.h>
>  #include <mini-os/os.h>
>  #include <mini-os/mm.h>
>  #include <mini-os/traps.h>
> @@ -672,7 +673,7 @@ char *xenbus_transaction_start(xenbus_transaction_t *xbt)
>      err = errmsg(rep);
>      if (err)
>       return err;
> -    sscanf((char *)(rep + 1), "%u", xbt);
> +    sscanf((char *)(rep + 1), "%lu", xbt);
>      free(rep);
>      return NULL;
>  }
> @@ -769,7 +770,7 @@ domid_t xenbus_get_self_id(void)
>      domid_t ret;
>  
>      BUG_ON(xenbus_read(XBT_NIL, "domid", &dom_id));
> -    sscanf(dom_id, "%d", &ret);
> +    sscanf(dom_id, "%"SCNd16, &ret);
>  
>      return ret;
>  }
> -- 
> 1.8.3.2
> 

-- 
Samuel
Client: "This program has been successfully installed."
Vendeur (surpris): "Et où voyez-vous une erreur ?"
Client: "C'est << HAS BEEN >> !"

_______________________________________________
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®.