qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular


From: Daniel P. Berrange
Subject: Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file
Date: Tue, 10 Jan 2017 18:36:30 +0000
User-agent: Mutt/1.7.1 (2016-10-04)

On Tue, Jan 10, 2017 at 06:45:23PM +0100, Paolo Bonzini wrote:
> 
> 
> On 10/01/2017 17:51, Daniel P. Berrange wrote:
> > It doesn't work with builddir != srcdir builds, because -I. is resolved
> > to the srcdir, but the trace.h is in builddir.
> 
> This is a bug then.  The toplevel builddir (or for that matter srcdir)
> is not meant to be in the search path: only the toplevel include/, the
> subdirectory builddir, and the subdirectory srcdir.

So what's happening is this...

During build of, for example, hw/scsi/esp-pci.o we have this
explicit include search path passed to GCC:

-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu-build/linux-headers
-I.
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu/include
-I/home/berrange/src/virt/qemu/hw/scsi
-Ihw/scsi

Here -I. refers to the $BUILDDIR, since although the source file is in
hw/scsi/, the compiler is invoked from $BUILDDIR as its working directory. 

The compiler also has an implicit search dir which is the directory where
the source file being compiled lives, and that is searched first AFAICT.

So when doing non-vpath build:

   srcdir=/home/berrange/src/virt/qemu
 builddir=/home/berrange/src/virt/qemu

we have this effective search order:

-I/home/berrange/src/virt/qemu/hw/scsi
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu/include
-I/home/berrange/src/virt/qemu/hw/scsi
-I/home/berrange/src/virt/qemu/hw/scsi


Thus, #include "trace.h" picks up $builddir/hw/scsi/trace.h correctly.

