* [Qemu-devel] Thoughts around dtrace linking... @ 2012-03-21 10:45 Lee Essen 2012-03-21 13:01 ` Andreas Färber 0 siblings, 1 reply; 9+ messages in thread From: Lee Essen @ 2012-03-21 10:45 UTC (permalink / raw) To: qemu-devel, Stefan Hajnoczi [-- Attachment #1: Type: text/plain, Size: 1019 bytes --] Hi, I've been trying to find a sensible way to solve the Solaris/Illumos dtrace requirement to pass all the objs to the dtrace command so that the resultant object file contains all the symbols needed to properly link the relevant binary. The easiest way to do this is just prior to linking the binary, so something like this (in rules.mak): LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@") DTRACE = $(call quiet-command,dtrace $(CONFIG_DTRACE_FLAGS) -o $(1)-dtrace.o -G -s $(2) $(3), " GEN $(TARGET_DIR)$(1)-dtrace.o") %$(EXESUF): %.o $(call DTRACE,$*,trace-dtrace.dtrace,$^) $(call LINK,$^ $*-dtrace.o) Obviously with the relevant tests around it to check the trace backend, and also an adjustment in Makefile.target to cause the right thing to happen for each target. Or, is there a better way? How compatible is this with FreeBSD - it doesn't sound like it's needed at all? Regards, Lee. [-- Attachment #2: Type: text/html, Size: 1426 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] Thoughts around dtrace linking... 2012-03-21 10:45 [Qemu-devel] Thoughts around dtrace linking Lee Essen @ 2012-03-21 13:01 ` Andreas Färber 2012-03-21 13:37 ` Lee Essen 2012-03-22 16:28 ` Stefan Hajnoczi 0 siblings, 2 replies; 9+ messages in thread From: Andreas Färber @ 2012-03-21 13:01 UTC (permalink / raw) To: Lee Essen; +Cc: qemu-devel, Stefan Hajnoczi Hi, Am 21.03.2012 11:45, schrieb Lee Essen: > I've been trying to find a sensible way to solve the Solaris/Illumos > dtrace requirement to pass all the objs to the dtrace command so that > the resultant object file contains all the symbols needed to properly > link the relevant binary. > > The easiest way to do this is just prior to linking the binary, so > something like this (in rules.mak): > > LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) > $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@") > > DTRACE = $(call quiet-command,dtrace $(CONFIG_DTRACE_FLAGS) -o > $(1)-dtrace.o -G -s $(2) $(3), " GEN $(TARGET_DIR)$(1)-dtrace.o") > > %$(EXESUF): %.o > $(call DTRACE,$*,trace-dtrace.dtrace,$^) > $(call LINK,$^ $*-dtrace.o) > > Obviously with the relevant tests around it to check the trace backend, > and also an adjustment in Makefile.target to cause the right thing to > happen for each target. > Or, is there a better way? The two issues I see (as info for Stefan et al.) are a) compiling DTrace probes into .o files requires linking those objects with that additional .o file to avoid linker errors (even for tools where using DTrace probes does not seem to make much sense), b) the additional .o file depends on its input .o files, so must be unique per executable. This seems to be guaranteed when doing it at rules.mak level. Haven't checked all the variables being passed back and forth here yet though; I really am not comfortable reviewing code that's HTML-formatted in my mailer. ;) > How compatible is this with FreeBSD - it doesn't sound like it's needed > at all? Don't know about FreeBSD but on Darwin that step is indeed not needed or supported, so needs to be guarded. Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] Thoughts around dtrace linking... 2012-03-21 13:01 ` Andreas Färber @ 2012-03-21 13:37 ` Lee Essen 2012-03-22 16:28 ` Stefan Hajnoczi 1 sibling, 0 replies; 9+ messages in thread From: Lee Essen @ 2012-03-21 13:37 UTC (permalink / raw) To: Andreas Färber; +Cc: qemu-devel, Stefan Hajnoczi On 21/03/2012 13:01, Andreas Färber wrote: > Hi, > > Am 21.03.2012 11:45, schrieb Lee Essen: >> I've been trying to find a sensible way to solve the Solaris/Illumos >> dtrace requirement to pass all the objs to the dtrace command so that >> the resultant object file contains all the symbols needed to properly >> link the relevant binary. > > The two issues I see (as info for Stefan et al.) are > a) compiling DTrace probes into .o files requires linking those objects > with that additional .o file to avoid linker errors (even for tools > where using DTrace probes does not seem to make much sense), > b) the additional .o file depends on its input .o files, so must be > unique per executable. > This seems to be guaranteed when doing it at rules.mak level. Haven't > checked all the variables being passed back and forth here yet though; I > really am not comfortable reviewing code that's HTML-formatted in my > mailer. ;) Sorry ... I've been jumping between machines and I'd thought I'd switched them all to plaintext, but obviously not. Hopefully this is done now. New version below ... > >> How compatible is this with FreeBSD - it doesn't sound like it's needed >> at all? > > Don't know about FreeBSD but on Darwin that step is indeed not needed or > supported, so needs to be guarded. > > Andreas > Ok, so perhaps the easiest way to guard would be a new variable that matches both a backend of dtrace and OS of Solaris established via configure, for the moment I've just put a backend check, but clearly this wouldn't be enough. LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@") DTRACE = $(call quiet-command,dtrace $(CONFIG_DTRACE_FLAGS) -o $(1)-dtrace.o -G -s $(2) $(3), " GEN $(TARGET_DIR)$(1)-dtrace.o") %$(EXESUF): %.o ifeq ($(TRACE_BACKEND),dtrace) $(call DTRACE,$*,trace-dtrace.dtrace,$^) $(call LINK,$^ $*-dtrace.o) else $(call LINK,$^) endif If you're happy that this is a sensible approach I'll put together a proper patch. Regards, Lee. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] Thoughts around dtrace linking... 2012-03-21 13:01 ` Andreas Färber 2012-03-21 13:37 ` Lee Essen @ 2012-03-22 16:28 ` Stefan Hajnoczi 2012-03-22 17:00 ` Lee Essen 1 sibling, 1 reply; 9+ messages in thread From: Stefan Hajnoczi @ 2012-03-22 16:28 UTC (permalink / raw) To: Andreas Färber; +Cc: Lee Essen, qemu-devel, Stefan Hajnoczi On Wed, Mar 21, 2012 at 1:01 PM, Andreas Färber <afaerber@suse.de> wrote: > Hi, > > Am 21.03.2012 11:45, schrieb Lee Essen: >> I've been trying to find a sensible way to solve the Solaris/Illumos >> dtrace requirement to pass all the objs to the dtrace command so that >> the resultant object file contains all the symbols needed to properly >> link the relevant binary. >> >> The easiest way to do this is just prior to linking the binary, so >> something like this (in rules.mak): >> >> LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) >> $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@") >> >> DTRACE = $(call quiet-command,dtrace $(CONFIG_DTRACE_FLAGS) -o >> $(1)-dtrace.o -G -s $(2) $(3), " GEN $(TARGET_DIR)$(1)-dtrace.o") >> >> %$(EXESUF): %.o >> $(call DTRACE,$*,trace-dtrace.dtrace,$^) >> $(call LINK,$^ $*-dtrace.o) What I find slightly surprising is that you're putting the -dtrace.o generation step as a command in the executable's target. I would expect the -dtrace.o to be a target itself, which also allows make to use it's timestamping on dependencies to ensure we only rebuild when necessary. i.e. specifying dependencies is the make way of doing things, and I think we should try where possible. >> >> Obviously with the relevant tests around it to check the trace backend, >> and also an adjustment in Makefile.target to cause the right thing to >> happen for each target. >> Or, is there a better way? > > The two issues I see (as info for Stefan et al.) are > a) compiling DTrace probes into .o files requires linking those objects > with that additional .o file to avoid linker errors (even for tools > where using DTrace probes does not seem to make much sense), qemu-tool binaries are built with tracing enabled. But this is a good point, we need to check that all binaries buildable from the QEMU source tree continue to work with this change. Stefan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] Thoughts around dtrace linking... 2012-03-22 16:28 ` Stefan Hajnoczi @ 2012-03-22 17:00 ` Lee Essen 2012-03-23 8:08 ` Stefan Hajnoczi 0 siblings, 1 reply; 9+ messages in thread From: Lee Essen @ 2012-03-22 17:00 UTC (permalink / raw) To: Stefan Hajnoczi; +Cc: Andreas Färber, Stefan Hajnoczi, qemu-devel On 22/03/2012 16:28, Stefan Hajnoczi wrote: > On Wed, Mar 21, 2012 at 1:01 PM, Andreas Färber<afaerber@suse.de> wrote: >> Hi, >> >> Am 21.03.2012 11:45, schrieb Lee Essen: >>> I've been trying to find a sensible way to solve the Solaris/Illumos >>> dtrace requirement to pass all the objs to the dtrace command so that >>> the resultant object file contains all the symbols needed to properly >>> link the relevant binary. >>> >>> The easiest way to do this is just prior to linking the binary, so >>> something like this (in rules.mak): >>> >>> LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) >>> $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@") >>> >>> DTRACE = $(call quiet-command,dtrace $(CONFIG_DTRACE_FLAGS) -o >>> $(1)-dtrace.o -G -s $(2) $(3), " GEN $(TARGET_DIR)$(1)-dtrace.o") >>> >>> %$(EXESUF): %.o >>> $(call DTRACE,$*,trace-dtrace.dtrace,$^) >>> $(call LINK,$^ $*-dtrace.o) > > What I find slightly surprising is that you're putting the -dtrace.o > generation step as a command in the executable's target. > > I would expect the -dtrace.o to be a target itself, which also allows > make to use it's timestamping on dependencies to ensure we only > rebuild when necessary. i.e. specifying dependencies is the make way > of doing things, and I think we should try where possible. Yes, that's the way I had it the first time around, but it means quite a bit more complexity in the makefiles and having to touch each executable section, I had thought the rules.mak approach was cleaner. For example: qemu-ga-all-objs=qemu-ga.o $(qga-obj-y) $(tools-obj-y) $(qapi-obj-y) $(qobject-obj-y) $(version-obj-y) $(QGALIB_OBJ) #ifdef USE_SOLARIS_DTRACE_APPROACH qemu-ga.dtrace.o: $(qemu-ga-all-objs) [assuming rule in rules.mak] qemu-ga-all-objs+=qemu-ga.dtrace.o #endif qemu-ga$(EXESUF): qemu-ga-all-objs There's also a complication with the creation of the .dtrace.o in Makefile.target because of it being one level down in the directory structure and needing access to trace-dtrace.dtrace. None of it is unsurmountable, but it gets a bit untidy. TBH, I can do this either way, just let me know which approach you prefer and I'll put a patch together. >>> >>> Obviously with the relevant tests around it to check the trace backend, >>> and also an adjustment in Makefile.target to cause the right thing to >>> happen for each target. >>> Or, is there a better way? >> >> The two issues I see (as info for Stefan et al.) are >> a) compiling DTrace probes into .o files requires linking those objects >> with that additional .o file to avoid linker errors (even for tools >> where using DTrace probes does not seem to make much sense), > > qemu-tool binaries are built with tracing enabled. But this is a good > point, we need to check that all binaries buildable from the QEMU > source tree continue to work with this change. > Actually this is a good point ... if you are thinking of removing tracing from some of the binaries then the rules.mak approach doesn't really make sense. Let me know how you want to proceed. Cheers, Lee. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] Thoughts around dtrace linking... 2012-03-22 17:00 ` Lee Essen @ 2012-03-23 8:08 ` Stefan Hajnoczi 2012-03-23 14:11 ` Lee Essen 0 siblings, 1 reply; 9+ messages in thread From: Stefan Hajnoczi @ 2012-03-23 8:08 UTC (permalink / raw) To: Lee Essen; +Cc: Stefan Hajnoczi, Andreas Färber, qemu-devel On Thu, Mar 22, 2012 at 05:00:53PM +0000, Lee Essen wrote: > On 22/03/2012 16:28, Stefan Hajnoczi wrote: > >On Wed, Mar 21, 2012 at 1:01 PM, Andreas Färber<afaerber@suse.de> wrote: > >>Hi, > >> > >>Am 21.03.2012 11:45, schrieb Lee Essen: > >>>I've been trying to find a sensible way to solve the Solaris/Illumos > >>>dtrace requirement to pass all the objs to the dtrace command so that > >>>the resultant object file contains all the symbols needed to properly > >>>link the relevant binary. > >>> > >>>The easiest way to do this is just prior to linking the binary, so > >>>something like this (in rules.mak): > >>> > >>> LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) > >>> $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@") > >>> > >>> DTRACE = $(call quiet-command,dtrace $(CONFIG_DTRACE_FLAGS) -o > >>> $(1)-dtrace.o -G -s $(2) $(3), " GEN $(TARGET_DIR)$(1)-dtrace.o") > >>> > >>> %$(EXESUF): %.o > >>> $(call DTRACE,$*,trace-dtrace.dtrace,$^) > >>> $(call LINK,$^ $*-dtrace.o) > > > >What I find slightly surprising is that you're putting the -dtrace.o > >generation step as a command in the executable's target. > > > >I would expect the -dtrace.o to be a target itself, which also allows > >make to use it's timestamping on dependencies to ensure we only > >rebuild when necessary. i.e. specifying dependencies is the make way > >of doing things, and I think we should try where possible. > > Yes, that's the way I had it the first time around, but it means > quite a bit more complexity in the makefiles and having to touch > each executable section, I had thought the rules.mak approach was > cleaner. > > For example: > > qemu-ga-all-objs=qemu-ga.o $(qga-obj-y) $(tools-obj-y) $(qapi-obj-y) > $(qobject-obj-y) $(version-obj-y) $(QGALIB_OBJ) > #ifdef USE_SOLARIS_DTRACE_APPROACH > qemu-ga.dtrace.o: $(qemu-ga-all-objs) [assuming rule in rules.mak] > > qemu-ga-all-objs+=qemu-ga.dtrace.o > #endif > qemu-ga$(EXESUF): qemu-ga-all-objs > > There's also a complication with the creation of the .dtrace.o in > Makefile.target because of it being one level down in the directory > structure and needing access to trace-dtrace.dtrace. > > None of it is unsurmountable, but it gets a bit untidy. > > TBH, I can do this either way, just let me know which approach you > prefer and I'll put a patch together. > > >>> > >>>Obviously with the relevant tests around it to check the trace backend, > >>>and also an adjustment in Makefile.target to cause the right thing to > >>>happen for each target. > >>>Or, is there a better way? > >> > >>The two issues I see (as info for Stefan et al.) are > >>a) compiling DTrace probes into .o files requires linking those objects > >>with that additional .o file to avoid linker errors (even for tools > >>where using DTrace probes does not seem to make much sense), > > > >qemu-tool binaries are built with tracing enabled. But this is a good > >point, we need to check that all binaries buildable from the QEMU > >source tree continue to work with this change. > > > > Actually this is a good point ... if you are thinking of removing > tracing from some of the binaries then the rules.mak approach > doesn't really make sense. > > Let me know how you want to proceed. If you're able to try out the dependency-based approach that would be a good starting point. You may hit a point where it turns out to be too ugly or complicated - in that case, please post your progress and maybe someone can help find a way to structure it. I'm not a make guru but I can try to give feedback on your patches. Stefan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] Thoughts around dtrace linking... 2012-03-23 8:08 ` Stefan Hajnoczi @ 2012-03-23 14:11 ` Lee Essen 2012-03-26 10:14 ` Stefan Hajnoczi 0 siblings, 1 reply; 9+ messages in thread From: Lee Essen @ 2012-03-23 14:11 UTC (permalink / raw) To: Stefan Hajnoczi; +Cc: Stefan Hajnoczi, Andreas Färber, qemu-devel On 23 Mar 2012, at 08:08, Stefan Hajnoczi wrote: > On Thu, Mar 22, 2012 at 05:00:53PM +0000, Lee Essen wrote: >> On 22/03/2012 16:28, Stefan Hajnoczi wrote: >>> On Wed, Mar 21, 2012 at 1:01 PM, Andreas Färber<afaerber@suse.de> wrote: >>>> Hi, >>>> >>>> Am 21.03.2012 11:45, schrieb Lee Essen: >>>>> I've been trying to find a sensible way to solve the Solaris/Illumos >>>>> dtrace requirement to pass all the objs to the dtrace command so that >>>>> the resultant object file contains all the symbols needed to properly >>>>> link the relevant binary. >>>>> > > If you're able to try out the dependency-based approach that would be a > good starting point. You may hit a point where it turns out to be too > ugly or complicated - in that case, please post your progress and maybe > someone can help find a way to structure it. I'm not a make guru but I > can try to give feedback on your patches. > > Stefan > Ok, here's an attempt … it works for me, but I'm not sure how it would work on a different dtrace platform so it will probably need some different guarding … but it shows what it will look like. Lee. diff --git a/Makefile b/Makefile index 1bc3cb0..b300364 100644 --- a/Makefile +++ b/Makefile @@ -157,9 +157,28 @@ tools-obj-y = $(oslib-obj-y) $(trace-obj-y) qemu-tool.o qemu-timer.o \ qemu-timer-common.o main-loop.o notify.o iohandler.o cutils.o async.o tools-obj-$(CONFIG_POSIX) += compatfd.o -qemu-img$(EXESUF): qemu-img.o $(tools-obj-y) $(block-obj-y) -qemu-nbd$(EXESUF): qemu-nbd.o $(tools-obj-y) $(block-obj-y) -qemu-io$(EXESUF): qemu-io.o cmd.o $(tools-obj-y) $(block-obj-y) +qemu-img-trace-objs=qemu-img.o $(tools-obj-y) $(block-obj-y) +qemu-nbd-trace-objs=qemu-nbd.o $(tools-obj-y) $(block-obj-y) +qemu-io-trace-objs=qemu-io.o cmd.o $(tools-obj-y) $(block-obj-y) +qemu-img-all-objs=$(qemu-img-trace-objs) +qemu-nbd-all-objs=$(qemu-nbd-trace-objs) +qemu-io-all-objs=$(qemu-io-trace-objs) +ifdef CONFIG_TRACE_DTRACE +qemu-img-all-objs+=qemu-img.dtrace.o +qemu-nbd-all-objs+=qemu-nbd.dtrace.o +qemu-io-trace-objs+=qemu-img.dtrace.o +endif + +qemu-img.dtrace.o: trace-dtrace.dtrace $(qemu-img-trace-objs) + $(call DTRACE,$@,trace-dtrace.dtrace,$(qemu-img-trace-objs)) +qemu-nbd.dtrace.o: trace-dtrace.dtrace $(qemu-nbd-trace-objs) + $(call DTRACE,$@,trace-dtrace.dtrace,$(qemu-nbd-trace-objs)) +qemu-io.dtrace.o: trace-dtrace.dtrace $(qemu-io-trace-objs) + $(call DTRACE,$@,trace-dtrace.dtrace,$(qemu-io-trace-objs)) + +qemu-img$(EXESUF): $(qemu-img-all-objs) +qemu-nbd$(EXESUF): $(qemu-nbd-all-objs) +qemu-io$(EXESUF): $(qemu-io-all-objs) qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o qemu-bridge-helper.o: $(GENERATED_HEADERS) @@ -205,7 +224,17 @@ QGALIB_GEN=$(addprefix $(qapi-dir)/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-c $(QGALIB_OBJ): $(QGALIB_GEN) $(GENERATED_HEADERS) $(qga-obj-y) qemu-ga.o: $(QGALIB_GEN) $(GENERATED_HEADERS) -qemu-ga$(EXESUF): qemu-ga.o $(qga-obj-y) $(tools-obj-y) $(qapi-obj-y) $(qobject-obj-y) $(version-obj-y) $(QGALIB_OBJ) +qemu-ga-trace-objs=qemu-ga.o $(qga-obj-y) $(tools-obj-y) $(qapi-obj-y) $(qobject-obj-y) $(version-obj-y) $(QGALIB_OBJ) +qemu-ga-all-objs=$(qemu-ga-trace-objs) +ifdef CONFIG_TRACE_DTRACE +qemu-ga-all-objs+=qemu-ga.dtrace.o +endif + +qemu-ga.dtrace.o: trace-dtrace.dtrace $(qemu-ga-trace-objs) + $(call DTRACE,$@,trace-dtrace.dtrace,$(qemu-ga-trace-objs)) + +qemu-ga$(EXESUF): $(qemu-ga-all-objs) + QEMULIBS=libhw32 libhw64 libuser libdis libdis-user diff --git a/Makefile.target b/Makefile.target index 63cf769..ed0d824 100644 --- a/Makefile.target +++ b/Makefile.target @@ -441,7 +441,17 @@ $(QEMU_PROGW): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) $(QEMU_PROG): $(QEMU_PROGW) $(call quiet-command,$(OBJCOPY) --subsystem console $(QEMU_PROGW) $(QEMU_PROG)," GEN $(TARGET_DIR)$(QEMU_PROG)") else -$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) + +target-trace-objs=$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) +target-all-objs=$(target-trace-objs) +ifdef CONFIG_TRACE_DTRACE +target-all-objs+=$(QEMU_PROG).dtrace.o +endif + +$(QEMU_PROG).dtrace.o: ../trace-dtrace.dtrace $(target-trace-objs) + $(call DTRACE,$@,../trace-dtrace.dtrace,$(target-trace-objs)) + +$(QEMU_PROG): $(target-all-objs) $(call LINK,$^) endif diff --git a/rules.mak b/rules.mak index 04a9198..31ad59c 100644 --- a/rules.mak +++ b/rules.mak @@ -33,6 +33,8 @@ endif LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@") +DTRACE = $(call quiet-command,dtrace $(CONFIG_DTRACE_FLAGS) -o $(1) -G -s $(2) $(3), " GEN $(TARGET_DIR)$(1)") + %$(EXESUF): %.o $(call LINK,$^) ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] Thoughts around dtrace linking... 2012-03-23 14:11 ` Lee Essen @ 2012-03-26 10:14 ` Stefan Hajnoczi 2012-03-26 15:28 ` Lee Essen 0 siblings, 1 reply; 9+ messages in thread From: Stefan Hajnoczi @ 2012-03-26 10:14 UTC (permalink / raw) To: Lee Essen; +Cc: qemu-devel, Stefan Hajnoczi, Andreas Färber On Fri, Mar 23, 2012 at 2:11 PM, Lee Essen <lee.essen@nowonline.co.uk> wrote: > > On 23 Mar 2012, at 08:08, Stefan Hajnoczi wrote: > >> On Thu, Mar 22, 2012 at 05:00:53PM +0000, Lee Essen wrote: >>> On 22/03/2012 16:28, Stefan Hajnoczi wrote: >>>> On Wed, Mar 21, 2012 at 1:01 PM, Andreas Färber<afaerber@suse.de> wrote: >>>>> Hi, >>>>> >>>>> Am 21.03.2012 11:45, schrieb Lee Essen: >>>>>> I've been trying to find a sensible way to solve the Solaris/Illumos >>>>>> dtrace requirement to pass all the objs to the dtrace command so that >>>>>> the resultant object file contains all the symbols needed to properly >>>>>> link the relevant binary. >>>>>> >> >> If you're able to try out the dependency-based approach that would be a >> good starting point. You may hit a point where it turns out to be too >> ugly or complicated - in that case, please post your progress and maybe >> someone can help find a way to structure it. I'm not a make guru but I >> can try to give feedback on your patches. >> >> Stefan >> > > Ok, here's an attempt … it works for me, but I'm not sure how it would work on a different dtrace platform so it will probably need some different guarding … but it shows what it will look like. The code makes sense to me. There's a feeling that there must be a way to remove the duplication in this approach, but my make foo isn't good enough to see how. As you mentioned, we need a way to distinguish between Solaris DTrace, which requires the global .o linking approach, and other implementations. You could use CONFIG_SOLARIS and CONFIG_TRACE_DTRACE together to enable the global .o linking. Stefan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] Thoughts around dtrace linking... 2012-03-26 10:14 ` Stefan Hajnoczi @ 2012-03-26 15:28 ` Lee Essen 0 siblings, 0 replies; 9+ messages in thread From: Lee Essen @ 2012-03-26 15:28 UTC (permalink / raw) To: Stefan Hajnoczi; +Cc: qemu-devel, Andreas Färber, Stefan Hajnoczi On 26/03/2012 11:14, Stefan Hajnoczi wrote: > On Fri, Mar 23, 2012 at 2:11 PM, Lee Essen<lee.essen@nowonline.co.uk> wrote: >> >> On 23 Mar 2012, at 08:08, Stefan Hajnoczi wrote: >> >>> On Thu, Mar 22, 2012 at 05:00:53PM +0000, Lee Essen wrote: >>>> On 22/03/2012 16:28, Stefan Hajnoczi wrote: >>>>> On Wed, Mar 21, 2012 at 1:01 PM, Andreas Färber<afaerber@suse.de> wrote: >>>>>> Hi, >>>>>> >>>>>> Am 21.03.2012 11:45, schrieb Lee Essen: >>>>>>> I've been trying to find a sensible way to solve the Solaris/Illumos >>>>>>> dtrace requirement to pass all the objs to the dtrace command so that >>>>>>> the resultant object file contains all the symbols needed to properly >>>>>>> link the relevant binary. >>>>>>> >>> >>> If you're able to try out the dependency-based approach that would be a >>> good starting point. You may hit a point where it turns out to be too >>> ugly or complicated - in that case, please post your progress and maybe >>> someone can help find a way to structure it. I'm not a make guru but I >>> can try to give feedback on your patches. >>> >>> Stefan >>> >> >> Ok, here's an attempt … it works for me, but I'm not sure how it would work on a different dtrace platform so it will probably need some different guarding … but it shows what it will look like. > > The code makes sense to me. There's a feeling that there must be a > way to remove the duplication in this approach, but my make foo isn't > good enough to see how. > > As you mentioned, we need a way to distinguish between Solaris DTrace, > which requires the global .o linking approach, and other > implementations. You could use CONFIG_SOLARIS and CONFIG_TRACE_DTRACE > together to enable the global .o linking. > So there is another way that's less duplicative on the non-target stuff. If you build all of the objects needed for ALL of the binaries, you could then build the dtrace object so that it was a superset, then link with that one in all of the final binary linking. To be honest I think it's probably more confusing to do that, the previous approach is more duplicative but easier to follow. Let me pull a full patch together and see what people think. Lee. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-03-26 15:28 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-03-21 10:45 [Qemu-devel] Thoughts around dtrace linking Lee Essen 2012-03-21 13:01 ` Andreas Färber 2012-03-21 13:37 ` Lee Essen 2012-03-22 16:28 ` Stefan Hajnoczi 2012-03-22 17:00 ` Lee Essen 2012-03-23 8:08 ` Stefan Hajnoczi 2012-03-23 14:11 ` Lee Essen 2012-03-26 10:14 ` Stefan Hajnoczi 2012-03-26 15:28 ` Lee Essen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).