This is another unexpected result of eac236ea7bfc1902126be70459e320591078df5c,
which happens often when bisecting between v1.3.0 and current git master.
Before the said commit, trace.c and trace.h files were generated in the
build dir.  Now trace.c has moved to include/trace.h and it acts just
as a redirector to generated-tracers.h.  But due to -I., current dir
is searched first.

So, when bisection crosses this commit, we have old trace.h floating
around, and it gets included by subsequent compiles, instead of the
newly introduced include/trace.h.

The result is a mess - failing compiles basically, and it isn't obvious
how to fix.

To fix, one have to remove trace.h *and* all .o (and .d) files which
included (mentions) it, and re-run make to rebuild them with proper
trace.h.

I'm not sure how to fix this best.  One approach is something like this:

--- a/trace/Makefile.objs
+++ b/trace/Makefile.objs
@@ -9,6 +9,8 @@ $(obj)/generated-tracers.h-timestamp: $(SRC_PATH)/trace-events 
$(BUILD_DIR)/conf
                --format=h \
                --backend=$(TRACE_BACKEND) \
                < $< > $@,"  GEN   $(patsubst %-timestamp,%,$@)")
+# remove old (from qemu 1.3 and before) autogenerated trace files
+       @rm -f ../trace.[chd] ../trace.h ../trace.[ch]-timestamp
        @cmp -s $@ $(patsubst %-timestamp,%,$@) || cp $@ $(patsubst 
%-timestamp,%,$@)

 ######################################################################

Ie, just remove the possible remnants when (re)generating generated-tracers.h.
This is disgusting obviously.

There's another approach: rename trace.h into, say, qemu-trace.h, so
old, no-longer-used-but-staying-on-the-way, trace.h will not be included
anymore.

And there's 3rd: just ignore this issue, since we can't improve git
bisectability between 1.3 and 1.4 already, and it will be bisectable
again past 1.4 (without new issues of the same sort).

Oh well.

/mjt

Reply via email to