This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

dynamic tracing problem


I am attempting to use inline assembly to implement a tracing mechanism that
results in code something like this (asm syntax not meant to be exact):

"pre" C code...

/* via inline asm */
j trace
.pushsubsection 1000
trace:

"trace" C code...

/* via inline asm */
j post
.popsubsection
post:

"post" C code...

The idea is that the trace code can be nullified by changing the "j trace"
instruction to a NOP or activated by putting the jump back.

I have an implementation and it almost works.  It malfunctions when applied on a
large scale.  I assume it is malfunctioning because gcc has placed essential
side-effects in the trace block.

How can I tell gcc not to move anything past the first asm?

How can I tell it to not expect any computations in the trace block to get past
the second asm?

Both asm statements are currently volatile.  I have experimented a little with
"memory" clobbers without success.  I need some help from an expert here.

I am using gcc 4.1 and 4.3.3 if it matters.

Joe Buehler



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]