|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] libxl: ocaml: guard x86-specific functions behind an ifdef
On Tue, Jan 14, 2014 at 02:43:49PM +0000, Ian Campbell wrote:
> On Sun, 2014-01-12 at 19:17 +0000, Dave Scott wrote:
> > Hi Anil,
> >
> > Thanks for getting oxenstored on ARM working!
> >
> > I'm happy with a simple 'Failure not implemented' exception for the
> > moment. I think that once we're using the libxl bindings everywhere we
> > can probably remove these libxc bindings anyway.
> >
> > Acked-by: David Scott <dave.scott@xxxxxxxxxxxxx>
>
> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
>
> Release hat: This is pretty tightly targeted, and the worst that could
> happen is a build failure, which is generally pretty easy to detect
> before a release, although perhaps less so in the case of ocaml which
> isn't enabled by everyone.
>
> Although I have two misgivings in that regard:
>
> > > diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c
> > > b/tools/ocaml/libs/xc/xenctrl_stubs.c
> > > index f5cf0ed..ff29b47 100644
> > > --- a/tools/ocaml/libs/xc/xenctrl_stubs.c
> > > +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
> > > @@ -714,6 +714,7 @@ CAMLprim value stub_xc_domain_cpuid_set(value
> > > xch, value domid, {
> > > CAMLparam4(xch, domid, input, config);
> > > CAMLlocal2(array, tmp);
>
> Aren't these variables now unused? Does the compiler not complain about
> this (with -Werror => build failure)?
>
> Perhaps CAMLlocal2 both defines and references the variables keeping
> this issue at bay?
That's right. CAMLlocal2 creates a stack variable and registers it with
the garbage collector as a root (to ensure that it's not collected during
the lifetime of the function). This keeps it live and always used from
the perspective of the C compiler.
I confirmed this with a 'make V=1' with '-Wall -Werror' to make sure, and
it compiles fine on gcc-4.8.1. There's an unrelated signed/unsigned error
if -Wextra is included that I'll look at separately and is unrelated to
this patch.
> > > +#if defined(__i386__) || defined(__x86_64__)
> > > int r;
> > > unsigned int c_input[2];
> > > char *c_config[4], *out_config[4];
> > > @@ -742,17 +743,24 @@ CAMLprim value stub_xc_domain_cpuid_set(value
> > > xch, value domid,
> > > c_input, (const char **)c_config, out_config);
> > > if (r < 0)
> > > failwith_xc(_H(xch));
> > > +#else
> > > + caml_failwith("xc_domain_cpuid_set: not implemented");
> > > #endif
> > > CAMLreturn(array);
>
> In the !__i386__ && !__x86_64__ case this code is unreachable, right
> because caml_failwith is marked Noreturn?
>
> Is there any chance that some compiler version might pick up on this and
> complain about the dead code? Or perhaps complain about the
> uninitialised use of array?
>
> I suppose putting the CAMLreturn inside the x86 case runs the opposite
> risk of a compiler which doesn't pay proper attention to Noreturn and
> therefore things we are reaching the end of a non-void function? Would
> CAMLreturn(unit) be appropriate in that case?
Yeah, I'm not aware of any compiler that doesn't respect the noreturn
attribute and also emits unused variable warnings. I didn't modify the
CAMLreturn in favour of minimising the x86/ARM differences, but you could
modify the #endif to be an #else/#endif to only return on x86. I'd prefer
to keep these bindings as straight-line as possible for the 4.4 release
though, and to refactor oxenstored to not depend on them at all in the
future (it only uses a small part of libxc and these cpuid functions
aren't used at all).
(snip)
> > >
> > > +#else
> > > + caml_failwith("xc_domain_cpuid_check: not implemented");
> > > #endif
> > > CAMLreturn(ret);
>
> Unreached?
See above.
cheers,
Anil
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |