Re: [PATCH V2] libgcc: mark __hardcfr_check_fail as always_inline
>> Am 23.11.2023 um 16:17 schrieb Jose E. Marchesi : >> >> [Changes from V1: >> - Use always_inline only in BPF target.] >> >> The function __hardcfr_check_fail in hardcfr.c is internal and static >> inline. It receives many arguments, which require more than five >> registers to be passed in bpf-none-unknown targets. BPF is limited to >> that number of registers to pass arguments, and therefore libgcc fails >> to build in that target. This patch marks the function with the >> always_inline attribute, fixing the bpf build. >> >> Tested in bpf-unknown-none target and x86_64-linux-gnu host. > > Ok Pushed. Thanks. > Richard > >> libgcc/ChangeLog: >> >>* hardcfr.c (__hardcfr_check_fail): Mark as always_inline. >> --- >> libgcc/hardcfr.c | 4 >> 1 file changed, 4 insertions(+) >> >> diff --git a/libgcc/hardcfr.c b/libgcc/hardcfr.c >> index 25ff06742cb..376a36202c8 100644 >> --- a/libgcc/hardcfr.c >> +++ b/libgcc/hardcfr.c >> @@ -206,6 +206,10 @@ __hardcfr_debug_cfg (size_t const blocks, >>enabled, it also forces __hardcfr_debug_cfg (above) to be compiled into an >>out-of-line function, that could be called from a debugger. >>*/ >> + >> +#ifdef __BPF__ >> +__attribute__((__always_inline__)) >> +#endif >> static inline void >> __hardcfr_check_fail (size_t const blocks ATTRIBUTE_UNUSED, >> vword const *const visited ATTRIBUTE_UNUSED, >> -- >> 2.30.2 >>
Re: [PATCH V2] libgcc: mark __hardcfr_check_fail as always_inline
> Am 23.11.2023 um 16:17 schrieb Jose E. Marchesi : > > [Changes from V1: > - Use always_inline only in BPF target.] > > The function __hardcfr_check_fail in hardcfr.c is internal and static > inline. It receives many arguments, which require more than five > registers to be passed in bpf-none-unknown targets. BPF is limited to > that number of registers to pass arguments, and therefore libgcc fails > to build in that target. This patch marks the function with the > always_inline attribute, fixing the bpf build. > > Tested in bpf-unknown-none target and x86_64-linux-gnu host. Ok Richard > libgcc/ChangeLog: > >* hardcfr.c (__hardcfr_check_fail): Mark as always_inline. > --- > libgcc/hardcfr.c | 4 > 1 file changed, 4 insertions(+) > > diff --git a/libgcc/hardcfr.c b/libgcc/hardcfr.c > index 25ff06742cb..376a36202c8 100644 > --- a/libgcc/hardcfr.c > +++ b/libgcc/hardcfr.c > @@ -206,6 +206,10 @@ __hardcfr_debug_cfg (size_t const blocks, >enabled, it also forces __hardcfr_debug_cfg (above) to be compiled into an >out-of-line function, that could be called from a debugger. >*/ > + > +#ifdef __BPF__ > +__attribute__((__always_inline__)) > +#endif > static inline void > __hardcfr_check_fail (size_t const blocks ATTRIBUTE_UNUSED, > vword const *const visited ATTRIBUTE_UNUSED, > -- > 2.30.2 >
[PATCH V2] libgcc: mark __hardcfr_check_fail as always_inline
[Changes from V1: - Use always_inline only in BPF target.] The function __hardcfr_check_fail in hardcfr.c is internal and static inline. It receives many arguments, which require more than five registers to be passed in bpf-none-unknown targets. BPF is limited to that number of registers to pass arguments, and therefore libgcc fails to build in that target. This patch marks the function with the always_inline attribute, fixing the bpf build. Tested in bpf-unknown-none target and x86_64-linux-gnu host. libgcc/ChangeLog: * hardcfr.c (__hardcfr_check_fail): Mark as always_inline. --- libgcc/hardcfr.c | 4 1 file changed, 4 insertions(+) diff --git a/libgcc/hardcfr.c b/libgcc/hardcfr.c index 25ff06742cb..376a36202c8 100644 --- a/libgcc/hardcfr.c +++ b/libgcc/hardcfr.c @@ -206,6 +206,10 @@ __hardcfr_debug_cfg (size_t const blocks, enabled, it also forces __hardcfr_debug_cfg (above) to be compiled into an out-of-line function, that could be called from a debugger. */ + +#ifdef __BPF__ +__attribute__((__always_inline__)) +#endif static inline void __hardcfr_check_fail (size_t const blocks ATTRIBUTE_UNUSED, vword const *const visited ATTRIBUTE_UNUSED, -- 2.30.2