Hi, Martin:
I have two questions on this: 1. What’s the motivation to enable -flive-patching with -flto? Is there any application that will try -flive-patching with -flto now? 2. Why only enable -flive-patching=inline-clone with -flto? thanks. Qing > On Oct 5, 2022, at 7:41 AM, Martin Liška <mli...@suse.cz> wrote: > > There's no fundamental reason why -flive-patching=inline-clone can't > coexist with -flto. Yes, one can theoretically have many more clone > function that includes a live patch. It is pretty much the same > as in-module inlining. > > Patch can bootstrap on x86_64-linux-gnu and survives regression tests. > > Ready to be installed? > Thanks, > Martin > > gcc/ChangeLog: > > * opts.cc (finish_options): Print sorry message only > for -flive-patching=inline-only-static. > > gcc/testsuite/ChangeLog: > > * gcc.dg/live-patching-2.c: Update scanned pattern. > * gcc.dg/live-patching-5.c: New test. > --- > gcc/opts.cc | 5 +++-- > gcc/testsuite/gcc.dg/live-patching-2.c | 4 ++-- > gcc/testsuite/gcc.dg/live-patching-5.c | 8 ++++++++ > 3 files changed, 13 insertions(+), 4 deletions(-) > create mode 100644 gcc/testsuite/gcc.dg/live-patching-5.c > > diff --git a/gcc/opts.cc b/gcc/opts.cc > index eb5db01de17..ae079fcd20e 100644 > --- a/gcc/opts.cc > +++ b/gcc/opts.cc > @@ -1288,8 +1288,9 @@ finish_options (struct gcc_options *opts, struct > gcc_options *opts_set, > "%<-fsanitize=kernel-address%>"); > > /* Currently live patching is not support for LTO. */ > - if (opts->x_flag_live_patching && opts->x_flag_lto) > - sorry ("live patching is not supported with LTO"); > + if (opts->x_flag_live_patching == LIVE_PATCHING_INLINE_ONLY_STATIC && > opts->x_flag_lto) > + sorry ("live patching (with %qs) is not supported with LTO", > + "inline-only-static"); > > /* Currently vtable verification is not supported for LTO */ > if (opts->x_flag_vtable_verify && opts->x_flag_lto) > diff --git a/gcc/testsuite/gcc.dg/live-patching-2.c > b/gcc/testsuite/gcc.dg/live-patching-2.c > index 0dde4e9e0c0..1c4f9229b82 100644 > --- a/gcc/testsuite/gcc.dg/live-patching-2.c > +++ b/gcc/testsuite/gcc.dg/live-patching-2.c > @@ -1,10 +1,10 @@ > /* { dg-do compile } */ > /* { dg-require-effective-target lto } */ > -/* { dg-options "-O2 -flive-patching -flto" } */ > +/* { dg-options "-O2 -flive-patching=inline-only-static -flto" } */ > > int main() > { > return 0; > } > > -/* { dg-message "sorry, unimplemented: live patching is not supported with > LTO" "-flive-patching and -flto together" { target *-*-* } 0 } */ > +/* { dg-message "sorry, unimplemented: live patching \\(with > 'inline-only-static'\\) is not supported with LTO" "-flive-patching and -flto > together" { target *-*-* } 0 } */ > diff --git a/gcc/testsuite/gcc.dg/live-patching-5.c > b/gcc/testsuite/gcc.dg/live-patching-5.c > new file mode 100644 > index 00000000000..098047a36cd > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/live-patching-5.c > @@ -0,0 +1,8 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target lto } */ > +/* { dg-options "-O2 -flive-patching -flto" } */ > + > +int main() > +{ > + return 0; > +} > -- > 2.37.3 >