PING^2: [PATCH] i386; Add -mmanual-endbr and cf_check function attribute

H.J. Lu hjl.tools@gmail.com
Sat Feb 23 04:49:00 GMT 2019


On Fri, Feb 22, 2019 at 11:18 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Fri, Dec 14, 2018 at 1:28 PM Jeff Law <law@redhat.com> wrote:
> >
> > On 12/11/18 9:03 AM, H.J. Lu wrote:
> > > On Mon, Dec 3, 2018 at 5:45 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> > >> On Mon, Jun 18, 2018 at 2:20 AM Richard Biener
> > >> <richard.guenther@gmail.com> wrote:
> > >>> On Fri, Jun 15, 2018 at 2:59 PM H.J. Lu <hongjiu.lu@intel.com> wrote:
> > >>>> Currently GCC inserts ENDBR instruction at entries of all non-static
> > >>>> functions, unless LTO compilation is used.  Marking all functions,
> > >>>> which are not called indirectly with nocf_check attribute, is not
> > >>>> ideal since 99% of functions in a program may be of this kind.
> > >>>>
> > >>>> This patch adds -mmanual-endbr and cf_check function attribute.  They
> > >>>> can be used together with -fcf-protection such that ENDBR instruction
> > >>>> is inserted only at entries of functions with cf_check attribute.  It
> > >>>> can limit number of ENDBR instructions to reduce program size.
> > >>>>
> > >>>> OK for trubk?
> > >>> I wonder if the linker could assist with ENDBR creation by
> > >>> redirecting all non-direct call relocs to a linker-generated
> > >>> stub with ENBR and a direct branch?
> > >>>
> > >> The goal of this patch is to add as few as ENDBR as possible
> > >> to reduce program size as much as possible.   Also there is no
> > >> relocation for indirect branch via register.
> > >>
> > > Hi Honza, Jakub, Jeff, Richard,
> > >
> > > Here is the rebased patch.  Can you guys take a look?
> > >
> > > Thanks.
> > >
> > >
> > > -- H.J.
> > >
> > >
> > > 0001-i386-Add-mmanual-endbr-and-cf_check-function-attribu.patch
> > >
> > > From 5934c6be6495b2d6f278646e25f9e684f6610e2b Mon Sep 17 00:00:00 2001
> > > From: "H.J. Lu" <hjl.tools@gmail.com>
> > > Date: Thu, 14 Jun 2018 09:19:27 -0700
> > > Subject: [PATCH] i386; Add -mmanual-endbr and cf_check function attribute
> > >
> > > Currently GCC inserts ENDBR instruction at entries of all non-static
> > > functions, unless LTO compilation is used.  Marking all functions,
> > > which are not called indirectly with nocf_check attribute, is not
> > > ideal since 99% of functions in a program may be of this kind.
> > >
> > > This patch adds -mmanual-endbr and cf_check function attribute.  They
> > > can be used together with -fcf-protection such that ENDBR instruction
> > > is inserted only at entries of functions with cf_check attribute.  It
> > > can limit number of ENDBR instructions to reduce program size.
> > >
> > > gcc/
> > >
> > >       * config/i386/i386.c (rest_of_insert_endbranch): Insert ENDBR
> > >       at the function entry only when -mmanual-endbr isn't used or
> > >       there is cf_check function attribute.
> > >       (ix86_attribute_table): Add cf_check.
> > >       * config/i386/i386.opt: Add -mmanual-endbr.
> > >       * doc/extend.texi: Document cf_check attribute.
> > >       * doc/invoke.texi: Document -mmanual-endbr.
> > >
> > > gcc/testsuite/
> > >
> > >       * gcc.target/i386/cf_check-1.c: New test.
> > >       * gcc.target/i386/cf_check-2.c: Likewise.
> > >       * gcc.target/i386/cf_check-3.c: Likewise.
> > >       * gcc.target/i386/cf_check-4.c: Likewise.
> > >       * gcc.target/i386/cf_check-5.c: Likewise.
> > OK.
> >
> > Though I'm not sure how valuable this is in practice.  Yea, it saves
> > some space at the start of functions, but I find myself wondering more
> > and more if we should be pushing folks towards LTO for a variety of reasons.
> >
>
> Hi Jeff,
>
> Here is an update for this new option to move  -mmanual-endbr check to
> pass_insert_endbranch::gate.  I'd like to get it into GCC 9.
>
>

I withdraw this patch.  It is covered by

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


-- 
H.J.



More information about the Gcc-patches mailing list