On Tue, Aug 10, 2021 at 5:45 PM Jose E. Marchesi <jose.march...@oracle.com> wrote: > > > > On Thu, Aug 5, 2021 at 2:54 AM Indu Bhagat via Gcc-patches > > <gcc-patches@gcc.gnu.org> wrote: > >> > >> -mcore in the BPF backend enables code generation for the CO-RE usecase. > >> LTO is > >> disabled for CO-RE compilations. > > > > -mcore reads like "core", why not -mco-re? Anyway, ... > > > >> gcc/ChangeLog: > >> > >> * config/bpf/bpf.c (bpf_option_override): For BPF backend, disable > >> LTO > >> support when compiling for CO-RE. > >> * config/bpf/bpf.opt: Add new command line option -mcore. > >> > >> gcc/testsuite/ChangeLog: > >> > >> * gcc.target/bpf/core-lto-1.c: New test. > >> --- > >> gcc/config/bpf/bpf.c | 15 +++++++++++++++ > >> gcc/config/bpf/bpf.opt | 4 ++++ > >> gcc/testsuite/gcc.target/bpf/core-lto-1.c | 9 +++++++++ > >> 3 files changed, 28 insertions(+) > >> create mode 100644 gcc/testsuite/gcc.target/bpf/core-lto-1.c > >> > >> diff --git a/gcc/config/bpf/bpf.c b/gcc/config/bpf/bpf.c > >> index e635f9e..028013e 100644 > >> --- a/gcc/config/bpf/bpf.c > >> +++ b/gcc/config/bpf/bpf.c > >> @@ -158,6 +158,21 @@ bpf_option_override (void) > >> { > >> /* Set the initializer for the per-function status structure. */ > >> init_machine_status = bpf_init_machine_status; > >> + > >> + /* To support the portability needs of BPF CO-RE approach, BTF debug > >> + information includes the BPF CO-RE relocations. The information > >> + necessary for these relocations is added to the CTF container by the > >> + BPF backend. Enabling LTO poses challenges in the generation of the > >> BPF > >> + CO-RE relocations because if LTO is in effect, they need to be > >> + generated late in the LTO link phase. This in turn means the > >> compiler > >> + needs to provide means to combine the early and late BTF debug info, > >> + similar to DWARF debug info. > >> + > >> + In any case, in absence of linker support for BTF sections at this > >> time, > >> + it is acceptable to simply disallow LTO for BPF CO-RE compilations. > >> */ > >> + > >> + if (flag_lto && TARGET_BPF_CORE) > >> + error ("BPF CO-RE does not support LTO"); > > > > ... these "errors" should use sorry ("...") which annotate places where the > > compiler has to give up because sth is not implemented. > > > > otherwise this patch needs BPF maintainer review of course. > > I agree -mco-re is more clear than -mcore. > > Other than that this looks OK BPF-wise.
So in other context I wonder if CO-RE is really target specific, it's a flavor of the BTF debug format, so shouldn't it be -gbtf-core or sth like that? Richard. > >> } > >> > >> #undef TARGET_OPTION_OVERRIDE > >> diff --git a/gcc/config/bpf/bpf.opt b/gcc/config/bpf/bpf.opt > >> index 916b53c..e8926f5 100644 > >> --- a/gcc/config/bpf/bpf.opt > >> +++ b/gcc/config/bpf/bpf.opt > >> @@ -127,3 +127,7 @@ Generate little-endian eBPF. > >> mframe-limit= > >> Target Joined RejectNegative UInteger IntegerRange(0, 32767) > >> Var(bpf_frame_limit) Init(512) > >> Set a hard limit for the size of each stack frame, in bytes. > >> + > >> +mcore > >> +Target Mask(BPF_CORE) > >> +Generate all necessary information for BPF Compile Once - Run Everywhere. > >> diff --git a/gcc/testsuite/gcc.target/bpf/core-lto-1.c > >> b/gcc/testsuite/gcc.target/bpf/core-lto-1.c > >> new file mode 100644 > >> index 0000000..a90dc5b > >> --- /dev/null > >> +++ b/gcc/testsuite/gcc.target/bpf/core-lto-1.c > >> @@ -0,0 +1,9 @@ > >> +/* Test -mcore with -flto. > >> + > >> + -mcore is used to generate information for BPF CO-RE usecase. To > >> support > >> + the generataion of the .BTF and .BTF.ext sections in GCC, -flto is > >> disabled > >> + with -mcore. */ > >> + > >> +/* { dg-do compile } */ > >> +/* { dg-error "BPF CO-RE does not support LTO" "" { target bpf-*-* } 0 } > >> */ > >> +/* { dg-options "-gbtf -mcore -flto" } */ > >> -- > >> 1.8.3.1 > >>