From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17396 invoked by alias); 26 Jul 2013 20:43:54 -0000 Mailing-List: contact glibc-bugs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: glibc-bugs-owner@sourceware.org Received: (qmail 17308 invoked by uid 48); 26 Jul 2013 20:43:51 -0000 From: "jsm28 at gcc dot gnu.org" To: glibc-bugs@sourceware.org Subject: [Bug ports/15792] New: ARM dynamic linker should save/restore coprocessor registers Date: Fri, 26 Jul 2013 20:43:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: glibc X-Bugzilla-Component: ports X-Bugzilla-Version: 2.17 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: jsm28 at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at sourceware dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter cc cf_gcchost Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2013-07/txt/msg00162.txt.bz2 http://sourceware.org/bugzilla/show_bug.cgi?id=15792 Bug ID: 15792 Summary: ARM dynamic linker should save/restore coprocessor registers Product: glibc Version: 2.17 Status: NEW Severity: normal Priority: P2 Component: ports Assignee: unassigned at sourceware dot org Reporter: jsm28 at gcc dot gnu.org CC: carlos at redhat dot com, roland at gnu dot org Host: arm*-*-* The ARM dynamic linker should save and restore the call-clobbered NEON registers, d0-d7 and d16-d31, if they exist, in _dl_runtime_resolve and _dl_runtime_profile and the TLS descriptors code. This requires runtime checks for whether the registers exist using HWCAPs (unless compiler predefines allow such checks to be elided). (Likewise, for iWMMXt call-clobbered registers.) For d0-d7 this is needed when built with the VFP ABI because they are used for argument passing in that case. For all the call-clobbered registers, in all cases, this is needed because of restricted clobber sets for the TLS descriptor functions and for functions such as __aeabi_memcpy that may be called via the dynamic linker. IFUNCs are the main practical way of triggering this issue, at least for the case of d0-d7. It might be worth explicitly disabling VFP and iWMMXt for the dynamic linker if possible to avoid the cost of checking for and saving the other registers on every program execution to address what's a fairly theoretical issue - if the dynamic linker (including memcpy etc. called therein) never uses VFP or iWMMXt registers, then the only case needing extra register saving is the case of building for the VFP ABI, which needs to save d0-d7 only because of the IFUNC issue, with no dynamic checks needed. -- You are receiving this mail because: You are on the CC list for the bug.