From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 2AD393940CE2; Sat, 14 Mar 2020 22:59:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2AD393940CE2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1584226788; bh=tPf62MKSdirMR+jen4nzzaXw4rA0uwNyLqhMfRGl/Kk=; h=From:To:Subject:Date:From; b=Zmthtl8CHjywqoZHb5NlGEbki9Q9a8tI1wnDuC2YAILD4xhp5pYI65t4XAoUHkQS7 mDz8iCnF1s3d2BYRoW/zNh0yR3BC1BLuVoZUWzVZuHLMxrFi8ca3Garyh8o1zkTCC9 JEfbl9vbs9+xKH+LWiVrQpHVLgP7S2yJ/dz0uvQM= From: "dje at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/94177] New: TLS global-dynamic model clobbers function parameter on AIX Date: Sat, 14 Mar 2020 22:59:47 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 10.0 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: dje at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status keywords bug_severity priority component assigned_to reporter target_milestone cf_gcctarget Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Mar 2020 22:59:48 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D94177 Bug ID: 94177 Summary: TLS global-dynamic model clobbers function parameter on AIX Product: gcc Version: 10.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: dje at gcc dot gnu.org Target Milestone: --- Target: powerpc-ibm-aix* In global-dynamic model, if a TLS variable first is referenced in the argum= ent list to a function call, GCC can load the parameters to the call before invoking the function to legitimize the TLS variable, and the legitimize function clobbers some of the same function argument registers. extern int foo (char *, int *, int); int main() { static __thread int result; foo ("%p %u\n", &result, 169); return 0; } $ gcc -fPIC -S bug_tls.c li 5,169 lwz 10,LCM..1(2) lwz 9,LC..1(2) mr 3,10 mr 4,9 bla __tls_get_addr <*** clobbers r4, r5 already loaded with argumen= ts to foo mr 9,3 mr 4,9 lwz 3,LC..2(2) bl .foo The pattern that generates __tls_get_addr shows that it clobbers r4 and r5 (define_insn "tls_get_addr_internal" [(set (reg:P 3) (unspec:P [(reg:P 3) (reg:P 4)] UNSPEC_TLSTLS)) (clobber (reg:P 0)) (clobber (reg:P 4)) (clobber (reg:P 5)) (clobber (reg:P 11)) (clobber (reg:CC CR0_REGNO)) (clobber (reg:P LR_REGNO))] "TARGET_XCOFF && HAVE_AS_TLS" "bla __tls_get_addr") but GCC overwrites the parameters in calls.c during initial RTL generation.=