RHEL Engineering is moving the tracking of its product development work on RHEL 6 through RHEL 9 to Red Hat Jira (issues.redhat.com). If you're a Red Hat customer, please continue to file support cases via the Red Hat customer portal. If you're not, please head to the "RHEL project" in Red Hat Jira and file new tickets here. Individual Bugzilla bugs in the statuses "NEW", "ASSIGNED", and "POST" are being migrated throughout September 2023. Bugs of Red Hat partners with an assigned Engineering Partner Manager (EPM) are migrated in late September as per pre-agreed dates. Bugs against components "kernel", "kernel-rt", and "kpatch" are only migrated if still in "NEW" or "ASSIGNED". If you cannot log in to RH Jira, please consult article #7032570. That failing, please send an e-mail to the RH Jira admins at rh-issues@redhat.com to troubleshoot your issue as a user management inquiry. The email creates a ServiceNow ticket with Red Hat. Individual Bugzilla bugs that are migrated will be moved to status "CLOSED", resolution "MIGRATED", and set with "MigratedToJIRA" in "Keywords". The link to the successor Jira issue will be found under "Links", have a little "two-footprint" icon next to it, and direct you to the "RHEL project" in Red Hat Jira (issue links are of type "https://issues.redhat.com/browse/RHEL-XXXX", where "X" is a digit). This same link will be available in a blue banner at the top of the page informing you that that bug has been migrated.
Bug 609636 - Unwinding through prelinked shared library broken (.debug_frame)
Summary: Unwinding through prelinked shared library broken (.debug_frame)
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: systemtap
Version: 6.0
Hardware: All
OS: Linux
low
medium
Target Milestone: rc
: ---
Assignee: Frank Ch. Eigler
QA Contact: qe-baseos-tools-bugs
URL:
Whiteboard:
Depends On: 634995
Blocks:
TreeView+ depends on / blocked
 
Reported: 2010-06-30 17:46 UTC by Mark Wielaard
Modified: 2011-05-19 13:54 UTC (History)
2 users (show)

Fixed In Version: systemtap-1.4-1.el6
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2011-05-19 13:54:34 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2011:0651 0 normal SHIPPED_LIVE systemtap bug fix and enhancement update 2011-05-19 09:37:25 UTC

Description Mark Wielaard 2010-06-30 17:46:48 UTC
Description of problem:

Unwinding through a CFI that comes from the .debug_frame section in a prelinked shared library is broken (it works fine if the CFI comes from the .eh_frame sections though).

Version-Release number of selected component (if applicable):

systemtap-1.2-9.el6.i686

How reproducible:

Always on i686 (never on x86_64 - at least not with the default compiler settings).

Steps to Reproduce:
1. make installcheck RUNTESTFLAGS=exelib.exp
  
Actual results:

# of expected passes            156
# of unexpected failures        32

Expected results:

# of expected passes            188

Additional info:

Upstream fix

commit 0aab7115c0099c0b8d7579befdea8557c25078f9
Author: Mark Wielaard <mjw>
Date:   Wed Jun 30 14:27:05 2010 +0200

    Fix .debug_frame dwarf unwinding through prelinked dynamic libraries.
    
    This wasn't immediately visible since often we would pick up the .eh_frame
    CFI. But when the would pick up the CFI from the .debug_frame and the
    shared library was prelinked, we would not correctly adjust some addresses.
    
    * runtime/sym.h (_stp_module): Better explain dwarf_module_base.
    * runtime/unwind.c (adjustStartLoc): Only adjust against dwarf_module_base
      when not eh_frame.
    * translate.cxx (dump_unwindsyms): Adjust dwarf_module_base against dwbias.

Comment 2 RHEL Program Management 2010-06-30 18:03:10 UTC
This request was evaluated by Red Hat Product Management for inclusion in a Red
Hat Enterprise Linux major release.  Product Management has requested further
review of this request by Red Hat Engineering, for potential inclusion in a Red
Hat Enterprise Linux Major release.  This request is not yet committed for
inclusion.

Comment 3 Mark Wielaard 2010-07-07 20:41:47 UTC
There is a more generic update to the upstream patch:

commit 4d83bd9b6f5ccc4abd212ca5d6a6477cb52f78cc
Author: Mark Wielaard <mjw>
Date:   Mon Jul 5 21:14:42 2010 +0200

    Put generated debug_hdr in _stp_section, add sec_load_offset for adjustment.
    
    Make sure to adjust .debug_frame addresses to section load address.
    Which means keeping track of the (synthetic) .debug_frame_hdr index
    per section. For now keep track of "magic sections". Will need to
    be extended to track all loadable code sections as we do for symbol
    tables. See http://sourceware.org/ml/systemtap/2010-q3/msg00012.html
    
    * runtime/sym.h (_stp_module): Remove dwarf_module_base. Move debug_hdr
      and debug_hdr_len from here to ...
      (_stp_section): ... here. And add sec_load_offset.
    * runtime/unwind.c (adjustStartLoc): Don't use m->dwarf_module_base,
      use s->sec_load_offset.
      (_stp_search_unwind_hdr): Use s->debug_hdr and s->debug_hdr_len.
    * translate.cxx (create_debug_frame_hdr): Accept and set debug_frame_off.
      (get_unwind_data): Likewise.
      (dump_unwindsyms): Keep track of debug_frame_off. Output debug_frame_hdr
      per _stp_section if section is ".dynamic", ".absolute", ".text", or
      "_stext".

This makes it so that user space shared libraries aren't a special case anymore, but are treated similarly to other sections using .debug_frames for unwinding. This fixes a similar issue with unwinding through kernel modules.

An update to the context.exp backtrace.tcl test was also made to check the kernel unwind case:

commit ae38415f9ff7698a3ee39ef1e50ff0360fb2378a
Author: Mark Wielaard <mjw>
Date:   Tue Jul 6 12:24:19 2010 +0200

    Extend context.exp backtrace.tcl test for "perfect" DWARF backtraces.
    
    * testsuite/systemtap.context/backtrace.stp (yyy_func4): Exit at end to not
      stall expect.
    * testsuite/systemtap.context/backtrace.tcl: Add -d systemtap_test_module1
      and -d kernel for "perfect" backtraces. Keep track of module1 and kernel
      frames. Do not accept (inexact) anymore - the dwarf unwinder is "perfect"
      now. Check stap script did exit (eof).

Comment 6 Frank Ch. Eigler 2010-07-21 11:55:31 UTC
It appears that backporting the fixes into the rhel6 1.2 version is more
difficult than expected.  Let's defer this to a later version.  When/if
we rebase to systemtap-1.3 (due out in days), this will be picked up
automatically.  (Note I'm not requesting a rebase at this point for
RHEL6.0, though we can do so if requested.)

Reassigning to RHEL6.1.

Comment 10 errata-xmlrpc 2011-05-19 13:54:34 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


Note You need to log in before you can comment on or make changes to this bug.