Messages in this thread | | | From | Alexander Lobakin <> | Subject | Re: [PATCH 2/2] vmlinux.lds.h: add HEADERED_SECTION_* macros | Date | Fri, 16 Dec 2022 19:11:07 +0100 |
| |
> From: Jim Cromie <jim.cromie@gmail.com> > Date: Wed, 16 Nov 2022 17:20:22 -0700 > > > These macros elaborate on BOUNDED_SECTION_(PRE|POST)_LABEL macros, > > prepending an optional KEEP(.gnu.linkonce##_sec_) reservation, and a > > linker-symbol to address it. > > > > This allows a developer to define a header struct (which must fit with > > the section's base struct-type), and could contain: > > [...] > > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > > index 85d5d5b203dc..a3b6aa30a525 100644 > > --- a/include/asm-generic/vmlinux.lds.h > > +++ b/include/asm-generic/vmlinux.lds.h > > @@ -214,6 +214,21 @@ > > > > #define BOUNDED_SECTION(_sec) BOUNDED_SECTION_BY(_sec, _sec) > >
Also, those two pasting ops below:
> > +#define HEADERED_SECTION_PRE_LABEL(_sec_, _label_, _BEGIN_, _END_, _HDR_) \ > > + _HDR_##_label_ = .; \ > > + KEEP(*(.gnu.linkonce.##_sec_)) \
^^
> > + BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, _BEGIN_, _END_) > > + > > +#define HEADERED_SECTION_POST_LABEL(_sec_, _label_, _BEGIN_, _END_, _HDR_) \ > > + _label_##_HDR_ = .; \ > > + KEEP(*(.gnu.linkonce.##_sec_)) \
^^
will produce incorrect results when @_sec_ starts with a dot (not a rare thing for section names):
HEADERED_SECTION_BY(.entry_sites, _entry_sites)
vmlinux.map:
.entry_sites 0xffffffff83c89ca0 0x37118 load address 0x0000000003c89ca0 0xffffffff83c89ca0 __header_entry_sites = . *(.gnu.linkonce. .entry_sites)
here ^^^
.entry_sites 0xffffffff83c89ca0 0x37118 vmlinux.o 0xffffffff83cc0db8 __start_entry_sites = . *(.entry_sites) 0xffffffff83cc0db8 __stop_entry_sites = .
^ as a result, all .entry_sites entries went to the "header" instead of the "body".
Sorta dangerous stuff as for me, maybe that could be handled differently?
> > + BOUNDED_SECTION_POST_LABEL(_sec_, _label_, _BEGIN_, _END_) > > + > > +#define HEADERED_SECTION_BY(_sec_, _label_) \ > > + HEADERED_SECTION_PRE_LABEL(_sec_, _label_, __start, __stop) > > Now HEADERED_SECTION_PRE_LABEL() takes 5 arguments, but this line > passes only 4 to it. This went unnoticed probably due to that the > macro is not used anywhere, thus can't trigger a compiler error. > Would you prefer to fix it yourself or me to send the fix?[*] > > > + > > +#define HEADERED_SECTION(_sec) HEADERED_SECTION_BY(_sec, _sec) > > + > > #ifdef CONFIG_TRACE_BRANCH_PROFILING > > #define LIKELY_PROFILE() \ > > BOUNDED_SECTION_BY(_ftrace_annotated_branch, _annotated_branch_profile) > > -- > > 2.38.1 > > [*] If it needs fixing at all -- some people over the MLs say that > if there's no trigger, then there's nothing to fix :clownface: > > Thanks, > Olek
Thanks, Olek
| |