libvirt always adds -Werror-frame-larger-than=4096 to the flags when it builds. When building on Fedora 17, two functions with multiple 1024 buffers declared inside if {} blocks would generate frame size errors; apparently the version of gcc on Fedora 16 will merge these multiple buffers into a single buffer even when optimization is off, but Fedora 17 won't. The fix is to declare a single 1024 buffer at the top of the two offending functions, and reuse the single buffer throughout the functions. --- src/libxl/libxl_driver.c | 5 +---- src/qemu/qemu_driver.c | 10 ++-------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index eccd198..fb18948 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -833,6 +833,7 @@ libxlStartup(int privileged) { char *log_file = NULL; virCommandPtr cmd; int status, ret = 0; + char ebuf[1024]; /* Disable libxl driver if non-root */ if (!privileged) { @@ -893,25 +894,21 @@ libxlStartup(int privileged) { goto out_of_memory; if (virFileMakePath(libxl_driver->logDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create log dir '%s': %s"), libxl_driver->logDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; } if (virFileMakePath(libxl_driver->stateDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create state dir '%s': %s"), libxl_driver->stateDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; } if (virFileMakePath(libxl_driver->libDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create lib dir '%s': %s"), libxl_driver->libDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; } if (virFileMakePath(libxl_driver->saveDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create save dir '%s': %s"), libxl_driver->saveDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e574126..f4aea61 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -455,6 +455,7 @@ qemudStartup(int privileged) { char *driverConf = NULL; int rc; virConnectPtr conn = NULL; + char ebuf[1024]; if (VIR_ALLOC(qemu_driver) < 0) return -1; @@ -548,37 +549,31 @@ qemudStartup(int privileged) { } if (virFileMakePath(qemu_driver->stateDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create state dir '%s': %s"), qemu_driver->stateDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; } if (virFileMakePath(qemu_driver->libDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create lib dir '%s': %s"), qemu_driver->libDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; } if (virFileMakePath(qemu_driver->cacheDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create cache dir '%s': %s"), qemu_driver->cacheDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; } if (virFileMakePath(qemu_driver->saveDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create save dir '%s': %s"), qemu_driver->saveDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; } if (virFileMakePath(qemu_driver->snapshotDir) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create save dir '%s': %s"), qemu_driver->snapshotDir, virStrerror(errno, ebuf, sizeof ebuf)); goto error; } if (virFileMakePath(qemu_driver->autoDumpPath) < 0) { - char ebuf[1024]; VIR_ERROR(_("Failed to create dump dir '%s': %s"), qemu_driver->autoDumpPath, virStrerror(errno, ebuf, sizeof ebuf)); goto error; @@ -596,9 +591,8 @@ qemudStartup(int privileged) { rc = virCgroupForDriver("qemu", &qemu_driver->cgroup, privileged, 1); if (rc < 0) { - char buf[1024]; VIR_INFO("Unable to create cgroup for driver: %s", - virStrerror(-rc, buf, sizeof(buf))); + virStrerror(-rc, ebuf, sizeof(ebuf))); } if (qemudLoadDriverConfig(qemu_driver, driverConf) < 0) { -- 1.7.7.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list