[libvirt] genprotocol.pl generates unstable output

Olaf Hering olaf at aepfle.de
Thu Oct 1 06:44:55 UTC 2015


If the same source gets built twice the resulting files may differ.
One example is this:

...
[  305s] /usr/bin/perl -w ./rpc/genprotocol.pl /usr/bin/rpcgen -c \
[  305s]        remote/remote_protocol.x ./remote/remote_protocol.c
...
[  577s] /usr/src/debug/libvirt-20150929T082652.68572de/src/remote/remote_protocol.c differs (C source, ASCII text)
[  577s] --- old//usr/src/debug/libvirt-20150929T082652.68572de/src/remote/remote_protocol.c    2015-09-30 11:34:31.000000000 +0000
[  577s] +++ new//usr/src/debug/libvirt-20150929T082652.68572de/src/remote/remote_protocol.c    2015-09-30 14:57:39.000000000 +0000
[  577s] @@ -2084,8 +2084,8 @@
[  577s]  bool_t
[  577s]  xdr_remote_domain_get_vcpus_ret (XDR *xdrs, remote_domain_get_vcpus_ret *objp)
[  577s]  {
[  577s] -        char **objp_cpp1 = (char **) (void *) &objp->cpumaps.cpumaps_val;
[  577s]          char **objp_cpp0 = (char **) (void *) &objp->info.info_val;
[  577s] +        char **objp_cpp1 = (char **) (void *) &objp->cpumaps.cpumaps_val;
[  577s]  
[  577s]           if (!xdr_array (xdrs, objp_cpp0, (u_int *) &objp->info.info_len, REMOTE_VCPUINFO_MAX,
[  577s]                  sizeof (remote_vcpu_info), (xdrproc_t) xdr_remote_vcpu_info))
...

The input is like:

bool_t
xdr_remote_domain_get_vcpus_ret (XDR *xdrs, remote_domain_get_vcpus_ret *objp)
{
        register int32_t *buf;

         if (!xdr_array (xdrs, (char **)&objp->info.info_val, (u_int *) &objp->info.info_len, REMOTE_VCPUINFO_MAX,
                sizeof (remote_vcpu_info), (xdrproc_t) xdr_remote_vcpu_info))
                 return FALSE;
         if (!xdr_bytes (xdrs, (char **)&objp->cpumaps.cpumaps_val, (u_int *) &objp->cpumaps.cpumaps_len, REMOTE_CPUMAPS_MAX))
                 return FALSE;
        return TRUE;
}

Looks like the perl script transforms the pointers, but it does not sort them
to enforce an order. I think its the map() which does it, but dont know enough
perl to be sure.  How can this be fixed?

Olaf




More information about the libvir-list mailing list