Bug 1420723

Summary: gcc: Missing nop instruction after recursive call corrupts TOC register on ppc64le
Product: Red Hat Enterprise Linux 7 Reporter: Florian Weimer <fweimer>
Component: gccAssignee: Jakub Jelinek <jakub>
Status: CLOSED ERRATA QA Contact: Michael Petlan <mpetlan>
Severity: low Docs Contact:
Priority: low    
Version: 7.3CC: mcermak, mpetlan, mpolacek
Target Milestone: rc   
Target Release: ---   
Hardware: ppc64le   
OS: Linux   
Whiteboard:
Fixed In Version: gcc-4.8.5-12.el7 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2017-08-01 22:35:59 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Florian Weimer 2017-02-09 12:00:54 UTC
GCC incorrectly assumes that recursive calls are always local, and elides a nop instruction after a recursive call (which is otherwise required by the ABI).

This code generation issue affects the interposition of recursive functions and can lead to crashes if the original function is called by different means (e.g. through dlsym).  The recursive call ends up calling the interposing function in a different module, but the TOC is not restored afterwards.

Details in the upstream bug report:

  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79439

Originally reported against glibc:

  https://sourceware.org/bugzilla/show_bug.cgi?id=21116

Comment 2 Michael Petlan 2017-05-31 14:17:39 UTC
The related test passes on both ppc64 and ppc64le with gcc-4.8.5-14.el7.
VERIFIED.

Comment 3 errata-xmlrpc 2017-08-01 22:35:59 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2017:2094