5782  execve("/usr/bin/as", ["as", "-I", "/home/berrange/src/virt/qemu/tcg", 
"-I", "/home/berrange/src/virt/qemu/tcg/i386", "-I", 
"/home/berrange/src/virt/qemu/linux-headers", "-I", 
"/home/berrange/src/virt/qemu/linux-headers", "-I", ".", "-I", 
"/home/berrange/src/virt/qemu", "-I", "/home/berrange/src/virt/qemu/include", 
"-I", "hw/scsi", "-I", "hw/scsi", "-I", "/usr/include/pixman-1", "-I", 
"/usr/include/glib-2.0", "-I", "/usr/lib64/glib-2.0/include", "-I", 
"/usr/include/p11-kit-1", "-I", "/usr/include/libpng16", "-I", 
"/usr/include/spice-server", "-I", "/usr/include/cacard", "-I", 
"/usr/include/nss3", "-I", "/usr/include/nspr4", "-I", "/usr/include/glib-2.0", 
"-I", "/usr/lib64/glib-2.0/include", "-I", "/usr/include/pixman-1", "-I", 
"/usr/include/spice-1", "-I", "/usr/include/cacard", "-I", "/usr/include/nss3", 
"-I", "/usr/include/nspr4", "-I", "/usr/include/glib-2.0", "-I", 
"/usr/lib64/glib-2.0/include", "-I", "/usr/include/libusb-1.0", "-I", 
"/home/berrange/src/virt/qemu/tests", "--64", "-o", "hw/scsi/esp-pci.o", 
"/tmp/cccr6Zf8.s"], [/* 63 vars */] <unfinished ...>

...

5781  open("hw/scsi/trace.h", O_RDONLY|O_NOCTTY) = 14


but when doing a vpath build

   srcdir=/home/berrange/src/virt/qemu
 builddir=/home/berrange/src/virt/qemu-build

we have this effective search order:


-I/home/berrange/src/virt/qemu/hw/scsi
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu-build/linux-headers
-I/home/berrange/src/virt/qemu-build
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu/include
-I/home/berrange/src/virt/qemu/hw/scsi
-I/home/berrange/src/virt/qemu-build/hw/scsi

Thus #include "trace.h" picks up $builddir/trace.h incorrectly.

3138  execve("/usr/libexec/gcc/x86_64-redhat-linux/6.2.1/cc1", 
["/usr/libexec/gcc/x86_64-redhat-linux/6.2.1/cc1", "-quiet", "-I", 
"/home/berrange/src/virt/qemu/tcg", "-I", 
"/home/berrange/src/virt/qemu/tcg/i386", "-I", 
"/home/berrange/src/virt/qemu/linux-headers", "-I", 
"/home/berrange/src/virt/qemu-build/linux-headers", "-I", ".", "-I", 
"/home/berrange/src/virt/qemu", "-I", "/home/berrange/src/virt/qemu/include", 
"-I", "/home/berrange/src/virt/qemu/hw/scsi", "-I", "hw/scsi", "-I", 
"/usr/include/pixman-1", "-I", "/usr/include/glib-2.0", "-I", 
"/usr/lib64/glib-2.0/include", "-I", "/usr/include/p11-kit-1", "-I", 
"/usr/include/libpng16", "-I", "/usr/include/spice-server", "-I", 
"/usr/include/cacard", "-I", "/usr/include/nss3", "-I", "/usr/include/nspr4", 
"-I", "/usr/include/glib-2.0", "-I", "/usr/lib64/glib-2.0/include", "-I", 
"/usr/include/pixman-1", "-I", "/usr/include/spice-1", "-I", 
"/usr/include/cacard", "-I", "/usr/include/nss3", "-I", "/usr/include/nspr4", 
"-I", "/usr/include/glib-2.0", "-I", "/usr/lib64/glib-2.0/include", "-I", 
"/usr/include/libusb-1.0", "-I", "/home/berrange/src/virt/qemu/tests", "-MMD", 
"hw/scsi/esp-pci.d", "-MF", "hw/scsi/esp-pci.d", "-MP", "-MT", 
"hw/scsi/esp-pci.o", "-D_REENTRANT", "-D", "HAS_LIBSSH2_SFTP_FSYNC", "-D", 
"_GNU_SOURCE", "-D", "PIE", "-D", "_GNU_SOURCE", "-D", "_FILE_OFFSET_BITS=64", 
"-D", "_LARGEFILE_SOURCE", "-U", "_FORTIFY_SOURCE", "-D", "_FORTIFY_SOURCE=2", 
"/home/berrange/src/virt/qemu/hw/scsi/esp-pci.c", "-quiet", "-dumpbase", 
"esp-pci.c", "-m64", "-mcx16", "-mtune=generic", "-march=x86-64", 
"-auxbase-strip", "hw/scsi/esp-pci.o", "-g", "-O2", "-Werror", 
"-Wstrict-prototypes", "-Wredundant-decls", "-Wall", "-Wundef", 
"-Wwrite-strings", "-Wmissing-prototypes", "-Wendif-labels", 
"-Wno-shift-negative-value", "-Wmissing-include-dirs", "-Wempty-body", 
"-Wnested-externs", "-Wformat-security", "-Wformat-y2k", "-Winit-self", 
"-Wignored-qualifiers", "-Wold-style-declaration", "-Wold-style-definition", 
"-Wtype-limits", "-fPIE", "-fno-strict-aliasing", "-fno-common", "-fwrapv", 
"-fstack-protector-strong", "-o", "/tmp/ccH7yXaj.s"], [/* 63 vars */] 
<unfinished ...>

...

3138  open("/home/berrange/src/virt/qemu/hw/scsi/trace.h", O_RDONLY|O_NOCTTY) = 
-1 ENOENT (No such file or directory)
3138  open("/home/berrange/src/virt/qemu/tcg/trace.h", O_RDONLY|O_NOCTTY) = -1 
ENOENT (No such file or directory)
3138  open("/home/berrange/src/virt/qemu/tcg/i386/trace.h", O_RDONLY|O_NOCTTY) 
= -1 ENOENT (No such file or directory)
3138  open("/home/berrange/src/virt/qemu/linux-headers/trace.h", 
O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
3138  open("/home/berrange/src/virt/qemu-build/linux-headers/trace.h", 
O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
3138  open("./trace.h", O_RDONLY|O_NOCTTY) = 14
3138  open("./trace.h", O_RDONLY)       = 14


For a consistent search order, we would need to have this be the
explicit args:

-I/home/berrange/src/virt/qemu/hw/scsi
-Ihw/scsi
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu-build/linux-headers
-I.
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu/include

It seems you're saying we should also trim the top level dirs, so
we in fact get:


-I/home/berrange/src/virt/qemu/hw/scsi
-Ihw/scsi
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu-build/linux-headers
-I/home/berrange/src/virt/qemu/include

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://entangle-photo.org       -o-    http://search.cpan.org/~danberr/ :|



reply via email to

[Prev in Thread] Current Thread [Next in Thread]