From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: Errors in compilation // xl_cmdimpl.c:2733:11 ... Date: Fri, 24 Aug 2012 19:42:25 +0100 Message-ID: <5037CB11.9000308@citrix.com> References: <20120824164301.46800@gmx.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060602090904000805090102" Return-path: In-Reply-To: <20120824164301.46800@gmx.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org, p.d@gmx.de, Ian Campbell List-Id: xen-devel@lists.xenproject.org --------------060602090904000805090102 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On 24/08/12 17:43, p.d@gmx.de wrote: > nice time, > > Ian, I'm not sure, but I think after Your patch: > http://xenbits.xen.org/hg/xen-unstable.hg/rev/4ca40e0559c3 > > xen-tools (+qemu+seabios) will not be maked :) > > Here are last lines of "make -j7": > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > gcc -O1 -fno-omit-frame-pointer -m64 -g -fno-strict-aliasing -std=3Dgn= u99 -Wall -Wstrict-prototypes -Wdeclaration-after-statement -Wno-unused-b= ut-set-variable -D__XEN_TOOLS__ -MMD -MF ._libxl_save_msgs_callout.o.d = -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -fno-optimize-sibling-calls -= Werror -Wno-format-zero-length -Wmissing-declarations -Wno-declaration-af= ter-statement -Wformat-nonliteral -I. -fPIC -pthread -I/usr/src/xen_2012_= 08_24_rev_25779/tools/libxl/../../tools/libxc -I/usr/src/xen_2012_08_24_r= ev_25779/tools/libxl/../../tools/include -I/usr/src/xen_2012_08_24_rev_25= 779/tools/libxl/../../tools/libxc -I/usr/src/xen_2012_08_24_rev_25779/too= ls/libxl/../../tools/include -I/usr/src/xen_2012_08_24_rev_25779/tools/li= bxl/../../tools/xenstore -I/usr/src/xen_2012_08_24_rev_25779/tools/libxl/= =2E./../tools/include -I/usr/src/xen_2012_08_24_rev_25779/tools/libxl/../= =2E./tools/blktap2/control -I/usr/src/xen_2012_08_24_rev_25779/tools/libx= l/../../tools/blktap2/include -I/usr/src/xen_2012_08_24_rev_25779/tools/l= ibxl/../../tools/include -include /usr/src/xen_2012_08_24_rev_25779/tools= /libxl/../../tools/config.h -c -o _libxl_save_msgs_callout.o _libxl_save= _msgs_callout.c=20 > xl_cmdimpl.c: In function =E2=80=98main_list=E2=80=99: > xl_cmdimpl.c:2733:11: error: =E2=80=98hand=E2=80=99 may be used uniniti= alized in this function [-Werror=3Duninitialized] > xl_cmdimpl.c:2689:14: note: =E2=80=98hand=E2=80=99 was declared here > Please try the attached patch. I have fixed the error, and also future-proofed the logic. @Ian: the patch can be slimed down if default_output_format can be guaranteed not to change across the duration of this function call, but my cursory glance at this otherwise-unfamilar codebase cant say for certa= in. --=20 Andrew Cooper - Dom0 Kernel Engineer, Citrix XenServer T: +44 (0)1223 225 900, http://www.citrix.com --------------060602090904000805090102 Content-Type: text/x-patch; name="fix-cmdimpl.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="fix-cmdimpl.patch" # HG changeset patch # Parent 4ca40e0559c33205fb5163b10249a0fd5fda39b9 tools/xl: Fix uninitialized variable error. c/s 25779:4ca40e0559c3 introduced a compilation error for any build system using -Werror=uninitialized, such as the default CentOS 5.7 version of gcc. And with good reason, because if the global libxl default_output_format is neither OUTPUT_FORMAT_SXP nor OUTPUT_FORMAT_JSON, the variable hand will be used before being initialised. The attached patch fixes the warning, and futher fixes the logic to work correctly when a new OUTPUT_FORMAT is added to xl. Signed-off-by: Andrew Cooper diff -r 4ca40e0559c3 tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -2686,12 +2686,13 @@ static void list_domains_details(const l uint8_t *data; int i, len, rc; - yajl_gen hand; + yajl_gen hand = NULL; yajl_gen_status s; const char *buf; libxl_yajl_length yajl_len = 0; - - if (default_output_format == OUTPUT_FORMAT_JSON) { + const enum output_format format = default_output_format; + + if (format == OUTPUT_FORMAT_JSON) { hand = libxl_yajl_gen_alloc(NULL); if (!hand) { fprintf(stderr, "unable to allocate JSON generator\n"); @@ -2714,10 +2715,10 @@ static void list_domains_details(const l CHK_ERRNO(asprintf(&config_source, "", info[i].domid)); libxl_domain_config_init(&d_config); parse_config_data(config_source, (char *)data, len, &d_config, NULL); - if (default_output_format == OUTPUT_FORMAT_SXP) + if (format == OUTPUT_FORMAT_JSON) + s = printf_info_one_json(hand, info[i].domid, &d_config); + else printf_info_sexp(domid, &d_config); - else - s = printf_info_one_json(hand, info[i].domid, &d_config); libxl_domain_config_dispose(&d_config); free(data); free(config_source); @@ -2725,7 +2726,7 @@ static void list_domains_details(const l goto out; } - if (default_output_format == OUTPUT_FORMAT_JSON) { + if (format == OUTPUT_FORMAT_JSON) { s = yajl_gen_array_close(hand); if (s != yajl_gen_status_ok) goto out; @@ -2738,7 +2739,7 @@ static void list_domains_details(const l } out: - if (default_output_format == OUTPUT_FORMAT_JSON) { + if (format == OUTPUT_FORMAT_JSON) { yajl_gen_free(hand); if (s != yajl_gen_status_ok) fprintf(stderr, --------------060602090904000805090102 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --------------060602090904000805090102--