Bug 670647

Summary: Markers using %rbx register incorrectly masked to low byte
Product: Red Hat Enterprise Linux 6 Reporter: William Cohen <wcohen>
Component: systemtapAssignee: Frank Ch. Eigler <fche>
Status: CLOSED ERRATA QA Contact: qe-baseos-tools-bugs
Severity: medium Docs Contact:
Priority: low    
Version: 6.1CC: dsmith, fche, jistone, mjw, mjw, pmuller, roland, syeghiay, wcohen
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: systemtap-1.4-2.el6 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: 670646 Environment:
Last Closed: 2011-05-19 13:54:51 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Bug Depends On: 670646    
Bug Blocks:    

Description William Cohen 2011-01-18 21:51:24 UTC
+++ This bug was initially created as a clone of Bug #670646 +++

When attempting to build an executable of Ruby that includes systemtap marker
using SystemTap 1.4 some arguments for markers were truncated to 8 bits in
size.

The problem is caused by the
sdt_uprobe_var_expanding_visitor::get_register_width() function "%rbx" as being
a bytes sized (8 bit) register rather that a full 64-bit registers.


To replicate problem on rhel6 or fedora:

1) install systemtap-1.4 on the machine
2a) make sure that the systemtap dtrace is available in /usr/bin/dtrace
2b) make sure that the uprobes modules is available, as root:

  make -C /usr/share/systemtap/runtime/uprobes

3) download the 
http://people.redhat.com/wcohen/ruby-1.8.7.299-6.el6.dtrace_4.src.rpm
3) build and install the ruby rpms
4) Verify that probes are available with:

 stap  -L  'process("/usr/lib64/libruby.so.1.8").mark("*")

5) Use the following script to demonstrate the problem 

 stap  -e  'probe
process("/usr/lib64/libruby.so.1.8").function("rb_class2name").return
{printf("$return=0x%x %s\n", $return, user_string($return))} probe
process("/usr/lib64/libruby.so.1.8").mark("function__entry"){printf("$arg1=0x%x\n",
$arg1)}'

in another window run a ruby program for example

 ruby ~/rpmbuild/BUILD/ruby-1.8.7.299/ruby-1.8.7-p299/sample/biorhythm.rb 

See something like the following out from the systemtap script where $arg1 is
just the low 8 bits of the pointer:

$return=0x9d4450 Hash
$arg1=0x50
$return=0x9c5c30 String
$arg1=0x30

Comment 1 Frank Ch. Eigler 2011-01-18 21:56:50 UTC
problem well-understood and patch nearly in hand; need to fix it to avoid generating erroneous trace data

Comment 4 errata-xmlrpc 2011-05-19 13:54:51 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on therefore solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHBA-2011-0651.html