From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw1-x1132.google.com (mail-yw1-x1132.google.com [IPv6:2607:f8b0:4864:20::1132]) by sourceware.org (Postfix) with ESMTPS id BB2023858D32 for ; Mon, 16 Jan 2023 20:02:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BB2023858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-yw1-x1132.google.com with SMTP id 00721157ae682-4d19b2686a9so267089937b3.6 for ; Mon, 16 Jan 2023 12:02:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=taaH6eUQ3S9TcnsNfWTKJoSvNVg4M4zG/0FKM2KDvSM=; b=W/UNSzuwhEac1v4xVafXKn/gNE9sGo5I18vtBV2qe07qxK7N3AkCwJqmcJ5kZa1TRX Ik20oeLbLq4dhghi27Do8MVPnXZ/L+E+E88e8AJg8HturqaPWN6S/QLbLUcZ/wu70Tiy ZiK+YzFW0d2HYJ1D+5suiBFh7ycjTlGujaIuDWRkjaQhO++Rg3/vMFhEICTz0ZNpfk7Y 69yKGMkj40d7ULPDZSWs0rZiIefiEpg+iO5q+nHcGeykP6wxppxf6f4+XTsvUOhelYxj 6Y37Rg8tAOJgnoT/X+ZS8QfmTRJpK8htEX8REd7e6B8wGbWar6s7E/3nDAvZv+NK9Oh0 tGWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=taaH6eUQ3S9TcnsNfWTKJoSvNVg4M4zG/0FKM2KDvSM=; b=dY3pWS7cyhpZKOzHA7QuqYjrbTNosXjWdUkzxwDZHrNDsx4eJKJ0uSJxvsYOfn6NBB 0x5H6DZ19xCBoOqFwmRe1uydB9SRjXTGW7unLKukDeLgNCeLOFDNGwWZBisiM88vp5Fe hCrJT20a7KRYlmOTlwZX/9wI2yS773OvtfE3SUF24pP/gA48S9JpkG5oiXpSVTE1RS/J fikX8CiX6ADAtRYIfxLcpHBct2oC9LIoRLfPGESU26vvu0q1fyp/rGCMXTy0VvLhegfE H3w6VNYPNBrkAx/telTKJ/FMjuwDOWBjqpCPIDFZx5sbVIELM8T+pENQ8a2TIPc3tV03 cM7w== X-Gm-Message-State: AFqh2koy42TJNrOWJcqUCXf8V0dO3qekuCskI+45Wgm/z5yyElU2UmJn V/JhP04sq2qX/qwK7IDwK8YUSWpcjhasj8R57Uk= X-Google-Smtp-Source: AMrXdXucntXzRzmV+deZ+9SABpstoDKH1KL0QlvSl22TxIsyE5rcNpDg0wo/ivyyFUsCplyNeVupigWMYnN49AcEFIQ= X-Received: by 2002:a81:7047:0:b0:4bc:e7dc:16bc with SMTP id l68-20020a817047000000b004bce7dc16bcmr63622ywc.368.1673899349901; Mon, 16 Jan 2023 12:02:29 -0800 (PST) MIME-Version: 1.0 References: <20230116185633.159901-1-hjl.tools@gmail.com> In-Reply-To: <20230116185633.159901-1-hjl.tools@gmail.com> From: Uros Bizjak Date: Mon, 16 Jan 2023 21:02:18 +0100 Message-ID: Subject: Re: [PATCH] x86: Disable -mforce-indirect-call for PIC in 32-bit mode To: "H.J. Lu" Cc: gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Mon, Jan 16, 2023 at 7:56 PM H.J. Lu wrote: > > -mforce-indirect-call generates invalid instruction in 32-bit MI thunk > since there are no available scratch registers in 32-bit PIC mode. > Disable -mforce-indirect-call for PIC in 32-bit mode when generating > MI thunk. > > gcc/ > > PR target/105980 > * config/i386/i386.cc (x86_output_mi_thunk): Disable > -mforce-indirect-call for PIC in 32-bit mode. > > gcc/testsuite/ > > PR target/105980 > * g++.target/i386/pr105980.C: New test. OK. Thanks, Uros. > --- > gcc/config/i386/i386.cc | 6 ++++++ > gcc/testsuite/g++.target/i386/pr105980.C | 8 ++++++++ > 2 files changed, 14 insertions(+) > create mode 100644 gcc/testsuite/g++.target/i386/pr105980.C > > diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc > index 19fb03cfd44..3cacf738c4a 100644 > --- a/gcc/config/i386/i386.cc > +++ b/gcc/config/i386/i386.cc > @@ -21480,6 +21480,7 @@ x86_output_mi_thunk (FILE *file, tree thunk_fndecl, HOST_WIDE_INT delta, > rtx this_reg, tmp, fnaddr; > unsigned int tmp_regno; > rtx_insn *insn; > + int saved_flag_force_indirect_call = flag_force_indirect_call; > > if (TARGET_64BIT) > tmp_regno = R10_REG; > @@ -21492,6 +21493,9 @@ x86_output_mi_thunk (FILE *file, tree thunk_fndecl, HOST_WIDE_INT delta, > tmp_regno = DX_REG; > else > tmp_regno = CX_REG; > + > + if (flag_pic) > + flag_force_indirect_call = 0; > } > > emit_note (NOTE_INSN_PROLOGUE_END); > @@ -21659,6 +21663,8 @@ x86_output_mi_thunk (FILE *file, tree thunk_fndecl, HOST_WIDE_INT delta, > final (insn, file, 1); > final_end_function (); > assemble_end_function (thunk_fndecl, fnname); > + > + flag_force_indirect_call = saved_flag_force_indirect_call; > } > > static void > diff --git a/gcc/testsuite/g++.target/i386/pr105980.C b/gcc/testsuite/g++.target/i386/pr105980.C > new file mode 100644 > index 00000000000..d8dbc332ea2 > --- /dev/null > +++ b/gcc/testsuite/g++.target/i386/pr105980.C > @@ -0,0 +1,8 @@ > +// { dg-do assemble { target { fpic } } } > +// { dg-options "-O0 -fpic -mforce-indirect-call" } > + > +struct A { > + virtual ~A(); > +}; > +struct B : virtual A {}; > +void bar() { B(); } > -- > 2.39.0 >