[Bug tapsets/11708] SDT on i686 is register-poor

fche at redhat dot com sourceware-bugzilla@sourceware.org
Thu Jun 17 01:34:00 GMT 2010


------- Additional Comments From fche at redhat dot com  2010-06-16 15:29 -------
Actually, gazing at the assembly code generated from a less-restricted
"g" constraint, the problem is not exactly the shortage of registers.
The problem is that gcc -O2/-O3 was able to const-propagate/inline the
STAP_PROBE* parameters as literal integer constants.  The "ro" constraint
doesn't let those pass.

In the debuginfo-less case (STAP_SDT_V2), we could accept such literal integers
(thus a weaker constraint such as "ron"), if we parsed $NNN in the translator,
which we don't.

In the STAP_SDT_V1 case though, any place where dwarf location expressions
can extract a value would be good enough.  Modern gcc can encode literals
in dwarf, so "ron" or somesuch would work fine there.  Older gcc would
probably fail, but then again older (rhel5) gcc doesn't const-propagate
this aggressively.

The best option seems to:
* broaden the constraint to "ron" for all platforms
* teach the translator to accept "$NNN" literals in the STAP_SDT_V2 case

(Note that it's not enough to go back to "g" on i686.  We'd still get
literals in the STAP_SDT_V2 case that the translator currently fails
to parse.)


-- 


http://sourceware.org/bugzilla/show_bug.cgi?id=11708

------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the Systemtap mailing list